
mlx-audio 中的 MOSS-TTS基于 MLX 的 8B 语音合成实战指南【免费下载链接】mlx-audioA text-to-speech (TTS), speech-to-text (STT) and speech-to-speech (STS) library built on Apples MLX framework, providing efficient speech analysis on Apple Silicon.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-audioMOSS-TTS 是 OpenMOSS 团队开源的语音合成TTS模型家族mlx-audio 在其上完成了基于 Apple MLX 框架的移植实现覆盖MossTTSDelayv1.5 / v1.0、对话模型MOSS-TTSD-v1.0以及两条 Local-Transformer 变体。本文以 docs/models/tts/moss-tts.md 为核心主线结合仓库源码moss_tts 模型实现、配置定义、prompt 处理器深入讲解模型加载、语音合成、声音克隆与流式生成帮助你直接在 Apple Silicon 上跑通 MOSS-TTS 全流程。模型家族与支持清单MOSS-TTS 在 mlx-audio 中的移植方案是复用上游 Qwen3 骨干网络权重为每种变体配齐对应的 RVQ 多码本音频生成路径并挂载与之匹配的 MOSS Audio Tokenizer。仓库 README 列出的支持模型如下模型标识说明OpenMOSS-Team/MOSS-TTS-v1.5MossTTSDelay v1.5默认入口OpenMOSS-Team/MOSS-TTSMossTTSDelay v1.0OpenMOSS-Team/MOSS-TTSD-v1.0多说话人对话dialogue模型OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5v1.5 Local-Transformer 变体支持流式OpenMOSS-Team/MOSS-TTS-Local-Transformer早期 Local-Transformer 变体从 config.py 可以看到默认配置model_type为moss_tts_delay、n_vq 3232 个 RVQ 码本、audio_vocab_size 1024、sampling_rate 24000。不同变体通过is_legacy_local_transformer与is_v15_local_transformer两个属性区分分别走不同的前向路径_local_forward/_v15_local_forward。快速开始Python API 与 CLIPython API基础合成只需要三步加载模型、调用generate、写音频文件。from mlx_audio.audio_io import write as audio_write from mlx_audio.tts import load model load(OpenMOSS-Team/MOSS-TTS-v1.5, lazyTrue) result next(model.generate( textHello, this is MOSS-TTS running on MLX., max_tokens120, )) audio_write(moss_tts.wav, result.audio, result.sample_rate)要点说明lazyTrue表示延迟加载权重mlx_audio.tts.load是统一模型入口见 mlx_audio/tts/init.py。generate返回生成器每次next()得到一个GenerationResult其中audio是 MLX 数组、sample_rate由模型配置决定delay 模型为 24 kHz。result.audio可直接用 mlx_audio/audio_io.py 的write落盘为 wav。Local-Transformer 变体model load(OpenMOSS-Team/MOSS-TTS-Local-Transformer, lazyTrue)v1.5 的 Local-Transformer checkpointmodel load(OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5, lazyTrue)该变体与 v1.5 delay 模型有显著差异实现细节对应 config.py使用OpenMOSS-Team/MOSS-Audio-Tokenizer-v2作为音频编解码器输出48 kHz 音频sampling_rate 48000固定 12 码本 RVQ 生成n_vq 12推理时传入与配置不同的n_vq_for_inference会直接抛错——v1.5 训练时就固定了 RVQ 深度不允许运行时改动见 moss_tts.py 的_resolve_v15_fixed_nq。CLI 命令行不写 Python 代码也能直接合成python -m mlx_audio.tts.generate \ --model OpenMOSS-Team/MOSS-TTS-v1.5 \ --text Hello, this is MOSS-TTS running on MLX. \ --output_path outputs对话模型MOSS-TTSD-v1.0使用[S1]/[S2]标注说话人python -m mlx_audio.tts.generate \ --model OpenMOSS-Team/MOSS-TTSD-v1.0 \ --text [S1] Hello. [S2] Hi, this is MOSS-TTSD running on MLX. \ --output_path outputs生成参数与多语言支持采样参数delay 路径的采样默认值定义在 moss_tts.py 的generate_delay_pattern_ids参数默认值作用max_new_tokens4096最大生成步数text_temperature1.5文本 token 采样温度为 0 时退化为贪心解码text_top_p1.0文本 token 核采样阈值text_top_k50文本 token 候选数audio_temperature1.7音频码本采样温度audio_top_p0.8音频码本核采样阈值audio_top_k25音频码本候选数audio_repetition_penalty1.0音频 token 重复惩罚这些参数均可在generate(..., text_temperature..., audio_top_p...)中通过 kwargs 覆盖。采样器实现位于 sampling.py先做 repetition penalty再按需 top-k / top-p 过滤最后用mx.random.categorical采样do_sampleFalse时退化为argmax。Local-Transformer 旧版变体另有独立的默认值如audio_repetition_penalty1.1见 moss_tts.py。多语言与非英语提示v1.5 模型对已知的非英语输入建议显式传入languageresult next(model.generate( textBonjour, je voudrais essayer une voix francaise naturelle., languageFrench, max_tokens120, ))language字段会被写入用户消息模板的- Language:栏位见 processor.py 的 v1.5 模板渲染逻辑帮助模型选择正确的语言/音系空间。内联暂停标记v1.5 系列 checkpoint 支持在文本中直接写[pause 3.2s]形式的暂停标记原样透传进 prompt用于控制句间停顿时长。声音克隆Voice Cloning克隆一段参考说话人音色只需要传入ref_audio模型会先用 MOSS Audio Tokenizer 把参考音频编码为多码本 token再注入用户消息的Reference(s)栏位result next(model.generate( textThis is a short cloned voice sample., ref_audiospeaker.wav, max_tokens120, )) audio_write(moss_tts_clone.wav, result.audio, result.sample_rate)底层流程对应 moss_tts.pygenerate检测到ref_audio后调用encode_reference_audio通过MossAudioTokenizermlx_audio.codec.MossAudioTokenizer见 codec/models/moss_audio_tokenizer编码为n_vq个码本的 token 序列并封装成|audio|占位符嵌入对话模板见 processor.py 的AUDIO_PLACEHOLDER。CLI 的克隆方式与之等价python -m mlx_audio.tts.generate \ --model OpenMOSS-Team/MOSS-TTS-v1.5 \ --text This is a short cloned voice sample. \ --ref_audio speaker.wav \ --output_path outputs多说话人参考对话模型MOSS-TTSD-v1.0支持为不同说话人分别提供参考音频与参考文本重复传入--ref_audio/--ref_text即可python -m mlx_audio.tts.generate \ --model OpenMOSS-Team/MOSS-TTSD-v1.0 \ --text [S1] This uses the first reference. [S2] This uses the second. \ --ref_audio speaker_1.wav \ --ref_text Reference transcript for speaker one. \ --ref_audio speaker_2.wav \ --ref_text Reference transcript for speaker two. \ --output_path outputs处理器会把多个参考按[S1]: |audio|、[S2]: |audio|顺序写入用户消息见 processor.py并按出现顺序与音频码本一一对应。流式生成v1.5 Local-Transformer只有OpenMOSS-Team/MOSS-TTS-Local-Transformer-v1.5支持流式输出其余变体传入streamTrue会抛出NotImplementedError见 moss_tts.py。chunks model.generate( textHello, this is streamed MOSS local transformer audio., languageEnglish, streamTrue, streaming_interval2.0, ) for chunk in chunks: play_or_buffer(chunk.audio, chunk.sample_rate)流式行为由 moss_tts.py 的_generate_v15_local_streaming_results控制首个 chunk默认在生成4 个 RVQ 帧后发出streaming_first_chunk_frames默认取min(4, steady_chunk_frames)后续 chunk按streaming_interval默认 2.0 秒对应的帧数输出模型按 12.5 帧/秒推算steady_chunk_frames解码会话MLX 路径在流式解码期间维护单一流式 MOSS-Audio-Tokenizer-v2 解码会话MossAudioTokenizerStreamingDecoder见 moss_audio_tokenizer.py无需像上游 demo 那样依赖 SGLang 服务端每个 chunk 的GenerationResult带有is_streaming_chunk/is_final_chunk标记便于前端区分中间块与收尾块。底层原理从 Qwen3 主干到多码本音频模型结构入口Model类moss_tts.py根据配置构建三种结构Delay 模型MossTTSDelayQwen3Model主干 n_vq个音频嵌入层emb_ext 1 个文本 LM 头与n_vq个音频 LM 头输入张量形状为[batch, seq, n_vq 1]第 0 通道是文本 token其余通道是各码本音频 token。旧版 Local-TransformerMosiTTSModelQwen3 多码本嵌入输出全局隐状态后经speech_embedding_to_local_mlp投影再进入由MossTTSLocalTransformerRMSNorm 注意力 SwiGLU MLP构成的小型局部 transformer逐通道自回归生成。v1.5 Local-TransformerQwen3Model全局主干 GPT2 风格的局部 transformerGPT2Model配置见 moss_tts_nano/config.py使用固定 12 码本深度文本与音频各有独立 LM 头。Delay Pattern 编解码delay 模型在训练/推理时使用延迟模式delay pattern来对齐多码本序列apply_delay_patternprocessor.py把[frames, n_vq]的码本张量按码本序号错位展开为[frames n_vq - 1, n_vq]解码时用apply_de_delay_pattern逆向还原见 processor.py。generate_delay_pattern_ids在采样时通过audio_start_token_id/audio_end_token_id/audio_assistant_delay_slot_token_id等特殊 token 控制进入/退出音频段与延迟步进见 moss_tts.py。文本归一化所有变体的 prompt 文本都会经过normalize_tts_texttext.py清洗统一换行、去掉零宽字符、剔除 Markdown 标记与列表符号、保护 URL/邮箱/提及等片段、规范化中英文之间空格、折叠重复标点等确保送入模型的文本与上游 v1.5 清洗规则一致。注意事项采样率差异delay 模式模型输出 24 kHz 音频v1.5 Local-Transformer 输出 48 kHz立体声stereo音频。完整音频 tokenizer 是必需依赖参考音频编码与波形解码都依赖完整版 MOSS Audio Tokenizerdelay 模型对应OpenMOSS-Team/MOSS-Audio-Tokenizerv1.5 local 模型对应OpenMOSS-Team/MOSS-Audio-Tokenizer-v2默认值见 config.py首次运行会自动从模型目录或默认仓库加载。固定 RVQ 深度v1.5 Local-Transformer 只接受n_vq 12不要传其他n_vq_for_inference。流式能力仅限 v1.5 Local-Transformer其余模型请使用普通next(model.generate(...))一次性取完整结果。参考音频与参考文本可重复传入以实现多说话人对话更多 TTS 模型与声音克隆的通用用法可参考 TTS 模型索引 与 语音克隆指南。【免费下载链接】mlx-audioA text-to-speech (TTS), speech-to-text (STT) and speech-to-speech (STS) library built on Apples MLX framework, providing efficient speech analysis on Apple Silicon.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-audio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考