2013-02-25 82 views
1

我使用的是C++代碼here。但這裏使用的共享語音識別運行自己的命令,如移動,最小化,刪除。我需要在不調用MS語音識別程序的情況下創建它。使用SAPI創建個人語音識別系統

hr = cpEngine.CoCreateInstance(CLSID_SpSharedRecognizer); 

上面這一行創建共享實例。

我試着用CLSID_SpInprocRecognizer代替,但不能正確的。我對此很陌生。 有沒有辦法做到這一點?

回答

4

我在這裏遇到同樣的問題,並花了很多時間試圖找到答案。

  1. 不要使用過程中的識別器,如果你想擺脫MS語音識別程序

hr = cpRecognizer.CoCreateInstance(CLSID_SpInprocRecognizer);

的:幸運的是,我已經通過以下步驟得到了解決2.進程內識別器沒有設置默認輸入源或識別引擎,您需要將它們設置爲讓進程內識別器進行偵聽。

CComPtr<ISpObjectToken>  cpObjectToken; 
CComPtr<ISpAudio>   cpAudio; 

// Get the default audio input token. 
hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpObjectToken); 

// Set the audio input to our token. 
hr = cpRecognizer->SetInput(cpObjectToken, TRUE); 
// Set up the inproc recognizer audio input with an audio input object. 

// Create the default audio input object. 
hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio); 

// Set the audio input to our object. 
hr = cpRecognizer->SetInput(cpAudio, TRUE); 

3.指定要使用的特定語音識別引擎。如果沒有指定,它將使用默認值。如果它沒有被調用,它仍然使用默認的(我推薦這條線,仍然工作正常)。

hr = cpRecognizer->SetRecognizer(NULL); 

就是這樣!它打開了一個默認的美國英語識別引擎,並且很快就提取了我的命令。

參考:

http://stackoverflow.com/questions/18448394/inproc-speech-recognition-engine-in-python 
http://msdn.microsoft.com/en-us/library/ms718864%28v=vs.85%29.aspx 
http://msdn.microsoft.com/en-us/library/ms718866%28v=vs.85%29.aspx 
+0

哇從過去的爆炸。我在沒有進程中的識別器的情況下完成了我的項目。但是會嘗試用這個來重寫它。 – AlphaWolf 2013-12-11 04:34:44

+0

這裏的訣竅是讓識別器開始聆聽,第2步這樣做。玩的開心! :p – sophia 2013-12-16 20:47:56