إلغاء الصدى الصوتي
تدعم موجة الصوت المتدفقة، جنبًا إلى جنب مع أنواعها المشتقة مثل موجة الصوت القابلة للالتقاط، إلغاء الصدى الصوتي (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++ لاستخدامه
- لمزيد من المعلومات حول كيفية بناء الإضافات يدويًا، راجع برنامج تعليمي لبناء الإضافات
الاستخدام الأساسي
يتضمن سير عمل AEC النموذجي ثلاث خطوات:
- تمكين AEC على موجة الصوت المتدفقة/القابلة للالتقاط الخاصة بك
- تكوين حجم جزء التقديم على موجة صوت التقديم لتسليم إطارات مدتها 10 مللي ثانية
- ربط موجة صوت التقديم التي سيتم استخدام صوتها لإلغاء الصدى من إشارة الالتقاط
تمكين AEC
لتمكين AEC بعد إنشاء موجة صوت متدفقة، استخدم الدالة 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 هرتز وطابق التكوين الفعلي للصوت لكل من تدفقات الالتقاط والعرض.