Android Automotive OS (AAOS), कोर Android ऑडियो स्टैक पर बना है. यह किसी गाड़ी में सूचना और मनोरंजन वाले डिवाइस के तौर पर काम करने के लिए, इस्तेमाल के अलग-अलग मामलों को सपोर्ट करता है. AAOS, सूचना और मनोरंजन से जुड़ी आवाज़ों (जैसे, मीडिया, नेविगेशन, और बातचीत) के लिए ज़िम्मेदार है. हालांकि, यह उन चेतावनियों और आवाज़ों के लिए सीधे तौर पर ज़िम्मेदार नहीं है जो एक तय समय पर और तय शर्तों के हिसाब से ही सुनाई देती हैं.
AAOS, गाड़ी में ऑडियो मैनेज करने के लिए सिग्नल और तरीके उपलब्ध कराता है. हालांकि, यह तय करना गाड़ी पर निर्भर करता है कि ड्राइवर और यात्रियों के लिए कौनसी आवाज़ें सुनाई देनी चाहिए. साथ ही, यह भी तय करना गाड़ी पर निर्भर करता है कि सुरक्षा से जुड़ी अहम चेतावनियां और कानूनी तौर पर ज़रूरी चेतावनियां, बिना किसी रुकावट के सुनाई दें.
AAOS, Android ऑडियो स्टैक का इस्तेमाल करता है. इसलिए, ऑडियो चलाने वाले तीसरे पक्ष के ऐप्लिकेशन को फ़ोन में इस्तेमाल करने के मुकाबले, अलग से कोई बदलाव करने की ज़रूरत नहीं होती. ऑडियो नीति कॉन्फ़िगरेशन में बताए गए तरीके के मुताबिक, AAOS, ऐप्लिकेशन के ऑडियो राउटिंग को अपने-आप मैनेज करता है.
Android, गाड़ी में मीडिया के अनुभव को मैनेज करता है. इसलिए, रेडियो ट्यूनर जैसे बाहरी मीडिया सोर्स को ऐप्लिकेशन के ज़रिए दिखाया जाना चाहिए. ये ऐप्लिकेशन, सोर्स के लिए ऑडियो फ़ोकस और मीडिया कुंजी इवेंट को मैनेज कर सकते हैं.
Android की आवाज़ें और स्ट्रीम
ऑटोमोटिव ऑडियो सिस्टम, इन आवाज़ों और स्ट्रीम को मैनेज करते हैं:
पहली इमेज. स्ट्रीम-सेंट्रिक आर्किटेक्चर डायग्राम.
Android, Android ऐप्लिकेशन से आने वाली आवाज़ों को मैनेज करता है. साथ ही, इन ऐप्लिकेशन को कंट्रोल करता है और आवाज़ के टाइप के आधार पर, HAL पर मौजूद आउटपुट डिवाइसों पर उनकी आवाज़ें भेजता है:
लॉजिकल स्ट्रीम को कोर ऑडियो नोमेनक्लेचर में सोर्स के तौर पर जाना जाता है. इन्हें ऑडियो एट्रिब्यूट के साथ टैग किया जाता है.
फ़िज़िकल स्ट्रीम को कोर ऑडियो नोमेनक्लेचर में डिवाइस के तौर पर जाना जाता है. मिक्सिंग के बाद, इनके पास कोई कॉन्टेक्स्ट की जानकारी नहीं होती.
भरोसेमंद तरीके से काम करने के लिए, बाहरी आवाज़ों (जैसे, सीट बेल्ट की चेतावनी की आवाज़ें) को Android के बाहर, HAL के नीचे या अलग हार्डवेयर में मैनेज किया जाता है. सिस्टम को लागू करने वाले लोगों को एक मिक्सर उपलब्ध कराना होगा. यह मिक्सर, Android से आने वाली एक या उससे ज़्यादा आवाज़ों की स्ट्रीम को स्वीकार करता है. इसके बाद, इन स्ट्रीम को गाड़ी के लिए ज़रूरी बाहरी ऑडियो सोर्स के साथ मिलाकर, सही तरीके से चलाता है. Android Control HAL, Android के बाहर जनरेट होने वाली आवाज़ों को वापस Android तक पहुंचाने के लिए, एक अलग तरीका उपलब्ध कराता है:
- ऑडियो फ़ोकस का अनुरोध
- आवाज़ या वॉल्यूम की सीमाएं
- आवाज़ और वॉल्यूम में बदलाव
ऑडियो HAL को लागू करने और बाहरी मिक्सर की ज़िम्मेदारी होती है कि सुरक्षा से जुड़ी अहम चेतावनियां सुनाई दें. साथ ही, Android से मिलने वाली स्ट्रीम को मिलाकर, सही स्पीकर पर भेजा जाए.
Android की आवाज़ें
ऐप्लिकेशन में एक या उससे ज़्यादा प्लेयर हो सकते हैं. ये प्लेयर, ऑडियो डेटा की एक या उससे ज़्यादा लॉजिकल स्ट्रीम जनरेट करने के लिए, स्टैंडर्ड Android एपीआई (उदाहरण के लिए, फ़ोकस कंट्रोल के लिए AudioManager या स्ट्रीमिंग के लिए MediaPlayer ) के ज़रिए इंटरैक्ट करते हैं. यह डेटा, सिंगल चैनल मोनो या 7.1 सराउंड हो सकता है. हालांकि, इसे एक सोर्स के तौर पर राउट और ट्रीट किया जाता है. ऐप्लिकेशन स्ट्रीम, AudioAttributes से जुड़ी होती है. ये एट्रिब्यूट, सिस्टम को इस बारे में हिंट देते हैं कि ऑडियो को कैसे चलाया जाना चाहिए.
लॉजिकल स्ट्रीम, AudioService के ज़रिए भेजी जाती हैं और उपलब्ध फ़िज़िकल आउटपुट स्ट्रीम में से किसी एक (और सिर्फ़ एक) पर राउट की जाती हैं. इनमें से हर स्ट्रीम, AudioFlinger में मौजूद मिक्सर का आउटपुट होती है. ऑडियो एट्रिब्यूट को फ़िज़िकल स्ट्रीम में मिक्स करने के बाद, वे उपलब्ध नहीं होते.
इसके बाद, हर फ़िज़िकल स्ट्रीम को हार्डवेयर पर रेंडर करने के लिए, ऑडियो HAL को भेजा जाता है. ऑटोमोटिव ऐप्लिकेशन में, रेंडरिंग हार्डवेयर, लोकल कोडेक (मोबाइल डिवाइसों की तरह) या गाड़ी के फ़िज़िकल नेटवर्क में मौजूद कोई रिमोट प्रोसेसर हो सकता है. दोनों ही मामलों में, ऑडियो HAL को लागू करने की ज़िम्मेदारी होती है कि वह असली सैंपल डेटा उपलब्ध कराए और उसे सुना जा सके.
बाहरी स्ट्रीम
आवाज़ की वे स्ट्रीम जिन्हें सर्टिफ़िकेशन या टाइमिंग की वजहों से, Android के ज़रिए राउट नहीं किया जाना चाहिए उन्हें सीधे बाहरी मिक्सर पर भेजा जा सकता है. Android 11 से, HAL अब इन बाहरी आवाज़ों के लिए फ़ोकस का अनुरोध कर सकता है, ताकि Android को इस बारे में जानकारी दी जा सके. इससे Android, मीडिया को रोकने या दूसरों को फ़ोकस पाने से रोकने जैसी ज़रूरी कार्रवाइयां कर सकता है.
अगर बाहरी स्ट्रीम, मीडिया सोर्स हैं और उन्हें Android से जनरेट होने वाले साउंड एनवायरमेंट के साथ इंटरैक्ट करना चाहिए (उदाहरण के लिए, बाहरी ट्यूनर चालू होने पर MP3 प्लेबैक को रोकना), तो इन बाहरी स्ट्रीम को Android ऐप्लिकेशन के ज़रिए दिखाया जाना चाहिए. ऐसा ऐप्लिकेशन, HAL के बजाय मीडिया सोर्स की ओर से ऑडियो फ़ोकस का अनुरोध करेगा. साथ ही, Android की फ़ोकस नीति के मुताबिक, बाहरी सोर्स को शुरू और बंद करके, फ़ोकस से जुड़ी सूचनाओं का जवाब देगा.
ऐप्लिकेशन, मीडिया कुंजी इवेंट (जैसे, चलाने और रोकने) को मैनेज करने के लिए भी ज़िम्मेदार होता है. ऐसे बाहरी डिवाइसों को कंट्रोल करने के लिए, HwAudioSource का इस्तेमाल किया जा सकता है. ज़्यादा जानने के लिए, AAOS में इनपुट डिवाइस कनेक्ट करना लेख पढ़ें.
आउटपुट डिवाइस
ऑडियो HAL लेवल पर, डिवाइस टाइप AUDIO_DEVICE_OUT_BUS, गाड़ी के ऑडियो सिस्टम में इस्तेमाल के लिए एक सामान्य आउटपुट डिवाइस उपलब्ध कराता है. बस डिवाइस, एड्रेस किए जा सकने वाले पोर्ट (जहां हर पोर्ट, फ़िज़िकल स्ट्रीम का एंड पॉइंट होता है) को सपोर्ट करता है. साथ ही, उम्मीद की जाती है कि यह किसी गाड़ी में, आउटपुट डिवाइस का सिर्फ़ एक टाइप होगा.
सिस्टम को लागू करने के लिए, सभी Android आवाज़ों के लिए एक बस पोर्ट का इस्तेमाल किया जा सकता है. इस मामले में, Android सभी आवाज़ों को एक साथ मिक्स करता है और उन्हें एक स्ट्रीम के तौर पर उपलब्ध कराता है. इसके अलावा, HAL, हर CarAudioContext के लिए एक बस पोर्ट उपलब्ध करा सकता है, ताकि किसी भी तरह की आवाज़ को एक साथ चलाया जा सके. इससे, HAL को लागू करने के लिए, अलग-अलग आवाज़ों को अपनी ज़रूरत के हिसाब से मिक्स और डक करना मुमकिन हो जाता है.
आउटपुट डिवाइसों को ऑडियो कॉन्टेक्स्ट असाइन करने के लिए, car_audio_configuration.xml फ़ाइल का इस्तेमाल किया जाता है. ज़्यादा जानने के लिए, ऑडियो नीति कॉन्फ़िगरेशन लेख पढ़ें.