2

我正在尝试以分贝获取录制音频的噪音水平。我正在使用以下代码,但它没有给出正确的输出

byte[] audioData = new byte[bufferSize];
recorder.read(audioData, 0, bufferSize);
ByteBuffer bb = ByteBuffer.wrap(audioData);
int sampleSize = bb.getInt();

现在,如果我记录 sampleSize 那么它会提供非常大的价值,例如 956318464

任何人都可以告诉如何在分贝中获得正确的噪音水平。

4

2 回答 2

2

第一分贝是一个比率。您不能只获得分贝,您需要将音量与基线测量值进行比较。所以关于振幅的真实方程是

db= 10* log10(幅度/基线幅度);

如果您现在正在录制音频,请使用 MediaRecorder.getMaxAmplitude 获取幅度。对于基线幅度,测量预期的背景噪声。

于 2013-01-24T06:45:29.450 回答
0
 public int calculatePowerDb(short[] sdata, int off, int samples)
    {
        double sum = 0;
        double sqsum = 0;
        for (int i = 0; i < samples; i++)
        {
            final long v = sdata[off + i];
            sum += v;
            sqsum += v * v;
        }
        double power = (sqsum - sum * sum / samples) / samples;

        power /= MAX_16_BIT * MAX_16_BIT;

        double result = Math.log10(power) * 10f + FUDGE;
        return (int)result;
    }
    private static final float MAX_16_BIT = 32768;
private static final float FUDGE = 0.6f;

它的工作正常这个方法

于 2013-11-29T14:14:34.550 回答