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
{
/// <summary>
/// 20140427
/// 涂聚文
///
/// </summary>
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;
/// <summary>
///
/// </summary>
public Form1()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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 < count; 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
} }
/// <summary>
/// 中文
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
/// <summary>
/// 英文
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
/// <summary>
/// 输入中文语音输出中文文字
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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;
}
}
/// <summary>
/// pause recognition and speak the text sent
/// </summary>
/// <param name="speakText"></param>
public void ReadAloud(string speakText)
{
try
{
recognizer.RecognizeAsyncCancel();
synthesizer.SpeakAsync(speakText);
}
catch { }
} /// <summary>
/// initialize recognizer and synthesizer along with their events
/// /// </summary>
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<AudioStateChangedEventArgs>(recognizer_AudioStateChanged);
recognizer.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);
recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized); 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;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void recognizer_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
{
Hypothesized++;
LabelHypothesized.Text = "Hypothesized: " + Hypothesized.ToString();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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
/// <summary>
/// select input device if available
/// </summary>
/// <returns></returns>
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;
} /// <summary>
/// Findout if OS is compatible.
/// </summary>
/// <returns>true if greater than XP otherwise false</returns>
private bool IsOscompatible()
{
OperatingSystem osInfo = Environment.OSVersion;
if (osInfo.Version > new Version("6.0"))
return true;
else
return false;
}
/// <summary>
///
/// </summary>
/// <param name="o"></param>
private void InitSpeechRecogniser(object o)
{
recognizer.SetInputToDefaultAudioDevice();
} /// <summary>
/// Load grammars, one for command and other for dictation
/// </summary>
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);
}
}
}

Csharp: speech to text, text to speech in win的更多相关文章

  1. csharp:Google TTS API text to speech

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. Text Converted into Speech in Pi

    Step 1: Convert any text into uint8 type in matlab : Step 2: Add models in matlab : copy the uint8 n ...

  3. 利用Google Speech API实现Speech To Text

    很久很久以前, 网上流传着一个免费的,识别率暴高的,稳定的 Speech To Text API, 那就是Google Speech API. 但是最近再使用的时候,总是返回500 Error. 后来 ...

  4. xe5 android tts(Text To Speech)

    xe5 android  tts(Text To Speech) TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,让机器能够说话. 以下代码实现xe5 开发的文本转 ...

  5. 各大厂的语音识别Speech To Text API使用体验

    最近发现有声读物能极大促进我的睡眠,但每个前面都有一段开场语,想把它剪掉,但是有多个开场语,所以就要用到语音识别判断一下再剪. 前两年在本地搭建过识别的环境,奈何识别准确率不行,只能找找API了,后面 ...

  6. C#中的System.Speech命名空间初探

    本程序是口算两位数乘法,随机生成两个两位数,用语音读出来.然后开启语音识别,接受用户输入,知道答案正确关闭语音识别.用户说答案时,可以说“再说一遍”重复题目. 关键是GrammarBuilder和Ch ...

  7. Speech两种使用方法

    COM组件使用speech: public class Speach { private static Speach _Instance = null ; private SpeechLib.SpVo ...

  8. 重新想象 Windows 8.1 Store Apps (87) - TTS: Speak Text, Speak SSML

    [源码下载] 重新想象 Windows 8.1 Store Apps (87) - TTS: Speak Text, Speak SSML 作者:webabcd 介绍重新想象 Windows 8.1 ...

  9. System.Speech.Synthesis 添加暂停、继续功能

    为了方便调用暂停.继续的方法.要将speech的功能写成一个类.直接附上代码: using System; using System.Collections.Generic; using System ...

随机推荐

  1. git 和 repo 常用命令

    一.git 1.回退到某个节点 git reset --hard f39043d1c0cd1cda45a4569556758d0c00bf329a 2.查看提交记录 git log git log - ...

  2. iOS开发ApplePay的介绍与实现

    1.Apple Pay的介绍 Apple Pay官方 1.1 Apple Pay概念 Apple Pay,简单来说, 就是一种移动支付方式.通过Touch ID/ Passcode,用户可使用存储在i ...

  3. 使用vmtools来设置windows和linux的共享文件夹

    目的:通过vmtools来实现windows和linux的共享文件夹 步骤: 1.前提条件是vmtools已经安装 2.在windows任意磁盘新建一个共享文件夹 3.进入虚拟机->设置-> ...

  4. 899. Orderly Queue

    A string S of lowercase letters is given.  Then, we may make any number of moves. In each move, we c ...

  5. excel表计算和计算器计算结果不一致

    excel表计算和计算器计算结果不一致 : 建议安装完excel进行精度设置:

  6. Jquery ajax, Axios, Fetch区别

    1.   Jquery ajax, Axios, Fetch区别之我见 2.   ajax.axios.fetch之间的详细区别以及优缺点

  7. DP Intro - poj 1947 Rebuilding Roads(树形DP)

    版权声明:本文为博主原创文章,未经博主允许不得转载. Rebuilding Roads Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...

  8. HTTPS和SSL详解

    这是转载别人的(转:崔永秀) 把这几天学习到的关于ssl和https协议的内容在这里分享一下,适合一些像我一样的网络协议初学者. ssl协议的起源和历史我就不再多说了,就是那个Netscape 网景公 ...

  9. 万物智联,腾讯云 IoT 边缘计算揭秘——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:现在是万物互联的时代,智能穿戴设备,智能家居,无人商业,改变了我们的生活方式.预计到2021年,全球物联网设数将达到150亿,超过手机 ...

  10. linux下logrotate配置和理解---转

    http://os.51cto.com/art/200912/167478_all.htm 对于Linux 的系统安全来说,日志文件是极其重要的工具.系统管理员可以使用logrotate 程序用来管理 ...