0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mistral Voxtral TTS入門 — オープンウェイト音声合成をAPIとPythonで実装する

0
Last updated at Posted at 2026-03-29

はじめに

2026年3月26日、Mistral AIがVoxtral TTSを公開しました。Mistralにとって初のテキスト音声合成(TTS)モデルであり、ElevenLabsなどの商用プロプライエタリモデルを凌駕するパフォーマンスを持ちながら、オープンウェイトとして公開されている点が大きな特徴です。

この記事で学べること

  • Voxtral TTSの技術仕様とアーキテクチャ
  • Mistral公式APIでのTTS実装(Python/curl)
  • vLLM-Omniを使ったローカル推論のセットアップ
  • ゼロショットボイスクローニングの実装方法
  • ElevenLabsとのベンチマーク比較

対象読者

  • 音声AIをサービスに組み込みたいエンジニア
  • ElevenLabsなど商用TTSのコスト削減を検討している方
  • オープンウェイトモデルのローカル運用に興味がある方

前提環境

  • Python 3.10以上
  • (ローカル推論の場合)VRAM ≥ 16GB のGPU
  • Mistral APIキー(クラウドAPI利用時)

TL;DR

  • Voxtral-4B-TTS-2603は4Bパラメータのオープンウェイト多言語TTSモデル
  • ElevenLabs Flash v2.5に対し多言語ボイスクローニングで68.4%勝率
  • 9言語対応、20種プリセット音声、わずか3秒の参照音声でボイスクローニング可能
  • クラウドAPI価格は**$0.016/1,000文字**、ウェイトはCC BY-NC 4.0で公開
  • vLLM-Omniを使えばVRAM 16GB以上のGPU1枚でローカル運用可能

Voxtral TTSとは

Voxtral TTSは、Mistral AIが開発した初のTTS(Text-to-Speech)モデルです。同社はすでに音声認識モデル「Voxtral Transcribe 2」を提供しており、Voxtral TTSはその対となる音声合成モデルとして登場しました。

これにより、Mistralのオープンウェイトモデルだけで音声認識 → LLM推論 → 音声合成という完全なローカル音声エージェントパイプラインを構築できるようになりました。

主な仕様

項目
パラメータ数 4B
動作GPU 単一GPU(VRAM ≥ 16GB)
対応言語 9言語(英語・フランス語・スペイン語・ドイツ語・イタリア語・ポルトガル語・オランダ語・アラビア語・ヒンディー語)
プリセット音声 20種
ボイスクローニング 2〜3秒の参照音声からゼロショット
モデルレイテンシ 約70ms(10秒音声・500文字入力)
RTF(リアルタイム係数) 約9.7x
出力フォーマット WAV / PCM / FLAC / MP3 / AAC / Opus(24kHz)
API価格 $0.016 / 1,000文字
ライセンス CC BY-NC 4.0(ウェイト)

出典: Mistral AI – Speaking of VoxtralVoxtral TTS Model Card


アーキテクチャ

Voxtral TTSは2段階パイプラインで構成されています。

Voxtral TTS is decomposed into a two-stage pipeline: a generation stage that predicts the audio tokens (semantic and acoustic), followed by a codec decoding stage that converts the tokens into a waveform.
Voxtral TTS Paper(arxiv.org/html/2603.25551v1)

ステージ 内容
生成ステージ 3.4B・26層のMistralバックボーンがセマンティックトークンを自己回帰生成、390M・3層の音響トランスフォーマー(フローマッチング、8 Euler steps)が音響トークンに変換
デコードステージ Voxtral Codec(ハイブリッドVQ-FSQ量子化)が音響トークンを24kHz波形にデコード

2つのステージは共有メモリ上の非同期チャンクストリーミングプロトコルで通信するため、波形が全て生成される前にストリーミング再生を開始できます。


ベンチマーク:ElevenLabsとの比較

ネイティブスピーカーによる人間評価では以下の結果が得られています。

比較対象 評価項目 Voxtral TTS 勝率
ElevenLabs Flash v2.5 多言語ボイスクローニング(自然さ) 68.4%
ElevenLabs v3 スピーカー類似度 同等(パリティ)

出典: Voxtral TTS – Mistral AI

ElevenLabs Flash v2.5は主要な商用競合製品であり、その勝率68.4%はオープンウェイトモデルとしては特筆すべき成果です。また最上位のElevenLabs v3と同等の品質を達成しています。


Mistral公式APIで利用する方法

API認証

Mistral APIキーを取得し、環境変数に設定します。

export MISTRAL_API_KEY="your_api_key_here"

curlによる基本的な音声生成

curl -X POST https://api.mistral.ai/v1/audio/speech \
  -H "Authorization: Bearer $MISTRAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "voxtral-mini-tts-2603",
    "input": "Hello! This is Voxtral speaking.",
    "voice": "casual_male"
  }' --output output.wav

Pythonによる実装

httpxsoundfileを使った音声生成の例です。

import io
import os
import httpx
import soundfile as sf

MISTRAL_API_KEY = os.environ["MISTRAL_API_KEY"]
BASE_URL = "https://api.mistral.ai/v1"

def generate_speech(text: str, voice: str = "casual_male", output_format: str = "wav") -> bytes:
    """Voxtral TTS APIで音声を生成する"""
    payload = {
        "model": "voxtral-mini-tts-2603",
        "input": text,
        "voice": voice,
        "response_format": output_format,
    }

    response = httpx.post(
        f"{BASE_URL}/audio/speech",
        headers={"Authorization": f"Bearer {MISTRAL_API_KEY}"},
        json=payload,
        timeout=120.0,
    )
    response.raise_for_status()
    return response.content


# 音声生成
audio_bytes = generate_speech("こんにちは!Voxtral TTSです。")

# WAVファイルとして保存
audio_array, sr = sf.read(io.BytesIO(audio_bytes), dtype="float32")
sf.write("output.wav", audio_array, sr)
print(f"生成完了: {len(audio_array)} サンプル, {sr} Hz")

ストリーミング出力(MP3形式)

レイテンシを最小化したいリアルタイムアプリには、PCMストリーミングが最適です。

import httpx
import os

def stream_speech(text: str, voice: str = "vivian") -> None:
    """音声をストリーミング再生する"""
    with httpx.stream(
        "POST",
        "https://api.mistral.ai/v1/audio/speech",
        headers={"Authorization": f"Bearer {os.environ['MISTRAL_API_KEY']}"},
        json={
            "model": "voxtral-mini-tts-2603",
            "input": text,
            "voice": voice,
            "response_format": "pcm",  # PCMが最も低レイテンシ
        },
        timeout=120.0,
    ) as response:
        response.raise_for_status()
        # sounddevice等で逐次再生可能
        for chunk in response.iter_bytes(chunk_size=4096):
            # ここでchunkをオーディオデバイスに送信
            print(f"受信チャンク: {len(chunk)} bytes")

レイテンシの目安(公式ドキュメントより)

  • PCM形式: Time-to-First-Audio 約0.8秒
  • MP3形式: Time-to-First-Audio 約3秒

リアルタイム音声エージェントにはPCMが推奨されます。

出典: Text to Speech | Mistral Docs


ゼロショットボイスクローニング

Voxtral TTSの特筆機能の一つが、わずか2〜3秒の参照音声からのゼロショットボイスクローニングです。

import base64
import httpx
import os

def clone_voice(text: str, reference_audio_path: str) -> bytes:
    """参照音声からボイスクローニングして音声生成する"""
    # 参照音声をBase64エンコード
    with open(reference_audio_path, "rb") as f:
        audio_b64 = base64.b64encode(f.read()).decode("utf-8")

    payload = {
        "model": "voxtral-mini-tts-2603",
        "input": text,
        "ref_audio": audio_b64,          # Base64エンコードした参照音声
        "response_format": "wav",
    }

    response = httpx.post(
        "https://api.mistral.ai/v1/audio/speech",
        headers={"Authorization": f"Bearer {os.environ['MISTRAL_API_KEY']}"},
        json=payload,
        timeout=120.0,
    )
    response.raise_for_status()
    return response.content


# 3秒程度の参照音声で音声をクローン
audio = clone_voice(
    text="The quick brown fox jumps over the lazy dog.",
    reference_audio_path="reference_3sec.wav",
)
with open("cloned_voice.wav", "wb") as f:
    f.write(audio)

クローニングは音声の抑揚・リズム・感情表現まで再現します。明示的な感情タグは不要で、参照音声の話し方を自動的に継承します。


ローカル推論(vLLM-Omni)

クラウドAPIを使わずローカルで動かす場合は、vLLM-Omniを使います。

環境セットアップ

# vLLM >= 0.18.0 をインストール
pip install vllm>=0.18.0

# vllm-omniをインストール(mainブランチ)
uv pip install git+https://github.com/vllm-project/vllm-omni.git --upgrade

# バージョン確認
python3 -c "import mistral_common; print(mistral_common.__version__)"
# 1.10.0 以上が必要

サーバー起動

python -m vllm.entrypoints.openai.api_server \
  --model mistralai/Voxtral-4B-TTS-2603 \
  --port 8000

Python クライアント(ローカル)

import io
import httpx
import soundfile as sf

BASE_URL = "http://localhost:8000/v1"

payload = {
    "input": "Bonjour! Je m'appelle Voxtral.",
    "model": "mistralai/Voxtral-4B-TTS-2603",
    "response_format": "wav",
    "voice": "casual_male",
}

response = httpx.post(f"{BASE_URL}/audio/speech", json=payload, timeout=120.0)
response.raise_for_status()

audio_array, sr = sf.read(io.BytesIO(response.content), dtype="float32")
sf.write("output_local.wav", audio_array, sr)
print(f"ローカル推論完了: {len(audio_array)} サンプル at {sr} Hz")

プリセット音声一覧

Voxtral TTSは20種類のプリセット音声を提供しています。主な音声名は以下の通りです(公式ドキュメント参照)。

カテゴリ 音声名(例)
男性・カジュアル casual_male
女性・カジュアル casual_female
女性・プロフェッショナル vivian
ナレーション系 ...

完全な音声リストは Mistral Studio または 公式ドキュメント で確認できます。


注意点

ライセンスについて

Voxtral TTSのウェイトとプリセット音声はCC BY-NC 4.0でライセンスされており、非商用利用が前提です。商用利用にはMistral公式API($0.016/1,000文字)を使用してください。

GPUメモリ要件

ローカル推論にはVRAM 16GB以上のGPUが必要です。BF16フォーマットでのロードが前提となります。

言語ごとの品質差

9言語に対応していますが、英語・フランス語・スペイン語の品質が特に高く評価されています。日本語は現時点では対応言語に含まれていません。


まとめ

  • Mistral Voxtral TTS(2026-03-26リリース)は4Bパラメータのオープンウェイト多言語TTSモデル
  • ElevenLabs Flash v2.5を多言語ボイスクローニングで68.4%勝率で上回り、ElevenLabs v3と同等品質
  • 3秒の参照音声でゼロショットボイスクローニングが可能
  • Mistral APIで$0.016/1,000文字から利用でき、vLLM-Omni経由でVRAM 16GB+ GPUにてローカル運用も可能
  • Voxtral Transcribe 2と組み合わせることで、Mistralモデルだけでフルローカル音声エージェントパイプラインを構築できる

音声AIを本番サービスに組み込む際、Voxtral TTSはコスト・品質・プライバシーの観点から有力な選択肢になりました。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?