発話音声認識&(TTS)C#コードへのテキスト

  時間がタイトであるため、音声認識は、いくつかの時間前に行われ、そのインターネットを過ごすためにいくつかのコードを見つけること、およびいくつかの非常に複雑なを見つけ、今までの中の統一プロジェクトに音声認識を使用したいので、彼らは、ソートアウトビットが見つかりました。実際には、Microsoftは私たちに良いパッケージのライブラリーを与えています。以下は、MicrosoftのスピーチSDK5.1の使用であり、データベースはMySQLデータベース(昨日連絡MySQLデータベースを使用していますが、使いやすいようにSQL Server以外ので、それは良い感じ、スピードが速くない、一般的なプロジェクトを考えて、そしてMySQLは対処することができるようになりますA)

インターフェイスの独自のデザインの趣味に応じました^ _ ^

 

メインへの参照を追加します。

次のコードが取り付けられています。

システムを使用しました。
System.Collections.Genericを使用しました。
System.ComponentModelを使用しました。
System.Dataを使用しました。
System.Drawingを使用しました。
System.Linqのを使用しました。
System.Textのを使用しました。
System.Threading.Tasksを使用しました。
System.Windows.Formsを使用しました。
//添加数据库引用
MySQLDriverCSを使用して、
System.Data.Odbcを使用しました。
//语音转换引用
DotNetSpeechを使用して、
// SpeechLibを使用しました。
//添加语音识别引用
System.Speech.Recognitionを使用して、
System.Threadingを使用しました。
 

名前空間SpeechDemo
{
    パブリック部分クラスをForm1:フォーム
    {
        //定义语音识别的类
        SpeechRecognizer SPR;
        一覧<文字列>李;
        公共のForm1()
        {
            のInitializeComponent();
        }
       //プライベートSpeechRecognitionEngineのSPRE。
        プライベートSpVoiceの声。
        SpeechVoiceSpeakFlags svsf = SpeechVoiceSpeakFlags.SVSFlagsAsync。
       
        //ロード加载
        ます。private void Form1_Load(オブジェクト送信者、EventArgsの電子)
        {
            声=新しいDotNetSpeech.SpVoice(); //实例化
            this.txt_text.Text = "";
            this.cmb_type.Text = "中文"。
            this.btn_pause.Text = "一時停止";
            this.voice.Rate = 0;
            = 50 this.voice.Volume;
            リー= this.MySQConnectionMother();
            this.txt_recive.Focus();
        }
        //音声
        プライベート無効btn_speech_Click( SENDERオブジェクト、のEventArgs E)
        {
            voice.Speak(this.txt_text.Text、svsf);
            //スレッドおよび結合方法にスレッドを定義
        }
        公共ボイドbtnClick()
        {
            voice.Speak(this.txt_text.Text、svsf) ;
        }
        //クリア
        プライベートボイドbtn_clear_Click(SENDERオブジェクト、のEventArgs E)
        {
            this.txt_text.Text = "";
            this.btn_pause.Text = "一時停止";
        }
        //ボリューム値後に変更されるイベントがトリガ
        プライベートボイドtk_voice_ValueChanged(SENDERオブジェクトを、のEventArgs E)
        {
            this.voice.Volume = this.tk_voice.Value;
        }
        //発話速度値変更イベントトリガ
        プライベートボイドtk_speed_ValueChanged(SENDERオブジェクト、のEventArgs E)を
        {
            this.voice.Rate = this.tk_speed.Value;
        }
        一時停止・開始//
        プライベートボイドbtn_pause_Click(SENDERオブジェクト、のEventArgs E)を
        {
            btnClick(this.btn_pause .text);
        }
        プライベートボイドbtnClick(文字列BtnText)
        {
            スイッチ(BtnText)
            {
                ケース"一時停止":
                 this.voice.Pause();
                 this.btn_pause.Textは= "続行";
                BREAK;
                場合によっては、 "続行":
                this.voice.Resume();
                this.btn_pause.Text = "一時停止";
                    BREAK ;
                デフォルト:
                    BREAK;
            }
        }
        //生成された音声ファイル
        専用のボイドのbutton1_Click(SENDERオブジェクト、EventArgsのE)
        {
            試み
            {
                SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync。
                SaveFileDialog SFD =新しいSaveFileDialog();
                sfd.Filter = "すべてのファイル(*。*)| * * | wavファイル(* .WAV)| * .WAV。";
                sfd.Titleは=「waveファイルに保存します」。
                sfd.FilterIndex = 2。
                sfd.RestoreDirectory =はtrue。
                (sfd.ShowDialog()== DialogResult.OK)であれば
                {
                    SpeechStreamFileMode SpFileMode = SpeechStreamFileMode.SSFMCreateForWrite。
                    SpFileStream SpFileStream =新しいSpFileStream();
                    SpFileStream.Open(sfd.FileName、SpFileMode、偽);
                    voice.AudioOutputStream = SpFileStream。
                    voice.Speak(this.txt_text.Text、SpFlags)。
                    voice.WaitUntilDone(Timeout.Infinite);
                    SpFileStream.Close();
                }
            }
            キャッチ(例外)
            {
            }
        }
        //ダイアログを開いた
        プライベート空間をbutton2_Click(SENDERオブジェクト、のEventArgs E)
        {
            SpeechRegestion();
        }
        /// <まとめ>
        ///音声認識
        /// </要約>
        プライベートボイドSpeechRegestion()
        {
            SPR新しい新しいSpeechRecognizer =(); //音声認識エンジン内のアクセスおよび管理方法を提供する
             GrammarBuilder GRAMM =新しいGrammarBuilder(); // 設定GrammarBuilder
             String []型のSTR = NULL;
             STRを= MakeListTostring(Li)と、
             選択肢の選択肢EOR新しい新しい選択肢=(STRを)をEOR; //定義構文
              gramm.Append(選択); // GRAMMに追加
              文法GRA =新しい文法(GRAMM) 。 //
            spr.LoadGrammarAsync(GRA); //非同期ローディング構文
            spr.SpeechRecognized + =新規のEventHandler <SpeechRecognizedEventArgs> (spr_SpeechRecognized); // 音声認識は、それらの発生と一致するように音声認識を受信した場合
        }
        ときに音声認識を//一致する場合に発生するその音声認識受信
        ボイドspr_SpeechRecognized(オブジェクト送信者、SpeechRecognizedEventArgs E)
        {
            ;列reciveMessage = e.Result.Text.ToString()は
            this.txt_recive.Text = reciveMessage; //文法認識処理後結果のテキスト
        }

        //连接MySQLの数据库
        公共一覧<文字列> MySQConnectionMother()
        {
          一覧<文字列> LIS =新しいリスト<文字列>(); ;
           MySqlConnectionにCONN =新しいMySqlConnectionに(新MySQLConnectionString( "localhost"を、 "speechdb"、 "ルート"、 "管理者")AsString。);
           してみてください
           {
             conn.Open(); //打开数据库
            // MessageBox.Show( "数据库已经打开!");
             たMySqlCommand COMM =新たMySqlCommand( "sptable SELECT * FROM"、CONN)。
             MySQLDataReader DR = comm.ExecuteReaderEx()。
             
             一方、(dr.Read())
             {
                 文字列MM = DR [2] .ToString();

                 lis.Add(MM)
             }
           }
           キャッチ(例外ER)
           {
               MessageBox.Show(er.ToString())。
           }
           はconn.close();
           conn.Dispose();
           LISを返します。
        }
        //添加语法到列[]当中
        公衆列[] MakeListTostring(一覧<ストリング> liststring)
        {
            文字列[] STR =新しい文字列[liststring.Count]。
            以下のために(INT i = 0; iは++; iはliststring.Count()<)
            {
                STR [I] = liststring [i]は.ToStringを();
            }
            STRを返します。
        }

        //通过问题得到答案
        パブリック文字列GetAnswer(文字列の質問)
        {
            文字列の答え= NULL;
           MySqlConnectionにCONN =新しいMySqlConnectionに(新MySQLConnectionString( "localhost"を、 "speechdb"、 "ルート"、 "管理者")AsString。);
           試す
           {
               conn.Open();
              // MessageBox.Show( "数据库又被打开了!");
               たMySqlCommand COMM =新たMySqlCommand();
               comm.CommandTextは= '+質問+ "" "sptable質問=から回答を選択します"';
               comm.Connection = CONN。
               //MessageBox.Show(comm.CommandText);
               (COMM場合。

                   ヌルを返します。
               }
               他
               {
                   答え= comm.ExecuteScalar()ToStringメソッド()。
               }
           }
           キャッチ(例外ER)
           {
               MessageBox.Show(er.ToString())。              
           }
           はconn.close();
           conn.Dispose();
           答えを返します。
        }

        ボイドtxt_text_TextChangedプライベート(SENDERオブジェクト、のEventArgs E)
        {
            voice.Speak(this.txt_text.Text、svsf);
        }
        プライベートボイドtxt_recive_TextChanged(SENDERオブジェクト、のEventArgs E)
        {
            !IF(this.txt_recive.Text.Trim()= NULL )
            {
               文字列の答え= GetAnswer(this.txt_recive.Text);
               IF(答えは=ヌル)!
              {
                this.txt_text.Text =答え;
              }
             他
             {
                this.txt_text.Text =「あなたは、私がキャッチしていない何を言いました?再びそれをはっきり言ってください!「;
              }
            }
        }
    }
}

ます。https://www.cnblogs.com/Nickzhou/archive/2012/12/21/2827470.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34297300/article/details/92850759