Android-Android使用AudioRecord类实现录音时,如何避免直流偏移?
小米3升级系统到Android 4.4.2之后,使用AudioRecord录到的音(WAV格式,16KHz采样、16bit位宽、单声道)长这个德行(Cool Edit Pro查看的效果):
我想咨询一下,为什么开始和中间位置,会出现大的零点漂移(好像是直流偏移);使用AudioRecord类进行录音时,如何避免出现该问题呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
录音时引入了直流分量,这应该是硬件问题,比如偶尔的静电串入。你首先应该检查这个问题有没有普遍性。
至于去除直流分量,这属于数字信号处理范畴的问题。笼统的说:信号分量在正、负两个方向上是基本均衡的,所以,直接计算信号在时域上的平均值,由于正常的信号统计平均值似于0,这个平均值就是直流分量,从信号中减去即可。
但看你的波形图,这个直流分量是不稳定的,这种去直流分量的算法难以应用。一定要用的话,可以考虑去直流分量后再做高通滤波处理,可能会有改善。
无论如何,硬件问题去查硬件(比如在线路中串一个容值合适的电容,即可有效去除直流分量),这可能更合适些。
——————————————————————————————
对了,另一个思路:考虑信号的带宽情况,比如从 200hz ~ 20000hz,那么首先以最低频信号的周期为窗口,逐窗口减去本窗口的算术平均以去除直流分量;然后做一个带通滤波,或许可以比较完美的去除直流分量。两项处理的顺序也可以换一下试试。纯构想,没算过更没试过。
自问自答一下:录双声道语音的话,不存在直流偏移。说明可能小米硬件或者ROM在到单声道录音方便存在缺陷。
为了避免直流偏移,首先,录双声道语音;然后,只取奇数位short的数据,拼接成单声道语音(因为对于双声道语音,左右声道产生的数据一般是按序成对儿出现,而且数值大多相同)。
我遇到的也是在小米上的音频处理问题,https://www.wenjiangs.com/group/topic-5670.html ,能否劳您大驾,帮忙看看