ऑडियो फ़ोकस

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

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

फ़ोकस इंटरैक्शन

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

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

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

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

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

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

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

एक साथ कई इंटरैक्शन

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

  • फ़ोकस के लिए आने वाले अनुरोध में, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK का अनुरोध करना ज़रूरी है

  • फ़िलहाल फ़ोकस में मौजूद आइटम, setPauseWhenDucked(true) को सेट नहीं करता

  • फ़िलहाल, फ़ोकस में रहने वाले व्यक्ति ने आवाज़ कम होने के इवेंट पाने का विकल्प नहीं चुना है

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

एक साथ कई स्ट्रीम मैनेज करना

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

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

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

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

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

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

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

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

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

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

ऑडियो फ़ोकस में देरी

Android 11 में, AAOS ने ऑडियो फ़ोकस के लिए देर से अनुरोध करने की सुविधा जोड़ी है. इससे, फ़ोकस के मौजूदा होल्डर के साथ इंटरैक्शन के दौरान, फ़ोकस के ऐसे अनुरोधों को अस्वीकार किए जाने से रोका जा सकता है जो लंबे समय तक फ़ोकस में रहते हैं. फ़ोकस में बदलाव होने के बाद, अगर अनुरोध की स्थिति 'समीक्षा में है' हो जाती है, तो अनुरोध को मंज़ूरी मिल जाती है.

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

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

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

  • जिन अनुरोधों को बाद में पूरा किया जा सकता है उनमें OnAudioFocusChangeListener होना चाहिए. किसी अनुरोध को पूरा करने में देरी होने के बाद, अनुरोध करने वाले व्यक्ति को सूचना देने के लिए, Listener का इस्तेमाल किया जाता है. जैसे, अनुरोध स्वीकार होने (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
    

सिस्टम की ओर से लागू किया गया फ़ेड

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

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

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

हाई-लेवल डिज़ाइन

इस इमेज में, कारों में फ़ोकस लॉस की सुविधा के लिए हाई-लेवल डिज़ाइन और सहायता को दिखाया गया है:

सिस्टम की ओर से लागू की गई फ़ेड करने की सुविधा के लिए हाई-लेवल डिज़ाइन

दूसरी इमेज. सिस्टम की ओर से लागू की गई फ़ेड की सुविधा के लिए हाई-लेवल डिज़ाइन.

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

    • इस फ़ाइल की मदद से, OEM यह तय कर सकते हैं कि सिस्टम के ऑडियो फ़ोकस को लागू करने की सुविधा, ऐप्लिकेशन के बंद होने पर कब लागू की जाए.
    • ऑडियो फ़्रेमवर्क, फ़ेड-आउट और साउंड बंद करने की सुविधा सिर्फ़ तब लागू करता है, जब हारने वाला ऐप्लिकेशन, इस एक्सएमएल फ़ाइल में OEM के तय किए गए नियमों से मेल खाता हो.
    • इससे OEM को ऐप्लिकेशन की विशेषताओं या ऑडियो के इस्तेमाल के तरीकों के आधार पर, सुविधा के व्यवहार को पसंद के मुताबिक बनाने का तरीका मिलता है.
  • आरआरओ की मदद से सुविधा को कंट्रोल करना: इस सुविधा को चालू या बंद करने के लिए, एक नया रनटाइम रिसॉर्स ओवरले (आरआरओ) सुविधा फ़्लैग, audioUseFadeManagerConfiguration जोड़ा गया है:

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

फ़ेड मैनेजर कॉन्फ़िगरेशन

Android 15 के ऑडियो फ़्रेमवर्क में एक यूनिफ़ाइड FadeManagerConfiguration पेश किया गया है. इससे OEM को ऑडियो फ़ेडिंग के व्यवहार को बेहतर तरीके से कंट्रोल करने में मदद मिलती है. इस फ़्रेमवर्क के बारे में तीसरे चित्र में बताया गया है:

फ़ेड मैनेजर कॉन्फ़िगरेशन

तीसरी इमेज. फ़ेड मैनेजर का कॉन्फ़िगरेशन.

इस कॉन्फ़िगरेशन में ये शामिल हैं:

  • फ़ेड ट्रांज़िशन प्रॉपर्टी: फ़ेड-आउट और फ़ेड-इन, दोनों के लिए सेटिंग.
    • इसे ऑडियो के इस्तेमाल या एट्रिब्यूट के हिसाब से तय किया जा सकता है.
    • इसमें, वीडियो की अवधि की सेटिंग को पसंद के मुताबिक बनाया जा सकता है.
    • इन सेटिंग का इस्तेमाल, VolumeShaper.Configuration बनाने के लिए किया जाता है.
  • फ़ेडिंग की नीतियां: ये नीतियां तय करती हैं कि फ़ेडिंग कब होगी.
    • फ़ेडिंग की सुविधा को चालू या बंद करने के लिए, ग्लोबल टॉगल.
    • फ़ेड-आउट किए जा सकने वाले ऑडियो के इस्तेमाल की कॉन्फ़िगर की जा सकने वाली सूची (फ़ोकस हटने पर फ़ेड-आउट होने की ज़रूरी शर्तें पूरी करने वाली).
    • बाहर रखे गए ऑडियो सोर्स की सूची (जिन्हें फ़ेड नहीं किया जा सकता) में, अहम या तय किए गए ऑडियो सोर्स को फ़ेड होने से रोका जा सकता है. ये सूचियां इनके आधार पर बनाई जा सकती हैं:
      • कॉन्टेंट टाइप
      • ऑडियो एट्रिब्यूट
      • ऐप्लिकेशन यूआईडी (सिर्फ़ रनटाइम के दौरान सेट किए जा सकते हैं)

ओईएम कॉन्फ़िगरेशन

इस सेक्शन में, हम OEM के हिसाब से उपलब्ध कस्टमाइज़ेशन के बारे में बताएंगे.

कार के ऑडियो फ़ेड कॉन्फ़िगरेशन की एक्सएमएल फ़ाइल

Android 15 में एक नई कॉन्फ़िगरेशन फ़ाइल, car_audio_fade_configuration.xml को जोड़ा गया है. इससे, फ़ोकस हटने पर ऑडियो धीरे-धीरे कम होने की सुविधा को OEM के हिसाब से ज़्यादा से ज़्यादा कस्टमाइज़ किया जा सकता है.

  • इस एक्सएमएल फ़ाइल की मदद से, कई अलग-अलग फ़ेड कॉन्फ़िगरेशन तय किए जा सकते हैं. car_audio_configuration.xml में क्रॉस-रेफ़रंस करने के लिए, हर कॉन्फ़िगरेशन का एक यूनीक नाम होना ज़रूरी है.
  • इन कॉन्फ़िगरेशन को अलग-अलग ऑडियो ज़ोन और ज़ोन कॉन्फ़िगरेशन में आसानी से लागू किया जा सकता है.
  • ध्यान दें कि हर फ़ेड कॉन्फ़िगरेशन में, सिर्फ़ मिलीसेकंड में दिखने की अवधि की वैल्यू डाली जा सकती है. इसके बाद, सिस्टम उससे जुड़े VolumeShaper.Configuration को अंदरूनी तौर पर जनरेट करता है.

लागू करने के बारे में व्यावहारिक दिशा-निर्देश पाने के लिए, device/generic/car/emulator/audio/car_audio_fade_configuration.xml पर मौजूद एमुलेटर के लिए दिए गए कॉन्फ़िगरेशन के उदाहरण देखें.

कार की ऑडियो सेटिंग की एक्सएमएल फ़ाइल

Android 15 में, अपडेट की गई car_audio_configuration.xml फ़ाइल को शामिल किया गया है. फ़िलहाल, यह फ़ाइल चौथे वर्शन में उपलब्ध है. इसमें नए applyFadeConfigs और fadeConfig टैग शामिल हैं. applyFadeConfigs टैग में एक से ज़्यादा fadeConfig डेफ़िनिशन हो सकती हैं. इससे फ़ेड कॉन्फ़िगरेशन को आसानी से बदला जा सकता है. हर परिभाषा:

  • इसमें isDefault = true के साथ तय किया गया एक डिफ़ॉल्ट fadeConfig शामिल होना चाहिए.
  • इसमें कई ट्रांज़िशन fadeConfig डेफ़िनिशन शामिल की जा सकती हैं. ये ट्रांज़िशन कॉन्फ़िगरेशन, खास तौर पर ऑडियो फ़ोकस हटने के इंटरैक्शन के दौरान लागू होते हैं. साथ ही, ये सिर्फ़ तब लागू होते हैं, जब ऑडियो फ़ोकस पाने वाला ऐप्लिकेशन, ट्रांज़िशन कॉन्फ़िगरेशन में बताई गई शर्तों से मेल खाता हो.

लागू करने के बारे में व्यावहारिक दिशा-निर्देश पाने के लिए, device/generic/car/emulator/audio/car_audio_configuration.xml पर मौजूद एमुलेटर के लिए दिए गए कॉन्फ़िगरेशन के उदाहरण देखें.

OEM ऑडियो फ़ोकस सेवा एक्सटेंशन

कस्टम कार ऑडियो फ़ोकस सेवा लागू करने वाले ओईएम, OemCarAudioFocusResult में ऑडियो फ़ेड सेटिंग को शामिल करके, उन्हें कॉन्फ़िगर कर सकते हैं. ऐसा करने के लिए, setAudioAttributesToCarAudioFadeConfigurationMap() बिल्डर का तरीका अपनाएं:

/** @see OemCarAudioFocusResult#getAudioAttributesToCarAudioFadeConfigurationMap() **/
@NonNull
public Builder setAudioAttributesToCarAudioFadeConfigurationMap(@NonNull
        Map<AudioAttributes, CarAudioFadeConfiguration> attrsToCarAudioFadeConfig) {
}

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

सीक्वेंस डायग्राम

इस सिलसिलेवार डायग्राम में, App2 को ऑडियो फ़ोकस देने के बाद और App1 को ऑडियो फ़ोकस हटाने के बाद, ऐप्लिकेशन के काम करने का तरीका दिखाया गया है:

  • जब कार की ऑडियो सेवा, ऑडियो फ़ोकस लॉस को App1 पर भेजती है, तो App1 प्लेयर से प्लेबैक, सक्रिय FadeManagerConfiguration के हिसाब से फ़ेड-आउट हो जाता है. फ़ेड-आउट की प्रोसेस पूरी होने के बाद, App1 को ऑडियो फ़ोकस लॉस का स्टैंडर्ड कॉलबैक मिलता है.
  • इसके अलावा, App1 के ऑडियो को कॉन्फ़िगर की गई अवधि के बाद, फिर से फ़ेड इन किया जा सकता है. OEM, अपने प्रॉडक्ट की ज़रूरतों के हिसाब से, Builder#setFadeInDurationForUsage(int, long) की मदद से इस अवधि को सेट कर सकते हैं.

कार के ऑडियो को फ़ेड करने की सुविधा के लिए सीक्वेंस डायग्राम

चौथी इमेज. कार के ऑडियो को धीमा करने की सुविधा के लिए सिलसिलेवार डायग्राम.

एक से ज़्यादा ज़ोन में फ़ोकस मैनेज करना

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

सभी ऐप्लिकेशन के लिए, 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 नेटवर्क में बाहरी साउंड को बेहतर तरीके से शामिल किया जा सके और उपयोगकर्ताओं को बेहतर अनुभव दिया जा सके.

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

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

AudioControl@2.0

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

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

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

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

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

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

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

  • मीडिया फ़ोकस चालू होने पर:

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

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

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

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

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