Question

J'essaie de décoder un fichier FLAC avec un format d'échantillon 24 bits à l'aide d'OpenSl es sur Android. À l'origine, j'avais mon SLDataFormat_PCM pour le SLDataSink Configuration comme ceci.

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

Cela fonctionne bien pour essentiellement n'importe quel format de données. Heureusement le samplesPerSec n'est pas respecté (je ne veux pas rééchantillonner).

Maintenant, je souhaite prendre en charge la profondeur de bits complète d'un fichier FLAC avec des échantillons 24 bits. Lorsque vous utilisez ce format, il effectue apparemment une conversion de profondeur, car une fois que je charge le fichier, puis vérifie le ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE Info, c'est 16.

Quand je mets bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24; ou SL_PCMSAMPLEFORMAT_FIXED_32, alors OpenSl es le rejette

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

Une idée de la façon dont cela est censé fonctionner? Android est-il actuellement limité à 16 bits INT uniquement? J'accepterais également le flotteur 32 bits, mais je ne suppose pas que cela fonctionnera non plus.

Était-ce utile?

La solution

Actuellement, il ne prend en charge que 8 et 16 bits

Sources:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top