聲音合成器 – 打造自己的外語學習庫

Introduction

一個可以透過 web speech synthesis API,使用者指定文檔(含 Xmind 匯出的 .md 檔),產生外語發音的基礎應用。

上一個作品看來,其實 TTS(Text-To-Speech) 本身一點都不難,因為 speech synthesis API 有自己的 Demo,可以看到其實基本的功能都有了,照著他 Github 上面的 code,很簡單就可以刻出一個。

但是我想要它可以像坊間英文教學書附的 CD 一樣,把書中每一句英文都念一次,方便我通勤時放來聽,或甚至當個背景音樂放著。而且我都是用 Xmind 這套心智圖軟體,來管理我的英文「資料庫」,於是需求誕生了,我想要這個程式幫我把整個心智圖裡的文字都唸出來!

Do it!

因為 Xmind 免費版能夠匯出的檔案類型有限,我選了最方便讀取的 .md 檔,其實只需要將一些 markdown 的特有元素忽略(如:#、##、###、-),整份檔案其實還是一個普通的 txt 文字檔。

於是寫了一些 filter,並加上一些可以客製化 TTS 的使用者介面,一個平凡卻很實用的「發音產生器」就完成啦:

  1. 選擇發音語系,並調整音量、語調、速度等
  2. 手動輸入文字,或上傳 .txt/.md 檔案
  3. 支援用 Enter 換行
  4. 可上傳透過 Xmind 匯出的 .md 檔
  5. 可以無窮重複,當作背景音樂聽

Demo

操作步驟

Live DemoView on Github

What’s the Difficulty?

最大的困難在於,處理使用者上傳或打上去的文字。

畢竟不是大家都跟我一樣用 Xmind 管理,或即便是用 Xmind,架構的編排若是跟我愈想的不一樣,可能就沒辦法正常運作,簡單來說,要做到非常彈性,是很有難度的。

於是我盡量揣摩使用者會放上來的文字格式,讓程式盡量彈性,並放了個 Xmind .md 範例檔案上去。

Note

會有這樣的需求,有兩個原因:首先是因為我通勤時間有40分鐘在捷運上,在超擠的捷運上,我只想戴著耳機聽英文;第二,聽英文很簡單,舉凡 YoutubeBBCVOA 等,甚至一些英文教學公司做的 App,種類多樣,發音正確,很多都很有趣。

當然這些都很棒,上面說的方式我都曾經在捷運上聽過,但後來我愈來愈發現,這些東西都少了一個元素 — 客製化。

比如我今天在 Youtube 聽到一段不錯的演講,然後在單字 app 聽到一句例句想背下來,接著去查個 oxford dictionary 有段解釋很不錯,總不能每天都在捷運上切換各種 app 吧,我唯一能做的就是把他們複製貼到我的 Xmind 心智圖,然後有空的時候拿出來看,那我的疑問是:為什麼不能直接幫我把 Xmind 唸出來?於是這個可以汲取各家精華的 project 就誕生了。

但不得不承認,最大的缺點就是 TTS 的聲音都跟機器人一樣,對學語言入門的人,是非常不建議的,因為除非發音的規則已經內化,否則很容易「歪掉」,最後講話也變成機器人。若要做到接近真人的 TTS,就得試著去介接 Amazon Polly 之類的服務,但考量做為一個 open source,我應該是負擔不起費用,於是還是使用 device 的 TTS engine。

但不用太絕望,TTS engine 不一定要用內建的死板聲音,可以到 Google play 或 App store 去下載,像我就到 Vocalizer 買了個美國英語的 engine,雖然還是聽得出來是機器人,但已經好不少了,我對自己的發音還算有自信,不至於被影響。

Reference

Web_Speech_API
speechSynthesis