تأثيرات الصوت

بدءًا من 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 الموجودة.

تتوفر أيضًا واجهة برمجة التطبيقات (API) للاستعلام عما إذا كان التنفيذ يدعم مجموعة معينة من الأجهزة/التأثيرات.

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

واجهات برمجة تطبيقات 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) للصوت بتنفيذ التحكم في توجيه الصوت باستخدام IDevice::createAudioPatch() API. تتم الإشارة إلى ذلك من خلال أسلوب IDevice::supportsAudioPatches() الذي يُبلغ عن true .

طريقتان جديدتان لواجهة برمجة التطبيقات، IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) و IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) تخبران تطبيق HAL بأنه تم تمكين تأثير الجهاز أو تعطيله على جهاز معين.

يتم تعريف الجهاز بواسطة معرف AudioPortHandle الخاص به، والذي يتم استخدامه عند إنشاء تصحيح صوتي باستخدام أسلوب IDevice::createAudioPatch() .

يمكن استخدام واجهات برمجة تطبيقات HAL الصوتية من خلال التنفيذ إذا كان التنسيق مطلوبًا بين طبقات HAL الصوتية والتأثيرية عند تمكين التأثير أو تعطيله.

,

بدءًا من 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 الموجودة.

تتوفر أيضًا واجهة برمجة التطبيقات (API) للاستعلام عما إذا كان التنفيذ يدعم مجموعة معينة من الأجهزة/التأثيرات.

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

واجهات برمجة تطبيقات 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) للصوت بتنفيذ التحكم في توجيه الصوت باستخدام IDevice::createAudioPatch() API. تتم الإشارة إلى ذلك من خلال أسلوب IDevice::supportsAudioPatches() الذي يُبلغ عن true .

طريقتان جديدتان لواجهة برمجة التطبيقات، IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) و IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) تخبران تطبيق HAL بأنه تم تمكين تأثير الجهاز أو تعطيله على جهاز معين.

يتم تعريف الجهاز بواسطة معرف AudioPortHandle الخاص به، والذي يتم استخدامه عند إنشاء تصحيح صوتي باستخدام أسلوب IDevice::createAudioPatch() .

يمكن استخدام واجهات برمجة تطبيقات HAL الصوتية من خلال التنفيذ إذا كان التنسيق مطلوبًا بين طبقات HAL الصوتية والتأثيرية عند تمكين التأثير أو تعطيله.