Android 11 में, डिवाइस बनाने वाली कंपनियों के पास ऑडियो कैप्चर या चलाने के लिए किसी ऑडियो डिवाइस को चुनने पर, ऑडियो इफ़ेक्ट अपने-आप अटैच और चालू होने की सुविधा है. एक अहम सुधार यह है कि ऑडियो पाथ में जोड़े गए ऑडियो इफ़ेक्ट को ऑडियो इफ़ेक्ट फ़्रेमवर्क से कंट्रोल किया जा सकता है. ऑडियो पाथ, ऑडियो एचएएल (इनपुट डिवाइस और आउटपुट डिवाइस के बीच सीधा कनेक्शन) के नीचे पूरी तरह से लागू होता है.
इस सुविधा को मुख्य रूप से वाहन संबंधित OEM के लिए टारगेट किया गया है. हालांकि, इसका इस्तेमाल Android डिवाइसों के अन्य फ़ॉर्म फ़ैक्टर में भी किया जा सकता है. इस उदाहरण में, ऐप्लिकेशन में एफ़एम ट्यूनर के आउटपुट पर आवाज़ को बेहतर बनाने वाला इफ़ेक्ट जोड़ा जा रहा है. ऐसा तब किया जा रहा है, जब ऐप्लिकेशन को ऑडियो डीएसपी के ज़रिए सीधे स्पीकर से कनेक्ट किया गया है.
ज़रूरी शर्तें
- किसी भी अन्य ऑडियो इफ़ेक्ट की तरह, इफ़ेक्ट को वेंडर लाइब्रेरी से लागू किया जाना चाहिए और
audio_effects.xml
कॉन्फ़िगरेशन फ़ाइल में सूची में शामिल किया जाना चाहिए. - इफ़ेक्ट, प्रीप्रोसेसिंग या पोस्टप्रोसेसिंग टाइप का होना चाहिए (
EffectDescriptor.flags
में फ़्लैगTYPE_PRE_PROC
याTYPE_POST_PROC
सेट किया गया हो). - अगर इफ़ेक्ट को लागू करने के लिए, हार्डवेयर की मदद ली जा रही है (
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 API की मदद से चालू या बंद किया जा सकता है.
यह पता करने के लिए भी एक एपीआई उपलब्ध है कि किसी डिवाइस/इफ़ेक्ट के कॉम्बिनेशन के साथ, लागू करने की सुविधा काम करती है या नहीं.
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()
तरीके से ऑडियो पैच बनाया जाता है.
अगर किसी इफ़ेक्ट को चालू या बंद करने पर, ऑडियो और इफ़ेक्ट एचएएल के बीच समन्वय की ज़रूरत होती है, तो ऑडियो एचएएल एपीआई का इस्तेमाल किया जा सकता है.