حاليا يدعم فقط 8 و 16 بت
مصادر:
- ذكري المظهر مصدر الرمز (السطر 60)
- مقالة - سلعة (تنسيق بيانات PCM الجزء)
سؤال
أحاول فك تشفير ملف FLAC بتنسيق عينة 24 بت باستخدام Opensl es على Android. في الأصل ، كان لدي 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
غير محترم (لا أريد إعادة تشكيل).
الآن أريد أن أدعم تعمق البت الكامل لملف FLAC مع عينة 24 بت. عند استخدام هذا التنسيق ، يبدو أنه يقوم بتحويل تعمق قليلاً ، لأنه بمجرد تحميل الملف ، ثم تحقق 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 بت
مصادر: