Android で OpenSL ES を使用して、24 ビット サンプル形式の FLAC ファイルをデコードしようとしています。もともと、私はこのようなセットアップの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
は尊重されていません (リサンプリングはしたくありません)。
ここで、24 ビット サンプルを含む FLAC ファイルの完全なビット深度をサポートしたいと考えています。この形式を使用すると、ファイルを読み込んでANDROID_KEY_PCMFORMAT_BITSPERSAMPLE
情報を確認すると 16 であるため、明らかにビット深度変換が実行されます。
bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_24;
orを入れる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 ビット浮動小数点も受け入れますが、それもうまくいかないと思います。