Вопросы об Android AudioRecord?

Я возился с функцией 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

5
задан RzR 11 August 2011 в 16:11
поделиться