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 接口

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+;四个编译模型共 367.6 MB。提示、参考音频与请求的生成帧共享 1,024 行上下文。超出上下文或在自然结束前达到 maxFrames 时会报错。默认使用 CPU;gpu 允许 CPU+GPU。PCG64 采样种子与 NumPy 兼容;后端数值差异仍可能改变输出。

测量使用 M5 Pro、48 GB、macOS 26.6.2 上的 Python/CoreML,每种后端使用独立新进程,每种情况运行五次预热请求。克隆参考为 2.72 秒。首次与预热延迟包含参考读取、编码器加载与编码;缓存请求复用参考编码。延迟不含合成模型加载。RSS 包含完整 Python 进程,不加载 PyTorch 或 ASR。这不是 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 命令行:每个新进程执行一次请求,使用相同参考、文本和种子。包含参考准备,不含合成模型加载。RSS 为整个命令行进程,未加载 ASR 权重。横线表示尚未测量的预热或缓存情况。两段输出均通过独立 ASR,文本与请求完全一致。

后端峰值 RSS首个令牌:首次 / 预热 / 缓存首段音频:首次 / 预热 / 缓存
CPU670.7 MiB537 / — / — ms560 / — / — ms
CPU+GPU602.5 MiB570 / — / — ms645 / — / — ms

MossTTSNano · OpenMOSS