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