Sintesi vocale (STT) è una forma di tecnologia che genera automaticamente testo da suoni vocali. Con la STT, puoi creare mondi più immersivi consentendo ai giocatori di parlare con gli NPC, generare testo senza la necessità di registrare specifici audio in anticipo, migliorare l'accessibilità per i giocatori con limitazioni motorie o visive e fornire ai giocatori controlli a mani libere tramite scorciatoie vocali per azioni come aprire il loro inventario o lanciare un incantesimo.
Usando il file Gingerbread House - Start .rbxl come punto di partenza, questo tutorial ti mostra come aggiungere testo generato dinamicamente dalla voce alla tua esperienza, inclusa la guida su come implementare la STT in modo che il giocatore possa interagire con oggetti nel tuo mondo 3D.
Oggetti audio
Per creare audio STT, è importante comprendere gli oggetti audio con cui lavorerai in 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 vocali in stringhe di testo.
- Wires trasmettono 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 cuffie mentre gioca a un'esperienza con il loro laptop:
- L'AudioDeviceInput cattura la voce del giocatore, come parlato nel loro microfono e come flusso audio.
- Un Wire trasmette il flusso audio dall'AudioDeviceInput all'AudioSpeechToText.
- L'AudioSpeechToText converte il discorso del giocatore in testo.
- L'esperienza legge questo testo ed esegue un'azione, come visualizzare il testo parlato sullo schermo o aprire una porta su comando del giocatore.
Abilitare l'uso del microfono
Prima di aggiungere la STT a un'esperienza, è necessario prima abilitarne l'uso e pubblicare l'esperienza.
- Apri il file Gingerbread House - Start in Studio.
- Crea una copia locale.
- Pubblica la tua copia locale dell'esperienza.
- Torna a Studio, vai su File ⟩ Impostazioni esperienza ⟩ Comunicazione.
- Attiva Abilita microfono.
- Salva le modifiche.
Aggiungi cattura vocale semplice
Per aggiungere una cattura vocale semplice alla tua copia locale del file Gingerbread House - Start:
Abilita l'uso della più recente API per la voce.
- Nella finestra Esplora, seleziona il VoiceChatService.
- Nella finestra Proprietà, imposta UseAudioApi su Abilitato.
Crea i base oggetti audio che ti permetteranno di catturare parole parlate.
- Nella finestra Esplora, vai a Workspace > DialogueVolume.
- Elimina tutti gli oggetti all'interno della cartella DialogueVolume.
- Inserisci i seguenti oggetti nella cartella DialogueVolume:
- Un AudioDeviceInput per catturare la voce.
- Un AudioSpeechToText per convertire il discorso in testo.
- Un Wire per trasmettere il flusso dall'input audio alla istanza STT.
- Nella finestra Proprietà dell'oggetto AudioSpeechToText, imposta lo stato Abilitato su attivo.
- Nella finestra Proprietà dell'oggetto Wire:
- Imposta SourceInstance sul tuo nuovo AudioDeviceInput per specificare che desideri che il cavo trasmetta audio da questa specifica istanza audio.
- Imposta TargetInstance sul tuo nuovo AudioSpeechToText per specificare che desideri che il cavo trasmetta audio a questa specifica istanza audio.
Imposta la proprietà Player dell'input audio sul giocatore locale durante l'esecuzione. Questo dice a Roblox da quale microfono dell'utente catturare audio.
- Nella finestra Esplora, vai a StarterPlayer > StarterCharacterScripts.
- Inserisci uno LocalScript e nominarlo 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 una cattura vocale semplice, puoi testare l'esperienza per assicurarti che la tua implementazione STT funzioni correttamente. Parlare nel tuo microfono dovrebbe popolare la proprietà AudioSpeechToText con la versione testuale del tuo discorso.
Per testare la tua cattura vocale:
- Sotto Test > Client e Server, seleziona Team Test.
- Fai clic su Inizia per avviare il server di test.
- Nel nuovo server di test, attiva il microfono e parla alcune parole.
- Nella finestra Esplora, vai a Workspace > DialogueVolume > AudioSpeechToText.
- Nella finestra Proprietà di AudioSpeechToText, conferma che le parole che hai pronunciato nel tuo microfono siano apparse come valore della proprietà Text.
Usa STT con il gameplay
Per collegare la STT al gameplay e far aprire la porta della casa di pan di zenzero quando il giocatore dice "Apri Sesame" nel microfono:
Crea un evento remoto per collegare il client al server.
- Nominalo 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.
- Nominalo DoorService.
- Incolla il seguente codice nel nuovo script:
-- Ottiene il servizio ReplicatedStorage per la memorizzazione condivisa tra server e client-- Ottiene il TweenService per il sistema di tweeninglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Consente 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 alla sintesi vocale in modo che un'azione avvenga quando il giocatore parla nel loro microfono.
- Vai a StarterPlayer > StarterCharacterScripts.
- Apri lo script ListenForMagicWord che hai creato in precedenza.
- Aggiungi le seguenti righe:
-- Ottiene il servizio ReplicatedStorage per la memorizzazione condivisa tra server e clientlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Ottiene l'evento RemoteEvent 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 la vocelocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Funzione che chiede al server di aprire la porta se STT cattura il giocatore che dice "Apri 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)Testa la tua implementazione STT.
- Sotto Test > Client e Server, seleziona Team Test.
- Fai clic su Inizia per avviare il server di test.
- Nel nuovo server di test, avvicinati alla porta, attiva il microfono e dì "Apri Sesame". La porta dovrebbe aprirsi e permetterti di entrare nella casa di pan di zenzero.