Обработка звука в реальном времени на Android

Я пытаюсь понять, как написать приложение, которое может легко декодировать звуковой код Морзе на лету. Я нашел этот документ, в котором объясняется, как записывать аудио с микрофона в Android. Я хотел бы знать, возможно ли получить доступ к исходному входу с микрофона или нужно ли его записать/прочитать в файл.

Спасибо.

Ответ 1

Если вы используете MediaRecorder (пример выше), он будет сохранять сжатый звук в файл.

Если вы используете AudioRecord, вы можете напрямую получить образцы аудио.

Да, то, что вы хотите сделать, должно быть возможным.

Ответ 2

Использование AudioRecord является излишним. Просто проверьте MediaRecorder.getMaxAmplitude() каждые 1000 миллисекунд за громкие шумы и тишину.

Если вам действительно нужно проанализировать форму волны, тогда да вам потребуется AudioRecord. Получите необработанные данные и вычислите что-то вроде среднего квадрата корня части необработанных байтов, с которыми вы занимаетесь, чтобы получить представление об объеме.

Но почему все это, когда MediaRecorder.getMaxAmplitude() гораздо проще в использовании.

см. мой код из этого ответа: этот вопрос

Ответ 3

в медиа-лабораториях MIT, называемых funf, есть сенсорная среда: http://code.google.com/p/funf-open-sensing-framework/
Они уже создали классы для аудио ввода и некоторый анализ (FFT и т.п.), А также сохранение файлов или загрузки реализовано, насколько я видел, и они обрабатывают большинство датчиков, доступных на телефоне. Вы также можете получить вдохновение от кода, который они написали, что я считаю довольно хорошим.

Ответ 4

Похоже, что его сначала нужно сбрасывать в файл.

Если вы заглядываете в источник android.media.AudioRecord, буферы базового буфера аудиоданных не подвергаются публичному API.

По моему опыту, создав аудио-синтезатор для Android, трудно добиться производительности в реальном времени и поддерживать точность воспроизведения аудио. "Переводчик" Морзе-кода, безусловно, выполним, и звучит как забавный маленький проект. Удачи!