前言#
對於不想折騰的朋友,通過 Vercel 部署可能更方便。詳見 愛閱書香聽書 微軟 AI 語音 TTS Vercel 部署教程 | Yunfi's Blog
- docker 實現
- 項目地址 yy4382/ms-ra-forwarder-for-ifreetime
- 由 wxxxcxx/ms-ra-forwarder: 免費的在線文本轉語音 API (github.com) 修改而來,記得給大佬點個 star
- 特別感謝 @justnsms 大佬寫的代碼,沒有他的幫助,肯定不可能有這麼方便的方法
- 配置過程中出問題的可以給我發郵件(郵箱在博客側邊欄)
前置條件#
- 有一台可以運行 Docker 的機器
- 安裝好 docker
參考這篇文章的安裝 Docker 一節:#安裝 Docker | Yunfi's Blog
安裝服務器端#
安裝#
# 創建文件夾,名字任意
mkdir ifreetime_tts&&cd ifreetime_tts
# 下載文件
wget https://gist.github.com/yy4382/d0c2a5e2c19323f4aa651f99317fd53e/raw/docker-compose.yml
# 啟動容器
docker compose up -d
# 搞好了!按照下文的方法驗證是否成功,然後在愛閱中配置聽書
想要設置 token 的話,按照 yaml 文件裡的註釋操作
配置 ios 端愛閱書香#
參考 Vercel 部署教程 | 愛閱配置部分 ,唯一的區別在於地址,應該是
https://ip:3000/api/aiyue
有問題評論講
附#
這是我最初做的版本,挺複雜的,僅供參考
- 需要兩個服務,一個是 tts 文字轉語音服務,如果只要安卓的閱讀 3.0 使用,只要這個就可以了;另一個是將第一個服務轉換成愛閱書香可以使用的格式
- 兩個項目的地址:wxxxcxx/ms-ra-forwarder: 免費的在線文本轉語音 API (github.com) ,iranee/ifreetime: iOS 愛閱書香 TTS 自建服務 (github.com),記得給兩位大佬點 star
稍顯麻煩,需要 docker 基礎知識,但是可以讓你知道這一切是如何運作的,放在文末了
ms-ra-forwarder#
- GitHub 地址:wxxxcxx/ms-ra-forwarder: 免費的在線文本轉語音 API (github.com)
- 項目本身提供了
docker-compose.yml
文件,直接用就是了 - 打開
http://你的ip:3000
看看是否有這個頁面
也可以用 vercel,但是每月只有 100G 免費流量,聽的多的 / 還搭了其他服務的要小心些
- 因為微軟把 Azure 的試用關了,所以只能用 ra(edge 的大聲朗讀)接口了
ifreetime#
-
如果你的服務器已經在運行一個支持 php 的網站了,直接把項目裡的
ra.php
中的http://127.0.0.1:3000/api/ra
的 ip 改成你自己在第一步裡用的,然後丟到網站裡就行 -
如果沒有,那麼需要建一個 docker 容器以運行該 php 文件(警告:我沒寫過 php,dockerfile 的寫法是 ChatGPT 給的,不保證最優,但應該能用,反正我成功了)
-
新建一個文件夾,假設叫做 ifreetime (其他的也行)
-
進入文件夾,再建一個叫做 src 的文件夾,把項目中的 ra.php 放進去(或者直接把整個項目 clone 進去也行)
-
修改 ra.php,把
http://127.0.0.1:3000/api/ra
中的127.0.0.1:3000
換成第一步中生成的 ip+ 端口- 對於服務器,最方便的方法是直接用公網 ip+ 端口,對於群晖,最簡單的是用局域網 ip+ 端口
- 經測試可行的其他替代方案:
- 雲服務器做好域名解析和反代之後,使用類似
https://tts.example.com/api/ra
的格式(使用https://tts.example.com
可以訪問 ms-ra-forwarder) - 使用本地 docker 的 ip,一般是 172.17.0.1,所以應該形如
http://172.17.0.1:3000/api/ra
- 雲服務器做好域名解析和反代之後,使用類似
- 不可行的方案:不可以使用 127.0.0.1,因為在容器裡
- 可能會出問題的方案:域名 + 端口的形式,比如
https://www.example.com:3000/api/ra
尤其對於 nas 來說,因為 80/443 沒法用,所以不得不額外加端口。有人這樣搞失敗了,但不確定是不是因為這個問題。有人這樣搞成功了的話,用郵件踢我一腳(郵箱在博客上有寫)
-
回到 ifreetime 文件夾,新建一個叫
Dockerfile
的文件,內容為# 設置基礎鏡像 FROM php:7.3 # 將本地代碼複製到容器中的 /var/www/html 目錄 COPY src/ /var/www/html/ # 設置容器內的工作目錄 WORKDIR /var/www/html # 暴露容器的 8000 端口 EXPOSE 8000 #啟動php服務器 CMD ["php", "-S", "0.0.0.0:8000"]
-
構建並運行:在 ifreetime 目錄中,依次輸入如下指令
docker build -t ifreetime . docker run -d -p 12222:8000 ifreetime
-
這種方法,需要將愛閱中的配置(還有測試的時候)把 3000 都換成 12222. 而且 /api/aiyue 都換成 /ra.php
-
打開手機 App,進入聽書配置 -> 自定義語音庫
創建 -> 高級自定義語音合成名稱:任意
合成字數:建議 200
請求方式:GET
地址:ra.php 網絡地址,如果安裝上面的方法,是
http://你的ip:12222/ra.php
參數 -> 添加 -> 請輸入請求參數:voiceName,內容填自己想要的人聲(參考 這裡),例如 zh-CN-XiaoxiaoNeural
參數 -> 添加 -> 請輸入請求參數:text,內容填 %@
解析字段 -> 添加 -> 請輸入解析字段與規則:playData,內容填 ResponseData
測試發音,如果正確就 ok 了。