Reconnaissance vocale (STT) est une forme de technologie qui génère automatiquement du texte à partir de sons de la parole. Avec la STT, vous pouvez créer des mondes plus immersifs en permettant aux joueurs de parler aux PNJ, de générer du texte sans avoir besoin d'enregistrer à l'avance un audio spécifique, d'améliorer l'accessibilité pour les joueurs ayant des limitations motrices ou visuelles, et de fournir aux joueurs des contrôles mains libres grâce à des raccourcis vocaux pour des actions comme ouvrir leur inventaire ou lancer un sort.
En utilisant le fichier Gingerbread House - Start .rbxl comme point de départ, ce tutoriel vous montre comment ajouter du texte généré dynamiquement à partir de la parole dans votre jeu, y compris des conseils sur la façon de mettre en œuvre la STT afin que le joueur puisse interagir avec des objets dans votre monde 3D.
Objets audio
Pour créer de l'audio STT, il est important de comprendre les objets audio avec lesquels vous allez travailler tout au long de ce tutoriel. Il existe trois types d'objets audio pour la STT :
- L'objet AudioDeviceInput est un dispositif matériel physique dans le monde réel, tel qu'un microphone dans un ordinateur portable, un téléphone ou un casque.
- L'objet AudioSpeechToText convertit les sons de la parole en chaînes de texte.
- Wires transportent des flux audio d'un objet à un autre.
Tous ces objets audio travaillent ensemble pour générer du texte STT en réponse aux actions du joueur. Par exemple, si le joueur porte un casque tout en jouant à un jeu avec son ordinateur portable :
- L'AudioDeviceInput capture la parole du joueur, telle qu'elle est prononcée dans son microphone et sous forme de flux audio.
- Un Wire transporte le flux audio de l'AudioDeviceInput à l'AudioSpeechToText.
- L'AudioSpeechToText convertit la parole du joueur en texte.
- Le jeu lit ce texte et effectue une action, comme afficher le texte prononcé à l'écran ou ouvrir une porte à la demande du joueur.
Activer l'utilisation du microphone
Avant d'ajouter la STT à un jeu, vous devez d'abord activer l'utilisation du microphone et publier le jeu.
- Ouvrez le fichier Gingerbread House - Start dans Studio.
- Créez une copie locale.
- Publiez votre copie locale du jeu.
- De retour dans Studio, allez dans Fichier ⟩ Paramètres de l'expérience ⟩ Communication.
- Activez Activer le microphone.
- Enregistrez vos modifications.
Ajouter une capture vocale simple
Pour ajouter une capture vocale simple à votre copie locale du fichier Gingerbread House - Start :
Activez l'utilisation de la dernière API pour la voix.
- Dans la fenêtre Explorateur, sélectionnez le VoiceChatService.
- Dans la fenêtre Propriétés, définissez UseAudioApi sur Activé.
Créez les objets audio de base qui vous permettront de capturer des mots prononcés.
- Dans la fenêtre Explorateur, allez dans Workspace > DialogueVolume.
- Supprimez tous les objets à l'intérieur du dossier DialogueVolume.
- Insérez les objets suivants dans le dossier DialogueVolume :
- Un AudioDeviceInput pour capturer la parole.
- Un AudioSpeechToText pour convertir la parole en texte.
- Un Wire pour transporter le flux de l'entrée audio vers l'instance STT.
- Dans la fenêtre Propriétés de l'objet AudioSpeechToText, définissez l'état Enabled sur activé.
- Dans la fenêtre Propriétés de l'objet Wire :
- Définissez SourceInstance sur votre nouvel AudioDeviceInput pour spécifier que vous souhaitez que le fil transporte l'audio de cette instance audio spécifique.
- Définissez TargetInstance sur votre nouvel AudioSpeechToText pour spécifier que vous souhaitez que le fil transporte l'audio vers cette instance audio spécifique.
Définissez la propriété Player de l'entrée audio sur le joueur local à l'exécution. Cela indique à Roblox de quel utilisateur le microphone doit capturer l'audio.
- Dans la fenêtre Explorateur, allez dans StarterPlayer > StarterCharacterScripts.
- Insérez un LocalScript et nommez-le ListenForMagicWord.
- Collez le code suivant dans le nouveau script local :
local audioDeviceInput = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioDeviceInput')-- Lie le microphone au joueur localaudioDeviceInput.Player = game.Players.LocalPlayer
Tester votre capture vocale
Après avoir ajouté une capture vocale simple, vous pouvez tester le jeu pour vous assurer que votre implémentation de la STT fonctionne correctement. Parler dans votre microphone devrait remplir la propriété AudioSpeechToText avec la version texte de votre discours.
Pour tester votre capture vocale :
- Sous Test > Clients et serveurs, sélectionnez Test d'équipe.
- Cliquez sur Démarrer pour démarrer le serveur de test.
- Dans le nouveau serveur de test, désactivez le mode muet de votre microphone et prononcez quelques mots.
- Dans la fenêtre Explorateur, allez dans Workspace > DialogueVolume > AudioSpeechToText.
- Dans la fenêtre Propriétés de AudioSpeechToText, confirmez que les mots que vous avez prononcés dans votre microphone sont apparus comme la valeur de la propriété Text.
Utiliser la STT avec le gameplay
Pour connecter la STT au gameplay et faire en sorte que la porte de la maison en pain d'épice s'ouvre lorsque le joueur dit "Open Sesame" dans son microphone :
Créez un événement distant pour connecter le client au serveur.
- Nommez-le OpenDoor.
Ajoutez un nouveau script pour animer l'ouverture de la porte de la maison en pain d'épice.
- Sous ServerScriptService, insérez un script côté serveur Script.
- Nommez-le DoorService.
- Collez le code suivant dans le nouveau script :
-- Obtient le service ReplicatedStorage pour le stockage partagé entre le serveur et le client-- Obtient le TweenService pour le système de tweeninglocal ReplicatedStorage = game:GetService("ReplicatedStorage")local TweenService = game:GetService("TweenService")-- Permet au client de demander au serveur d'ouvrir la portelocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Fonction qui anime la porte pour se déplacer vers le bas et s'ouvrirlocal 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-- Connecte la fonction à l'événementremoteEvent.OnServerEvent:Connect(openDoor)Connectez la porte à la reconnaissance vocale afin qu'une action se produise lorsque le joueur parle dans son microphone.
- Allez dans StarterPlayer > StarterCharacterScripts.
- Ouvrez le script ListenForMagicWord que vous avez créé précédemment.
- Ajoutez les lignes suivantes :
-- Obtient le service ReplicatedStorage pour le stockage partagé entre le serveur et le clientlocal ReplicatedStorage = game:GetService("ReplicatedStorage")-- Obtient l'événement RemoveEvent que le client déclenchera vers le serveurlocal remoteEvent = ReplicatedStorage:WaitForChild("OpenDoor")-- Trouve le nœud STT dans le graphe de scène-- La propriété Text du nœud se met à jour à mesure qu'il reconnaît la parolelocal speechToText = workspace:WaitForChild('DialogueVolume'):WaitForChild('AudioSpeechToText')-- Fonction qui dit au serveur d'ouvrir la porte si la STT capture le joueur disant "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)Testez votre implémentation de la STT.
- Sous Test > Clients et serveurs, sélectionnez Test d'équipe.
- Cliquez sur Démarrer pour démarrer le serveur de test.
- Dans le nouveau serveur de test, approchez-vous de la porte, désactivez le mode muet de votre microphone et dites "Open Sesame". La porte devrait s'ouvrir et vous permettre d'entrer dans la maison en pain d'épice.