来源 https://www.jianshu.com/p/50c697bec409
在网上找到了pcm音量控制这篇文章,文章看起来很高大上,不过我们需要用到的好像就是一个公式而已:
就是这么个东西,具体解释大家可以点击上面的文章链接看看原理,其中 A1 和 A2 是两个声音的振幅,此处的A2为原始音频振幅,A1为根据所指定db大小计算出来的调节音量后的音频振幅,画不多说,试试效果:作者:寒小枫
voidRaiseVolume(int16_t* buf,uint64_tsize,floatuRepeat)
{
if(!size )
{
return;
}
//https://www.jianshu.com/p/50c697bec409 分贝调节
intdb =16;
double factor =pow(10.0,db /20.0);
// printf("==========");
for(inti =0; i < size; i++){
inttmp;
signedshortwData = buf[i];
// printf("%d \n ", wData);
tmp = wData*factor; // 上面所有关于vol的判断,其实都是为了此处*in_buf乘以一个倍数,你可以根据自己的需要去修改
// 下面的code主要是为了溢出判断
if(tmp >32767)
tmp =32767;
elseif(tmp < -32768)
tmp = -32768;
buf[i] = tmp;
}
}
网友评论