如何为Ekho添加新的声音
(2019年11月13日更新)
1. 获取汉字音标列表。
粤语可采用粤拼列表, 普通话可采用普通话拼音列表。列表除了音标外还附有所有对应汉字,以供参考。文件是UTF-8编码的txt文件。如果在浏览器打开,需要设置页面编码为UTF-8才能正常显示。拼音部分的声调5表示轻声。有些拼音声调没有对应的字,没有去掉的原因是不经思考地把全部声调读出来会让录音过程更流畅。
2. 为每个拼音录制音频
推荐使用Audacity软件录制。不过,在编写本文档的时候,我遇到Audacity 2.3.2在Mac Catalina系统上无法录音的问题,因而使用了ocenaudio完成录音部分的工作。
录音的时候,我推荐使用单声道、44100Hz、32位浮点的格式。每一个拼音的音频之间保留一段停顿,让软件可以找到剪切的边界。建议把整个拼音列表分成若干个文件录制,因为我曾经试过连续录制超过500个拼音的音频后软件崩溃导致要重新再录。整个拼音列表大概有5000个拼音左右,如果每个拼音读0.5,停顿1.5秒,那么大概3小时就能录制完成完整的列表。
在录制完整拼音列表之前,建议先录制少量做测试,这样有利于了解录音环境噪音、音量、语速、声调稳定性等因素的影响。如果声音的拼音不完整,Ekho还是可以运行的,只不过没有录制拼音的字读不出来而已。例如:我录制了0-9的拼音音频作为测试。
3. 提取单个拼音的音频
Audacity软件可以帮我们自动剪切音频,把上面录的一个大音频文件,剪切成每个拼音音频独立成一个小文件。步骤如下:
- 用Audacity打开音频文件
- CMD+a(Windows上用CTRL+a)全选音轨内容
- Audacity菜单->分析->声音寻找
- 在“声音寻找”弹窗的参数中,把静音阈值-dB从26改为36,把静音最小时长从1.0改为0.1,把标签起点和终点(界面上可能误写成“重点”)从0.1改为0.01。然后点击确认按钮生成标签。
- 把标记错误的标签删除掉(误把杂音当成正常音频)
- Audacity菜单->文件->导出->导出标签
- 把标签里的第三列从自然数改成音频对应的拼音,例如:0-9-table.txt。为减少工作量和降低错误率,你可能需要编写脚本来完成这个替换过程。
- Audacity菜单->文件->导入->标签,选择刚才替换了标签名列的标签文件。
- 把第4步生成的以自然数作为标签名的标签轨道删除掉
- Audacity菜单->文件->导出->导出多个文件,选择默认的signed 16-bit PCM格式即可,点击“导出”按钮。
- 此时,我们可以获得每个拼音单独的音频文件。
4. 把新录制的声音文件放到合适的目录测试
把音频放在ekho-x.x/ekho-data/pinyin-example的目录里(你可以把example改成别的名字)。Ekho会固定检测de5这个音频文件来判断整个目录的文件格式,因此,如果目录里只有0-9数字的拼音音频,就需要手动把yi1.wav复制到de5.wav。如果目录里本身有de5.wav就不需要复制了。
运行./ekho 9876543210 -vpinyin-example 即可听到我们自己录制的声音。
第一次运行命令的时候会在ekho-data目录下自动生成pinyin-example.index和pinyin-example.voice缓存文件。如果之后对目录pinyin-example内的音频文件有修改,需要把这两个缓存文件删除才能生效。
如果嫌麻烦,可以把音频文件发给我(黄冠能),由我完成步骤3及以后的工作,不过经我处理的声音数据需遵循GPL v2发布哦:)