Skip to content

文本转语音

提供 OpenAI 兼容的文本转语音接口。

请求方法

POST

请求地址

https://chat.ecnu.edu.cn/open/api/v1/audio/speech

请求参数

参数名类型是否必须描述
modelstring模型名称,目前可用 ecnu-tts,详见 模型列表
inputstring要转换为语音的文本,不超过 4096 个字符
voicestring音色 ID,可选值详见 音色列表,默认为 xiayu
response_formatstring音频格式,可选值:mp3, opus, aac, flac, wav, pcm, 默认为 mp3
speednumber语速倍数,范围 0.25-4.0,默认为 1.0

返回参数

参数名类型描述
audio_databinary音频二进制数据
content_typestring音频MIME类型

请求成功时直接返回音频二进制流,并附带 Content-Disposition 响应头给出建议文件名。选择 pcm 格式时,额外返回 Content-Rate(采样率)、Content-Channels(声道数,固定为 1)、Content-Bits(位深,固定为 16)响应头,便于直接播放原始音频流。

请求示例

http
POST https://chat.ecnu.edu.cn/open/api/v1/audio/speech
Content-Type: application/json
Authorization: Bearer sk-UDK3*******************1Y

{
    "model": "ecnu-tts",
    "input": "你好,欢迎使用文本转语音服务",
    "voice": "xiayu",
    "response_format": "mp3",
    "speed": 1.0
}

返回示例

http
HTTP/1.1 200 OK
Content-Type: audio/mpeg
Content-Length: 123456
Content-Disposition: attachment; filename="speech_1754720000_3f9a2b1c.mp3"

[二进制音频数据]

错误返回

参数不合法时返回 400,响应体为 JSON。request_id 可用于排查问题,details 会给出可选值等补充信息。

json
{
    "error": "voice 'xiaoming' not found",
    "request_id": "3f9a2b1c",
    "details": {
        "available_voices": ["xiayu", "liwa", "male_warm"]
    }
}

常见错误:

错误信息说明
input is requiredinput 为空
speed must be between 0.25 and 4.0speed 超出取值范围
response_format 'xxx' not supportedresponse_format 不在支持的格式内
voice 'xxx' not foundvoice 不是有效的音色 ID

代码示例

直接调用接口

python
import requests
import json

# 设置API参数
url = "https://chat.ecnu.edu.cn/open/api/v1/audio/speech"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer your-api-key"  # 替换为您的API密钥
}

# 文本转语音请求
data = {
    "model": "ecnu-tts",
    "input": "你好,欢迎使用文本转语音服务",
    "voice": "xiayu",
    "response_format": "mp3",
    "speed": 1.0
}

response = requests.post(url, headers=headers, data=json.dumps(data))

# 保存音频文件
if response.status_code == 200:
    with open("output.mp3", "wb") as f:
        f.write(response.content)
    print("音频文件已保存为 output.mp3")
else:
    print(f"请求失败: {response.status_code}")

使用 OpenAI SDK

python
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://chat.ecnu.edu.cn/open/api/v1",
    api_key="your-api-key"  # 替换为您的API密钥
)

# 文本转语音请求
response = client.audio.speech.create(
    model="ecnu-tts",                      # 指定模型
    voice="xiayu",                         # 音色 ID
    input="你好,欢迎使用文本转语音服务",    # 输入文本
    response_format="mp3",                 # 音频格式
    speed=1.0                              # 语速
)

# 保存音频文件
with open("output.mp3", "wb") as f:
    f.write(response.content)

print("音频文件已保存为 output.mp3")

批量文本转语音

python
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://chat.ecnu.edu.cn/open/api/v1",
    api_key="your-api-key"  # 替换为您的API密钥
)

# 批量文本列表
texts = [
    "第一段文本内容",
    "第二段文本内容",
    "第三段文本内容"
]

voices = ["xiayu", "liwa", "male_news"]  # 不同的音色

for i, (text, voice) in enumerate(zip(texts, voices)):
    response = client.audio.speech.create(
        model="ecnu-tts",
        voice=voice,
        input=text,
        response_format="mp3"
    )
    
    # 保存为不同文件
    filename = f"speech_{i+1}.mp3"
    with open(filename, "wb") as f:
        f.write(response.content)
    
    print(f"音频文件已保存为 {filename}")

音色列表

通过 voice 参数指定音色 ID,默认为 xiayu

校园

音色 ID名称描述适用场景
xiayu夏雨男声,音色平衡(默认音色)通用场景
liwa丽娃女声,音色平衡通用场景

男声

音色 ID名称描述适用场景
male_warm温润男声温和舒缓,情绪克制情感叙述、有声书
male_steady稳重学长年轻沉稳,讲述感强课程讲解、校园宣传
male_news男声·新闻标准播报腔,字正腔圆新闻播报、通知公告
male_philosophy男声·哲理语速偏慢,思辨感强观点评述、文案朗读
yunze云泽大叔中年男声,浑厚有力纪录片解说、科普讲述

女声

音色 ID名称描述适用场景
female_sweet甜美女声明亮甜美,亲和力强智能客服、导览播报
female_literary女声·文艺舒缓细腻,文艺气质散文朗读、品牌文案
female_news女声·新闻标准播报腔,节奏明快新闻播报、通知公告

方言

音色 ID名称描述适用场景
sichuan四川话四川方言方言配音、趣味内容
tianjin天津话天津方言方言配音、趣味内容
shaanxi陕西话陕西方言方言配音、趣味内容

多语与角色

音色 ID名称描述适用场景
japanese日语日语音色日语内容合成
lindaiyu林黛玉古典戏剧角色音色角色配音、趣味内容
labixiaoxin蜡笔小新动画角色音色角色配音、趣味内容

方言与角色音色针对特定语料训练,在朗读长段落书面语时可能出现口音或语气不稳定,建议先用短文本试听后再批量使用。

音频格式说明

格式文件大小音质兼容性推荐场景
mp3良好广泛支持通用推荐
opus最小良好现代浏览器网络传输
aac优秀苹果设备移动应用
flac无损专业设备高质量需求
wav很大无损广泛支持专业音频处理
pcm最大原始专业设备实时音频处理