سؤال

أحاول فك تشفير ملف 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 بت

مصادر:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top