C# windows語音識別與朗讀實例
更新時間:2021年07月26日 11:41:20 作者:qq53716684
這篇文章主要為大家詳細(xì)介紹了C# windows語音識別與朗讀實例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
C# windows語音識別與朗讀示例,供大家參考,具體內(nèi)容如下
本示例通過windows語音識別功能進(jìn)行語音識別和文本朗讀。
打開windows麥克風(fēng),點擊start按鍵,大聲朗讀 “中國”、“美國”、“英國”,識別成功將發(fā)出“嘟”的提示音并朗讀對應(yīng)結(jié)果。
用到的語音識別模塊包括:
using System.Speech.Recognition; using System.Speech.Synthesis;
動態(tài)連接庫文件在我的資源中下載.System.Speach.dll
示例界面如下:

程序源碼如下:
using System;
using System.Runtime.InteropServices;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
public partial class FormVoiceControl : Form
{
static SpeechSynthesizer SS = new SpeechSynthesizer();
private SpeechRecognitionEngine SRE = new SpeechRecognitionEngine(); //語音識別模塊
private bool SRE_listening = false;
private int wordid;
private string shibie;
[DllImport("kernel32.dll")]
public static extern bool Beep(int freq, int duration);
public FormVoiceControl()
{
InitializeComponent();
}
public void InitVoice() //語音識別初始化
{
//SS.SelectVoice("lily");
SRE.SetInputToDefaultAudioDevice(); // 默認(rèn)的語音輸入設(shè)備,也可以設(shè)定為去識別一個WAV文
GrammarBuilder GB = new GrammarBuilder();
GB.Append(new Choices(new string[] { "中國", "美國", "英國"}));
DictationGrammar DG = new DictationGrammar();
Grammar G = new Grammar(GB);
G.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(G_SpeechRecognized); //注冊語音識別事件
SRE.EndSilenceTimeout = TimeSpan.FromSeconds(2);
SRE.LoadGrammar(G);
}
void G_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Beep(500, 500);//已識別提示音
string result = e.Result.Text;
switch (result)
{
case "中國":
shibie = "中國:五星紅旗";
choice(0);
break;
case "美國":
shibie = "美國:星條旗";
choice(1);
break;
case "英國":
shibie = "英國:米字旗";
choice(2);
break;
}
}
private void Button1_Click(object sender, EventArgs e)
{
if (SRE_listening == false)
{
button1.Text = "stop";
SRE.RecognizeAsync(RecognizeMode.Multiple);
}
else
{
button1.Text = "start";
SRE.RecognizeAsyncStop();
}
lblanswer.Text = "";
SRE_listening = !SRE_listening;
}
private void choice(int id)
{
wordid = id;
Thread t1;
Thread t2;
t1 = new Thread(new ThreadStart(ShowAnswer));
t1.Start();
t1.Join();
t2 = new Thread(new ThreadStart(SpeekAnswer));
t2.Start();
}
void ShowAnswer() //線程
{
MethodInvoker mi = new MethodInvoker(this.dosomething);
this.BeginInvoke(mi);
}
void dosomething()
{
lblanswer.Text = shibie;
}
void SpeekAnswer() //線程
{
switch (wordid)
{
case 0:
SS.Speak("五星紅旗");
break;
case 1:
SS.Speak("星條旗");
break;
case 2:
SS.Speak("米字旗");
break;
}
}
private void FormVoiceControl_Load(object sender, EventArgs e)
{
InitVoice();
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#?中?List?與?List?多層嵌套不改變原值的實現(xiàn)方法(深度復(fù)制)
這篇文章主要介紹了C#?中?List?與?List?多層嵌套不改變原值的實現(xiàn)方法,使用?BinaryFormatter?將原始?List?序列化為字節(jié)流,然后再反序列化得到新的?List,實現(xiàn)了深度復(fù)制,需要的朋友可以參考下2024-03-03
WPF ProgressBar實現(xiàn)實時進(jìn)度效果
這篇文章主要介紹了WPF ProgressBar實現(xiàn)實時進(jìn)度效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12

