listenhub-tts
使用 ListenHub API 将文本转换为语音(TTS)。支持三种模式:快速合成(/v1/tts)、 多角色脚本(/v1/speech)、长文本流式合成(/v1/flow-speech/episodes)。 音色未指定时自动获取音色列表供用户选择,默认使用 chat-girl-105-cn(晓曼)。 Use when user says: "tts", "text to speech", "语音合成", "文字转语音", "朗读", "生成语音", "生成音频", "转音频", "text to audio"
By smallnest · 357 installs
npx skills add smallnest/goal-workflow --skill listenhub-tts
Source repository · Upstream listing
ListenHub TTS: 文本转语音
使用 ListenHub OpenAPI 将文本转换为语音。支持三种合成模式,覆盖从短文本到长文本的全场景。
API 信息
Base URL: https://api.marswave.ai/openapi
认证: Authorization: Bearer $LISTENHUB API KEY (从环境变量读取)
前置检查: 调用任何 API 前先确认 LISTENHUB API KEY 环境变量已设置,未设置则提示用户配置
音色选择流程
用户已明确指定音色
直接使用用户指定的 speakerId,跳过选择流程。
用户未指定音色
1. 调用 GET /v1/speakers/list?language=zh 获取可用音色列表
2. 按 AskUserQuestion 展示音色列表供用户选择,格式如下:
默认选中 chat girl 105 cn (晓曼 dxqqq)
列表展示: {name}({gender},{speakerId})
附带每个音色的 demoAudioUrl 供参考
3. 用户确认后使用选定的 speakerId
默认音色
字段 值
speakerId chat girl 105 cn
名称 晓曼 dxqqq
三种合成模式
模式一:快速合成(短文本,单音色)
适用场景: 短文本(< 1000 字),单音色,需要低延迟
接口: POST /v1/tts
请求体:
参数 类型 必填 说明
text string 是 要合成的文本
speakerId string 是 音色 ID
format string 否 输出格式,默认 mp3
sampleRate int 否 采样率,默认 24000
speed float 否 语速,默认 1.0 ,范围 0.5 ~ 2.0
响应: 直接返回 MP3 二进制流( Content Type: audio/mpeg )
调用示例:
模式二:多角色脚本合成
适用场景: 多角色对话、播客、有声书片段,需要不同音色交替朗读
接口: POST /v1/speech
请求体:
参数 类型 必填 说明
script array 是 脚本数组,每项包含 text 和 speakerId
script[].text string 是 该段文本
script[].speakerId string 是 该段的音色 ID
format string 否 输出格式,默认 mp3
sampleRate int 否 采样率,默认 24000
响应: JSON
调用示例:
模式三:长文本流式合成
适用场景: 长文本( 1000 字),文章朗读,需要 AI 润色或分段处理
接口: POST /v1/flow speech/episodes
请求体:
参数 类型 必填 说明
title string 是 音频标题
content string 否 文本内容(与 contentUrl 二选一)
contentUrl string 否 内容 URL(与 content 二选一)
speakerId string 是 音色 ID
mode string 否 direct (直接合成)或 aiPolish (AI 润色),默认 direct
format string 否 输出格式,默认 mp3
响应: JSON
轮询获取结果:
轮询策略:
1. 提交后等待 30 秒
2. 之后每 10 秒轮询一次
3. 直到 status 变为 completed 或 failed
轮询响应:
status 值 说明
processing 合成中,继续轮询
completed 合成完成,audioUrl 可用
failed 合成失败,查看 errorMessage
调用示例:
音色列表查询
接口: GET /v1/speakers/list
查询参数:
参数 类型 必填 说明
language string 否 筛选语言,如 zh (中文)、 en (英文)
响应:
模式选择逻辑
根据用户输入自动选择最合适的模式:
条件 模式
文本 ≤ 1000 字,单音色 模式一: /v1/tts
多角色脚本,需要不同音色 模式二: /v1/speech
文本 1000 字,或需要 AI 润色 模式三: /v1/flow speech/episodes
用户提供 URL 作为内容来源 模式三: /v1/flow speech/episodes
如果用户明确指定模式,优先使用用户指定的模式。
用户交互
音色选择
当用户未指定音色时,使用 AskUserQuestion 展示音色列表:
合成参数
可选询问:
语速 speed(默认 1.0)
输出格式 format(默认 mp3)
长文本模式:direct 还是 aiPolish(默认 direct)
输出文件路径(默认 ./output.mp3 )
输出
1. 将音频保存到指定路径(默认 ./output.mp3 )
2. 输出合成摘要:
使用的模式
音色名称和 ID
音频时长
文件大小
文件路径
错误处理
401 Unauthorized: 提示用户检查 LISTENHUB API KEY 环境变量
400 Bad Request: 检查请求参数,向用户报告具体错误
flow speech failed: 报告 errorMessage,建议用户重试或切换模式
网络错误: 提示检查网络连接,建议重试
完整示例
用户输入: "把这段文字转成语音:今天天气真好,适合出去散步。"
执行流程:
1. 检查 LISTENHUB API KEY ✓
2. 文本长度 < 1000 字,单音色 → 选择模式一 /v1/tts
3. 用户未指定音色 → 默认使用 chat girl 105 cn (晓曼)
4. 调用 API 合成
5. 保存到 ./output.mp3
6. 输出摘要
用户输入: "用晓曼的声音朗读这篇文章:article.md"
执行流程:
1. 读取 article.md 内容
2. 检查文本长度 1000 字 → 选择模式三 /v1/flow speech/episodes
3. 音色已指定: chat girl 105 cn (晓曼)
4. 提交合成任务
5. 轮询直到完成
6. 下载音频保存到 ./article.mp3
7. 输出摘要