Я возился с функцией 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
. Кажется, от микрофона много шума. Я получаю этот шум от эмулятора и телефона, а также. Нужно ли запускать данные через какие-то фильтры? Я хотел бы использовать эти данные для вычисления некоторого забавного БПФ и прочего, чтобы просто поиграть с волной. Но мне нужно как-то уменьшить шум.
Кто-нибудь еще испытывал это? У кого-нибудь есть решение?
Я ценю ваше время и ответы,
Спасибо,
дк