Я работаю над системой распознавания речи, чтобы разговаривать с моим компьютером. Теперь у меня компьютерный аудиовыход настроен на систему объемного звука. Это вызвало проблемы для системы распознавания. Например, когда я говорю «тест», чтобы проверить, подключено ли оно к сети, система отвечает «тест завершен». Микрофон слышит «тест завершен» и переходит в бесконечный цикл, говоря, что тест завершен. У меня вопрос: есть ли способ остановить прослушивание программы, когда она говорит, а затем снова начать слушать после того, как она закончит говорить? Я думал, может быть, как-нибудь убедиться, что он реагирует только на мой голос. Я открыт для любых предложений.
Мой код ниже.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace SpeechRecog
{
public partial class Form1 : Form
{
private Choices onoff = new Choices();
private Choices recChoices = new Choices();
SpeechRecognitionEngine RE = new SpeechRecognitionEngine();
SpeechSynthesizer ss = new SpeechSynthesizer();
SpeechRecognitionEngine LRE = new SpeechRecognitionEngine();
public Form1()
{
InitializeComponent();
ss.SelectVoiceByHints(VoiceGender.Male);
}
private void btnEnable_Click(object sender, EventArgs e)
{
RE.RecognizeAsync(RecognizeMode.Multiple);
btnDisable.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{
Choices commands = new Choices();
commands.Add(new string[] { "Say Hello", "Test","What's my name", "yahoo", "Thank you", "Hey", "Facebook", "Music", "Lock", "Time"});
GrammarBuilder gb = new GrammarBuilder();
gb.Append(commands);
Grammar Grammar = new Grammar(gb);
RE.LoadGrammarAsync(Grammar);
RE.SetInputToDefaultAudioDevice();
RE.SpeechRecognized += RE_SpeechRecognized;
}
private void LRE_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if (e.Result.Text.Equals("Hey")) ;
{
RE.RecognizeAsync(RecognizeMode.Multiple);
} }
public string time()
{ DateTime n = DateTime.Now;
string o = n.GetDateTimeFormats('t')[0];
return o;
}
private void RE_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
string speech = e.Result.Text;
switch (e.Result.Text)
{
case "Test":
ss.SpeakAsync("Test Complete");
break;
case "Say Hello":
case "Introduce yourself":
ss.SpeakAsync("My name is Friday. I was designed to simplify daily life. How can I assist you today?");
break;
case "What's my name":
ss.SpeakAsync("Arno");
break;
case "yahoo":
System.Diagnostics.Process.Start("http://www.yahoo.com");
break;
case "Facebook":
System.Diagnostics.Process.Start("http://www.Facebook.com");
break;
case "Music":
System.Diagnostics.Process.Start("iTunes.exe");
break;
case "Lock":
System.Diagnostics.Process.Start("Rundll32.exe", "User32.dll,LockWorkStation");
break;
case "Thank You":
break;
case "Time":
ss.Speak(time());
break;
}
}
private void btnDisable_Click(object sender, EventArgs e)
{
RE.RecognizeAsyncStop();
btnDisable.Enabled = false;
}
}
}
SpeechSynthesizer
имеет SpeakCompleted, которое возникает по завершении разговора. Вы можете отключить микрофон и подключить слушателя, который снова включит его при возникновении события. - person Jorn Vernee   schedule 13.03.2016