I want to develop a small Android app to measure the current noise level (probablyin dB). But I have no idea what to look for in the libs. I don't want to record the noise. Can someone give me a pointer what classes to look at?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
I recommend looking in these classes:
android.media.AudioFormat
android.media.AudioManager
android.media.AudioTrack
We used them in the Blinkendroid audio package a short while ago.
回答2:
For me 'maxAmplitude
' was not helpful. After day of researching I eventually reached my target. You can find my solution here: Android: AudioRecord Class Problem: Callback is never called
回答3:
The following code snippet shows how we obtained the noise level in the past. Unfortunately the documentation does not tell what unit #getMaxAmplitude() returns.
// Start recording but don't store data
MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile("/dev/null");
mediaRecorder.prepare();
mediaRecorder.start();
// Obtain maximum amplitude since last call of getMaxAmplitude()
while(someCondition) {
int amplitude = mediaRecorder.getMaxAmplitude();
}
// Don't forget to release
mediaRecorder.reset();
mediaRecorder.release();