ऑडियो प्रभाव

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

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

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

  • किसी भी अन्य ऑडियो इफ़ेक्ट की तरह, इफ़ेक्ट को वेंडर लाइब्रेरी से लागू किया जाना चाहिए और audio_effects.xml कॉन्फ़िगरेशन फ़ाइल में सूची में शामिल किया जाना चाहिए.
  • इफ़ेक्ट, प्रीप्रोसेसिंग या पोस्टप्रोसेसिंग टाइप का होना चाहिए (EffectDescriptor.flags में फ़्लैग TYPE_PRE_PROC या TYPE_POST_PROC सेट किया गया हो).
  • अगर इफ़ेक्ट को लागू करने की प्रोसेस 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);

नए HAL API

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

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

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

ऑडियो एचएएल

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

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

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

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