تحويل الكلام إلى نص (STT) هو شكل من أشكال التكنولوجيا التي تولد تلقائيًا نصًا من أصوات الكلام. مع STT، يمكنك إنشاء عوالم أكثر غمرًا من خلال السماح للاعبين بالتحدث إلى الشخصيات غير القابلة للعب، وتوليد نص دون الحاجة إلى تسجيل صوت محدد مسبقًا، وتحسين إمكانية الوصول للاعبين ذوي القيود الحركية أو البصرية، وتوفير تحكمات خالية من اليدين للاعبين من خلال اختصارات صوتية لأفعال مثل فتح مخزونهم أو إلقاء تعويذة.
باستخدام ملف Gingerbread House - Start .rbxl كنقطة انطلاق، يوضح لك هذا الدليل كيفية إضافة نص يتم توليده ديناميكيًا من الكلام إلى لعبتك، بما في ذلك إرشادات حول كيفية تنفيذ STT بحيث يمكن للاعب التفاعل مع الكائنات في عالمك ثلاثي الأبعاد.
كائنات الصوت
لإنشاء صوت STT، من المهم فهم كائنات الصوت التي ستعمل معها طوال هذا الدليل. هناك ثلاثة أنواع من كائنات الصوت لـ STT:
- كائن AudioDeviceInput هو جهاز مادي في العالم الحقيقي، مثل ميكروفون في لابتوب أو هاتف أو سماعة رأس.
- كائن AudioSpeechToText يقوم بتحويل أصوات الكلام إلى سلاسل نصية.
- Wires تحمل تدفقات الصوت من كائن إلى آخر.
تعمل جميع هذه الكائنات الصوتية معًا لتوليد نص STT استجابةً لأفعال اللاعب. على سبيل المثال، إذا كان اللاعب يرتدي سماعة رأس أثناء اللعب على لابتوبه:
- يقوم AudioDeviceInput بالتقاط كلام اللاعب، كما يُنطق في ميكروفونه وكتيار من الصوت.
- تحمل Wire تدفق الصوت من AudioDeviceInput إلى AudioSpeechToText.
- يقوم AudioSpeechToText بتحويل كلام اللاعب إلى نص.
- تقرأ اللعبة هذا النص وتقوم بإجراء، مثل عرض النص المنطوق على الشاشة أو فتح باب بناءً على أمر اللاعب.
تفعيل استخدام الميكروفون
قبل إضافة STT إلى لعبة، يجب أولاً تفعيل استخدام الميكروفون ونشر اللعبة.
- افتح ملف Gingerbread House - Start في الاستوديو.
- أنشئ نسخة محلية.
- انشر نسختك المحلية من اللعبة.
- عد إلى الاستوديو، انتقل إلى ملف ⟩ إعدادات التجربة ⟩ الاتصالات.
- قم بتشغيل تفعيل الميكروفون.
- احفظ تغييراتك.
إضافة التقاط الكلام البسيط
لإضافة التقاط كلام بسيط إلى نسختك المحلية من ملف Gingerbread House - Start:
قم بتمكين استخدام أحدث واجهة برمجة التطبيقات للصوت.
- في نافذة المستكشف، حدد VoiceChatService.
- في نافذة الخصائص، قم بتعيين UseAudioApi إلى مفعل.
أنشئ كائنات الصوت الأساسية التي ستتيح لك التقاط الكلمات المنطوقة.
- في نافذة المستكشف، انتقل إلى Workspace > DialogueVolume.
- احذف جميع الكائنات داخل مجلد DialogueVolume.
- أدخل الكائنات التالية في مجلد DialogueVolume:
- AudioDeviceInput لالتقاط الكلام.
- AudioSpeechToText لتحويل الكلام إلى نص.
- Wire لنقل التدفق من إدخال جهاز الصوت إلى مثيل STT.
- في نافذة الخصائص لكائن AudioSpeechToText، قم بتعيين حالة Enabled إلى التشغيل.
- في نافذة الخصائص لكائن Wire:
- قم بتعيين SourceInstance إلى AudioDeviceInput الجديد الخاص بك لتحديد أنك تريد أن تحمل السلك الصوت من هذا المثيل الصوتي المحدد.
- قم بتعيين TargetInstance إلى AudioSpeechToText الجديد الخاص بك لتحديد أنك تريد أن تحمل السلك الصوت إلى هذا المثيل الصوتي المحدد.
قم بتعيين خاصية Player لإدخال جهاز الصوت إلى اللاعب المحلي في وقت التشغيل. هذا يخبر Roblox من أي ميكروفون مستخدم يجب التقاط الصوت.
- في نافذة المستكشف، انتقل إلى StarterPlayer > StarterCharacterScripts.
- أدخل LocalScript وسمه ListenForMagicWord.
- الصق الكود التالي في البرنامج النصي المحلي الجديد:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- يربط الميكروفون باللاعب المحليaudioDeviceInput.Player = game.Players.LocalPlayer
اختبار التقاط الكلام الخاص بك
بعد إضافة التقاط الكلام البسيط، يمكنك اختبار اللعبة للتأكد من أن تنفيذ STT الخاص بك يعمل بشكل صحيح. يجب أن يؤدي التحدث في الميكروفون الخاص بك إلى ملء خاصية AudioSpeechToText بنسخة نصية من كلامك.
لاختبار التقاط الكلام الخاص بك:
- تحت اختبار > العملاء والخوادم، حدد اختبار الفريق.
- انقر على بدء لبدء خادم الاختبار.
- في خادم الاختبار الجديد، قم بإلغاء كتم صوت الميكروفون الخاص بك وتحدث بضع كلمات.
- في نافذة المستكشف، انتقل إلى Workspace > DialogueVolume > AudioSpeechToText.
- في نافذة الخصائص لـ AudioSpeechToText، تأكد من أن الكلمات التي نطقتها في الميكروفون الخاص بك قد ظهرت كقيمة لخاصية Text.
استخدام STT مع طريقة اللعب
لربط STT بطريقة اللعب وجعل باب منزل الزنجبيل يفتح عندما يقول اللاعب "افتح يا سمسم" في ميكروفونه:
أنشئ حدثًا بعيدًا لربط العميل بالخادم.
- سمها OpenDoor.
أضف برنامج نصي جديد لتحريك فتح باب منزل الزنجبيل.
- تحت ServerScriptService، أدخل Script من جانب الخادم.
- سمها DoorService.
- الصق الكود التالي في البرنامج النصي الجديد:
-- يحصل على خدمة ReplicatedStorage للتخزين المشترك بين الخادم والعميل-- يحصل على TweenService لنظام التويينlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- يسمح للعميل بطلب من الخادم فتح البابlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- وظيفة تحرك الباب لأسفل وتفتحهlocal function openDoor()local doorPart = workspace:WaitForChild("Door")local tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()end-- يربط الوظيفة بالحدثremoteEvent.OnServerEvent:Connect(openDoor)اربط الباب بتحويل الكلام إلى نص بحيث يحدث إجراء عندما يتحدث اللاعب في ميكروفونه.
- انتقل إلى StarterPlayer > StarterCharacterScripts.
- افتح البرنامج النصي ListenForMagicWord الذي أنشأته سابقًا.
- أضف الأسطر التالية:
-- يحصل على خدمة ReplicatedStorage للتخزين المشترك بين الخادم والعميلlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- يحصل على RemoveEvent الذي سيطلقه العميل إلى الخادمlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- يجد عقدة STT في رسم المشهد-- يتم تحديث خاصية النص للعقدة عندما تتعرف على الكلامlocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- وظيفة تخبر الخادم بفتح الباب إذا تم التقاط STT للاعب وهو يقول "افتح يا سمسم"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'افتح يا سمسم') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)اختبر تنفيذ STT الخاص بك.
- تحت اختبار > العملاء والخوادم، حدد اختبار الفريق.
- انقر على بدء لبدء خادم الاختبار.
- في خادم الاختبار الجديد، اقترب من الباب، قم بإلغاء كتم صوت الميكروفون الخاص بك، وقل "افتح يا سمسم". يجب أن يفتح الباب ويسمح لك بالدخول إلى منزل الزنجبيل.