Pregunta

Estoy tratando de decodificar un archivo FLAC con formato de muestra de 24 bits usando OpenSl ES en Android. Originalmente, tenía mi SLDataFormat_PCM Para el SLDataSink Configuración como esta.

_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;

Esto funciona bien para básicamente cualquier formato de datos. Por suerte el samplesPerSec no es respetado (no quiero volver a muestrear).

Ahora quiero admitir la profundidad completa de un archivo FLAC con muestras de 24 bits. Al usar este formato, aparentemente realiza una conversión un poco profunda, porque una vez que carga el archivo y luego verifique el ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE Información, es 16.

Cuando puse bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24; o SL_PCMSAMPLEFORMAT_FIXED_32, luego opensl es lo rechaza

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

¿Alguna idea de cómo esto debe funcionar? ¿Android está actualmente restringido a 16 bits int únicamente? También aceptaría un flotador de 32 bits, pero no supongo que eso tampoco funcionará.

¿Fue útil?

Solución

Actualmente solo admite 8 y 16 bits

Fuentes:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top