我正在构建一个简单的程序,用人的声音说出电话号码。
为此,我预先录制了每个数字(具有不同的语调),当我得到一个数字时,我会加入音频文件并将它们一起播放,并在数字之间添加一些静音。
但是,这听起来并不流畅或自然。
我试图对文件进行增益和速度规范化,但感觉我需要以某种"智能"的方式加入它们,以便过渡听起来很自然。
我寻找了一些算法来做到这一点,但没有找到任何东西。
有没有已知的方法?
谢谢。
该算法称为PSOLA。有像TD-PSOLA这样的变体。
总的来说,这里有很多东西 - 如何根据声学属性、声源语调和所需的目标语调决定加入哪些项目。实现起来非常复杂,因此最好使用现有的开源TTS系统和现有的合成器,它们涵盖了所有内容。您可以查看 festvox 或 Openmary。
人类正在按数字块拼写电话号码。
通常块将包含 1 到 4 个数字,有时一个电话号码会组合不同的大小类型。
为了生成像自然语音一样拼写电话号码的内容,您需要定义至少两个不同的静音变量:
-
dtNumber = 静默应用了一个块中的两个数字
-
dtBlock = 在两个数字块之间应用的静音
首先将电话号码拆分为阻止列表:
01-12-13-14-15 => [01,12,13,14,15]
1-888-452-1505 => [1,888,452,1505]
遍历所有块(等待 dtBlock 秒杀其中两个块):
&
遍历每个块的编号(等待 dtNumber 秒)。
如果你应用像dtBlock>= 2 x(dtNumber)这样的东西,你将得到一个看起来很自然的声音文件。