语音合成 API 文档
概述
语音合成(Text-to-Speech, TTS)API 允许你将文本转换为自然流畅的语音。该API兼容 OpenAI 标准,同时支持通义千问 qwen-tts 系列模型,提供高质量的中文和英文语音合成服务。
接口信息
- 端点:
/v1/audio/speech - 方法:
POST - 内容类型:
application/json - 认证: Bearer Token
支持的模型
Qwen-TTS 系列模型
本系统完整支持通义千问的 qwen-tts 系列模型:
| 模型名称 | 描述 | 特点 |
|---|---|---|
qwen-tts |
基础版本 | 标准音质,适合一般场景 |
qwen-tts-latest |
最新版本 | 音质更佳,支持更多音色 |
qwen-tts-2025-05-22 |
指定版本 | 稳定版本,适合生产环境 |
支持的音色
通用音色(所有版本支持)
| 音色代码 | 音色名称 | 性别 | 特点 |
|---|---|---|---|
Cherry |
甜美女声 | 女 | 声音甜美,适合温馨场景 |
Serena |
温柔女声 | 女 | 声音温柔,适合专业播报 |
Ethan |
稳重男声 | 男 | 声音沉稳,适合商务场景 |
Chelsie |
活泼女声 | 女 | 声音活泼,适合年轻化场景 |
高级音色(qwen-tts-latest 和 qwen-tts-2025-05-22 支持)
| 音色代码 | 音色名称 | 性别 | 特点 |
|---|---|---|---|
Dylan |
北京话 | 男 | 青春活力,适合时尚内容 |
Jada |
吴语 | 女 | 知性优雅,适合教育内容 |
Sunny |
四川话 | 女 | 阳光开朗,适合儿童内容 |
请求格式
基本请求
完整请求参数
{
"model": "qwen-tts-latest",
"input": "这是一段需要转换为语音的文本内容。支持中文、英文以及中英混合的文本输入。",
"voice": "Serena",
"speed": 1.0,
"response_format": "wav"
}
请求参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
model |
string | 是 | 要使用的TTS模型,支持Openai tts和 qwen-tts 系列 |
input |
string | 是 | 要转换为语音的文本,最长512个Token |
voice |
string | 是 | 语音音色,见支持的音色列表 |
speed |
number | 否 | 语音速度,范围0.25-4.0,默认1.0 |
response_format |
string | 否 | 音频格式,目前支持 wav |
响应格式
成功响应
API 直接返回音频文件内容,响应头包含:
音频格式规格:
- 格式: WAV (RIFF)
- 编码: 16位 PCM
- 声道: 单声道 (Mono)
- 采样率: 24000 Hz
错误响应
使用示例
cURL 示例
基础请求
curl -X POST "https://api.4allapi.com/v1/audio/speech" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-tts",
"input": "你好,这是语音合成测试",
"voice": "Cherry"
}' \
--output audio.wav
高级音色请求
curl -X POST "https://api.4allapi.com/v1/audio/speech" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-tts-latest",
"input": "欢迎使用通义千问语音合成服务,我是Jada!",
"voice": "Jada",
"speed": 1.2
}' \
--output audio_jada.wav
JavaScript 示例
async function generateSpeech(text, voice = 'Cherry') {
const response = await fetch('/v1/audio/speech', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'qwen-tts-latest',
input: text,
voice: voice
})
});
if (response.ok) {
const audioBlob = await response.blob();
const audioUrl = URL.createObjectURL(audioBlob);
// 播放音频
const audio = new Audio(audioUrl);
audio.play();
return audioUrl;
} else {
const error = await response.json();
throw new Error(error.error.message);
}
}
// 使用示例
generateSpeech('你好,世界!', 'Serena');
Python 示例
import requests
import io
def generate_speech(text, voice='Cherry', model='qwen-tts-latest'):
url = 'https://api.4allapi.com/v1/audio/speech'
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
data = {
'model': model,
'input': text,
'voice': voice
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
return response.content
else:
raise Exception(f"API Error: {response.status_code} - {response.text}")
# 使用示例
audio_content = generate_speech('你好,这是Python调用示例!', 'Ethan')
# 保存音频文件
with open('output.wav', 'wb') as f:
f.write(audio_content)
Node.js 示例
const fs = require('fs');
const fetch = require('node-fetch');
async function generateSpeech(text, voice = 'Cherry') {
try {
const response = await fetch('https://api.4allapi.com/v1/audio/speech', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'qwen-tts-latest',
input: text,
voice: voice
})
});
if (response.ok) {
const buffer = await response.buffer();
fs.writeFileSync('audio.wav', buffer);
console.log('音频文件已保存为 audio.wav');
} else {
const error = await response.json();
console.error('API错误:', error);
}
} catch (error) {
console.error('请求失败:', error);
}
}
// 使用示例
generateSpeech('欢迎使用Node.js语音合成!', 'Dylan');
流式响应(待支持)
对于长文本,可以使用流式响应获得更快的首字节时间:
curl -X POST "https://api.4allapi.com/v1/audio/speech" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen-tts",
"input": "这是一段较长的文本,使用流式响应可以获得更好的体验...",
"voice": "Chelsie"
}' \
--no-buffer
限制说明
文本限制
- 单次请求最大文本长度:512个Token
- 支持语言:中文、英文、中英混合
- 特殊字符会被自动处理
请求限制
- 频率限制:根据你的订阅计划
- 并发限制:默认支持多并发请求
- 文件大小:生成的音频文件大小取决于文本长度
音频规格
- 最大音频时长:约5分钟(取决于文本长度)
- 音频质量:24kHz, 16-bit PCM
- 输出格式:WAV
错误处理
常见错误码
| 错误码 | 描述 | 解决方案 |
|---|---|---|
invalid_api_key |
API密钥无效 | 检查Authorization头中的API密钥 |
model_not_found |
模型不存在 | 确认使用正确的qwen-tts模型名称 |
invalid_voice |
音色不支持 | 检查音色参数是否在支持列表中 |
text_too_long |
文本过长 | 减少输入文本长度至512个Token以内 |
quota_exceeded |
配额不足 | 检查账户余额或请求频率限制 |
故障排除
- 音频文件为空或损坏
- 检查API密钥是否有效
- 确认渠道配置正确
- 验证模型名称和音色参数
- 请求超时
- 检查网络连接
- 减少文本长度
- 重试请求
- 音色不生效
- 确认使用的模型版本支持该音色
- 检查音色参数大小写
定价说明
qwen-tts 系列模型按照字符数计费:
- 计费单位: 按输入字符数计算
- 计费方式: 预付费模式,从账户余额扣除
- 价格: 详见管理后台的价格配置
最佳实践
文本优化
- 标点符号: 合理使用标点符号可以改善语音节奏
- 数字处理: 建议将数字写成中文形式(如:123 → 一百二十三)
- 英文单词: 中英混合时,英文单词会按照中文语音规则发音
音色选择
- 场景匹配: 根据内容类型选择合适的音色
- 一致性: 同一应用建议使用统一的音色
- 测试: 建议先测试各种音色效果再确定
性能优化
- 缓存: 对于重复的文本可以缓存音频文件
- 分段: 长文本建议分段处理
- 并发: 合理控制并发请求数量
更新日志
v1.0.0 (2025-08-29)
- :check_mark_button: 新增qwen-tts系列模型支持
- :check_mark_button: 支持7种不同音色
- :check_mark_button: 兼容OpenAI标准API格式
- :check_mark_button: 支持流式和非流式响应
- :check_mark_button: 完整的错误处理机制
- :check_mark_button: 多语言SDK示例
技术支持
如果在使用过程中遇到问题,请:
- 查看本文档的故障排除部分
- 检查API响应中的错误信息
- 联系技术支持团队
注意: 本API完全兼容OpenAI的/v1/audio/speech接口规范,可以直接替换现有的OpenAI TTS调用。
4All API 页脚
4All API · 一站式AI大模型API聚合平台 | 价格 | 联系我们
© 2025 4All API. All rights reserved.