ध्वनिक प्रतिध्वनि रद्दीकरण
Streaming Sound Wave, इसके व्युत्पन्न प्रकारों जैसे कि Capturable Sound Wave के साथ, ध्वनिक प्रतिध्वनि रद्दीकरण (AEC) का समर्थन करता है। AEC माइक्रोफ़ोन से पकड़े गए ऑडियो से उस प्रतिध्वनि को हटाता है जो रेंडर सिग्नल (जैसे, स्पीकरों के माध्यम से बजने वाला ऑडियो) के प्लेबैक के कारण उत्पन्न होती है। इसका परिणाम वास्तविक समय संचार परिदृश्यों में स्वच्छ आवाज़ कैप्चर है।
प्लगइन, WebRTC AEC3 कार्यान्वयन के माध्यम से AEC प्रदान करता है, जो एक हल्के विस्तार प्लगइन के रूप में उपलब्ध है जो केवल प्रासंगिक AEC3 कोड वितरित करता है। WebRTC AEC3 एक उच्च गुणवत्ता वाला ध्वनिक प्रतिध्वनि रद्दकर्ता है जिसका वास्तविक समय संचार अनुप्रयोगों में व्यापक उपयोग होता है। यह स्पीकर और माइक्रोफ़ोन के बीच ध्वनिक पथ का मॉडल बनाकर कैप्चर किए गए सिग्नल से प्रतिध्वनि घटाता है।
इंस्टॉलेशन
ध्वनिक प्रतिध्वनि रद्दीकरण का उपयोग करने के लिए, आपको WebRTC AEC3 विस्तार प्लगइन इंस्टॉल करना होगा:
- सुनिश्चित करें कि Runtime Audio Importer प्लगइन आपके प्रोजेक्ट में पहले से इंस्टॉल है।
- WebRTC AEC3 विस्तार प्लगइन को यहाँ से डाउनलोड करें।
- डाउनलोड किए गए संग्रह से फ़ोल्डर को अपने प्रोजेक्ट के
Pluginsफ़ोल्डर में निकालें (यदि यह फ़ोल्डर मौजूद न हो तो इसे बनाएँ)। - अपने प्रोजेक्ट को फिर से बिल्ड करें (इस विस्तार के लिए C++ प्रोजेक्ट आवश्यक है)।
- WebRTC AEC3, Runtime Audio Importer द्वारा समर्थित सभी इंजन संस्करणों (UE 4.24, 4.25, 4.26, 4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, और 5.8) का समर्थन करता है।
- यह विस्तार स्रोत कोड के रूप में प्रदान किया गया है और उपयोग के लिए C++ प्रोजेक्ट की आवश्यकता है।
- WebRTC AEC3, विंडोज, लिनक्स, मैक, एंड्रॉइड (मेटा क्वेस्ट सहित) और iOS के लिए उपलब्ध है।
- प्लगइन को मैन्युअल रूप से कैसे बनाएँ, इस बारे में अधिक जानकारी के लिए, Building Plugins ट्यूटोरियल देखें।
बुनियादी उपयोग
विशिष्ट AEC वर्कफ़्लो में तीन चरण शामिल हैं:
- AEC सक्षम करें अपने streaming/capturable sound wave पर
- रेंडर चंक आकार कॉन्फ़िगर करें रेंडर sound wave पर 10 ms फ्रेम डिलीवरी के लिए
- रेंडर sound wave को बाइंड करें जिसके ऑडियो का उपयोग कैप्चर सिग्नल से प्रतिध्वनि रद्द करने के लिए किया जाएगा
AEC सक्षम करना
streaming sound wave बनाने के बाद AEC सक्षम करने के लिए, ToggleAEC फ़ंक्शन का उपयोग करें। आपको AEC प्रोसेसर के लिए सैंपल दर और चैनलों की संख्या निर्दिष्ट करनी होगी। यदि आने वाला कैप्चर या रेंडर ऑडियो इन मानों से मेल नहीं खाता है, तो इसे स्वचालित रूप से पुनः-नमूनाकरण किया जाएगा, हालाँकि, कॉन्फ़िगर की गई सैंपल दर फिर भी गुणवत्ता (जैसे, 48000 Hz, 16000 Hz की तुलना में बेहतर प्रतिध्वनि रद्दीकरण देगा) और प्रदर्शन को प्रभावित करती है, इसलिए इन मानों को जानबूझकर चुनना सार्थक है बजाय इसके कि पुनः-नमूनाकरण पर छोड़ दिया जाए।
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleAEC(true, 48000, 1);
आप जाँच कर सकते हैं कि AEC वर्तमान में सक्षम है या नहीं:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
bool bEnabled = StreamingSoundWave->IsAECEnabled();
रेंडर खंड आकार कॉन्फ़िगर करना
WebRTC AEC3 को 10 ms खंडों में ऑडियो प्रोसेस करने की आवश्यकता होती है। यह सुनिश्चित करने के लिए कि रेंडर ध्वनि तरंग सही फ्रेम आकार में ऑडियो डेटा प्रदान करे, रेंडर Imported Sound Wave (स्पीकर के माध्यम से चलाई जाने वाली ध्वनि तरंग) पर SetNumSamplesPerChunk फ़ंक्शन का उपयोग करें।
प्रति खंड सही सैम्पल की संख्या की गणना करने का सूत्र है:
उदाहरण के लिए, 48000 Hz ऑडियो के लिए: प्रति चंक 48000 / 100 = 480 सैंपल।
- Blueprint
- C++

// Assuming ImportedSoundWave is a UE reference to a UImportedSoundWave object (the render sound wave being played through speakers)
ImportedSoundWave->SetNumSamplesPerChunk(ImportedSoundWave->GetSampleRate() / 100);
रेंडर साउंड वेव को बाइंड करना
AEC को सक्षम करने और चंक आकार को कॉन्फ़िगर करने के बाद, उस रेंडर साउंड वेव को बाइंड करें जिसकी ऑडियो का उपयोग कैप्चर सिग्नल से इको की पहचान करने और उसे हटाने के लिए किया जाएगा। यह आमतौर पर स्पीकरों के माध्यम से बजाई जा रही ध्वनि तरंग होती है जिसे माइक्रोफ़ोन पकड़ सकता है:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->BindAECToSoundWavePlayback(ImportedSoundWave);
रेंडर ध्वनि तरंग को अनबाइंड करने के लिए:
- Blueprint
- C++

// Assuming StreamingSoundWave is the capture sound wave (microphone input) with AEC enabled
// (can also be a UCapturableSoundWave, which is the most common use case)
// Assuming ImportedSoundWave is the render sound wave being played through speakers
StreamingSoundWave->UnbindAECFromSoundWavePlayback(ImportedSoundWave);
अतिरिक्त कॉन्फ़िगरेशन
स्ट्रीम विलंब
आप रेंडर और कैप्चर ऑडियो पथों के बीच अनुमानित स्ट्रीम विलंब (मिलीसेकंड में) सेट कर सकते हैं। यह हार्डवेयर और सिस्टम लेटेंसी को ध्यान में रखता है, हालाँकि WebRTC AEC3 कई मामलों में इसका स्वचालित अनुमान लगा सकता है:
- Blueprint
- C++

// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->SetAECStreamDelay(50);
AEC को रीसेट करना
आप किसी भी समय आंतरिक AEC प्रोसेसर स्थिति को रीसेट कर सकते हैं, जिससे किसी भी संचित प्रतिध्वनि मॉडल को साफ़ किया जा सकता है:
- Blueprint
- C++

StreamingSoundWave->ResetAEC();
WebRTC AEC3 8000, 16000, 32000, और 48000 Hz की नमूना दरों का समर्थन करता है। बेमेल ऑडियो स्वचालित रूप से पुनःनमूना किया जाता है, लेकिन इससे प्रदर्शन पर अतिरिक्त भार पड़ता है। सर्वोत्तम गुणवत्ता और प्रदर्शन के लिए, 48000 Hz का उपयोग करें और कैप्चर तथा रेंडर स्ट्रीम दोनों की वास्तविक ऑडियो कॉन्फ़िगरेशन से मिलान करें।