लॉजिकल स्ट्रीम शुरू करने से पहले, ऐप्लिकेशन ऑडियो फ़ोकस का अनुरोध करता है. इसके लिए, वही ऑडियो एट्रिब्यूट इस्तेमाल किए जाते हैं जो लॉजिकल स्ट्रीम के लिए इस्तेमाल किए जाते हैं. ऑटोमोटिव से जुड़े इस्तेमाल के उदाहरणों में, ऐप्लिकेशन को फ़ोकस खोने की स्थिति में भी उम्मीद के मुताबिक काम करना चाहिए.
फ़ोकस करने का अनुरोध भेजने का सुझाव दिया जाता है. हालांकि, सिस्टम इसे लागू नहीं करता. इसलिए, फ़ोकस को ऑडियो कंट्रोल करने के मुख्य तरीके के बजाय, प्लेबैक के दौरान ऑडियो को परोक्ष रूप से कंट्रोल करने और टकराव से बचने के तरीके के तौर पर इस्तेमाल करें. ऑडियो सबसिस्टम के काम करने के लिए, वाहन को फ़ोकस सिस्टम पर निर्भर नहीं रहना चाहिए.
फ़ोकस इंटरैक्शन
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_REQUEST_DELAYED
का सिंक्रोनस जवाब मिलता है.जिन अनुरोधों को कुछ समय के लिए रोका जा सकता है उनमें
OnAudioFocusChangeListener
होना चाहिए. अनुरोध में देरी होने पर, इस लिसनर का इस्तेमाल अनुरोध करने वाले व्यक्ति को सूचना देने के लिए किया जाता है. सूचना तब दी जाती है, जब अनुरोध को मंज़ूरी मिल जाती है (AUDIOFOCUS_GAIN
) या बाद में अस्वीकार कर दिया जाता है (AUDIOFOCUS_LOSS
).
Request delayable focus
ऐसा अनुरोध बनाने के लिए जिसे कुछ समय बाद पूरा किया जा सकता है:
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
पर मौजूद एम्युलेटर के लिए दिए गए कॉन्फ़िगरेशन के उदाहरण देखें.
OEM ऑडियो फ़ोकस सेवा एक्सटेंशन
कस्टम कार ऑडियो फ़ोकस सेवा लागू करने वाले ओईएम के पास, ऑडियो फ़ेड सेटिंग को कॉन्फ़िगर करने का विकल्प होता है. इसके लिए, उन्हें इन सेटिंग को 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 से, HAL को बाहरी स्ट्रीम की ओर से फ़ोकस का अनुरोध करने की अनुमति दी गई है. इन एपीआई का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, हमारा सुझाव है कि इनका इस्तेमाल किया जाए, ताकि बाहरी साउंड, Android के नेटवर्क में बेहतर तरीके से काम कर सकें. साथ ही, उपयोगकर्ताओं को बेहतर अनुभव मिल सके.
HAL यह तय करता है कि किन आवाज़ों को प्राथमिकता दी जानी चाहिए. इस हद तक, आपातकालीन और सुरक्षा से जुड़े ज़रूरी साउंड को हमेशा चलाया जाना चाहिए. भले ही, एचएएल को ऑडियो फ़ोकस दिया गया हो या नहीं. साथ ही, एचएएल का ऑडियो फ़ोकस हट जाने पर भी, इन साउंड को ज़रूरत के हिसाब से चलाया जाना चाहिए. सरकारी नियमों के तहत ज़रूरी किसी भी आवाज़ के लिए भी यही बात लागू होती है.
आपातकालीन या सुरक्षा से जुड़ी ज़रूरी आवाज़ें चलाने के दौरान, HAL को Android स्ट्रीम को अपने-आप म्यूट कर देना चाहिए, ताकि वे आवाज़ें साफ़ तौर पर सुनाई दें.
AudioControl@2.0
AudioControl HAL के वर्शन 2.0 में ये नए एपीआई जोड़े गए हैं:
एपीआई | मकसद |
---|---|
IAudioControl#registerFocusListener |
यह AudioControl HAL के साथ IFocusListener के इंस्टेंस को रजिस्टर करता है. इस लिसनर की मदद से, HAL ऑडियो फ़ोकस का अनुरोध कर सकता है और उसे छोड़ सकता है. HAL, Android को एक ICloseHandle इंस्टेंस उपलब्ध कराता है, ताकि वह लिसनर को अनरजिस्टर कर सके. |
IAudioControl#onAudioFocusChange |
यह HAL को, HAL के IFocusListener के ज़रिए किए गए फ़ोकस के अनुरोधों की स्थिति में हुए बदलावों के बारे में सूचना देता है. इसमें फ़ोकस के शुरुआती अनुरोधों के जवाब भी शामिल हैं. |
IFocusListener#requestAudioFocus |
अनुरोध, एचएएल की ओर से किए जाते हैं. इनमें इस्तेमाल का तरीका, ज़ोन आईडी, और फ़ोकस हासिल करने का टाइप शामिल होता है. |
IFocusListener#abandonAudioFocus |
इस फ़ंक्शन का इस्तेमाल करके, किसी खास इस्तेमाल और ज़ोन के लिए, फ़ोकस के मौजूदा एचएएल अनुरोधों को रद्द किया जा सकता है. |
HAL एक ही समय में फ़ोकस के कई अनुरोध कर सकता है. हालांकि, यह एक बार में सिर्फ़ एक अनुरोध कर सकता है. साथ ही, यह सिर्फ़ एक ज़ोन आईडी के साथ पेयर किया जा सकता है. Android यह मान लेता है कि अनुरोध किए जाने के बाद, HAL तुरंत आवाज़ें चलाना शुरू कर देता है. साथ ही, जब तक फ़ोकस नहीं हट जाता, तब तक आवाज़ें चलाता रहता है.
registerFocusListener
के अलावा, ये अनुरोध oneway
होते हैं, ताकि फ़ोकस के अनुरोध को प्रोसेस करते समय Android, HAL में देरी न करे. HAL को सुरक्षा से जुड़ी अहम आवाज़ें चलाने से पहले, फ़ोकस हासिल करने के लिए इंतज़ार नहीं करना चाहिए. IAudioControl#onAudioFocusChange
के ज़रिए ऑडियो फ़ोकस में होने वाले बदलावों को सुनने और उनका जवाब देने के लिए, HAL के पास विकल्प होता है.
OEM कार ऑडियो फ़ोकस सेवा
Android 14 में, AAOS ने कार ओईएम प्लगिन सेवाओं को लॉन्च किया है. इससे कार के कुछ कॉम्पोनेंट को कॉन्फ़िगर किया जा सकता है. कार ऑडियो प्लगिन सेवा के लिए, प्लगिन सेवा की मदद से ओईएम, कार ऑडियो सेवा से इंटरसेप्ट किए गए फ़ोकस के अनुरोधों को मैनेज कर सकते हैं. इससे ओईएम को नियमों और कानूनों के मुताबिक, फ़ोकस को मैनेज करने में ज़्यादा आसानी होती है. इसलिए, ऑडियो फ़ोकस की सुविधा के साथ इंटरैक्ट करने का तरीका, डिवाइस बनाने वाली कंपनियों के हिसाब से अलग-अलग हो सकता है. साथ ही, यह सुविधा अलग-अलग देशों/इलाकों में अलग-अलग तरीके से काम कर सकती है. ऑडियो फ़ोकस के लिए बुनियादी सिद्धांत अब भी लागू होते हैं. इसका मतलब है कि ऐप्लिकेशन को अब भी ऑडियो फ़ोकस का अनुरोध करना चाहिए, ताकि ऑडियो को बेहतर तरीके से मैनेज किया जा सके और उपयोगकर्ता अनुभव को बेहतर बनाया जा सके. आम तौर पर, ऐप्लिकेशन के ऑडियो फ़ोकस के अनुरोध पर अब भी कुछ नियम लागू होते हैं:
अगर किसी ऐप्लिकेशन को ऑडियो फ़ोकस करने की अनुमति नहीं मिली है, तो उसे कुछ समय के लिए या हमेशा के लिए ऑडियो फ़ोकस करने की अनुमति मिलनी चाहिए. हालांकि, ऐसा तब नहीं होना चाहिए, जब कोई फ़ोन कॉल, आपातकालीन सूचना या सुरक्षा से जुड़ी सूचना आ रही हो.
मीडिया फ़ोकस चालू होने पर:
कॉल के इस्तेमाल पर फ़ोकस करने वाले ऐप्लिकेशन को कॉल एक साथ या सिर्फ़ एक बार में मिलनी चाहिए.
नेविगेशन के लिए डिवाइस को नेविगेट करने की सुविधा का इस्तेमाल करने का अनुरोध करने वाले ऐप्लिकेशन, एक साथ या सिर्फ़ एक बार में नेविगेशन के लिए डिवाइस को नेविगेट करने की सुविधा का इस्तेमाल कर सकते हैं.
जिन ऐप्लिकेशन को Assistant के इस्तेमाल पर फ़ोकस करने का अनुरोध करना है वे एक साथ या अलग-अलग, इस्तेमाल पर फ़ोकस करने की सुविधा पा सकते हैं.
ज़्यादा प्राथमिकता वाले ऑडियो फ़ोकस (जैसे कि फ़ोन कॉल, आपातकालीन सूचना या सुरक्षा से जुड़ी सूचना) वाले ऐप्लिकेशन चालू होने पर, ऑडियो फ़ोकस के लिए आने वाले किसी भी अनुरोध को ज़रूरत के हिसाब से अनुमति दी जानी चाहिए या उसमें देरी की जानी चाहिए.
हालांकि, ये सुझाव पूरी तरह से नहीं दिए गए हैं, लेकिन इनसे फ़ोकस का अनुरोध करने वाले ऐप्लिकेशन को फ़ोकस हासिल करने में मदद मिल सकती है. ऐसा तब होता है, जब ज़्यादा प्राथमिकता वाली कोई आवाज़ नहीं सुनाई दे रही हो. ज़्यादा प्राथमिकता वाली आवाज़ें चालू होने पर भी, फ़ोकस के लिए किए गए अनुरोधों को पूरा किया जाना चाहिए. साथ ही, ज़्यादा प्राथमिकता वाली आवाज़ें बंद होने पर, फ़ोकस के लिए किए गए अनुरोधों को पूरा किया जाना चाहिए.