我在這裏創建了一個TS3插件,它使用 System::Speech::Recognition
作爲其SpeechRecognitinEngine
。現在,我爲SpeechRecognized
事件創建一個EventHandler。語音識別不會在C++/CLI DLL中觸發EventHandler
那麼,我的日誌記錄(和插件的操作 - 無)告訴我,事件實際上從來沒有觸發過,即使你開始和停止與(有些)有效的(部分)語法交談。
我不知道這是爲什麼。它發生在用C++ CLI編寫的DLL中。 現在,我的理論是,dll不支持事件handerls ...可能有可能嗎?
void recogn_speech() {
uint64 schid = ts3Functions.getCurrentServerConnectionHandlerID();
SpeechRecognitionEngine^ recognizer = gcnew SpeechRecognitionEngine();
System::Speech::Recognition::Grammar^ g = assembleGrammar();
recognizer->LoadGrammar(g);
recognizer->SetInputToDefaultAudioDevice();
char pluginPath[PATH_BUFSIZE];
ts3Functions.getPluginPath(pluginPath, PATH_BUFSIZE, pluginID);
String^ a = gcnew String(pluginPath);
a = a + "vctest_cpp_ts3\\signal_vc_start.wav";
char* newPath = (char*)(void*)Marshal::StringToHGlobalAnsi(a);
ts3Functions.playWaveFile(schid, newPath);
Marshal::FreeHGlobal((IntPtr)newPath);
recognizer->SpeechRecognized +=
gcnew EventHandler<SpeechRecognizedEventArgs^>(this, &tsapi::sre_SpeechRecognized);
}
void sre_SpeechRecognized(Object^ sender, SpeechRecognizedEventArgs^ e)
{
uint64 schid = ts3Functions.getCurrentServerConnectionHandlerID();
String^ recognRes = e->Result->Text->ToString();
interpretCommand(recognRes);
}
全部源代碼上 GitHub
最明顯的原因是它根本無法識別任何東西。驗證語音識別功能通常沒有語法。不明顯的原因是GitHub代碼中缺少的原因。主機程序可能存在於運行此代碼的線程上,並將其聲明爲STA線程,但實際上並未抽取消息循環。 –
那麼我該如何解決這個問題?或者不同:我如何使它工作? –