基于TTS汉语发音动态时间弯曲评测法

时间:2022-09-06 11:06:20

基于TTS汉语发音动态时间弯曲评测法

摘要:汉语学习日趋广泛,如何快速有效地实现标准汉语语料库供学习者参考并对汉语学习者的发音标准水平做出评测受到了很大程度的关注。该文介绍微软提供的TTS语音引擎,阐述其编程实现过程,利用TTS生成的汉语音频作为标准语料库。采集汉语学习者发音,对TTS生成的汉语音频和汉语学习者的发音作预处理并提取特征值,最后采用DTW(动态时间弯曲)算法实时地进行发音标准水平评测。

关键词:TTS;DTW;特征提取;模式对比

中图分类号:TP18 文献标识码:A文章编号:1009-3044(2011)10-2390-02

Chinese Pronunciation Evaluation Method of DTW Algorithm Based on TTS

SUN Jin-kang, WU Qiong-gui, LI Yu-wei

(PLAUST, Nanjing 210007, China)

Abstract: Learning Chinese is becoming popular, It has been concerned that how to quickly and effectively establish the standard Chinese language corpus for learners to reference and evaluate the Chinese learners level of pronunciation. This article describes Microsoft's TTS voice engine, describes the programming process, use TTS generated audio as a standard corpus of Chinese. Gather the pronunciation of Chinese learners. Pre-treatment and feature extraction on TTS Chinese audio. Finally, evaluate pronunciation with DTW algorithm on real-time.

Key words: TTS; DTW; feature extraction; pattern comparison

1 TTS及程序实现

1.1 TTS

TTS 是 Text To Speech的简写, 即语音合成,是一种文本转换为语音的技术。 它解决的主要问题就是如何将文字信息转化为可听的声音信息, 通过计算机语音合成技术可以在任何时候将任意文本转换成自然语音。

TTS功能模块可分为文本分析、韵律建模和语音合成三大模块。其中,语音合成是TTS系统中最基本、最重要的模块。目前大多数的语音合成系统都是基于大量的语音数据和统计过程建立的,这类系统通常被称为基于语料库的TTS系统。在基于语料库的TTS系统中,大量的语音数据被存储作为语音库。合成时,从语音库中挑选最佳单元,输出语音时拼接最佳单元并调整它们的韵律。

国内外有许多高科技公司和科研机构致力于基于语料库的TTS 技术的开发和研究,但只有微软公司提供的语音软件开发包 Microsoft Speech SDK可以从微软的网站上免费下载和使用, 其他产品都需要购买 SDK 开发包才能进行语音程序开发, 价格昂贵。微软的语音开发包技术成熟,功能强大。最重要的是微软TTS语音引擎技术在WindowsVista中Microsoft Speech SDK 5.3的文本朗读比WindowsXP中Microsoft Speech SDK 5.1有很大改进, 合成语音音质自然、逼真,韵律调整合适,声调连续。

本文利用微软提供的TTS语料库将文本文字通过TTS技术转换成标准音频供模式对比需要,功能流程图如图1所示:

图1 基于TTS汉语发音评测法功能流程图

1.2 汉语朗读及其音频自动保存功能实现

本文开发平台及工具选用:Windows XP;Microsoft Speech SDK 5.1;Visual studio 2008;Matlab R2009a。

安装Speech SDK 5.1和Language Pack5.1,安装以后,在安装目录下面找到SAPI.dll,用.Net Framework自带的Tlbimp.exe工具将SAPI.dll转换成.net平台下的DotNetSpeech.dll。

在控制面板-->语音属性-->文字―语音转换-->语音选择组合框中选Microsoft Simplified Chinese,这样就可以合成汉语文字了,如果使用的是Windows Vista,则能自动实现中英文混合朗读。

接下来可以在应用程序中调用DotNetSpeech.dll所包含的 TTS对象(SpVoice),其主要功能是实现文本到语音的转换。如使用SpVoice.Speak来从文本数据生成语音,从而使电脑会说话。当处于异步工作时,可以使用SpVoice.GetStatus来获得发音状态及文本位置等。在接口中,有许多成员函数,通过这些成员函数可以实现对发音频率、音量、速度等合成属性进行调整。

打开Vision studio 2008 新建项目,项目类型选择Visual C#,模板选择windows窗体应用程序-->项目-->添加引用-->浏览并添加DotNetSpeech.dll。

打开Form1.cs代码文件,在代码开头添加名字空间using DotNetSpeech;

朗读汉语示例源代码:

SpVoice Voice = new SpVoice();//实例化SpVoice对象为Voice

SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;//异步方式,朗读请求挂进队列后立即返回。

Voice.Speak(this.textBox1.Text, SpFlags);//调用Voice的Speak方法,朗读textBox1.Text控件内的汉字。

生成并自动保存汉语音频源代码:

SpeechVoiceSpeakFlags SpFlags = SpeechVoiceSpeakFlags.SVSFlagsAsync;//异步方式,朗读请求挂进队列后立即返回。

SpVoice Voice = new SpVoice();//实例化SpVoice对象为Voice

SpFileStream spf = new SpFileStream();//实例化SpFileStream对象为spf

spf.Open("c:\\"+textBox1.Text+".wav",peechStreamFileMode.SSFMCreateForWrite, false);//第一个参数代表文件名,第二个参数说明了文件打开模式,第三个参数说明是否重播声音文件

Voice.AudioOutputStream = spf;//设置音频输出流格式

Voice.Speak(textBox1.Text, SpFlags);// 异步方式朗读textBox1.Text控件的汉字

Voice.WaitUntilDone(Timeout.Infinite);// 该方法阻塞调用者直到声音朗读完毕

spf.Close();

2 预加重

在我国使用的一般市电频率是50赫兹,它常以电磁波的辐射形式,来对人类的日常生活造成一定的干扰影响。在语音采集中也不例外,因此在语音采集后需要滤除低频造成的影响,并提升对语音识别更为有用的高频部分。以下演示程序通过麦克风采集TTS发音引擎所发出的“滤波器”三个字的两次重复读音,并对语音信号进行快速Fourier变换,求得Fourier变换后的振幅,绘出Nyquist频率之前随频率变化的振幅。图2-1(2-2)上半部分图像为初始音频波形图(横坐标为时间,纵坐标为波形幅值),下半部分为初始频幅图(横坐标为频率,纵坐标为频率幅值)图2为未经处理的语音图像,图3为使用一阶高通滤波器处理之后的图像。

图2 初始波形和幅值 图3 预加重滤波后波形和幅值

通过对比上面两幅图像可知,经过预加重滤波器处理后,除掉了低频部分,并提升相应高频部分。

3 特征提取

特征的选取取决于具体的功能需求, 下面的特征是有代表性的:1)短时能量2)过零率3)线性预测系数特征矢量4)LPC倒谱特征矢量5)Mel倒谱参数(MFCC)等。

3.1短时能量和过零率

由于采用TTS发音引擎可以连续发出(或者汉语学习者在跟读TTS语音)一个字、一个句子、一篇文章的读音,因此需要端点检测技术区分每个字读音的开始与结束。端点检测技术是通过设定短时平均能量和过零率的门限实现的。短时能量的概念来描述语音信号的幅度,短时能量对浊音敏感,因为浊音为声带振动发出,语音信号有幅度高的特点。过零率对清音敏感,由于清音段是口腔空气摩擦产生的效果,所造成的波形在幅度上的变化比较剧烈,可以用一帧信号中波形穿越零电平的次数来描述这种变化剧烈程度。

短时平均能量指在一个短时音频内采样点信号所聚集的平均能量。假定一段连续音频信号流x得到K个采样点,这K个采样点被分割成叠加率为50%的M个短时帧(通常语音的特征提取都采用有叠加的帧进行处理的),其短时平均能量使用下面公式计算:(其中,x(n)表示第m个短时帧信号中第n个采样信号值,w(n)是长度为N的窗口函数。)

过零率值是在一个短时帧内,离散采样信号值由正到负和由负到正变化的次数,这个量大概能够反映信号在短时帧内里的平均频率。对于音频信号流x中第m帧,其过零率计算如下:

其中,x(n)表示第m个短时帧信号中第n个采样信号值,w(n)是长度为N的窗口函数。当x(n) ≥0时,sign[x(n)]=1;否则sign[x(n)]=0。

图4为通过程序运行得出的结果,上方为音频的波形图,中间部分为短时能量图,下面部分为过零率图,图中平行的两条线段是通过短时能量和过零率所确定的音频开始和结束端点。

3.2 梅尔频率倒谱系数

人耳对不同频率的语音具有不同的感知能力,实验发现,在1000H z以下,感知能力与频率成线性关系,而在1000H z以上,感加能力则与频率成对数关系。为了模拟人耳对不同频率语音的感知特性,人们提出了Mel频率的概念,其意义为:1Mel为1000H z的音调感知程度的1/1000。MFCC参数的计算是以“bark”为其频率基准的,它和线性频率的转换关系是:

4 模式对比及评分机制

音频流一般包含多个词语,采用端点检测算法依次确定连续音频流的词语起点和终点。已存入模板库的一个音频流的各个词语特征值称为参考模板,参考模板中一个词语的特征值可表示为R={R(1),R(2)…,R(m),…,R(M)}。所要识别的一个输入连续音频流的各个词语特征值组成的模板称为测试模板,测试模板中一个词语的特征值可表示为T={T(1),T(2),…,T(n),…,T(N)}。参考模板与测试模板采用相同类型的特征矢量MFCC、相同的帧长、相同的窗函数和相同的帧移。

DTW采用动态规划的方法,把测试模板中的词语的各个帧号n=1:N,在一个二维直角坐标系中的横轴上标出,把对应顺序的参考模板中词语的各帧号m=1:M在纵轴上标出,通过这些表示帧号的整数坐标画出一些纵横线即可形成一个网络,网络中的每一个交叉点(n,m)表示测试模式中某一帧的交汇点,如图5所示。

为了约束搜索路径倾斜度,将决策变量即搜索路径斜率范围限定为η, η={0 1 2},如果路径已经通过了格点(ni-1,mi-1),那么下一个通过的格点(ni,mi)只可能是下列三种情况之一:

匹配阶段的状态决定某一阶段以后过程的发展不受这阶段以前各段状态的影响,过程的每一次实现可以用一个状态序列表示,每阶段的状态是该线路的始点,确定了这些点的序列,整个线路也就完全确定。从某一阶段以后的线路开始,当这段的始点给定时,不受以前所通过的网络点的影响。

阶段的状态控制该状态到下一阶段某个状态的演变,因状态满足无后效性,故在每个阶段选择决策时只需考虑当前的状态而无须考虑过程的历史,给定第ni-1阶段状态变量d[T(ni-1),R(mi-1)]的值后,如果这一阶段的决策变量 一经确定,第ni阶段的状态变量d[T(ni),R(mi)]也就完全确定。算法的实现从(n1,m1)点开始搜索,到(nN,mM)结束。匹配的最优策略表示为以η为约束条件,求最佳路径函数mi=Ф(ni),使得沿路径的积累距离达到最小值dist如下所示:

自动评分模块建立了一套利用标准语音资料评分的评分机制,首先设定测试语音与标准语音两相同特征比对之后的结果,其距离与分数间的关系,设定公式如下:

由这个公式我们就可以将距离转换成分数,只要设定好两组的dist及对应的score,即可从中求出a和b,接着由距离值可以计算出对应的分数。当有测试语音进来时,我们和标准语音比较梅尔倒频谱参数,算出距离dist后,即可计算出评分分数。

5 结束语

目前计算机辅助汉语教学系统通常采用的标准普通话示教音频数据采集过程繁重,要求(播音员级)男女标准普通话教师数十名来录制大词汇量示教音频,如此浩大的工程给汉语学习推广带来了一定的阻力,本文采取微软TTS标准合成语音作为标准语音库,避开了上述繁重的工程,为实验提供了方便性、可行性。如何提取更加有效的特征值组合,采用何种算法能取得实行性、高效性、匹配的精确性,以及评分机制上追求全面性是本文的下一步主要研究工作。

参考文献:

[1] 余良俊.基于DTW的话者识别系统的实现[J].软件导刊,2010(15).

[2] 黄平牧.中文TTS系统中若干关键技术研究[D].北京邮电大学,2008:13-37.

[3] 文翰,黄国顺.语音识别中DTW算法改进研究[J].微计算机信息,2010(19).

[4] 庄越挺,潘云鹤,吴飞. 网上多媒体信息分析与检索[M].北京:清华大学出版社,2002.

[5] 何强,何英.Matlab扩展编程[M].北京:清华大学出版社,2002.

上一篇:应用型本科院校计算机专业软件类课程教学探讨 下一篇:用于数列寻空的蛙跳算法