2014-10-14 2 views
0

Я хочу, чтобы расшифровать mp3 файл РСМ или WAV данные (Android приложений: API 20).Как получить буферы данных pcm из выходных буферов MediaCodec?

я использую this подход для декодирования данных MP3, но на родной платформе с C++.

После декодирования я знаю, что данные с буферизированного буфера с декодером заполнены в формате «звук/исходный». Буферизованные данные, хранящиеся в uint8_t *, поэтому это `uint8_t (байтовый) массив (значения от 0 до 255).

Как преобразовать эти массивы в формат pcm или wav, если это возможно?

ответ

1

Звуковые декодеры в настоящий момент возвращают 16-битный звук PCM, поэтому просто введите uint8_t* в int16_t*, что позволяет вам считывать образцы PCM. Если у вас есть size байтов данных, вы можете прочитать size/2 с помощью указателя int16_t*. Вы также можете проверить AMEDIAFORMAT_KEY_CHANNEL_COUNT из выходного формата - если у вас есть size/2 сэмплов, то у вас будет size/(2*channels) кортежей образцов для каждого канала.

+0

Возможно, для отливки лучше использовать «байтовый сдвиг» следующим образом: « int16 intValue = (byte [1] << 8) | byte [0]"? – Maksym