動かざることバグの如し

近づきたいよ 君の理想に

irodori-ttsをOpenAI Text-to-Speech互換APIで使う

環境

  • irodori-tts-500m-v3
  • Python

やりたいこと

Irodori-TTSはAratako氏が開発した日本語特化のローカル音声合成AIモデルである。

  • 日本語に最強クラスの対応力: やっぱり日本人が作ったTTSしか勝たん
  • 絵文字で感情をコントロールできる: テキスト中に絵文字を挿入するだけで声のトーンや感情表現が変わる
  • 参考音声クローニング機能: 好みの参考音声を与えれば、その声質に近い音声を生成できる。たった10秒程度の音声データでも機能する

で、自分はOpen-LLM-VTuberを使って嫁を召喚したかった。

github.com

Open-LLM-VTuberにはOpenAI互換のTTS設定項目がある。ここにIrodori-TTSの互換APIを指定すれば、Open-LLM-VTuberのバックエンドとしてIrodori-TTSが使えるはずだ。

openai_tts: # Configuration for OpenAI-compatible TTS endpoints
  # These settings override the defaults in the openai_tts.py file if provided
  model: 'kokoro' # Model name expected by the server (e.g., 'tts-1', 'kokoro')
  voice: 'af_sky+af_bella' # Voice name(s) expected by the server (e.g., 'alloy', 'af_sky+af_bella')
  api_key: 'not-needed' # API key if required by the server
  base_url: 'http://localhost:8880/v1' # Base URL of the TTS server
  file_extension: 'mp3' # Audio file format ('mp3' or 'wav')

手順

探してみると有志の方がすでに互換APIを作ってくださっていたので、ありがたく使わせてもらう。

github.com

Dockerで起動したら、まずリファレンス音声を登録する。リファレンス音声は10秒程度でも十分だが長いほうが品質が良くなる傾向はあった。最大30秒なので注意。

curl -XPOST http://localhost:8880/v1/audio/voice_contents -F voice_id=myvoice  -F "file=@ref.wav" 

続いて音声を生成する。

curl http://localhost:8880/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
    "model": "irodori-tts-500m-v3",
    "input": "おはようございます。",
    "voice": "myvoice"
  }' \
  --output output.mp3

設定変更

.envでIrodori-TTSのデフォルトパラメーターを変更できる。自分の場合は多少時間かかっても品質向上したかったのでNUM_STEPSを増やした。

# Diffusionサンプリングのステップ数(デフォルト: 40、範囲: 1〜120)
NUM_STEPS=60
CFG_SCALE_TEXT=4

V3を使う場合

V2とV3ではAPIに渡すパラメーターが異なり、元のリポジトリのままではV3が動作しない。自分でフォークしてV3対応させたので公開しておく。

github.com