انتقل إلى المحتوى الرئيسي

Streaming Sound Wave

A streaming sound wave هو نوع من الموجات الصوتية المستوردة التي تدعم إضافة بيانات صوتية ديناميكيًا، حتى أثناء التشغيل. يوفر نفس وظائف الموجة الصوتية المستوردة، مثل إعادة التشغيل، ويمكن استخدامه في SoundCues، إلخ.

تلميح

للحصول على كشف نشاط الصوت (VAD)، راجع هذه الصفحة.

إنشاء موجة صوتية متدفقة

أولاً، يجب عليك إنشاء موجة صوتية متدفقة. يرجى ملاحظة أنه يجب التعامل معها كمرجع قوي لمنع التدمير المبكر (على سبيل المثال، عن طريق تعيينها لمتغير منفصل في Blueprints أو استخدام UPROPERTY() في C++).

Create Streaming Sound Wave node

تشغيل موجة الصوت

يمكنك بعد ذلك تشغيل موجة الصوت هذه. ومع ذلك، ليس من الضروري القيام بذلك الآن، يمكنك البدء في تشغيل موجة الصوت لاحقًا.

أمثلة متنوعة لتشغيل موجة صوت

تخصيص بيانات الصوت مسبقًا

اختياريًا، يمكنك تخصيص بيانات الصوت (بايت) مسبقًا لتجنب إعادة تخصيص مخزن PCM بالكامل في كل مرة يتم فيها إلحاق بيانات صوتية جديدة.

عقدة Pre Allocate Audio Data

إلحاق بيانات الصوت

لإضافة بيانات صوتية إلى نهاية المخزن المؤقت الحالي، استخدم الدوال المناسبة للإلحاق الديناميكي لبيانات الصوت. سيتابع التشغيل تسلسل قائمة الانتظار لهذه الإلحاقات.

عقدة إلحاق بيانات الصوت

تجنب تشغيل الصوت المسرع أو المشوه

عند دفق بيانات الصوت أثناء تشغيل موجة الصوت، قد تواجه تشغيل صوت مسرع أو مشوه في سيناريوهات محددة. تحدث هذه المشكلة عادةً عندما:

  1. يكون تشغيل موجة الصوت قريبًا/عند نهاية المخزن المؤقت الحالي
  2. يتم إضافة بيانات صوتية جديدة باستمرار إلى موجة الصوت المتدفقة
  3. يلحق التشغيل بتيار البيانات الوارد

يمكنك إيقاف تعبئة بيانات الصوت في أي وقت دون مشاكل. ومع ذلك، بالنسبة للسيناريوهات التي تحتاج فيها إلى دفق مستمر (مثل دفق الصوت في الوقت الفعلي)، هناك نهجان اعتمادًا على موثوقية دفق بيانات الصوت لديك:

لتدفق موثوق ومتسق: استخدم مندوب OnPopulateAudioState لبدء التشغيل فور استلام القطعة الأولى.

لتدفق غير موثوق (مشاكل في الشبكة، بيانات متقطعة): أضف تأخيرًا إضافيًا حتى بعد تشغيل OnPopulateAudioState لبناء مخزن مؤقت أكبر قبل بدء التشغيل.

Using OnPopulateAudioState to avoid playback issues

ملاحظة: يمكنك إيقاف تعبئة بيانات الصوت في أي وقت دون التسبب في مشاكل في التشغيل. يعتمد النهج الدقيق على موثوقية دفق بيانات الصوت الخاص بك - استخدم التشغيل الفوري للتدفقات المتسقة، أو أضف تأخير تخزين مؤقت إضافي للتدفقات غير الموثوقة (على سبيل المثال، مشكلات اتصال الشبكة).

مثال على الاستخدام

في النهاية، قد يبدو تنفيذك كما يلي:

مثال على استخدام موجة صوتية متدفقة

On Populate Audio State

يعمل مندوب OnPopulateAudioState بشكل مشابه لـ OnPopulateAudioData ولكنه لا يبث بيانات الصوت التي تم تعبئتها. يمكن أن يكون هذا مفيدًا عندما تريد تتبع وقت تعبئة بيانات الصوت دون تمرير مصفوفة لبيانات الصوت المعبأة، مما قد يحسن الأداء.

On Populate Audio State delegate

العمل مع بيانات PCM

للوصول في الوقت الفعلي إلى بيانات PCM أثناء التشغيل، راجع معالجة بيانات PCM.