苗文文字转语音功能开发笔记


不知什么时候,我萌发了做一个苗语文字转语音系统的念头,就是简单的输入苗文,让让机器合成对应的苗语。于是我开始上网搜索文字转语音的简介,去了解其实现过程,在这期间,也曾在网上查找有没有已经实现了的类似系统,但很遗憾的是,并没有得到想要的结果。

也许是技术难度大,也许是花费的时间太长,以至于我自己都逐渐忘记了还有这么个念头。后来在QQ交流群里看到了朋友分享的一个例子,是美国的苗族同胞用java开发的一个苗文转语音系统,叫Yuhalu,虽然合成的语音有明显的机械感,很生硬,但是有总比没有强嘛,于是我又开始琢磨起来,我能不能实现这样的功能呢?

由于java开发的客户端只能在个人电脑上运行,不太方便传播,于是作为网络应用开发人员的我,决定先模仿这个系统做一个网页应用出来。但是还没有开始,我就结束了自己的大学生活,又遇到了新型冠状肺炎,工作突然变得忙起来了,没有了之前那么多的时间去做开发工作,这个想法也就被搁浅了。

2022年度寒假是个特殊的寒假,短短两年间,我经历了两次因为新冠疫情而延缓开学。第一次我还是一个学生,而这次,我已成了老师。在给学生上网课的空余时间里,我再次琢磨起了怎么实现苗文转语音的系统。幸运的是,基于之前学习的知识,我对操作WAV封装格式的音频文件已经比较熟悉,所以这次开发工作进展的很顺利,直接拼接波形文件来合成语音的效果和Yuhalu系统一模一样,也让我确定了他们也是通过简单的拼接音频片段来实现语音合成。所以这次我的重点工作,变成了文本预处理。在两天的时间里,我开发完成了苗文词汇拼写检查、数字、字母转苗文等功能。

原来的音频文件用的是44100赫兹采样率和16位采样深度,这样的音频文件合成出来的文件很大,一分钟的音频就有10M大小了,这样是很难在网络上使用的。首先我想到的是把wav封装改为mpeg封装,这样就把文件尺寸压缩下来了,但是由于我目前使用的主机是虚拟主机,没法安装lame和ffmpeg等工具,有没有php类库可以使用,自己开发一个php版本的mpeg音频编码工具显然不现实,所以只能降低wav文件的码率了,我尝试了各种采样率和采样深度之后,觉得16000赫兹采样和8位采样深度就够用了,这样合成出来的音频文件,一分钟就1M大小,比较实用了。在此,也对使用到语音库的yuhalu表示衷心的感谢。

最后我把这些改动整合做成了一个网页应用,终于实现了想了很多年的目标,做出来了一个苗文的文字转语音系统。再结合之前做好的川黔滇苗文和国际苗文转换的程序,我实现了输入国际苗文或者川黔滇苗文,合成出对应的苗语。这只是迈出了苗文语音合成的一小步,但却也是第一个能广泛地简单应用的系统,之后还有很多的工作,让它合成的语音更流畅,更有感情等等。

搜搜资料的时候,偶然间,我打开了几年前收藏的各类苗族网站,发现很多都已经打不开了。有的关闭了,有的转向了APP,有的转向了微信公众号,我自己也一两年没有更新内容了,PC时代主流的网站已经悄然逝去了很久,即使网站依然是网络搜索的重点内容提供者,但是收益肯定是不理想的。想起社交软件列表里那些热心讨论苗文、传播苗文的交流群也不知什么时候起逐渐变得静悄悄了,也许,是大家都忙着去工作了,也许,是大家都学会了不再有那么多交流。

无论如何,我还是想,靠自己的一点努力,在互联网上,留下一些属于苗族的记忆。苗文、苗语,不该成为过去,而在那蓬勃生机展现出来之前,我要做的,就是把自己所热爱的内容,封装在字行里间,等待着它被打开的那一天到来。而苗文语音转文字的实现,让这个打开的过程,变得更加容易。

附:国际苗文文字转语音和川黔滇苗文文字转语音 muab ntawv hmoob nyeem ua lus hmoob

Xab Lauj 117 3 0 2022-03-26