2016-09-06 4 views
0

Я пытался получить уровень амплитуды микрофона на Android, как так:Как получить амплитуду MediaRecorder

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new RecorderTask(recorder), 0, 1000); 

private class RecorderTask extends TimerTask { 
    private MediaRecorder recorder; 

    public RecorderTask(MediaRecorder recorder) { 
     this.recorder = recorder; 
    } 

    public void run() { 
     Log.v("MicInfoService", "amplitude: " + recorder.getMaxAmplitude()); 
    } 
} 

К сожалению, это только возвращает 0 все время.

Похоже, что для этого я должен начать запись. Это верно?

Если это так, мне нужно записать за 500 мс, получить амплитуду, остановить запись и повторить?

Наконец, нужно ли записывать файл? Мне не нужно сохранять этот аудиофайл, не могу ли я получить текущую амплитуду или самую высокую амплитуду после последнего вызова текущего живого микрофона без записи?

Любая помощь приветствуется, спасибо.

ответ

0

Да, вы должны начать запись. Если вы не записываете, нет сигнала, чтобы найти амплитуду.

Нет, вам не нужно останавливать запись, getMaxAmplitude находит максимальную амплитуду с момента последнего вызова.

Да, с этим api вы должны написать в файл. Однако вы можете удалить файл, если это будет сделано. Или попробуйте использовать/dev/null в качестве файла.

Смежные вопросы