什么是重音?
口音不是声音过滤器;它是一种语言中文本的声学实现模式。你不能录制美式英语,通过“振幅和滤波器阵列”运行它,然后弹出英式英语。DSP 有用的是实现韵律,而不是口音。
基本上(并且最容易建模),重音由一系列音素的语音实现规则组成。对口音的感知进一步受到韵律以及说话者在阅读文本时选择的音素的影响。
语音生成
语音生成的过程有两个基本步骤:
文本到音素:将书面文本转换为一系列音素(加上重音等超音段,以及话语边界等韵律信息)。这在某种程度上取决于口音(例如,“实验室”的输出在美国和英国说话者之间有所不同)。
音素到语音:给定音素序列,根据方言对音素的语音实现规则生成音频。(通常你会组合双音素,然后在声学上调整韵律)。这是高度依赖口音的,正是这一步赋予了口音的主要品质。一个特定的音素,即使在两个口音之间共享,也可能具有截然不同的声学实现。
通常这些是成对的。虽然您可以拥有一个使用美国发音的英国口音语音生成器,但这听起来很奇怪。
生成具有给定口音的语音
编写一个文本到语音的程序是一项巨大的工作(特别是,要实现一个通用方案,你必须录制一个母语人士说该语言中每种可能的双音素),所以你最好使用现有的一。
简而言之,如果您想要英国口音,请使用英式英语文本到音素引擎和英式英语音素到语音引擎。
对于美式和英式英语、标准普通话、都市法语等常见口音,将有多种选择,包括您可以修改的开源口音(如下所示)。例如,看看FreeTTS和eSpeak。对于不太常见的口音,不幸的是,现有的引擎可能不存在。
说带有外国口音的文字
带有外国口音的英语在社会上不是很有声望,因此可能不存在完整的系统。
一种策略是将用于母语口音的现成文本到音素引擎与用于外语的音素到语音引擎相结合。例如,在美国学习英语的母语为俄语的人会合理地使用 labour 等单词的美国发音,并将其音位映射到他的母语俄语音位上,并像俄语一样发音。(我相信有一个网站可以为英语和日语做这个,但我没有链接。)
问题是结果太极端了。一个真正的英语学习者会尝试识别和生成在他的母语中不存在的音素,并且还会改变他对母语音素的认识以接近母语发音。结果与母语人士的匹配程度当然会有所不同,但使用纯粹的外国极端听起来很荒谬(而且大多难以理解)。
因此,要生成合理的美式英语和俄语口音(例如),您必须编写一个文本到音素的引擎。您可以使用现有的美式英语和俄语文本到音素引擎作为起点。如果您不愿意找到并录制这样的扬声器,您可能仍然可以使用 DSP 组合来自这两个引擎的样本来获得一个不错的近似值。对于 eSpeak,它使用共振峰合成而不是录制的样本,因此可能更容易组合来自多种语言的信息。
另一件需要考虑的事情是,外语人士经常会在其母语的音韵影响下修改音素序列,通常是通过简化辅音簇、插入辅音元音或双元音或中断元音序列。
有一些关于这个主题的文献。