android - OpenSL ES 解码 24 位 FLAC

标签 android android-ndk decode opensl

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

最佳答案

目前只支持8位和16位

来源:

关于android - OpenSL ES 解码 24 位 FLAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827673/

相关文章:

java - 如何从数据库方案中的特定 Realm 文件中排除 Realm 模型类?

android - 位图未绘制抗锯齿

python - 如何使用 beautifulsoup 从网页中提取乌尔都语文本

php - 使用大型 .JSON 文件 (PHP)

Android自定义自动完成textview图标和文字

android - Unity游戏白屏

java - 安卓 NDK 计时器

android - Android 中的 ObjC 代码在 Linux 下使用 ndk

安卓CDT : Possible to use ndk-build without bash (Eclipse in Windows)?

php - JSON 解码 (PHP)