यूएसबी डिवाइसों पर मिक्सर के पसंदीदा एट्रिब्यूट

Android 14 में डेवलपर एपीआई उपलब्ध हैं. इनका इस्तेमाल करके, ऐप्लिकेशन यूएसबी ऑडियो चलाने के लिए, पसंदीदा मिक्सर एट्रिब्यूट की क्वेरी कर सकते हैं और उन्हें कॉन्फ़िगर कर सकते हैं. पसंदीदा मिक्सर एट्रिब्यूट, ऐप्लिकेशन को ऑडियो फ़ॉर्मैट, चैनल मास्क, सैंपल रेट, और मिक्सर के व्यवहार को सेट करने की अनुमति देकर, यूएसबी ऑडियो चलाने के अनुभव को बेहतर बनाते हैं. काम करने वाले यूएसबी डिवाइसों पर, पसंदीदा मिक्सर एपीआई का इस्तेमाल करके, उपयोगकर्ताओं को कम इंतज़ार के साथ ऑडियो चलाने की सुविधा मिलती है. साथ ही, उन्हें बेहतर रिज़ॉल्यूशन वाला ऑडियो कॉन्टेंट भी मिलता है.

यह सुविधा, यूएसबी डिवाइसों के लिए बिट-परफ़ेक्ट प्लेलबैक मिक्सर के काम करने के तरीके के लिए भी सहायता देती है. बिट-परफ़ेक्ट मोड, डिजिटल से एनालॉग कन्वर्टर (डीएसी) के साथ काम करने वाले, मास्टरक्वॉलिटी के पुष्टि किए गए (एमक्यूए) और डायरेक्ट स्ट्रीम डिजिटल (डीएसडी) फ़ॉर्मैट के लिए, ऑडियो चलाने की सुविधा देता है.

इंटरफ़ेस

ऑडियो नीति मैनेजर, फ़्रेमवर्क में मिक्सर एट्रिब्यूट को मैनेज करता है. AudioMixerAttributes क्लास, मिक्सर के एट्रिब्यूट दिखाती है. AudioMixerAttributes क्लास में एक AudioFormat ऑब्जेक्ट शामिल होता है, जो मिक्सर के लिए ऑडियो डेटा फ़ॉर्मैट, चैनल मास्क, और सैंपल रेट के बारे में बताता है. डिफ़ॉल्ट रूप से, फ़्रेमवर्क मिक्सर के व्यवहार को तय करता है. यह सभी ऑडियो सोर्स को मिक्स करता है और आवाज़ कंट्रोल और इफ़ेक्ट लागू करता है.

अगर मिक्सर BIT_PERFECT मोड का इस्तेमाल करता है, तो सिस्टम एपीआई से यूएसबी डिवाइस पर ऑडियो फ़्रेमवर्क, एचएएल, और डिजिटल सिग्नल प्रोसेसर (डीएसपी) के ज़रिए, ऑडियो कॉन्टेंट को बिना किसी बदलाव के भेजता है. BIT_PERFECT मोड, कोड में बदले गए फ़ॉर्मैट के साथ काम करता है. जैसे, MQA या DSD. इन फ़ॉर्मैट में वॉल्यूम स्केलिंग या मिक्सिंग करने से, डेटा का मतलब समझने में मुश्किल आ सकती है.

जब ऐप्लिकेशन, मिक्सर एट्रिब्यूट कॉन्फ़िगर करते हैं, तो ज़रूरत पड़ने पर फ़्रेमवर्क, नए एट्रिब्यूट के साथ आउटपुट स्ट्रीम को फिर से खोलता है. इस इमेज में, मिक्सर एट्रिब्यूट सेट होने पर, ऐप्लिकेशन, फ़्रेमवर्क, और एचएएल के बीच का इंटरफ़ेस दिखाया गया है:

preferred-mixer-attr

पहली इमेज. ऐप्लिकेशन, फ़्रेमवर्क, और एचएएल के बीच इंटरफ़ेस.

लागू करना

Android 14 के लिए, यूएसबी ऑडियो के लिए BIT_PERFECT एट्रिब्यूट के अलावा, पसंदीदा मिक्सर एट्रिब्यूट लागू करना ज़रूरी है.

मिक्सर के लिए सुझाए गए एट्रिब्यूट

पसंदीदा मिक्सर एट्रिब्यूट के साथ काम करने के लिए, वेंडर को यूएसबी डिवाइसों को डाइनैमिक मिक्स पोर्ट पर भेजने की सुविधा देनी होगी. इसके लिए, वे ये काम करें:

  1. usb_audio_policy_configuration.xml में डाइनैमिक मिक्स पोर्ट तय करें.

  2. ऑडियो नीति कॉन्फ़िगरेशन या 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 एट्रिब्यूट के लागू होने की पुष्टि करने के लिए, ऐसे यूएसबी डीएसी का इस्तेमाल करें जो पल्स-कोड मॉड्यूलेशन (पीसीएम) ऑडियो फ़ॉर्मैट के बजाय, एमक्यूए और डीएसडी के साथ काम करते हों.