你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
2.19 文本朗读系统
 

一、微软TTS语音引擎概述

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


1  SAPI功能结构图

二、导出托管动态连接库

在安装完TTS(SAPI)以后,会在D:\Program Files\Common Files\Microsoft Shared\Speech\下面找到sapi.dll,这里面定义了SAPICOM对象。这时可以利用.NET Framework自带的工具TlbImp.exesapi.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语音引擎技术,巧妙地实现了一个点名系统,其实只要改变文本文件的内容,便可方便地实现所有中文文本的朗读。

本系统的开发环境为:Windows XPSP2)中文版+ .NET Framework 2.0+ Visual Studio .NET 2005

 

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089