8
我想从android上的麦克风计算响度水平。 我用AudioRecord从麦克风获取原始数据,并做了一些归一化处理,然后计算分贝。但结果是不正确的。我得到的分贝值不稳定,无法反映声音。例如,即使当我拍手时,分贝值也不反映声音。我应该如何更改代码?如果我想实时计算麦克风的响度,我应该怎么做?非常感谢。从android麦克风计算响度水平
recorder = new AudioRecord(AudioSource.MIC, iSampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, iAudioBufferSize);
iBufferReadResult = recorder.read(buffer, 0, iAudioBufferSize);
for (int i = 0; i < buffer.length-1; i++)
{
ByteBuffer bb = ByteBuffer.wrap(buffer, i, 2);
int isample = bb.getShort();
double dsample =(double) isample/32768.0;
sum += (dsample*dsample);
double rms = Math.sqrt(sum/(buffer.length*0.5));
double decibel = 20*Math.log10(rms);
sum = 0;
}
}
目的可能只是检测基于响度的声音环境的变化。我应该怎么做?谢谢。 – Foreverniu 2013-03-11 08:05:18
我想你在音频管理中检查音量 – DjHacktorReborn 2013-03-11 08:05:20
到目前为止,我还没有与麦克风一起工作,但我会假设你的计算总是会产生相同的结果。假设没有噪音,那么你将有50%的样本数量,如果这些数字是真正签名的,这将是0。另一方面,当有声音时,您将有许多具有相似正负幅度的样本,这些样本也将总计为0。我会说你只需要绝对值,例如如果您确实收到正面和负面的数字,请消除符号? – 2013-03-11 08:12:29