開源 Azure TTS 自架服務實測:免金鑰把微軟語音收進自己的 API

開源 Azure TTS 自架服務實測:本機編譯執行零金鑰 0.3 秒合成台灣腔 MP3,779 支微軟聲音 OpenAI 相容 API。但免費走的是借微軟翻譯 App 簽章換 token 的非官方通道,token 壽命不到一小時、兩度集體失效,商用前要看清。

用 AI 摘要這篇文章:

想在自家伺服器呼叫微軟 Azure 的類神經語音,照官方路線得先開 Azure 帳號、綁信用卡、拿訂閱金鑰。這套 MIT 授權的開源服務走另一條路:下載、執行、貼上文字,0.3 秒內拿到 MP3,全程不需要任何金鑰。它辦得到的原因,也是你該認真看待的風險所在。

我在自己的 Mac 上把這套服務從原始碼編譯、執行起來,貼進 14 個中文字,0.297 秒後拿到一段 26 KB 的 MP3,聲音是台灣腔的曉雨。整個過程沒有申請任何帳號,沒有填過任何金鑰,設定檔一個字都沒改。這不是魔術,接下來會拆開給你看語音是從哪裡來的。

這套工具在 GitHub 上叫 zuoban/tts,介面自稱 TTS Studio,官方示範站掛在 tts.wanjq.com。圍繞它,你大概會想知道三件事:不用金鑰,語音到底怎麼來的?自己架難不難、台灣聲音有多少?還有,直接用官方站就好,幹嘛要自架?三件事的答案,下面逐一拆開,誰該用誰不該用放在最後。

語音真是免金鑰來的:它借用微軟翻譯 App 的簽章

翻開原始碼,答案就在 internal/utils/utils.go 這個檔案裡。服務要合成語音前,會先對 dev.microsofttranslator.com 這個微軟翻譯服務的端點發一個請求,附上一組精心計算過的 X-MT-Signature 簽章。這組簽章的內容是把自己偽裝成微軟翻譯的 Android App:請求標頭裡的 User-Agent 填 okhttp/4.5.0,X-ClientVersion 填 4.0.530a 5fe1dc6c,家區域填 zh-Hans-CN,簽章本身則用一組寫死在原始碼裡的 HMAC-SHA256 金鑰,對「MSTranslatorAndroidApp 加上網址、日期、流水號」這串字計算出來。連發請求的使用者編號,都是當場隨機湊出來的十六進位字串,模仿得相當到位。

微軟那一端驗完簽章,會回傳一組臨時 token 和一個區域代碼。接著服務就拿這個 token 直接當 Authorization 標頭,去打 *.tts.speech.microsoft.com 的 cognitiveservices 端點,也就是 Azure 語音服務正式的合成通道。合成時請求體是一段 SSML 標記語言,聲音、語速、語調、情感風格全包在裡面,服務還會保留你手寫的 break、prosody 這類 SSML 標籤不轉義,給進階使用者留了後門。整個 repo 裡找不到任何 Azure 訂閱金鑰的處理邏輯,付費牆就這樣被繞過去了。

我在本機跑起來的伺服器日誌,完整錄下了這條路:服務向翻譯端點換到 token,被分配到 southeastasia 區域,token 的有效期剩下 46 分 37 秒。這個數字很重要,後面講穩定性時會再回來。順帶一提,設定檔裡雖然寫著 region: eastasia,實際用哪個區域是微軟端點說了算,這個設定值更像備註。

把話講白:免費是真的,但這條通道在微軟的條款裡沒有被點頭。它比較像「借住在飯店大廳」,住了很久沒被趕,不代表持有房契。

自架的最短路徑:一行指令到第一個 MP3

專案提供三種部署形態。最常見的是 Docker,映像檔 zuoban/zb-tts 在 Docker Hub 上累積超過 46,000 次拉取:

docker run -d -p 8080:8080 --name=tts zuoban/zb-tts

跑起來後打開 http://localhost:8080 就是網頁介面,API 在同一個埠直接可用。不想用 Docker 的人可以像我一樣從原始碼編譯,repo 是 Go 後端加 React 19 前端的組合,go build 一個指令產出 15.8 MB 的執行檔,放在 repo 目錄下執行即可,它會自己讀到預設設定。第三種形態是 Cloudflare Worker,整包邏輯壓縮在一支 JavaScript 檔案裡,貼進 Worker 就能跑,適合不想開機器、只要輕量無伺服器的人。Worker 形態還支援設一組 API_KEY 環境變數做簡單門禁,不想被陌生人蹭流量的話記得設。

我實測的兩次合成都在半秒內完成。第一次用台灣腔曉雨,14 個字 0.297 秒;第二次用中國腔曉曉加上 cheerful 情感和 15% 加速,0.235 秒。輸出格式是 24kHz 取樣、48kbps 位元率、單聲道 MP3,這個規格對旁白和聽書綽綽有餘,要進影片剪輯也夠用。長文不用自己切,服務會照標點把文字切成句子,超過 100 字就啟動分段、在 60 到 100 字之間合併後逐段合成再接回來,分段門檻都能在設定檔調,單次請求的文字上限是 65,535 字,一本小說分幾次貼完沒有問題。

重複呼叫的效率也有照顧到。聲音清單在服務端有分層快取,同一份清單重複請求時不會每次都去打微軟端,Cloudflare Worker 形態更把清單快取二十四小時。併發上限預設是 20 個請求,超過的排隊等,自架要同時餵多個流程的話,這個值可以在設定檔調高,機器撐得住、通道不被微軟盯上就好。

779 支聲音的清單裡,台灣腔佔三支

聲音清單直接來自微軟端,我從官方站的 API 拉下完整 JSON,逐筆數過:779 支聲音,涵蓋 154 個語言地區代碼,英文就佔 198 支。中文部分共 80 支,其中 zh-TW 有三支,分別是女聲曉臻、男聲雲哲、女聲曉雨。zh-CN 有 67 支,六種地方變體再佔 7 支,遼寧兩支,廣西、河南、陝西、山東、四川各一支,想要一口四川腔的旁白,在站上介紹過的工具裡,只有這份清單把方言腔調攤開來挑。粵語另有三支,客家話和閩南語則不在清單上。

TTS Studio 聲音庫頁面以卡片列出聲音,畫面中可見台灣的曉臻、雲哲、曉雨與試聽按鈕Pin
TTS Studio 聲音庫的中文聲音卡片,台灣三支聲音都在清單上(官方示範站,2026 年 9 月)

要注意的是情感風格的分配並不平均。中國腔的曉曉一支聲音就掛了 20 種風格,從新聞播報、耳語、詩歌朗誦到興奮吶喊都有,體育實況那類風格則掛在雲健身上,API 呼叫時加一個 style 參數就能切換。台灣三支聲音則沒有任何風格標記,就是乾淨的朗讀。若你的內容需要撒嬌、興奮、生氣這類表演性語氣,目前只有 zh-CN 的聲音辦得到,用台灣腔朗讀再交給後製處理是比較務實的路。

API 有三種呼叫形態,全部實測通過:

形態端點適合誰
舊版GET /tts?t=文字&v=聲音閱讀 App、最簡整合
第一版POST /api/v1/tts正規整合,支援完整參數
OpenAI 相容POST /v1/audio/speech已接 OpenAI SDK 的應用直接換網址

認證方式有三種任選:Authorization: Bearer 帶在標頭、api_key 塞在查詢字串、或放進 JSON 請求體。自架預設的 api_key 是空字串,等於不設防,要開放給區網以外的呼叫者前,記得先在設定檔把金鑰補上,否則任何知道你網址的人都能消耗你的通道。

想先摸一下這套服務的手感,不用架任何東西,拿官方站跑一條最舊的端點就有效:

curl "https://tts.wanjq.com/tts?t=你好,這是台灣腔的測試&v=zh-TW-HsiaoYuNeural" -o test.mp3

換掉 t 後面的文字和 v 後面的聲音代碼就能試不同的組合,聲音代碼的清單可以打 /api/v1/voices 端點拿到完整 779 筆。這條指令我實際跑過,回傳的是 21 KB 的 MP3。

OpenAI 相容這條路特別值得展開。你的應用本來如果用 OpenAI 的 tts-1 模型,只要把 API 網址換成自己架的這套,model 欄位照填 tts-1,聲音名稱會自動映射到對應的微軟聲音,alloy 映射曉伊、echo 映射雲希、onyx 映射雲健,語速的 0.0 到 2.0 刻度也會換算成微軟的百分比。對已經寫好 OpenAI 整合的人來說,等於免改程式碼就換了一顆台灣聲音的引擎。

直接用官方站可以,但你的文字會出門

如果連 Docker 都懶得裝,官方示範站 tts.wanjq.com 就是現成的。我匿名實測三條合成端點,全部不需要登入和金鑰,各自回傳了可播放的 MP3,舊版端點、第一版 API、OpenAI 相容端點各測一次,在免金鑰、回傳 MP3 這點上行為一致。站上也有完整的網頁介面,選語言、選聲音、調語速語調、按生成,旁邊還有聲音試聽、收藏夾、文字模板和歷史記錄,介面自稱 TTS Studio。

TTS Studio 文字轉語音服務的主介面,包含語言與聲音的選擇清單和文字輸入區Pin
TTS Studio 主介面的語言選擇、聲音與文字輸入區(官方示範站,2026 年 9 月)

不過官方站有兩件事你該知道。它的文字會出門,合成發生在站方的伺服器上,你貼的每一個字都會經過它,自架的好處正是這條邊界:文字只進你自己的機器和微軟的語音端點,中間沒有別人。另外,介面是簡體中文,首頁、聲音庫這些導覽字串全部以簡體字寫死在前端原始碼裡,沒有多語言切換,看得懂,但讀起來就是不親切。

這個專案的網址其實搬過家。README 裡閱讀器整合的範例連結還寫著舊網址 t.leftsite.cn,這個網域現在已經沒有回應,根網域連 DNS 紀錄都消失了,倖存的只有 530 錯誤頁。現在的官方站掛在 wanjq.com 底下,GitHub 帳號 zuoban 的個人資料寫著 WangJinQiang,與網域名稱的拼音縮寫對得上,伺服器以 Caddy 架設,看起來是作者自營的機器。照著舊文章裡的 t.leftsite.cn 連結點進去,只會看到錯誤頁。

閱讀 App 的族群在這套工具有專屬位置。API 內建 reader.json 和 ifreetime.json 兩種閱讀器設定的產生端點,網頁介面上有匯入閱讀軟體的按鈕,愛閱記這款 App 的匯入 2025 年 11 月就有了,2026 年 2 月的改版把按鈕補了回來。以閱讀類 App 為例,把自架網址加上聲音和語速參數組成 reader.json 連結,在朗讀引擎設定頁選網路匯入、貼上連結,聽書的聲音就從 App 內建的機器腔換成微軟類神經聲音,整段流程不用碰到任何金鑰。我實際打了 reader.json 端點,它回的是閱讀軟體看得懂的引擎設定檔:名字欄帶你指定的顯示名稱,網址欄是預先組好的合成範本,App 裡的語速滑桿會自動換算成服務端的百分比參數,貼回去就能聽。

免費的代價:token 活不到一小時,通道說斷就斷

回頭看那個 46 分 37 秒的 token 壽命。這正是 2026 年 2 月 2 日 GitHub issue #54 抱怨的問題,標題寫得直白:每隔一個小時都要重啟才能用,是因為 API 失效嗎。原因就是 token 到期後,舊版程式碼不會主動換新。作者隔天提交修復,把快取的 token 提前五分鐘視為過期,並在收到 400、401、403 這類認證失效回應時自動作廢快取、重換 token 重試一次,失敗回應也會記下微軟回傳的請求編號方便追查。修復之後自架的使用者基本無感,但這件事告訴你通道的體質:它的有效性以分鐘計,靠的是程式不斷續命。連向翻譯端點要簽章這一步,程式本身就寫了三次自動重試,看得出來這條路容易抖。

更早的 2025 年 11 月 20 日,issue #42 記錄了另一次集體失效,當時的使用者回報工具突然出問題、完全無法合成,兩次事件相隔不到三個月。這類借道通道的死法通常有兩種:微軟換掉簽章演算法,或直接封鎖這組出廠金鑰。哪一天任何一種發生,所有自架的人會同時啞掉,而且沒有任何 SLA 可以求償。

商用的人要在這裡停一下。微軟語音服務的正式通道是自備金鑰那一條,F0 免費層每個月有 50 萬字元的類神經語音額度,但開通要 Azure 帳號和一張信用卡,這也是站上先前介紹過的 SpeakItAI 走的路。這套開源工具走的通道,在微軟條款裡找不到被允許的依據,也沒有被封鎖的判例,地位只能視為未知。個人的旁白、聽書、自動化產線用它,壞了就換,成本低。要對外收費的產品把地基放在這裡,等於把營運風險押在一個隨時可以單方面關閉的水龍頭上。

專案本身的體質倒是乾淨。MIT 授權,商用改作都合法,授權檔案完整放在 repo 裡。639 顆星、141 個 fork,2024 年 4 月開張,兩年累積下來是個中等規模的社群專案。不過主分支的最後一筆提交停在 2026 年 4 月 28 日,Docker 映像檔最後更新是 2026 年 2 月 4 日,GitHub 上也沒有發布過正式 release,想鎖版本的人只能認 commit。作者回 issue 的速度不差,2026 年 4 月底還回覆了一個提問,但程式碼的推進已經放慢。從提交歷史看,2025 年 12 月到 2026 年 1 月是一波功能衝刺,收藏功能、文字模板、統一認證、官方形象頁和新的設計系統都在這兩個月落地;2026 年 2 月初修完每小時失效的問題,緊接著一輪架構重構;4 月 28 日加入版本化路由和清單快取後就停筆,用的是「能用但不追新」的節奏。

台灣腔、OpenAI 相容、不碰 Azure 帳號:三個條件都中才選它

把站上介紹過的同類工具放在一起看,選擇其實很清楚。想要正規軍路線、願意開 Azure 帳號拿免費額度的人,SpeakItAI 用自備金鑰把 Azure 語音合成包成可下載音檔,文字只送微軟,是條款上站得住的路。只是要聽書、懶得架任何東西的人,Text2Voice 這類免安裝網站半分鐘就能出 MP3,代價是每小時的次數限制和文字出門。已經有 Azure 金鑰、只是想匯入閱讀器設定的人,Azure TTS Importer 產生設定檔就好,根本不用跑服務。想要開源又想避開這條翻譯 App 通道的人,EasyVoice 走 Edge 朗讀引擎的路線,原始碼同樣公開、同樣能自架,聲音選擇少一些。

zuoban/tts 的甜蜜點在三個條件同時成立時:你要台灣或中國腔的微軟類神經聲音、你要 OpenAI 相容的 API 餵自動化流程、你不想碰 Azure 帳號。三個都中,它是站上介紹過的工具裡最短的路。缺任何一個,前面那串替代品都有更合身的選項。

我的判斷是:自己架來用,它是個誠實又鋒利的小工具,MIT 授權、半秒合成、聲音全、API 好接。但對它的免費保持清醒,那是一條借來的通道,今天的 0.3 秒不代表明年的 0.3 秒。重要的產線,請把這套當備援,把自備金鑰的正路當主幹。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 1478

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...