ऑडियो प्रभाव

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

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

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

  • किसी भी अन्य ऑडियो प्रभाव के लिए, प्रभाव एक विक्रेता पुस्तकालय द्वारा लागू किया जाना चाहिए और audio_effects.xml कॉन्फ़िगरेशन फ़ाइल में सूचीबद्ध होना चाहिए।
  • प्रभाव प्रीप्रोसेसिंग या पोस्टप्रोसेसिंग प्रकार का होना चाहिए (फ्लैग TYPE_PRE_PROC या TYPE_POST_PROC EffectDescriptor.flags सेट)।
  • यदि प्रभाव कार्यान्वयन एचडब्ल्यू त्वरित है (फ्लैग 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)
  • निर्दिष्ट ऑडियो AudioSessionConsts.DEVICE AudioSession होना चाहिए।
  • यदि session AudioSessionConsts.DEVICE है, तो AudioIoHandle को अनदेखा कर दिया जाता है।
  • जब device को ऑडियो एचएएल में IDevice::createAudioPatch() विधि के साथ चुना जाता है, तो डिवाइस को ऑडियो फ्रेमवर्क द्वारा असाइन किए गए अपने अद्वितीय AudioPortHandle द्वारा पहचाना जाता है।

ऑडियो एचएएल

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

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

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

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