ガイド

Dockerで動かすセルフホスト音声合成API

自分のサーバー上の音声合成APIは、HTTPリクエストを送れるあらゆるプログラムのためにテキストを音声に変えます。Webサイト、ボット、ゲームのバックエンド、どの言語のスクリプトでも使えます。テキストはマシンの外に出ず、文字数に応じた料金もかかりません。

このガイドでは、オープンモデルSupertonic 3をベースにしたSuperClonicaエンジンをDockerでHTTPサーバーとして動かす方法を紹介します。CPUまたはNVIDIA GPUでの起動、内蔵音声とカスタム音声でのリクエスト、実運用への準備まで扱います。イメージとエンジンは当社の製品なので、該当する箇所ではそう明記します。

音声合成を自分で動かす理由

クラウドの音声APIは手軽に始められますが、リクエストのたびにテキストが提供元に送られ、文字数で課金されます。セルフホストAPIなら、それを自分で管理するサーバーに置き換えられます。

  • プライバシー:テキストと音声は自分のハードウェアにとどまります。社内文書、メッセージ、ユーザーデータでは特に重要です。
  • コスト:ハードウェアの費用を除けば音声は無料です。長文や大量処理でも請求額は増えません。
  • どんなクライアントでも:1つのHTTPエンドポイントでPython、JavaScript、Go、PHP、C#、シェルスクリプトに対応できます。
  • オフライン:モデルを一度ダウンロードすれば、サーバーはインターネット接続を必要としません。

サーバーを起動する

どのCPUでも:docker run -d --name tts -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu。NVIDIA GPUでは、NVIDIA Container Toolkitをインストールしてから docker run -d --name tts --gpus all -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cuda を実行します。CUDAとcuDNNはイメージに含まれ、ホストに必要なのはドライバーだけです。

初回起動時にSupertonic 3モデル(約385 MB)がsuperclonica-modelsボリュームにダウンロードされ、次回以降は再利用されます。GET http://localhost:8000/health が状態、バージョン、使用中のデバイスを返せば準備完了です。イメージには独自のヘルスチェックがあるため、docker psで準備ができたかを確認できます。

リクエストを送る

POST /synthesize はJSONを受け取り、16ビット・モノラルのWAVファイルを返します:curl -X POST http://localhost:8000/synthesize -H "Content-Type: application/json" -d '{"text": "自分のサーバーからこんにちは。", "voice": "F1", "lang": "ja"}' -o hello.wav。ヘッダーのX-Sample-RateとX-Duration-Secondsが音声の情報を示します。

フィールドはtext、voice、lang、seed、normalizeです。voiceはM1〜M5とF1〜F5の10種類の内蔵音声のいずれか、またはカスタム音声です。langはテキストの言語で、モデルが対応する31言語のいずれかです(中国語は含まれません)。seedを固定すると同じテキストから同じ音声が得られ、normalizeは音量をそろえます。GET /voices は内蔵音声と言語の一覧を返し、/docs では対話型のAPIドキュメントを表示できます。

カスタム音声を使う

Supertonic 3の音声は約0.3 MBのJSONファイルです。音声サンプル付きの無料音声はGitHubのsuperclonica/supertonic-voicesリポジトリにあり、SuperClonicaのカタログには170以上の音声があり、どれも無料のオンラインデモ付きです。

音声はJSONオブジェクトそのものとしてリクエストのvoiceフィールドに入れるため、サーバーは音声ファイルを保持しません。オブジェクトが大きいので、リクエストはファイルに組み立てて curl -d @request.json で送るか、コードからPythonのjson.loadやJavaScriptのJSON.parseで音声を読み込み、テキストと一緒に送信してください。リクエスト本文は最大2 MBです。

設定

サーバーは環境変数から設定を読み込みます。docker runの-eやComposeファイルで指定してください。

  • SUPERCLONICA_API_KEY:設定すると、/synthesize と /voices には Authorization: Bearer とキーのヘッダーが必要になります。
  • SUPERCLONICA_LANES:モデルのコピー数、1〜8(既定は1)。それぞれが一度に1件のリクエストを処理し、個別にメモリを使います。
  • SUPERCLONICA_DEVICE:auto、cuda、cpu(既定はauto:GPUがあればGPU)。
  • SUPERCLONICA_THREADS:CPUスレッド数(既定は物理コアごとに1つ)。
  • SUPERCLONICA_MAX_TEXT:テキストの最大文字数(既定は5000)。

本番運用の前に

いくつかの習慣で、セルフホストの音声APIを速く安全に保てます。

  • /models ボリュームを残して再起動時にモデルを再ダウンロードしないようにし、コンテナは --restart unless-stopped で起動します。
  • ポート8000をそのままインターネットに公開しないでください。APIキーを設定し、HTTPS付きのリバースプロキシの背後に置くか、プライベートネットワーク内で使います。
  • 進捗表示やストリーミングが必要なら、長文は自分で段落に分けて送ります。エンジン自体も長文を最大160文字の自然な区切りで読み上げます。
  • UIのフレーズなど繰り返すテキストの音声はキャッシュしましょう。同じテキスト、音声、seedからは常に同じファイルができます。
  • 自分のハードウェアで計測してください。当社のテストでは、短いフレーズがRTX 5070 Tiで0.12秒、Ryzen 7 5800Xの4スレッドで0.43秒でした。

ライセンス

SuperClonicaエンジンとイメージはApache License 2.0で公開されています。Supertonic 3モデルはOpenRAIL-Mで公開されています。これは非商用条項ではなく禁止用途のリストを持つ、ロイヤリティフリーのライセンスです。同意なく他人になりすます、だます、嫌がらせをする目的で音声を使わず、必要な場面では機械生成の音声であることを明示してください。