การแปลงเสียงเป็นข้อความ (STT) เป็นรูปแบบของเทคโนโลยีที่สร้างข้อความโดยอัตโนมัติจากเสียงพูด ด้วย STT คุณสามารถสร้างโลกที่มีความสมจริงมากขึ้นโดยอนุญาตให้ผู้เล่นพูดคุยกับ NPC สร้างข้อความโดยไม่ต้องบันทึกเสียงเฉพาะล่วงหน้า ปรับปรุงการเข้าถึงสำหรับผู้เล่นที่มีข้อจำกัดด้านการเคลื่อนไหวหรือการมองเห็น และให้ผู้เล่นควบคุมด้วยมือว่างผ่านทางลัดเสียงสำหรับการกระทำ เช่น การเปิดคลังของพวกเขาหรือการร่ายเวทมนตร์
โดยใช้ไฟล์ Gingerbread House - Start .rbxl เป็นจุดเริ่มต้น บทช่วยสอนนี้จะแสดงให้คุณเห็นวิธีการเพิ่มข้อความที่สร้างขึ้นจากเสียงพูดไปยังเกมของคุณ รวมถึงคำแนะนำเกี่ยวกับวิธีการใช้งาน STT เพื่อให้ผู้เล่นสามารถโต้ตอบกับวัตถุในโลก 3D ของคุณได้
วัตถุเสียง
ในการสร้างเสียง STT สิ่งสำคัญคือต้องเข้าใจวัตถุเสียงที่คุณจะทำงานด้วยตลอดบทช่วยสอนนี้ มีวัตถุเสียงสามประเภทสำหรับ STT:
- วัตถุ AudioDeviceInput เป็นอุปกรณ์ฮาร์ดแวร์จริงในโลก เช่น ไมโครโฟนในแล็ปท็อป โทรศัพท์ หรือหูฟัง
- วัตถุ AudioSpeechToText แปลงเสียงพูดเป็นข้อความ
- Wires ส่งสัญญาณเสียงจากวัตถุหนึ่งไปยังอีกวัตถุหนึ่ง
วัตถุเสียงทั้งหมดนี้ทำงานร่วมกันเพื่อสร้างข้อความ STT เพื่อตอบสนองต่อการกระทำของผู้เล่น ตัวอย่างเช่น หากผู้เล่นสวมใส่หูฟังขณะเล่นเกมด้วยแล็ปท็อปของพวกเขา:
- AudioDeviceInput จะจับเสียงพูดของผู้เล่นที่พูดเข้าไปในไมโครโฟนและเป็นสตรีมเสียง
- Wire จะส่งสัญญาณเสียงจาก AudioDeviceInput ไปยัง AudioSpeechToText
- AudioSpeechToText จะเปลี่ยนเสียงพูดของผู้เล่นเป็นข้อความ
- เกมจะอ่านข้อความนี้และทำการกระทำ เช่น แสดงข้อความที่พูดบนหน้าจอหรือเปิดประตูตามคำสั่งของผู้เล่น
เปิดใช้งานการใช้ไมโครโฟน
ก่อนที่จะเพิ่ม STT ลงในเกม คุณต้องเปิดใช้งานการใช้ไมโครโฟนและเผยแพร่เกมก่อน
- เปิดไฟล์ Gingerbread House - Start ใน Studio
- สร้างสำเนาท้องถิ่น
- เผยแพร่สำเนาท้องถิ่นของเกมของคุณ
- กลับไปที่ Studio ไปที่ ไฟล์ ⟩ การตั้งค่าประสบการณ์ ⟩ การสื่อสาร
- เปิดใช้งาน เปิดไมโครโฟน
- บันทึกการเปลี่ยนแปลงของคุณ
เพิ่มการจับเสียงพูดอย่างง่าย
เพื่อเพิ่มการจับเสียงพูดอย่างง่ายไปยังสำเนาท้องถิ่นของไฟล์ Gingerbread House - Start:
เปิดใช้งานการใช้ API ล่าสุดสำหรับเสียง
- ในหน้าต่าง Explorer ให้เลือก VoiceChatService
- ในหน้าต่าง Properties ให้ตั้งค่า UseAudioApi เป็น Enabled
สร้างวัตถุเสียงพื้นฐานที่จะช่วยให้คุณจับคำพูด
- ในหน้าต่าง Explorer ไปที่ Workspace > DialogueVolume
- ลบวัตถุทั้งหมดภายในโฟลเดอร์ DialogueVolume
- แทรกวัตถุต่อไปนี้ลงในโฟลเดอร์ DialogueVolume:
- AudioDeviceInput เพื่อจับเสียงพูด
- AudioSpeechToText เพื่อแปลงเสียงพูดเป็นข้อความ
- Wire เพื่อส่งสัญญาณจากอุปกรณ์จับเสียงไปยังอินสแตนซ์ STT
- ในหน้าต่าง Properties ของวัตถุ AudioSpeechToText ให้ตั้งค่า Enabled เป็นเปิด
- ในหน้าต่าง Properties ของวัตถุ Wire:
- ตั้งค่า SourceInstance เป็น AudioDeviceInput ใหม่ของคุณเพื่อระบุว่าคุณต้องการให้สายส่งเสียงจากอินสแตนซ์เสียงนี้
- ตั้งค่า TargetInstance เป็น AudioSpeechToText ใหม่ของคุณเพื่อระบุว่าคุณต้องการให้สายส่งเสียงไปยังอินสแตนซ์เสียงนี้
ตั้งค่า Player ของอุปกรณ์จับเสียงให้เป็นผู้เล่นท้องถิ่นในระหว่างการทำงาน นี่บอก Roblox ว่าไมโครโฟนของผู้ใช้คนใดที่จะจับเสียง
- ในหน้าต่าง Explorer ไปที่ StarterPlayer > StarterCharacterScripts
- แทรก LocalScript และตั้งชื่อว่า ListenForMagicWord
- วางโค้ดต่อไปนี้ลงในสคริปต์ท้องถิ่นใหม่:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- ผูกไมโครโฟนกับผู้เล่นท้องถิ่นaudioDeviceInput.Player = game.Players.LocalPlayer
ทดสอบการจับเสียงพูดของคุณ
หลังจากที่คุณเพิ่มการจับเสียงพูดอย่างง่ายแล้ว คุณสามารถทดสอบเกมเพื่อให้แน่ใจว่าการใช้งาน STT ของคุณทำงานได้อย่างถูกต้อง การพูดเข้าไมโครโฟนของคุณควรทำให้คุณสมบัติ AudioSpeechToText มีข้อความที่เป็นข้อความของเสียงพูดของคุณ
ในการทดสอบการจับเสียงพูดของคุณ:
- ภายใต้ ทดสอบ > ลูกค้าและเซิร์ฟเวอร์ ให้เลือก Team Test
- คลิก เริ่ม เพื่อเริ่มเซิร์ฟเวอร์ทดสอบ
- ในเซิร์ฟเวอร์ทดสอบใหม่ ให้เปิดไมโครโฟนของคุณและพูดคำไม่กี่คำ
- ในหน้าต่าง Explorer ไปที่ Workspace > DialogueVolume > AudioSpeechToText
- ในหน้าต่าง Properties ของ AudioSpeechToText ยืนยันว่าคำที่คุณพูดเข้าไมโครโฟนของคุณได้ปรากฏเป็นค่าของคุณสมบัติ Text
ใช้ STT กับการเล่นเกม
เพื่อเชื่อมต่อ STT กับการเล่นเกมและทำให้ประตูบ้านขนมปังขิงเปิดเมื่อผู้เล่นพูดว่า "Open Sesame" เข้าไปในไมโครโฟนของพวกเขา:
สร้างเหตุการณ์ระยะไกลเพื่อเชื่อมต่อไคลเอนต์กับเซิร์ฟเวอร์
- ตั้งชื่อว่า 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 ในกราฟฉาก-- คุณสมบัติ Text ของโหนดจะอัปเดตเมื่อมันรู้จำเสียงพูดlocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- ฟังก์ชันที่บอกเซิร์ฟเวอร์ให้เปิดประตูหาก STT จับเสียงผู้เล่นพูดว่า "Open Sesame"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'open sesame') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)ทดสอบการใช้งาน STT ของคุณ
- ภายใต้ ทดสอบ > ลูกค้าและเซิร์ฟเวอร์ ให้เลือก Team Test
- คลิก เริ่ม เพื่อเริ่มเซิร์ฟเวอร์ทดสอบ
- ในเซิร์ฟเวอร์ทดสอบใหม่ เดินไปที่ประตู เปิดไมโครโฟนของคุณและพูดว่า "Open Sesame" ประตูควรเปิดและอนุญาตให้คุณเข้าไปในบ้านขนมปังขิง