基于内网部署GPT-SoVITS服务API调用文档

基于内网部署GPT-SoVITS服务API调用文档

Bachelor LEE Lv2

前言

这篇文档是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');

// 创建 Speaker 实例来播放解码后的 PCM 音频流
const speaker = new Speaker({
channels: 2, // 立体声
bitDepth: 16, // 16 位
sampleRate: 44100 // 44.1kHz 采样率
});

// 请求流式音频并处理的函数
const streamOggAudio = async (url) => {
try {
const response = await axios({
method: 'get',
url: url,
responseType: 'stream'
});
console.log("开始ffmpeg流式转换格式,OGG->PCM")
// 使用 FFmpeg 转换 OGG 流并播放
ffmpeg(response.data)
.format('s16le') // 指定输出格式为 PCM
.audioChannels(2) // 设置为立体声
.audioFrequency(44100) // 设置采样率为 44.1kHz
.pipe(speaker, { end: true }) // 将转换后的音频流传递给 Speaker

} 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

1
screen -S GPTSoVits

激活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
ctrl+a+d

查看监听端口信息

1
netstat -anp | grep 9880

开放防火墙端口

1
sudo ufw allow 9880
  • 标题: 基于内网部署GPT-SoVITS服务API调用文档
  • 作者: Bachelor LEE
  • 创建于 : 2024-10-19 13:57:00
  • 更新于 : 2024-11-05 10:42:11
  • 链接: https://blog.inik.cc/2024/10/19/67173d9409cf.html
  • 版权声明: 本文章采用 CC BY-NC 4.0 进行许可。