लॉजिकल स्ट्रीम शुरू करने से पहले, ऐप्लिकेशन उसी ऑडियो एट्रिब्यूट का इस्तेमाल करके ऑडियो फ़ोकस का अनुरोध करता है जिसका इस्तेमाल लॉजिकल स्ट्रीम के लिए किया जाता है. ऑटोमोटिव से जुड़े इस्तेमाल के उदाहरणों में, ऐप्लिकेशन को फ़ोकस खोने की स्थिति में भी उम्मीद के मुताबिक काम करना चाहिए.
फ़ोकस का अनुरोध भेजने का सुझाव दिया जाता है. हालांकि, सिस्टम इसे लागू नहीं करता. इसलिए, फ़ोकस को ऑडियो कंट्रोल करने के मुख्य तरीके के तौर पर इस्तेमाल करने के बजाय, इसे प्लेबैक के दौरान टकराव को कम करने और इसे परोक्ष रूप से कंट्रोल करने के तरीके के तौर पर इस्तेमाल करें. ऑडियो सबसिस्टम को चलाने के लिए, वाहन को फ़ोकस सिस्टम पर निर्भर नहीं रहना चाहिए.
फ़ोकस इंटरैक्शन
AAOS के साथ काम करने के लिए, ऑडियो फ़ोकस के अनुरोधों को पहले से तय की गई इंटरैक्शन के आधार पर मैनेज किया जाता है. ये इंटरैक्शन, अनुरोध के CarAudioContext और फ़िलहाल फ़ोकस रखने वाले लोगों के बीच होते हैं. इंटरैक्शन तीन तरह के होते हैं:
- खास प्रॉडक्ट
- अस्वीकार करें
- कॉनकरंट
एक्सक्लूसिव इंटरैक्शन
यह इंटरैक्शन मॉडल, Android के साथ सबसे ज़्यादा इस्तेमाल किया जाता है.
एक्सक्लूसिव इंटरैक्शन में, एक बार में सिर्फ़ एक ऐप्लिकेशन को फ़ोकस करने की अनुमति होती है.
इसलिए, फ़ोकस का अनुरोध करने वाले व्यक्ति को फ़ोकस करने की अनुमति दी जाती है. वहीं, फ़ोकस करने की अनुमति रखने वाले व्यक्ति से यह अनुमति वापस ले ली जाती है. दोनों ऐप्लिकेशन मीडिया चलाने की सुविधा देते हैं. इसलिए, सिर्फ़ एक ऐप्लिकेशन को फ़ोकस करने की अनुमति है. इस वजह से, नए ऐप्लिकेशन के फ़ोकस के अनुरोध को AUDIOFOCUS_REQUEST_GRANTED के साथ वापस कर दिया जाता है. वहीं, संगीत चलाने वाले मौजूदा ऐप्लिकेशन को फ़ोकस बदलने का इवेंट मिलता है. इसमें फ़ोकस के बंद होने की स्थिति होती है. यह उस अनुरोध के टाइप से मेल खाती है जो किया गया था.
इंटरैक्शन अस्वीकार करना
reject इंटरैक्शन के ज़रिए, आने वाले अनुरोध को हमेशा अस्वीकार कर दिया जाता है. उदाहरण के लिए, कॉल के दौरान संगीत चलाने की कोशिश करते समय. इस मामले में, अगर Dialer किसी कॉल के लिए ऑडियो फ़ोकस रखता है और दूसरा ऐप्लिकेशन संगीत चलाने के लिए फ़ोकस का अनुरोध करता है, तो संगीत ऐप्लिकेशन को अनुरोध के जवाब में AUDIOFOCUS_REQUEST_FAILED मिलता है. फ़ोकस का अनुरोध अस्वीकार कर दिया गया है. इसलिए, फ़ोकस के मौजूदा मालिक को फ़ोकस खोने की सूचना नहीं भेजी गई है.
एक साथ किए गए इंटरैक्शन
AAOS में एक साथ कई इंटरैक्शन किए जा सकते हैं. इससे कार में ऑडियो फ़ोकस का अनुरोध करने वाले ऐप्लिकेशन को, अन्य ऐप्लिकेशन के साथ एक साथ फ़ोकस बनाए रखने की सुविधा मिलती है. एक साथ कई इंटरैक्शन होने के लिए, ये शर्तें पूरी होनी चाहिए. यह:
फ़ोकस के लिए किए गए अनुरोध में, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK के लिए अनुरोध किया जाना चाहिए
फ़ोकस होल्ड करने वाला मौजूदा ऑब्जेक्ट, setPauseWhenDucked(true) को सेट नहीं करता
फ़ोकस करने वाले मौजूदा व्यक्ति ने आवाज़ कम होने के इवेंट की सूचनाएं पाने का विकल्प नहीं चुना है
अगर ये शर्तें पूरी होती हैं, तो फ़ोकस का अनुरोध AUDIOFOCUS_REQUEST_GRANTED के साथ वापस आ जाता है. वहीं, फ़ोकस को होल्ड करने वाले मौजूदा व्यक्ति के फ़ोकस में कोई बदलाव नहीं होता है. हालांकि, अगर फ़िलहाल फ़ोकस में मौजूद व्यक्ति, डक इवेंट पाने या डक होने पर रोकने का विकल्प चुनता है, तो फ़िलहाल फ़ोकस में मौजूद व्यक्ति का फ़ोकस हट जाता है. ऐसा एक्सक्लूसिव इंटरैक्शन के दौरान होता है.
एक साथ कई डिवाइसों पर कॉन्टेंट देखने की सुविधा मैनेज करना
एक साथ कई तरह के इंटरैक्शन करने के कई फ़ायदे हैं. हालांकि, आउटपुट डिवाइसों के हार्डवेयर लेवल पर मिक्सिंग और डकिंग करते समय सावधानी बरतें. हमारा सुझाव है कि CarAudioContext के ऐसे इंस्टेंस जिन्हें एक साथ चलाने की अनुमति है उन्हें अलग-अलग आउटपुट डिवाइसों पर रूट किया जाना चाहिए.
एक साथ कई स्ट्रीम चलाने के लिए अलग-अलग आउटपुट डिवाइस होने से, HAL को स्ट्रीम को मिक्स करने से पहले किसी एक स्ट्रीम को डक करने या फ़िज़िकल स्ट्रीम को वाहन में मौजूद अलग-अलग स्पीकर पर रूट करने की सुविधा मिलती है. अगर लॉजिकल स्ट्रीम को Android में मिक्स किया जाता है, तो गेन में कोई बदलाव नहीं होता है. साथ ही, उन्हें एक ही फ़िज़िकल स्ट्रीम के हिस्से के तौर पर डिलीवर किया जाता है.
उदाहरण के लिए, जब नेविगेशन और मीडिया को एक साथ डिलीवर किया जाता है, तो मीडिया स्ट्रीम के लिए आवाज़ को कुछ समय के लिए कम किया जा सकता है, ताकि नेविगेशन के निर्देशों को ज़्यादा साफ़ तौर पर सुना जा सके. इसके अलावा, नेविगेशन स्ट्रीम को ड्राइवर की तरफ़ के स्पीकर पर रूट किया जा सकता है. वहीं, मीडिया पूरे केबिन में चलता रहेगा.
इंटरैक्शन मैट्रिक्स
इस टेबल में, CarAudioService के हिसाब से इंटरैक्शन मैट्रिक्स दिखाया गया है.
हर लाइन, फ़ोकस होल्डर के मौजूदा CarAudioContext को दिखाती है. साथ ही, हर कॉलम, आने वाले अनुरोध के CarAudioContext को दिखाता है.
उदाहरण के लिए, जब कोई नेविगेशन ऐप्लिकेशन फ़ोकस करने का अनुरोध करता है, तब संगीत मीडिया ऐप्लिकेशन फ़ोकस में होता है. ऐसे में, मैट्रिक्स से पता चलता है कि दोनों इंटरैक्शन एक साथ हो सकते हैं. हालांकि, इसके लिए यह ज़रूरी है कि एक साथ होने वाले इंटरैक्शन की अन्य शर्तें पूरी हों.
एक साथ कई इंटरैक्शन होने की वजह से, एक से ज़्यादा फ़ोकस होल्डर हो सकते हैं. इस मामले में, फ़ोकस के लिए किए गए अनुरोध की तुलना, फ़ोकस को होल्ड करने वाले हर मौजूदा व्यक्ति से की जाती है. इसके बाद, यह तय किया जाता है कि कौनसे इंटरैक्शन को लागू करना है. इस मामले में, सबसे सुरक्षित इंटरैक्शन को प्राथमिकता दी जाती है. अस्वीकार करें, फिर एक्सक्लूसिव, और आखिर में एक साथ.
पहली इमेज. ऑडियो फ़ोकस इंटरैक्शन मैट्रिक्स.
फ़ोन कॉल के दौरान नेविगेशन
Android 11 में, उपयोगकर्ता के लिए एक नई सेटिंग जोड़ी गई थी. इसकी मदद से, उपयोगकर्ता नेविगेशन और फ़ोन कॉल के बीच इंटरैक्शन के तरीके में बदलाव कर सकते हैं. इस विकल्प को सेट करने पर, android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL, NAVIGATION फ़ोकस के अनुरोधों और CALL फ़ोकस के मौजूदा उपयोगकर्ताओं के बीच इंटरैक्शन को एक साथ से अस्वीकार करता है में बदल देता है. अगर किसी उपयोगकर्ता को यह पसंद नहीं है कि नेविगेशन के निर्देशों की वजह से कॉल में रुकावट आए, तो वह इस सेटिंग को चालू कर सकता है. यह कुकी उपयोगकर्ता के डिवाइस में सेव रहती है. इसे डाइनैमिक तरीके से सेट किया जा सकता है, ताकि फ़ोकस करने के बाद के अनुरोधों में नई सेटिंग का इस्तेमाल किया जा सके.
ऑडियो फ़ोकस को कुछ समय के लिए रोका जा सकता है
Android 11 में, AAOS ने देर से शुरू होने वाले ऑडियो फ़ोकस का अनुरोध करने की सुविधा जोड़ी है. इससे, फ़ोकस के ऐसे अनुरोधों को कुछ समय के लिए रोका जा सकता है जिन्हें आम तौर पर अस्वीकार कर दिया जाता है. ऐसा तब होता है, जब फ़ोकस के अनुरोध करने वाले और फ़िलहाल फ़ोकस का इस्तेमाल कर रहे लोगों के बीच इंटरैक्शन होता है. जब फ़ोकस में बदलाव होने की वजह से, देरी से किए गए अनुरोध को फ़ोकस किया जा सकता है, तब अनुरोध को स्वीकार कर लिया जाता है.
ऑडियो फ़ोकस के अनुरोधों में देरी होने से जुड़े नियम
सिर्फ़ ऐसे अनुरोध स्वीकार किए जाते हैं जो कुछ समय के लिए नहीं होते. देर से किए गए अनुरोध का इस्तेमाल सिर्फ़ उन सोर्स के लिए किया जा सकता है जो कुछ समय के लिए नहीं होते. ऐसा इसलिए, ताकि कुछ समय के लिए चलने वाली आवाज़, काम की होने के बाद भी लंबे समय तक न चलती रहे.
एक बार में सिर्फ़ एक अनुरोध को कुछ समय के लिए रोका जा सकता है. अगर पहले से ही कोई अनुरोध पूरा होने में देरी हो रही है और इस दौरान कोई ऐसा अनुरोध किया जाता है जिसे पूरा होने में देरी हो सकती है, तो देरी से पूरा होने वाले मूल अनुरोध को
AUDIOFOCUS_LOSSबदलाव वाला इवेंट मिलता है. साथ ही, नए अनुरोध कोAUDIOFOCUS_LOSSका सिंक्रोनस जवाब मिलता है.AUDIOFOCUS_REQUEST_DELAYEDजिन अनुरोधों को कुछ समय के लिए रोका जा सकता है उनमें
OnAudioFocusChangeListenerहोना चाहिए. अनुरोध में देरी होने पर, इस लिसनर का इस्तेमाल अनुरोध करने वाले व्यक्ति को सूचना देने के लिए किया जाता है. सूचना तब दी जाती है, जब अनुरोध को मंज़ूरी मिल जाती है (AUDIOFOCUS_GAIN) या बाद में अस्वीकार कर दिया जाता है (AUDIOFOCUS_LOSS).
फ़ोकस में देरी करने का अनुरोध करना
ऐसे अनुरोध को बनाने के लिए जिसमें देरी हो सकती है:
AudioFocusRequest.Builder#setAcceptsDelayedFocusGainका उपयोग करें.mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener(); mDelayedFocusRequest = new AudioFocusRequest .Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(mMusicAudioAttrib) .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener) .setForceDucking(false) .setWillPauseWhenDucked(false) .setAcceptsDelayedFocusGain(true) .build();अनुरोध करते समय,
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; }अनुरोध में देरी होने पर, फ़ोकस लिसनर फ़ोकस में होने वाले बदलावों को मैनेज करता है:
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 कॉन्फ़िगरेशन फ़ाइल: Android 15 में एक नई कॉन्फ़िगरेशन फ़ाइल शामिल है,
car_audio_fade_configuration.xml:- इस फ़ाइल की मदद से ओईएम, यह तय कर सकते हैं कि सिस्टम का ऑडियो फ़ोकस लागू करने की सुविधा, किस ऐप्लिकेशन पर लागू होगी.
- ऑडियो फ़्रेमवर्क, आवाज़ कम होने और बंद होने की सुविधा को सिर्फ़ तब लागू करता है, जब ऑडियो चलाने वाला ऐप्लिकेशन, इस एक्सएमएल फ़ाइल में ओईएम के तय किए गए नियमों के मुताबिक हो.
- इससे ओईएम को, ऐप्लिकेशन की विशेषताओं या ऑडियो इस्तेमाल करने के टाइप के आधार पर, सुविधा के व्यवहार को पसंद के मुताबिक बनाने का तरीका मिलता है.
आरआरओ की मदद से सुविधा को कंट्रोल करना: इस सुविधा को चालू या बंद करने के लिए, रनटाइम रिसोर्स ओवरले (आरआरओ) की नई सुविधा का फ़्लैग,
audioUseFadeManagerConfiguration, लॉन्च किया गया है:- यह सुविधा डिफ़ॉल्ट रूप से बंद होती है.
- सिस्टम की ओर से लागू किए गए ऑडियो फ़ोकस के नुकसान को चालू करने के लिए, ओईएम को इस फ़्लैग को
trueपर सेट करना होगा. - कार ऑडियो फ़्रेमवर्क को फ़्लैग चालू होने पर, फ़ेड कॉन्फ़िगरेशन की मान्य परिभाषाओं की ज़रूरत होती है. हालांकि, ऐसी परिभाषाएं मौजूद न होने पर, फ़ेटल अपवाद अपने-आप नहीं होता.
- फ़ेड कॉन्फ़िगरेशन वाले सभी ऐप्लिकेशन में, फ़ेड की परिभाषाएं एक जैसी होनी चाहिए. कार ऑडियो कॉन्फ़िगरेशन के हिस्से के तौर पर, फ़ेड कॉन्फ़िगरेशन को उसके नाम से कॉल करना एक गंभीर गड़बड़ी है. ऐसा तब होता है, जब मान्य परिभाषा नहीं दी जाती है.
- इस फ़्लैग के बंद होने पर, फ़ेड कॉन्फ़िगरेशन की सभी परिभाषाओं और कॉन्फ़िगरेशन के सभी रेफ़रंस को अनदेखा कर दिया जाता है.
फ़ेड मैनेजर कॉन्फ़िगरेशन
Android 15 के ऑडियो फ़्रेमवर्क में, एक यूनिफ़ाइड FadeManagerConfiguration पेश किया गया है. इससे ओईएम को ऑडियो फ़ेड होने के तरीके पर बेहतर कंट्रोल मिलता है. इस फ़्रेमवर्क को तीसरे डायग्राम में दिखाया गया है:
तीसरी इमेज. फ़ेड मैनेजर कॉन्फ़िगरेशन.
इस कॉन्फ़िगरेशन में ये शामिल हैं:
- फ़ेड ट्रांज़िशन प्रॉपर्टी: फ़ेड-आउट और फ़ेड-इन, दोनों के लिए सेटिंग.
- इसे ऑडियो के इस्तेमाल या एट्रिब्यूट के हिसाब से तय किया जा सकता है.
- इससे अवधि की सेटिंग को पसंद के मुताबिक सेट किया जा सकता है.
- इन सेटिंग का इस्तेमाल,
VolumeShaper.Configurationबनाने के लिए किया जाता है.
- फ़ेडिंग से जुड़ी नीतियां: ये ऐसे नियम होते हैं जिनसे यह तय होता है कि फ़ेडिंग कब होगी.
- यह एक ग्लोबल टॉगल है. इसका इस्तेमाल, फ़ेड होने की सुविधा को चालू या बंद करने के लिए किया जाता है.
- ऑडियो के इस्तेमाल की ऐसी सूची जिसे कॉन्फ़िगर किया जा सकता है और जिसमें फ़ेड-आउट की सुविधा उपलब्ध है. यह सुविधा तब काम करती है, जब ऑडियो पर फ़ोकस नहीं किया जा रहा हो.
- बाहर रखे गए प्लेसमेंट की सूचियों (अनफ़ेडेबल) की मदद से, अहम या चुने गए ऑडियो सोर्स को फ़ेड होने से रोका जा सकता है. ये सूचियां इस आधार पर बनाई जा सकती हैं:
- कॉन्टेंट टाइप
- ऑडियो एट्रिब्यूट
- ऐप्लिकेशन के यूआईडी (इन्हें सिर्फ़ रनटाइम के दौरान सेट किया जा सकता है)
ओईएम कॉन्फ़िगरेशन
इस सेक्शन में, हम ओईएम के लिए उपलब्ध कस्टम सुविधाओं के बारे में जानेंगे.
कार के ऑडियो फ़ेड कॉन्फ़िगरेशन की एक्सएमएल फ़ाइल
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 फ़ाइल का अपडेट किया गया वर्शन उपलब्ध है. अब यह वर्शन 4 है. इसमें नए applyFadeConfigs और fadeConfig टैग शामिल हैं.
applyFadeConfigs टैग में कई fadeConfig परिभाषाएं हो सकती हैं. इससे फ़ेड को आसानी से कॉन्फ़िगर किया जा सकता है. हर परिभाषा:
- इसमें एक डिफ़ॉल्ट
fadeConfigशामिल होना चाहिए, जिसेisDefault = trueके तौर पर तय किया गया हो. - इसमें कुछ समय के लिए उपलब्ध
fadeConfigकी कई परिभाषाएं शामिल की जा सकती हैं. ये अस्थायी कॉन्फ़िगरेशन, ऑडियो फ़ोकस खोने के दौरान होने वाली इंटरैक्शन के दौरान लागू होते हैं. साथ ही, ये सिर्फ़ तब लागू होते हैं, जब ऑडियो फ़ोकस पाने वाला ऐप्लिकेशन, अस्थायी कॉन्फ़िगरेशन में तय की गई शर्तों को पूरा करता हो.
इसे लागू करने के बारे में ज़्यादा जानकारी के लिए, device/generic/car/emulator/audio/car_audio_configuration.xml पर मौजूद एम्युलेटर के लिए दिए गए कॉन्फ़िगरेशन के उदाहरण देखें.
ओईएम की ऑडियो फ़ोकस सेवा का एक्सटेंशन
कस्टम कार ऑडियो फ़ोकस सेवा लागू करने वाले ओईएम के पास, ऑडियो फ़ेड की सेटिंग को कॉन्फ़िगर करने का विकल्प होता है. इसके लिए, उन्हें इन सेटिंग को OemCarAudioFocusResult में शामिल करना होगा.
इसके लिए, setAudioAttributesToCarAudioFadeConfigurationMap() बिल्डर तरीके का इस्तेमाल किया जा सकता है:
/** @see OemCarAudioFocusResult#getAudioAttributesToCarAudioFadeConfigurationMap() **/
@NonNull
public Builder setAudioAttributesToCarAudioFadeConfigurationMap(@NonNull
Map<AudioAttributes, CarAudioFadeConfiguration> attrsToCarAudioFadeConfig) {
}
खास तौर पर, ओईएम के पास बूट-टाइम फ़ेड की पहले से कॉन्फ़िगर की गई सेटिंग इस्तेमाल करने का विकल्प होता है. इसके अलावा, वे अपनी कस्टम ऑडियो फ़ोकस सेवा के ज़रिए डाइनैमिक तरीके से कॉन्फ़िगरेशन लागू कर सकते हैं. इससे उन्हें अडैप्टिव कंट्रोल मिलता है.
सीक्वेंस डायग्राम
इस सीक्वेंस डायग्राम में, App2 को ऑडियो फ़ोकस का ऐक्सेस मिलने और उसके बाद App1 के ऑडियो फ़ोकस का ऐक्सेस खोने के बारे में बताया गया है:
- कार की ऑडियो सेवा के
App1को ऑडियो फ़ोकस खोने की सूचना भेजने पर,App1प्लेयर से चल रहा ऑडियो, चालूFadeManagerConfigurationके हिसाब से धीरे-धीरे बंद हो जाता है. फ़ेड-आउट की प्रोसेस पूरी होने के बाद,App1को ऑडियो फ़ोकस खोने का स्टैंडर्ड कॉलबैक मिलता है. - इसके अलावा, कॉन्फ़िगर की जा सकने वाली अवधि के बाद,
App1के ऑडियो को फिर से चालू किया जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है. ओईएम के पास, इस अवधि को सेट करने का विकल्प होता है. वे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 के नेटवर्क में बेहतर तरीके से शामिल किया जा सकेगा. साथ ही, उपयोगकर्ताओं को बेहतर अनुभव दिया जा सकेगा.
HAL यह तय करता है कि किन आवाज़ों को प्राथमिकता दी जानी चाहिए. इस हद तक, आपातकालीन और सुरक्षा से जुड़े ज़रूरी साउंड को हमेशा चलाया जाना चाहिए. भले ही, एचएएल को ऑडियो फ़ोकस करने की अनुमति मिली हो या नहीं. साथ ही, एचएएल के ऑडियो फ़ोकस करने की अनुमति खो देने पर भी, इन साउंड को ज़रूरत के हिसाब से चलाया जाना चाहिए. सरकारी नियमों के तहत ज़रूरी किसी भी आवाज़ के लिए भी यही नियम लागू होता है.
जब आपातकालीन या सुरक्षा से जुड़ी अहम आवाज़ें सुनाई जा रही हों, तब HAL को Android स्ट्रीम को ज़रूरत के हिसाब से म्यूट कर देना चाहिए, ताकि वे आवाज़ें साफ़ तौर पर सुनाई दें.
AudioControl@2.0
AudioControl HAL के वर्शन 2.0 में ये नए एपीआई जोड़े गए हैं:
| एपीआई | मकसद |
|---|---|
IAudioControl#registerFocusListener |
यह कुकी, AudioControl HAL के साथ IFocusListener के इंस्टेंस को रजिस्टर करती है. इस लिसनर की मदद से, HAL ऑडियो फ़ोकस का अनुरोध कर सकता है और उसे छोड़ सकता है. एचएएल, ICloseHandle इंस्टेंस उपलब्ध कराता है. इसका इस्तेमाल Android, लिसनर को अनरजिस्टर करने के लिए करता है. |
IAudioControl#onAudioFocusChange |
यह HAL को, IFocusListener के ज़रिए HAL के किए गए फ़ोकस अनुरोधों की स्थिति में हुए बदलावों के बारे में सूचना देता है. इसमें फ़ोकस के शुरुआती अनुरोधों के जवाब भी शामिल हैं. |
IFocusListener#requestAudioFocus |
ये अनुरोध, एचएएल की ओर से किए जाते हैं. इनमें इस्तेमाल का तरीका, ज़ोन आईडी, और फ़ोकस हासिल करने का टाइप शामिल होता है. |
IFocusListener#abandonAudioFocus |
इस फ़ंक्शन का इस्तेमाल करके, किसी खास इस्तेमाल और ज़ोन आईडी के लिए, फ़ोकस के मौजूदा एचएएल अनुरोधों को रद्द किया जाता है. |
HAL एक ही समय में फ़ोकस करने के कई अनुरोध कर सकता है. हालांकि, इस्तेमाल और ज़ोन आईडी की पेयरिंग के हिसाब से, सिर्फ़ एक अनुरोध किया जा सकता है. Android यह मान लेता है कि अनुरोध किए जाने के बाद, HAL तुरंत आवाज़ें चलाना शुरू कर देता है. साथ ही, जब तक फ़ोकस नहीं हट जाता, तब तक आवाज़ें चलाता रहता है.
registerFocusListener के अलावा, ये अनुरोध oneway होते हैं, ताकि फ़ोकस के अनुरोध को प्रोसेस करते समय Android, HAL में देरी न करे. HAL को सुरक्षा से जुड़ी अहम आवाज़ें चलाने से पहले, फ़ोकस हासिल करने के लिए इंतज़ार नहीं करना चाहिए. IAudioControl#onAudioFocusChange के ज़रिए ऑडियो फ़ोकस में होने वाले बदलावों को सुनने और उनका जवाब देने के लिए, HAL के पास विकल्प होता है.
OEM कार ऑडियो फ़ोकस सेवा
Android 14 में, AAOS ने कार ओईएम प्लगिन सेवाएं लॉन्च की हैं. इनकी मदद से, कार के कुछ कॉम्पोनेंट को कॉन्फ़िगर किया जा सकता है. Car Audio Plugin Service के लिए, प्लगिन सेवा ओईएम को कार ऑडियो सेवा से इंटरसेप्ट किए गए फ़ोकस अनुरोधों को मैनेज करने की अनुमति देती है. इससे ओईएम को नियमों और कानूनों के मुताबिक, फ़ोकस को मैनेज करने में ज़्यादा आसानी होती है. इसलिए, ऑडियो फ़ोकस की सुविधा के साथ इंटरैक्ट करने का तरीका, डिवाइस बनाने वाली कंपनियों के हिसाब से अलग-अलग हो सकता है. साथ ही, यह सुविधा अलग-अलग देशों/इलाकों में अलग-अलग तरीके से काम कर सकती है. ऑडियो फ़ोकस के लिए बुनियादी सिद्धांत अब भी लागू होते हैं. इसका मतलब है कि ऐप्लिकेशन को अब भी ऑडियो को बेहतर तरीके से मैनेज करने के लिए फ़ोकस का अनुरोध करना चाहिए, ताकि उपयोगकर्ता अनुभव को बेहतर बनाया जा सके. आम तौर पर, ऐप्लिकेशन के ऑडियो फ़ोकस के अनुरोध पर अब भी कुछ नियम लागू होते हैं:
बिना किसी स्टैंड के, उच्च प्राथमिकता वाले ऑडियो फ़ोकस (फ़ोन कॉल, खतरे की चेतावनी या सुरक्षा सूचना सहित) वाले ऐप्लिकेशन कुछ समय के लिए या हमेशा के लिए ऑडियो फ़ोकस करने की अनुमति पा सकते हैं.
मीडिया फ़ोकस चालू होने पर:
कॉल के इस्तेमाल पर फ़ोकस करने का अनुरोध करने वाले ऐप्लिकेशन, कॉल को एक साथ या सिर्फ़ एक बार में रिसीव कर सकते हैं.
नेविगेशन के लिए डिवाइस को नेविगेट करने की सुविधा का इस्तेमाल करने का अनुरोध करने वाले ऐप्लिकेशन, एक साथ या अलग-अलग तौर पर नेविगेशन के लिए डिवाइस को नेविगेट करने की सुविधा का इस्तेमाल कर सकते हैं.
जिन ऐप्लिकेशन को असिस्टेंट के इस्तेमाल पर फ़ोकस करने का अनुरोध करना है उन्हें एक साथ या अलग-अलग तौर पर इस्तेमाल पर फ़ोकस करने की सुविधा मिलनी चाहिए.
ज़्यादा प्राथमिकता वाले ऑडियो फ़ोकस (जैसे कि फ़ोन कॉल, आपातकालीन सूचना या सुरक्षा से जुड़ी सूचना) वाले ऐप्लिकेशन चालू होने पर, ऑडियो फ़ोकस के लिए आने वाले किसी भी अनुरोध को ज़रूरत के मुताबिक अनुमति दी जानी चाहिए या उसे कुछ समय के लिए रोका जाना चाहिए.
हालांकि, ये सुझाव पूरी तरह से नहीं दिए गए हैं, लेकिन इनसे फ़ोकस का अनुरोध करने वाले ऐप्लिकेशन को फ़ोकस हासिल करने में मदद मिल सकती है. ऐसा तब होता है, जब कोई भी ज़्यादा प्राथमिकता वाली आवाज़ मौजूद न हो. ज़्यादा प्राथमिकता वाली आवाज़ें चालू होने पर भी, फ़ोकस के लिए किए गए बाद के अनुरोधों को स्वीकार किया जाना चाहिए. साथ ही, ज़्यादा प्राथमिकता वाली आवाज़ें बंद होने पर, फ़ोकस के लिए किए गए बाद के अनुरोधों को फ़ोकस हासिल करने की अनुमति दी जानी चाहिए.