Suno Voice生成验证短句接口
curl --request POST \
--url https://apibox.erweima.ai/api/v1/voice/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"voiceUrl": "https://example.com/audio/user_voice.mp3",
"vocalStartS": 0,
"vocalEndS": 10,
"language": "en",
"callBackUrl": "https://example.com/callback/suno/voice_prepare"
}
'import requests
url = "https://apibox.erweima.ai/api/v1/voice/validate"
payload = {
"voiceUrl": "https://example.com/audio/user_voice.mp3",
"vocalStartS": 0,
"vocalEndS": 10,
"language": "en",
"callBackUrl": "https://example.com/callback/suno/voice_prepare"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
voiceUrl: 'https://example.com/audio/user_voice.mp3',
vocalStartS: 0,
vocalEndS: 10,
language: 'en',
callBackUrl: 'https://example.com/callback/suno/voice_prepare'
})
};
fetch('https://apibox.erweima.ai/api/v1/voice/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://apibox.erweima.ai/api/v1/voice/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'voiceUrl' => 'https://example.com/audio/user_voice.mp3',
'vocalStartS' => 0,
'vocalEndS' => 10,
'language' => 'en',
'callBackUrl' => 'https://example.com/callback/suno/voice_prepare'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://apibox.erweima.ai/api/v1/voice/validate"
payload := strings.NewReader("{\n \"voiceUrl\": \"https://example.com/audio/user_voice.mp3\",\n \"vocalStartS\": 0,\n \"vocalEndS\": 10,\n \"language\": \"en\",\n \"callBackUrl\": \"https://example.com/callback/suno/voice_prepare\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://apibox.erweima.ai/api/v1/voice/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"voiceUrl\": \"https://example.com/audio/user_voice.mp3\",\n \"vocalStartS\": 0,\n \"vocalEndS\": 10,\n \"language\": \"en\",\n \"callBackUrl\": \"https://example.com/callback/suno/voice_prepare\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apibox.erweima.ai/api/v1/voice/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"voiceUrl\": \"https://example.com/audio/user_voice.mp3\",\n \"vocalStartS\": 0,\n \"vocalEndS\": 10,\n \"language\": \"en\",\n \"callBackUrl\": \"https://example.com/callback/suno/voice_prepare\"\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"msg": "success",
"data": {
"taskId": "xxx_task_id_xxx"
}
}Suno Voice
Suno Voice 生成验证短句
生成 Suno Voice 自建音色流程所需的验证短句。
POST
/
api
/
v1
/
voice
/
validate
Suno Voice生成验证短句接口
curl --request POST \
--url https://apibox.erweima.ai/api/v1/voice/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"voiceUrl": "https://example.com/audio/user_voice.mp3",
"vocalStartS": 0,
"vocalEndS": 10,
"language": "en",
"callBackUrl": "https://example.com/callback/suno/voice_prepare"
}
'import requests
url = "https://apibox.erweima.ai/api/v1/voice/validate"
payload = {
"voiceUrl": "https://example.com/audio/user_voice.mp3",
"vocalStartS": 0,
"vocalEndS": 10,
"language": "en",
"callBackUrl": "https://example.com/callback/suno/voice_prepare"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
voiceUrl: 'https://example.com/audio/user_voice.mp3',
vocalStartS: 0,
vocalEndS: 10,
language: 'en',
callBackUrl: 'https://example.com/callback/suno/voice_prepare'
})
};
fetch('https://apibox.erweima.ai/api/v1/voice/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://apibox.erweima.ai/api/v1/voice/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'voiceUrl' => 'https://example.com/audio/user_voice.mp3',
'vocalStartS' => 0,
'vocalEndS' => 10,
'language' => 'en',
'callBackUrl' => 'https://example.com/callback/suno/voice_prepare'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://apibox.erweima.ai/api/v1/voice/validate"
payload := strings.NewReader("{\n \"voiceUrl\": \"https://example.com/audio/user_voice.mp3\",\n \"vocalStartS\": 0,\n \"vocalEndS\": 10,\n \"language\": \"en\",\n \"callBackUrl\": \"https://example.com/callback/suno/voice_prepare\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://apibox.erweima.ai/api/v1/voice/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"voiceUrl\": \"https://example.com/audio/user_voice.mp3\",\n \"vocalStartS\": 0,\n \"vocalEndS\": 10,\n \"language\": \"en\",\n \"callBackUrl\": \"https://example.com/callback/suno/voice_prepare\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://apibox.erweima.ai/api/v1/voice/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"voiceUrl\": \"https://example.com/audio/user_voice.mp3\",\n \"vocalStartS\": 0,\n \"vocalEndS\": 10,\n \"language\": \"en\",\n \"callBackUrl\": \"https://example.com/callback/suno/voice_prepare\"\n}"
response = http.request(request)
puts response.read_body{
"code": 200,
"msg": "success",
"data": {
"taskId": "xxx_task_id_xxx"
}
}使用指南
- 提交源录音 URL,以及用于创建音色的人声片段范围。
- 接口会返回
taskId,后续可用它查询生成的验证短句。 - 如果传入
callBackUrl,系统会在验证短句生成完成或任务失败时发送 POST 回调。回调地址必须可公网访问,并在 15 秒内返回 HTTP 200。 - 获取
validateInfo后,让用户录制该短句并上传验证音频,再调用音色生成接口。为获得更佳的音色生成效果,建议采用演唱方式录制。
流程
- 上传或托管源音频,确保
voiceUrl可公开访问。 - 使用
vocalStartS和vocalEndS选择干净的人声片段。 - 提交验证短句任务,并保存返回的
taskId。 - 通过查询接口或回调等待
validateInfo。 - 录制用户完成验证短句的音频,然后调用自建音色生成接口。为获得更佳的音色生成效果,建议采用演唱方式录制。
回调
验证短句回调
查看验证短句生成完成或失败时发送的回调格式
开发者注意事项
vocalEndS必须大于vocalStartS。- 建议选择人声清晰、背景噪音少的片段,以提高验证效果。
language用于控制验证短句语言,支持en、zh、es、fr、pt、de、ja、ko、hi、ru。
授权
API 认证说明
所有接口都需要通过 Bearer Token 方式进行认证。
获取 API Key
- 访问 API Key 管理页面 获取您的 API Key
使用方式
在请求头中添加:
Authorization: Bearer YOUR_API_KEY
注意:
- 请妥善保管您的 API Key,不要泄露给他人
- 如果怀疑 API Key 泄露,请立即在管理页面重置
请求体
application/json
用户上传的原始录音URL[必填]
截取人声开始秒数[必填]
截取人声结束秒数,必须大于vocal_start_s[必填]
验证短句语言,支持的语言有: en英文,zh中文,es西班牙语,fr法语,pt葡萄牙语言,de德语,ja日语,ko韩语,hi印地语,ru俄语
⌘I
