1

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 ビット浮動小数点も受け入れますが、それもうまくいかないと思います。

4

1 に答える 1

1

現在、8 ビットと 16 ビットのみをサポートしています。

ソース:

于 2013-11-14T15:44:47.797 に答える