真寻配音 API v2 — 构造请求示例

三种模式完整示例:文本配音 / 音频变声 / 人声分离  ·  更新时间 2026-08-11
1. 拿密钥 2. 查模型 3. 提交任务 4. 轮询结果 5. 下载音频

基础信息

项目
Base URLhttps://api.kunxun.top/v2
鉴权方式请求头 Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0aX-API-Key: 你的密钥
密钥获取注册 zhenxun.kunxun.top 后,在「个人中心」复制(密钥以 kx_ 开头,长度 35 位)
任务模式异步:提交 → 返回 job_id → 轮询 GET /v2/jobs/{job_id} → 完成后拿下载 URL
响应格式成功 {"code": 0, ...};失败 {"status":"error","message":"..."} + HTTP 状态码
通用流程说明:三个模式都是「提交 → 轮询 → 下载」三步走。提交接口返回任务队列信息(job_idqueue_position 排队位置),之后每秒或每 3 秒轮询一次 /v2/jobs/{job_id},等 status 变成 succeeded 后,用返回的 result.audio_url(或顶层 audio_url)直接下载即可。任务处理需要时间(CPU 推理),大文件人声分离可能要等几分钟,属正常排队。

0. 先选模型

三种模式中,文本配音音频变声需要指定模型,人声分离不需要模型。模型列表用下面这个接口拿(全部可用模型都会返回):

GET /v2/models 需密钥

curl -s https://api.kunxun.top/v2/models \
  -H "Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a" \

响应示例(返回 id 就是提交任务时要填的 model_id):

{
  "code": 0,
  "device": "cpu",
  "models": [
    {"id": "onimai_mahiro",  "label": "绪山真寻",   "backend": "rvc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_asahi",   "label": "旭",         "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_kaede",   "label": "枫",         "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_meiboli", "label": "美波里",     "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_miyo",    "label": "美夜",       "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_momiji",  "label": "椛",         "backend": "svc", "sampling_rate": 40000, "available": true},
    {"id": "onimai_zhenxun", "label": "真寻(SVC)",  "backend": "svc", "sampling_rate": 40000, "available": true}
  ]
}
主模型「绪山真寻」的 id 是 onimai_mahiro(RVC 声线);其余为 SVC 声线。别用模型文件名当 id(如 onimai_mahiro_gpu_e500_s41500 是文件不是 id),填错会返回「模型不存在」。

1. 文本配音(TTS)

POST /v2/tts异步 输入文字 + 模型 + 高级参数,输出目标角色朗读的语音。

请求体支持 JSONmultipart/form-data 两种格式(客户端按自己习惯选一种)。

参数表(高级参数全部可选)

参数必填默认说明 / 可选值
text要合成的文字,≤ 5000 字
model_id角色模型 id,取自 GET /v2/models,如 onimai_mahiro
edge_voicezh-CN-XiaoxiaoNeural朗读语音:zh-CN-XiaoxiaoNeural 晓晓(女) / zh-CN-YunxiNeural 云希(男) / zh-CN-XiaoyiNeural 晓伊(女) / zh-CN-YunjianNeural 云健(男) / ja-JP-NanamiNeural Nanami(日)
rate+0%语速:-20% 慢20% / -10% 慢10% / +0% 正常 / +10% 快10% / +20% 快20%
pitch+0Hz音调:-10Hz 低 / +0Hz 正常 / +10Hz
transpose0升降调(半音),整数,范围 -24 ~ 24。正数变高、负数变低
f0_methodrmvpeF0 基频算法:pm / rmvpe(推荐)/ dio / harvest / crepe / crepe-tiny / parselmouth

方式 A:JSON 请求体(推荐给客户端)

curl -s -X POST https://api.kunxun.top/v2/tts \
  -H "Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "你好呀,我是真寻!今天也要加油哦。",
    "model_id": "onimai_mahiro",
    "edge_voice": "zh-CN-XiaoxiaoNeural",
    "rate": "+0%",
    "pitch": "+0Hz",
    "transpose": 0,
    "f0_method": "rmvpe"
  }'

方式 B:multipart/form-data 请求体

curl -s -X POST https://api.kunxun.top/v2/tts \
  -H "Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a" \
  -F "text=你好呀,我是真寻!今天也要加油哦。" \
  -F "model_id=onimai_mahiro" \
  -F "edge_voice=zh-CN-XiaoxiaoNeural" \
  -F "rate=+0%" \
  -F "pitch=+0Hz" \
  -F "transpose=0" \
  -F "f0_method=rmvpe"

提交响应(拿到 job_id 去轮询)

{
  "job_id": "61b05bbc69364cddad1d0daf9069ea4f",
  "kind": "tts",
  "status": "queued",
  "stage": "等待中",
  "progress": 0,
  "queue_position": 1,
  "queue_waiting": 1,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "任务已加入队列",
  "result": {}
}

2. 音频变声(Convert)

POST /v2/convert异步 上传一段音频/视频,把里面的人声转换成目标角色声线。

注意:音频变声是文件上传,请求体必须是 multipart/form-data,不能是 JSON。

参数表

参数必填默认说明 / 可选值
audio音频文件(表单字段名 audio)。支持 wav/mp3/flac/m4a/ogg/aac/opus/aiff/wma/amr/ac3/ape;也支持视频 mp4/mov/avi/mkv/flv 等(自动提取音轨)
model_id角色模型 id,如 onimai_mahiro
transpose0升降调(半音),整数,范围 -24 ~ 24
f0_methodrmvpeF0 算法:pm / rmvpe(推荐)/ dio / harvest / crepe / crepe-tiny / parselmouth

完整构造请求

curl -s -X POST https://api.kunxun.top/v2/convert \
  -H "Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a" \
  -F "audio=@/path/to/input.mp3" \
  -F "model_id=onimai_mahiro" \
  -F "transpose=0" \
  -F "f0_method=rmvpe"

提交响应

{
  "job_id": "9c2e4f1a8b3d4c5e9f0a1b2c3d4e5f60",
  "kind": "convert",
  "status": "queued",
  "stage": "等待中",
  "progress": 0,
  "queue_position": 1,
  "queue_waiting": 0,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "任务已加入队列",
  "result": {}
}
变声任务耗时取决于音频长度:几十秒的短音频约 1~3 分钟,几分钟的长音频要排队更久(单 worker 顺序处理,前面有任务会排队)。上传前建议先压缩/裁剪,控制文件体积。

3. 人声分离(Separate)

POST /v2/separate异步 上传一段混合音频,分离出人声轨伴奏轨

特殊:人声分离不需要选模型!它跟角色声线无关,只做「人声 / 伴奏」拆分,所以参数里没有 model_id

参数表

参数必填默认说明 / 可选值
audio音频/视频文件(表单字段名 audio),支持格式同上
strength0.85分离强度,小数,范围 0.15 ~ 1.0。越大分离越干净,但可能损失细节;一般 0.85 即可

完整构造请求

curl -s -X POST https://api.kunxun.top/v2/separate \
  -H "Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a" \
  -F "audio=@/path/to/song.mp3" \
  -F "strength=0.85"

提交响应

{
  "job_id": "7d8e9f0a1b2c3d4e5f60718293a4b5c6d",
  "kind": "separate",
  "status": "queued",
  "stage": "等待中",
  "progress": 0,
  "queue_position": 1,
  "queue_waiting": 0,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "任务已加入队列",
  "result": {}
}
分离完成后的结果里,result.vocals_url 是人声轨、result.background_url 是伴奏轨,两个都可以下载。人声分离是最重的任务(大文件几分钟),务必控制上传体积。

4. 轮询任务结果(三个模式通用)

GET /v2/jobs/{job_id}需密钥 用提交时返回的 job_id 轮询。建议每 2~3 秒查一次,直到 status 变为 succeededfailed

状态含义:queued 排队中 / running 处理中(progress 是百分比,stage 是当前阶段描述)/ succeeded 完成 / failed 失败(看 message)。

curl 示例

curl -s https://api.kunxun.top/v2/jobs/61b05bbc69364cddad1d0daf9069ea4f \
  -H "Authorization: Bearer z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a" \

完成响应(succeeded)

{
  "job_id": "61b05bbc69364cddad1d0daf9069ea4f",
  "kind": "tts",
  "status": "succeeded",
  "stage": "完成",
  "progress": 100,
  "elapsed_seconds": 16.85,
  "model_id": "onimai_mahiro",
  "model_name": "绪山真寻",
  "message": "绪山真寻配音生成完成",
  "result": {
    "audio_url": "https://api.kunxun.top/outputs/61b05bbc69364cddad1d0daf9069ea4f.onimai_mahiro.tts.wav",
    "vocals_url": null,
    "background_url": null,
    "duration_seconds": 1.88,
    "model_id": "onimai_mahiro",
    "model_name": "绪山真寻"
  },
  "audio_url": "https://api.kunxun.top/outputs/61b05bbc69364cddad1d0daf9069ea4f.onimai_mahiro.tts.wav"
}

三个模式拿结果的字段对照

模式成功后拿哪个字段说明
文本配音result.audio_urlaudio_url最终配音 WAV
音频变声result.audio_urlaudio_url转换后 WAV
人声分离result.vocals_url(人声)+ result.background_url(伴奏)两条轨分开下载

Python 轮询示例(客户端常用)

import time
import urllib.request, json

KEY = "z7xQm2Lv8pR4tN6wB3cF9hJ1sD5gH0a"
BASE = "https://api.kunxun.top/v2"

def poll(job_id, timeout=600):
    url = BASE + "/jobs/" + job_id
    req = urllib.request.Request(url, headers={"Authorization": "Bearer " + KEY})
    start = time.time()
    while time.time() - start < timeout:
        with urllib.request.urlopen(req, timeout=30) as resp:
            data = json.loads(resp.read().decode())
        if data["status"] in ("succeeded", "failed", "error"):
            return data
        time.sleep(3)
    raise TimeoutError("任务超时")

5. 常见错误与排查

HTTP错误 message原因 / 处理
401Invalid or missing API key密钥没传、格式不对或已失效。检查 Authorization: Bearer
403无权查看该任务job_id 不属于当前密钥对应的账号
404任务不存在或已过期job_id 拼错,或任务已清理
404模型不存在model_id 填错。用 GET /v2/models 拿真实 id
400文字太长 / 请输入要合成的文字text 为空或超过 5000 字
400不支持的格式上传文件扩展名不在支持列表
400上传音频为空上传了空文件
429今日配额已用完每天有配额上限(GET /v2/me 可查 used/limit),明天再试
422validation error参数类型不对(如 transpose 传了非数字)

其他注意