كشف النشاط الصوتي
موجة الصوت المتدفقة، جنبًا إلى جنب مع أنواعها المشتقة مثل موجة الصوت القابلة للتسجيل، تدعم كشف النشاط الصوتي (VAD). يقوم VAD بتصفية بيانات الصوت الواردة لملء المخزن المؤقت الداخلي فقط عند اكتشاف الصوت.
يقدم البرنامج المساعد تطبيقين لـ VAD:
- VAD الافتراضي
- Silero VAD
التطبيق الافتراضي يستخدم libfvad، وهي مكتبة خفيفة الوزن لكشف النشاط الصوتي تعمل بكفاءة عبر جميع المنصات وإصدارات المحرك التي يدعمها Runtime Audio Importer.
متاح كبرنامج مساعد إضافي، Silero VAD هو كاشف نشاط صوتي يعتمد على الشبكات العصبية ويوفر دقة أعلى، خاصة في البيئات الصاخبة. يستخدم التعلم الآلي للتمييز بين الكلام والضوضاء الخلفية بشكل أك ثر موثوقية.
الاستخدام الأساسي
لتمكين VAD بعد إنشاء موجة صوت، استخدم الدالة ToggleVAD
:
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->ToggleVAD(true);
بعد تمكين VAD، يمكنك إعادة تعيينه في أي وقت:
- Blueprint
- C++
// Reset the VAD
StreamingSoundWave->ResetVAD();
إ عدادات VAD الافتراضية
عند استخدام موفر VAD الافتراضي، يمكنك ضبط مستوى الحساسية عن طريق تغيير وضع VAD:
- Blueprint
- C++
// Set the VAD mode (only works with the default VAD provider)
StreamingSoundWave->SetVADMode(ERuntimeVADMode::VeryAggressive);
تتحكم معلمة الوضع (mode parameter) في مدى عدوانية مرشح VAD في تصفية الصوت. القيم الأعلى تكون أكثر تقييدًا، مما يعني أنها أقل عرضة للإبلاغ عن إيجابيات خاطئة ولكن قد تفوت بعض الكلام.
موفرو VAD
بعد تمكين VAD باستخدام دالة ToggleVAD
، يمكنك الاختيار بين مختلف موفري كشف النشاط الصوتي (Voice Activity Detection) لتناسب احتياجاتك. المزود الافتراضي هو المدمج، بينما تتوفر موفرو إضافيون مثل Silero VAD من خلال ملحقات الإضافات.
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Make sure to call ToggleVAD(true) before setting the provider
// Set the VAD provider to Silero VAD
StreamingSoundWave->SetVADProvider(URuntimeSileroVADProvider::StaticClass());
ملحق Silero VAD
يوفر Silero VAD كشفًا أكثر دقة للكلام باستخدام الشبكات العصبية. لاستخدامه:
- تأكد من تثبيت ملحق Runtime Audio Importer مسبقًا في مشروعك
- حمل ملحق Silero VAD من Google Drive
- استخرج المجلد من الأرشيف المحمل إلى مجلد
Plugins
في مشروعك (قم بإنشاء هذا المجلد إذا لم يكن موجودًا) - أعد بناء مشروعك (هذا الملحق يتطلب مشروعًا بلغة C++)
- يعمل VAD الافتراضي مع جميع إصدارات المحرك المدعومة من 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)
- يدعم Silero VAD إصدارات Unreal Engine 4.27 وجميع إصدارات UE5 (4.27, 5.0, 5.1, 5.2, 5.3, 5.4, 5.5, و 5.6)
- Silero VAD متاح حاليًا لنظام Windows فقط
- يتم توفير هذا الملحق كشفرة مصدرية ويتطلب مشروعًا بلغة C++ لاستخدامه
- لمزيد من المعلومات حول كيفية بناء الملحقات يدويًا، راجع درس بناء الملحقات
بعد التثبيت، يمكنك اختياره كمزود VAD باستخدام دالة SetVADProvider
مع مزود فئة Silero.
كشف بداية ونهاية الكلام
لا يكتشف Voice Activity Detection وجود الكلام فحسب، بل يسمح أيضًا باكتشاف بداية ونهاية نشاط الكلام. هذا مفيد لتحريك الأحداث عند بدء الكلام أو انتهائه أثناء التشغيل أو التسجيل.
يمكنك تخصيص حساسية كشف بداية ونهاية الكلام عن طريق ضبط معايير مثل مدة الكلام الدنيا ومدة الصمت. تساعد هذه المعايير في ضبط الكشف لتجنب الإيجابيات الكاذبة، مثل التقاط الضوضاء القصيرة أو فترات التوقف القصيرة جدًا بين الكلام.
مدة الكلام الدنيا
تحدد معلمة Minimum Speech Duration الحد الأدنى من نشاط الكلام المستمر المطلوب لتحريك حدث ب دء الكلام. يساعد ذلك في تصفية الضوضاء القصيرة التي لا يجب اعتبارها كلامًا، للتأكد من أن يتم التعرف فقط على نشاط الكلام المستمر. القيمة الافتراضية لـ Minimum Speech Duration هي 300 ميلي ثانية.
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Set the minimum speech duration
StreamingSoundWave->SetMinimumSpeechDuration(200);
مدة الصمت
تحدد المعلمة مدة الصمت المدة المطلوبة من الصمت لتحريك حدث نهاية الكلام. هذا يمنع انتهاء الكشف عن الكلام بشكل مبكر أثناء التوقفات الطبيعية بين الكلمات أو الجمل. القيمة الافتراضية لـ مدة الصمت هي 500 مللي ثانية.
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Set the silence duration
StreamingSoundWave->SetSilenceDuration(700);
الربط مع مفوضي الكلام
يمكنك الربط مع مفوضي محددين عند بدء الكلام أو انتهائه. هذا مفيد لتحريك سلوك مخصص بناءً على نشاط الكلام، مثل بدء أو إيقاف التعرف على النص، أو ضبط مستوى الصوت لمصادر صوتية أخرى.
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Bind to the OnSpeechStartedNative delegate
StreamingSoundWave->OnSpeechStartedNative.AddWeakLambda(this, [this]()
{
// Handle the result when speech starts
});
// Bind to the OnSpeechEndedNative delegate
StreamingSoundWave->OnSpeechEndedNative.AddWeakLambda(this, [this]()
{
// Handle the result when speech ends
});
مقارنة مزودي VAD
- VAD الافتراضي
- Silero VAD
VAD الافتراضي (libfvad)
المزايا:
- خفيف الوزن وفعال
- يعمل على جميع المنصات
- استخدام ضئيل للموارد
- مناسب للأجهزة المحمولة ومنخفضة الطاقة
الأفضل لـ:
- كشف الصوت البسيط في البيئات الهادئة
- تطبيقات الهاتف المحمول
- المشاريع التي تكون الأولوية فيها للأداء
- عند الحاجة إلى دعم شامل للمنصات
Silero VAD
المزايا:
- دقة أعلى في كشف الصوت
- تحمل أفضل للضوضاء في البيئات الصعبة
- نتائج أكثر اتساقًا عبر المتحدثين المختلفين
- خيارات تكوين متقدمة للتحكم الدقيق
الأفضل لـ:
- التطبيقات التي تتطلب كشف صوت دقيق
- البيئات ذات الضوضاء الخلفية
- أنظمة التعرف على الصوت
- تطبيقات الصوت الاحترافية
:::ملاحظة قد يتطلب Silero VAD موارد حاسوبية أكثر من VAD الافتراضي. :::