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