我正在构建一个简单的程序,用人声说出电话号码。
为此,我预先录制了每个数字(使用不同的语调),当我得到一个数字时,我加入音频文件并一起播放,并在数字之间添加一些静音。
然而,这听起来并不顺畅或自然。
我尝试对文件进行增益和速度规范化,但感觉我需要以某种“智能”方式加入它们,以便过渡听起来很自然。
我找了一些算法来做但没找到任何东西。
是否有一种已知方法?
感谢。
答案 0 :(得分:8)
该算法称为PSOLA。有像TD-PSOLA这样的变种。
总的来说,这里有很多东西 - 如何基于声学属性,源语调和所需的目标语调来决定加入哪些项目。实现起来非常复杂,因此最好使用现有的开源TTS系统和现有的合成器,它们涵盖了所有内容。您可以查看festvox或Openmary。
答案 1 :(得分:0)
人类正在用数字块拼写电话号码。
通常,block将包含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)的内容,您将拥有一个看起来很自然的声音文件。