Teks-ke-suara (STT) adalah bentuk teknologi yang secara otomatis menghasilkan teks dari suara. Dengan STT, Anda dapat menciptakan dunia yang lebih imersif dengan memungkinkan pemain berbicara kepada NPC, menghasilkan teks tanpa perlu merekam audio tertentu sebelumnya, meningkatkan aksesibilitas bagi pemain dengan keterbatasan motorik atau penglihatan, dan memberikan kontrol tanpa tangan kepada pemain melalui pintasan suara untuk tindakan seperti membuka inventaris mereka atau mengeluarkan mantra.
Menggunakan file Gingerbread House - Start .rbxl sebagai tempat awal, tutorial ini menunjukkan kepada Anda cara menambahkan teks yang dihasilkan secara dinamis dari suara ke dalam permainan Anda, termasuk panduan tentang cara mengimplementasikan STT sehingga pemain dapat berinteraksi dengan objek di dunia 3D Anda.
Objek audio
Untuk membuat audio STT, penting untuk memahami objek audio yang akan Anda gunakan sepanjang tutorial ini. Ada tiga jenis objek audio untuk STT:
- Objek AudioDeviceInput adalah perangkat keras fisik di dunia nyata, seperti mikrofon di laptop, ponsel, atau headset.
- Objek AudioSpeechToText mengubah suara menjadi string teks.
- Wires membawa aliran audio dari satu objek ke objek lainnya.
Semua objek audio ini bekerja sama untuk menghasilkan teks STT sebagai respons terhadap tindakan pemain. Misalnya, jika pemain mengenakan headset saat bermain game dengan laptop mereka:
- AudioDeviceInput menangkap suara pemain, seperti yang diucapkan ke mikrofon mereka dan sebagai aliran audio.
- Sebuah Wire membawa aliran audio dari AudioDeviceInput ke AudioSpeechToText.
- AudioSpeechToText mengubah suara pemain menjadi teks.
- Permainan membaca teks ini dan melakukan tindakan, seperti menampilkan teks yang diucapkan di layar atau membuka pintu atas perintah pemain.
Aktifkan penggunaan mikrofon
Sebelum menambahkan STT ke dalam permainan, Anda harus terlebih dahulu mengaktifkan penggunaan mikrofon dan menerbitkan permainan.
- Buka file Gingerbread House - Start di Studio.
- Buat salinan lokal.
- Terbitkan salinan lokal permainan Anda.
- Kembali ke Studio, pergi ke File ⟩ Pengaturan Pengalaman ⟩ Komunikasi.
- Aktifkan Aktifkan Mikrofon.
- Simpan perubahan Anda.
Tambahkan pengambilan suara sederhana
Untuk menambahkan pengambilan suara sederhana ke salinan lokal file Gingerbread House - Start:
Aktifkan penggunaan API terbaru untuk suara.
- Di jendela Explorer, pilih VoiceChatService.
- Di jendela Properties, atur UseAudioApi ke Enabled.
Buat objek audio dasar yang akan memungkinkan Anda menangkap kata-kata yang diucapkan.
- Di jendela Explorer, pergi ke Workspace > DialogueVolume.
- Hapus semua objek di dalam folder DialogueVolume.
- Masukkan objek berikut ke dalam folder DialogueVolume:
- Sebuah AudioDeviceInput untuk menangkap suara.
- Sebuah AudioSpeechToText untuk mengubah suara menjadi teks.
- Sebuah Wire untuk membawa aliran dari input perangkat audio ke instance STT.
- Di jendela Properties objek AudioSpeechToText, atur status Enabled ke aktif.
- Di jendela Properties objek Wire:
- Atur SourceInstance ke AudioDeviceInput baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio dari instance audio tertentu ini.
- Atur TargetInstance ke AudioSpeechToText baru Anda untuk menentukan bahwa Anda ingin kabel membawa audio ke instance audio tertentu ini.
Atur properti Player dari input perangkat audio ke pemain lokal saat runtime. Ini memberi tahu Roblox mikrofon pengguna mana yang harus menangkap audio.
- Di jendela Explorer, pergi ke StarterPlayer > StarterCharacterScripts.
- Masukkan LocalScript dan beri nama ListenForMagicWord.
- Tempelkan kode berikut ke dalam skrip lokal baru:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Mengikat mikrofon ke pemain lokalaudioDeviceInput.Player = game.Players.LocalPlayer
Uji pengambilan suara Anda
Setelah Anda menambahkan pengambilan suara sederhana, Anda dapat menguji permainan untuk memastikan implementasi STT Anda berfungsi dengan baik. Berbicara ke mikrofon Anda harus mengisi properti AudioSpeechToText dengan versi teks dari suara Anda.
Untuk menguji pengambilan suara Anda:
- Di bawah Test > Clients and Servers, pilih Team Test.
- Klik Start untuk memulai server uji.
- Di server uji baru, nyalakan mikrofon Anda dan ucapkan beberapa kata.
- Di jendela Explorer, pergi ke Workspace > DialogueVolume > AudioSpeechToText.
- Di jendela Properties dari AudioSpeechToText, konfirmasikan bahwa kata-kata yang Anda ucapkan ke mikrofon Anda telah muncul sebagai nilai dari properti Text.
Gunakan STT dengan gameplay
Untuk menghubungkan STT dengan gameplay dan membuat pintu rumah jahe terbuka ketika pemain mengatakan "Open Sesame" ke mikrofon mereka:
Buat sebuah remote event untuk menghubungkan klien ke server.
- Beri nama OpenDoor.
Tambahkan skrip baru untuk menganimasi pembukaan pintu rumah jahe.
- Di bawah ServerScriptService, masukkan Script sisi server.
- Beri nama DoorService.
- Tempelkan kode berikut ke dalam skrip baru:
-- Mendapatkan layanan ReplicatedStorage untuk penyimpanan bersama antara server dan klien-- Mendapatkan TweenService untuk sistem tweeninglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Memungkinkan klien meminta server untuk membuka pintulocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Fungsi yang menganimasi pintu untuk bergerak ke bawah dan terbukalocal 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-- Menghubungkan fungsi ke eventremoteEvent.OnServerEvent:Connect(openDoor)Hubungkan pintu ke teks-ke-suara sehingga sebuah tindakan terjadi ketika pemain berbicara ke mikrofon mereka.
- Pergi ke StarterPlayer > StarterCharacterScripts.
- Buka skrip ListenForMagicWord yang Anda buat sebelumnya.
- Tambahkan baris berikut:
-- Mendapatkan layanan ReplicatedStorage untuk penyimpanan bersama antara server dan klienlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Mendapatkan RemoveEvent yang akan dipicu klien ke serverlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Menemukan node STT di grafik scene-- Properti Text node diperbarui saat mengenali suaralocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Fungsi yang memberi tahu server untuk membuka pintu jika STT menangkap pemain mengatakan "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)Uji implementasi STT Anda.
- Di bawah Test > Clients and Servers, pilih Team Test.
- Klik Start untuk memulai server uji.
- Di server uji baru, berjalanlah ke pintu, nyalakan mikrofon Anda, dan katakan "Open Sesame". Pintu harus terbuka dan memungkinkan Anda masuk ke dalam rumah jahe.