ऑडियो प्रभाव

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

यह सुविधा मुख्य रूप से ऑटोमोटिव ओईएम पर लक्षित है, लेकिन इसका उपयोग अन्य एंड्रॉइड फॉर्म कारकों में भी किया जा सकता है। एक उदाहरण ऐप ऑडियो डीएसपी के माध्यम से सीधे स्पीकर से कनेक्ट होने पर एफएम ट्यूनर आउटपुट पर वॉयस एन्हांसमेंट प्रभाव डाल रहा है।

आवश्यक शर्तें

  • किसी भी अन्य ऑडियो प्रभाव के लिए, प्रभाव को विक्रेता लाइब्रेरी द्वारा कार्यान्वित किया जाना चाहिए और audio_effects.xml कॉन्फ़िगरेशन फ़ाइल में सूचीबद्ध किया जाना चाहिए।
  • प्रभाव प्रीप्रोसेसिंग या पोस्टप्रोसेसिंग प्रकार का होना चाहिए (फ्लैग TYPE_PRE_PROC या TYPE_POST_PROC EffectDescriptor.flags में सेट)।
  • यदि प्रभाव कार्यान्वयन HW त्वरित है (Flag HW_ACC_TUNNEL EffectDescriptor.flags में सेट है), तो इसे HAL के नीचे पूरी तरह से जुड़े एक ऑडियो पथ से जोड़ा जा सकता है (ऑडियो HAL पर कोई प्लेबैक या कैप्चर ऑडियो स्ट्रीम नहीं खोली जाएगी)।

डिवाइस प्रभाव बनाएं और सक्षम करें

डिवाइस-विशिष्ट ऑडियो प्रभावों को नीचे दी गई दो विधियों में से एक का उपयोग करके त्वरित किया जा सकता है।

ऑडियो प्रभाव कॉन्फ़िगरेशन फ़ाइल का उपयोग करें

यह विधि एक ऑडियो प्रभाव के स्थिर निर्माण की अनुमति देती है जो किसी निर्दिष्ट डिवाइस को सिंक या स्रोत के रूप में चुनने वाले किसी भी ऑडियो पथ से व्यवस्थित रूप से जुड़ा और सक्षम होता है।

यह audio_effects.xml फ़ाइल में एक विशिष्ट अनुभाग को निम्नानुसार जोड़कर किया जाता है:

<deviceEffects>
<devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom">
      	<apply effect="agc"/>
      </devicePort>
  </deviceEffects>
  

सिस्टम API का उपयोग करें

डिवाइस इफ़ेक्ट बनाने और सक्षम करने के लिए android.media.audiofx.AudioEffect क्लास में एक नया @SystemApi कंस्ट्रक्टर जोड़ा गया है:

AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

अद्वितीय ऑडियो प्रभाव आईडी और ऑडियो डिवाइस डिस्क्रिप्टर को निर्दिष्ट करके प्रभाव बनाने के बाद, इसे मौजूदा ऑडियोइफेक्ट एपीआई के साथ सक्षम या अक्षम किया जा सकता है।

यदि कोई कार्यान्वयन किसी दिए गए डिवाइस/प्रभाव संयोजन का समर्थन करता है तो क्वेरी के लिए एक एपीआई भी उपलब्ध है।

static boolean isEffectSupportedForDevice(
            @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);

नई एचएएल एपीआई

ऑडियो प्रभाव एचएएल

ऑडियो प्रभाव HAL V6.0 में createEffect() विधि के लिए एक नया हस्ताक्षर है जो किसी डिवाइस से जुड़े प्रभाव के निर्माण की अनुमति देता है:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • निर्दिष्ट AudioSession AudioSessionConsts.DEVICE होना चाहिए।
  • यदि session AudioSessionConsts.DEVICE है तो AudioIoHandle अनदेखा कर दिया जाता है।
  • जब डिवाइस को IDevice::createAudioPatch() विधि के साथ ऑडियो HAL पर चुना जाता है, तो device ऑडियो फ्रेमवर्क द्वारा निर्दिष्ट उसके अद्वितीय AudioPortHandle द्वारा पहचाना जाता है।

ऑडियो एचएएल

डिवाइस प्रभाव सुविधा का समर्थन करने के लिए, ऑडियो HAL को IDevice::createAudioPatch() API का उपयोग करके ऑडियो रूटिंग नियंत्रण लागू करना होगा। यह IDevice::supportsAudioPatches() विधि रिपोर्टिंग true द्वारा इंगित किया गया है।

दो नए एपीआई तरीके, IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId) और IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId) एचएएल कार्यान्वयन को बताते हैं कि किसी दिए गए डिवाइस पर डिवाइस प्रभाव सक्षम या अक्षम कर दिया गया है।

डिवाइस की पहचान उसके AudioPortHandle ID से होती है, जिसका उपयोग IDevice::createAudioPatch() विधि से ऑडियो पैच बनाते समय किया जाता है।

यदि किसी प्रभाव को सक्षम या अक्षम किया जाता है तो ऑडियो और प्रभाव एचएएल के बीच समन्वय की आवश्यकता होने पर ऑडियो एचएएल एपीआई का उपयोग कार्यान्वयन द्वारा किया जा सकता है।