mimo-v2-5-tts

Installation
SKILL.md

MiMo V2.5 TTS

使用小米 MiMo V2.5 TTS 系列模型生成语音。支持中英文、预置音色、音色设计、音色克隆、情绪风格、方言、唱歌。

脚本目录:$SKILLS_PATH/mimo-v2-5-tts/scripts/

$SKILLS_PATH 说明: skills 目录路径,因部署环境而异。

模型选择

V2.5 系列提供三种模型,根据使用场景选择:

模型 ID 用途 音色来源 特殊能力
mimo-v2.5-tts 预置音色语音合成 内置精品音色 支持唱歌
mimo-v2.5-tts-voicedesign 文本描述定制音色 文本描述生成
mimo-v2.5-tts-voiceclone 音频样本复刻音色 音频样本

选择建议:

  • 需要快速生成语音、需要唱歌功能 → mimo-v2.5-tts(预置音色)
  • 需要独特音色 → mimo-v2.5-tts-voicedesign(文本描述生成)
  • 需要模仿特定声音 → mimo-v2.5-tts-voiceclone(音频样本复刻)

注意: TTS 有随机性,同样输入的效果可能不同,用户有需要时可以多生成几次以供挑选。

环境依赖

环境变量 说明 必需
MIMO_API_KEY MiMo API 密钥(MiMo 开放平台获取)
依赖 说明 必需
python3 运行脚本
openai pip install openai
ffmpeg 转换格式、长文本分段拼接 仅转换、拼接场景使用
curl 调用飞书 API 仅飞书发送使用

预置音色

使用 mimo-v2.5-tts 模型时必须明确指定音色,你可以提醒用户有哪些音色可选,或根据内容语言和风格选择合适音色。

音色名 Voice ID 语言 性别 风格
冰糖 冰糖 中文 女性 活泼少女
茉莉 茉莉 中文 女性 知性女声
苏打 苏打 中文 男性 阳光少年
白桦 白桦 中文 男性 成熟男声
Mia Mia English Female Lively girl
Chloe Chloe English Female Sweet Dreamy
Milo Milo English Male Sunny boy
Dean Dean English Male Steady Gentle

自然语言控制

所有模型都支持自然语言控制。

通过自然语言描述让模型理解并生成对应风格的语音。所有模型均可通过 --context 参数传入自然语言控制指令:mimo-v2.5-ttsmimo-v2.5-tts-voiceclone 可用于调整指定音色下的语气情绪等风格;mimo-v2.5-tts-voicedesign 则通过这个选项同时控制音色和风格。

能力特点:

  • 多风格切换:同一段语音内完成播报 → 低语 → 嘶吼的风格转场
  • 多情绪混合:支持"压抑的愤怒"、"带着哽咽的笑意"等复合情绪
  • 多粒度控制:段落级 → 句子级 → 词级 → 字粒度都可指定

示例:

用轻快上扬的语调向领导报喜,语速稍快,带着查到成绩后压抑不住的激动与小骄傲,声音明亮有活力。

看着刚解决的难题成果忍不住得意忘形地惊呼,声音高亢明亮,语速偏快,语气中带着满满的自信与难以置信。

导演模式

自然语言控制的一种特殊用法是「导演模式」,即从角色、场景、指导三个维度全方位刻画人物与声线:

  • 【角色】 人物身份、性格底色、外形气质与说话习惯
  • 【场景】 此刻发生了什么、和谁说话、情绪位置
  • 【指导】 语速、气息、停顿、重音、共鸣位置、音色质感、情绪起伏

导演模式示例:

角色:百年门阀岑家的现任大当家。自出生便被过继给祖庙的守门老人抚养,被塑造成一尊完美无瑕、绝情断欲的家族图腾。常年深居简出,对人有着极强的阶级疏离感。

场景:在祠堂的阴影里,看着那个不顾一切冲破保安防线来找她、企图带她私奔的男人。她要用最冷硬的阶级壁垒,绞杀对方,也绞杀自己刚刚萌芽、却足以燎原的感情。

指导:
冰冷、慵懒却极具威压的低音御姐。发声通道非常松弛,没有任何剑拔弩张,却有着让人骨里生寒的压迫感。

- 语速与顿挫:极慢,每个字都像是在舌尖滚过才吐出来,带着上位者漫不经心的傲慢。句与句之间留下极长的、令人不安的空白。
- 气声与实声:大部分时间,她的声音没有明显的声调起伏,实音重且硬,像是一条平缓却冰冷的暗河。但一定要在某些尾音处(如“真心”),加入极其轻微的气音收束,透出一丝连她自己都没察觉到的疲惫与渴望。
- 咬字肌理:文白杂糅的用词带着旧时代的痕迹,唇齿音发得极轻但极清晰(如“冲撞”“廉价”),显得既清雅又锋利,刀刀见血。

导演模式适合对语音表演要求较高的场景,例如角色配音、影视级内容生成等。

音频标签控制

mimo-v2.5-ttsmimo-v2.5-tts-voiceclone 支持音频标签控制。mimo-v2.5-tts-voicedesign 暂不支持,如需控制风格请通过 --context 写更详细的描述。

在文本任意位置用括号描述语气、情绪或能发出声音的动作,实现句内切换。括号内必须是声音相关内容(如语气、情绪、叹气、打哈欠、咳嗽),不能是身体动作(如转身、坐下、挥手)。

中文支持全角 ()、半角 ()、方括号 [] 三种括号,英文支持半角 ()、方括号 [] 两种括号。

(紧张,深呼吸)呼……冷静,冷静。不就是一个面试吗……(语速加快,碎碎念)自我介绍已经背了五十遍了,应该没问题的。加油,你可以的……(小声)哎呀,领带歪没歪?
(极其疲惫,有气无力)师傅……到地方了叫我一声……(长叹一口气)我先眯一会儿,这班加得我魂儿都要散了。
如果我当时……(沉默片刻)哪怕再坚持一秒钟,结果是不是就不一样了?(苦笑)呵,没如果了。
(寒冷导致的急促呼吸)呼——呼——这、这大兴安岭的雪……(咳嗽)简直能把人骨头冻透了……别、别停下,走,快走。
(提高音量喊话)大姐!这鱼新鲜着呢!早上刚捞上来的!哎!那个谁,别乱翻,压坏了你赔啊?!

Achoo! Ahem. I—I really (cough) think I am coming down with a terrible (cough) terrible cold.
(heavy breathing) Just... give me... a second. I ran... all the way... from the station.
I just feel... long sigh... like I'm constantly treading water, you know?
It's just so stupid! (sobbing) We spent all that money on the cake and the dog just... (sudden laugh) he just ate the whole thing in one bite!

括号可以放在文本任意位置(开头、中间、结尾都行),可描述:语气、情绪、呼吸、笑声、哭声、喘息、咳嗽、打哈欠、叹气等能发出声音的内容。注意不能写身体动作(如转身、坐下、挥手)。

整体风格标签

整体风格标签是音频标签控制的一种情况,在目标文本开头添加 (风格) 标签,指定整段语音的发音风格。

格式示例:(风格1 风格2)待合成内容

唱歌: 必须在最开头添加 (唱歌) 标签,格式为:(唱歌)歌词。标签内标识支持:唱歌singsinging

类别 常用风格
基础情绪 开心 悲伤 愤怒 恐惧 惊讶 兴奋 委屈 平静 冷漠
复合情绪 怅然 欣慰 无奈 愧疚 释然 嫉妒 厌倦 忐忑 动情
整体语调 温柔 高冷 活泼 严肃 慵懒 俏皮 深沉 干练 凌厉
音色定位 磁性 醇厚 清亮 空灵 稚嫩 苍老 甜美 沙哑 醇雅
人设腔调 夹子音 御姐音 正太音 大叔音 台湾腔
方言 东北话 四川话 河南话 粤语
角色扮演 孙悟空 林黛玉
唱歌 唱歌

经典组合: (怅然) 这么多年过去了...(慵懒) 再让我睡五分钟...(磁性) 夜已经深了...(东北话) 哎呀妈呀...(粤语) 呢个真係好正啊...

音色描述编写

当使用 mimo-v2.5-tts-voicedesign 进行文本描述定制音色时,需要编写一段简短的音色描述,指导模型生成符合预期特质的声音,和自然语言控制共用 --context 参数输入。音色描述的写作要求如下:

音色描述是嗓子的身份卡。只描写这副声音本身长什么样——不写场景、不写动作、不写这次要说什么。写得越凝练,越容易跨场景复用。

必写项:

  1. 身份锚点: 年龄段 + 性别。决定基频,是所有特质的基础。
  2. 声音质感: 气息走向、共鸣位置、吐字与音色底色。用可感的动词或比喻,不要堆形容词。
  3. 语速节奏: 稳 / 快 / 慢 / 忽快忽慢 / 连珠带顿挫。
  4. 情绪底色: 嗓子默认状态(高亢 / 松弛 / 温软 / 克制)。

可选项(强烈推荐):

  1. 风格/身份标签: 一笔带过的职业或风格锚点,模型秒懂。例:拍卖师风格 / 美食评论家风格 / 播音员风格 / 法庭陈词风格。
  2. 辨识度小癖好: 一个让人一耳朵记住的习惯。例:偶尔闭眼吸气 / 字尾带颤音 / 笑起来是胸腔闷笑。

硬约束:

  • 一到两句话,白描式,不分段、不列条。
  • 不写场景("在发布会""值夜班")。
  • 不写动作("她走上舞台")。
  • 不用真实演员或 IP 角色名(版权 + 泛化差)。
  • 默认普通话或英文;方言仅在明确需要时加。

音色描述样例:

中年男性,节奏极快,情绪高亢,拍卖师风格。吐字连珠,带抑扬顿挫与紧迫感。

青年男性,电竞解说风格,语速极快且连贯,带明显气口和爆发性强调,兴奋时声音上扬尖锐。

中年男性,法庭陈词风格,声线沉稳偏正式,吐字工整字字顿挫,情绪克制但每个词都很重。

内容与标签增强

当用户没有直接提供要念的文本时,你应该根据角色扮演、创作等具体情况,自行编写要合成的文本。

当用户仅提供了要念的文本而不包含语气情绪细节的时候,你应该根据实际情况,微调文本并插入合适的标签。

硬规则:

  1. 文本情绪必须和音色底色契合。 温软奶奶不怒吼,拍卖师不深夜独白。
  2. 长度 2–5 句,一整段。 太短模型立不住节奏,微妙声线特质也出不来。
  3. 标签是调味,不是主菜。 该停就停、该笑就笑,不要堆砌。同一句话最多一个标签。
  4. 标点有表演意义: 省略号 = 停顿 / 破折号 = 被打断或拖音 / ALL CAPS = 强调。
  5. 标签语言跟随正文。 中文正文配中文标签,英文正文配英文标签,禁止混用。

推荐标签(中文用 [标签]):

类别 常用标签
节奏 [停顿] [长停顿] [急促] [拖音] [语速加快] [语速放缓]
情绪 [轻声] [低语] [叹气] [吸气] [哽咽] [强调] [笑] [爽朗大笑]
其他 [欲言又止] [碎碎念] [沉默片刻]

推荐标签(英文用 [tag]):

Category Common Tags
Pacing [pause] [long pause] [fast] [slow] [drawn out]
Emotion [whispering] [sighs] [inhale] [choked up] [emphasis] [laughs] [hearty laugh]

配对样例:

音色:中年女性,美食评论家风格,语调绵柔富感染力,描述时带夸张的回味与陶醉感,偶尔闭眼吸气。

文本:
[吸气]唔——这一口下去…[停顿]整个舌尖都被包住了。[拖音]先是焦糖的甜,紧接着[强调]一点点[停顿]刚好的咸,在后味里慢慢铺开。[叹气]说真的,我已经[轻声]好久[停顿]没吃到这么用心的甜点了。
音色:高龄女性,声音温软缓慢,带点颤音和慈祥感,像奶奶在哄小孙辈睡前讲故事。

文本:
[轻声]来,躺好。[停顿]奶奶给你讲个故事啊。[长停顿]从前啊,山脚下有一间小木屋…[拖音]住着一只小兔子。[叹气]这只兔子呀,特别贪玩,每天太阳一出来就往外跑。[停顿]结果有一天——[强调]下雨了。[低语]它迷路了,怎么都找不到回家的路…

Python 脚本用法

三个模型分别对应三个脚本,根据需求选择:

脚本 模型 用途
mimo_tts.py mimo-v2.5-tts 预置音色语音合成
mimo_tts_voicedesign.py mimo-v2.5-tts-voicedesign 文本描述定制音色
mimo_tts_voiceclone.py mimo-v2.5-tts-voiceclone 音频样本复刻音色

预置音色语音合成(mimo_tts.py)

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --text "你好,今天天气真不错。" \
  --voice "冰糖"

预置音色 + 自然语言风格控制

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --context "用温柔的语气,语速稍慢" \
  --text "没关系,慢慢来,我等你。" \
  --voice "冰糖" \
  --output tmp/mimo-v2.5-tts/comfort.wav

预置音色 + 音频标签控制

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --text "(紧张,深呼吸)呼……冷静,冷静。不就是一个面试吗……(小声)哎呀,领带歪没歪?" \
  --voice "冰糖" \
  --output tmp/mimo-v2.5-tts/interview.wav

音色设计(mimo_tts_voicedesign.py)

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts_voicedesign.py \
  --context "Give me a young male tone." \
  --text "Yes, I had a sandwich." \
  --output tmp/mimo-v2.5-tts/voicedesign.wav

技巧: 可以将 Voice Design 生成的音频保存下来,后续作为 mimo_tts_voiceclone.py--voice-file 输入,实现「设计 → 克隆」的工作流:先用文本描述(--context)生成满意的音色,再用该音频作为样本克隆到其他文本。克隆时也可通过 --context 添加导演模式指令。

音色克隆(mimo_tts_voiceclone.py)

注意: 音色样本 Base64 编码不超过 10 MB,仅支持 mp3 和 wav 格式。

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts_voiceclone.py \
  --voice-file voice.mp3 \
  --text "Yes, I had a sandwich." \
  --output tmp/mimo-v2.5-tts/voiceclone.wav

音色克隆 + 导演模式

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts_voiceclone.py \
  --voice-file voice.mp3 \
  --context "用温柔的语气,语速稍慢" \
  --text "没关系,慢慢来,我等你。" \
  --output tmp/mimo-v2.5-tts/voiceclone_director.wav

唱歌

注意: 唱歌歌词要完整,残缺歌词会导致跑调、效果差。

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --text "(唱歌)原谅我这一生不羁放纵爱自由,也会怕有一天会跌倒,Oh no。背弃了理想,谁人都可以,哪会怕有一天只你共我。" \
  --voice "冰糖" \
  --output tmp/mimo-v2.5-tts/singing.wav

英文 + 音频标签

python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --text "I just... (sighs deeply) I don't know anymore. (suddenly firm) But I won't give up!" \
  --voice "Mia" \
  --output tmp/mimo-v2.5-tts/english.wav

长文本处理

V2.5 对长文本的支持较好,建议几乎所有场景都一次性生成,无需手动分段。仅当文本超过 2500 字时,才需要考虑分段合成再拼接。

分段合成方法:按句号/段落自然切分,每段独立生成 wav,再用 ffmpeg 拼接:

# 创建文件列表
echo "file '/tmp/mimo-v2.5-tts/part1.wav'" > /tmp/mimo-v2.5-tts/list.txt
echo "file '/tmp/mimo-v2.5-tts/part2.wav'" >> /tmp/mimo-v2.5-tts/list.txt

# 拼接
ffmpeg -y -f concat -safe 0 -i /tmp/mimo-v2.5-tts/list.txt -c copy /tmp/mimo-v2.5-tts/combined.wav

飞书语音消息发送

注意: 仅当用户需要将 TTS 生成的语音发送到飞书时才需要使用此功能。

将 TTS 生成的 WAV 发送到飞书,一条命令完成:生成 → 转码 → 上传 → 发送。

为什么不用 message tool: 飞书语音消息需要调用 /im/v1/messages 接口(msg_type: audio),且需先上传音频获取 file_key。很多工具的 message tool(asVoice: true)在飞书 channel 上未实现此逻辑,会将音频当作普通附件发送(用户看到的是文件而非语音条)。feishu_send_audio.sh 完成了完整的上传 + 发送流程,不可替换为 message tool。

环境依赖

环境变量 来源 说明
FEISHU_APP_ID 飞书开放平台 应用 App ID
FEISHU_APP_SECRET 飞书开放平台 应用 App Secret
依赖 说明 必需
ffmpeg WAV 转 Opus、获取音频时长
curl 调用飞书 API

用法

私聊发送(open_id)

# 1. 生成语音
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --text "好的,马上就好!" \
  --voice "冰糖" \
  --output /tmp/mimo-v2.5-tts/voice.wav

# 2. 发送到飞书私聊(receive_id_type 为 open_id,receive_id 为用户 ID)
bash $SKILLS_PATH/mimo-v2-5-tts/scripts/feishu_send_audio.sh /tmp/mimo-v2.5-tts/voice.wav open_id ou_xxxxxx

群聊发送(chat_id)

# 1. 生成语音
python3 $SKILLS_PATH/mimo-v2-5-tts/scripts/mimo_tts.py \
  --text "大家好,今天天气真不错!" \
  --voice "冰糖" \
  --output /tmp/mimo-v2.5-tts/voice.wav

# 2. 发送到飞书群聊(receive_id_type 为 chat_id,receive_id 为群 ID)
bash $SKILLS_PATH/mimo-v2-5-tts/scripts/feishu_send_audio.sh /tmp/mimo-v2.5-tts/voice.wav chat_id oc_xxxxxx

feishu_send_audio.sh 内部流程:wav → opus (ffmpeg)获取 tenant_access_token上传音频文件发送 audio 消息

Installs
97
GitHub Stars
37
First Seen
Apr 23, 2026