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()
तरीके से ऑडियो पैच बनाया जाता है.
किसी इफ़ेक्ट को चालू या बंद करने पर, ऑडियो और इफ़ेक्ट एचएएल के बीच समन्वय की ज़रूरत पड़ने पर, ऑडियो एचएएल एपीआई का इस्तेमाल किया जा सकता है.