Riconoscimento vocale (STT) è una forma di tecnologia che genera automaticamente testo dai suoni della voce. Con STT, puoi creare mondi più immersivi consentendo ai giocatori di parlare con gli NPC, generare testo senza la necessità di registrare audio specifico in anticipo, migliorare l'accessibilità per i giocatori con limitazioni motorie o visive e fornire ai giocatori controlli a mani libere attraverso scorciatoie vocali per azioni come aprire il loro inventario o lanciare un incantesimo.
Utilizzando il file Gingerbread House - Start .rbxl come punto di partenza, questo tutorial ti mostra come aggiungere testo generato dinamicamente dalla voce al tuo gioco, inclusa la guida su come implementare STT in modo che il giocatore possa interagire con gli oggetti nel tuo mondo 3D.
Oggetti audio
Per creare audio STT, è importante comprendere gli oggetti audio con cui lavorerai durante questo tutorial. Ci sono tre tipi di oggetti audio per STT:
- L'oggetto AudioDeviceInput è un dispositivo hardware fisico nel mondo reale, come un microfono in un laptop, telefono o cuffie.
- L'oggetto AudioSpeechToText converte i suoni della voce in stringhe di testo.
- Wires trasportano flussi audio da un oggetto all'altro.
Tutti questi oggetti audio lavorano insieme per generare testo STT in risposta alle azioni del giocatore. Ad esempio, se il giocatore indossa delle cuffie mentre gioca con il laptop:
- L'AudioDeviceInput cattura il discorso del giocatore, come pronunciato nel microfono e come flusso audio.
- Un Wire trasporta il flusso audio dall'AudioDeviceInput all'AudioSpeechToText.
- L'AudioSpeechToText converte il discorso del giocatore in testo.
- Il gioco legge questo testo e compie un'azione, come visualizzare il testo pronunciato sullo schermo o aprire una porta su comando del giocatore.
Abilitare l'uso del microfono
Prima di aggiungere STT a un gioco, devi prima abilitare l'uso del microfono e pubblicare il gioco.
- Apri il file Gingerbread House - Start in Studio.
- Crea una copia locale.
- Pubblica la tua copia locale del gioco.
- Torna in Studio, vai su File ⟩ Impostazioni esperienza ⟩ Comunicazione.
- Attiva Abilita microfono.
- Salva le tue modifiche.
Aggiungi cattura vocale semplice
Per aggiungere una cattura vocale semplice alla tua copia locale del file Gingerbread House - Start:
Abilita l'uso dell'API più recente per la voce.
- Nella finestra Explorer, seleziona il VoiceChatService.
- Nella finestra Properties, imposta UseAudioApi su Enabled.
Crea gli oggetti audio di base che ti permetteranno di catturare le parole pronunciate.
- Nella finestra Explorer, vai su Workspace > DialogueVolume.
- Elimina tutti gli oggetti all'interno della cartella DialogueVolume.
- Inserisci i seguenti oggetti nella cartella DialogueVolume:
- Un AudioDeviceInput per catturare il discorso.
- Un AudioSpeechToText per convertire il discorso in testo.
- Un Wire per trasportare il flusso dall'input del dispositivo audio all'istanza STT.
- Nella finestra Properties dell'oggetto AudioSpeechToText, imposta lo stato Enabled su attivo.
- Nella finestra Properties dell'oggetto Wire:
- Imposta SourceInstance sul tuo nuovo AudioDeviceInput per specificare che desideri che il wire trasporti audio da questa specifica istanza audio.
- Imposta TargetInstance sul tuo nuovo AudioSpeechToText per specificare che desideri che il wire trasporti audio a questa specifica istanza audio.
Imposta la proprietà Player dell'input del dispositivo audio sul giocatore locale durante l'esecuzione. Questo dice a Roblox da quale microfono dell'utente catturare l'audio.
- Nella finestra Explorer, vai su StarterPlayer > StarterCharacterScripts.
- Inserisci uno LocalScript e chiamalo ListenForMagicWord.
- Incolla il seguente codice nel nuovo script locale:
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Collega il microfono al giocatore localeaudioDeviceInput.Player = game.Players.LocalPlayer
Testa la tua cattura vocale
Dopo aver aggiunto la cattura vocale semplice, puoi testare il gioco per assicurarti che la tua implementazione STT funzioni correttamente. Parlando nel tuo microfono, dovrebbe popolare la proprietà AudioSpeechToText con la versione testuale del tuo discorso.
Per testare la tua cattura vocale:
- Sotto Test > Clienti e Server, seleziona Team Test.
- Clicca su Start per avviare il server di test.
- Nel nuovo server di test, disattiva l'audio del microfono e pronuncia alcune parole.
- Nella finestra Explorer, vai su Workspace > DialogueVolume > AudioSpeechToText.
- Nella finestra Properties di AudioSpeechToText, conferma che le parole pronunciate nel tuo microfono siano apparse come valore della proprietà Text.
Usa STT con il gameplay
Per collegare STT al gameplay e far aprire la porta della casa di pan di zenzero quando il giocatore dice "Apri Sesamo" nel microfono:
Crea un evento remoto per collegare il client al server.
- Chiamalo OpenDoor.
Aggiungi un nuovo script per animare l'apertura della porta della casa di pan di zenzero.
- Sotto ServerScriptService, inserisci uno script lato server Script.
- Chiamalo DoorService.
- Incolla il seguente codice nel nuovo script:
-- Ottiene il servizio ReplicatedStorage per lo storage condiviso tra server e client-- Ottiene il TweenService per il sistema di tweeninglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Permette al client di chiedere al server di aprire la portalocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Funzione che anima la porta per muoversi verso il basso e aprirsilocal 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-- Collega la funzione all'eventoremoteEvent.OnServerEvent:Connect(openDoor)Collega la porta al riconoscimento vocale in modo che un'azione avvenga quando il giocatore parla nel microfono.
- Vai su StarterPlayer > StarterCharacterScripts.
- Apri lo script ListenForMagicWord che hai creato in precedenza.
- Aggiungi le seguenti righe:
-- Ottiene il servizio ReplicatedStorage per lo storage condiviso tra server e clientlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Ottiene l'evento remoto che il client attiverà sul serverlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Trova il nodo STT nel grafo della scena-- La proprietà Text del nodo si aggiorna mentre riconosce il discorsolocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Funzione che dice al server di aprire la porta se STT cattura il giocatore che dice "Apri Sesamo"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'apri sesamo') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)Testa la tua implementazione STT.
- Sotto Test > Clienti e Server, seleziona Team Test.
- Clicca su Start per avviare il server di test.
- Nel nuovo server di test, avvicinati alla porta, disattiva l'audio del microfono e dì "Apri Sesamo". La porta dovrebbe aprirsi e permetterti di entrare nella casa di pan di zenzero.