MOSS-TTS-Nano

CoreML によるストリーミング音声合成と音声クローン。48 kHz ステレオ、80 ms チャンクで出力します。

Apache-2.0 · aufklarer/MOSS-TTS-Nano-100M-CoreML

コマンドライン

speech speak "Hello world." --engine moss-nano -o hello.wav
speech speak "The weather is nice today." --engine moss-nano \
  --voice-sample reference.wav --moss-nano-seed 1 -o cloned.wav
speech speak "Hello world." --engine moss-nano --stream --play -o streamed.wav

--voice-sample で音声をクローンできます。参照音声の文字起こしは不要です。モノラル参照はステレオ化し、48 kHz にリサンプリングして 80 ms 境界まで補完します。一度符号化した参照コードは複数のリクエストで再利用できます。

--moss-nano-modelaufklarer/MOSS-TTS-Nano-100M-CoreMLモデルリポジトリまたはローカルディレクトリ
--moss-nano-compute-unitscpucpu または gpu
--moss-nano-max-frames300最大 80 ms フレーム数。自然終了が必要
--moss-nano-seed0再現可能な Swift サンプリングシード

Swift API

import AudioCommon
import MossTTSNano

let model = try await MossTTSNanoModel.fromPretrained()
let reference = try await model.encodeReference(url: referenceURL)
let result = try await model.synthesize(
    text: "The weather is nice today.", reference: reference,
    options: MossTTSNanoOptions(maxFrames: 300, seed: 1))
try WAVWriter.writeStereo(left: result.left, right: result.right,
    sampleRate: 48000, to: outputURL)

MossTTSNanoModel はリクエストを直列化し、発話ごとに新しい CoreML 状態を作成します。synthesize と synthesizeStream はステレオを保持し、SpeechGenerationModel はモノラルにミックスします。language: nil を指定してください。ストリームは空の最終マーカーで終了します。

制限と測定

macOS 15+ / iOS 18+ が必要です。コンパイル済みの 4 モデルは計 367.6 MB。プロンプト、参照、要求フレームは 1,024 行のコンテキストを共有します。超過時や自然終了前に maxFrames に達した場合はエラーになります。既定は CPU、gpu は CPU+GPU を許可します。PCG64 のシードは NumPy と互換ですが、バックエンドの数値差で出力が変わる場合があります。

M5 Pro、48 GB、macOS 26.6.2 の Python/CoreML で測定。バックエンドごとに独立プロセスを使い、各条件でウォーム実行を 5 回行いました。参照は 2.72 秒。初回とウォーム値には参照読み込み、エンコーダー読み込み、符号化を含み、キャッシュ時は参照コードを再利用します。合成モデル読み込みは除外。RSS は PyTorch と ASR を含まない Python プロセス全体です。Swift や iPhone の測定値でも話者類似度の評価でもありません。

バックエンド最大 RSS最初のトークン:初回 / ウォーム / キャッシュ最初の音声:初回 / ウォーム / キャッシュ
CPU779 MiB542 / 203 / 52 ms563 / 216 / 65 ms
CPU+GPU731 MiB649 / 225 / 24 ms741 / 245 / 48 ms

Swift · Release

同じ M5 Pro のネイティブ Swift release CLI。新規プロセスごとに同じ参照・テキスト・シードで 1 回実行。参照準備を含み、合成モデルの読み込みは除外します。RSS は ASR 重みを含まない CLI 全体。横線は未測定のウォーム・キャッシュ条件です。両出力とも独立 ASR で要求文と完全一致しました。

バックエンド最大 RSS最初のトークン:初回 / ウォーム / キャッシュ最初の音声:初回 / ウォーム / キャッシュ
CPU670.7 MiB537 / — / — ms560 / — / — ms
CPU+GPU602.5 MiB570 / — / — ms645 / — / — ms

MossTTSNano · OpenMOSS