• .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

  • 相关阅读:
    快速构建ceph可视化监控系统
    Codeforces Round #277.5 解题报告
    【MapReduce】经常使用计算模型具体解释
    Unity3D教程:静态调用C#的dll
    【Oracle错误集锦】:PLSQL无法直连64位Oracle11g数据库
    关于ios下字体描边的一个细节
    未来社交站点:15秒内让你闻名全球 虚拟现实与社交网络融合
    iOS多语言(国际化)开发(尾随系统 + APP内手动设置)
    Java String对象的经典问题
    jsp+tomcat+ 创建project 配置project
  • 原文地址:https://www.cnblogs.com/yanpo/p/2263214.html
Copyright © 2020-2023  润新知