ローカル音声認識・音声合成

mlx-audio:1回の導入で合成と認識を一緒に

モデルだけ差し替えるMac向け音声ツールです

mlx-audioはMacでの音声生成と文字起こしを1つのパッケージで処理します。モデルを変えてもコマンドは同じなので、同じ文で複数モデルを比べやすいです。サーバーを起動するとOpenAI形式API1で他のアプリからも使えます。

実行条件と要点
  • 合成・認識・音声変換・音楽が1つのパッケージです。
  • モデルを変えてもCLIとサーバーのコマンドは同じです。
  • 韓国語に対応するモデルは6つです。
  • OpenAI形式APIで他のアプリに接続できます。

テキストと音声を1つのパッケージで

mlx-audioはApple MLX2上で動く音声ライブラリです。テキストを入れれば音声が、音声を入れればテキストが出ます。合成、認識、音声同士の変換、音楽生成が1つに入っています。

モデルごとにコマンドが違うのではなく、同じCLI3と同じサーバーを使いモデル値だけ変えます。同じ文で複数モデルを比べるときにコードを書き直す必要がありません。

Mac専用です。Apple Siliconで動作し、CUDA4やROCm5の経路はありません。

MLX上で動くためApple Silicon向けに最適化されています。Pythonパッケージですが計算はMLXが担います。

日差しの机に小さなスピーカー、録音機、スタジオマイクが並んだ図
比較は同じ文と同じ条件から始まります。入力を固定してこそモデルの差が聴こえます。

導入して1文を生成します

pipで導入します。mp3やFLACで保存するならffmpegも必要で、wavだけであれば不要です。

1つのコマンドにモデル、文、声を渡します。文が複数なら分割ファイルが出て、--join_audioで1つにまとまります。

--streamを付けると生成され次第チャンクが届きます。すぐ聴くなら--play、ストリーム結果を保存するなら--saveを一緒に付けます。

よく使うオプション
オプション処理内容
--modelどのモデルで作るか決める
--voice声を選ぶ
--lang_code言語を伝える
--join_audio分割を1ファイルにまとめる
--stream生成され次第チャンクを受け取る

韓国語はモデル次第です

対応言語はモデルごとに違います。一覧のうち韓国語を明記しているのは6つです。名前だけで選ぶと英語専用モデルを掴むことがあります。

声の複製6は参照音声が要るモデルと要らないモデルに分かれます。複製が目的なら、その機能を持つモデルから確認します。

韓国語に対応するモデル
モデル名種類特徴
Qwen3-TTS合成声の設計
Ming-3.0 TTS Tiny合成エキスパート構成、複製
Ming-3.0 TTS Dense合成0.5B、感情・方言の制御
Higgs Audio v2合成5言語
Qwen3-ASR認識文字起こし
Qwen3-ForcedAligner文整列字幕のタイミング

同じ文を複数モデルで回します

Pythonではモデルを読み込み、文を渡します。モデル名だけ変えれば同じコードで別モデルが動きます。

モデルを変えるたびに重みを取得します。初回はダウンロードに時間がかかり、以降はローカルキャッシュを使います。

READMEにはモデル別の速度数値がありません。生成された長さとメモリの大きさを見て、最後は聴いて判断するのが正確です。

1文、複数モデル
from mlx_audio.tts.utils import load_model

for name in [
    "mlx-community/Qwen3-TTS-12Hz-0.6B-CustomVoice-8bit",
    "mlx-community/Ming-3.0-tts-tiny-8bit",
]:
    model = load_model(name)
    for chunk in model.generate("같은 문장을 읽어 봐요.", lang_code="Korean"):
        print(name, chunk.audio.shape[0])
モニターに音声波形が表示され、オーディオインターフェースとヘッドホンが繋がった机の図
モデルだけ変えて同じ文を生成し、波形と長さを並べると差が見えます。

サーバーにすると他のアプリから使えます

サーバーを起動するとOpenAI形式の経路が開きます。その形式で繋がっているアプリなら接続先を変えるだけです。

合成はJSONで文を送り、認識は音声ファイルをmultipartで送ります。どちらも同じサーバーが処理します。

サーバーの起動
mlx_audio.server --host 0.0.0.0 --port 8000

curl -X POST http://localhost:8000/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{"model": "mlx-community/Kokoro-82M-bf16", "input": "안녕하세요", "voice": "af_heart"}' \
  --output speech.wav
サーバーの経路
経路処理内容送るもの
/v1/audio/speech文を音声にJSON
/v1/audio/transcriptions音声を文字にファイル

Web画面も同梱されていますが、サーバーとは別に起動する構成で、1つのコマンドで両方は開きません。

棚にMac mini、ヘッドホン、外付けドライブ、書類フォルダが整理されて置かれた図
サーバーとして起動すればブラウザも他のアプリも同じモデルを共有し、アプリごとに導入を繰り返さずに済みます。

文字起こしと字幕タイミングも

認識側にはWhisper系、Qwen3-ASR、Parakeetなどが入っています。合成と同じパッケージなので追加導入は不要です。

整列モデルは文と音声を時間単位で合わせます。字幕を作るとき、文の開始位置をこの値で決めます。

話者分離7モデルも一覧にあり、会議録音のように複数人が話したファイルを分けられます。

Swiftパッケージもあり、iOSやmacOSアプリに組み込めます。サーバーを経由せず直接呼び出す構成です。

量子化でメモリを削ります

同じモデルが3・4・6・8ビットで公開されています。モデル名の接尾辞を変えれば同じ文を別のビット幅で生成できます。

ビットを下げると必要なメモリが減り音質が少し変わります。会話用は8ビット、朗読用は4ビットから比べてみてください。

このパッケージが決めないこと

音質と速度の基準値はありません。モデルごとに条件が違うため、同じ文を入れて自分で比べる必要があります。

ffmpegが無いとwavでしか保存されません。mp3が必要なパイプライン8なら先に入れてください。

モデルのライセンスはリポジトリごとに違います。商用利用の前にモデルカードを確認してください。

用語の注釈

  1. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。

    本文に戻る
  2. MLX — Appleが開発する機械学習フレームワークで、Apple SiliconのCPUとGPUが共有するメモリを使ってモデルを実行します。

    本文に戻る
  3. CLI — Command-Line Interfaceの略です。ターミナルにコマンドを入力してプログラムを操作する方式です。

    本文に戻る
  4. CUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。

    本文に戻る
  5. ROCm — AMD GPUでAIや高性能計算を実行するソフトウェア基盤です。対応状況はGPUだけでなく、OS・ドライバー・フレームワークの版の組み合わせで確認します。

    本文に戻る
  6. 音声クローン — 参照音声から話者の特徴を取り出し、似た声の音声を合成する技術です。本人の音声、または使用許可を得た音声だけを参照資料に使います。

    本文に戻る
  7. 話者ダイアリゼーション — 録音を「誰がいつ話したか」の区間に分け、話者ごとにラベル付けする処理です。

    本文に戻る
  8. パイプライン — 入力から出力まで続く処理段階のまとまりです。段階ごとに異なるモデルやツールを使うことがあります。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
mlx-audioはMacでの音声生成と文字起こしを1つのパッケージで処理します。モデルを変えてもコマンドは同じなので、同じ文で複数モデルを比べやすいです。サーバーを起動するとOpenAI形式APIで他のアプリからも使えます。
必要なメモリはどのくらいですか?
ビットを下げると必要なメモリが減り音質が少し変わります。会話用は8ビット、朗読用は4ビットから比べてみてください。
条件と出典はどこで確認できますか?
モデルのライセンスはリポジトリごとに違います。商用利用の前にモデルカードを確認してください。