Csharp: speech to text, text to speech in win
2020-11-16 00:19
标签:des com class blog code div size tar string ext art Csharp: speech to text, text to speech in win,搜素材,soscw.com Csharp: speech to text, text to speech in win 标签:des com class blog code div size tar string ext art 原文地址:http://www.cnblogs.com/geovindu/p/3694910.html
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
using
System.Threading;
using
SpeechLib;//NET2.0 引用 Speech sdk 5.1 在COM选项卡里面的Microsoft Speech object library引用 已经有11.0版本
using
System.Speech;
using
System.Speech.Recognition;
using
System.Speech.Synthesis;
namespace
Speech
{ ///
/// 20140427
/// 涂聚文
///
///
public
partial class Form1 : Form
{
private
enum State
{
Idle = 0,
Accepting = 1,
Off = 2,
}
private
State RecogState = State.Off;
private
SpeechRecognitionEngine recognizer;
private
SpeechSynthesizer synthesizer = null;
private
int Hypothesized = 0;
private
int Recognized = 0;
///
///
///
public
Form1()
{
InitializeComponent();
}
///
///
///
///
///
private
void Form1_Load(object
sender, EventArgs e)
{
// SpVoice voice = new SpVoice();//SAPI 5.4
//SpeechLib.ISpeechObjectTokens obj = voice.GetVoices(string.Empty, string.Empty);
//int count = obj.Count;//获取语音库总数
//bool result = false;
//for (int i = 0; i
//{
// string desc = obj.Item(i).GetDescription(i);//.GetDescription(); //遍历语音库
// comboBox1.Items.Add(desc);
//}
//SpVoiceClass voice = new SpVoiceClass();//SAPI 5.1
////voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);
////voice.Speak("你要说的话",SpeechVoiceSpeakFlags.SVSFlagsAsync);
//SpVoice voice1 = new SpVoice();//SAPI 5.4
//voice1.Volume = 100;//音量
//voice1.Voice = voice1.GetVoices(string.Empty, string.Empty).Item(0);
//voice1.Rate = 2;//速度语音朗读速度
// voice1.Speak("你要说的话", SpeechVoiceSpeakFlags.SVSFlagsAsync);
//voice1.Speak("speech sdk 5.1", SpeechVoiceSpeakFlags.SVSFlagsAsync);
//SpeechSynthesizer syn = new SpeechSynthesizer();
//syn.SelectVoice("Microsoft Lili");
//initialize recognizer and synthesizer
InitializeRecognizerSynthesizer();
//if input device found then proceed
if
(SelectInputDevice())
{
LoadDictationGrammar();
ReadAloud("中华人民共和国"); //中文方式Speech Engine Ready for Input
}
}
///
/// 中文
///
///
///
private
void button1_Click(object
sender, EventArgs e)
{
SpVoiceClass voice = new
SpVoiceClass();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //0,为系统默认,中文
voice.Speak(this.textBox1.Text.Trim(), SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
///
/// 英文
///
///
///
private
void button2_Click(object
sender, EventArgs e)
{
SpVoiceClass voice = new
SpVoiceClass();
voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(1);//
voice.Speak(this.textBox2.Text.Trim(), SpeechVoiceSpeakFlags.SVSFlagsAsync);
}
///
/// 输入中文语音输出中文文字
///
///
///
private
void button3_Click(object
sender, EventArgs e)
{
switch
(RecogState)
{
case
State.Off:
RecogState = State.Accepting;
button3.Text = "Stop";
recognizer.RecognizeAsync(RecognizeMode.Multiple);
break;
case
State.Accepting:
RecogState = State.Off;
button3.Text = "Start";
recognizer.RecognizeAsyncStop();
break;
}
}
///
/// pause recognition and speak the text sent
///
///
public
void ReadAloud(string
speakText)
{
try
{
recognizer.RecognizeAsyncCancel();
synthesizer.SpeakAsync(speakText);
}
catch
{ }
}
///
/// initialize recognizer and synthesizer along with their events
/// ///
private
void InitializeRecognizerSynthesizer()
{
var
selectedRecognizer = (from
e in
SpeechRecognitionEngine.InstalledRecognizers()
where
e.Culture.Equals(Thread.CurrentThread.CurrentCulture)
select
e).FirstOrDefault();
recognizer = new
SpeechRecognitionEngine(selectedRecognizer);
recognizer.AudioStateChanged += new
EventHandler(recognizer_AudioStateChanged);
recognizer.SpeechHypothesized += new
EventHandler
recognizer.SpeechRecognized += new
EventHandler
synthesizer = new
SpeechSynthesizer();
}
#region Recognizer events
private
void recognizer_AudioStateChanged(object
sender, AudioStateChangedEventArgs e)
{
switch
(e.AudioState)
{
case
AudioState.Speech:
LabelStatus.Text = "Listening";
break;
case
AudioState.Silence:
LabelStatus.Text = "Idle";
break;
case
AudioState.Stopped:
LabelStatus.Text = "Stopped";
break;
}
}
///
///
///
///
///
private
void recognizer_SpeechHypothesized(object
sender, SpeechHypothesizedEventArgs e)
{
Hypothesized++;
LabelHypothesized.Text = "Hypothesized: "
+ Hypothesized.ToString();
}
///
///
///
///
///
private
void recognizer_SpeechRecognized(object
sender, SpeechRecognizedEventArgs e)
{
Recognized++;
string
s = "Recognized: "
+ Recognized.ToString();
if
(RecogState == State.Off)
return;
float
accuracy = (float)e.Result.Confidence;
string
phrase = e.Result.Text;
{
if
(phrase == "End Dictate")
{
RecogState = State.Off;
recognizer.RecognizeAsyncStop();
ReadAloud("Dictation Ended");
return;
}
textBox1.AppendText(" "
+ e.Result.Text);
}
}
#endregion
///
/// select input device if available
///
///
private
bool SelectInputDevice()
{
bool
proceedLoading = true;
//if OS is above XP
if
(IsOscompatible())
{
try
{
recognizer.SetInputToDefaultAudioDevice();
}
catch
{
proceedLoading = false; //no audio input device
}
}
//if OS is XP or below
else
ThreadPool.QueueUserWorkItem(InitSpeechRecogniser);
return
proceedLoading;
}
///
/// Findout if OS is compatible.
///
///
private
bool IsOscompatible()
{
OperatingSystem osInfo = Environment.OSVersion;
if
(osInfo.Version > new
Version("6.0"))
return
true;
else
return
false;
}
///
///
///
///
private
void InitSpeechRecogniser(object
o)
{
recognizer.SetInputToDefaultAudioDevice();
}
///
/// Load grammars, one for command and other for dictation
///
private
void LoadDictationGrammar()
{
GrammarBuilder grammarBuilder = new
GrammarBuilder();
grammarBuilder.Append(new
Choices("End Dictate"));
Grammar commandGrammar = new
Grammar(grammarBuilder);
commandGrammar.Name = "main command grammar";
recognizer.LoadGrammar(commandGrammar);
DictationGrammar dictationGrammar = new
DictationGrammar();
dictationGrammar.Name = "dictation";
recognizer.LoadGrammar(dictationGrammar);
}
}
}
上一篇:Hadoop:Windows 7 32 Bit 编译与运行
下一篇:将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取
文章标题:Csharp: speech to text, text to speech in win
文章链接:http://soscw.com/essay/21570.html