Tôi đang cố gắng tính mức độ ồn từ micrô trên Android. Tôi đã sử dụng AudioRecord để lấy dữ liệu thô từ micrô và cũng đã thực hiện một số chuẩn hóa và tính toán decibel sau đó. Nhưng kết quả là không đúng. Các giá trị decibel tôi nhận được không ổn định và không thể phản ánh âm thanh. Chẳng hạn như ngay cả khi tôi vỗ tay, giá trị decibel không phản ánh âm thanh. Tôi nên thay đổi mã như thế nào hoặc tôi nên làm gì nếu tôi muốn tính toán độ to từ micrô trong thời gian thực? Cảm ơn rất nhiều.Tính mức độ ồn từ micrô trên 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;
}
}
Mục đích có thể phát hiện sự thay đổi âm thanh môi trường dựa trên độ ồn. Tôi nên làm như thế nào? Cảm ơn. – Foreverniu
Tôi nghĩ bạn kiểm tra âm lượng trong âm thanh quản lý – DjHacktorReborn
Tôi chưa làm việc với micrô cho đến nay nhưng tôi cho rằng tính toán của bạn luôn mang lại kết quả tương tự. Giả sử không có tiếng ồn thì bạn sẽ có nhiều mẫu ở mức 50%, sẽ là 0 nếu các số thực sự được ký. Mặt khác, khi có một âm thanh, bạn sẽ có nhiều mẫu với biên độ dương và âm tương tự, và cũng sẽ tăng lên tới 0. Tôi muốn nói rằng bạn chỉ cần sử dụng các giá trị tuyệt đối, ví dụ: loại bỏ các dấu hiệu nếu bạn thực sự nhận được số dương và âm? –