rvc导出的onnx模型做实时变声推理,声音不连续
环境: RVC版本:https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git -- RVC的git仓库最新提交版本 使用以下脚本导出的onnx:https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/tools/export_onnx.py 原模型为rvc自带的keruanV1.pth,导出模型为keruanV1.onnx,确认生成的是动态模型。
现象: 由于是做实时变声推理,因此每次送入模型的数据片段会很短,大概7200个采样。但输出的数据片段并不能很好的衔接在一起。如:片段A、B、C,在从麦克风进来后,三个数据片段的声音是连续的,但从变声器出来后,听感上A会高一些,B会低一些,而且三个片段的衔接处也无法丝滑过渡,会导致衔接处播放时产生噪音。实际听感就是,变声后的声音会周期性出现“点点点”的声音。
所做的尝试:
- 参考https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/gui_v1.py中对推理后数据的处理。增加了交叉淡化算法,但收效甚微。
// 计算当前返回帧的头部淡化效果
auto fo_head = in_buf + sola_offset;
auto fo_tail = fo_head + block_frame;
for (size_t i = 0; i < sola_buffer_frame; i++) {
fo_head[i] *= fade_in_window[i];
fo_head[i] += (sola_buffer[i] * fade_out_window[i]);
}
memcpy(sola_buffer, fo_tail, sola_buffer_frame * sizeof(float_t));
- 利用ffmpeg的acrossfade滤镜进行处理,但得到的结果一样,效果不大。
- 增加每次送入模型的数据量,通过滑动窗口的方式返回数据。如:我会缓存500ms左右的历史变声前数据,新的7200个采样到来后会从缓存尾部推入,缓存头部则会被挤出7200个采样,将整个缓存数据送入变声器。取输出数据尾部的7200个采样返回。
- 将3中返回窗口分别设置在输出数据的头部、中部、尾部,均未得到特别好的效果,也将这种窗口形式与1/2中的交叉淡化结合,亦无明显效果。
请问是否有什么办法,能让每次推理的数据片段能衔接起来,让声音连续呢?
请问不同片段之间有重叠部分吗
请问不同片段之间有重叠部分吗
输入片段是由麦克风采集获得的,每个输入片段之间是没有重叠部分的
请问不同片段之间有重叠部分吗
输入片段是由麦克风采集获得的,每个输入片段之间是没有重叠部分的
我也是这个问题,我觉得应该就是不重叠分帧导致的
同样吞字,想看看你是怎么写的推理
请问不同片段之间有重叠部分吗
输入片段是由麦克风采集获得的,每个输入片段之间是没有重叠部分的
我也是这个问题,我觉得应该就是不重叠分帧导致的
尝试过使用缓存保留部分历史数据,与新数据一起送入推理引擎,然后每次取固定部位的数据返回,但每次返回的片段依然会有衔接不上的问题。
同样吞字,想看看你是怎么写的推理
我目前就是用历史缓存+新数据送入推理引擎,每次返回取前面部分,但依然会有衔接不上的问题
目前在尝试用libtorch复刻RVC的处理流程。 之前用onnxruntime推理onnx模型,不知道是不是小引擎对某些算子不支持,所以小片段推理问题较多。
目前在尝试用libtorch复刻RVC的处理流程。 之前用onnxruntime推理onnx模型,不知道是不是小引擎对某些算子不支持,所以小片段推理问题较多。
意思是不用onnx 单纯用torch推理 衔接效果还不错吗
目前在尝试用libtorch复刻RVC的处理流程。 之前用onnxruntime推理onnx模型,不知道是不是小引擎对某些算子不支持,所以小片段推理问题较多。
据我所知 Google开源的神经音频编解码器Lyra 如果用官方给的tflite 是可以不重叠分帧直接流式在线推理的 生成音频没有任何不连贯的感觉 但是如果转成onnx用onnx推理 生成音频会很吵
目前在尝试用libtorch复刻RVC的处理流程。 之前用onnxruntime推理onnx模型,不知道是不是小引擎对某些算子不支持,所以小片段推理问
那您打算导出 torchscript 模型吗?
能分享一下你的代码吗?
你好,请问你是用C++去写的么?我是只会C++的小白,但是在执行onnx_inference_demo.py,都出现ValueError: cannot reshape array of size 184320 into shape (1,2,721,1439)。可以分享一下代码,或者帮忙交流一下吗?
不好意思 我不是做这个项目的 我只是在Google冲浪看到了这个issue 你可以问一下别人或者自己print中间的tensor的shape看看是什么原因
你可以用滑动窗口的方式推理,每次都会取前面的数据做一下连接淡化处理。目前我用C++跑了,windows效果还可以。就是mac下延迟1500ms。无法接受,目前还在找原因