2012-04-04 108 views
1

我正在使用CMU sphinx庫來錄製聲音。當我開始我的Java應用程序,我分配的識別器和配置管理器只有一次如下:可以使用麥克風錄製一次聲音,但不能第二次啓動麥克風

 cm = new ConfigurationManager(soundPart.class.getResource("hellongram.config.xml")); 
     recognizer = (Recognizer) cm.lookup("recognizer"); 
     recognizer.allocate(); 

而且,我在我的應用程序中的記錄聲音按鈕。當用戶點擊它時,我使用下面的代碼來錄製聲音:

Microphone microphone = (Microphone)MR.sp.cm.lookup("microphone"); 
    if (!microphone.startRecording()) { 
     System.out.println("Cannot start microphone."); 
     MR.sp.recognizer.deallocate(); 

     System.exit(1); 
    } 
    //MR.sp.pleaseStartSpeaking.setVisible(true); 
    while(true){ 
    Result result = MR.sp.recognizer.recognize(); 
    if(result!=null){ 
     String resultText = result.getBestFinalResultNoFiller(); 
     MR.sp.lblYouSearched.setVisible(true); 
     MR.sp.lblNewLabel.setVisible(true); 
     MR.sp.lblNewLabel.setText(resultText); 
     MR.textQuery = resultText.toLowerCase(); 
     break; 
    } 
    } 

這是我第一次使用它。但是,如果用戶第二次單擊錄製按鈕,則會引發錯誤「無法啓動麥克風」。我在這裏做錯了什麼。爲什麼我無法第二次獲得麥克風

回答

0

您可能想查看麥克風的RecordingThread here以及重新閱讀代碼爲here的頁面,因爲您使用的代碼與所需代碼之間的差異要做的是你使用的代碼不會啓動和停止麥克風,它會連續記錄。 RecordingThread看起來就像是你之後的事情,因爲你可以輕鬆地調用start()和stop()來獲得你想要的內容。

+0

請你給我一些示例代碼。只是看文檔並沒有多大幫助 – Programmer 2012-04-05 04:26:14

+0

此外,在我上面的代碼中,每當我想記錄時,我都會得到麥克風。這有什麼問題? – Programmer 2012-04-05 04:33:37