基于内网部署GPT-SoVITS服务API调用文档
前言
这篇文档是API调用文档,以便查阅方便并不是部署搭建教程。
客户端API调用
以下所有请求HOST均为下列内网,GET形式请按标准规定来拼接URL
使用执行参数指定的参考音频
参数 |
含义 |
text |
需要转语音文本 |
text_language |
目标语言 |
GET
1
| text=天姥连天向天横,势拔五岳掩赤城。&text_language=zh
|
POST
1 2 3 4
| { "text": "天姥连天向天横,势拔五岳掩赤城。", "text_language": "zh" }
|
使用执行参数指定的参考音频并设定分割符号
参数 |
含义 |
text |
需要转语音文本 |
text_language |
目标语言 |
cut_punc |
分割字符 |
GET
1
| text=天姥连天向天横,势拔五岳掩赤城。&text_language=zh&cut_punc=,。
|
POST
1 2 3 4 5
| { "text": "天姥连天向天横,势拔五岳掩赤城。", "text_language": "zh", "cut_punc": ",。" }
|
手动指定当次推理所使用的参考音频
参数 |
含义 |
text |
需要转语音文本 |
text_language |
目标语言 |
cut_punc |
分割字符 |
refer_wav_path |
参考音频 |
prompt_text |
音频对应文本 |
prompt_language |
音频对应语言 |
GET
1
| refer_wav_path=123.wav&prompt_text=一二三。&prompt_language=zh&text=天姥连天向天横,势拔五岳掩赤城。&text_language=zh&cut_punc=,。
|
POST
1 2 3 4 5 6 7 8
| { "refer_wav_path": "123.wav", "prompt_text": "一二三。", "prompt_language": "zh", "text": "天姥连天向天横,势拔五岳掩赤城。", "text_language": "zh", "cut_punc": ",。" }
|
- 成功: 直接返回 wav 音频流, http code 200
- 失败: 返回包含错误信息的 json, http code 400
手动指定当次推理所使用的参考音频,并提供参数
参数 |
含义 |
text |
需要转语音文本 |
text_language |
目标语言 |
cut_punc |
分割字符 |
refer_wav_path |
参考音频 |
prompt_text |
音频对应文本 |
prompt_language |
音频对应语言 |
top_k |
在生成过程中从前 k 个最可能的候选项中进行选择 |
top_p |
表示选择候选词的累积概率阈值 |
temperature |
控制生成结果的随机性 |
speed |
控制播放速度 |
inp_refs |
音频文件路径的数组 |
GET
1
| refer_wav_path=123.wav&prompt_text=一二三。&prompt_language=zh&text=天姥连天向天横,势拔五岳掩赤城。&text_language=zh&cut_punc=,。&top_k=20&top_p=0.6&temperature=0.6&speed=1&inp_refs="456.wav"&inp_refs="789.wav
|
POST
1 2 3 4 5 6 7 8 9 10 11 12 13
| { "refer_wav_path": "123.wav", "prompt_text": "一二三。", "prompt_language": "zh", "text": "天姥连天向天横,势拔五岳掩赤城。", "text_language": "zh", "cut_punc": ",。", "top_k": 20, "top_p": 0.6, "temperature": 0.6, "speed": 1, "inp_refs": ["456.wav","789.wav"] }
|
- 成功: 直接返回 wav 音频流, http code 200
- 失败: 返回包含错误信息的 json, http code 400
简单的Axios调用示例
需要ffmpeg环境支持,请自行安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| const axios = require('axios'); const Speaker = require('speaker'); const ffmpeg = require('fluent-ffmpeg');
const speaker = new Speaker({ channels: 2, bitDepth: 16, sampleRate: 44100 });
const streamOggAudio = async (url) => { try { const response = await axios({ method: 'get', url: url, responseType: 'stream' }); console.log("开始ffmpeg流式转换格式,OGG->PCM") ffmpeg(response.data) .format('s16le') .audioChannels(2) .audioFrequency(44100) .pipe(speaker, { end: true })
} catch (error) { console.error('Error streaming audio:', error); } };
let text = `先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。` const audioUrl = `http://192.168.102.5:9880?text=${text}&text_language=zh`; !(async ()=>{ await streamOggAudio(audioUrl); })()
|
服务端
api.py 启动参数列表
参数 |
含义 |
可选值 |
示例 |
-s |
SoVITS模型路径 |
依据实际需求 |
config.py中指定 |
-g |
GPT模型路径 |
依据实际需求 |
config.py中指定 |
-dr |
默认参考音频路径 |
依据实际需求 |
-dr “wavs/1.wav” |
-dt |
默认参考音频文本 |
依据实际需求 |
-dt “你好,我是大白” |
-dl |
默认参考音频语种 |
“zh”,”en”,”ja”,”ko”,”yue” |
-dl “zh” |
-d |
推理设备 |
“cuda”,”cpu” |
-d “cpu” |
-a |
监听地址 |
依据实际需求 |
-a “0.0.0.0” |
-p |
监听端口 |
依据实际需求 |
-p 9880 |
-fp |
覆盖 config.py 使用全精度 |
依据实际需求 |
|
-hp |
覆盖 config.py 使用半精度 |
依据实际需求 |
|
-sm |
式返回模式, 默认不启用 |
“c”,”n” |
-sm “n” |
-mt |
返回的音频编码格式, 流式默认ogg, 非流式默认wav |
“wav”, “ogg”, “aac” |
-mt “ogg” |
-st |
返回的音频数据类型, 默认int16 |
“int16”, “int32” |
-st “int32” |
-cp |
文本切分符号设定, 默认为空 |
“,.,。” |
-cp “,.,。” |
-hb |
cnhubert路径 |
依据实际需求 |
|
-b |
bert路径 |
依据实际需求 |
|
运行前准备
debian/ubuntu 安装screen
1 2
| sudo apt update sudo apt install screen -y
|
新建screen
激活conda环境
1
| conda activate GPTSoVits
|
服务端启动示例
1
| python api.py -dr "wavs/1.wav" -dt "大家也叫我三月、小三月…你呢?你想叫我什么?" -dl "zh" -d "cpu" -a "0.0.0.0" -p 9880 -sm "n" -cp ",.,。"
|
保存screen会话
查看监听端口信息
1
| netstat -anp | grep 9880
|
开放防火墙端口