La reconnaissance vocale (STT) est une forme de technologie qui génère automatiquement du texte à partir de sons de 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 à pré-enregistrer des audio spécifiques, d'améliorer l'accessibilité pour les joueurs ayant des limitations motrices ou visuelles, et de fournir aux joueurs des contrôles sans les mains grâce à des raccourcis vocaux pour des actions telles que l'ouverture de leur inventaire ou le lancement d'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 à votre expérience, y compris des conseils sur la manière d'implémenter 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 travaillerez tout au long de ce tutoriel. Il y a trois types d'objets audio pour la STT :
- L'objet AudioDeviceInput est un dispositif matériel physique dans le monde réel, comme un microphone dans un ordinateur portable, un téléphone ou un casque.
- L'objet AudioSpeechToText convertit les sons de parole en chaînes de texte.
- Les Wires transportent des flux audio d'un objet à un autre.
Tous ces objets audio fonctionnent ensemble pour générer du texte STT en réponse aux actions des joueurs. Par exemple, si le joueur porte un casque tout en jouant à une expérience avec son ordinateur portable :
- L'AudioDeviceInput capture la parole du joueur, comme prononcée dans son microphone et sous forme de flux audio.
- Un Wire transporte le flux audio de l'AudioDeviceInput vers l'AudioSpeechToText.
- L'AudioSpeechToText convertit la parole du joueur en texte.
- L'expérience 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 à une expérience, vous devez d'abord activer l'utilisation du microphone et publier l'expérience.
- Ouvrez le fichier Gingerbread House - Start dans Studio.
- Créez une copie locale.
- Publiez votre copie locale de l'expérience.
- 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 Explorer, sélectionnez le VoiceChatService.
- Dans la fenêtre Propriétés, définissez UseAudioApi sur Enabled.
Créez les objets audio de base qui vous permettront de capturer les mots prononcés.
- Dans la fenêtre Explorer, 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'input 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 voulez que le câble transporte l'audio de cette instance audio spécifique.
- Définissez TargetInstance sur votre nouvel AudioSpeechToText pour spécifier que vous voulez que le câble transporte l'audio vers cette instance audio spécifique.
Définissez la propriété Player de l'input audio sur le joueur local au moment de l'exécution. Cela indique à Roblox de quel utilisateur le microphone doit capturer l'audio.
- Dans la fenêtre Explorer, 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
Testez votre capture vocale
Après avoir ajouté une capture vocale simple, vous pouvez tester l'expérience pour vous assurer que votre mise en œuvre de la STT fonctionne correctement. Parler dans votre microphone devrait peupler 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 commencer le serveur de test.
- Dans le nouveau serveur de test, désactivez le mode silencieux de votre microphone et prononcez quelques mots.
- Dans la fenêtre Explorer, 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 ouvrir la porte de la maison en pain d'épice lorsque le joueur dit "Ouvre-toi sésame" 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.
- 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 d'animationlocal 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 qu'elle se déplace vers le bas et s'ouvrelocal 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 distant que le client va déclencher pour 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 demande au serveur d'ouvrir la porte si STT capture le joueur disant "Ouvre-toi sésame"speechToText:GetPropertyChangedSignal('Text'):Connect(function()local text = speechToText.Textif text == '' thenreturnendprint(text)if (text.find(text, 'ouvre-toi sésame') ~= nil) thenremoteEvent:FireServer()endspeechToText.Text = ''end)Testez votre mise en œuvre de la STT.
- Sous Test > Clients et serveurs, sélectionnez Test d'équipe.
- Cliquez sur Démarrer pour commencer le serveur de test.
- Dans le nouveau serveur de test, approchez-vous de la porte, désactivez le mode silencieux de votre microphone et dites "Ouvre-toi sésame". La porte devrait s'ouvrir et vous permettre d'entrer dans la maison en pain d'épice.