Ich habe ein TS3-Plugin in der Erstellung hier, die System::Speech::Recognition
für seine SpeechRecognitinEngine
verwendet. Jetzt erstelle ich einen EventHandler für das Ereignis SpeechRecognized
.Spracherkennung löst EventHandler nicht in C++/CLI DLL
Nun, mein Logging (und die Aktionen des Plugins - None) sagen mir, dass das Event tatsächlich nie ausgelöst wird, auch wenn Sie anfangen und aufhören mit den (etwas) gültigen Grammatik zu sprechen.
Ich habe keine Ahnung, warum das ist. Es geschieht in einer DLL, die in C++ CLI geschrieben wird. Nun war meine Theorie, dass DLLs Event-Handlerls nicht unterstützen ... Könnte das möglich sein?
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);
}
Vollsourcecode auf GitHub
Der offensichtlichste Grund ist, dass es einfach nichts erkennt. Stellen Sie sicher, dass die Spracherkennung im Allgemeinen ohne Grammatik funktioniert. Der nicht offensichtliche Grund ist, was im GitHub-Code fehlt. Das Host-Programm könnte über den Thread, auf dem dieser Code ausgeführt wird, liegen und es als STA-Thread deklarieren, ohne jedoch tatsächlich eine Nachrichtenschleife zu pumpen. –
Also, wie repariere ich das? Oder anders: Wie mache ich das? –