Androidのマイクからラウドネスレベルを計算しようとしています。AudioRecord を使用してマイクから生データを取得し、正規化を行ってからデシベルを計算しました。しかし、結果は正しくありません。私が得たデシベル値は安定しておらず、音を反映できません。手を叩いてもデシベル値が反映されないなど。コードをどのように変更すればよいですか、またはマイクからのラウドネスをリアルタイムで計算したい場合はどうすればよいですか? どうもありがとう。
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;
}
}