В настоящее время он поддерживает только 8 и 16 бит
Источники:
- Android исходный код (строка 60)
- Статья (Формат данных PCM раздел)
Вопрос
Я пытаюсь расшифровать файл 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 бит
Источники: