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