【问题标题】:Algorithm for concatenating speech audio to sound continuous?将语音音频连接到声音连续的算法?
【发布时间】:2018-04-06 01:18:47
【问题描述】:

我正在构建一个简单的程序,可以用人声说出电话号码。

为此,我预先录制了每个数字(使用不同的语调),当我得到一个数字时,我加入音频文件并一起播放它们,并在数字之间添加一些静音。

但是,这听起来并不流畅或自然。

我尝试对文件进行增益和速度标准化,但感觉我需要以某种“智能”方式加入它们,以便过渡听起来自然。

我寻找了一些算法来做到这一点,但没有找到任何东西。

有没有已知的方法?

谢谢。

【问题讨论】:

  • 如果您可以添加包括频谱在内的一个结果信号的可视化效果,将会很有帮助。您可以为此使用praat。它会使事情变得更容易,例如发现更简单的问题,例如与噪音向绝对沉默的过渡有关。
  • 如果您采用一种简单的方法,您可以研究“连奏”(来自音乐),并通过在各个数字之间录制“连奏”将其应用于声音,并将其用于过渡。

标签: audio text-to-speech speech


【解决方案1】:

该算法称为PSOLA。有 TD-PSOLA 等变体。

总的来说,这里有很多事情——如何根据声学特性、源语调和所需的目标语调来决定加入哪些项目。实现起来非常复杂,因此最好使用现有的开源 TTS 系统和现有的合成器,它们涵盖了所有内容。您可以查看festvoxOpenmary

【讨论】:

  • 谢谢..我认为我的问题比完整的 TTS 简单得多。我总是在单词周围加上空格。
  • 词与词之间的沉默总是听起来不自然,这在真实的演讲中是非常罕见的。如果您想合成自然语音并且您真正关心您的用户,您应该不断地加入单词。
  • 谢谢。连续加入是什么意思?成对的词? @nikolay
  • 您可以查看算法描述 - 它与录音重叠以实现单词之间的平滑过渡。
【解决方案2】:

人类正在通过数字块拼写电话号码。

通常块将包含 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) 之类的东西,您将拥有一个看起来很自然的声音文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多