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
나는 오디오 관리에서 볼륨을 확인한다고 생각한다. – DjHacktorReborn
나는 지금까지 마이크로 작업하지는 않았지만 계산 결과가 항상 같은 결과를 산출한다고 가정한다. 소음이 없다고 가정하면 50 %의 샘플을 얻게되며, 실제로 숫자가 서명 된 경우 0이됩니다. 반면에 사운드가있을 때 비슷한 양의 진폭과 음의 진폭을 갖는 많은 샘플을 가지므로 0까지 추가됩니다. 절대 값만 가져야한다고 말하고 싶습니다. 정말로 양수와 음수를받는다면 표지판을 제거 하시겠습니까? –