Возвратите амплитуду микрофонного входа, когда не запись - PullRequest
3 голосов
/ 28 января 2011

У меня есть следующий код, и я должен иметь возможность прослушивать микрофон на телефоне и использовать это значение для графического отображения на каком-либо визуализаторе:

Timer micTimer = new Timer();
micTimer.schedule(new TimerTask(){
    @Override
    public void run(){
        int x = MediaRecorder.getAudioSourceMax();
        Log.v("Timer", "" + x);
    }
}, 0, 100);

Я знаю, что это, вероятно, далеко не так. Позже в классе я использую объект AudioRecorder для записи звука для некоторой постобработки. Здесь я не хочу ничего записывать, просто отображаю звук на визуализаторе. Лог из этого кода просто выводит число 6 каждые 100 мс. Может ли это быть как-то связано с автоматической регулировкой усиления? Если так, как мне обойти это?

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Ну, извините, Сэм, но вы не можете получить амплитуду с микрофона без записи .Я разработал приложение, очень похожее на это.Вы должны начать запись, вызвать функцию getMaxAmplitude () (которая будет возвращать 0), немного подождать, затем вызвать ее снова, и она вернет максимальную амплитуду с момента последнего вызова функции.Загляните в приложение NoiseAlert. Это действительно помогло мне.

Также, как примечание, в своем исследовании я обнаружил, что проще использовать объект MediaRecorder, потому что он не имеет автоматического усиления;вы получаете то, что на самом деле «слышно» микрофоном.

1 голос
/ 21 мая 2011

Лог из вашего кода, действительно, просто выводит число 6 каждые 100 мс.Вы должны сделать это изменение:

mediaRecorder = new MediaRecorder();
//...
//...
//int x = MediaRecorder.getAudioSourceMax(); change to:
int x = mediaRecorder.getMaxAmplitude();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...