cv.cm

AI · AI 音訊

文字轉語音(TTS)是怎麼運作的?什麼是神經網路 TTS?

閱讀約 8 分鐘

簡答

文字轉語音(TTS)把文字變成音訊,分三個階段:先將文字正規化(數字、日期、縮寫),再轉成發音,最後生成波形。神經網路 TTS 使用以錄音訓練的網路,節奏和語氣更自然。瀏覽器透過 Web Speech API 提供的語音來自裝置或其廠商,所以手機和電腦上的聽感不同。

開啟文字轉語音

TTS 系統的三個階段

  1. 文字正規化。系統把文字改寫成可以唸出來的字詞。「Dr. Lee paid $25 on 3/4」必須變成類似「Doctor Lee paid twenty-five dollars on March fourth」的樣子(或依地區唸成「the third of April」)。很多念錯的狀況其實出在這一步,而不是聲音本身。
  2. 語言分析。字詞被轉成音素,也就是一種語言的發音單位,系統再預測重音、斷句和語調。拼法相同但唸法不同的字,例如現在式與過去式的「read」,或有多種讀音的漢字,必須靠上下文才能判斷。
  3. 波形生成。聲音及其時間點被轉成音訊取樣。較早的系統把錄好的片段拼接起來(拼接式合成),或使用共振峰模型,聽起來很機械。神經網路系統則用網路來預測音訊。

經典的神經網路設計 Tacotron 2 清楚呈現了現代的分工:一個網路把文字對應到梅爾頻譜圖(語音的時間—頻率圖像),第二個網路,也就是聲碼器(vocoder),再把這張圖轉成波形。在作者的聽力測試中,它的得分接近專業錄音。較新的系統常把這些階段合併,或用語言模型風格的網路生成壓縮的音訊 token,因此只需一小段樣本就能複製說話者的聲音。

神經網路 TTS 與瀏覽器的系統語音

網頁不需要自己的模型,就能透過 Web Speech API 發聲。speechSynthesis 物件會用平台提供的其中一種聲音,朗讀一個 SpeechSynthesisUtterance。

瀏覽器系統語音(Web Speech API)神經網路 TTS 服務或模型
聲音來源作業系統或瀏覽器廠商;有些在本機,有些在遠端你自己執行的模型,或你呼叫的雲端 API
語音選擇取決於安裝了什麼;Windows、macOS、Android、iOS 各不相同固定的語音目錄、自訂語音,有時可複製聲音
品質從機械感到相當自然都有,視裝置而定通常很自然,節奏與情緒表現更好
費用與設定免費、不需金鑰,本機語音可離線使用需要 API 金鑰並依字元數計費,或下載大型模型
取得音檔API 不提供;只會從喇叭播放通常會回傳 MP3、WAV 或類似格式
聲音複製不支援部分服務支援,並設有同意檢查

每個語音都會回報 localService 旗標。規格說明,本機合成器為 true,遠端服務則為 false;遠端語音可能需要網路,也可能增加延遲。

const u = new SpeechSynthesisUtterance("Your order has shipped.");
u.lang = "en-GB";
u.rate = 0.9;   // 1 is normal; spec allows 0.1 to 10
u.pitch = 1.0;  // 0 to 2, 1 is the voice default
u.volume = 1.0; // 0 to 1
const voices = speechSynthesis.getVoices();
u.voice = voices.find(v => v.lang === "en-GB") || null;
speechSynthesis.speak(u);

語音常常在頁面啟動之後才載入,所以 getVoices() 一開始可能回傳空清單;請監聽 voiceschanged 事件。例如 cv.cm 的文字轉語音工具,用的就是這些內建語音,並提供語速和音調控制。它適合快速試聽草稿,而不是神經網路語音生成器,且語音清單取決於你的裝置。

SSML:控制停頓與發音

語音合成標記語言(SSML)是 W3C 標準,是一種告訴 TTS 引擎如何朗讀文字的 XML。大多數雲端 TTS 服務都接受它。Web Speech 規格允許在發話內容中使用 SSML,但不支援某些標籤的引擎必須移除標籤、只讀剩下的文字,因此瀏覽器的支援並不一致。

<speak>
  Your code is <say-as interpret-as="characters">A7K</say-as>.
  <break time="500ms"/>
  Please call <sub alias="World Health Organization">WHO</sub>
  before <prosody rate="90%" pitch="+2st">Friday at noon</prosody>.
  The word is <phoneme alphabet="ipa" ph="təˈmɑːtoʊ">tomato</phoneme>,
  and it is <emphasis level="strong">not</emphasis> optional.
</speak>
元素作用範例值
break插入停頓time 250ms 或 2s;strength 從 weak 到 x-strong
prosody改變語速、音調、音量rate 90% 或 slow;pitch +2st 或 high;volume +6dB 或 soft
emphasis強調一個字level 為 strong、moderate、reduced
say-as當作字元、日期或數字來唸interpret-as 的值依引擎而定
sub唸出別名而不是書寫的文字WHO 唸成 World Health Organization
phoneme指定精確發音alphabet 為 ipa;支援是選配
voice、lang在文字中途切換語音或語言英文句子中引用的外語片名

如果服務忽略 SSML,你仍然可以用純文字來引導:用逗號和句號製造停頓、把數字寫成文字,以及用近似音拼寫難唸的名字。

寫出唸起來好聽的文字

  • 使用短句。長句會讓聲音找不到自然的換氣點。
  • 在重要時,把數字寫成該唸的方式:「兩千零二十六」或「二〇二六」。
  • 展開聽眾需要聽到的縮寫與單位:「km/h」可能被逐字母唸出來。
  • 設定正確的語言與地區。用 en-US 語音唸西班牙語人名,或用 zh-CN 語音唸英文,都會用錯發音系統。
  • 發布前把完整成果聽一遍,檢查人名、數字和有兩種讀音的字。

聲音複製:同意與法律

現代模型只要一小段錄音,就能模仿一個人的聲音。這對於替自己的影片配音,或把聲音還給失去聲音的人很有用,但也被用於詐騙,例如模仿親人或公司董事的來電。請把任何聲音都視為屬於說話者本人的個人資料。

地區規定摘要狀態
中國大陸對人臉、人聲等進行編輯的服務,必須提示使用者告知被編輯的個人並取得其單獨同意(《互聯網信息服務深度合成管理規定》第 14 條)。可能造成誤導的合成人聲與仿聲,必須作顯著標識(第 17 條)。2025 年的標識辦法另增顯式標識與中繼資料標識,並禁止移除。2023-01-10 起施行;標識辦法自 2025-09-01 起施行
歐盟歐盟《人工智慧法》第 50 條:提供者必須以機器可讀的方式標記合成音訊,發布深偽音訊或影片的人必須揭露其為人工生成。個人資料規範同樣適用於聲音錄音。依第 113 條自 2026 年 8 月 2 日起適用;請留意後續修正
美國撰文時沒有統一的聯邦聲音複製法。保護來自各州的肖像權(right of publicity)與隱私法,以及現行的詐欺與消費者保護規範。各州不同

信譽良好的聲音複製服務,會在建立聲音之前要求說話者錄一段同意聲明。如果某個工具讓你不經任何檢查,就能從任何片段複製任何人的聲音,請不要把它用在要公開發布的內容上。

常見問題

為什麼同一個網頁在手機和筆電上聽起來不一樣?

Web Speech API 使用每台裝置上安裝的語音,或其廠商提供的語音。Windows、macOS、Android 和 iOS 內建的語音各不相同,所以同樣的程式碼會產生不同的聲音。

可以從 Web Speech API 下載 MP3 嗎?

無法直接下載。這個 API 只會透過喇叭播放語音,不會回傳音訊資料。要取得檔案,你需要能輸出音訊的 TTS 服務或模型,或使用螢幕或音訊錄製軟體。

複製名人的聲音合法嗎?

在多數地方,未經許可就把知名人物的聲音用於廣告、產品或可能誤導聽眾的內容,會因肖像權、隱私、消費者保護或深度合成規範而產生法律風險。請先取得許可,並標示成果。

TTS 和聲音轉換有什麼差別?

TTS 是從文字產生語音。聲音轉換則是拿一個人說話的錄音,改成另一個人的聲音,同時保留原本的節奏與情緒。

為什麼 TTS 會唸錯人名?

模型是根據拼寫和訓練資料來猜發音。罕見的人名、外來語和有多種讀音的字,常常猜錯。請使用 SSML 的 phoneme 或 sub 標籤,或用近似音重新拼寫人名。

全部 AI 教學