续上文: 自制TTS引擎第0.01步-Python实现拼接单字wav文件

首先, 利用第三方库获取中文字符对应拼音:

from xpinyin import Pinyin
...
    for 单字 in 文字:
        # TODO: 多系统/
        拼音 = 拼音库.get_pinyin(单字, tone_marks='numbers')
        格式信息 = 从wav文件读取信息("单字/" + 拼音 + ".wav")

然后将wav文件改为拼音命名, 比如”中.wav”改为”zhong1.wav”, 顺手将单字(“我是中国人”五个字)的wav文件裁剪为0.35秒左右, 减少了前后空白, 拼接起来效果听起来好一些.

下面需要整理一份拼音全表. 用了网上下载的一个xls表, 格式如下:

2019-10-08_excel拼音表

输出所有存在的拼音, 比如a, 包括入声和四声都有, 则输出 a0, a1, a2, a3, a4; 如bu, 则输出bu1, bu3, bu4

同样用Python处理xlsx表格, 之前好像没有贴过类似代码. 节选如下(完整代码在此):

from openpyxl import load_workbook

开始行 = 3
结束行 = 205

所有拼音 = []

def 遍历表格(文件名):
    工作簿 = load_workbook(文件名)
    表单 = 工作簿.active
    for  in range(开始行, 结束行):
        for 拼音序号 in range(0, 2):
            拼音所在列 = 拼音序号 * 6 + 1
            拼音 = 表单.cell(row = , column = 拼音所在列).value.lower()

            for  in range(拼音所在列 + 1, 拼音所在列 + 6):
                对应字 = 表单.cell(row = , column = ).value
                if 对应字 != None:
                    所有拼音.append(拼音 + str( - 拼音所在列 - 1))

输出1238个, 如下:

a0
a1
a2
a3
a4
ai1
ai2
ai3
ai4
an1
an3
an4
ang1
ang2
ang4
...

全表见此: 所有拼音

接下去就是体力活, 录音. 打算用一段稍长的文字作演示.