Skip to content

定制音色

曾用名:定制声音

创建声音定制任务

说明

Cicada-TTS的语音模型提供方便的声音复刻能力,支持用户使用克隆的音色合成试听音频,以及在语音合成阶段使用自己的音色。

支持模型

以下为Cicada-TTS已提供的语音模型及其特性说明

模型特性
Cicada3.0-turbocicada3.0升级版,在cicada3.0的基础上加强了稳定性,适用于对情感表达要求高的场景
Cicada3.0情感表现力强、上限高,适用于对情感表达要求高的场景
Cicada1.0稳定、音色还原度高,适用于对效果稳定性需求高的场景

使用流程

定制声音功能的实现具体流程如下:

  1. 上传待克隆的音频
  • 支持上传的文件需要遵循以下规范:

上传的音频文件格式需为: mp3、wav、m4a格式;

上传的音频文件的有效音频时长范围在30秒到5分钟,其中有效的说话人音频时长不低于10秒;

文件大小不超过 100 M;

  1. 选取相应的模型
  • 目前支持cicada1.0, cicada3.0以及cicada3.0-Turbo
  1. 上传声音预览文案
  • 声音预览文案不能超过50个字符,且不能仅传数字
  1. 调用声音定制接口
  • 输入上述入参,调用 声音定制接口 克隆音色并获取trace_id

注意: 此任务QPS 10/min,具体进度通过查询接口查看

请求地址

http
POST /open/v1/create_customised_audio
http
access_token: {{access_token}}
Content-Type: application/json

请求参数 Body

字段类型是否必传说明
name字符串声音名称
url字符串声音链接,支持 mp3,wav,m4a,
目前只支持以下四种编码:audio/x-wav, audio/mpeg, audio/m4a, video/mp4
录制环境要安静,无背景杂音,正常语速,嚼字清晰,连续讲话不低于10秒,最好带有情感讲话
时长30秒-5分钟,文件大小不超过 100 M
model_type模型类型默认模型为cicada1.0,支持cicada1.0、cicada3.0、cicada3.0-turbo,具体收费参考 计费说明
language语种默认为cn,支持en英文,其他语种暂不支持,如有特殊语种需要支持,请联系客服
text字符串声音预览文案,文本内容不得超过50个字符,不得仅传数字
callback字符串回调地址,任务结束后会向该地址发送一个 POST 请求。请求体的格式和获取声音定制结果详情查询结果返回的data相同

请求示例

json
{
  "name": "example",
  "url": "https://example.com/abc.mp3",
  "callback": "https://example.com/callback"
}

响应

响应JOSN

json
{
  "trace_id": "2f0f50951d0bae0a3be3569097305424",
  "code": 0,
  "msg": "success",
  "data": "C-Audio-53e4e53ba1bc40de91ffaa74f20470fc"
}

响应字段说明

字段说明
code响应状态码
msg响应消息
data声音的 id

响应状态码说明

code说明
0响应成功
400传入参数格式错误
10400AccessToken验证失败
APP状态错误
40000参数错误
40001超出QPS限制
50000系统内部错误

示例代码

bash
curl -X "POST" "https://www.chanjing.cc/api/open/v1/create_customised_audio" \
     -H 'access_token: {你的 access_token}' \
     -d '{
  "name": "example",
  "url": "https://example.com/abc.mp3",
  "callback": "https://example.com/callback"
}'
go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "https://www.chanjing.cc/api/open/v1/create_customised_audio"
  method := "POST"

  payload := strings.NewReader("%7B%0A%20%20%22name%22%3A%20%22example%22%2C%0A%20%20%22url%22%3A%20%22https%3A%2F%2Fexample.com%2Fabc.mp3%22%2C%0A%20%20%22callback%22%3A%20%22https%3A%2F%2Fexample.com%2Fcallback%22%0A%7D=")

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("access_token", "{你的 access_token}")
  req.Header.Add("Content-Type", "application/x-www-form-urlencoded")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "{
  \"name\": \"example\",
  \"url\": \"https://example.com/abc.mp3\",
  \"callback\": \"https://example.com/callback\"
}=");
Request request = new Request.Builder()
  .url("https://www.chanjing.cc/api/open/v1/create_customised_audio")
  .method("POST", body)
  .addHeader("access_token", "{你的 access_token}")
  .addHeader("Content-Type", "application/x-www-form-urlencoded")
  .build();
Response response = client.newCall(request).execute();
py
import requests

url = "https://www.chanjing.cc/api/open/v1/create_customised_audio"

payload = '%7B%0A%20%20%22name%22%3A%20%22example%22%2C%0A%20%20%22url%22%3A%20%22https%3A%2F%2Fexample.com%2Fabc.mp3%22%2C%0A%20%20%22callback%22%3A%20%22https%3A%2F%2Fexample.com%2Fcallback%22%0A%7D='
headers = {
  'access_token': '{你的 access_token}',
  'Content-Type': 'application/x-www-form-urlencoded'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

获取声音定制结果

说明

查询由声音定制任务接口提交的声音,异步任务,具体进度通过查询接口查看

QPS   10/min

请求地址

http
GET /open/v1/customised_audio?id=xxxxxxxxxxxxx

Header

http
access_token: {{access_token}}

请求参数 Query Params

KeyValue
idC-Audio-53e4e53ba1bc40de91ffaa74f20470fa声音id,创建任务时返回

响应

返回示例

json
{
  "trace_id": "7994cedae0f068d1e9e4f4abdf99215b",
  "code": 0,
  "msg": "success",
  "data": {
    "id": "C-Audio-53e4e53ba1bc40de91ffaa74f20470fc",
    "name": "声音克隆",
    "type": "cicada1.0",
    "progress": 0,
    "audio_path": "",
    "err_msg": "不支持的音频格式,请阅读接口文档"
    "status": 2
  }
}

响应字段说明

一级字段二级字段说明
code响应状态码
msg响应消息
data响应数据
id声音 id
progress任务进度 0-100
type声音模型类型(cicada1.0、cicada3.0)
name声音名称
err_msg异常或失败的错误信息
audio_path训练音频片段(从原音频中截取的有效片段用于训练)
status制作状态 0 等待制作1制作中 2已完成 3已过期 4 制作失败 99 已删除

响应状态码说明

code说明
0响应成功
10400AccessToken验证失败
APP状态错误
该AI语音被禁用或者不存在
40000参数错误
40001超出QPS限制
50000系统内部错误

示例代码

bash
curl -L 'https://www.chanjing.cc/api/open/v1/customised_audio?id=C-Audio-53e4e53ba1bc40de91ffaa74f20470fc' -H 'access_token: HjKpDp6o3o2P2el7VHaMKwpHIJs+rkYNspNBRAZ7VU8WC/bz93oUKUNhHENRt28x'
go
package main

import (
  "fmt"
  "net/http"
  "io"
)

func main() {

  url := "https://www.chanjing.cc/api/open/v1/customised_audio?id=C-Audio-53e4e53ba1bc40de91ffaa74f20470fc"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("access_token", "HjKpDp6o3o2P2el7VHaMKwpHIJs+rkYNspNBRAZ7VU8WC/bz93oUKUNhHENRt28x")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://www.chanjing.cc/api/open/v1/customised_audio?id=C-Audio-53e4e53ba1bc40de91ffaa74f20470fc")
  .method("GET", body)
  .addHeader("access_token", "HjKpDp6o3o2P2el7VHaMKwpHIJs+rkYNspNBRAZ7VU8WC/bz93oUKUNhHENRt28x")
  .build();
Response response = client.newCall(request).execute();
py
import requests

url = "https://www.chanjing.cc/api/open/v1/customised_audio?id=C-Audio-53e4e53ba1bc40de91ffaa74f20470fc"

payload = {}
headers = {
  'access_token': 'HjKpDp6o3o2P2el7VHaMKwpHIJs+rkYNspNBRAZ7VU8WC/bz93oUKUNhHENRt28x'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

获取声音定制列表

说明

仅支持查询由声音定制任务接口提交的声音

QPS   10/min

请求地址

http
POST /open/v1/list_customised_audio

Header

http
access_token: {{access_token}}

Content-Type:application/json

请求参数 Body

json
{
  "page": 1,
  "page_size": 2
}

参数说明

字段说明
page当前页
page_size每页数量,最大 50

响应

返回示例

json
{
    "trace_id": "",
    "code": 0,
    "msg": "success",
    "data": {
      "list": [
        {
          "id": "C-Audio-793d02b175994ece930001a5589e514c",
          "progress": 100,
          "name": "声音克隆",
          "audio_path": "https://chanjin.cc/chanjing/custom/person/2024-12-26/29e3e5eff93a676eecc2b00530081dab.wav",
          "err_msg": ""
        },
        {
          "id": "C-Audio-7984a80178434b868788a45cfd6abfbb",
          "progress": 0,
          "name": "声音克隆",
          "audio_path": "",
          "err_msg": "任务失败,请重试,或联系客服处理"
        }
      ],
      "page_info": {
        "page": 1,
        "size": 2,
        "total_count": 2,
        "total_page": 1
      }
    }
}

响应字段说明

一级字段二级字段三级字段说明
code响应状态码
msg响应消息
data响应数据
list声音定制列表
id声音 id
progress任务进度 0-100
type声音模型类型(cicada1.0、cicada2.0)
name声音名称
err_msg异常或失败的错误信息
audio_path训练音频片段(从原音频中截取的有效片段用于训练)
status制作状态 0等待制作 1制作中 2已完成 3已过期 4 制作失败 99 已删除
page_info分页信息
page当前页码
size页面大小(与请求参数 page_size 对应,最大 50
total_count声音总数
total_page总页数

响应状态码说明

code说明
0响应成功
400传入参数格式错误
10400AccessToken验证失败
APP状态错误
40000参数错误
40001超出QPS限制
50000系统内部错误
51000系统内部错误

示例代码

bash
curl -L -X POST 'https://www.chanjing.cc/api/open/v1/list_customised_audio' -H 'access_token: NPSMe0G338uGmGEIAWfjfoI+YaGFquongf70BsiOOUifE+icRi3tEae1G2TaH/Db' -H 'Content-Type: application/json' -d '{"page":1,"page_size":5}'
go
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "https://www.chanjing.cc/api/open/v1/list_customised_audio"
  method := "POST"

  payload := strings.NewReader(`{"page":1,"page_size":5}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("access_token", "NPSMe0G338uGmGEIAWfjfoI+YaGFquongf70BsiOOUifE+icRi3tEae1G2TaH/Db")
  req.Header.Add("Content-Type", "application/json")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"page\":1,\"page_size\":5}");
Request request = new Request.Builder()
  .url("https://www.chanjing.cc/api/open/v1/list_customised_audio")
  .method("POST", body)
  .addHeader("access_token", "NPSMe0G338uGmGEIAWfjfoI+YaGFquongf70BsiOOUifE+icRi3tEae1G2TaH/Db")
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
py
import requests
import json

url = "https://www.chanjing.cc/api/open/v1/list_customised_audio"

payload = json.dumps({
  "page": 1,
  "page_size": 5
})
headers = {
  'access_token': 'NPSMe0G338uGmGEIAWfjfoI+YaGFquongf70BsiOOUifE+icRi3tEae1G2TaH/Db',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

删除定制声音

说明

删除用户通过声音定制接口创建的声音ID。 异步任务,具体进度通过查询接口查看

QPS   10/min

请求地址

http
POST  /open/v1/delete_customised_audio

Header

http
access_token: {{access_token}}
Content-Type:application/json

请求参数 Body

参数名称类型是否必传示例说明
idstringC-Audio-96e769c803f24d0c9eee6d19cb0896e4声音ID

请求示例

json
{
    "id":"C-Audio-96e769c803f24d0c9eee6d19cb0896e4"
}

响应JSON

json
{
    "trace_id": "26965518b54aeccc6a34dfc49c1ca7c8",
    "code": 0,
    "msg": "success"
}

响应参数

字段说明
code响应状态码
msg响应消息

响应状态号说明

code说明
0响应成功
400传入参数格式错误
40000参数错误
40001超出QPS限制
50000系统内部错误
没有找到对应的声音