Вы также можете использовать класс mediaRecoder, для отображения данных в реальном времени на пользовательском интерфейсе вам необходимо использовать обработчик:
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();
}
}
В этой части отображаются данные на пользовательском интерфейсе:
private Runnable pollTask = new Runnable() {
@Override
public void run() {
double amplitude = soundMeter.getAmplitude();
amplitudeTextView.setText("Amplitude: " + amplitude);
handler.postDelayed(pollTask, 500);
}
};
Не делайтене забудьте вызвать обработчик в методе onCreate:
handler.postDelayed(pollTask, 500);
500 - это задержка в миллисекундах, которую пользовательский интерфейс будет обновлять
, как вы можете видеть здесь, вам не нужно сохранять выходные данные в файл, если выустановите выходной адрес, как показано ниже, он не будет нигде сохранять:
mediaRecorder.setOutputFile("/dev/null");