I am using .NET 4 and c#
what i want is to pause the recognizing event when synthesis is running.
so that app can give voice output.
and then resume the recognizing so that app listens to the user voice input.
Its a Windows Form app on WIN 8.1
data.txt contains "present"
What I have tried:
using System;
using System.Windows.Forms;
using System.IO;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Threading;
namespace VoiceRecogApp
{
public partial class Form1 : Form
{
public string[] res = File.ReadAllLines("data.txt");
public string str = "roll number ";
public int i = 1;
public SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine();
public SpeechSynthesizer speak = new SpeechSynthesizer();
public bool recogd = false;
public Form1()
{
InitializeComponent();
}
private void btnEnable_Click(object sender, EventArgs e)
{
recEngine.RecognizeAsync(RecognizeMode.Multiple);
btnDisable.Enabled =true;
btnEnable.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
Choices commands = new Choices();
commands.Add(res);
GrammarBuilder gBuilder = new GrammarBuilder();
gBuilder.Append(commands);
Grammar grammar = new Grammar(gBuilder);
recEngine.LoadGrammarAsync(grammar);
recEngine.SetInputToDefaultAudioDevice();
recEngine.SpeechRecognized += RecEngine_SpeechRecognized;
recEngine.SpeechRecognitionRejected += RecEngine_SpeechRecognitionRejected;
speak.SpeakCompleted += Speak_SpeakCompleted;
}
private void RecEngine_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
{
richText.Text += "\nCan't Recognize";
}
private void RecEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
if(!recogd)
richText.Text += "\n"+Convert.ToString(i)+" is " + e.Result.Text;
recogd = true;
recEngine.RecognizeAsyncCancel();
}
private void btnDisable_Click(object sender, EventArgs e)
{
recEngine.RecognizeAsyncStop();
btnDisable.Enabled = false;
btnEnable.Enabled = true;
}
private void clr_log_Click(object sender, EventArgs e)
{
richText.Text = "-Log-";
}
private void Start_Click(object sender, EventArgs e)
{
i = 1;
speak.Volume = (Int32)100;
speak.Rate = (Int32)1;
speak.SetOutputToDefaultAudioDevice();
while (i<4)
{
btnDisable_Click(sender, e);
speak.Speak(Convert.ToString(i));
i++;
btnEnable_Click(sender, e);
}
}
private void Speak_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
{
speak.SpeakAsyncCancelAll();
recogd = false;
}
}
}