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 HAL के AIDL वर्शन में काम करता है. बिट-परफ़ेक्ट प्लेबैक की सुविधा के लिए, वेंडर को बिट-परफ़ेक्ट आउटपुट फ़्लैग 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>
अगर बिट-परफ़ेक्ट प्लेबैक एट्रिब्यूट तय किया गया है, तो HAL को यह पक्का करना होगा कि ऑडियो स्ट्रीम को बिना किसी बदलाव के यूएसबी डिवाइस पर भेजा जाए. इसका मतलब है कि ऑडियो स्ट्रीम में वॉल्यूम स्केलिंग, सैंपल रेट कन्वर्ज़न या ऑडियो प्रोसेसिंग के इफ़ेक्ट नहीं होने चाहिए. साथ ही, इसे डीएसपी में मिक्स नहीं किया जाना चाहिए. इस मामले में, हार्डवेयर से आवाज़ को कंट्रोल किया जाता है, क्योंकि फ़्रेमवर्क में आवाज़ को कंट्रोल करने के लिए कोई सॉफ़्टवेयर उपलब्ध नहीं होता.
सत्यापन
यूएसबी डिवाइसों के लिए, मिक्सर के पसंदीदा एट्रिब्यूट काम करते हैं या नहीं, इसकी पुष्टि करने के लिए PreferredMixerAttributesTestActivity.java में सीटीएस टेस्ट चलाएँ.
BIT_PERFECT एट्रिब्यूट के इंप्लिमेंटेशन की पुष्टि करने के लिए, ऐसे यूएसबी डीएसी का इस्तेमाल करें जो पल्स-कोड मॉड्यूलेशन (पीसीएम) ऑडियो फ़ॉर्मैट पर MQA और DSD को सपोर्ट करते हों.