Создание файла WAV из необработанных данных PCM с помощью Android SDK

Я пытаюсь использовать класс AudioRecord для записи файла WAV. Проблема в том, что он предоставляет только необработанные данные PCM, и если я записываю их в файл, информация заголовка отсутствует, поэтому он не будет воспроизводиться ни в одном медиаплеере. Как я могу создать файл WAV из этих необработанных данных?

Или, альтернативно, есть ли другой способ записи звука в Android в файл WAV (или, в качестве альтернативы, MP3)?

Да, и я знаю, что MediaRecorder можно использовать, потому что он не поддерживает форматы WAV или MP3.

3 ответа

Решение

ОК, я понял это. Этот пост был очень важен для меня: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

По сути, я использовал ByteArrayOutputStream для записи необработанных данных PCM из AudioRecord, который затем позволяет мне получить байтовый массив и его размер после завершения процесса. Затем я могу использовать эти данные в сочетании с настройками SampleRate, BitRate и Stereo/Mono для создания заголовка WAV по ссылке выше. Полученный файл работает отлично!

Проверьте MediaRecorder.setOutputFormat(), вы можете установить различные форматы контейнера для вашей записи; есть MediaRecorder.OutputFormat.MPEG_4 и MediaRecorder.OutputFormat.THREE_GPP; единственный допустимый формат вдоль RAW - это setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

Извините, но MP3 не работает. Вам действительно нужен mp3 для записи? WAV в противоположность MP3 - это контейнер, а не формат; WAV может быть любым форматом кодирования.

Вы всегда можете добавить какой-либо заголовок WAV RIFF перед вашими необработанными данными pcm (если вы точно знаете формат). Посмотрите здесь, как это выглядит: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

Вы можете использовать класс mediarecord

Другие вопросы по тегам