使核算机、带有人机交互的电器、外表等能像人相同开口“说话”是科技工作者多年的研讨方针。言语是人与人交流信息的一种手法,文语转化TTS(Text To Speech)是主动将输入文字转化成语音输出,并尽量使输出的语音功率流通、天然的一类技能。
TTS体系首要需处理两个问题:
①文本剖析,即言语学剖析。该使命是将以文本广度输入的字符串转化成言语学的表述;
②语音组成。即依据言语学的内涵表述信息组成语音。
TTS体系中的语音组成办法分为时域和频域两大类:频域办法首要有LPC参数组成及其振峰组成两种,其实质是在工程上完成语音生成模型,进而在终端特性上模仿发音器官。在现在阶段,频域办法构成的发音尚不天然,且需求的核算量很大,不适宜在低端的嵌入式芯片上运用。波形修正法是将较短的数字音频段(即组成基元)拼接并进行段音滑润后生成接连语流的办法。这种办法占用的存储空间大,但核算量小、核算速度快,并且组成语音天然度较高,明显比较适合于芯片功用较弱的嵌入式体系方面的运用。
选用波形修正法的嵌入式TTS体系由于成本低、功用完善、天然度高,跟着波形修正算法的不断提出以及微处理器和非易失性存储介质功用的不断增强,正日益遭到人们的重视。本体系即选用时域波形修正技能,收集GB2312汉字编码字符会集一切字符发音作为原始资料,经过运用改善的游程编码算法紧缩生成可适用于当时Flash存储器的语音库,并选用多重查找表规划及预存储命令字技能有效地加速语音库的寻址速度,在依据Atmel公司的AT89S52单片机上成功完成了一个TTS语音体系,经测验获得了令人满意的作用。该体系运用简洁,具有很小的尺度和很低的功耗及通用的串行接口,能够广泛用于有关的汉语语音运用体系中。
1 体系原理
图1为体系原理图框图以及首要操作流程。体系选用串行口与外界交互,任何具有规范串口的设备均可与本体系相连。欲发音汉字的国标码(GB码)由串口送入MCU,MCU将其映射为Flash存储器地址表中对应项的地址,然后依据此地址获得对应项中的命令字,由MCU依据该命令字读取该汉字发音对应的语音数据,接连读出语音数据并以游程码解码算法解码后,依照语音采样时的固定速率经过D/A转化和功率放大播映。本文中语音采样速率为11025B/s。为满意运用需求,本文首要构建易于快速解码的语音库,依据特定Flash存储器的存储格局,以快速多查找表寻址及命令字预先存储的方法安排并存储在Flash存储器中,以满意语音播映的实时要求。相同,MCU的代码也要优先考虑速度而献身比如模块化、可读性方面的要求。最终,出于实用性考虑,体系中需参加满意的输入缓冲区支撑,以满意一次输入多个流字或整句的要求。
原始语音数据的收集和处理
本体系共收集了1335种发音,内含1306个流字发音,26个英文字母发音及3个停顿音,语音收集卡AD转化整编11025B/s,分辨率8位,样本值域0~255,静默值为80H。原始语音以WAV文件的格局保存在PC机中。
图2是“哎”音样本的时域波形。一切的收集样本除具有不同的波形包络外,均具有大体相同的结构,即一个完好的汉字发音均由前后两个静音部分和中心的发音部分组成。静音的收集值绝大多数为80H(一些细微扰动可视为录音过程中的噪声,但尾音部分要别的处理),因此可将其一致为80H,以进步紧缩比。另由图2可见,00H、01H、FFH、FEH这些边际值的呈现概率是很小的,这个特性亦可用于语音的紧缩算法中。
本文依据上述静默值及边际值的散布特色,提出了一种改善的游程编码用于语音数据的紧缩,具体做法是:用00H代表游程紧缩开始码,这以后是被编码字符,再下一个字节是被编码字符的重复码,如:80 80 80 80 80能够表明为00 80 05。明显,游程长度小于等于3时没有编码的必要,因此不会呈现值为00H、01H和02H的重复码。如上所述,在原始语音文件中,00H、01H这些边际值是基本上不呈现的。由于大量呈现这些边际值即意味着语音收集体系的动态规模设置过错。尽管如此,为保证原始语音文件中没有“剩余”边际值,需求将语音文件略做处理,将或许存在的00H和01H都改为02H,明显这样的处理并不会影响语音的实践播映作用。处理后的00H、01H即可作为特别控制字符运用。图3是本文提出的改善流程紧缩编码的流程图。编码前,1335种原始语音样本的巨细为14978622字节,紧缩后为7767112字节,紧缩比超越50%。该语音库现已能够装入容量为8M字节的Flash存储器中。
3 语音库的存储结构
本文以8Mbit×8位NAND型Flash存储器K9F6408U0B为例,描绘本体系语音库的存储结构。
语音库的基本内容分为两部分:前端是地址查找表,这以后是紧缩后的语音数据。地址表中,每4个字节代表一个地址项。GB2312汉字编码字符会集每个汉字在地址表中都有一个对应项,其内容指向该汉字对应读音的语音数据开始地址。GB码字符会集共有94个区,每区94个字符,总计8836个汉字、英文字母和其它符号,其间实践运用了7445个,余下的作为预留区。本体系亦保留了这些预留区,以利于将来的扩大。这样,地址表的巨细为94×94×4=35344字节。语音数据区共存储1335年发音,选用流程编码紧缩寄存,并在每段语音数据完毕增加01H作为完毕控制符。
对不同的Flash存储器,语音库需做一些针对性的处理。关于K9F6408U0B而言,要对其C区进行专门的处理。该芯片中,每个页面(Page)都有A、B、C三个区,其间A、B区各256字节,而C区仅有16字节。本规划中没有用到C区,因此在制造写入Flash的二进制政府间库文件时有必要留意对C区进行空白码(FFH)填充。考虑C区填充后,地址表对应的二进制语音库文件巨细的核算办法改为:512×69+16=35344,表明当35344字节只占有A区和B区时共需69个页面,多出16字节。这意味着有69个C区需求填充,即写入Flash的地址表的实践巨细应该是35344+69×16=36448。相应地,语音数据区需求进行相同的处理。