1. 使用场景

文本转语音模型(TTS)是一种将文本信息转换为语音输出的 AI 模型。该模型将输入文本内容生成自然流畅、富有表现力的语音,适用于多种应用场景:

  • 为博客文章提供音频朗读
  • 生成多语言语音内容
  • 支持实时流媒体音频输出

2. API 使用指南

  • 端点:/audio/speech,具体使用可参考api文档
  • 主要请求参数:
    • model:用于语音合成的模型(如 fishaudio/fish-speech-1.5)。

    • input:待转换为音频的文本内容。

    • voice:参考音色,支持系统预置音色用户预置音色用户动态音色。 详细参数请参考:创建文本转语音请求

    • speed:可以控制音频速度,float类型,默认值是1.0,可选范围是[0.25,4.0];

    • gain:音频增益,单位dB,可以控制音频声音大小,float类型,默认值是0.0,可选范围是[-10,10];

    • sample_rate:可以控制输出采样率,对于不同的视频输出类型,默认值和可取值范围均不同,具体如下:

      • opus: 目前只支持48000hz
      • wav, pcm: 支持 (8000, 16000, 24000, 32000, 44100), 默认44100
      • mp3: 支持(32000, 44100), 默认44100

2.1 系统预置音色:

目前系统预置了如下 8 种音色:

在线试听上述音频。

在请求中使用系统预置音色

2.2 用户预置音色:

注意:使用用户预置音色,需要进行实名认证。

2.2.1 通过 base64 编码格式上传用户预置音色

import requests
import json

url = "https://api.siliconflow.cn/v1/uploads/audio/voice"
headers = {
    "Authorization": "Bearer your-api-key", # 从 https://cloud.siliconflow.cn/account/ak 获取
    "Content-Type": "application/json"
}
data = {
    "model": "fishaudio/fish-speech-1.5", # 模型名称
    "customName": "your-voice-name", # 用户自定义的音频名称
    "audio": "data:audio/mpeg;base64,SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYxLjcuMTAwAAAAAAAAAAAAAAD/40DAAAAAAAAAAAAASW5mbwAAAA8AAAAWAAAJywAfHx8fKioqKio1NTU1Pz8/Pz9KSkpKVVVVVVVfX19fampqamp1dXV1f39/f3+KioqKlZWVlZWfn5+fn6qqqqq1tbW1tb+/v7/KysrKytXV1dXf39/f3+rq6ur19fX19f////", # 参考音频的 base64 编码
    "text": "在一无所知中, 梦里的一天结束了,一个新的轮回便会开始" # 参考音频的文字内容
}

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

# 打印响应状态码和响应内容
print(response.status_code)
print(response.json())  # 如果响应是 JSON 格式

上述接口返回的 uri 字段,即为自定义音色的 ID,用户可以将其作为后续的 voice 参数中,进行请求。

{'uri': 'speech:your-voice-name:cm04pf7az00061413w7kz5qxs:mjtkgbyuunvtybnsvbxd'}

在请求中使用用户预置音色

2.2.2 通过文件上传用户预置音色

import requests

url = "https://api.siliconflow.cn/v1/uploads/audio/voice"
headers = {
    "Authorization": "Bearer your-api-key" # 从 https://cloud.siliconflow.cn/account/ak 获取
}
files = {
    "file": open("/Users/senseb/Downloads/fish_audio-Alex.mp3", "rb") # 参考音频文件
}
data = {
    "model": "fishaudio/fish-speech-1.5", # 模型名称
    "customName": "your-voice-name", # 参考音频名称
    "text": "在一无所知中, 梦里的一天结束了,一个新的轮回便会开始" # 参考音频的文字内容
}

response = requests.post(url, headers=headers, files=files, data=data)

print(response.status_code)
print(response.json())  # 打印响应内容(如果是JSON格式)

上述接口返回的 uri 字段,即为自定义音色的 ID,用户可以将其作为后续的 voice 参数中,进行请求。

{'uri': 'speech:your-voice-name:cm04pf7az00061413w7kz5qxs:mjtkgbyuunvtybnsvbxd'}

在请求中使用用户预置音色

2.3 获取用户动态音色列表

import requests
url = "https://api.siliconflow.cn/v1/audio/voice/list"

headers = {
    "Authorization": "Bearer your-api-key" # 从https://cloud.siliconflow.cn/account/ak获取
}
response = requests.get(url, headers=headers)

print(response.status_code)
print(response.json) # 打印响应内容(如果是JSON格式)

上述接口返回的 uri 字段,即为自定义音色的 ID,用户可以将其作为后续的 voice 参数中,进行请求。

{'uri': 'speech:your-voice-name:cm04pf7az00061413w7kz5qxs:mjtkgbyuunvtybnsvbxd'}

在请求中使用用户预置音色

2.4 使用用户动态音色

注意:使用用户预置音色,需要进行实名认证。

在请求中使用用户动态音色

2.5 删除用户动态音色

import requests

url = "https://api.siliconflow.cn/v1/audio/voice/deletions"
headers = {
    "Authorization": "Bearer your-api-key",
    "Content-Type": "application/json"
}
data = {
    "uri": "speech:your-voice-name:cm02pf7az00061413w7kz5qxs:mttkgbyuunvtybnsvbxd"
}

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

print(response.status_code)
print(response.text) #打印响应内容

上述接口请求参数中的 uri 字段,即为自定义音色的 ID。

3. 支持模型列表

目前支持 fishaudio 模型,更多模型正在开发中。

注意:支持的 TTS 模型可能发生调整,请在「模型广场」筛选“语音”标签 获得当前支持的模型列表。

3.1 fishaudio/fish-speech 系列模型

注意:当前的 fishaudio/fish-speech 系列模型仅支持使用充值余额进行支付。在使用前,请确保账户充值余额充足。
  • fish-speech-1.5 支持语言:中文、英语、日语、德语、法语、西班牙语、韩语、阿拉伯语、俄语、荷兰语、意大利语、波兰语、葡萄牙语
  • fish-speech-1.4 支持语言:中文、英语、日语、德语、法语、西班牙语、韩语、阿拉伯语
  • 计费方式:按照百万 UTF-8 字节 进行计费,实时价格参看模型广场

3.2 RVC-Boss/GPT-SoVITS 系列模型

  • 零样本文本到语音(TTS): 输入 5 秒的声音样本,即刻体验文本到语音转换。
  • 跨语言支持: 支持与训练数据集不同语言的推理,目前支持英语、日语、韩语、粤语和中文。

4. 参考音频的最佳实践

提供参考音频的高质量样本可以提升语音克隆效果。

4.1 音频质量指南

  • 仅限单一说话人
  • 稳定的音量、音调和情绪
  • 简短的停顿(建议 0.5 秒)
  • 理想情况:无背景噪音、专业录音质量、无房间回声

4.2 文件格式

  • 支持格式:mp3, wav, pcm, opus
  • 推荐使用 192kbps 以上的 mp3 以避免质量损失
  • 未压缩格式(例如 WAV)提供的额外优势有限

5. 使用示例

5.1 使用系统预置音色

from pathlib import Path
from openai import OpenAI

speech_file_path = Path(__file__).parent / "siliconcloud-generated-speech.mp3"

client = OpenAI(
    api_key="您的 APIKEY", # 从 https://cloud.siliconflow.cn/account/ak 获取
    base_url="https://api.siliconflow.cn/v1"
)

with client.audio.speech.with_streaming_response.create(
  model="fishaudio/fish-speech-1.5", # 目前仅支持 fishaudio 系列模型
  voice="fishaudio/fish-speech-1.5:alex", # 系统预置音色
  # 用户输入信息
  input="SiliconCloud 上提供的fish audio模型是基于 70 万小时多语言音频数据训练的领先文本到语音(TTS)模型,支持中文、英语、日语、德语、法语、西班牙语、韩语、阿拉伯语等多种语言,并能够音色克隆,具有非常好的实时性。",
  response_format="mp3" # 支持 mp3, wav, pcm, opus 格式
) as response:
    response.stream_to_file(speech_file_path)

5.2 使用用户预置音色

from pathlib import Path
from openai import OpenAI

speech_file_path = Path(__file__).parent / "siliconcloud-generated-speech.mp3"

client = OpenAI(
    api_key="您的 APIKEY", # 从 https://cloud.siliconflow.cn/account/ak 获取
    base_url="https://api.siliconflow.cn/v1"
)

with client.audio.speech.with_streaming_response.create(
  model="fishaudio/fish-speech-1.5", # 目前仅支持fishaudio模型
  voice="speech:your-voice-name:cm02pf7az00061413w7kz5qxs:mttkgbyuunvtybnsvbxd", # 用户上传音色名称,参考
  # 用户输入信息
  input="SiliconCloud 上提供的fish audio模型是基于 70 万小时多语言音频数据训练的领先文本到语音(TTS)模型,支持中文、英语、日语、德语、法语、西班牙语、韩语、阿拉伯语等多种语言,并能够音色克隆,具有非常好的实时性。",
  response_format="mp3"
) as response:
    response.stream_to_file(speech_file_path)

5.3 使用用户动态音色

from pathlib import Path
from openai import OpenAI
client = OpenAI()

speech_file_path = Path(__file__).parent / "siliconcloud-generated-speech.mp3"

client = OpenAI(
    api_key="您的 APIKEY", # 从 https://cloud.siliconflow.cn/account/ak 获取
    base_url="https://api.siliconflow.cn/v1"
)

with client.audio.speech.with_streaming_response.create(
  model="fishaudio/fish-speech-1.5", 
  voice="", # 此处传入空值,表示使用动态音色
  # 用户输入信息
  input="SiliconCloud 上提供的fish audio模型是基于 70 万小时多语言音频数据训练的领先文本到语音(TTS)模型,支持中文、英语、日语、德语、法语、西班牙语、韩语、阿拉伯语等多种语言,并能够音色克隆,具有非常好的实时性。",
  response_format="mp3",
  extra_body={"references":[
        {
            "audio": "https://sf-maas-uat-prod.oss-cn-shanghai.aliyuncs.com/voice_template/fish_audio-Alex.mp3", # 参考音频 url。也支持 base64 格式
            "text": "在一无所知中, 梦里的一天结束了,一个新的轮回便会开始", # 参考音频的文字内容
        }
    ]}
) as response:
    response.stream_to_file(speech_file_path)