【问题标题】:OpenSL ES decode 24bit FLACOpenSL ES 解码 24bit FLAC
【发布时间】:2013-11-18 14:39:00
【问题描述】:

我正在尝试在 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 位浮点数,但我认为这也行不通。

【问题讨论】:

标签: android android-ndk decode opensl


【解决方案1】:

目前只支持8位和16位

来源

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 2013-08-23
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多