المؤثرات الصوتية

بدءًا من Android 11 ، تتمتع الشركات المصنعة للأجهزة بالقدرة على إرفاق تأثيرات صوتية محددة وتمكينها تلقائيًا عند تحديد جهاز صوت معين لالتقاط الصوت أو تشغيله. يتمثل أحد التحسينات الرئيسية في أنه يمكن التحكم في التأثيرات الصوتية التي يتم إدخالها على مسار صوتي مطبق بالكامل أسفل HAL الصوتي (اتصال مباشر بين جهاز إدخال وجهاز إخراج) بواسطة إطار عمل التأثيرات الصوتية.

تستهدف هذه الميزة بشكل أساسي مصنعي المعدات الأصلية للسيارات ولكن يمكن استخدامها أيضًا في عوامل شكل Android الأخرى. يقوم أحد التطبيقات كمثال بإدخال تأثير تحسين الصوت على خرج موالف FM عند توصيله مباشرة بالسماعة من خلال DSP للصوت.

المتطلبات الأساسية

  • بالنسبة إلى أي تأثير صوتي آخر ، يجب تنفيذ التأثير بواسطة مكتبة البائعين وإدراجها في ملف تكوين audio_effects.xml .
  • يجب أن يكون التأثير من نوع المعالجة المسبقة أو المعالجة اللاحقة (العلامة TYPE_PRE_PROC أو TYPE_PRE_PROC في EffectDescriptor.flags ).
  • إذا تم تسريع تنفيذ التأثير HW ( HW_ACC_TUNNEL تعيين العلامة 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 الفريد 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 عند تمكين أحد التأثيرات أو تعطيله.