我正在尝试使用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, ,然后打开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