現在、8ビットと16ビットのみをサポートしています
ソース:
質問
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;
また 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ビットのフロートを受け入れますが、それもうまくいくとは思いません。