ध्वनिक प्रतिध्वनि निरसन
स्ट्रीमिंग साउंड वेव, साथ ही इसके व्युत्पन्न प्रकार जैसे कैप्चर करने योग्य साउंड वेव, ध्वनिक प्रतिध्वनि निरसन (एईसी) का समर्थन करते हैं। एईसी कैप्चर की गई माइक्रोफोन ऑडियो से उस प्रतिध्वनि को हटाता है जो एक रेंडर सिग्नल के प्लेबैक के कारण होती है (उदाहरण के लिए, स्पीकर के माध्यम से बजने वाला ऑडियो)। परिणामस्वरूप, रीयल-टाइम संचार परिदृश्यों में स्वच्छ आवाज कैप्चर होती है।
यह प्लगइन WebRTC AEC3 कार्यान्वयन के माध्यम से एईसी प्रदान करता है, जो एक हल्के एक्सटेंशन प्लगइन के रूप में उपलब्ध है जो केवल प्रासंगिक एईसी3 कोड शिप करता है। 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)
- यह एक्सटेंशन स्रोत कोड के रूप में प्रदान किया जाता है और उपयोग के लिए एक C++ प्रोजेक्ट की आवश्यकता होती है
- प्लगइन्स को मैन्युअल रूप से बनाने के तरीके के बारे में अधिक जानकारी के लिए, Building Plugins ट्यूटोरियल देखें
मूल उपयोग
विशिष्ट एईसी वर्कफ़्लो में तीन चरण शामिल होते हैं:
- अपने स्ट्रीमिंग/कैप्चर करने योग्य साउंड वेव पर एईसी सक्षम करें
- 10 मिलीसेकंड फ्रेम डिलीवरी के लिए रेंडर साउंड वेव पर रेंडर चंक आकार कॉन्फ़िगर करें
- रेंडर साउंड वेव को बाइंड करें जिसके ऑडियो का उपयोग कैप्चर सिग्नल से प्रतिध्वनि को रद्द करने के लिए किया जाएगा
एईसी सक्षम करना
एक स्ट्रीमिंग साउंड वेव बनाने के बाद एईसी सक्षम करने के लिए, ToggleAEC फ़ंक्शन का उपयोग करें। आपको एईसी प्रोसेसर के लिए नमूना दर और चैनलों की संख्या निर्दिष्ट करनी होगी। यदि आने वाला कैप्चर या रेंडर ऑडियो इन मानों से मेल नहीं खाता है, तो इसे स्वचालित रूप से रीसैंपल किया जाएगा, हालाँकि, कॉन्फ़िगर की गई नमूना दर अभी भी गुणवत्ता (उदाहरण के लिए, 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 चंक में प्रोसेस करने की आवश्यकता होती है। यह सुनिश्चित करने के लिए कि रेंडर साउंड वेव सही फ़्रेम आकार में ऑडियो डेटा डिलीवर करे, रेंडर इम्पोर्टेड साउंड वेव (स्पीकर के माध्यम से बजाई जा रही साउंड वेव) पर 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 का उपयोग करें और कैप्चर और रेंडर दोनों स्ट्रीम की वास्तविक ऑडियो कॉन्फ़िगरेशन से मेल खाएं।