mitudesk/uma_diffsvc
0
1import io2import logging3 4import librosa5import soundfile6from flask import Flask, request, send_file7from flask_cors import CORS8 9from infer_tools.infer_tool import Svc10from utils.hparams import hparams11 12app = Flask(__name__)13 14CORS(app)15 16logging.getLogger('numba').setLevel(logging.WARNING)17 18 19@app.route("/voiceChangeModel", methods=["POST"])20def voice_change_model():21 request_form = request.form22 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 41if __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 = 5049 hubert_gpu = True50 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 