Я возился с функцией AudioRecord в Android API и обнаружил странное поведение с ней.
Справочная информация: Мой телефон - HTC Incredible Я использую плагин Eclipse для разработки под Android с эмулятором. Целевая платформа или ОС - 2.2 ... Так как это то, что использует мой телефон.
Некоторый код:
bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, FREQUENCY, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
Это код, который я использую для настройки AudioRecord API. Теперь для эмулятора он хочет, чтобы FREQUENCY была установлена на 8000, чтобы он работал. Возвращается с размером буфера 640. Для телефона я использую 44100. Одна проблема заключается в том, что результирующие данные PCM для волны кажутся восьмибитными волнами со знаком. Я получаю значения от -127 до 128. Я думал, что значение AudioFormat.ENCODING_PCM_16BIT
приведет к чему-то другому.
Я обрабатываю звук с помощью потока,
public void run() {
while(isRecording) {
audioRecord.startRecording();
byte[] data = new byte[bufferSize];
audioRecord.read(data, 0, bufferSize);
listener.setData(data);
handleData(data);
}
audioRecord.release();
}
У меня есть способ графического отображения для соответствующего волна в реальном времени с использованием SurfaceView
. Кажется, из микрофона доносится сильный шум. Я слышу этот шум и от эмулятора, и от телефона. Нужно ли мне пропускать данные через какой-то фильтр (ы)? Я хотел бы использовать эти данные для вычисления забавного БПФ и прочего, просто чтобы поиграть с волной. Но мне нужно как-то уменьшить шум.
Кто-нибудь еще испытывал это. У кого-нибудь есть решение?
Я признателен за ваше время и ответы, Спасибо, dk