إلغاء الصدى الصوتي
Streaming Sound Wave، بالإضافة إلى أنواعه المشتقة مثل Capturable Sound Wave، يدعم إلغاء الصدى الصوتي (AEC). يقوم AEC بإزالة الصدى من صوت الميكروفون الملتقط الناتج عن تشغيل إشارة مرجعية (على سبيل المثال، صوت يتم تشغيله عبر السماعات). النتيجة هي التقاط صوتي أنظف في سيناريوهات الاتصال الفوري.
يوفر الإضافة AEC من خلال تطبيق WebRTC AEC3، المتاحة كإضافة خفيفة تمديدية تقوم بتضمين الكود الخاص بـ 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 متاح لـ Windows, Linux, Mac, Android (بما في ذلك Meta Quest), و iOS
- لمزيد من المعلومات حول كيفية بناء الإضافات يدويًا، راجع دليل بناء الإضافات
الاستخدام الأساسي
يتضمن سير عمل AEC النموذجي ثلاث خطوات:
- تمكين AEC على موجة الصوت المتدفقة/القابلة للالتقاط
- تكوين حجم قطعة العرض على موجة الصوت المرجعية لتسليم إطارات بحجم 10 مللي ثانية
- ربط موجة الصوت المرجعية التي سيتم استخدام صوتها لإلغاء الصدى من إشارة الالتقاط
تمكين AEC
لتمكين 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 مللي ثانية. لضمان توصيل موجة الصوت للعرض بيانات الصوت بحجم الإطار الصحيح، استخدم دالة SetNumSamplesPerChunk على العرض Imported Sound Wave (موجة الصوت التي يتم تشغيلها عبر السماعات).
المعادلة لحساب العدد الصحيح للعينات لكل قطعة هي:
على سبيل المثال، لصوت بتردد 48000 هرتز: 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 هرتز. يتم إعادة تشكيل الصوت غير المتطابق تلقائياً، لكن ذلك يأتي مع عبء أداء. للحصول على أفضل جودة وأداء، استخدم 48000 هرتز وطابق تكوين الصوت الفعلي لكل من تدفقات الالتقاط والإخراج.