Attualmente supporta solo 8 e 16 bit
Fonti:
- Android codice sorgente (linea 60)
- Articolo (Formato dati PCM sezione)
Domanda
Sto cercando di decodificare un file FLAC con formato campione a 24 bit usando OpenSL ES su Android. Inizialmente, avevo il mio SLDataFormat_PCM
per il SLDataSink
configurazione come questa.
_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;
Questo funziona bene per praticamente qualsiasi formato di dati. Fortunatamente il samplesPerSec
non è rispettato (non voglio ricampionamento).
Ora voglio supportare la completa profondità di un file FLAC con campioni a 24 bit. Quando si utilizza questo formato, apparentemente esegue una conversione di profondità, perché una volta carico il file, quindi controlla il ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE
Informazioni, sono 16.
Quando ho messo bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24;
o SL_PCMSAMPLEFORMAT_FIXED_32
, quindi apresl es rifiuta
E/libOpenSLES(22706): pAudioSnk: bitsPerSample=32
W/libOpenSLES(22706): Leaving Engine::CreateAudioPlayer (SL_RESULT_CONTENT_UNSUPPORTED)
Qualche idea su come questo dovrebbe funzionare? Android è attualmente limitato a 16 bit int solo? Accetterei anche il galleggiante a 32 bit, ma non suppongo che funzionerà neanche.
Soluzione
Attualmente supporta solo 8 e 16 bit
Fonti: