关于Microsoft Speech SDK 中TTS的研究

 

关于Microsoft Speech SDK TTS的研究

 

 

【摘要】本文介绍了利用Microsoft Speech SDK 5.1中的text-to-speechTTS),采用C#作为开发语言,Visual Studio 2005作为开发工具,实现了普通中英文混合文本的朗读,和带XML标记的文本的朗读,并且可将朗读出来的内容保存为文件。

 

【关键字】Speech SDKTTStext-to-speech,朗读

 

1.   TTS概述

 

随着语音技术的发展,微软也推出了相应的语音开发工具,即Microsoft Speech SDK,这个SDK中包含了语音应用设计接口(SAPI)、微软的连续语音识别引擎(MCSR)以及微软的语音合成(TTS)引擎等等。它其中的TTStext-to-speech)引擎可以用于实现语音合成,我们通过TTS引擎可以分析文本内容并且将其朗读出。实现TTS技术的方法有很多种,现在主要采用三种:连词技术、语音合成技术、子字连接技术。目前的5.1版本的SDK一共可以支持3种语言的识别 (英语,汉语和日语)以及2种语言的合成(英语和汉语)。其中还包括对于低层控制和高度适应性的直接语音管理、训练向导、事件、语法编译、资源、语音识别(SR)管理以及TTS管理等强大的设计接口。

 

 

2.   实现原理

 

     下是SpeechAPI的总体结构:

      

       从图中我们可以看出语音引擎则通过DDI层(设备驱动接口)和SAPI(SpeechAPI)进行交互,应用程序通过API层和SAPI通信。通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。

     应用程序使用ISpVoice接口来控制TTS,通过调用其中的Speak方法可以朗读出文本内容,通过调用SetVoice / GetVoice方法(在.NET中已经转变成Voice属性)来获取或设置朗读的语音,而通过调用GetVolume / SetVolumeGetRate / SetRate等方法(在.NET中已经转变成VolumeRate属性)来获取或设置朗读的音量和语速。

功能强大之处在于TTS能识别XML标记,通过给文本加上XML标记,我们让TTS朗读出更加符合语言阅读习惯的句子。例如:

l   <volume level=” 60” ></volume> 用于设置文本朗读的音量;

l   <rate absspeed=” 1” /><rate speed=” 5” /> 分别用于设置文本朗读的绝对速度和相对速度;

l   <pitch absmiddle=” 2” /><pitch middle=” 5” /> 分别用于设置文本朗读的绝对语调和相对语调;

l   <emph></emph> 在他们之间的句子被视为强调;

l   <spell></spell> 可以将单词逐个字母的拼写出来;

l   <silence msec=” 500” /> 表示停止发声,并保持500微秒;

l   <context id=”date_mdy”> 02/03/07 </context> 可以按要求朗读出日期

l   <voice required="Language=409"></voice> 用于设置朗读所用的语言,其中409表示使用英语,804表示使用汉语,而411表示日语。

 

 

3.   软件的开发

 

3.1.  开发环境的搭建

 

由于Microsoft Speech SDK是以COM组件的形式提供给我们的,因此在使用.NET开发时必须引入Interop.SpeechLib.dll文件,如图:

在引入DLL文件后,我们就可以通过添加using SpeechLib;”引入命名空间,或直接使用SpeechLib前缀来使用SpeechLib空间下的所有类。

 

3.2.    二次封装TTS

 

我们将使用Singleton设计模式来对TTS进行封装,首先声明一个SpVoice接口,并用SpVoiceClass 对象来实例化,这个接口是实现文本朗读的核心。接着提供用于朗读文本的方法,例如:

   /// <summary>

        /// 读出Xml文件内容

        /// </summary>

        /// <param name="xml">Xml文件内容</param>

        public void SpeakXml(string xml)

        {

            voice.Speak(xml, SpeechVoiceSpeakFlags.SVSFIsXML | SpeechVoiceSpeakFlags.SVSFlagsAsync);

        }

并且使Pause()Resume()Stop()等方法来控制朗读暂停、继续和停止。至于保存音频文件,我们可以使用以下方法,将音频输出流指向一个文件流,来完成保存工作。

        /// <summary>

        /// 保存音频到文件

        /// </summary>

        /// <param name="xml">要读的Xml格式的内容</param>

        /// <param name="fileName">要保存的文件名</param>

        public void Save(string xml, string fileName)

        {

            SpFileStream stream = new SpFileStream();

            stream.Open(fileName, SpeechStreamFileMode.SSFMCreateForWrite, false);

            voice.AudioOutputStream = stream;

            voice.Speak(xml, SpeechVoiceSpeakFlags.SVSFlagsAsync | SpeechVoiceSpeakFlags.SVSFIsXML);

            voice.WaitUntilDone(Timeout.Infinite);

            stream.Close();

        }

 

 

3.3.  实现中英文的混合朗读

 

如果我们直接调用SpVoice接口中Speak方法来朗读文本,那么在朗读过程中,要么使用英文朗读引擎,要么使用中文朗读引擎,这样就只能朗读纯英文文本或纯中文文本。要怎样才能朗读混合的文本呢?第一种方法,我们可以在朗读过程中,根据文本的内容来切换朗读所用的引擎,即调用SetChinaVoice()SetEnglishVoice()方法。第二种方法,我们在朗读文本之前,先分析文本,将属于英文的句子加上英文语音XML标记,即<voice required=”Language= 409” ></voice>,将属于中文的句子加上中文语音XML记,即<voice required=”Language= 804” ></voice>。这样调用SpeakXml方法就可以实现中英文混合朗读。

在这里我选择第二种方法,在类中增加静态方法:AddXmlLangTag,返回添加过标记得文本内容。

/// <summary>

        /// 设置中文语音

        /// </summary>

        public void SetChinaVoice()

        {

            voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0);

        }

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Microsoft Speech SDK是微软公司开发的语音识别和语音合成软件开发工具包。它提供了一系列API和工具,使开发人员能够轻松地将语音识别和语音合成功能集成到他们的应用程序。该SDK支持多种语言和操作系统,包括Windows、Android和iOS等。它可以用于开发各种语音应用程序,如语音助手、语音识别输入、语音控制等。 ### 回答2: Microsoft Speech SDKMicrosoft 公司开发的一套语音技术开发工具包,主要用于帮助开发者添加语音识别、语音合成、音频输入及输出等功能。作为一套强大而全面的语音技术开发工具包,它可以极大地便捷开发者构建语音应用程序,例如语音识别软件、语音助手、语音导航、语音翻译、语音评测等。 在语音识别方面,Microsoft Speech SDK 支持多种语言和语音模型,包括英语、文、法语、西班牙语等。开发者可以通过简单的 API 调用实现对语音的识别,并可以通过调整配置文件来优化识别效果。在语音合成方面,Microsoft Speech SDK 同样支持多种语言,可以实现将文本转换成语音的功能。 作为一套全面的语音技术开发工具包,Microsoft Speech SDK 不仅支持语音识别和语音合成,还支持音频输入和输出,例如录音和播放音频,可以支持麦克风、音频文件等多种方式。同时,在语音评测方面,也提供了多种评测模型和算法,可以对说话人的语音进行分析,判断语音的准确性、流畅度等方面。 总之,Microsoft Speech SDK 是一套极为强大和全面的语音技术开发工具包,可以帮助开发者轻松地构建语音应用,减少了开发者在语音处理方面的复杂度和工作量,提高了语音应用程序开发的效率和可靠性。 ### 回答3: Microsoft Speech SDKMicrosoft提供的一套用于语音识别和合成的开发工具包,可帮助开发人员将语音技术集成到应用程序,使应用程序具有语音识别和合成的功能。虽然Microsoft Speech SDK已被微软官方宣布停止维护和更新,但是它仍然是很多语音开发人员的首选工具之一。 Microsoft Speech SDK提供了各种API和库,可以支持多种编程语言和平台,例如,C++, C#, VB.NET,甚至还支持早期版本的ASP.NET。开发人员可以选择多种语言模型和语音引擎,以适应不同的语音应用场景。此外,SDK还提供了一些测试工具和示例代码,供开发人员参考和学习。 使用Microsoft Speech SDK可以实现自然语言的语音识别和语音合成技术,从而能够更好地实现人机交互,提高应用程序的易用性和用户体验。比如,通过语音识别技术,用户可以直接使用语音来操作程序,而无需使用鼠标和键盘,这大大提高了操作的效率。而通过语音合成技术,应用程序可以将文字转换为语音输出,从而帮助听障人士更好地使用应用程序。 除此之外,Microsoft Speech SDK在语音转录和实时语音转录等领域也有广泛的应用。例如,语音转录可以将语音直接转换为文本,应用于语音翻译、语音输入等场景。实时语音转录可以将多个说话者的语音同时转换为文本,应用于多人会议记录等场景。 总之,Microsoft Speech SDK是一套优秀的语音开发工具包,可以大大简化语音应用程序的开发过程,提高应用程序的交互性和可用性,使开发者能够更好地实现创新的语音应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值