एंड्रॉइड ऑटोमोटिव ओएस (एएओएस) एक वाहन में इंफोटेनमेंट सिस्टम के रूप में संचालन के लिए उपयोग के मामलों का समर्थन करने के लिए कोर एंड्रॉइड ऑडियो स्टैक पर बनाता है। AAOS इंफोटेनमेंट साउंड (यानी, मीडिया, नेविगेशन और संचार) के लिए जिम्मेदार है, लेकिन झंकार और चेतावनियों के लिए सीधे तौर पर जिम्मेदार नहीं है, जिनकी उपलब्धता और समय की सख्त आवश्यकताएं हैं। जबकि एएओएस वाहन को ऑडियो प्रबंधित करने में मदद करने के लिए सिग्नल और तंत्र प्रदान करता है, अंत में यह वाहन पर निर्भर करता है कि चालक और यात्रियों के लिए कौन सी ध्वनियां बजाई जानी चाहिए, सुरक्षा सुनिश्चित करना महत्वपूर्ण ध्वनियां और नियामक ध्वनियां बिना ठीक से सुनी जाती हैं रुकावट।
चूंकि एंड्रॉइड वाहन के मीडिया अनुभव का प्रबंधन करता है, रेडियो ट्यूनर जैसे बाहरी मीडिया स्रोतों को ऐप्स द्वारा दर्शाया जाना चाहिए, जो स्रोत के लिए ऑडियो फोकस और मीडिया प्रमुख घटनाओं को संभाल सकता है।
Android 11 में ऑटोमोटिव-संबंधित ऑडियो समर्थन में निम्नलिखित परिवर्तन शामिल हैं:
- संबंधित यूजर आईडी के आधार पर स्वचालित ऑडियो जोन चयन
- ऑटोमोटिव-विशिष्ट ध्वनियों का समर्थन करने के लिए नई प्रणाली का उपयोग
- एचएएल ऑडियो फोकस सपोर्ट
- गैर-क्षणिक धाराओं के लिए विलंबित ऑडियो फोकस
- नेविगेशन और कॉल के बीच बातचीत को नियंत्रित करने के लिए उपयोगकर्ता सेटिंग
Android ध्वनियाँ और धाराएँ
ऑटोमोटिव ऑडियो सिस्टम निम्नलिखित ध्वनियों और धाराओं को संभालता है:
चित्र 1. स्ट्रीम-केंद्रित वास्तुकला आरेख
एंड्रॉइड एंड्रॉइड ऐप से आने वाली आवाज़ों का प्रबंधन करता है, उन ऐप्स को नियंत्रित करता है और ध्वनि के प्रकार के आधार पर एचएएल पर आउटपुट डिवाइस पर अपनी आवाज़ को रूट करता है:
- लॉजिकल स्ट्रीम , जिन्हें कोर ऑडियो नामकरण में स्रोत के रूप में जाना जाता है, को ऑडियो विशेषताओं के साथ टैग किया जाता है।
- कोर ऑडियो नामकरण में उपकरणों के रूप में जानी जाने वाली भौतिक धाराओं में मिश्रण के बाद कोई संदर्भ जानकारी नहीं होती है।
विश्वसनीयता के लिए, बाहरी ध्वनियाँ (स्वतंत्र स्रोतों से आती हैं जैसे सीटबेल्ट चेतावनी की झंकार) Android के बाहर, HAL के नीचे या अलग हार्डवेयर में भी प्रबंधित की जाती हैं। सिस्टम कार्यान्वयनकर्ताओं को एक मिक्सर प्रदान करना चाहिए जो एंड्रॉइड से ध्वनि इनपुट की एक या अधिक धाराओं को स्वीकार करता है और फिर उन धाराओं को वाहन द्वारा आवश्यक बाहरी ध्वनि स्रोतों के साथ उपयुक्त तरीके से जोड़ता है।
एचएएल कार्यान्वयन और बाहरी मिक्सर यह सुनिश्चित करने के लिए जिम्मेदार हैं कि सुरक्षा-महत्वपूर्ण बाहरी आवाज़ें सुनी जाती हैं और एंड्रॉइड द्वारा प्रदान की गई धाराओं में मिश्रण करने और उन्हें उपयुक्त स्पीकर तक पहुंचाने के लिए जिम्मेदार हैं।
Android लगता है
ऐप्स में एक या अधिक प्लेयर हो सकते हैं जो मानक Android API (उदाहरण के लिए, फ़ोकस नियंत्रण के लिए AudioManager या स्ट्रीमिंग के लिए MediaPlayer ) के माध्यम से इंटरैक्ट करते हैं, ताकि ऑडियो डेटा की एक या अधिक तार्किक स्ट्रीम निकल सकें। यह डेटा सिंगल चैनल मोनो या 7.1 सराउंड हो सकता है, लेकिन इसे रूट किया जाता है और इसे एकल स्रोत के रूप में माना जाता है। ऐप स्ट्रीम AudioAttributes से जुड़ी है जो सिस्टम को संकेत देती है कि ऑडियो को कैसे व्यक्त किया जाना चाहिए।
तार्किक धाराएँ AudioService के माध्यम से भेजी जाती हैं और उपलब्ध भौतिक आउटपुट स्ट्रीमों में से एक (और केवल एक) के लिए रूट की जाती हैं, जिनमें से प्रत्येक AudioFlinger के भीतर मिक्सर का आउटपुट है। ऑडियो विशेषताओं को भौतिक स्ट्रीम में मिश्रित करने के बाद, वे अब उपलब्ध नहीं हैं।
हार्डवेयर पर प्रतिपादन के लिए प्रत्येक भौतिक स्ट्रीम को ऑडियो एचएएल को दिया जाता है। ऑटोमोटिव ऐप्स में, रेंडरिंग हार्डवेयर स्थानीय कोडेक (मोबाइल उपकरणों के समान) या वाहन के भौतिक नेटवर्क पर रिमोट प्रोसेसर हो सकता है। किसी भी तरह से, ऑडियो एचएएल कार्यान्वयन का काम वास्तविक नमूना डेटा वितरित करना है और इसे श्रव्य बनने का कारण बनता है।
बाहरी धाराएं
ध्वनि स्ट्रीम जिन्हें एंड्रॉइड के माध्यम से रूट नहीं किया जाना चाहिए (प्रमाणीकरण या समय के कारणों के लिए) सीधे बाहरी मिक्सर को भेजा जा सकता है। एंड्रॉइड 11 के रूप में, एचएएल अब एंड्रॉइड को सूचित करने के लिए इन बाहरी ध्वनियों पर ध्यान केंद्रित करने का अनुरोध करने में सक्षम है, ताकि वह मीडिया को रोकने या दूसरों को ध्यान केंद्रित करने से रोकने जैसी उचित कार्रवाई कर सके।
यदि बाहरी स्ट्रीम मीडिया स्रोत हैं जो एंड्रॉइड द्वारा उत्पन्न ध्वनि वातावरण के साथ इंटरैक्ट करना चाहिए (उदाहरण के लिए, बाहरी ट्यूनर चालू होने पर एमपी 3 प्लेबैक बंद करें), तो उन बाहरी स्ट्रीम को एंड्रॉइड ऐप द्वारा दर्शाया जाना चाहिए। ऐसा ऐप एचएएल के बजाय मीडिया स्रोत की ओर से ऑडियो फोकस का अनुरोध करेगा, और एंड्रॉइड फोकस पॉलिसी में फिट होने के लिए बाहरी स्रोत को शुरू/बंद करके फोकस नोटिफिकेशन का जवाब देगा। ऐप मीडिया की प्रमुख घटनाओं जैसे कि प्ले / पॉज़ को संभालने के लिए भी जिम्मेदार है। ऐसे बाहरी उपकरणों को नियंत्रित करने के लिए एक सुझाया गया तंत्र HwAudioSource है।
आउटपुट डिवाइस
ऑडियो एचएएल स्तर पर, डिवाइस प्रकार AUDIO_DEVICE_OUT_BUS
वाहन ऑडियो सिस्टम में उपयोग के लिए एक सामान्य आउटपुट डिवाइस प्रदान करता है। बस डिवाइस एड्रेसेबल पोर्ट का समर्थन करता है (जहां प्रत्येक पोर्ट एक भौतिक स्ट्रीम के लिए अंतिम बिंदु है) और वाहन में एकमात्र समर्थित आउटपुट डिवाइस प्रकार होने की उम्मीद है।
एक सिस्टम कार्यान्वयन सभी एंड्रॉइड ध्वनियों के लिए एक बस पोर्ट का उपयोग कर सकता है, इस स्थिति में एंड्रॉइड सब कुछ एक साथ मिलाता है और इसे एक स्ट्रीम के रूप में वितरित करता है। वैकल्पिक रूप से, एचएएल प्रत्येक CarAudioContext
के लिए एक बस पोर्ट प्रदान कर सकता है ताकि किसी भी ध्वनि प्रकार की समवर्ती डिलीवरी की अनुमति मिल सके। यह एचएएल कार्यान्वयन के लिए वांछित विभिन्न ध्वनियों को मिलाना और चकमा देना संभव बनाता है।
आउटपुट उपकरणों के लिए ऑडियो संदर्भों का असाइनमेंटcar_audio_configuration.xml
के माध्यम से किया जाता है।
माइक्रोफ़ोन इनपुट
ऑडियो कैप्चर करते समय, ऑडियो एचएएल को एक openInputStream
कॉल प्राप्त होता है जिसमें एक AudioSource
तर्क शामिल होता है जो यह दर्शाता है कि माइक्रोफ़ोन इनपुट को कैसे संसाधित किया जाना चाहिए।
VOICE_RECOGNITION
स्रोत (विशेष रूप से Google सहायक) एक स्टीरियो माइक्रोफोन स्ट्रीम की अपेक्षा करता है जिसमें एक इको रद्दीकरण प्रभाव होता है (यदि उपलब्ध हो) लेकिन उस पर कोई अन्य प्रसंस्करण लागू नहीं होता है। बीमफॉर्मिंग सहायक द्वारा किए जाने की उम्मीद है।
मल्टी-चैनल माइक्रोफोन इनपुट
दो से अधिक चैनलों (स्टीरियो) वाले डिवाइस से ऑडियो कैप्चर करने के लिए, पोजिशनल इंडेक्स मास्क (जैसे CHANNEL_IN_LEFT
) के बजाय चैनल इंडेक्स मास्क का उपयोग करें। उदाहरण:
final AudioFormat audioFormat = new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelIndexMask(0xf /* 4 channels, 0..3 */) .build(); final AudioRecord audioRecord = new AudioRecord.Builder() .setAudioFormat(audioFormat) .build(); audioRecord.setPreferredDevice(someAudioDeviceInfo);
जब setChannelMask
और setChannelIndexMask
दोनों सेट होते हैं, AudioRecord
केवल setChannelMask
(अधिकतम दो चैनल) द्वारा निर्धारित मान का उपयोग करता है।
समवर्ती कब्जा
एंड्रॉइड 10 के अनुसार, एंड्रॉइड फ्रेमवर्क इनपुट के समवर्ती कैप्चरिंग का समर्थन करता है, लेकिन उपयोगकर्ता की गोपनीयता की रक्षा के लिए प्रतिबंधों के साथ। इन प्रतिबंधों के भाग के रूप में, AUDIO_SOURCE_FM_TUNER
जैसे आभासी स्रोतों को नज़रअंदाज़ कर दिया जाता है, और इस तरह उन्हें नियमित इनपुट (जैसे माइक्रोफ़ोन) के साथ-साथ कैप्चर करने की अनुमति दी जाती है। HwAudioSources
को समवर्ती कैप्चर प्रतिबंधों के भाग के रूप में भी नहीं माना जाता है।
AUDIO_DEVICE_IN_BUS
उपकरणों या द्वितीयक AUDIO_DEVICE_IN_FM_TUNER
उपकरणों के साथ काम करने के लिए डिज़ाइन किए गए ऐप्स को उन उपकरणों की स्पष्ट रूप से पहचान करने और Android डिफ़ॉल्ट स्रोत चयन तर्क को बायपास करने के लिए AudioRecord.setPreferredDevice()
का उपयोग करने पर भरोसा करना चाहिए।
ऑडियो उपयोग
AAOS मुख्य रूप से AudioAttributes.AttributeUsages
का उपयोग रूटिंग, वॉल्यूम समायोजन और फ़ोकस प्रबंधन के लिए करता है। उपयोग "क्यों" धारा का प्रतिनिधित्व करते हैं। इसलिए, सभी स्ट्रीम और ऑडियो फ़ोकस अनुरोधों को उनके ऑडियो प्लेबैक के लिए उपयोग निर्दिष्ट करना चाहिए। जब AudioAttributes ऑब्जेक्ट बनाते समय विशेष रूप से सेट नहीं किया जाता है, तो उपयोग डिफ़ॉल्ट रूप से USAGE_UNKOWN
हो जाएगा। जबकि वर्तमान में इसे USAGE_MEDIA
के समान माना जाता है, मीडिया प्लेबैक के लिए इस व्यवहार पर भरोसा नहीं किया जाना चाहिए।
सिस्टम उपयोग
एंड्रॉइड 11 में, सिस्टम यूसेज पेश किए गए थे। ये उपयोग पहले स्थापित उपयोगों के समान व्यवहार करते हैं, सिवाय इसके कि उन्हें सिस्टम एपीआई के साथ-साथ android.permission.MODIFY_AUDIO_ROUTING
का उपयोग करने की आवश्यकता होती है। नई प्रणाली के उपयोग हैं:
-
USAGE_EMERGENCY
-
USAGE_SAFETY
-
USAGE_VEHICLE_STATUS
-
USAGE_ANNOUNCEMENT
एक सिस्टम उपयोग के साथ एक AudioAttributes
बनाने के लिए, setUsage के बजाय setUsage
AudioAttributes.Builder#setSystemUsage
का उपयोग करें। गैर-सिस्टम उपयोग के साथ इस विधि को कॉल करने के परिणामस्वरूप IllegalArgumentException
को फेंक दिया जाएगा। साथ ही, यदि किसी बिल्डर पर सिस्टम उपयोग और उपयोग दोनों सेट किए गए हैं, तो यह निर्माण करते समय एक IllegalArgumentException
को फेंक देगा।
यह जांचने के लिए कि कौन सा उपयोग AudioAttributes
इंस्टेंस से जुड़ा है, AudioAttributes#getSystemUsage
पर कॉल करें। यह संबद्ध उपयोग या सिस्टम उपयोग लौटाता है।
ऑडियो संदर्भ
AAOS ऑडियो के कॉन्फ़िगरेशन को सरल बनाने के लिए, समान उपयोगों को CarAudioContext
में समूहीकृत किया गया है। इन ऑडियो संदर्भों का उपयोग पूरे CarAudioService
में रूटिंग, वॉल्यूम समूहों और ऑडियो फ़ोकस प्रबंधन को परिभाषित करने के लिए किया जाता है।
Android 11 में ऑडियो संदर्भ हैं:
कारऑडियो कॉन्टेक्स्ट | संबद्ध विशेषता उपयोग |
---|---|
MUSIC | UNKNOWN, GAME, MEDIA |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT, ASSISTANCE_ACCESSIBILITY |
CALL_RING | NOTIFICATION_RINGTONE |
CALL | VOICE_COMMUNICATION, VOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
NOTIFICATION | NOTIFICATION, NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
EMERGENCY | EMERGENCY |
SAFETY | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ANNOUNCEMENT | ANNOUNCEMENT |
ऑडियो संदर्भों और उपयोगों के बीच मानचित्रण। हाइलाइट की गई पंक्तियाँ नए सिस्टम उपयोग के लिए हैं।
मल्टी-ज़ोन ऑडियो
ऑटोमोटिव के साथ प्लेटफॉर्म के साथ इंटरैक्ट करने वाले समवर्ती उपयोगकर्ताओं और अलग मीडिया का उपभोग करने की तलाश में उपयोग के मामलों का एक नया सेट आता है। उदाहरण के लिए, एक ड्राइवर केबिन में संगीत चला सकता है जबकि पिछली सीट पर बैठे यात्री पीछे के डिस्प्ले पर एक YouTube वीडियो देख रहे हैं। मल्टी-ज़ोन ऑडियो विभिन्न ऑडियो स्रोतों को वाहन के विभिन्न क्षेत्रों के माध्यम से एक साथ चलाने की अनुमति देकर इसे सक्षम बनाता है।
एंड्रॉइड 10 में शुरू होने वाला मल्टी-ज़ोन ऑडियो ओईएम को ऑडियो को अलग-अलग ज़ोन में कॉन्फ़िगर करने में सक्षम बनाता है। प्रत्येक ज़ोन वाहन के भीतर अपने स्वयं के वॉल्यूम समूहों, संदर्भों के लिए रूटिंग कॉन्फ़िगरेशन और फ़ोकस प्रबंधन के साथ उपकरणों का एक संग्रह है। इस तरह, मुख्य केबिन को एक ऑडियो ज़ोन के रूप में कॉन्फ़िगर किया जा सकता है, जबकि रियर डिस्प्ले के हेडफ़ोन जैक को दूसरे ज़ोन के रूप में कॉन्फ़िगर किया जा सकता है।
क्षेत्रों को car_audio_configuration.xml
के भाग के रूप में परिभाषित किया गया है। CarAudioService
तब कॉन्फ़िगरेशन को पढ़ता है और AudioService को उनके संबद्ध क्षेत्र के आधार पर ऑडियो स्ट्रीम को रूट करने में मदद करता है। प्रत्येक क्षेत्र अभी भी संदर्भों और एप्लिकेशन यूआईडी के आधार पर रूटिंग के लिए नियमों को परिभाषित करता है। जब कोई खिलाड़ी बनाया जाता है, CarAudioService
यह निर्धारित करता है कि खिलाड़ी किस क्षेत्र से जुड़ा है, और फिर उपयोग के आधार पर, AudioFlinger को ऑडियो को किस डिवाइस पर रूट करना चाहिए।
प्रत्येक ऑडियो ज़ोन के लिए स्वतंत्र रूप से फ़ोकस भी बनाए रखा जाता है। यह विभिन्न क्षेत्रों में अनुप्रयोगों को एक दूसरे के साथ हस्तक्षेप किए बिना स्वतंत्र रूप से ऑडियो उत्पन्न करने में सक्षम बनाता है, जबकि एप्लिकेशन अभी भी अपने क्षेत्र के भीतर फोकस में बदलाव का सम्मान करते हैं। CarAudioService
के भीतर CarZonesAudioFocus
प्रत्येक ज़ोन के लिए फ़ोकस प्रबंधित करने के लिए ज़िम्मेदार है।
चित्रा 2. बहु-क्षेत्र ऑडियो कॉन्फ़िगर करें
ऑडियो एचएएल
ऑटोमोटिव ऑडियो कार्यान्वयन मानक Android ऑडियो HAL पर निर्भर करता है, जिसमें निम्नलिखित शामिल हैं:
-
IDevice.hal
। इनपुट और आउटपुट स्ट्रीम बनाता है, मास्टर वॉल्यूम और म्यूटिंग को संभालता है, और उपयोग करता है:-
createAudioPatch
। उपकरणों के बीच बाहरी-बाहरी पैच बनाने के लिए। -
IDevice.setAudioPortConfig()
प्रत्येक भौतिक स्ट्रीम के लिए वॉल्यूम प्रदान करने के लिए।
-
-
IStream.hal
। इनपुट और आउटपुट वेरिएंट के साथ, हार्डवेयर से ऑडियो सैंपल की स्ट्रीमिंग को मैनेज करता है।
ऑटोमोटिव डिवाइस प्रकार
ऑटोमोटिव प्लेटफॉर्म के लिए निम्नलिखित डिवाइस प्रकार प्रासंगिक हैं।
उपकरण का प्रकार | विवरण |
---|---|
AUDIO_DEVICE_OUT_BUS | एंड्रॉइड से प्राथमिक आउटपुट (इस प्रकार एंड्रॉइड से सभी ऑडियो वाहन तक पहुंचाया जाता है)। प्रत्येक संदर्भ के लिए धाराओं को स्पष्ट करने के लिए पते के रूप में उपयोग किया जाता है। |
AUDIO_DEVICE_OUT_TELEPHONY_TX | प्रसारण के लिए सेलुलर रेडियो पर भेजे गए ऑडियो के लिए उपयोग किया जाता है। |
AUDIO_DEVICE_IN_BUS | इनपुट के लिए उपयोग किया जाता है अन्यथा वर्गीकृत नहीं किया जाता है। |
AUDIO_DEVICE_IN_FM_TUNER | केवल प्रसारण रेडियो इनपुट के लिए उपयोग किया जाता है। |
AUDIO_DEVICE_IN_TV_TUNER | यदि मौजूद हो तो टीवी डिवाइस के लिए उपयोग किया जाता है। |
AUDIO_DEVICE_IN_LINE | औक्स इनपुट जैक के लिए प्रयुक्त। |
AUDIO_DEVICE_IN_BLUETOOTH_A2DP | ब्लूटूथ पर संगीत प्राप्त हुआ। |
AUDIO_DEVICE_IN_TELEPHONY_RX | फ़ोन कॉल से जुड़े सेल्युलर रेडियो से प्राप्त ऑडियो के लिए उपयोग किया जाता है। |
ऑडियो उपकरणों को कॉन्फ़िगर करना
Android के लिए दृश्यमान ऑडियो उपकरणों को /audio_policy_configuration.xml
में परिभाषित किया जाना चाहिए, जिसमें निम्नलिखित घटक शामिल हैं:
- मोड्यूल का नाम। "प्राथमिक" (ऑटोमोटिव उपयोग के मामलों के लिए प्रयुक्त), "A2DP", "remote_submix" और "USB" का समर्थन करता है। मॉड्यूल नाम और संबंधित ऑडियो ड्राइवर को
audio.primary.$(variant).so
में संकलित किया जाना चाहिए। - डिवाइसपोर्ट्स सभी इनपुट और आउटपुट डिवाइस (स्थायी रूप से संलग्न डिवाइस और हटाने योग्य डिवाइस शामिल हैं) के लिए डिवाइस डिस्क्रिप्टर की एक सूची शामिल है जिसे इस मॉड्यूल से एक्सेस किया जा सकता है।
- प्रत्येक आउटपुट डिवाइस के लिए, आप लाभ नियंत्रण को परिभाषित कर सकते हैं जिसमें मिलीबेल में न्यूनतम/अधिकतम/डिफ़ॉल्ट/चरण मान शामिल हैं (1 मिलीबेल = 1/100 डीबी = 1/1000 बेल)।
- डिवाइसपोर्ट इंस्टेंस पर पता विशेषता का उपयोग डिवाइस को खोजने के लिए किया जा सकता है, भले ही
AUDIO_DEVICE_OUT_BUS
के समान डिवाइस प्रकार वाले कई डिवाइस हों। - मिक्सपोर्ट्स ऑडियो एचएएल द्वारा उजागर सभी आउटपुट और इनपुट स्ट्रीम की एक सूची शामिल है। प्रत्येक मिक्सपोर्ट इंस्टेंस को Android AudioService के लिए एक भौतिक स्ट्रीम के रूप में माना जा सकता है।
- मार्ग। इनपुट और आउटपुट डिवाइस के बीच या स्ट्रीम और डिवाइस के बीच संभावित कनेक्शन की सूची को परिभाषित करता है।
निम्न उदाहरण एक आउटपुट डिवाइस बस0_फोन_आउट को परिभाषित करता है जिसमें सभी एंड्रॉइड ऑडियो स्ट्रीम मिक्सर_बस0_फोन_आउट द्वारा मिश्रित होते हैं। मार्ग mixer_bus0_phone_out
के आउटपुट स्ट्रीम को डिवाइस bus0_phone_out
पर ले जाता है।
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module name="primary" halVersion="3.0"> <attachedDevices> <item>bus0_phone_out</item> <defaultOutputDevice>bus0_phone_out</defaultOutputDevice> <mixPorts> <mixPort name="mixport_bus0_phone_out" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> </mixPorts> <devicePorts> <devicePort tagName="bus0_phone_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="BUS00_PHONE"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> <gains> <gain name="" mode="AUDIO_GAIN_MODE_JOINT" minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/> </gains> </devicePort> </devicePorts> <routes> <route type="mix" sink="bus0_phone_out" sources="mixport_bus0_phone_out"/> </routes> </module> </modules> </audioPolicyConfiguration>