بدءًا من Android 11 ، تتمتع الشركات المصنعة للأجهزة بالقدرة على إرفاق تأثيرات صوتية محددة وتمكينها تلقائيًا عند تحديد جهاز صوت معين لالتقاط الصوت أو تشغيله. يتمثل أحد التحسينات الرئيسية في أنه يمكن التحكم في التأثيرات الصوتية التي يتم إدخالها على مسار صوتي مطبق بالكامل أسفل HAL الصوتي (اتصال مباشر بين جهاز إدخال وجهاز إخراج) بواسطة إطار عمل التأثيرات الصوتية.
تستهدف هذه الميزة بشكل أساسي مصنعي المعدات الأصلية للسيارات ، ولكن يمكن استخدامها أيضًا في عوامل شكل Android الأخرى. يقوم أحد التطبيقات كمثال بإدخال تأثير تحسين الصوت على خرج موالف FM عند توصيله مباشرة بالسماعة من خلال DSP للصوت.
المتطلبات الأساسية
- بالنسبة إلى أي تأثير صوتي آخر ، يجب تنفيذ التأثير بواسطة مكتبة البائعين وإدراجها في ملف تكوين
audio_effects.xml
. - يجب أن يكون التأثير من نوع المعالجة المسبقة أو المعالجة اللاحقة (العلامة
TYPE_PRE_PROC
أوTYPE_POST_PROC
فيEffectDescriptor.flags
). - إذا تم تسريع تنفيذ التأثير HW (تم تعيين العلامة
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);
بعد إنشاء التأثير من خلال تحديد معرّف التأثير الصوتي الفريد وواصف جهاز الصوت ، يمكن تمكينه أو تعطيله باستخدام واجهات برمجة تطبيقات AudioEffect الحالية.
تتوفر أيضًا واجهة برمجة التطبيقات للاستعلام عما إذا كان التنفيذ يدعم تركيبة جهاز / تأثير معين.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
واجهات برمجة تطبيقات HAL جديدة
تأثير الصوت HAL
تأثير الصوت HAL V6.0 له توقيع جديد createEffect()
تسمح بإنشاء تأثير مرتبط بجهاز:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
- يجب أن يكون
AudioSession
المحدد هوAudioSessionConsts.DEVICE
. - يتم تجاهل
AudioIoHandle
إذا كانتsession
هيAudioSessionConsts.DEVICE
. - يتم تحديد
device
من خلالAudioPortHandle
الفريد الخاص به المعين بواسطة إطار عمل الصوت عند تحديد الجهاز في HAL الصوتي باستخدامIDevice::createAudioPatch()
.
صوت HAL
لدعم ميزة تأثير الجهاز ، يجب على HAL الصوتي تنفيذ التحكم في توجيه الصوت باستخدام IDevice::createAudioPatch()
API. يشار إلى ذلك من خلال طريقة IDevice::supportsAudioPatches()
للإبلاغ عن true
.
طريقتان جديدتان لواجهة برمجة التطبيقات ، IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
و IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
تنفيذ HAL بأن تأثير الجهاز قد تم تمكينه أو تعطيله على جهاز معين.
يتم تحديد الجهاز من خلال معرف AudioPortHandle
الخاص به ، والذي يتم استخدامه عند إنشاء تصحيح صوتي بطريقة IDevice::createAudioPatch()
.
يمكن استخدام واجهات برمجة تطبيقات Audio HAL بواسطة التنفيذ إذا كان التنسيق مطلوبًا بين الصوت والتأثيرات HALs عند تمكين أحد التأثيرات أو تعطيله.