OuteTTS:実はLLMにすぎない音声モデル
テキストと録音を、聴ける作品に
ナレーション、ステム分離、カバー、効果音を、ブラウザだけで。
- テキスト読み上げも、ボイスクローンも
- ステムを分離、またはカバーを生成
- 登録して試聴。聴いてから決められる
多くのTTSモデルには、それぞれ専用の推論パイプラインが必要です。つまり、ボコーダーやメルスペクトログラム、音声固有のアーキテクチャ上の癖を扱える専用ランタイムが求められます。OuteAIのOuteTTSは、音声生成を単なる言語モデリングとして扱うことで、この仕組みを完全に回避しました。次のトークンを予測する点は同じで、違うのはそのトークンが単語ではなく音声を表すことだけです。内部で本当にそれしか行っていないため、OuteTTSは他のあらゆるGGUF言語モデルを動かすものと同じ軽量エンジンであるllama.cppから直接実行でき、TTS専用ランタイムを必要としません。
OuteTTSとは?
OuteTTSは、標準的な大規模言語モデルのアーキテクチャだけで構築された実験的なテキスト読み上げプロジェクトです。外部アダプターやボコーダー固有のコンポーネントを後付けした特殊なTTSパイプラインではなく、設計されたプロンプトと音声トークンを使います。初期バージョンはLLaMAをベースとする独自基盤(Oute3-350M-DEV)上に構築され、その後のリリースでは実績のあるバックボーンへ移行しました。0.2リリースはQwen-2.5-0.5B、現在のフラッグシップであるLlama-OuteTTS-1.0-1BはLlamaアーキテクチャを採用しています。どのバージョンにも一貫する考え方は同じです。言語モデルを動かせるならOuteTTSも動かせます。アーキテクチャ上、まさに言語モデルそのものだからです。
バージョンの歩み
- OuteTTS-0.1-350M — 専用のTTSアーキテクチャがなくても、純粋な言語モデリングで実用可能な音声合成を実現できることを示した最初の概念実証です。350Mパラメーターと小型で、ほぼどこでも動かせますが、その代償も明確です。モデルが単語を頻繁に変更、挿入、脱落させることがあり、出力品質には目立ったばらつきがあります。
- OuteTTS-0.2-500M — Qwen-2.5-0.5Bを基盤とし、50億を超える音声プロンプトトークンで学習されました。2つのコードブックを持つDAC(Descript Audio Codec)音声エンコーダーを追加し、音声再構成の品質を大きく改善するとともに、音声クローンも向上させています。
- OuteTTS-0.3-500M — プロンプト形式を変更した中間的な改良版です。この変更があるため、コミュニティツールやllama.cpp連携との互換性を、バージョンごとに確認しなければならない場合があります。
- Llama-OuteTTS-1.0-1B — 現在のフラッグシップリリースです。自動単語アライメント(生のテキストを入力でき、前処理は不要)を追加し、多言語対応を大幅に拡大しながら、全体規模を10億パラメーターというコンパクトな範囲に保っています。
なぜllama.cppなのか
これは恣意的な互換性の選択ではありません。OuteTTSの純粋な言語モデリング設計から直接導かれたものであり、OuteTTSが対応するバックエンドの中でもllama.cppが特に信頼性の高い結果を出すのには、具体的な技術上の理由があります。
OuteTTS 1.0のサンプリングでは、反復ペナルティーをコンテキストウィンドウ全体ではなく、直近64トークンのウィンドウに適用する必要があります。コンテキスト全体にペナルティーをかけると、出力が壊れたり劣化したりします。llama.cppはこのウィンドウ化されたペナルティーを標準で正しく処理します。これが、対応バックエンドの中で歴史的に最も安定した出力品質を提供してきた理由の一つです。標準的なHugging Face Transformersを含む他のバックエンドは、当初このウィンドウ方式をネイティブ実装していませんでした。その後、outetts Pythonライブラリには、品質差を埋めるためにTransformersバックエンドで同じウィンドウ化ペナルティーを再現するパッチが追加されましたが、llama.cppによるネイティブ処理が今もより信頼できるデフォルトです。
この固有のサンプリング処理に加えて、標準的なGGUFモデルとして動作することで、OuteTTSはllama.cppの広範なエコシステムがすでに提供するあらゆるものを引き継げます。メモリ使用量を抑える量子化オプション、n_gpu_layersによるGPUへのレイヤーオフロード、GGUF形式の言語モデルを中心に構築された既存ツールとの互換性を利用でき、TTS専用のデプロイ構成をゼロから用意する必要がありません。
音声クローンと多言語対応
Llama-OuteTTS-1.0-1Bは、わずか10秒の参照音声からワンショット音声クローンを行えます。23言語に対応し、テキストアライメントはモデルが自動処理します。単語の境界が明確でない言語も含まれており、こうした言語では、英語のようにスペースで区切られる言語以上に自動アライメントが重要です。音声再構成には以前のバージョンから受け継いだDACエンコーダーを使用します。多言語対応が広がっても、言語を追加するたびに品質が低下せず維持された理由の一つです。
OuteTTSを使い始める
- Pythonライブラリをインストールします。
pip install outettsで基本インターフェースを導入できます。llama.cpp経由でGGUFモデルを使う場合は、使用するプラットフォーム向けのインストール手順に従い、先にllama-cpp-pythonを手動でインストールする必要もあります。 - 最も簡単に設定するなら自動設定ヘルパーを使います。
outetts.ModelConfig.auto_config(model=outetts.Models.VERSION_1_0_SIZE_1B, backend=outetts.Backend.LLAMACPP, quantization=outetts.LlamaCppQuantization.FP16)を使えば、パスを手動管理せずにモデル選択とバックエンド設定を処理できます。 - 特定のファイルパスが必要な場合は手動で設定します。 手動の
ModelConfigには、ダウンロードした.ggufファイルを指すmodel_pathと、推論バックエンドがllama.cppの場合でも常にTransformersベースとなるtokenizer_pathの両方が必要です。この2つの混同は、読み込みエラーのよくある原因です。 - 専用リポジトリからGGUFウェイトをダウンロードします。 GGUF形式のチェックポイントは、標準的なsafetensorsウェイトとは別にホストされています。llama.cppバックエンドを使う場合は、必ず
-GGUFが付くリポジトリ版から取得してください。 - GPUアクセラレーションを使う場合は
n_gpu_layersを設定します。 llama.cppベースの他のモデルと同様に、GPUへのレイヤーオフロードはOuteTTS固有の設定ではなく、この標準パラメーターで制御します。 - サンプリング設定は
outettsライブラリに自動で処理させます。 ウィンドウ化反復ペナルティーの要件は非常に具体的で、結果への影響も大きいため、明確な理由がない限り生成パラメーターを自分で再実装せず、ライブラリ内蔵のサンプラー設定に任せてください。
より良い結果を得るためのヒント
- 旧バージョンではなく、Llama-OuteTTS-1.0-1Bをデフォルトにします。 初代350Mリリースで記録されている単語精度の問題と、0.2と0.3の間にあるプロンプト形式の不整合を考えると、現在の1.0リリースが新規プロジェクトにとってより信頼できる出発点です。
- 独自実装よりllama.cppのデフォルトサンプリング動作を信頼します。 独自の推論ラッパーを構築する具体的な理由がない限り、llama.cppが標準で正しく扱うウィンドウ化反復ペナルティーをゼロから実装すると、間違えやすくなります。
- クローンにはノイズのない10秒の参照クリップを使います。 ワンショットクローンはこの特定の長さを前提に設計されています。おおよそ同じ長さで良好に録音されたクリップのほうが、極端に短い、または不必要に長いサンプルよりも、安定した結果を得やすくなります。
- バージョン1.0には、自分で前処理せず生のテキストを入力します。 自動単語アライメントは現行リリース固有の機能です。テキストを手動で事前分割すると、モデルがすでに内部で処理できる能力をかえって妨げます。
- 商用利用の前にライセンスを確認します。 OuteTTSのGGUFリリースはCC-BY-NC-SA-4.0ライセンス、つまり非営利・継承条件で配布されています。MITやApache 2.0のような寛容なライセンスとは、条件が大きく異なります。これを基に商用製品を作る前に、十分に確認してください。
OuteTTSと、軽量・LLM関連のTTSモデルとの比較
| OuteTTS | Piper | Kokoro-82M | |
|---|---|---|---|
| 中核アプローチ | 音声トークンによる純粋な言語モデリング | VITS + ONNX + espeak-ng | StyleTTS 2 + ISTFTNet |
| llama.cppで動作 | はい、ネイティブ(GGUF) | いいえ | いいえ |
| 音声クローン | はい、約10秒からワンショット | いいえ、固定音声リスト | いいえ、固定音声リスト |
| 言語 | 23 | 35+ | 8 |
| パラメーター | バージョンにより350M~1B | 約15M | 82M |
| ライセンス | CC-BY-NC-SA-4.0(非営利) | MIT(オリジナル)/ GPL-3.0(現行フォーク) | Apache 2.0 |
OuteTTS独自の立ち位置は、すでにLLMツールのエコシステムで作業している人にアーキテクチャ上のシンプルさを提供することです。インフラがすでにllama.cppとGGUFモデルを中心に構築されているなら、音声生成を追加しても、ほとんどのTTS手法のように別のデプロイ基盤を用意する必要はありません。
よくある質問
ほとんどのTTSモデルが対応しないのに、OuteTTSはなぜllama.cppで動作するのですか?
OuteTTSは純粋な言語モデリングとして構築されているからです。特別なTTSアーキテクチャを重ねることなく、標準的なLLMがテキストトークンを予測するのと同じ方法で音声トークンを予測します。そのため、llama.cppを含め、GGUF形式の言語モデルを実行するために作られたあらゆるツールと互換性があります。
OuteTTSの音声クローンには、どれくらいの参照音声が必要ですか?
現在のLlama-OuteTTS-1.0-1Bリリースによるワンショットクローンでは、約10秒です。
独自実装したOuteTTSで音声が壊れるのはなぜですか?
最も一般的な原因は、反復ペナルティーの設定ミスです。OuteTTS 1.0では、コンテキスト全体ではなく、直近64トークンのウィンドウにこのペナルティーを適用する必要があります。llama.cppは標準で正しく処理しますが、独自実装ではこのウィンドウ化を明示的に再現しなければなりません。
OuteTTSは商用でも無料で使えますか?
条件を確認せずに使うことはできません。OuteTTSのGGUFリリースはCC-BY-NC-SA-4.0ライセンスで配布されており、商用利用を制限し、派生物に継承ライセンスを求めます。商用展開の前に現行の条件を確認してください。
どのOuteTTSバージョンを使うべきですか?
Llama-OuteTTS-1.0-1Bが現在のフラッグシップで、新規プロジェクトにはより信頼できる選択肢です。以前の0.1、0.2、0.3リリースと比べ、自動単語アライメントと、より広範な多言語対応を提供します。
Echoraでテキストを音声に変換
テキストから一人の話者による音声を作る同様のワークフローをブラウザで利用したい場合は、Echoraのテキスト読み上げを使えます。最大5,000文字を入力し、内蔵音声または保存したカスタム音声を選び、必要に応じて対応している話し方タグを追加して安定性を調整できます。生成結果はプレビューしてMP3でダウンロードできます。