我在这里创建了一个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线程,但实际上并未抽取消息循环。 –
那么我该如何解决这个问题?或者不同:我如何使它工作? –