阿里云百炼 CosyVoice(DashScope)与可选 MiniMax T2A V2 HTTP 的 CLI + GUI 封装。
这个项目的目标是:把官方能力做成“可直接生产使用”的本地工具,支持参数可视化、批量处理、计费预估和常见风控校验。
- 三种合成模式:
sync(非流式)、stream(单向流式)、bidir(双向流式;MiniMax 下会合并为单次同步) - 可选后端:DashScope(默认) 或 MiniMax HTTP
- 支持 SSML(
sync/stream) - 计费字符数实时估算(汉字按 2,其余按 1,自动剥离 SSML 标签)
- 批量 TXT 合成:选择 TXT 文件夹后,按文件名批量生成音频
- 批量 TXT 格式校验:批量前可先校验 UTF-8 编码与空文件
- 调用消费提醒:单次与批量都会在高消费场景提示确认
- 非标准字符提醒:检测 emoji/控制符等字符并在合成前提示
- 保留 UI 手动输入:可直接在主界面文本框输入内容,无需依赖文件
- GUI 内播放音频:优先应用内播放(
pygame),失败时回退系统默认播放器 - 费用预估:按模型与计费字符数实时计算预估金额
| 模型 | 价格 |
|---|---|
v3-flash |
1.0 |
v3.5-flash |
0.8 |
v3-plus |
2.0 |
v3.5-plus |
1.5 |
说明:
- 输入
cosyvoice-v3-flash这类完整模型名时,会自动归一化为v3-flash后匹配价目表。 - 若模型不在价目表内,GUI 会提示“当前模型不在价目表,请参考官网”。
本项目以 uv 管理虚拟环境与依赖(根目录 uv.lock + .python-version)。
- 安装 uv(若尚未安装):见官方 安装说明。
- 进入项目根目录,创建/同步虚拟环境并安装依赖:
- 仅运行时依赖:
uv sync - 含开发工具(ruff / mypy / pytest):
uv sync --extra dev
- 仅运行时依赖:
- 日常命令一律用
uv run ...,无需手动activate虚拟环境(PowerShell 示例见下文「运行」)。 - 修改
pyproject.toml依赖后:执行uv lock更新锁文件,再uv sync(或uv sync --extra dev)。 - 与
.python-version对齐的 Python:若本机无对应版本,可先执行uv python install 3.12,再uv sync。 - 若
.venv已损坏(例如提示找不到旧版 Python):删除.venv后重新执行uv sync:Remove-Item -Recurse -Force .venv uv sync --extra dev
前提:Python >=3.10(推荐与 .python-version 一致,由 uv 自动安装/选用)。
在项目根目录执行(推荐带开发依赖,便于跑检查与测试):
uv sync --extra dev仅需要运行 CLI/GUI、不需要 ruff/mypy/pytest 时:
uv sync配置 DashScope(CosyVoice):
$env:DASHSCOPE_API_KEY = "sk-xxxxxxxxxxxxxxxx"配置 MiniMax(可选后端):
$env:MINIMAX_API_KEY = "你的_MiniMax_接口密钥"在 CLI 或 GUI「配置」中选择 MiniMax 后,将使用 POST /v1/t2a_v2(标准库 urllib,无额外 HTTP 依赖),与 DashScope 共用同一套「模型 / 音色 / 语速 / 音量 / 音高 / 输出格式」控件名,但取值需符合 MiniMax 文档(例如 model=speech-2.8-hd、voice 填 MiniMax 的 voice_id)。
- 鉴权:环境变量
MINIMAX_API_KEY,或取消勾选「使用环境变量」后在界面填写。 - Base URL:默认
https://api.minimaxi.com;可在 GUI 或--minimax-base-url指定备用根地址(如https://api-bj.minimaxi.com)。 - 字符上限:剥离 SSML 标签后的文本长度须 小于 10000 字符(本工具按 9999 校验,超限抛出
CharLimitError);仍会与「计费字符」上限--max-chars一并校验。 - HTTP 超时:未指定
--timeout-ms时,MiniMax 使用约 300 秒 读超时(见MINIMAX_DEFAULT_HTTP_TIMEOUT_S),避免长时间无响应占死进程。 - 音频 URL:
output_format为url时,仅允许 https 且主机名包含minimax的下载地址,降低误跟随恶意链接的风险。 - DashScope 专用项:选择 MiniMax 时,
hot_fix、word_timestamp、instruction、seed等不会发往 MiniMax;若已填写,运行日志中会汇总提示。 - 扩展参数:MiniMax 路径下「高级选项」里的 extra_json 会合并进请求 JSON 顶层(如
pronunciation_dict、language_boost、subtitle_enable、output_format等),不会传给 DashScope 的additional_params。 - 音频格式:可选用 CosyVoice 的
MP3_22050HZ_MONO_256KBPS这类枚举名(会尽力映射为audio_setting),或在extra_json里覆盖audio_setting。 bidir模式:MiniMax 无双向流式协议;选择双向时会把各段用换行符合并为 一次非流式 请求,并在日志中提示。
CLI 示例:
uv run cosyvoice-tts sync --provider minimax --model speech-2.8-hd --voice male-qn-qingse --text "你好" --out mm.mp3uv run cosyvoice-tts-gui主界面关键操作:
- 直接在“待合成文本”里输入内容 + 选择模式 + 设置输出路径 -> 开始合成
- “批量 TXT”区域:可先点击“校验 TXT 格式”,再执行“按文件名批量合成”
- 若检测到高消费或非标准字符,系统会先提醒并要求确认
- “播放音频”:优先应用内播放,必要时自动回退系统播放器
# 非流式
uv run cosyvoice-tts sync --text "你好,世界" --out output.mp3
# 单向流式
uv run cosyvoice-tts stream --text "实时流式合成示例" --out output.mp3
# 双向流式(按行切分)
uv run cosyvoice-tts bidir --file long_text.txt --by-line --out output.mp3| 参数 | 说明 | 默认值 |
|---|---|---|
--provider |
dashscope 或 minimax |
dashscope |
--minimax-base-url |
MiniMax API 根地址(可选) | 默认官方主域名 |
--model |
模型名称 | cosyvoice-v3-flash |
--voice |
音色 ID | longanling_v3 |
--format |
音频格式 | SDK 默认 |
--volume |
音量(0-100) | 50 |
--speech-rate |
语速(0.5-2.0) | 1.0 |
--pitch-rate |
音高(0.5-2.0) | 1.0 |
--seed |
随机种子 | 0 |
--region |
地域:cn/intl |
cn |
--max-chars |
计费字符数上限(MiniMax 另受明文 <10000 限制) | 20000 |
--no-char-check |
跳过字符数校验 | 关闭 |
cosyvoice-hub/
├── cosyvoice_hub/ # 核心源码
│ ├── gui_app.py # GUI
│ ├── cli.py # CLI
│ ├── engine.py # 合成编排层
│ ├── synth.py # DashScope SDK 调用封装
│ ├── minimax_t2a.py # MiniMax T2A V2 HTTP
│ ├── pricing.py # 价格估算
│ ├── text_rules.py # 计费字符规则
│ ├── settings.py # 环境与格式解析
│ ├── constants.py
│ ├── exceptions.py
│ ├── __init__.py
│ └── __main__.py
├── docs/
│ ├── README.md # 文档索引
│ └── 文件规范.md
├── tests/ # 单元测试(pytest)
│ └── test_minimax_t2a.py
├── output/
│ └── .gitkeep # 输出目录占位
├── pyproject.toml
├── uv.lock
└── .gitignore
uv run ruff check cosyvoice_hub/
uv run mypy cosyvoice_hub/
uv run pytest tests/ -q