時間がタイトであるため、音声認識は、いくつかの時間前に行われ、そのインターネットを過ごすためにいくつかのコードを見つけること、およびいくつかの非常に複雑なを見つけ、今までの中の統一プロジェクトに音声認識を使用したいので、彼らは、ソートアウトビットが見つかりました。実際には、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で再現