التركيز على الصوت

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

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

التركيز على التفاعلات

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

  • عرض حصري
  • رفض
  • متزامن

تفاعل حصري

وهذا هو نموذج التفاعل الأكثر شيوعًا في Android.

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

رفض التفاعل

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

تفاعل متزامن

إنّ العناصر الفريدة لـ AAOS هي التفاعلات المتزامنة. يتيح هذا الإجراء للتطبيقات التي تطلب الحصول على صوت إمكانية التركيز في السيارة على التركيز بالتزامن مع التطبيقات الأخرى. بالنسبة إلى تفاعل متزامن، يجب استيفاء الشروط التالية. يجب مراعاة ما يلي:

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

التعامل مع أحداث البث المتزامنة

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

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

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

مصفوفة التفاعل

يوضّح الجدول التالي مصفوفة التفاعل كما هو موضّح في CarAudioService. يمثل كل صف CarAudioContext للعنصر التركيزي الحالي وكل قيمة الطلب الوارد.

على سبيل المثال، عندما يواصل تطبيق وسائط موسيقية التركيز على طلبات التطبيق للتنقّل. فإن المصفوفة تشير إلى أن التفاعلين يمكن أن يلعبا بشكل متزامن، بافتراض المعايير الأخرى التفاعلات المتزامنة تتم.

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

مصفوفة تفاعل التركيز الصوتي

الشكل 1. مصفوفة تفاعل التركيز الصوتي

في نظام Android 11، تم تقديم إعداد جديد للمستخدم للسماح للمستخدمين بتغيير سلوك التفاعل بين التنقل والمكالمات الهاتفية. عند الضبط، يغيّر android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL التفاعل بين طلبات التركيز الواردة من NAVIGATION وCALL الحالي العناصر الرئيسية التي يتم التركيز عليها من متزامنة إلى عمليات رفض. إذا كان المستخدم يفضل إرشادات التنقل لا تقاطع المكالمة، فيمكنهم تمكين الإعداد. هذا النمط تستمر للمستخدم، ويمكن ضبطها ديناميكيًا بحيث يمكن الطلبات تحترم الإعداد الجديد.

تأثير صوت مؤخّر

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

قواعد طلبات التركيز الصوتي المتأخّر

  • الطلبات غير المؤقتة فقط: لا يمكن تقديم طلب متأخر إلا مصادر غير عابرة لتجنّب تشغيل صوت عابر لفترة طويلة بعد أن يكون مفيدًا.

  • يمكن تأخير طلب واحد فقط في كل مرة. إذا كان الطلب القابل للتأخير تم تقديم الطلب أثناء وجود طلب متأخر بالفعل، فإن الطلب الأصلي المتأخر تلقّي حدث تغيير "AUDIOFOCUS_LOSS" ويتلقّى الطلب الجديد استجابة متزامنة لـ AUDIOFOCUS_REQUEST_DELAYED.

  • يجب أن يتوفر للطلبات المتأخرة OnAudioFocusChangeListener بمجرد تأخير الطلب، فيتم استخدام المستمع لإشعار مقدم الطلب عند طلب الموافقة في النهاية (AUDIOFOCUS_GAIN)، أو إذا تم رفضه لاحقًا (AUDIOFOCUS_LOSS).

طلب التركيز القابل للتأخير

لإنشاء طلب يمكن أن يتأخر:

  1. استخدم AudioFocusRequest.Builder#setAcceptsDelayedFocusGain.

    mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener();
    
    mDelayedFocusRequest = new AudioFocusRequest
         .Builder(AudioManager.AUDIOFOCUS_GAIN)
         .setAudioAttributes(mMusicAudioAttrib)
         .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener)
         .setForceDucking(false)
         .setWillPauseWhenDucked(false)
         .setAcceptsDelayedFocusGain(true)
         .build();
    
  2. عند تقديم الطلب، تعامَل مع استجابة AUDIOFOCUS_REQUEST_DELAYED:

    int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest);
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        // start audio playback
        return;
    }
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
         // audio playback delayed to audio focus listener
         return;
    }
    
  3. عندما يتأخر الطلب، يتعامل أداة معالجة التركيز مع التغييرات في التركيز:

    private final class MediaWithDelayedFocusListener implements
    OnAudioFocusChangeListener {
           @Override
           public void onAudioFocusChange(int focusChange) {
               synchronized (mLock) {
                   switch (focusChange) {
                       case AudioManager.AUDIOFOCUS_GAIN:
                           … // Start focus playback
                       case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                           … // Pause media transiently
                       case AudioManager.AUDIOFOCUS_LOSS:
                           … // Stop media
    

إدارة التركيز المتعدّد المناطق

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

بالنسبة إلى جميع التطبيقات، يدير CarAudioService التركيز تلقائيًا. التركيز يتم تحديد المنطقة الصوتية للطلب من خلال UserId أو UID المرتبطَين به (لمعرفة التفاصيل، راجِع التوجيه الصوتي).

طلب الصوت من عدة مناطق بشكل متزامن

إذا كان التطبيق يريد تشغيل الصوت في عدة مناطق بشكل متزامن، يجب أن يطلب التطبيق لكل منطقة من خلال تضمين AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID في حزمة:

//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
               zoneId);

AudioAttributes attributesWithZone = new AudioAttributes.Builder()
     .setUsage(AudioAttributes.USAGE_MEDIA)
     .addBundle(bundle)
     .build();

//Create focus request using built attributesWithZone

تتيح مَعلمة الحزمة هذه لمقدِّم الطلب إلغاء منطقة الصوت التلقائية. تعيينات لاستخدام معرف المنطقة المحدد بدلاً من ذلك. لذلك، يمكن أن يُصدر أحد التطبيقات الطلبات المنفصلة لمناطق الصوت المختلفة.

تركيز صوت HAL

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

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

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

AudioControl@2.0

يقدّم الإصدار 2.0 من AudioControl HAL واجهات برمجة التطبيقات الجديدة التالية:

واجهة برمجة التطبيقات الغرض
IAudioControl#registerFocusListener يتم تسجيل مثيل IFocusListener باستخدام HAL للتحكم في الصوت. يتيح هذا المستمع لـ HAL طلب الصوت وتجاهله التركيز. يوفّر HAl مثيل ICloseHandle لاستخدامه في Android لإلغاء تسجيل المستمع
IAudioControl#onAudioFocusChange إبلاغ "HAL" بالتغييرات التي تطرأ على الحالة في ما يتعلّق بطلبات التركيز المقدَّمة من "HAL" من خلال IFocusListener، بما في ذلك الردود على طلبات التركيز.
IFocusListener#requestAudioFocus تركز الطلبات على HAL لاستخدام محدد، أو رقم تعريف منطقة، ونوع اكتساب التركيز.
IFocusListener#abandonAudioFocus يتم تجاهل طلبات تركيز HAL الحالية للاستخدام والمنطقة المحدّدَين. المعرّف

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

بخلاف registerFocusListener، تمثل هذه الطلبات oneway للتأكد من أن لا يؤخّر Android حالة HAL أثناء معالجة طلب التركيز. ينبغي أن تتضمن HAL لا تنتظر للتركيز قبل تشغيل الأصوات التي تمثل خطورة على سلامتك. إنها اختيارية لـ HAL والاستماع إلى التغييرات في تركيز الصوت والاستجابة لها من خلال IAudioControl#onAudioFocusChange

خدمة تركيز صوت السيارة من المصنّع الأصلي للجهاز

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

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

  • عندما يكون تركيز الوسائط نشطًا:

    • يجب أن تتمكّن التطبيقات التي تطلب التركيز على استخدام المكالمات من تلقّي المكالمة إمّا. بشكل متزامن أو حصري.

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

    • يجب أن يكون بإمكان التطبيقات التي تطلب التركيز على استخدام "مساعد Google" التركيز على الاستخدام بشكل متزامن أو حصري.

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

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