关于Pop音解决方案

现象分析

先来看一个典型的爆音音频示例,播放一个1k hz的正玄波,由于播放的正弦波的起始点不是0开始的完整的正弦波,第一个音频frame跳变。

img

由于幅度跳变,过渡不连续,造成爆音,从频谱图来看这条竖直的亮线处,就是产生爆音的位置

img

数据源线性变换

针对数据源,做梯度上升

img

频谱来看,爆破音减弱了很多。

300ms线性变化的频谱

img

500ms线性变化的频谱

img

线性变换的梯度越缓,消除pop音的效果越好,不过实际测下来10ms的渐变就可以达到比较良好的水平。当然网上有更为优秀的算法,可以实现完全消除的。

伪代码

img

参考实现

首先我们得弄清楚buffer/period/frame/sample之间的关系,下面一张图直观的表示buffer/period/frame/sample之间的关系:
img

对于底层来说是以frame为单位进行播放的,所以我们应该以frame为单位,针对的sample做线性变换。以下是渐入的代码参考实现:
image-20201127164449858

坚持原创技术分享,您的支持将鼓励我继续创作!