获取人声音轨
curl --request POST \
--url https://api.mountsea.ai/suno/v2/getVoxStem \
--header 'Content-Type: application/json' \
--data '
{
"clip_id": "<string>"
}
'import requests
url = "https://api.mountsea.ai/suno/v2/getVoxStem"
payload = { "clip_id": "<string>" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({clip_id: '<string>'})
};
fetch('https://api.mountsea.ai/suno/v2/getVoxStem', 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://api.mountsea.ai/suno/v2/getVoxStem",
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([
'clip_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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://api.mountsea.ai/suno/v2/getVoxStem"
payload := strings.NewReader("{\n \"clip_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.mountsea.ai/suno/v2/getVoxStem")
.header("Content-Type", "application/json")
.body("{\n \"clip_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mountsea.ai/suno/v2/getVoxStem")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"clip_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "<string>",
"source_clip_id": "<string>",
"vocal_start_s": 123,
"vocal_end_s": 123,
"vocal_audio_url": "<string>"
}Clip Persona
获取人声音轨
从音频中提取人声音轨用于创建角色
POST
/
suno
/
v2
/
getVoxStem
获取人声音轨
curl --request POST \
--url https://api.mountsea.ai/suno/v2/getVoxStem \
--header 'Content-Type: application/json' \
--data '
{
"clip_id": "<string>"
}
'import requests
url = "https://api.mountsea.ai/suno/v2/getVoxStem"
payload = { "clip_id": "<string>" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({clip_id: '<string>'})
};
fetch('https://api.mountsea.ai/suno/v2/getVoxStem', 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://api.mountsea.ai/suno/v2/getVoxStem",
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([
'clip_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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://api.mountsea.ai/suno/v2/getVoxStem"
payload := strings.NewReader("{\n \"clip_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.mountsea.ai/suno/v2/getVoxStem")
.header("Content-Type", "application/json")
.body("{\n \"clip_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mountsea.ai/suno/v2/getVoxStem")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"clip_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"status": "<string>",
"source_clip_id": "<string>",
"vocal_start_s": 123,
"vocal_end_s": 123,
"vocal_audio_url": "<string>"
}从音频片段中提取人声音轨。返回的
id 即 vox_audio_id,用于 创建 Persona — 构建可用于 task=inspiration 且 persona_style: "vox" 的 Vox Persona 的第一步。
此端点直接返回结果(不是任务 ID)。提取过程是同步处理的。
默认内部截取约 45~74 秒 人声。若歌曲短于 74 秒或需其他区间,请按集成方式处理
vocal_start_s / vocal_end_s(如支持)。请求体
string
必填
要从中提取人声的音频片段 ID。
响应
string
人声音频 ID。创建角色时作为
vox_audio_id 使用。string
提取状态(例如
"complete")。string
被处理的原始片段 ID。
number
检测到的人声开始时间(秒)。
number
检测到的人声结束时间(秒)。
string
提取的人声音频文件 URL。
示例
curl -X POST https://api.mountsea.ai/suno/v2/getVoxStem \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{
"clip_id": "78d99ca1-f751-4188-8b8e-0784754f0d8e"
}'
const response = await fetch('https://api.mountsea.ai/suno/v2/getVoxStem', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
body: JSON.stringify({
clip_id: '78d99ca1-f751-4188-8b8e-0784754f0d8e'
})
});
const data = await response.json();
console.log('Vox Audio ID:', data.id);
console.log('Vocal Range:', data.vocal_start_s, '-', data.vocal_end_s);
import requests
response = requests.post(
'https://api.mountsea.ai/suno/v2/getVoxStem',
headers={
'Content-Type': 'application/json',
'Authorization': 'Bearer your-api-key'
},
json={
'clip_id': '78d99ca1-f751-4188-8b8e-0784754f0d8e'
}
)
data = response.json()
print(f"Vox Audio ID: {data['id']}")
print(f"Vocal Range: {data['vocal_start_s']} - {data['vocal_end_s']}")
响应示例
{
"id": "373efa9c-a366-42bb-806c-afdfc9b306a7",
"status": "complete",
"source_clip_id": "78d99ca1-f751-4188-8b8e-0784754f0d8e",
"vocal_start_s": 45.0,
"vocal_end_s": 74.0,
"vocal_audio_url": "https://cdn1.suno.ai/processed_373efa9c-a366-42bb-806c-afdfc9b306a7_vocals.m4a"
}
工作流程:创建 Vox Persona
- Get Vox Stem — 提取人声,将返回的
id作为vox_audio_id - 创建 Persona —
clip_id传root_clip_id,并设置 root clip 上的人声范围
const voxData = await fetch('https://api.mountsea.ai/suno/v2/getVoxStem', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your-api-key' },
body: JSON.stringify({ clip_id: '4fa20262-2126-4ec2-9846-e668211a8c7b' })
}).then(r => r.json());
await fetch('https://api.mountsea.ai/suno/v2/persona', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your-api-key' },
body: JSON.stringify({
clip_id: '4fa20262-2126-4ec2-9846-e668211a8c7b',
vox_audio_id: voxData.id,
vocal_start_s: 0,
vocal_end_s: 120,
user_input_styles: 'rap歌曲,顺口',
name: 'My Voice',
is_public: true
})
});
创建 Persona 时的
vocal_start_s / vocal_end_s 表示 root clip 上的有效人声范围(常为 0 至 clip 总时长),不是 getVoxStem 内部 45~74 秒的截取区间。在 Inspiration 生成 中使用该 Persona:
persona_style: "vox",artist_clip_id 设为 Persona 的 root_clip_id。