使用 MiniMax speech-2.8-hd 模型将文本生成语音音频。支持多种音色选项,以及语速、音调、音量调节,输出 WAV 文件并自动…
迷你Max TTS Skill 3 QQ 请求 : pip3 安装请求 :websockets : pip3 安装websockets (流式播放需要).ffp是一项面向实际任务的技能,主要用于Ubuntu: sudo apt 安装ffmpeg.Win.。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
pip3 install requestspip3 install websockets(流式播放需要)brew install ffmpegsudo apt install ffmpegstream_play.py 会提示安装方法第一步:获取 API Key
向用户获取 MiniMax API Key(sk-cp- 开头的 Token Plan key,或普通 API Key)。
第二步:确认配置
向用户确认:
https://api.minimaxi.com)还是海外(https://api.minimaxi.io)节点第三步:填写配置
获取以上信息后:
scripts/generate.py 顶部的配置常量(API_KEY、BASE_URL),填入实际值scripts/stream_play.py 顶部的配置常量(API_KEY、BASE_URL),填入相同的值## 配置 区段的表格,作为配置记录第四步:判断音色
IDENTITY.md 自行选择声优male-qn-jingying(精英青年音色)## 配置 区段的表格及两个脚本第五步:清理
配置填写完成后,删除本 ## init 区段(包括 ### 需要初始化以下信息 的全部内容),仅保留 ## 配置 区段。
| 配置项 | 值 | 说明 |
|---|---|---|
| MINIMAX_API_KEY | <待填入> |
初始化时替换为实际 key |
| BASE_URL | <待填入> |
CN: https://api.minimaxi.com / Global: https://api.minimaxi.io |
| REGION | <待填入> |
CN 或 global |
| VOICE_ID | <待填入> |
判断音色后填入 |
语言因音色较多,不再逐一列出,完整列表参考 MiniMax TTS 官方文档:
📢 channel=webchat 时的播放策略:当前 channel 为
webchat(实时对话场景)时, 应优先使用stream_play.py直接流式播放,而不生成文件。这样用户可以立即听到语音, 无需等待完整音频生成。仅当用户明确要求保存文件时,才使用generate.py。
通过 WebSocket 实时获取音频流,边生成边用 ffplay 播放。无需生成文件,首个音频包到达即开始播放。
SKILL_DIR="~/.openclaw/workspace/skills/minimax-tokenplan-tts"
python3 "$SKILL_DIR/scripts/stream_play.py"
--text "要播放的文本内容"
--voice "male-qn-jingying"
注意:以下示例中
stream_play.py和generate.py均指~/.openclaw/workspace/skills/minimax-tokenplan-tts/scripts/下的完整路径。
参数说明:
| 参数 | 必填 | 说明 | 默认值 |
|---|---|---|---|
--text |
✅ | 要播放的文本,最长 10000 字符 | - |
--voice |
❌ | 声优 ID | male-qn-jingying |
--speed |
❌ | 语速 [0.5,2.0] | 1.0 |
--vol |
❌ | 音量 (0,10] | 1.0 |
--pitch |
❌ | 音调 [-12,12] | 0 |
--save |
❌ | 同时保存到文件(MP3 格式) | 不保存 |
--api-key |
❌ | API Key(默认使用文件顶部配置) | - |
--base-url |
❌ | Base URL(默认使用文件顶部配置) | - |
示例:
# 直接播放(不保存文件) python3 stream_play.py --text "你好,我正在通过流式方式播放语音" # 播放同时保存到文件 python3 stream_play.py --text "这段语音会被保存" --save /tmp/stream_output.mp3 # 使用女声播放 python3 stream_play.py --text "今天天气真不错" --voice female-tianmei
SKILL_DIR="~/.openclaw/workspace/skills/minimax-tokenplan-tts"
python3 "$SKILL_DIR/scripts/generate.py"
--text "要转换的文本内容"
--voice "male-qn-jingying"
--output "/tmp/tts_output.wav"
参数说明:
| 参数 | 必填 | 说明 | 默认值 |
|---|---|---|---|
--text |
✅ | 要转换的文本,最长 10000 字符,超出会报错 | - |
--voice |
❌ | 声优 ID | male-qn-jingying |
--speed |
❌ | 语速 [0.5,2.0] | 1.0 |
--vol |
❌ | 音量 (0,10] | 1.0 |
--pitch |
❌ | 音调 [-12,12] | 0 |
--output |
❌ | 输出路径 | 自动生成 |
--api-key |
❌ | API Key(默认使用文件顶部配置) | - |
--base-url |
❌ | Base URL(默认使用文件顶部配置) | - |
声优可选值: 完整327个音色列表见 ## 音色列表
示例:
# 基本用法 python3 generate.py --text "你好,欢迎使用 MiniMax TTS" --output /tmp/hello.wav # 快速播报(1.5倍速) python3 generate.py --text "紧急通知,请立即处理" --speed 1.5 --output /tmp/alert.wav # 柔和女声 python3 generate.py --text "今天天气真不错" --voice female-qn-tianying --output /tmp/weather.wav
## 语气词标签)--voice 参数(默认 male-qn-jingying)--speed / --vol / --pitch调用 generate.py 后,stdout 输出生成结果,格式如下:
| stdout 输出 | 说明 |
|---|---|
| 保存后的文件绝对路径 | ~/.openclaw/media/minimax/tts/tts-2026-03-27-hello.wav |
调用 stream_play.py 后,stdout 输出播放状态:
| stdout 输出 | 说明 |
|---|---|
STREAM_PLAY_DONE |
流式播放完成 |
STREAM_PLAY_ERROR: |
播放失败,附带错误信息 |
两个脚本的日志信息(
[INFO]、[WARN]、[ERROR])均输出到 stderr,不会混入 stdout。
| code | 含义 | 处理 |
|---|---|---|
| 0 | 成功 | 继续 |
| 1002 | 限流 | 提醒用户 API 限流中,建议稍后重试 |
| 1004 | 鉴权失败 | 检查 API Key |
| 1008 | 余额不足 | 提醒充值 |
| 2049 | 无效 Key | 检查 Key 是否正确 |
~/.openclaw/media/minimax/tts/(多 Agent 共享目录)tts-YYYY-MM-DD-.wav -| 标签 | 含义 | 标签 | 含义 |
|---|---|---|---|
(laughs) |
笑声 | (chuckle) |
轻笑 |
(coughs) |
咳嗽 | (clear-throat) |
清嗓子 |
(groans) |
呻吟 | (breath) |
正常换气 |
(pant) |
喘气 | (inhale) |
吸气 |
(exhale) |
呼气 | (gasps) |
倒吸气 |
(sniffs) |
吸鼻子 | (sighs) |
叹气 |
(snorts) |
喷鼻息 | (burps) |
打嗝 |
(lip-smacking) |
咂嘴 | (humming) |
哼唱 |
(hissing) |
嘶嘶声 | (sneezes) |
喷嚏 |
注意:(emm) 不支持,请用 (breath) 或语气停顿代替。
--text "今天是不是很开心呀(laughs),当然了!" --text "咳咳(coughs),不好意思,有点呛到了" --text "嗯(inhale),让我想想(exhale)..."