Вопрос

Я пытаюсь расшифровать файл FLAC с 24 -битным образцом формата, используя OpenSl ES на Android. Первоначально у меня был мой SLDataFormat_PCM для SLDataSink настройка такой.

_pcm.formatType = SL_DATAFORMAT_PCM;
_pcm.numChannels = 2;
_pcm.samplesPerSec = SL_SAMPLINGRATE_44_1;
_pcm.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16;
_pcm.containerSize = SL_PCMSAMPLEFORMAT_FIXED_16;
_pcm.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
_pcm.endianness = SL_BYTEORDER_LITTLEENDIAN;

Это работает хорошо для любого формата данных. К счастью samplesPerSec не уважается (я не хочу повторной выборки).

Теперь я хочу поддержать полную глубину файла FLAC с 24-битными образцами. При использовании этого формата он, по-видимому, выполняет немного глубинное преобразование, потому что однажды я загружаю файл, а затем проверяю ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE Информация, это 16.

Когда я положил bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24; или же SL_PCMSAMPLEFORMAT_FIXED_32, затем OpenSl Es отвергает это

E/libOpenSLES(22706): pAudioSnk: bitsPerSample=32
W/libOpenSLES(22706): Leaving Engine::CreateAudioPlayer (SL_RESULT_CONTENT_UNSUPPORTED)

Есть идеи, как это должно работать? Android в настоящее время ограничен только 16 -битным Int? Я также принял бы 32 -битный поплавок, но я не думаю, что это тоже сработает.

Это было полезно?

Решение

В настоящее время он поддерживает только 8 и 16 бит

Источники:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top