【发布时间】:2020-05-16 02:46:41
【问题描述】:
例如,我说“播放下一首歌曲”,而我的应用程序这样做了,我想要一个功能,只为“再听一次”这个词重新开始听 3 秒钟,这样它就可以再跳过一次,然后再听一次3 秒,如果 3 秒过去了,我希望循环语句关闭。
这是我尝试过的“:
private async void Default_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
string speech = e.Result.Text;
switch (speech)
{
case "play next":
Speak.SpeakAsync("playing next");
keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero); //this line is just my "play next" function.
_next_song.RecognizeAsync(RecognizeMode.Multiple); //this line enables a different voice recognition function.
break;
}
//void to continue next song again
private async void _next_song_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
string speech = e.Result.Text;
_recognizer.RecognizeAsyncStop(); //this is my main recognizer that contains all the commands
while (true)
{
if (speech == "one more")
{
Speak.SpeakAsync("sure");
keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENTEDKEY, IntPtr.Zero);
return;
}
await Task.Delay(3000);
break;
}
_next_song.RecognizeAsyncCancel();
_recognizer.RecognizeAsync(RecognizeMode.Multiple);
}
问题是,我的代码工作正常,只是不是我想要的方式,当我说“播放下一首”时,它会播放下一首歌曲并等待我说“再来一首”以跳过一次并再次开始收听,它只是在 3 秒后不会断链,只有当它听到其他声音时,然后 3 秒后,它才会返回主 _recognizer 识别功能。
无论如何我可以在不使用不同的 SpeechRecognition 模块的情况下实现后续命令? 非常感谢任何帮助!
【问题讨论】:
标签: c# speech-recognition