我試圖讓SAPI 5.4(也是MS Speech Platform SDK v11)對從Skype進入的音頻執行連續的語音識別呼叫。使用SAPI 5.4或MS Speech SDK v11在C#語音識別中使用來自Skype的MemoryStream呼叫
我可以使用SKYPE4COMLib抓取來自Skype的音頻,並通過發出ALTER CALL指令將其推送到TCP端口。您可以將Skype音頻指向文件或TCP套接字。文件工作正常,但我希望它運行識別,所以使用TCP套接字。
然後,我構建了一個TCP偵聽器來收集傳入數據(音頻原始格式)並將字節數組作爲MemoryStream傳遞給SAPI。我已經設置SAPI,以期望16bit,16khz,單聲道,PCM格式的原始音頻。但是,識別事件從未發生?!
我嘗試將原始音頻保存到磁盤,然後將其讀入SAPI,並且它工作正常......所以數據本身很好,Skype正確地在音頻上發送。但是,這並不能讓我做我需要的持續認可。
使用WAV文件或從磁盤或麥克風加載的原始文件,SAPI識別碼可正常工作。我只是無法從MemoryStream中獲得它的工作。
我發現了這篇相似的文章,似乎沒有任何建議對我有用,而且討論似乎已經平靜下來。
Streaming input to System.Speech.Recognition.SpeechRecognitionEngine
有沒有人對如何順利拿到SAPI不斷從發送,在C#中的MemoryStream原始音頻識別語音的指導意見?
如果你想要做連續的認可,你爲什麼用'MemoryStream'緩衝呢?你應該直接給SAPI一個'NetworkStream',可選地在它前面有一個BufferedStream。您可能需要從'NetworkStream'派生來覆蓋'Seek'。 –
我嘗試了這個問題中的鏈接建議,但我無法得到它的工作。這是你的建議嗎? NetworkStream netStream = new NetworkStream(socket,true); BufferedStream buffStream = new BufferedStream(netStream,8000 * 16 * 1); appRecognizer.SetInputToAudioStream(buffStream,formatInfo); – timemirror
您需要從流中派生並覆蓋Seek,如上所述。 –