2014-03-29 54 views
3

我正在研究VS 2012中允許語音輸入的C#WPF應用程序。我使用SpeechRecognitionEngine而不是SpeechRecognizer,因爲後者在應用程序和Windows識別器之間存在一些衝突。當麥克風插入時它工作得非常好。但是,一旦沒有麥克風(我一直在禁用任何無線音頻I/O的公共計算機上測試此項),程序無法正確執行:實際上所有SetInputToDefaultAudioDevice方法不運行後的代碼。我用以下代碼測試了這個:沒有麥克風? SpeechRecognitionEngine SetInputToDefaultAudioDevice()問題

private void NewWindowLoad(object sender, RoutedEventArgs e) 
    { 
     SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); 

     // Accept input from the default audio device 
     sre.SetInputToDefaultAudioDevice(); 
     MessageBox.Show("HELLO"); 
    } 

在這種情況下,沒有MessageBox出現。很明顯,這些代碼被剝離到了最基本的部分 - 實際上,應用程序實際上是用語言做了一些事情......但這不是問題。

我沒有收到任何運行該方法的錯誤或異常。發生的唯一例外是稍後調用SpeechRecognitionEngine的RecognizeAsync()方法。有沒有辦法在運行此代碼之前檢查是否有實際可用的音頻輸入設備?或者,還有另一種方法可以做到這一點?應用程序應該能夠在音頻輸入可能或不可用的任何支持的操作系統上運行。

回答

1

waveInGetNumDevs將返回波輸入設備的數量。如果它爲零,則沒有音頻輸入設備。這沒有直接的C#綁定,但是P/Invoke非常簡單:

[DllImport("winmm.dll")] 
public static extern int waveInGetNumDevs();