Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
prophesier
GitHub Repository: prophesier/diff-svc
Path: blob/main/flask_api.py
446 views
1
import io
2
import logging
3
4
import librosa
5
import soundfile
6
from flask import Flask, request, send_file
7
from flask_cors import CORS
8
9
from infer_tools.infer_tool import Svc
10
from utils.hparams import hparams
11
12
app = Flask(__name__)
13
14
CORS(app)
15
16
logging.getLogger('numba').setLevel(logging.WARNING)
17
18
19
@app.route("/voiceChangeModel", methods=["POST"])
20
def voice_change_model():
21
request_form = request.form
22
wave_file = request.files.get("sample", None)
23
# 变调信息
24
f_pitch_change = float(request_form.get("fPitchChange", 0))
25
# DAW所需的采样率
26
daw_sample = int(float(request_form.get("sampleRate", 0)))
27
speaker_id = int(float(request_form.get("sSpeakId", 0)))
28
# http获得wav文件并转换
29
input_wav_path = io.BytesIO(wave_file.read())
30
# 模型推理
31
_f0_tst, _f0_pred, _audio = model.infer(input_wav_path, key=f_pitch_change, acc=accelerate, use_pe=False,
32
use_crepe=False)
33
tar_audio = librosa.resample(_audio, hparams["audio_sample_rate"], daw_sample)
34
# 返回音频
35
out_wav_path = io.BytesIO()
36
soundfile.write(out_wav_path, tar_audio, daw_sample, format="wav")
37
out_wav_path.seek(0)
38
return send_file(out_wav_path, download_name="temp.wav", as_attachment=True)
39
40
41
if __name__ == '__main__':
42
# 工程文件夹名,训练时用的那个
43
project_name = "firefox"
44
model_path = f'./checkpoints/{project_name}/model_ckpt_steps_188000.ckpt'
45
config_path = f'./checkpoints/{project_name}/config.yaml'
46
47
# 加速倍数
48
accelerate = 50
49
hubert_gpu = True
50
51
model = Svc(project_name, config_path, hubert_gpu, model_path)
52
53
# 此处与vst插件对应,不建议更改
54
app.run(port=6842, host="0.0.0.0", debug=False, threaded=False)
55
56