Android PCM字节

Pin*_*tac 9 audio android

我正在使用AudioRecord类来分析麦克风中的原始pcm字节.

所以那很好用.现在我需要将pcm字节转换为分贝.

我有一个公式,将Pa中的声音压力设为db.

db = 20*log10(Pa/ref Pa)

所以问题是我从缓冲区得到的字节是从振荡器得到的振幅帕斯卡声压力是什么.

我试图把这个值放到te公式中,但是它带有非常高的db,所以我不认为它是正确的

谢谢

Mus*_*sis 12

免责声明:我对Android知之甚少.

您的设备可能使用每个样本两个字节,以每秒44,100个样本(可能更少)以单声道录制.所以你的第一步是将原始数据中的字节对组合成两字节整数(我不知道在Android中如何完成).

然后,您可以通过首先获取样本的标准化绝对值并将其传递给Db函数来计算每个样本的分贝值(相对于峰值):

float Db = 20 * log10(ABS(sampleVal) / 32768)
Run Code Online (Sandbox Code Playgroud)

峰值附近的值(例如+32767或-32768)将具有接近0的Db值.值3277(0.1)将具有-20的Db值; 值327(.01)的Db值为-40等.

  • 严格地说,样本值表示从麦克风输出的瞬时电压(其中+32767表示最大正电压,-32768表示最小负电压).由于麦克风的工作原理,这个电压与当地平均声压的*变化*有关 - 当麦克风录制声音时,麦克风周围的气压会轻微上下移动,从而使膜前后移动产生交替正电压然后负电压.ADC(模数转换器)每秒采样44100次...... (4认同)
  • ...并将其转换为有符号的短值(-32768到+32767),保存在数据中. (2认同)