Тестирование микрофона и получение уровня сигнала¶
Чтобы проверить микрофон перед публикацией, необходимо получить значение уровня сигнала. Для этого используется класс android.media.MediaRecorder
. При этом необходимо записывать аудио
в файл. В версиях Android 10 и ниже, можно было записывать в псевдоустройство /dev/null
, однако с Android 11 это невозможно, и требуется открывать на запись реальный файл, располагая его в данных приложения:
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
String fileName = context.getFilesDir().getAbsolutePath() + "/test.3gp";
//Path /dev/null throw exception on Android 11
mRecorder.setOutputFile(fileName);
try {
mRecorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mRecorder.start();
От объекта MediaRecorder
можно получить мгновенное значение амплитуды сигнала
public double getAmplitude() {
if (mRecorder != null)
return (mRecorder.getMaxAmplitude() / 2700.0);
else
return 0;
}
и затем усреднить его для отображения