طبقة تجريد الأجهزة (HAL) للتحكم في الصوت

تم تقديم HAL للتحكم في الصوت في Android 9 دعم حالات استخدام الصوت ذات الصلة بالسيارات. اعتبارًا من نظام Android 14، يدعم التحكم في الصوت HAL ما يلي:

  • التلاشي والتوازن
  • طلب تركيز صوت HAL
  • كتم صوت الجهاز وتجنّب التداخل مع أصوات أخرى
  • تغييرات في مستوى الصوت المحيطي
  • تغييرات إعدادات منفذ الصوت

يوضح الشكل 1 نظرة عامة عالية المستوى على بنية خدمة الصوت في السيارة، في والذي تتواصله الخدمة الصوتية في السيارة مع HAL للتحكم في الصوت.

ضبط إعدادات الصوت المتعدّد المناطق

الشكل 1. ضبط إعدادات الصوت المتعدّد المناطق

تلاشي الصوت وتوازنه

تم طرح الإصدار 1 من HAL للتحكم في صوت HIDL في Android. 9 لدعم تلاشي الصوت والتوازن أثناء استخدام السيارات الحالات. بالإضافة إلى التأثيرات الصوتية العامة المتوفرة في Android، آلية تتيح لتطبيقات النظام ضبط توازن الصوت والتلاشي واجهات برمجة تطبيقات CarAudioManager:

class CarAudioManager {
       /**
       *   Adjust the relative volume in the front vs back of the vehicle cabin.
       *
       *   @param value in the range -1.0 to 1.0 for fully toward the back through
       *   fully toward the front. 0.0 means evenly balanced.
       */
       @SystemApi
       @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
       public void setFadeTowardFront(float value);

       /**
       *   Adjust the relative volume on the left vs right side of the vehicle cabin.
       *
       *   @param value in the range -1.0 to 1.0 for fully toward the left through
       *   fully toward the right. 0.0 means evenly balanced.
       */
       @SystemApi
       @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
       public void setBalanceTowardRight(float value);
}

بعد استدعاء واجهات برمجة التطبيقات (API) هذه، تُسمى واجهات برمجة تطبيقات HAL للتحكم في الصوت المعنية من خدمة الصوت في السيارة:

interface IAudioControl {
       /**
       *   Control the right/left balance setting of the car speakers.
       */
       oneway setBalanceTowardRight(float value);

       /**
       *   Control the fore/aft fade setting of the car speakers.
       */
       oneway setFadeTowardFront(float value);
}

تتوفر واجهة برمجة التطبيقات في جميع إصدارات HAL للتحكم في الصوت، بما في ذلك الإصدار الجديد واجهة AIDL HAL.

طلب تركيز الصوت من HAL

على غرار نظام التشغيل Android، تعتمد نظام التشغيل Android Automotive (AAOS) على المشاركة النشطة للتطبيقات على الصوت. لإدارة تشغيل الصوت في السيارات. تُستخدم المعلومات المحورية لإدارة التي يمكنها التحكم في مستوى الصوت والتخطي. وبناءً على ذلك، يمكن توسيع نطاق التركيز الصوتي وتوفير تكامل أفضل للأصوات الخاصة بالسيارة على تجربة Android، تم تقديم سمات الصوت التالية في نظام التشغيل Android 11:

  • EMERGENCY
  • SAFETY
  • VEHICLE_STATUS
  • ANNOUNCEMENT

بالإضافة إلى هذا التغيير، تمت إضافة آلية للأصوات التي تنشأ من خارج Android للمشاركة في طلبات التركيز الصوتي. وبالتالي، يعمل صوت HIDL تم تقديم التحكم في الإصدار 2 من HAL للسماح بطلبات التركيز التي تنشأ من خارج Android:

interface IAudioControl {
       /**
       *   Registers focus listener to be used by HAL for requesting and
       *   abandoning audio focus.
       *   @param listener the listener interface
       *   @return closeHandle A handle to unregister observer.
       */
       registerFocusListener(IFocusListener listener)
       generates (ICloseHandle closeHandle);

       /**
       *   Notifies HAL of changes in audio focus status for focuses requested
       *   or abandoned by the HAL.
       *
       *   @param usage The audio usage associated with the focus change
       *   @param zoneId The identifier for the audio zone that the HAL is
       *   playing the stream in
       *   @param focusChange the AudioFocusChange that has occurred
       */
       oneway onAudioFocusChange(bitfield<AudioUsage> usage, int32_t zoneId,
       bitfield<AudioFocusChange> focusChange);
}

عندما يتم تعريف السمة IFocusListener على النحو التالي:

interface IFocusListener {
       /**
       *   Called whenever HAL is requesting focus as it is starting to play
       *   audio of a given usage in a specified zone.
       *
       *   @param usage The audio usage associated with the focus request
       *    {@code AttributeUsage}
       *   @param zoneId The identifier for the audio zone where the HAL is
       *    requesting focus
       *   @param focusGain The AudioFocusChange associated with this request.
       */
       oneway requestAudioFocus(bitfield<AudioUsage> usage,
       int32_t zoneId, bitfield<AudioFocusChange> focusGain);
       /**
       *   Called whenever HAL is abandoning focus as it is finished playing audio
       *   of a given usage in a specific zone.
       *
       *   @param usage The audio usage for which the HAL is abandoning focus
       *    {@code AttributeUsage}
       *   @param zoneId The identifier for the audio zone that the HAL
       *    abandoning focus
       */
       oneway abandonAudioFocus(bitfield<AudioUsage> usage, int32_t zoneId);
}

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

يمكن استخدام واجهة برمجة التطبيقات هذه أيضًا لمراقبة التغييرات في طلب التركيز الصوتي الذي ينشأ من HAL للتحكم في الصوت. بشكل عام، أي تركيز صوتي ثابت يُعد الطلب من HAL نشطًا، وهو ما يختلف عن التركيز الصوتي طلب من Android، حيث يتم تشغيل مقطع صوتي نشط مرتبط فقط يعتبر نشطًا.

الانتقال من HIDL إلى AIDL للتحكّم في الصوت HAL

مع توفُّر AIDL ونقل البيانات المطلوبة في Android 12 (لمعرفة المزيد، راجع AIDL HALs)، وكان التحكم في الصوت HAL هو تم نقلها إلى AIDL. بالنسبة إلى واجهات برمجة التطبيقات الحالية ذات الإصدار 2 للتحكم في الصوت HIDL، ستتم عملية نقل التعديلات الثانوية المطلوبة على الطرق الحالية:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in audio focus status for focuses requested
       *   or abandoned by the HAL.
       *
       *   @param usage The audio usage associated with the focus change
       *        {@code AttributeUsage}. See {@code audioUsage} in
       *        audio_policy_configuration.xsd for the list of allowed values.
       *   @param zoneId The identifier for the audio zone that the HAL is
       *        playing the stream in
       *   @param focusChange the AudioFocusChange that has occurred.
       */
       oneway void onAudioFocusChange(in String usage, in int zoneId,
              in AudioFocusChange focusChange);
       /**
       *   Registers focus listener to be used by HAL for requesting and
       *   abandoning audio focus.
       *   @param listener the listener interface.
       */
       oneway void registerFocusListener(in IFocusListener listener);
       /**
       *   Control the right/left balance setting of the car speakers.
       */
       oneway void setBalanceTowardRight(in float value);
       /**
       *   Control the fore/aft fade setting of the car speakers.
       */
       oneway void setFadeTowardFront(in float value);
}

وIFocusListener المقابلة:

       interface IFocusListener {
       /**
       *   Called whenever HAL is abandoning focus as it is finished playing audio
       *   of a given usage in a specific zone.
       *
       *   @param usage The audio usage for which the HAL is abandoning focus
       *        {@code AttributeUsage}. See {@code audioUsage} in
       *        audio_policy_configuration.xsd for the list of allowed values.
       *   @param zoneId The identifier for the audio zone that the HAL
       *        abandoning focus
       */
       oneway void abandonAudioFocus(in String usage, in int zoneId);
       /**
       *   Called whenever HAL is requesting focus as it is starting to play audio
       *        of a given usage in a specified zone.
       *
       *   @param usage The audio usage associated with the focus request
       *        {@code AttributeUsage}. See {@code audioUsage} in
       *        audio_policy_configuration.xsd for the list of allowed values.
       *   @param zoneId The identifier for the audio zone where the HAL is
       *        requesting focus
       *   @param focusGain The AudioFocusChange associated with this request.
       */
       oneway void requestAudioFocus(in String usage, in int zoneId,
              in AudioFocusChange focusGain);
}

كتم صوت مجموعة مستويات الصوت

أطلق نظام Android 12 ميزة كتم صوت مجموعة الصوت للسماح عنصر تحكم أكثر شمولاً في كتم الصوت أثناء تفاعلات المستخدم الصوتية هذا النمط يسمح لـ HAL التحكم في الصوت بتلقي أحداث كتم الصوت عند اعتراضها بواسطة السيارة خدمة الصوت.

لتفعيل الميزة، على المصنّعين الأصليين للأجهزة ضبط إعدادات audioUseCarVolumeGroupMuting. إلى true في خدمة السيارة config.xml:

<!-- Configuration to enable muting of individual volume groups.
If this is set to false, muting of individual volume groups is disabled,
instead muting will toggle master mute. If this is set to true, car volume
group muting is enabled and each individual volume group can be muted separately. -->
<bool name="audioUseCarVolumeGroupMuting">true</bool>

قبل Android 13، كان يجب استبدال الإعدادات مع تراكب موارد وقت التشغيل packages/services/Car/service/res/values/config.xml (للمزيد من المعلومات، راجع تخصيص الإصدار باستخدام الموارد العناصر المركّبة). من Android 13، يمكنك استخدام تراكبات موارد وقت التشغيل لتغيير قيمة التهيئة. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تغيير قيمة موارد التطبيق. في وقت التشغيل

يمكن لتطبيقات النظام تحديد ما إذا تم تمكين الميزة أم لا من خلال استخدام واجهة برمجة تطبيقات CarAudioManager#isAudioFeatureEnabled. يجب أن تكون المعلمة التي يتم تمريرها هي ثابت CarAudioManager.AUDIO_FEATURE_VOLUME_GROUP_MUTING. تُرجع الطريقة true إذا كانت الميزة مفعّلة على الجهاز، وبخلاف ذلك، false

بالإضافة إلى تفعيل ميزة "audioUseCarVolumeGroupMuting"، لغة AIDL يجب أن تنفذ HAL عنصر التحكم في الصوت آلية كتم صوت مجموعة مستوى الصوت:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in output devices that the HAL should apply
       *   muting to.
       *
       *   This will be called in response to changes in audio mute state for each
       *   volume group and will include a {@link MutingInfo} object per audio
       *   zone that experienced a mute state event.
       *
       *   @param mutingInfos an array of {@link MutingInfo} objects for the audio
       *   zones where audio mute state has changed.
       */
       oneway void onDevicesToMuteChange(in MutingInfo[] mutingInfos);
}

عندما تحتوي معلومات كتم الصوت على معلومات كتم الصوت ذات الصلة للنظام الصوتي:

parcelable MutingInfo {
       /**
       *   ID of the associated audio zone
       */
       int zoneId;
       /**
       *   List of addresses for audio output devices that should be muted.
       */
       String[] deviceAddressesToMute;
       /**
       *   List of addresses for audio output devices that were previously be
       *   muted and should now be unmuted.
       */
       String[] deviceAddressesToUnmute;
}

يمتلك نظام التشغيل AAOS آليتين مختلفتين لكتم الصوت استنادًا إلى ما يلي:

  • الأحداث الرئيسية التي تستخدم الصوت KEYCODE_VOLUME_MUTE

  • توجيه المكالمات إلى خدمة الصوت في السيارة باستخدام واجهة برمجة تطبيقات كتم صوت مدير صوت السيارة CarAudioManager#setVolumeGroupMute

عند تفعيل هذه الميزة، تؤدي كلتا الآليتين إلى كتم صوت المكالمة لغرفة التحكم في الصوت HAL.

تجنُّب التداخل مع أصوات أخرى في السيارة

قدّم Android 12 ميزة "تجنّب التداخل مع أصوات أخرى" في السيارة لتحسين التحكّم في الصوت المتزامن عمليات البث الصوتي. يتيح ذلك للمصنّعين الأصليين للأجهزة تنفيذ تنسيق نقل البيانات بأنفسهم. استنادًا إلى إعدادات الصوت الفعلي للسيارة وعملية التشغيل الحالية الحالة، على النحو الذي تحدده خدمة الصوت في السيارة.

تعتمد آلية تجنب التداخل مع تغييرات حزمة التركيز الصوتي. كلما يحدث تغيير في التركيز (سواء كان التركيز على التركيز أو إنهاء)، والمقطع الصوتي التحكم في HAL. تشبه مجموعة دعم كتم الصوت في مجموعة مستوى صوت السيارة، وسيارة يمكنك تفعيل ميزة "تجنّب التداخل مع أصوات أخرى" باستخدام علامة الإعداد audioUseHalDuckingSignals:

<!-- Configuration to enable IAudioControl#onDevicesToDuckChange API to
inform HAL when to duck. If this is set to true, the API will receive signals
indicating which output devices to duck as well as what usages are currently
holding focus. If set to false, the API will not be called. -->
<bool name="audioUseHalDuckingSignals">true</bool>

لتفعيل هذه الميزة، يجب أن تنفذ HAL عنصر التحكم في الصوت في AIDL مع الإشارة المُستلَمة من الخدمة الصوتية للسيارة:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in output devices that the HAL should apply
       *   ducking to.
       *
       *   This will be called in response to changes in audio focus, and will
       *   include a {@link DuckingInfo} object per audio zone that experienced
       *   a change in audo focus.
       *
       *   @param duckingInfos an array of {@link DuckingInfo} objects for the
       *   audio zones where audio focus has changed.
       */
       oneway void onDevicesToDuckChange(in DuckingInfo[] duckingInfos);
}

إنّ معلومات النظام الصوتي ذات الصلة مضمّنة في ميزة "تجنّب التداخل مع أصوات أخرى". المعلومات:

parcelable DuckingInfo {
       /**
       *   ID of the associated audio zone
       */
       int zoneId;
       /**
       *   List of addresses for audio output devices that should be ducked.
       */
       String[] deviceAddressesToDuck;
       /**
       *   List of addresses for audio output devices that were previously be
       *   ducked and should now be unducked.
       */
       String[] deviceAddressesToUnduck;
       /**
       *   List of usages currently holding focus for this audio zone.
       */
       String[] usagesHoldingFocus;
}

بالإضافة إلى معلومات الإعدادات الصوتية للسيارة المضمَّنة في عناوين الأجهزة تحتوي معلومات to (un)Duck على (بدون) Ducking (التحايل) أيضًا على معلومات حول الصوت استخدامات السمة قيد التركيز. إن الهدف من هذه البيانات هو إعلام نظام صوتي استخدامات سمات الصوت النشطة.

هذا الأمر مطلوب، إذ يمكن لإعدادات الصوت المتعددة في السيارة التي يمكن تعيينها لجهاز واحد، وبدون المعلومات، فليس من الواضح الاستخدامات النشطة.

معيار AIDL للتحكم في الصوت HAL 2.0

لتحديث واجهات برمجة التطبيقات وتسهيل الوظائف الجديدة، تتوفّر HAL للتحكم في الصوت في AIDL. تم تحديثه إلى الإصدار 2.0 في Android 13:

  • التركيز على الصوت باستخدام "PlaybackTrackMetadata"
  • معاودة الاتصال بالأرباح الصوتية

يتم تحديد البيانات الوصفية للتشغيل باللغة android.hardware.audio.common على النحو التالي:

parcelable PlaybackTrackMetadata {
       AudioUsage usage = INVALID;
       AudioContentType contentType = UNKNOWN;
       float gain;
       AudioChannelLayout channelMask;
       AudioDevice sourceDevice;
       String[] tags;
}

تم الاحتفاظ بجميع الوظائف الأخرى من الإصدار 1.0 للتحكم في صوت AIDL ويمكن استخدامها استخدام البيانات المختلفة. يرتبط استثناء بطريقة تغيير التركيز الصوتي، كما هو موضّح في أسلوب تغيير التركيز الصوتي:

التحكّم في الصوت باستخدام البيانات الوصفية لمقطع التشغيل الصوتي

لكشف المزيد من المعلومات عن نظام الصوت أسفل HAL، تعرض التحديثات الآن PlaybackTrackMetadata وعلى وجه التحديد، تم توسيع نطاق التحكم في الصوت HAL من خلال الطريقة الجديدة:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in audio focus status for focuses requested
       *   or abandoned by the HAL.
       *
       *   The HAL is not required to wait for a callback of AUDIOFOCUS_GAIN
       *   before playing audio, nor is it required to stop playing audio in the
       *   event of a AUDIOFOCUS_LOSS callback is received.
       *
       *   @param playbackMetaData The output stream metadata associated with
       *    the focus request
       *   @param zoneId The identifier for the audio zone that the HAL is
       *    playing the stream in
       *   @param focusChange the AudioFocusChange that has occurred.
       */
       oneway void onAudioFocusChangeWithMetaData(
       in PlaybackTrackMetadata playbackMetaData, in int zoneId,
       in AudioFocusChange focusChange);
}

تم إجراء تغيير مماثل على IFocusListener:

       /**
       *   Called to indicate that the audio output stream associated with
       *   {@link android.hardware.audio.common.PlaybackTrackMetadata} is
       *   abandoning focus as playback has stopped.
       *
       *   @param playbackMetaData The output stream metadata associated with
       *    the focus request
       *   @param zoneId The identifier for the audio zone that the HAL
       *    abandoning focus
       */
       oneway void abandonAudioFocusWithMetaData(
       in PlaybackTrackMetadata playbackMetaData, in int zoneId);
       /**
       *   Called to indicate that the audio output stream associated with
       *   {@link android.hardware.audio.common.PlaybackTrackMetadata} has taken
       *   the focus as playback is starting for the corresponding stream.
       *
       *   @param playbackMetaData The output stream metadata associated with
       *    the focus request
       *   @param zoneId The identifier for the audio zone that the HAL
       *    abandoning focus
       *   @param focusGain The focus type requested.
       */
       oneway void requestAudioFocusWithMetaData(
       in PlaybackTrackMetadata playbackMetaData, in int zoneId,
       in AudioFocusChange focusGain);
}

طريقة تغيير التركيز الصوتي

تعمل عمليات التركيز أعلاه بالطريقة نفسها كتلك الموضّحة في قسم المحتوى الصوتي طلبك الأساسي من "HAL". تحتوي البيانات الوصفية لمقطع التشغيل فقط على المزيد المستخدم إلى جانب استخدامات تصنيفات الصوت. بشكل عام، ما لم يتم تضمين الحاجة إلى المعلومات المقدمة من خلال البيانات الوصفية لمقطع التشغيل، التحكم في HAL يمكنها الاستمرار في استخدام الطرق السابقة.

إذا قرر مطورو برامج HAL عدم توفير IAudioControl#onAudioFocusChangeWithMetaData، من المفترض أن تعرض الطريقة نتائج مع الخطأ UNKNOWN_TRANSACTION على النحو الموضح استخدام الواجهة ذات الإصدارات الطُرق:

تتصل خدمة الصوت بـ onAudioFocusChangeWithMetaData أولاً ثم يعيد المحاولة باستخدام الطريقة onAudioFocusChange إذا كانت قيمة UNKNOWN_TRANSACTION نتائج الفشل.

تجنب التداخل مع أصوات أخرى في السيارة مع البيانات الوصفية لمقطع التشغيل

أضاف الإصدار 2.0 من HAL للتحكم في الصوت في AIDL البيانات الوصفية لمقطع التشغيل إلى معلومات تجنب التداخل مع أصوات أخرى:

parcelable DuckingInfo {
       /**
       *   ID of the associated audio zone
       */
       int zoneId;
       /**
       *   List of addresses for audio output devices that should be ducked.
       */
       String[] deviceAddressesToDuck;
       /**
       *   List of addresses for audio output devices that were previously be
       *   ducked and should now be unducked.
       */
       String[] deviceAddressesToUnduck;
       /**
       *   List of usages currently holding focus for this audio zone.
       */
       String[] usagesHoldingFocus;
       /**
       *   List of output stream metadata associated with the current focus
       *   holder for this audio zone
       */
       @nullable PlaybackTrackMetadata[] playbackMetaDataHoldingFocus;
}

تم إيقاف usagesHoldingFocus نهائيًا. على المطوّرين الآن استخدام playbackMetaDataHoldingFocus لتحديد استخدام سمة الصوت وغير ذلك المعلومات الصوتية. ومع ذلك، لا تزال المعلمة usagesHoldingFocus تحتوي على المعلومات المطلوبة إلى أن تتم إزالة هذا الخيار رسميًا.

معاودة الاتصال لاستخدام الصوت

لجعل التغييرات الصوتية التي تظهر تحت طبقة تجريد الأجهزة (HAL) أكثر وضوحًا لنظام التشغيل AAOS في Android 13، أضفنا آلية يمكنك استخدامها للتواصل يكتسب الصوت التغييرات من نظام الصوت في السيارة إلى خدمة الصوت في السيارة. تشير رسالة الأشكال البيانية تكشف عن التغيّرات في مؤشر مستوى الصوت المكتسَب مع سبب مناسب عند تغيير الربح:

  • القيود التي تم حظرها أو كتم صوتها
  • قيود القيود
  • القيود المفروضة على الانتباه

تكشف هذه التغييرات عن هذه القيود من مستوى أدنى من HAL إلى خدمة صوتية للسيارات وأخيرًا إلى تطبيق لواجهة مستخدم النظام لإبلاغ المستخدم. أما الجزء الأخير، وهو التعرض لواجهة مستخدم نظام محتملة، فتم توسيعه بشكل أكبر في نظام Android 14 الذي يسمح لتطبيقات واجهة مستخدم النظام بالحصول على هذه المعلومات بسهولة أكبر من خلال آلية معاودة الاتصال بمعلومات مجموعة الحجم.

تسجِّل واجهة HAL API للتحكم في الصوت عملية معاودة الاتصال على النحو التالي:

interface IAudioControl {
       /**
       *   Registers callback to be used by HAL for reporting unexpected gain(s)
       *    changed and the reason(s) why.
       *
       *   @param callback The {@link IAudioGainCallback}.
       */
       oneway void registerGainCallback(in IAudioGainCallback callback);
}

يتمّ تعريف IAudioGainCallback على النحو التالي:

interface IAudioGainCallback {
       /**
       *   Used to indicate that one or more audio device port gains have changed,
       *   i.e. initiated by HAL, not by CarAudioService.
       *   This is the counter part of the
       *   {@link onDevicesToDuckChange}, {@link onDevicesToMuteChange} and,
       *   {@link setAudioDeviceGainsChanged} APIs.
       *
       *   @param reasons List of reasons that triggered the given gains changed.
       *   @param gains List of gains affected by the change.
       */
       void onAudioDeviceGainsChanged(in Reasons[] reasons,
       in AudioGainConfigInfo[] gains);
}

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

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

معيار AIDL للتحكم في الصوت HAL 3.0

إنّ إصدار HAL للتحكّم في الصوت في نظام التشغيل Android 14 AIDL هو تم تحديثه إلى الإصدار 3.0 لتحديث واجهات برمجة التطبيقات لتوفير تحسّن في الصوت. وظيفة الفهرسة. تسمح واجهة برمجة تطبيقات HAL للتحكم في الصوت بخدمة الصوت ضبط IModuleChangeCallback وإلغاء ضبطها:

interface IAudioControl {
       /**
       *   Sets callback with HAL for notifying changes to hardware module
       *   (that is: {@link android.hardware.audio.core.IModule}) configurations.
       *
       *   @param callback The {@link IModuleChangeCallback} interface to use
       *    use when new updates are available for
       */
       void setModuleChangeCallback(in IModuleChangeCallback callback);
       /**
       *   Clears module change callback
       */
       void clearModuleChangeCallback();
}

تُسجَّل "setModuleChangeCallback" من خلال الخدمة الصوتية للسيارة عندما عند بدء تشغيل الخدمة أو عند الاسترداد بعد حدوث خطأ. مثل، عنصر تحكم في الصوت إشعار وفاة "عامل تثبيت HAL" من خلال خدمة الصوت في السيارة الصوت التحكم في تنفيذ HAL أي استدعاء تغيير وحدة حالية عند استدعاء واجهة برمجة التطبيقات.

بالنسبة إلى واجهة برمجة التطبيقات clearModuleChangeCallback، يجب أن يؤدي التنفيذ إلى محو أو عدم اتخاذ أي إجراء في حال عدم وجودها. إنها ممارسة جيدة تنفيذ التحكّم الصوتي لتسجيل مراقب وفاة لمعاودة الاتصال ومحو معاودة الاتصال إذا تم تشغيل وفاة المثبت.

يتم تعريف IModuleChangeCallback على النحو التالي:

oneway interface IModuleChangeCallback {
       /**
       *   Used to indicate that one or more {@link AudioPort} configs have
       *   changed. Implementations MUST return at least one AudioPort.
       *
       *   @param audioPorts list of {@link AudioPort} that are updated
       */
       void onAudioPortsChanged(in AudioPort[] audioPorts);
}

عندما تسجّل خدمة الصوت في السيارة معاودة الاتصال بتغيير الوحدة، فإن جاهز لتلقي التغييرات في منفذ الصوت من خلال واجهة برمجة تطبيقات onAudioPortChanged تشير رسالة الأشكال البيانية يمكن استخدام واجهة برمجة التطبيقات لتهيئة رفع مستوى الصوت للنظام الصوتي بمجرّد تم تسجيل معاودة الاتصال. بالنسبة إلى تغييرات الكسب الديناميكي الأخرى، يمكن استدعاء واجهة برمجة التطبيقات في أي وقت. يتم تطبيق التغييرات المقابلة وتحديث خدمة الصوت في السيارة وفقًا لذلك.