Android 14 में डेवलपर एपीआई उपलब्ध हैं. इनका इस्तेमाल करके, ऐप्लिकेशन यूएसबी ऑडियो चलाने के लिए, पसंदीदा मिक्सर एट्रिब्यूट की क्वेरी कर सकते हैं और उन्हें कॉन्फ़िगर कर सकते हैं. पसंदीदा मिक्सर एट्रिब्यूट, ऐप्लिकेशन को ऑडियो फ़ॉर्मैट, चैनल मास्क, सैंपल रेट, और मिक्सर के काम करने के तरीके को सेट करने की अनुमति देते हैं. इससे, यूएसबी ऑडियो चलाने का अनुभव बेहतर होता है. काम करने वाले यूएसबी डिवाइसों पर, पसंदीदा मिक्सर एपीआई का इस्तेमाल करके, उपयोगकर्ताओं को कम इंतज़ार के साथ ऑडियो चलाने की सुविधा मिलती है. साथ ही, उन्हें बेहतर रिज़ॉल्यूशन वाला ऑडियो कॉन्टेंट भी मिलता है.
यह सुविधा, यूएसबी डिवाइसों के लिए बिट-परफ़ेक्ट प्लेलबैक मिक्सर के काम करने के तरीके के लिए भी सहायता देती है. बिट-परफ़ेक्ट मोड, डिजिटल से एनालॉग कन्वर्टर (डीएसी) पर काम करने वाले, पुष्टि की गई बेहतर क्वालिटी (एमक्यूए) और डायरेक्ट स्ट्रीम डिजिटल (डीएसडी) फ़ॉर्मैट के लिए, ऑडियो चलाने की सुविधा देता है.
इंटरफ़ेस
ऑडियो नीति मैनेजर, फ़्रेमवर्क में मिक्सर एट्रिब्यूट को मैनेज करता है. AudioMixerAttributes
क्लास, मिक्सर के एट्रिब्यूट दिखाती है. AudioMixerAttributes
क्लास में एक AudioFormat
ऑब्जेक्ट शामिल होता है. इससे मिक्सर के लिए ऑडियो डेटा फ़ॉर्मैट, चैनल मास्क, और सैंपलिंग रेट के बारे में जानकारी मिलती है. डिफ़ॉल्ट रूप से, फ़्रेमवर्क मिक्सर के व्यवहार को तय करता है. यह सभी ऑडियो सोर्स को मिक्स करता है और आवाज़ कंट्रोल और इफ़ेक्ट लागू करता है.
अगर मिक्सर BIT_PERFECT
मोड का इस्तेमाल करता है, तो सिस्टम एपीआई से यूएसबी डिवाइस पर ऑडियो कॉन्टेंट को बिना किसी बदलाव के भेजता है. इसके लिए, ऑडियो फ़्रेमवर्क, एचएएल, और डिजिटल सिग्नल प्रोसेसर (डीएसपी) का इस्तेमाल किया जाता है. BIT_PERFECT
मोड, कोड में बदले गए फ़ॉर्मैट के साथ काम करता है. जैसे, MQA या DSD. इन फ़ॉर्मैट में वॉल्यूम स्केलिंग या मिक्सिंग करने से, डेटा का मतलब समझने में मुश्किल आ सकती है.
जब ऐप्लिकेशन, मिक्सर एट्रिब्यूट कॉन्फ़िगर करते हैं, तो ज़रूरत पड़ने पर फ़्रेमवर्क, नए एट्रिब्यूट के साथ आउटपुट स्ट्रीम को फिर से खोलता है. नीचे दी गई इमेज में, मिक्सर एट्रिब्यूट सेट होने पर, ऐप्लिकेशन, फ़्रेमवर्क, और एचएएल के बीच का इंटरफ़ेस दिखाया गया है:
पहली इमेज. ऐप्लिकेशन, फ़्रेमवर्क, और एचएएल के बीच इंटरफ़ेस.
लागू करना
Android 14 के लिए, यूएसबी ऑडियो के लिए BIT_PERFECT
एट्रिब्यूट के अलावा, पसंदीदा मिक्सर एट्रिब्यूट लागू करना ज़रूरी है.
मिक्सर के लिए पसंदीदा एट्रिब्यूट
पसंदीदा मिक्सर एट्रिब्यूट के साथ काम करने के लिए, वेंडर को डाइनैमिक मिक्स पोर्ट पर यूएसबी डिवाइसों को रूट करने की सुविधा देनी होगी. इसके लिए, वे ये काम करें:
usb_audio_policy_configuration.xml
में डाइनैमिक मिक्स पोर्ट तय करें.ऑडियो नीति कॉन्फ़िगरेशन या
getAudioPorts
औरgetAudioRoutes
एआईडीएल तरीकों में, यूएसबी डिवाइसों को डाइनैमिक मिक्स पोर्ट पर रूट करने की सुविधा का एलान करें.
hardware/libhardware/modules/usbaudio
में, यूएसबी ऑडियो एचएएल के लिए रेफ़रंस लागू करने का तरीका देखें.
frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml
में डाइनैमिक मिक्स पोर्ट का उदाहरण देखें.
बिट-परफ़ेक्ट प्लेलबैक एट्रिब्यूट
बिट-परफ़ेक्ट प्लेलबैक एट्रिब्यूट का इस्तेमाल करना ज़रूरी नहीं है. यह सिर्फ़ ऑडियो एचएएल के एआईडीएल लागू करने में काम करता है. बिट-परफ़ेक्ट प्लेबैक की सुविधा देने के लिए, वेंडर को डाइनैमिक मिक्स पोर्ट में बिट-परफ़ेक्ट आउटपुट फ़्लैग AUDIO_OUTPUT_FLAG_BIT_PERFECT
जोड़ना होगा. इस पोर्ट को यूएसबी डिवाइस पर भेजा जा सकता है.
यहां दिए गए कोड सैंपल में, usb_audio_policy_configuration.xml
में AUDIO_OUTPUT_FLAG_BIT_PERFECT
फ़्लैग का इस्तेमाल दिखाया गया है:
<module name="usb" halVersion="2.0">
<mixPorts>
<mixPort name="hifi_output"
role="source" flags="AUDIO_OUTPUT_FLAG_BIT_PERFECT">
</mixPort>
</mixPorts>
<devicePorts>
<devicePort tagName="USB Device Out"
type="AUDIO_DEVICE_OUT_USB_DEVICE" role="sink">
</devicePort>
</devicePorts>
<routes>
<route type="mix" sink="USB Device Out"
sources="hifi_output"/>
</routes>
</module>
अगर बिट-परफ़ेक्ट प्लेलबैक एट्रिब्यूट की जानकारी दी गई है, तो एचएएल को यह पक्का करना होगा कि ऑडियो स्ट्रीम को बिना किसी बदलाव के यूएसबी डिवाइस पर भेजा जाए. इसका मतलब है कि ऑडियो स्ट्रीम में वॉल्यूम स्केलिंग, सैंपल रेट कन्वर्ज़न या ऑडियो प्रोसेसिंग इफ़ेक्ट नहीं होने चाहिए. साथ ही, इसे डीएसपी में मिक्स नहीं किया जाना चाहिए. इस मामले में, हार्डवेयर आवाज़ को कंट्रोल करता है, क्योंकि फ़्रेमवर्क में आवाज़ को कंट्रोल करने वाला कोई सॉफ़्टवेयर नहीं होता.
पुष्टि करें
यूएसबी डिवाइसों के लिए, पसंदीदा मिक्सर एट्रिब्यूट के साथ काम करने की पुष्टि करने के लिए, PreferredMixerAttributesTestActivity.java
में सीटीएस टेस्ट चलाएं.
BIT_PERFECT
एट्रिब्यूट के लागू होने की पुष्टि करने के लिए, ऐसे यूएसबी डीएसी का इस्तेमाल करें जो पल्स-कोड मॉड्यूलेशन (पीसीएम) ऑडियो फ़ॉर्मैट के बजाय, एमक्यूए और डीएसडी के साथ काम करते हों.