zoukankan      html  css  js  c++  java
  • .net中语音识别和语音合成(一)入门篇

    .net中语音识别和语音合成(一)入门篇   

     

       http://www.cnblogs.com/likaincu/articles/440997.html

     准备

    在.net中使用语音识别和语音合成技术,需要借助微软的Speech SDK,如果是要在Web应用程序中使用,则需要Speech Application SDK。其中Speech SDK可以在http://www.microsoft.com/speech/download/sdk51/下载,其中有两个文件Speech SDK 5.1和5.1 Language Pack,前者是开发包,但是其中只包含对英文的支持,后者是中文和日文的语言包,装完就能支持中文了。

          SDK组成结构

           

     

         演练

    1.         打开vs2005,建立一个windows application,在设计窗体中加入一个label,一个richtextbox(用于输入要读的文本),以及一个button。并分别设置的label与button的Text属性。如下图
               

     

    2.         添加必要的引用,项目->添加引用->COM 选择Microsoft Speech Object Library点确定退出。

    3.         双击button,为其添加事件。在代码页顶端先添加命名空间,代码如:
                 

    using SpeechLib;

    4.         button的事件处理程序代码如下。
           

    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客        private void button1_Click(object sender, EventArgs e)
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客.net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客        .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客{
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客            SpVoiceClass voice = new SpVoiceClass(); 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客            voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(3); //其中3为中文,024为英文
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客            voice.Speak(richTextBox1.Text,SpeechVoiceSpeakFlags.SVSFDefault);
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客        }

    5.         按F5运行,在空白区域输入文字,点朗读,试试效果吧。

         SpVoiceClass详解

    属性

    描述

    AlertBoundary

    取得或设置停顿分界线。

    AllowAudioOutputFormatChangesOnNextSet

    设置是否允许声音自动调整到合适状态以适应其音频输出。

    AudioOutput

    .取得或设置当前声音使用的的音频输出对象

    AudioOutputStream

    取得或设置当前声音使用的的音频输出流对象。

    EventInterests

    取得或设置当前声音返回的事件类型。

    Priority

    取得或设置声音的优先级。

    Rate

    取得或设置阅读的速度。

    Status

    返回一个ISpeechVoiceStatus 对象用于显示当前阅读和事件的状态

    SynchronousSpeakTimeout

    取得或设置一个时间间隔,用于标识多久未获得一个输出设备后,一个同步的Speak 和SpeakStream将终止,以毫秒计算。

    Voice

    取得或设置发音对象。

    Volume

    取得或设置声音的大小 。

    方法

    描述

    DisplayUI

    是否在控制面板中展示详细设置。

    GetAudioOutputs

    返回一个可用的音频输出标记。

    GetVoices

    返回一个可用的发音对象。

    IsUISupported

    决定是否能通过控制棉板的音频设置来控制。

    Pause

    暂停朗读。.

    Resume

    恢复暂停,继续播放。

    Skip

    在当前输入的文本流中向前或向后跳一定距离再播放。

    Speak

    阅读一个字符串。

    SpeakCompleteEvent

    得到一个朗读完毕的时间句柄

    SpeakStream

    朗读一个文本流或一个声音文件。

    WaitUntilDone

    阻塞进程,直到声音播放完毕或者超时。.



    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客
       但是,这个方法本身并不知道你给的字符串是什么语言,所以需要我们它这个字符串用什么语言读出。
    SpVoiceClass 类的Voice 属性就是用来设置语种的,我们可以通过SpVoiceClass 的GetVoices方法得到所有的语种列表,
    然后在根据参数选择相应的语种,比如设置语种为汉语如下所示:
    private void SetChinaVoice() 

      voice.Voice = voice.GetVoices(string.Empty,string.Empty).Item(0) ; 
    }
       0表示是汉用,1234都表示英语,就是口音不同。
       这样,我们就设置了语种,如果结合发音方法,我们就可以设计出一个只发汉语语音的方法
    private void SpeakChina(string strSpeak) 

      SetChinaVoice() ; 
      Speak(strSpeak) ; 

       只发英语语音的方法也是类似的,上面程序里有。
       对于一段中英文混合的语言,我们让程序读出混合语音的方法就是:编程把这段语言的中英文分开,对于
    中文调用SpeakChina方法,英文调用SpeakEnglishi方法;至于怎样判断一个字符是英文还是中文,我采用的是判断
    asc码的方法,具体的类方法是通过AnalyseSpeak实现的。
       这样,对于一段中英文混合文字,我们只需把它作为参数传递给AnalyseSpeak就可以了,他能够完成中英文
    的混合发音。
       当然,对于发音的暂定、继续、停止等操作,上面也给出了简单的方法调用,很容易明白。
       下面简单介绍一下中文语音识别的方法:
       先把该语音识别的类源代码贴在下面,然后再做说明:
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客public class SpRecognition 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客.net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客.net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  private static SpRecognition _Instance = null ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  private SpeechLib.ISpeechRecoGrammar isrg ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  private SpeechLib.SpSharedRecoContextClass ssrContex =null; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  private System.Windows.Forms.Control cDisplay ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  private SpRecognition() 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客.net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   ssrContex = new SpSharedRecoContextClass() ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   isrg = ssrContex.CreateGrammar(1) ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler recHandle = new _ISpeech
    RecoContextEvents_RecognitionEventHandler(ContexRecognition) ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   ssrContex.Recognition += recHandle ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  } 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  public void BeginRec(Control tbResult) 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客.net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   isrg.DictationSetState(SpeechRuleState.SGDSActive) ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   cDisplay = tbResult ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  } 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  public static SpRecognition instance() 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客.net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客   if (_Instance == null) 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客    _Instance = new SpRecognition() ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客    return _Instance ; 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  } 
    .net中语音识别和语音合成(一)入门篇  - sandbox - 我的博客  public void CloseRec() 

    http://www.cnblogs.com/likaincu/articles/441000.html

  • 相关阅读:
    游标本次循环,跳过某些语句
    SQL 把结果集的某列连加成一行
    DotNetty 跨平台的网络通信库(转)
    Slickflow.NET 开源工作流引擎基础介绍-.NET Core2.0 版本实现介绍 (转)
    C# Winform应用程序占用内存较大解决方法整理(转)
    (转)vs2010 vs2013等vs中如何统计整个项目的代码行数
    如何将运维的报警做成运营的报警--Java后端架构
    阿里员工内部常用免费工具包 (转)
    ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl (转)
    C#与MATLAB混合编程
  • 原文地址:https://www.cnblogs.com/yanpo/p/2263214.html
Copyright © 2011-2022 走看看