口音?
重音不是聲音過濾器;它是語言中文本的聲學實現模式。你不能記錄美國英語,通過「振幅和過濾器陣列」來運行它,並且會彈出英式英語。 DSP有用的是在執行prosody,而不是重音。
基本上(最簡單的模型),重音由音素序列的音素規則組成。對口音的感知進一步受到影響by prosody以及說話者在閱讀文本時選擇哪個音素。
語音生成
語音產生的過程有兩個基本步驟:
文本到音素:將書面文字音素的序列(加應力等超音段和韻律信息像話語邊界)。這有點依賴於口音(例如,美國和英國的說話者對「實驗室」的輸出有所不同)。
電話轉語音:根據音素的順序,根據方言的音素語音實現規則生成音頻。 (通常情況下,你會合並雙音素,然後在聲學上調整韻律)。這與口音高度相關,正是這一步賦予口音的主要品質。即使在兩種口音之間共享,特定的音素可能具有明顯不同的聲學實現。
通常這些是成對的。雖然你可能有一個英國口音的語音發生器,使用美國的發音,這聽起來很奇怪。
生成語音與給定的口音
編寫文本到語音的程序是工作的一個巨大的量(特別是要實現一個共同的方案,你必須記錄爲母語的人來說在每一個可能的音素語言),所以你最好使用現有的。
簡而言之,如果您想要英式口音,請使用英式英語text-to-phoneme引擎和英式英語音素引擎。
對於美式和英式英語,標準普通話,大都會法語等常用口音,將會有多種選擇,包括可以修改的開放源代碼(如下所示)。例如,看看FreeTTS和eSpeak。對於較不常見的口音,不幸的是現有的引擎可能不存在。
帶有外國口音
英語上帶有一個外國口音的發言文本是對社會並不十分著名的,所以完整的系統可能不存在。
一種策略是將現成的用於本地口音的text-to-phoneme引擎與用於外語的phoneme-to-speech引擎相結合。例如,一位在美國學習英語的俄語母語人士可以合理地使用實驗室這樣的單詞的美國發音,並將其音素映射到他的母語俄羅斯音素上,並以俄語發音。 (我相信有一個網站會爲英語和日語做這個,但我沒有鏈接。)
問題是結果太過分了。一個真正的英語學習者會嘗試識別和生成他的母語中不存在的音素,並且還會改變他對本地音素的認識以接近本地發音。結果與母語人士的結果有多密切相關,但使用純粹的外部極端聽起來很荒謬(而且大多是不可理解的)。因此,爲了生成似是而非的美式英語口音(例如),您必須編寫一個文本到音素引擎。您可以使用現有的美國英語和俄語text-to-phoneme引擎作爲起點。如果你不願意找到並記錄這樣的揚聲器,你可能仍然可以通過使用DSP來合併來自這兩個引擎的樣本。對於eSpeak,它使用共振峯綜合而不是記錄樣本,所以將多種語言的信息組合起來可能更容易。
另一件需要考慮的事情是,外國人通常會在其母語的語音學影響下修改音素的序列,通常通過簡化輔音羣,插入元音字母元音,或者雙元音或打破元音字母序列。
There is some literature on this topic.
有(至少)兩個完全脫離的問題在這裏:關於文本分析的一部分,有關語音合成的一部分。這些應該作爲獨立的SO問題提出。 – 2012-03-15 01:44:23
@Oli我想到了這一點,但分析部分與生成部分緊密聯繫,我認爲他們應該在一起。 – Jon 2012-03-15 01:45:14
嗯。第一個本質上是一個解析/文本分析問題;第二個本質上是一個DSP問題。範圍似乎有點太廣泛的堆棧溢出問題... – 2012-03-15 01:50:38