بدءًا من Android 11، يمكن لصنّاع الأجهزة إرفاق تأثيرات صوتية معيّنة وتفعيلها تلقائيًا عند تحديد جهاز صوت معيّن لتسجيل الصوت أو تشغيله. من التحسينات الرئيسية التي تم إجراؤها أنّه يمكن التحكّم في التأثيرات الصوتية المُدرَجة في مسار صوتي تم تنفيذه بالكامل أسفل HAL الصوتي (الاتصال المباشر بين جهاز input وجهاز output) من خلال إطار عمل التأثيرات الصوتية.
تستهدف هذه الميزة بشكل أساسي المصنّعين الأصليّين للسيارات، ولكن يمكن استخدامها أيضًا في أشكال Android الأخرى. على سبيل المثال، يُدرج أحد التطبيقات تأثيرًا لتحسين الصوت في مخرج مُعدِّل FM عند توصيله مباشرةً بمكبّر الصوت من خلال وحدة معالجة الإشارات الرقمية للصوت.
المتطلّبات الأساسية
- بالنسبة إلى أي تأثير صوتي آخر، يجب تنفيذ التأثير من خلال مكتبة مورّد وإدراجه
في ملف إعدادات
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 من خلال عملية التنفيذ إذا كان هناك حاجة إلى التنسيق بين واجهتَي برمجة التطبيقات لكل من الصوت والتأثير عند تفعيل تأثير أو إيقافه.