بدءًا من نظام التشغيل Android 11، بإمكان الشركات المصنِّعة للأجهزة لإرفاق تأثيرات صوتية محدّدة وتفعيلها تلقائيًا عند تشغيل جهاز سماعي المحددة لالتقاط الصوت أو تشغيله. من التحسينات الرئيسية التي تم إجراؤها أنّه يمكن التحكّم في التأثيرات الصوتية المُدرَجة في مسار صوتي تم تنفيذه بالكامل أسفل HAL الصوتي (الاتصال المباشر بين جهاز input وجهاز output) من خلال إطار عمل التأثيرات الصوتية.
تستهدف هذه الميزة بشكل أساسي المصنّعين الأصليّين للسيارات ولكن يمكن استخدامها أيضًا في أجهزة Android أخرى من أشكال الأجهزة. مثال على تطبيق يدرج تأثيرًا لتحسين الصوت في موالف FM إخراج الصوت عند توصيله مباشرةً بمكبّر الصوت من خلال معالج الصوت DSP.
المتطلّبات الأساسية
- أما بالنسبة لأي تأثير صوتي آخر، فيجب أن يتم تنفيذ هذا التأثير بواسطة مكتبة التوريد وإدراجه
في ملف إعداد
audio_effects.xml
. - يجب أن يكون التأثير من النوع "المعالجة المُسبَقة" أو "المعالجة اللاحقة"
(تم ضبط العلامة
TYPE_PRE_PROC
أوTYPE_POST_PROC
فيEffectDescriptor.flags
). - إذا كان تنفيذ التأثير مسرَّعًا بالأجهزة
(تم ضبط العلامة
HW_ACC_TUNNEL
فيEffectDescriptor.flags
)، يمكن إرفاقه بمسار صوتي متصل بالكامل أسفل HAL (لا يتم تشغيل أو بث محتوى صوتي مفتوح في HAL الصوتي).
إنشاء تأثير جهاز وتفعيله
يمكن إنشاء تأثيرات صوتية خاصة بالأجهزة باستخدام إحدى الطريقتَين أدناه.
استخدام ملف إعداد التأثيرات الصوتية
تسمح هذه الطريقة بإنشاء تأثير صوتي ثابت يتم إرفاقه بشكل منهجي. وتفعيلها في أي مسار صوتي يتم من خلاله اختيار جهاز محدّد على أنّه حوض أو مصدر.
ويتم ذلك من خلال إضافة قسم محدّد في audio_effects.xml
.
على النحو التالي:
<deviceEffects> <devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom"> <apply effect="agc"/> </devicePort> </deviceEffects>
استخدام واجهة برمجة تطبيقات للنظام
تمت إضافة دالة إنشاء @SystemApi جديدة إلى
android.media.audiofx.AudioEffect
الفئة لإنشاء تأثير للجهاز وتفعيله:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
بعد إنشاء التأثير من خلال تحديد معرّف التأثير الصوتي الفريد ووصفه، يمكن تفعيله أو إيقافه باستخدام واجهات برمجة التطبيقات الحالية لتأثيرات الصوت.
تتوفر أيضًا واجهة برمجة تطبيقات للاستعلام عما إذا كان التنفيذ يدعم مجموعة معينة من الجهاز/التأثير.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
واجهات برمجة تطبيقات HAL الجديدة
طبقة تجريد الأجهزة (HAL) للتأثير الصوتي
يحتوي الإصدار 6.0 من HAL الخاص بالتأثيرات الصوتية على توقيع جديد لطريقة createEffect()
يتيح إنشاء تأثير مرتبط بجهاز:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
- يجب أن تكون قيمة
AudioSession
المحدّدةAudioSessionConsts.DEVICE
. - يتم تجاهل
AudioIoHandle
إذا كانsession
هوAudioSessionConsts.DEVICE
. - يتم تحديد
device
من خلالAudioPortHandle
الفريد الذي يحدّده إطار عمل الصوت عند اختيار الجهاز في HAL الصوتي باستخدام طريقةIDevice::createAudioPatch()
.
Audio HAL
لتفعيل ميزة "تأثيرات الجهاز"، يجب أن ينفِّذ HAL للصوت عملية توجيه ملف صوتي
والتحكّم فيه باستخدام واجهة برمجة التطبيقات IDevice::createAudioPatch()
. ويشار إلى ذلك من خلال
تم الإبلاغ عن طريقة IDevice::supportsAudioPatches()
باسم true
.
هناك طريقتان جديدتان لواجهة برمجة التطبيقات،
IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
و
IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
إعلام تنفيذ HAL بأنه قد تم تفعيل تأثير الجهاز أو إيقافه على
جهاز معين.
يتم التعرّف على الجهاز من خلال معرّفه AudioPortHandle
، والذي يتم استخدامه عند إنشاء ملف IDevice::createAudioPatch()
باستخدام طريقة IDevice::createAudioPatch()
.
يمكن استخدام واجهات برمجة تطبيقات Audio HAL من خلال عملية التنفيذ إذا كان هناك حاجة إلى التنسيق بين واجهتَي برمجة التطبيقات لصوت والتأثيرات عند تفعيل تأثير أو إيقافه.