I was trying to get the amplitude level of a microphone on Android like so:
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecord
You can also use mediaRecoder class, to display real time data on UI you need to use Handler:
public class SoundMeter {
private MediaRecorder mediaRecorder;
public void start(){
if(started){
return;
}
if (mediaRecorder == null){
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(
MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(
MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(
MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile("/dev/null");
try{
mediaRecorder.prepare();
}catch (IllegalStateException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
mediaRecorder.start();
started = true;
}
}
}
public double getAmplitude(){
return mediaRecorder.getMaxAmplitude();
}
}
This part show data on UI:
private Runnable pollTask = new Runnable() {
@Override
public void run() {
double amplitude = soundMeter.getAmplitude();
amplitudeTextView.setText("Amplitude: " + amplitude);
handler.postDelayed(pollTask, 500);
}
};
Don't forget to call handler in onCreate method:
handler.postDelayed(pollTask, 500);
500 is delay in milliseconds which UI will updated
as you can see here you don't need to save output to file if you set output destination as below it won't save anywhere:
mediaRecorder.setOutputFile("/dev/null");