ऑडियो प्रभाव

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

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

ज़रूरी शर्तें

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

डिवाइस इफ़ेक्ट बनाना और चालू करना

किसी डिवाइस के ऑडियो इफ़ेक्ट को इन दो तरीकों में से किसी एक का इस्तेमाल करके इंस्टैंशिएट किया जा सकता है.

ऑडियो इफ़ेक्ट की कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करना

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

ऐसा करने के लिए, audio_effects.xml फ़ाइल में एक खास सेक्शन जोड़ें. इसके लिए, यह तरीका अपनाएं:

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

सिस्टम एपीआई का इस्तेमाल करना

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

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

यूनीक ऑडियो इफ़ेक्ट आईडी और ऑडियो डिवाइस डिस्क्रिप्टर की जानकारी देकर, इफ़ेक्ट बनाने के बाद, इसे मौजूदा AudioEffect एपीआई की मदद से, चालू या बंद किया जा सकता है.

अगर एपीआई लागू करने के किसी दिए गए डिवाइस/इफ़ेक्ट के कॉम्बिनेशन के साथ काम करता है, तो क्वेरी करने के लिए भी एपीआई उपलब्ध है.

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

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

ऑडियो इफ़ेक्ट एचएएल

createEffect() तरीके के लिए, ऑडियो इफ़ेक्ट HAL V6.0 में नया हस्ताक्षर जोड़ा गया है इससे डिवाइस से अटैच किए गए इफ़ेक्ट को बनाने की अनुमति दी जा सकती है:

IEffectFactory::createEffect(Uuid uid, AudioSession session,
AudioIoHandle ioHandle, AudioPortHandle device)
  • तय किया गया AudioSession, AudioSessionConsts.DEVICE होना चाहिए.
  • अगर session के तौर पर AudioSessionConsts.DEVICE दिया गया है, तो AudioIoHandle को अनदेखा कर दिया जाता है.
  • device की पहचान, ऑडियो फ़्रेमवर्क से असाइन किए गए यूनीक AudioPortHandle से की जाती है. ऐसा तब होता है, जब डिवाइस को IDevice::createAudioPatch() तरीके से ऑडियो एचएएल में चुना जाता है.

ऑडियो एचएएल

डिवाइस इफ़ेक्ट की सुविधा के साथ काम करने के लिए, ऑडियो एचएएल को ऑडियो रूटिंग लागू करना होगा को कंट्रोल करने के लिए, IDevice::createAudioPatch() API का इस्तेमाल करें. यह IDevice::supportsAudioPatches() मेथड रिपोर्टिंग true.

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

डिवाइस की पहचान उसके AudioPortHandle आईडी से की जाती है. इसका इस्तेमाल तब किया जाता है, जब IDevice::createAudioPatch() तरीके से ऑडियो पैच बनाया जाता है.

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