前言#
手間をかけたくない方には、Vercel へのデプロイがより便利かもしれません。詳細は 愛読書香聴書 Microsoft AI 音声 TTS Vercel デプロイチュートリアル | Yunfi's Blog をご覧ください。
- docker による実現
- プロジェクトアドレス yy4382/ms-ra-forwarder-for-ifreetime
- wxxxcxx/ms-ra-forwarder: 無料のオンラインテキスト音声変換 API (github.com) を基に改良されたものです。ぜひ大佬にスターを付けてください。
- 特に@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
# 完了しました!以下の方法で成功を確認し、愛読書香で聴書を設定してください。
トークンを設定したい場合は、yaml ファイルのコメントに従って操作してください。
iOS 端末の愛読書香の設定#
Vercel デプロイチュートリアル | 愛読設定部分 を参考にしてください。唯一の違いはアドレスで、
https://ip:3000/api/aiyue
であるべきです。
問題があればコメントしてください。
付録#
これは私が最初に作ったバージョンで、かなり複雑です。参考までにどうぞ。
- 2 つのサービスが必要です。1 つは TTS テキスト音声変換サービスで、Android の読書 3.0 を使用するだけならこれだけで大丈夫です。もう 1 つは最初のサービスを愛読書香が使用できる形式に変換するものです。
- 2 つのプロジェクトのアドレス:wxxxcxx/ms-ra-forwarder: 無料のオンラインテキスト音声変換 API (github.com) 、iranee/ifreetime: iOS 愛読書香 TTS 自建サービス (github.com)、両方の大佬にスターを付けることを忘れずに。
少し面倒ですが、Docker の基礎知識が必要です。しかし、これによりすべてがどのように機能しているかを理解できます。文末に置いておきます。
ms-ra-forwarder#
- GitHub アドレス:wxxxcxx/ms-ra-forwarder: 無料のオンラインテキスト音声変換 API (github.com)
- プロジェクト自体は
docker-compose.yml
ファイルを提供しているので、そのまま使用できます。 http://あなたのip:3000
を開いて、このページが表示されるか確認してください。
Vercel を使用することもできますが、毎月 100G の無料トラフィックしかないため、多く聴く方や他のサービスも利用している方は注意が必要です。
- Microsoft が Azure の試用を終了したため、RA(Edge の音声読み上げ)インターフェースを使用するしかありません。
ifreetime#
-
プロジェクトアドレス:iranee/ifreetime: iOS 愛読書香 TTS 自建サービス (github.com)
-
もしサーバーがすでに PHP をサポートするウェブサイトを運営している場合は、プロジェクト内の
ra.php
のhttp://127.0.0.1:3000/api/ra
の IP を最初のステップで使用したものに変更し、ウェブサイトに追加するだけで大丈夫です。 -
もしそうでない場合は、この PHP ファイルを実行するために Docker コンテナを作成する必要があります(警告:私は PHP を書いたことがないので、Dockerfile の書き方は ChatGPT からのもので、最適である保証はありませんが、動作するはずです。実際に成功しました)。
-
新しいフォルダーを作成し、仮に ifreetime と呼びます(他の名前でも構いません)。
-
フォルダーに入り、src という名前のフォルダーを作成し、プロジェクト内の ra.php をそこに入れます(またはプロジェクト全体をクローンしても構いません)。
-
ra.php を修正し、
http://127.0.0.1:3000/api/ra
の127.0.0.1:3000
を最初のステップで生成した IP + ポートに変更します。- サーバーの場合、最も便利な方法は直接パブリック IP + ポートを使用することです。Synology の場合、最も簡単なのはローカル 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 に変更します。
-
モバイルアプリを開き、聴書設定 -> カスタム音声ライブラリに進みます。
作成 -> 高度なカスタム音声合成名前:任意
合成文字数:200 を推奨
リクエスト方法:GET
アドレス:ra.php のネットワークアドレス。上記の方法をインストールした場合、
http://あなたのip:12222/ra.php
になります。パラメータ -> 追加 -> リクエストパラメータを入力してください:voiceName、内容は自分が望む声を入力します(こちらを参考に)、例えば zh-CN-XiaoxiaoNeural。
パラメータ -> 追加 -> リクエストパラメータを入力してください:text、内容は %@を入力します。
解析フィールド -> 追加 -> 解析フィールドとルールを入力してください:playData、内容は ResponseData を入力します。
発音をテストし、正しければ OK です。
