跳转至

语音合成 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",
    "input": "你好,欢迎使用语音合成服务!",
    "voice": "Cherry"
}

完整请求参数

{
    "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 直接返回音频文件内容,响应头包含:

Content-Type: audio/wav
Content-Disposition: attachment; filename="audio.wav"

音频格式规格:

  • 格式: WAV (RIFF)
  • 编码: 16位 PCM
  • 声道: 单声道 (Mono)
  • 采样率: 24000 Hz

错误响应

{
    "error": {
        "message": "错误描述",
        "type": "invalid_request_error",
        "code": "error_code"
    }
}

使用示例

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 配额不足 检查账户余额或请求频率限制

故障排除

  1. 音频文件为空或损坏
  2. 检查API密钥是否有效
  3. 确认渠道配置正确
  4. 验证模型名称和音色参数
  5. 请求超时
  6. 检查网络连接
  7. 减少文本长度
  8. 重试请求
  9. 音色不生效
  10. 确认使用的模型版本支持该音色
  11. 检查音色参数大小写

定价说明

qwen-tts 系列模型按照字符数计费:

  • 计费单位: 按输入字符数计算
  • 计费方式: 预付费模式,从账户余额扣除
  • 价格: 详见管理后台的价格配置

最佳实践

文本优化

  1. 标点符号: 合理使用标点符号可以改善语音节奏
  2. 数字处理: 建议将数字写成中文形式(如:123 → 一百二十三)
  3. 英文单词: 中英混合时,英文单词会按照中文语音规则发音

音色选择

  1. 场景匹配: 根据内容类型选择合适的音色
  2. 一致性: 同一应用建议使用统一的音色
  3. 测试: 建议先测试各种音色效果再确定

性能优化

  1. 缓存: 对于重复的文本可以缓存音频文件
  2. 分段: 长文本建议分段处理
  3. 并发: 合理控制并发请求数量

更新日志

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示例

技术支持

如果在使用过程中遇到问题,请:

  1. 查看本文档的故障排除部分
  2. 检查API响应中的错误信息
  3. 联系技术支持团队

注意: 本API完全兼容OpenAI的/v1/audio/speech接口规范,可以直接替换现有的OpenAI TTS调用。


4All API 页脚

4All API · 一站式AI大模型API聚合平台 | 价格 | 联系我们

© 2025 4All API. All rights reserved.