Currently it only supports 8 and 16 bits
Sources:
- Android source code (line 60)
- Article (PCM data format section)
Frage
Ich versuche, eine FLAC -Datei mit 24 -Bit -Beispielformat unter Verwendung von OpenSL ES auf Android zu dekodieren. Ursprünglich hatte ich meine SLDataFormat_PCM
für die SLDataSink
So einrichten.
_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;
Dies funktioniert im Grunde genommen für jedes Datenformat. Zum Glück das samplesPerSec
wird nicht respektiert (ich möchte nicht Resampling).
Jetzt möchte ich das gesamte Bit-Tiefe einer FLAC-Datei mit 24-Bit-Proben unterstützen. Wenn Sie dieses Format verwenden, führt es anscheinend eine Bit-Tiefe-Konvertierung durch, da ich nach dem Laden der Datei die Datei geladen habe und dann die Überprüfung der ANDROID_KEY_PCMFORMAT_BITSPERSAMPLE
Info, es ist 16.
Wenn ich setze bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24;
oder SL_PCMSAMPLEFORMAT_FIXED_32
, dann lehnt es ab, es lehnt es ab
E/libOpenSLES(22706): pAudioSnk: bitsPerSample=32
W/libOpenSLES(22706): Leaving Engine::CreateAudioPlayer (SL_RESULT_CONTENT_UNSUPPORTED)
Irgendeine Idee, wie das funktionieren soll? Ist Android derzeit nur auf 16 -Bit -Int beschränkt? Ich würde auch 32 -Bit -Float akzeptieren, aber ich nehme an, dass dies auch funktioniert.
Lösung
Currently it only supports 8 and 16 bits
Sources: