日本語ボイスクローンTTS『Irodori-TTS』で“自分の声”をAIに再現させてみた(Google Colab編)

日本語特化のローカル音声合成(TTS)モデル「Irodori-TTS」(作者: Aratakoさん)を触ってみました。Shorts用のナレーションを自前で量産できないかと探していて見つけたモデルなんですが、ローカルで無制限に回せる・参照音声からゼロショットで声をクローンできる・絵文字でスタイルを盛れる、と気になる要素が揃っていました。中でも目玉はゼロショットのボイスクローン。参照音声を渡すだけで声を真似てくれるので、今回は試しに自分の声を録って、AIに“自分の声”を再現させるところまでやってみました。

huggingface.co

github.com

この記事はその備忘録です。HF Spacesのデモ → Google Colabでの検証、というところまでを実際にやってみた記録としてまとめています(実質「Colab検証編」です)。ローカルPCでのGPU本番運用は、対応GPUを用意して別途まとめたいところです。

⚠️ 本記事の情報は2026-06時点のものです。


1. Irodori-TTSとは

まずは、これは何かという話です。自分が触る前に把握しておいた範囲をまとめておきます。

  • 方式 … Flow Matching(Rectified Flow Diffusion Transformer / RF-DiT)
  • 特徴 … 
    • 日本語特化で、ローカル実行なので生成回数は無制限
    • 参照音声からのゼロショット・ボイスクローン
    • テキストに絵文字を挿入してスタイル・感情・効果音を制御
    • VoiceDesign … 参照音声なしで「落ち着いた女性の声で…」のようなキャプション(説明文)から声質・感情を生成
    • v3 baseは発話長を自動推定--seconds指定が不要)
    • 生成音声にはSilentCipherによる電子透かしが自動付与される
  • ライセンス … コードはMIT。モデル重みはモデルカードを参照(v1は非商用、v2/v3系はMIT表記のものあり。商用利用前に各モデルカードで必ず確認)

github.com

VOICEVOXのようなキャラ選択(プリセット話者)はなく、声は「captionで設計する」か「参照wavでクローンする」の2通りで決める、というのが最初に理解しておくべきポイントでした。ここを分かっていないと「キャラはどこで選ぶの?」と最初に詰まります😅

モデルの主なバリエーション

モデル 用途 参照音声
Aratako/Irodori-TTS-500M-v3 標準(推奨)。声質はクローン or 指定なし 任意
Aratako/Irodori-TTS-600M-v3-VoiceDesign テキスト+参照音声+キャプションの3要素で制御 任意
Aratako/Irodori-TTS-500M-v2-VoiceDesign キャプションのみで声を設計 不要
Aratako/Irodori-TTS-500M(v1) 旧版 任意

2. インストールせず、まず触ってみる

いきなり環境構築するのもしんどいので、まずはHugging Face Spacesにあるホスト版デモから触ってみました。雰囲気を掴むならこれがいいと思います。

標準デモ

huggingface.co

VoiceDesignデモ

huggingface.co

これらのデモはZeroGPU(Hugging Faceが提供する、GPUを共有で動的割り当てする仕組み)で動いています。利用は無料ですが、1日あたりのGPU利用枠(秒単位)が決まっているのが要注意です。ログインしなければ、以下の制限から1回程度の使用になるでしょうか…😣

  • 未ログイン(匿名) … 1日 約2分
  • 無料アカウント(ログイン推奨) … 1日 約3.5分。初回GPU使用から24時間後にリセット
  • PRO(月$9) … 無料枠の約8倍(1日 最大25分)+ キュー優先 + 超過分はクレジット課金

⚠️ 枠を使い切ると You have exceeded your ZeroGPU quota ... Try again in 23:xx:xx と表示され、約24時間後まで生成できなくなります。少しの使用でもログインしておくのが無難です。

「とりあえず音を聞きたい」段階ならこれで十分かもしれません。自分の場合、試行錯誤を始めたら割とすぐ枠エラーが出るようになったので、そこからColab構築へ移行しました🏃‍➡️


3. Google Colab で動作させる

デモのZeroGPU枠で足りなくなったら、Google Colab(無料枠のT4 GPUランタイム使用)で動作かせましょう。セッションが切れると環境・ファイルは消えてしまう揮発的な環境ですが、自前GPUを立ち上げずに手軽に検証でき、出先でも試せるのは大きな利点です。

500Mモデルなので、Colab無料枠のT4(VRAM 16GB)で十分動作します。

公式リポジトリをColabセルに展開する

自分は中身を理解したかったので、公式リポジトリを直接展開して実行を行いました。ランタイムをGPU(T4)に変更してから、セルで実行します。

# 1) リポジトリをクローン
!git clone https://github.com/Aratako/Irodori-TTS.git
%cd Irodori-TTS

# 2) 依存インストール(ColabのCUDAに合うPyTorchは概ねプリインストール済み)
# (注意)エラーが発生している用に見えますが、以下に注記しています。
!pip install -r requirements.txt

# 3) 推論(参照音声なしで1文生成)
%cd /content/Irodori-TTS
!python infer.py \
  --hf-checkpoint Aratako/Irodori-TTS-500M-v3 \
  --text "こんにちは、私はAIです。これは音声合成のテストです。" \
  --no-ref \
  --output-wav outputs/sample.wav

# 4) 生成したwavをColab上で再生
from IPython.display import Audio
Audio("outputs/sample.wav")

⚠️ Colabのつまずきどころ(自分が実際にハマった順)

  • pip install 時に大量の赤い ERROR: ... protobuf ... incompatible が出ます。最初は焦りましたが、これはColab既存のTensorFlow / google-cloud系とのprotobufバージョン衝突警告でした。Irodori-TTSはこれらを使わないので無視してよいです(最下部に Successfully installed ... が出ていればインストール成功)。
  • インストール後に RESTART SESSION(ランタイム再起動)が要求される → 必ず再起動します。再起動後は pip install セルを再実行しないこと。

  • 再起動するとカレントディレクトリが /content に戻るので、推論前に必ず実行しておきます:
%cd /content/Irodori-TTS

声を変える(caption指定 → 参照wav)

前述の通り、Irodori-TTSにキャラ選択(プリセット話者)はありません。声の決め方は「caption(プロンプト)で設計する」か「参照wavでクローンする」の2通りです。

① captionで声を設計する(VoiceDesignモデル)

--caption に日本語の説明文で声質・性別・トーンを指定します。ここでモデルがVoiceDesign用に変わる点に注意でした(--hf-checkpoint を差し替え)。同じモデルのまま --caption を足しても効かないので、最初これで「あれ、声変わらない?」となりました😅

!python infer.py \
  --hf-checkpoint Aratako/Irodori-TTS-500M-v2-VoiceDesign \
  --text "こんにちは、私はAIです。これは音声合成のテストです。" \
  --caption "落ち着いた女性の声で、近い距離感でやわらかく自然に読み上げてください。" \
  --no-ref \
  --output-wav outputs/voicedesign.wav

from IPython.display import Audio
Audio("outputs/voicedesign.wav")

caption例:「明るく元気な男性の声で、はきはきと読み上げてください。」など。文章を書き換えるだけで声が変わるのは面白かったです。

② 参照wavでクローンする(v3 baseモデル)

真似したい声の短いWAV(数秒〜十数秒・単一話者・BGMや雑音なしが理想)をアップロードして --ref-wav で指定します。

参照音声の準備(ここが仕上がりを大きく左右する)

実際に何回か試してみて、いちばん効いたのが参照音声の質でした。ここを雑にやると全然似ません。

  • 長さ: 5〜10秒が目安。ゼロショットなので長尺は不要です。1〜2分のような長い音声はむしろ不利でした(声質の揺れ・息継ぎ・トーン変化・雑音が混ざり、基準がブレる)。長い録音からは、声がクリアで安定した5〜10秒を切り出して使うのが良かったです。
  • 形式: WAV推奨(MP3でも可だが可逆なWAVが無難)。
  • 音質: 単一話者・BGMや雑音なし・普通のトーンの区間が理想。語尾が消え入る部分、笑い・咳などは避ける。v3はノイズ耐性が上がっているけど、クリーンな素材ほど安定しました。
  • サンプルレート/チャンネル: 神経質にならなくてよい。内部でコーデック(DACVAE)が処理するので、一般的な録音(44.1k/48kHz、できればモノラル)ならそのまま通りました。
# アップロード(左の📁アイコンからドラッグ&ドロップでも可)
from google.colab import files
uploaded = files.upload()   # reference.wav(またはinput.wav)を選択 → /content/に置かれる

!python infer.py \
  --hf-checkpoint Aratako/Irodori-TTS-500M-v3 \
  --text "こんにちは、私はAIです。これは音声合成のテストです。" \
  --ref-wav /content/reference.wav \
  --output-wav outputs/clone.wav

from IPython.display import Audio
Audio("outputs/clone.wav")

👉️同じ声を何度も使うなら効率化 … --ref-wav は毎回参照音声から特徴を計算するので、固定キャラを量産するなら ① 事前計算した潜在を --ref-latent で渡す ② 複数サンプルからSpeaker Inversionで埋め込みを学習する、のどちらかが速くて安定します。「2分まるごとの声質を固定したい」場合も、毎回2分を参照させるのではなく、良いクリップを複数用意してSpeaker Inversionに回すのが正解でした。

⚠️うまく似ないときに自分が試したこと ①参照音声をよりクリーン・単一話者のものに差し替える ②読み上げテキストを短くする ③漢字をひらがなに開く。それでも安定しないなら、同じ声の複数サンプルでSpeaker Inversionを使うと再現性が上がるようです。

⚠️テキストの口調が声を引っ張る … 「こんにちはなのだ」のようなキャラ語尾(例: ずんだもん口調)を入れると、参照音声よりテキストのキャラ性が勝って、リファレンスと違う声になることがありました。普通の声で読ませたいときはです・ます / だ・である等の通常文体に統一するのが安定。切り分けは、同じ参照音声のままテキストだけ中立な文(例:「こんにちは。これは音声合成のテストです。」)に変えて生成し、声が寄れば原因はテキスト、という確認方法が分かりやすかったです。

👉️ 絵文字をテキストに挟むと、①②どちらにも感情・話し方の微調整を重ねられます。実在人物・権利のあるキャラクターの声のクローンは許諾・規約の確認が必要です(自作キャラ用途なら気にせず進められます)。


4. 注意点・コツ

実際に触って気づいた点をまとめておきます。

  • 漢字の読み精度が弱め … 同規模の他TTSと比べると漢字読みが少し苦手な印象でした。難しい漢字は事前にひらがな/カタカナへ変換しておくと安定します(固有名詞・専門用語に注意)。
  • 絵文字でスタイル制御 … テキスト中に特定の絵文字を入れると話し方・感情・効果音が変わります。短文で挙動を確かめてから本番文へ入れるのがおすすめ。
  • 出力先 … CLIは --output-wav で明示したパスに保存されます(Colabなら左の📁ペインからダウンロード)。
  • OpenAI互換APIサーバ … 別リポジトリ Aratako/Irodori-TTS-Server を使うと、OpenAI互換エンドポイントとして叩けます。アプリ組み込み時はこちらが扱いやすそうです(自分はまだ試していません)。

おわりに

Irodori-TTSをHF Spaces → Google Colabの順で触ってみました。500Mと軽量なのにゼロショットでそれなりに声が寄るのは面白くて、特に「参照音声の質が全て」という肌感が得られたのは収穫でした。、また、リファレンスを自分の声を与えると適当な音声でも、かなり寄せることができるのもわかりました。それも10秒程度の音声で実現できるので、このレベルなら話すのがヘタな自分には十分かもしれないです。

例えば、自分のボイスクローンをShorts動画用にナレーションを量産するとなると、やっぱりローカルのGPU機が本命になってくるかな。ローカル構築は必須ですね。

この記事でも、本当はローカルで動作させて実験しようと思っていたのですが、torchバージョンの対応のGPU世代の都合で、Pascal世代のGPUだと動かないということで今回は泣く泣く実験できず🥲🥲🥲 GTX10x0系はもうNG、GTX1650は動作するようです。

そろそろ、古いGPUでは限界があるのかもしれませんね😵

参考リンク