微软TTS5.1语音引擎(中文)实现文本阅读

您所在的位置:网站首页 中文tts语音安装 微软TTS5.1语音引擎(中文)实现文本阅读

微软TTS5.1语音引擎(中文)实现文本阅读

2022-10-08 13:44| 来源: 网络整理| 查看: 265

原文: 

本系统的开发环境为:Windows XP(SP2)中文版+ .NET Framework 2.0+ Visual Studio .NET 2005。关键词 TTS,文本朗读,NET,C#一、 微软TTS语音引擎概述    Microsoft Speech SDK提供一套关于语音处理的应用程序编程接口SAPI(Speech Application Programming Interface)。SAPI提供了实现文字-语音转换(Text-To-Speech)和语音识别(Speech Recognition)的方法,其功能结构如图1所示。语音引擎通过DDI层(设备驱动接口)和SAPI进行交互,应用程序通过API层和SAPI通信。通过使用这些API,用户可以快速开发在语音识别或语音合成方面应用程序。SAPI最基本的语音引擎为Text-To-Speech(TTS),TTS 通过合成声音来朗读文本字符串和文本文件。本系统采用微软TTS5.1语音引擎(中文),其中内置简体中文语音包(SimpChinese Speech Package),是一个简便实用的SAPI。 

图 1  SAPI功能结构图二、 导出托管动态连接库    在安装完TTS(SAPI)以后,会在D:\Program Files\Common Files\Microsoft Shared\Speech\下面找到sapi.dll,这里面定义了SAPI的COM对象。这时可以利用.NET Framework自带的工具TlbImp.exe把sapi.dll导出到托管动态连接库中,以便在.NET中使用。其方法是在命令提示符下,进入sapi.dll所在目录,然后输入如下命令:Tlbimp sapi.dll /out: DotNetSpeech.dll    注:DotNetSpeech.dll为导出的托管动态连接库文件名。    导出时会提示出现错误和警告,但不影响使用,可以忽略。三、 引用托管动态连接库    新建一个Windows应用程序解决方案,打开解决方案资源管理器,在引用上右单击选择添加引用,在浏览选项卡中找到刚才导出的DotNetSpeech.dll。并在窗体的程序CS文件代码段中添加引用using DotNetSpeech; 这样就实现了SAPI SDK的导入。四、 语音朗读函数的原型及其测试    在TTS语音引擎中,关键的文本朗读函数为Speak,其原型如下:int ISpeechVoice.Speak (string Text,SpeechVoiceSpeakFlags Flags);    其中参数string Text 为要朗读的文本,如"我有一个梦,我梦想……";SpeechVoiceSpeakFlags Flags为一枚举类型数据,共有以下几种值:SpeechVoiceSpeakFlags.SVSFDefault;            SpeechVoiceSpeakFlags.SVSFIsFilename;            SpeechVoiceSpeakFlags.SVSFIsNotXML;            SpeechVoiceSpeakFlags.SVSFIsXML;            SpeechVoiceSpeakFlags.SVSFlagsAsync;            SpeechVoiceSpeakFlags.SVSFNLPMask;            SpeechVoiceSpeakFlags.SVSFNLPSpeakPunc;            SpeechVoiceSpeakFlags.SVSFPersistXML;            SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak;            SpeechVoiceSpeakFlags.SVSFUnusedFlags;            SpeechVoiceSpeakFlags.SVSFVoiceMask;    我们用以下代码进行测试:SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;            SpVoice voice = new SpVoice();            voice.Speak("我有一个梦,我梦想……", spFlags);五、 生成WAV文档   若在一些其他的场合无法用计算机,或不方便用计算机进行文本朗读,可以用TTS生成WAV文档,可用软件压缩成MP3文档,放在MP3播放设备中进行播放,或者用录音机录制在磁带上用录音机播放。代码如下:SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;            SpVoice voice = new SpVoice();      SpFileStream spfs = new SpFileStream();            spfs.Open("c:\\mystream.wav", SpeechStreamFileMode.SSFMCreateForWrite, false);            voice.AudioOutputStream = spfs;            voice.Speak("我有一个梦,我梦想……", spFlags);            voice.WaitUntilDone(1000);     spfs.Close();              MessageBox.Show("生成成功,位于c:\\mystream.wav\n 点击播放按钮播放。");         this.button1.Visible = true; 六、 计算机点名(文本朗读)系统的设计与实现    考虑到在点名过程中人员名单的改动性较大,因此没有采用数据库技术,而直接采用纯文本来存放名单,将名单放在res目录下。这样方便用户修改名单,或从其他数据源中导出数据到本系统,因此须添加引用using System.IO。为了能够在点名过程中看到所点的名字,在窗体上添加两个ListBox,一个用于显示正在点播的名单,而另一个用于显示正在点播的文档,并添加三个Button按钮,一个开始点名,一个暂停按钮,一个继续按钮。并用一个timer控件实现自动按顺序点名。实现的核心代码如下:    int items;        Timer atimer = new Timer();        int i=0;        SpeechVoiceSpeakFlags spFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;        SpVoice voice = new SpVoice();        private void button2_Click(object sender, EventArgs e)        {            this.button2.Enabled = false;            this.button4.Enabled = true;            this.button5.Enabled = true;            items = this.listBox1.Items.Count;            atimer.Interval =(int)this.numericUpDown1.Value;            atimer.Tick += new EventHandler(atimer_Tick);            atimer.Start();        }        void atimer_Tick(object sender, EventArgs e)        {            if (i >= items)            {                atimer.Stop();                i = 0;                this.listBox1.SelectedIndex = i;                voice.Speak("点名完毕!", spFlags);                return;            }           this.listBox1.SelectedIndex = i;           string s = this.listBox1.SelectedItem.ToString();            voice.Speak(s, spFlags);            i++;        }   最终实现界面如图2所示:

图 2 点名系统界面七、 配置TTS引擎当前所处理语言    直接编译运行所设计的应用程序,点击“开始点名”按钮,发现并没有声音发出,这是因为还没有配置TTS引擎当前所处理语言。其配置方法如下:    “控制面板”→“声音、语音和音频设备”→“语音”→“语音-文字转换”→“语音选择”下拉列表中选择“ Microsoft Simplified Chinese ”(简体中文),当然还可以根据预听语音效果,调节语音速度,以达到满意效果。    微软TTS语音引擎技术在windows XP下朗读的声音并不十分的悦耳,且只有男声,在简体中文下对西文的朗读为单个字母方式,而非单词方式,而在Windows Vista中的女声文本朗读有很大改进,不但声音好听,且中英文能混合朗读。本文借助微软的TTS语音引擎技术,巧妙的实现了一个点名系统,其实只要改变文本文件的内容,便可方便地实现所有中文文本的朗读。    参考文献:1 赵卫伟.Visual C#.NET 面向程序设计教程.机械工业出版社.2006年5月第1版2 Speech SDK自带的说明文档(SAPI.chm).3 MSDN (msdn.microsoft.com).

 

八、语言包

因为开发时安装了SDK,包含了中文语言包,所以不需要在安装,如果程序在其他电脑上面运行。则会缺少中文语言包。

WIN7系统:自带了女生的语言包,很好听哦。所以不需要安装。

XP系统:必须安装中文语言包,默认系统没有。需下载“微软TTS语音引擎(中文)V5.1.rar”   1.5M大小



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3