N4Narendran Ответов: 3

Голос speechsynthesizer &амп; speechrecognizer


 Am enhancing en existing web application which makes the visually impaired people, to be used based on the Text to Speech & Speech Recognition



Here is the code, please do the needful.



using System.Speech;
using System.Speech.Synthesis;
using System.Threading;
using System.Speech.Recognition;



 SpeechSynthesizer ss = new SpeechSynthesizer();
    PromptBuilder pb = new PromptBuilder();
    SpeechRecognitionEngine sre = new SpeechRecognitionEngine(); 
    SpeechRecognizer sr = new SpeechRecognizer();

   protected void btn_Spk_Click(object sender, EventArgs e)    
    {
        string optiona, optionb, optionc;
        Choices clist = new Choices();
        foreach (GridViewRow row in gvtemperament.Rows)
        {
            RadioButton rblist1 = ((RadioButton)row.FindControl("rdTemp_Opt1"));
            RadioButton rblist2 = ((RadioButton)row.FindControl("rdTemp_Opt2"));
            RadioButton rblist3 = ((RadioButton)row.FindControl("rdTemp_Opt3"));
            Label lbl1 = (Label)row.FindControl("lbl_desc");
            if (row.Cells[0].Text == "1")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText("Please answer all the Questions and you starts here!");
                ss.Speak(pb);
                Thread.Sleep(1500);

                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                
                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);

                Thread.Sleep(150);

                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                     this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "2")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;

                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

 
                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);
 
                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);

                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                     this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "3")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;

                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";
                                                           
                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                      this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "4")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;

                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";
                                     
                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                    this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "5")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                     this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "6")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                     this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "7")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                     this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "8")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                      this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "9")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                     this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
            else if (row.Cells[0].Text == "10")
            {
                ss.SelectVoiceByHints(VoiceGender.Female);
                ss.Volume = 100;
                ss.Rate = -3;
                pb.ClearContent();
                pb.AppendText(lbl1.Text);
                ss.Speak(pb);
                Thread.Sleep(1500);

                ss.SelectVoiceByHints(VoiceGender.Male);
                pb.ClearContent();
                pb.AppendText("Options are ");
                ss.Speak(pb);

                optiona = rblist1.Text;
                optionb = rblist2.Text;
                optionc = "Not Sure";

                pb.ClearContent();
                pb.AppendText(optiona);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionb);
                ss.Speak(pb);
                Thread.Sleep(700);

                pb.ClearContent();
                pb.AppendText(optionc);
                ss.Speak(pb);
                Thread.Sleep(150);
                clist.Add(new string[] { "Yes", "No", "Not Sure" });
                Grammar gr = new Grammar(new GrammarBuilder(clist));
                try
                {
                    sre.RequestRecognizerUpdate();
                    sre.LoadGrammar(gr);
                    sre.SpeechRecognized += sre_SpeechRecognized;
                    sre.SetInputToDefaultAudioDevice();
                    sre.RecognizeAsync(RecognizeMode.Multiple);
                }
                catch (Exception ex)
                {
                    this.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script language=\"javascript\">" + "alert('Error');</script>");
                }
            }
        }
    }

  void sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
        foreach (GridViewRow row in gvtemperament.Rows)
        {
            RadioButton rblist1 = ((RadioButton)row.FindControl("rdTemp_Opt1"));
            RadioButton rblist2 = ((RadioButton)row.FindControl("rdTemp_Opt2"));
            RadioButton rblist3 = ((RadioButton)row.FindControl("rdTemp_Opt3"));
            Label lbl1 = (Label)row.FindControl("lbl_desc");

            if (row.Cells[0].Text == "1")
            {
                if (e.Result.Text == "Yes")
                {                     
                    rblist1.Checked = true;
                    rblist1.Text = "Narendran";
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                        rblist1.Text = "Naren";
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                    rblist1.Text = "Chk";
                }
            }
            else if (row.Cells[0].Text == "2")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                    rblist1.Text = "Round2";
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                    rblist2.Text = "Round2";
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true; 
                    rblist3.Text = "Round2";
                }
            }

            else if (row.Cells[0].Text == "3")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }

            else if (row.Cells[0].Text == "4")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }

            else if (row.Cells[0].Text == "5")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }

            else if (row.Cells[0].Text == "6")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }
            else if (row.Cells[0].Text == "7")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }

            else if (row.Cells[0].Text == "8")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }

            else if (row.Cells[0].Text == "9")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }

            else if (row.Cells[0].Text == "10")
            {
                if (e.Result.Text == "Yes")
                {
                    rblist1.Checked = true;
                }
                else if (e.Result.Text == "No")
                {
                    rblist2.Checked = true;
                }
                else //if (e.Result.Text == "Not Sure")
                {
                    rblist3.Checked = true;
                }
            }
            else
            {

            }
        }
    }  


Пожалуйста, сделайте необходимое.
Нарендран Намачиваям.

Что я уже пробовал:

Тот же код отлично работает в приложении windows, но не в веб-приложении.
Если я ставлю точку останова, она приближается к точке, но код не выполняется.

3 Ответов

Рейтинг:
2

N4Narendran

Пожалуйста ЧК мой каждый раз на одной и усилитель; сделать необходимое

Распознавание речи не работает в веб-приложении | The ASP.NET форумы[^]


Рейтинг:
1

Richard Deeming

Ваш код работает НА СЕРВЕРЕ.

Если на вашем сервере есть динамики, текст будет зачитан на сервере, чтобы удивить и рассердить ваших ИТ-администраторов.

Если у вашего сервера есть микрофон, единственный текст, который он распознает, - это ругань ИТ-администраторов за то, что вы пишете код, который считывает данные с сервера. :)

Есть речевой API Javascript[^] который в настоящее время разрабатывается.

  • Для синтеза речи, Chrome, Safari, Opera и следующая версия Edge[^] поддержите его; Firefox требует about:config флаг должен быть установлен; ничто другое его не поддерживает.
  • Для распознавания речи, Chrome и Opera[^] имеют частичную поддержку; Firefox требует about:config флаг должен быть установлен; и ничто другое его не поддерживает.


N4Narendran

Привет Ричард,

Спасибо за ваш ценный ответ. Дело не в сервере и с ИТ-администраторами, я кодирую на своем локальном компьютере все работает нормально, но функциональные возможности не выполняются внутри моего состояния после того, как речь была распознана.


Нарендран Намачиваям.

Richard Deeming

Код все еще работает на сервере. Возможно, вы сможете заставить его работать при локальном тестировании в Visual Studio, но как только вы развернете сайт на реальном сервере, он перестанет работать.

Рейтинг:
1

N4Narendran

Спасибо У.



Мой код работает нормально, теперь дело в том, что мне нужно то же самое, чтобы быть реализованным для Тамильских и хинди языков, у меня уже есть тексты в БД и привязаны к Gridview тоже, но я не могу читать через SpeechSynthesizer.

Нужно ли мне иметь голос для этих языков?