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. 网络传输层之TCP/UDP详解

    一.运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层. 运输层的任务就是负责主机中两个进程之间的通信,其数据传输的单 ...

  2. 2016级算法第四次上机-F.AlvinZH的最“长”公共子序列

    940 AlvinZH的最"长"公共子序列 思路 DP,难题. \(dp[i][j]\) :记录A的前i个字符与B的前j个字符变成相同需要的最小操作数. 初始化:dp[i][0] ...

  3. 51 Nod 1024 Set

    1024 矩阵中不重复的元素 1 秒 131,072 KB 10 分 2 级题   一个m*n的矩阵.   该矩阵的第一列是a^b,(a+1)^b,.....(a + n - 1)^b 第二列是a^( ...

  4. oracle nvl()函数

    oracle的nvl()函数作用是当第一个值不为null时,返回第一个值,否则返回第二个值. 当第一个值为一个运算表达式时,那么第二个的值被限定为只能是NUMBER类型或者能隐式转换为NUMBER类型 ...

  5. PIE SDK与OpenCV结合说明文档

    1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 ...

  6. nginx实现多语言跳转不同的url

    nginx实现多语言跳转不同的url server { listen 80; server_name www.text.com; location / { if ($http_accept_langu ...

  7. 等待页面元素(webdriverwait)

    前言 在脚本中加入太多的 sleep 后会影响脚本的执行速度,虽然 implicitly_wait ()这种方法隐式等待方法一定程度上节省了很多时间.但是一旦页面上某些 js 无法加载出来(其实界面元 ...

  8. android httpclient 发送 PATCH 请求

    Put 用于全部更新 Patch 用于部分更新 重写一下 HttpPut 或 HttpPost 的 getMethod 方法 /** * Send a patch request */ public ...

  9. unity调用ios原生代码objective-c和回调

    从c#到objective-c学习 https://www.runoob.com/w3cnote/objective-c-tutorial.html https://www.jianshu.com/p ...

  10. 【c++】流状态的查询和控制

    源自 c++primer 4th, 248页 代码 #include <iostream> #include <limits> #include <stdexcept&g ...