为了在文本到语音(TTS)系统中调整语音速度和音调,开发人员可以使用标记语言、API 参数和特定于模型的控制的组合。 大多数现代 TTS 平台,例如 Amazon Polly、Google Cloud Text-to-Speech 和 Microsoft Azure Speech,都支持语音合成标记语言 (SSML)。 SSML 标签如 <prosody rate="x">
允许您修改速度(例如,rate="fast"
或 rate="150%"
) 和音调 (例如,pitch="high"
或 pitch="+5%"
)。 例如,<prosody rate="slow" pitch="low">Hello</prosody>
会生成较慢、较深沉的语音。 API 通常会公开直接参数,例如 Google 的 speaking_rate
(例如,1.5
表示快 50%)或 pitch
(例如,-3.0
表示较低的音调)。 MaryTTS 或 Festival 等开源工具也允许通过配置文件或代码进行类似的调整。
后处理音频输出是另一种方法。 生成语音后,开发人员可以使用数字信号处理 (DSP) 库来独立修改速度和音调。 例如,Python 中的 LibROSA 提供了 time_stretch
来改变速度而不改变音调,并提供了 pitch_shift
来调整音调。 像 FFmpeg 这样的工具可以将滤波器(例如,atempo
用于速度,asetrate
用于音调)应用于 WAV 或 MP3 文件。 然而,如果过度使用这些方法,可能会引入失真。 例如,使用 atempo
将速度提高到 200% 以上可能会使音频失真,而极端的音调变化可能会使声音听起来像机器人。 当需要超出 TTS 引擎原生支持的细粒度控制时,此方法非常有用。
最后,自定义 TTS 模型能够进行更深入的调整。 训练或微调像 Tacotron 2 或 FastSpeech 这样的模型允许开发人员将速度和音调参数直接嵌入到合成过程中。 例如,FastSpeech 使用持续时间预测器来控制音素长度,这会影响语速。 在推理过程中调整模型的持续时间乘数可以加快或减慢输出。 类似地,修改像 WaveGlow 这样的声码器中的基频 (F0) 会改变音调。 像 Coqui TTS 或 NVIDIA 的 NeMo 这样的平台提供了 API 来以编程方式调整这些变量。 与后处理相比,这种方法需要更多的技术投入,但可以提供精确、听起来自然的结果。