ऑडियो फ़ोकस

लॉजिकल स्ट्रीम शुरू करने से पहले, कोई ऐप्लिकेशन उसी स्ट्रीम का इस्तेमाल करके ऑडियो फ़ोकस का अनुरोध करता है ऑडियो एट्रिब्यूट का इस्तेमाल लॉजिकल स्ट्रीम के लिए किया जाता है. ऐप्लिकेशन को फ़ोकस का पालन करना चाहिए ऑटोमोटिव इस्तेमाल के मामलों में उम्मीद के मुताबिक परफ़ॉर्मेंस में कमी.

हमारा सुझाव है कि फ़ोकस अनुरोध भेजते समय, इसे सिस्टम लागू नहीं करता. इसलिए, फ़ोकस को परोक्ष रूप से नियंत्रण करने और टकराव से बचने के तरीके के तौर पर देखें के बजाय ऑडियो कंट्रोल के मुख्य तरीके के तौर पर काम करता है. वाहन ऑडियो सबसिस्टम के काम करने के लिए फ़ोकस सिस्टम पर निर्भर नहीं होना चाहिए.

बातचीत पर फ़ोकस करें

AAOS के साथ काम करने के लिए, ऑडियो फ़ोकस के अनुरोधों को पहले से तय की गई सेटिंग के हिसाब से मैनेज किया जाता है अनुरोध के CarAudioContext और मौजूदा अनुरोध के बीच हुए इंटरैक्शन फ़ोकस होल्डर. इंटरैक्शन तीन तरह के होते हैं:

  • खास प्रॉडक्ट
  • अस्वीकार करें
  • समवर्ती

खास इंटरैक्शन

यह इंटरैक्शन मॉडल Android के साथ सबसे ज़्यादा इस्तेमाल किया जाता है.

खास इंटरैक्शन में, एक समय पर सिर्फ़ एक ऐप्लिकेशन को फ़ोकस बनाए रखने की अनुमति होती है. इसलिए, आने वाले फ़ोकस अनुरोध को फ़ोकस दिया जाता है, जबकि मौजूदा फ़ोकस होल्डर फ़ोकस खो देता है. दोनों ऐप्लिकेशन में मीडिया चलता है. इसलिए, सिर्फ़ एक ऐप्लिकेशन को होल्ड करने की अनुमति है फ़ोकस. इस वजह से, हाल ही में शुरू हुए ऐप्लिकेशन का फ़ोकस करने का अनुरोध, AUDIOFOCUS_REQUEST_GRANTED के दौरान, जिस ऐप्लिकेशन में संगीत चल रहा है उसे अनुरोध के टाइप से जुड़ी नुकसान की स्थिति के साथ फ़ोकस बदलने वाले इवेंट कुछ इस तरह बनाया गया था.

इंटरैक्शन अस्वीकार करें

अस्वीकार इंटरैक्शन के साथ, आने वाला अनुरोध हमेशा अस्वीकार कर दिया जाता है. इसके लिए उदाहरण के लिए, कॉल के दौरान संगीत चलाने की कोशिश करते समय. इसमें इस मामले में, अगर डायलर कॉल के लिए ऑडियो फ़ोकस को होल्ड करता है और दूसरे ऐप्लिकेशन ने फ़ोकस करने का अनुरोध किया है संगीत चलाने के लिए, संगीत ऐप्लिकेशन को AUDIOFOCUS_REQUEST_FAILED मिलेगा उस सवाल का जवाब दें. फ़ोकस बढ़ाने का अनुरोध अस्वीकार कर दिया गया है. इसलिए, फ़ोकस लॉस नहीं भेजा गया है उसके हिसाब से बदलाव कर सकता है.

समवर्ती इंटरैक्शन

एएओएस, एक साथ कई इंटरैक्शन होते हैं. इससे, ऑडियो का अनुरोध करने वाले ऐप्लिकेशन को इस सुविधा से, कार में दूसरे ऐप्लिकेशन के साथ-साथ फ़ोकस बनाए रखने की सुविधा मिलती है. एक साथ होने वाले इंटरैक्शन के लिए, नीचे दी गई शर्तों को पूरा करना ज़रूरी है. यह:

अगर ये शर्तें पूरी होती हैं, तो फ़ोकस अनुरोध वापस AUDIOFOCUS_REQUEST_GRANTED, जबकि मौजूदा फ़ोकस होल्डर में कोई बदलाव नहीं हुआ है फ़ोकस. हालांकि, अगर मौजूदा फ़ोकस होल्डर डक इवेंट या जब फ़ोकस डकने पर हो जाता है, तब वर्तमान फ़ोकस होल्डर फ़ोकस खो देता है, जैसा कि खास इंटरैक्शन.

एक साथ होने वाली स्ट्रीम मैनेज करना

हालांकि, एक साथ होने वाली बातचीत के कई इस्तेमाल होते हैं. इसलिए, एक साथ कई काम करते समय आउटपुट डिवाइसों में हार्डवेयर लेवल पर डकिंग करना. हमारा सुझाव है कि आप CarAudioContext को एक साथ चलाए जाने की अनुमति होने पर, उन्हें इस यूआरएल पर भेजा जाना चाहिए अलग-अलग आउटपुट डिवाइस होने चाहिए.

एक ही समय पर होने वाली स्ट्रीम के लिए अलग-अलग आउटपुट डिवाइस इस्तेमाल करने पर, एचएएल चालू हो जाता है किसी स्ट्रीम को मिक्स करने से पहले उसमें से किसी एक को चुनना हो या फ़िज़िकल स्ट्रीम को रूट करना हो कार में अलग-अलग स्पीकर कनेक्ट कर लें. अगर लॉजिकल स्ट्रीम आपस में मिल जाएँ, तो Android पर मिलने वाले फ़ायदे बिना किसी बदलाव के होते हैं और एक ही स्ट्रीम के हिस्से के तौर पर डिलीवर किए जाते हैं.

उदाहरण के लिए, जब नेविगेशन और मीडिया एक साथ डिलीवर किए जाते हैं, तो के लिए, मीडिया स्ट्रीम को कुछ समय के लिए कम (या डक किया गया) किया जा सकता है. नेविगेशन के निर्देश और साफ़ तौर पर सुने जा सकते हैं. वैकल्पिक रूप से, नेविगेशन स्ट्रीम को ड्राइवर साइड स्पीकर पर रूट किया जा सकता है, जबकि मीडिया पूरे केबिन में ये गेम चलाए जा सकते हैं.

इंटरैक्शन मैट्रिक्स

नीचे दी गई टेबल में, CarAudioService के हिसाब से इंटरैक्शन मैट्रिक्स दिखाया गया है. हर पंक्ति से, मौजूदा फ़ोकस होल्डर के CarAudioContext और हर एक आइटम के बारे में पता चलता है कॉलम इनकमिंग अनुरोध का प्रतिनिधित्व करता है.

उदाहरण के लिए, जब कोई संगीत मीडिया ऐप्लिकेशन, नेविगेशन ऐप्लिकेशन के अनुरोधों के तौर पर फ़ोकस रखता है फ़ोकस करते हैं, तो मैट्रिक्स से पता चलता है कि दोनों इंटरैक्शन एक साथ चल सकते हैं, और इसके लिए, एक साथ होने वाले इंटरैक्शन पूरे किए जाते हैं.

एक ही समय में होने वाले इंटरैक्शन की वजह से, हो सकता है कि एक से ज़्यादा इंटरैक्शन एक ही समय में फ़ोकस होल्डर. इस मामले में, फ़ोकस करने के लिए आने वाले अनुरोध की तुलना यह तय करने से पहले कि कौनसा इंटरैक्शन लागू करना है. इसमें इस मामले में, सबसे कंज़र्वेटिव इंटरैक्शन की जीत होती है. पहले अस्वीकार करें, फिर खास करें, और साथ ही, आखिर में एक ही समय पर.

ऑडियो फ़ोकस इंटरैक्शन मैट्रिक्स

पहला डायग्राम. ऑडियो फ़ोकस इंटरैक्शन मैट्रिक्स.

Android 11 में एक नई उपयोगकर्ता सेटिंग जोड़ी गई थी, ताकि लोग नेविगेशन और फ़ोन कॉल के बीच इंटरैक्शन का व्यवहार. सेट होने पर, android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL बदलाव करता है आने वाले NAVIGATION फ़ोकस अनुरोधों और मौजूदा CALL के बीच इंटरैक्शन फ़ोकस होल्डर से एक साथ से अस्वीकार पर सेट किया जाता है. अगर कोई उपयोगकर्ता पसंद करता है कि नेविगेशन के निर्देश मिलते हैं, तो वे सेटिंग चालू कर सकते हैं. यह उपयोगकर्ता के लिए बना रहता है और डाइनैमिक तौर पर सेट किया जा सकता है, ताकि बाद में अनुरोध नई सेटिंग का पालन करते हैं.

देर से होने वाला ऑडियो फ़ोकस

Android 11 में, एएओएस ने देर से दिखने वाले ऑडियो फ़ोकस के अनुरोध के लिए सहायता जोड़ी है. यह इससे उन अनुरोधों को प्रोसेस होने में देरी होती है जो कुछ समय के लिए नहीं की जातीं ऐसे मामलों में, हो सकता है कि उन संगठनों के मौजूदा सदस्यों की सूची अस्वीकार कर दी जाए. एक बार फ़ोकस बदलने के नतीजे ऐसी स्थिति में होते हैं जिसमें देर से अनुरोध मिलने पर फ़ोकस पहुंच सकता है. अनुरोध को स्वीकार कर लिया गया है.

देर से ऑडियो फ़ोकस करने के अनुरोधों के लिए नियम

  • सिर्फ़ अस्थायी अनुरोध. देरी से किया गया अनुरोध सिर्फ़ इसके लिए किया जा सकता है ऐसे सोर्स जो लंबे समय तक काम न करते हों, ताकि लंबे समय तक आवाज़ न चले. उसके ज़रूरी होने पर.

  • एक बार में सिर्फ़ एक अनुरोध करने में देरी हो सकती है. अगर देर से होने वाले अनुरोध की स्थिति किया गया अनुरोध तब किया जाता है, जब पहले से ही देरी से किया जा रहा हो, लेकिन मूल अनुरोध दिखने में देरी हुई 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

इस बंडल पैरामीटर की मदद से, अनुरोध करने वाला व्यक्ति अपने-आप काम करने वाले ऑडियो ज़ोन को बदल सकता है मैप करने के बजाय, दिए गए ज़ोन आईडी का इस्तेमाल करें. इसलिए, कोई ऐप्लिकेशन आपको हमने अलग-अलग ऑडियो ज़ोन के लिए अलग-अलग अनुरोध किए हैं.

एचएएल ऑडियो फ़ोकस

Android 11 और इसके बाद के वर्शन में, एचएएल को इनकी ओर से फ़ोकस का अनुरोध करने के लिए चालू कर दिया गया है बाहरी स्ट्रीम. हालांकि, यह ज़रूरी नहीं है, लेकिन हम इन एपीआई का इस्तेमाल करने को Android नेटवर्क में बाहरी लोगों की आवाज़ को बेहतर तरीके से शामिल करने के लिए, ताकि उपयोगकर्ताओं को बेहतरीन अनुभव मिल सके.

एचएएल यह तय करता है कि किन आवाज़ों को प्राथमिकता देनी चाहिए. इस हद तक, आपातकालीन और सुरक्षा से जुड़ी गंभीर आवाज़ों को सुना जाना चाहिए कि HAL को ऑडियो फ़ोकस दिया गया है या नहीं और उसे एचएएल के ऑडियो फ़ोकस बंद होने पर भी, सही तरीके से चलाया जाता है. यही बात इसके लिए लागू होती है किसी भी तरह की आवाज़ की पहचान कर सकते हैं.

गेम खेलते समय, एचएएल को Android स्ट्रीम को म्यूट करना चाहिए आपातकालीन या सुरक्षा के लिए बहुत ज़रूरी आवाज़ें, ताकि यह पक्का किया जा सके कि आवाज़ साफ़ सुनाई दे.

ऑडियो कंट्रोल@2.0

AudioControl HAL के वर्शन 2.0 में ये नए API शामिल किए गए हैं:

एपीआई मकसद
IAudioControl#registerFocusListener IFocusListener के एक इंस्टेंस को ऑडियो कंट्रोल एचएएल. यह लिसनर एचएएल को ऑडियो का अनुरोध करने और उसे बंद करने की अनुमति देता है फ़ोकस. HAl, ICloseHandle इंस्टेंस देता है, जिसका इस्तेमाल किया जा सकता है Android पर, लिसनर का रजिस्ट्रेशन रद्द किया जा सकता है.
IAudioControl#onAudioFocusChange एचएएल के किए गए अनुरोधों पर फ़ोकस करने के लिए, स्थिति में हुए बदलावों की एचएएल को सूचना देता है IFocusListener तक, जिसमें शुरुआती जवाब के जवाब भी शामिल हैं फ़ोकस करने के अनुरोध शामिल हैं.
IFocusListener#requestAudioFocus किसी खास इस्तेमाल के लिए एचएएल की ओर से अनुरोध, ज़ोन आईडी, और फ़ोकस गेन टाइप में होता है.
IFocusListener#abandonAudioFocus बताए गए इस्तेमाल और ज़ोन के लिए, एचएएल फ़ोकस के मौजूदा अनुरोधों को छोड़ देता है आईडी.

एचएएल को एक ही समय पर एक से ज़्यादा फ़ोकस अनुरोध मिल सकते हैं. हालांकि, वह सिर्फ़ एक अनुरोध पर काम कर सकता है हर इस्तेमाल के हिसाब से अनुरोध और ज़ोन आईडी जोड़ने की सुविधा. Android, एचएएल को तुरंत लागू कर लेता है अनुरोध किए जाने के बाद, किसी इस्तेमाल के लिए आवाज़ चलाना शुरू करता है और जारी रखता है ऐसा तब तक करते रहें, जब तक फ़ोकस रद्द न हो जाए.

registerFocusListener के अलावा, इन अनुरोधों को oneway भेजा जाएगा, ताकि यह पक्का किया जा सके कि फ़ोकस करने के अनुरोध को प्रोसेस किए जाने के दौरान, Android एचएएल को प्रोसेस करने में देरी नहीं करता. एचएएल को यह करना चाहिए सुरक्षा के लिहाज़ से ज़रूरी आवाज़ें चलाने से पहले, फ़ोकस करने के लिए इंतज़ार नहीं करें. यह ज़रूरी नहीं है एचएएल को ऑडियो फ़ोकस में हुए बदलावों को सुनने और उन पर प्रतिक्रिया देने के लिए IAudioControl#onAudioFocusChange.

OEM कार ऑडियो फ़ोकस सेवा

Android 14 में, AAOS ने इन सुविधाओं को चालू करने के लिए, कार की OEM प्लगिन सेवाएं लॉन्च की कार के कुछ कॉम्पोनेंट को कॉन्फ़िगर किया जा सकता है. इसके लिए Car Audio प्लगिन सेवा, प्लगिन यह सेवा, OEM को कार के ऑडियो से रोके गए फ़ोकस अनुरोधों को मैनेज करने की अनुमति देती है सेवा. इससे ओईएम को ज़रूरत के हिसाब से फ़ोकस मैनेज करने में आसानी होती है नियमों और कानूनों के हिसाब से बनाया जाता है. इसलिए, ऑडियो फ़ोकस इंटरैक्शन दोनों ही विकल्पों में अलग-अलग हो सकता है और हर क्षेत्र में लागू होता है. ऑडियो फ़ोकस के लिए बुनियादी बातें ऑडियो को बेहतर तरीके से मैनेज करने के लिए, ऐप्लिकेशन को फ़ोकस अब भी करना चाहिए उपयोगकर्ता अनुभव को बेहतर बनाने के लिए. आम तौर पर, ऑडियो के लिए कुछ नियम अब भी लागू होते हैं ऐप्लिकेशन के ज़रिए फ़ोकस करने के अनुरोध:

  • किसी भी स्थिति में, ज़्यादा प्राथमिकता वाले ऑडियो फ़ोकस के बिना (फ़ोन कॉल, आपातकालीन स्थिति की चेतावनी या सुरक्षा से जुड़ी सूचना वाले ऐप्लिकेशन के पास, ऑडियो पाने की सुविधा होनी चाहिए कुछ समय के लिए या हमेशा के लिए फ़ोकस करना.

  • जब मीडिया फ़ोकस चालू हो:

    • कॉल के इस्तेमाल पर फ़ोकस करने का अनुरोध करने वाले ऐप्लिकेशन को एक साथ या खास तौर पर.

    • नेविगेशन के इस्तेमाल पर फ़ोकस का अनुरोध करने वाले ऐप्लिकेशन को नेविगेशन की सुविधा मिलनी चाहिए एक साथ या खास तौर पर फ़ोकस करना.

    • Assistant के इस्तेमाल पर फ़ोकस का अनुरोध करने वाले ऐप्लिकेशन को, इस्तेमाल के बारे में फ़ोकस की सुविधा चाहिए साथ में या खास तौर पर.

  • ज़्यादा प्राथमिकता वाला ऑडियो फ़ोकस खड़े होने पर (फ़ोन कॉल समेत, आपातकालीन स्थिति की चेतावनी या सुरक्षा से जुड़ी सूचना) देने वाले ऐप्लिकेशन चालू हैं या कोई भी आने वाला है देर से ऑडियो फ़ोकस का अनुरोध स्वीकार किया जाना चाहिए या उसे ज़रूरत के हिसाब से देरी से स्वीकार किया जाना चाहिए.

हालांकि, ऊपर दिए गए सुझाव पूरी तरह से शामिल नहीं हैं, लेकिन इनसे उन ऐप्लिकेशन को मदद मिल सकती है जो फ़ोकस की सुविधा का इस्तेमाल करें. सबसे ज़्यादा होने पर भी प्राथमिकता वाले साउंड चालू हैं. देर से होने वाले फ़ोकस अनुरोधों पर अब भी कार्रवाई की जानी चाहिए साथ ही, ऐसी आवाज़ के इस्तेमाल पर फ़ोकस किया जाना चाहिए जो ज़्यादा प्राथमिकता वाला हो.