質問

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ビットのフロートを受け入れますが、それもうまくいくとは思いません。

役に立ちましたか?

解決

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

ソース:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top