Ajouter du texte à la parole

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Texte-à-parole est une forme de technologie d'assistance qui convertit des chaînes de texte en sons de parole à l'aide d'une voix artificielle. En plus d'améliorer l'accessibilité de vos jeux pour les joueurs ayant des handicaps visuels, moteurs ou cognitifs, le TTS vous permet de générer de la parole dynamiquement afin que vous n'ayez pas à pré-enregistrer de l'audio pour tous les scénarios narratifs possibles.

En utilisant le fichier Gingerbread House - Start .rbxl comme point de départ et Gingerbread House - Text-to-Speech comme référence, ce tutoriel vous montre comment ajouter à la fois de l'audio TTS de base et contextuel à vos jeux, y compris des conseils sur :

  • Déclencher le TTS pour des scénarios de jeu courants qui ne changeront jamais, tels que les interactions UI et les tutoriels.
  • Configurer le TTS afin qu'il s'adapte aux actions des joueurs, à l'état de l'environnement ou à des objectifs flexibles.

Si à un moment donné vous vous retrouvez bloqué dans le processus, vous pouvez utiliser Gingerbread House - Text-to-Speech comme référence pour comparer vos progrès.

Objets audio

Pour créer de l'audio TTS, il est important de comprendre les objets audio avec lesquels vous allez travailler tout au long de ce tutoriel. Il existe cinq types principaux d'objets audio pour le TTS :

  • L'objet AudioTextToSpeech convertit des chaînes de texte en sons de parole.
  • L'objet AudioEmitter est un haut-parleur virtuel qui émet de l'audio dans l'environnement 3D.
  • L'objet AudioListener est un microphone virtuel qui capte l'audio de l'environnement 3D.
  • L'objet AudioDeviceOutput est un dispositif matériel physique dans le monde réel, tel qu'un haut-parleur ou des écouteurs.
  • Wires transportent des flux audio d'un objet à un autre.

Tous ces objets audio travaillent ensemble pour émettre un son TTS en réponse aux actions des joueurs. Voyons comment cela fonctionne en pratique pour l'audio 3D en utilisant un exemple d'un joueur portant un casque tout en jouant à un jeu sur son ordinateur portable :

  • Le AudioTextToSpeech charge et convertit le texte en audio chaque fois qu'un joueur touche une partie près d'un personnage non jouable (PNJ).
  • Le AudioEmitter émet un flux de l'audio TTS du PNJ dans l'environnement 3D.
  • Un Wire transporte le flux du AudioTextToSpeech au AudioEmitter afin que le flux sorte du PNJ.
  • L'objet enfant AudioListener du personnage écoute ce son dans l'environnement 3D et le renvoie à son casque.
  • L'objet AudioDeviceOutput transporte le son de AudioListener au haut-parleur physique du joueur, ou dans ce cas, à ses écouteurs.

Les sections suivantes approfondissent ces objets et les référencent alors que vous apprenez à jouer à la fois de l'audio de base et contextuel. En examinant ces objets avec les techniques à venir, vous pouvez prédire plus précisément comment capturer et transmettre le son du jeu au joueur.

TTS de base

Le TTS de base est la forme la plus courante de texte-à-parole dans laquelle la voix artificielle lit une chaîne de texte indépendamment du contexte du joueur ou de l'environnement. Cela signifie que chaque fois que le joueur déclenche l'audio TTS, les mots et la façon dont la voix artificielle lit les mots restent constants, peu importe l'état du joueur, ses actions ou l'état de l'environnement.

Cette forme de TTS est utile dans la plupart des scénarios de jeu, tels que les interactions des joueurs avec les menus UI, les tutoriels ou les interactions de routine avec les PNJ comme les offres de vendeurs ou les cris d'ennemis. Roblox fournit les types de voix suivants que vous pouvez expérimenter pour chacune de ces interactions :

VoiceIDDescription de la voixExemple audio
1Homme britannique
2Femme britannique
3Homme des États-Unis #1
4Femme des États-Unis #1
5Homme des États-Unis #2
6Femme des États-Unis #2
7Homme australien
8Femme australienne
9Voix rétro #1
10Voix rétro #2
11Voix de narrateur
101Homme espagnol
102Femme espagnole
201Homme allemand
202Femme allemande
301Homme italien
302Femme italienne
401Homme français
402Femme française

Pour recréer l'audio TTS 3D de base dans le fichier d'exemple Gingerbread House - Text-to-Speech :

  1. Activez un écouteur par défaut qui est attaché à votre personnage joueur.
    1. Dans la fenêtre Explorer, sélectionnez le SoundService.
    2. Dans la fenêtre Propriétés, définissez DefaultListenerLocation sur Character. Lorsque vous exécutez le jeu, le moteur crée automatiquement :
      • Un AudioListener sous Humanoid.RootPart de chaque personnage joueur afin que vous puissiez entendre les sons se déplacer dans vos haut-parleurs réels en fonction de la position et de l'échelle des sources sonores dans le jeu.
      • Un AudioDeviceOutput sous SoundService.
  2. Dans la fenêtre Explorer, naviguez vers WorkspaceDialogueVolume, puis :
    1. Insérez un objet AudioTextToSpeech pour créer un générateur de parole audio pour le volume autour du bonhomme de neige.
    2. Insérez un objet AudioEmitter pour émettre un flux positionnel depuis DialogueVolume.
    3. Insérez un objet Wire pour transporter le flux du générateur de parole audio à l'émetteur audio.
  3. Sélectionnez l'objet AudioTextToSpeech, puis dans la fenêtre Propriétés :
    1. Définissez Text sur "Collectez chaque dernier gumpdrop pour ouvrir ma maison !"
    2. Définissez VoiceId sur 2 pour que la voix artificielle imite une femme britannique.
    3. Définissez le Volume sur 3 pour jouer l'audio à un volume élevé afin que vous entendiez le son TTS par-dessus d'autres sources audio dans le jeu.
  4. Sélectionnez le Wire, puis dans la fenêtre Propriétés :
    1. Définissez SourceInstance sur votre nouvel AudioTextToSpeech pour spécifier que vous souhaitez que le fil transporte l'audio de ce générateur de parole audio spécifique.
    2. Définissez TargetInstance sur votre nouvel AudioEmitter pour spécifier que vous souhaitez que le fil transporte l'audio vers cet émetteur audio spécifique dans le volume.
  5. De retour dans la fenêtre Explorer, naviguez vers StarterPlayerStarterCharacterScripts, puis insérez un LocalScript, renommez-le en PlayBasicTTSAudioWhenInVolume, et collez le code suivant dans le script local :
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local humanoid = script.Parent:WaitForChild("Humanoid")
local volumeDetector = Workspace.DialogueVolume
local trigger = humanoid:WaitForChild("Animator")
local debounce = false
local localPlayer = Players.LocalPlayer
volumeDetector.Touched:Connect(function(hit)
if debounce then
return
end
local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
if hitPlayer ~= localPlayer then
return
end
debounce = true
local audioTextToSpeech = Workspace.DialogueVolume.AudioTextToSpeech
audioTextToSpeech:Play()
audioTextToSpeech.Ended:Wait()
debounce = false
end)

Ce script commence par obtenir les services Workspace et Players afin de pouvoir référencer leurs enfants et leur fonctionnalité. Pour chaque personnage joueur qui se charge ou respawn dans le jeu, le script attend :

  • Les objets Humanoid et Animator du personnage.
  • L'objet volume dans l'espace de travail nommé DialogueVolume.

Lorsque quelque chose entre en collision avec le volume, la fonction gestionnaire d'événements Touched obtient le premier ancêtre qui est un Model, qui devrait être le personnage si le BasePart qui a heurté le volume est un descendant d'un modèle de personnage. Si c'est le cas, la fonction alors :

  • Définit debounce sur true.
  • Joue et attend que l'audio TTS se termine.
  • Définit debounce à nouveau sur false.

Passer debounce de false à true puis à false à nouveau après que l'audio TTS de base ait fini de jouer est un modèle de debounce qui empêche l'audio de se déclencher à plusieurs reprises alors que les joueurs entrent continuellement en collision avec le volume. Pour plus d'informations sur ce modèle de debounce, voir Debounce - Détecter les collisions.

  1. Testez le jeu pour entendre le dialogue du personnage instructif lorsque votre personnage joueur touche le volume autour du bonhomme de neige.

Vous pouvez expérimenter davantage avec cet audio en modifiant les propriétés Text, VoiceID, Pitch, et Speed à de nouvelles valeurs. La parole générée devient entièrement différente sans avoir besoin d'enregistrer et de télécharger un nouveau fichier audio pour chaque scénario.

TTS contextuel

Le TTS contextuel est une forme plus avancée de texte-à-parole dans laquelle la voix artificielle lit une chaîne de texte en relation avec le joueur, l'état de son environnement ou le statut du jeu. Cela signifie que chaque fois que le joueur déclenche l'audio TTS, les mots et la façon dont la voix artificielle lit les mots s'adaptent en conséquence.

Cette forme de TTS est utile pour des scénarios de jeu qui changent constamment, tels que des indices audio directionnels, le statut des objectifs ou des interactions uniques avec les PNJ. Par conséquent, comme le TTS contextuel doit se transformer pour être précis, vous devez configurer les éléments de jeu afin de pouvoir suivre leur statut alors que les joueurs naviguent dans l'environnement et complètent les objectifs de jeu.

Bien qu'il existe de nombreuses façons d'accomplir cette tâche, l'exemple utilise des attributs personnalisés pour suivre la couleur et l'emplacement de chaque gumpdrop que le joueur doit collecter pour entrer dans la maison en pain d'épice. Pour plus d'informations sur les attributs, voir Propriétés et attributs.


Chaque objet gumpdrop a des attributs qui décrivent leur couleur et leur emplacement dans l'environnement.
Une vue rapprochée du gumpdrop jaune
Une vue rapprochée du gumpdrop vert
Une vue rapprochée du gumpdrop rouge

Pour recréer l'audio TTS 3D contextuel dans le fichier d'exemple Gingerbread House - Text-to-Speech :

  1. Dans la fenêtre Explorer, naviguez vers WorkspaceGumDrops.

  2. Configurez trois attributs personnalisés pour suivre le gumpdrop jaune.

    1. Sélectionnez le gumpdrop jaune, puis dans la fenêtre Propriétés, naviguez vers la section Attributs, puis cliquez sur l'icône plus. Une boîte de dialogue contextuelle s'affiche.
    2. Dans le champ Nom, saisissez ColorDescription.
    3. Dans le menu déroulant Type, sélectionnez string.
    4. Cliquez sur le bouton Enregistrer.
    5. Définissez le nouvel attribut ColorDescription sur jaune.
    6. En utilisant ce processus, créez deux autres attributs avec les valeurs suivantes.
    NomTypeValeur
    HintOrdernumber0
    LocationDescriptionstringprès de la cascade
  3. Configurez trois attributs personnalisés pour suivre le gumpdrop vert.

    1. Dans la fenêtre Explorer, sélectionnez le gumpdrop vert.
    2. Dans la fenêtre Propriétés, créez trois attributs avec les valeurs suivantes.
    NomTypeValeur
    ColorDescriptionstringvert
    HintOrdernumber1
    LocationDescriptionstringsur le rebord
  4. Configurez trois attributs personnalisés pour suivre le gumpdrop rouge.

    1. Dans la fenêtre Explorer, sélectionnez le gumpdrop rouge.
    2. Dans la fenêtre Propriétés, créez trois attributs avec les valeurs suivantes.
    NomTypeValeur
    ColorDescriptionstringrouge
    HintOrdernumber2
    LocationDescriptionstringderrière la clôture
  5. Dans la fenêtre Explorer, naviguez vers WorkspaceHintVolume, puis :

    1. Insérez un objet AudioTextToSpeech pour créer un générateur de parole audio pour le volume autour du renne.
    2. Insérez un objet AudioEmitter pour émettre un flux positionnel depuis HintVolume.
    3. Insérez un objet Wire pour transporter le flux du générateur de parole audio à l'émetteur audio.
  6. Sélectionnez le Wire, puis dans la fenêtre Propriétés :

    1. Définissez SourceInstance sur votre nouvel AudioTextToSpeech pour spécifier que vous souhaitez que le fil transporte l'audio de ce générateur de parole audio spécifique.
    2. Définissez TargetInstance sur votre nouvel AudioEmitter pour spécifier que vous souhaitez que le fil transporte l'audio vers cet émetteur audio spécifique dans le volume.
  7. De retour dans la fenêtre Explorer, naviguez vers StarterPlayerStarterCharacterScripts, puis insérez un LocalScript, renommez-le en PlayContextTTSAudioWhenInVolume, et collez le code suivant dans le script local :

local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local humanoid = script.Parent:WaitForChild("Humanoid")
local volumeDetector = Workspace.HintVolume
local trigger = humanoid:WaitForChild("Animator")
local debounce = false
local localPlayer = Players.LocalPlayer
function getRemainingGumdrops(): {Part}
local gumdropsFolder = Workspace.Gumdrops
local gumdrops = gumdropsFolder:GetChildren()
local remainingGumdrops = {};
for _, gumdrop in gumdrops do
if gumdrop:GetAttribute("Active") then
remainingGumdrops[#remainingGumdrops + 1] = gumdrop
end
end
table.sort(remainingGumdrops, function(a, b)
return a:GetAttribute("HintOrder") < b:GetAttribute("HintOrder")
end)
return remainingGumdrops
end
function getReindeerHint(remainingGumdrops: {Part}): string
local remainingGumdrops = getRemainingGumdrops()
if (#remainingGumdrops == 0) then
return "Il n'y a plus de gumpdrops. Vérifiez à l'intérieur de la maison."
end
local nextGumdrop = remainingGumdrops[1]
local colorDescription = nextGumdrop:GetAttribute("ColorDescription")
local locationDescription = nextGumdrop:GetAttribute("LocationDescription")
local message = #remainingGumdrops > 1
and "Il reste " .. #remainingGumdrops .. " gumpdrops. Cherchez le " .. colorDescription .. " " .. locationDescription .. "."
or "Il reste un gumpdrop. Il est " .. colorDescription .. " et il est " .. locationDescription .. "."
return message
end
volumeDetector.Touched:Connect(function(hit)
if debounce then
return
end
local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)
if hitPlayer ~= localPlayer then
return
end
print("Le joueur a touché le volume.")
debounce = true
local remainingGumdrops = getRemainingGumdrops()
local message = getReindeerHint(remainingGumdrops)
local audioTextToSpeech = Workspace.HintVolume.AudioTextToSpeech
audioTextToSpeech.Text = message
audioTextToSpeech:Play()
audioTextToSpeech.Ended:Wait()
debounce = false
end)

Ce script commence par obtenir les services Workspace et Players afin de pouvoir référencer leurs enfants et leur fonctionnalité. Pour chaque personnage joueur qui se charge ou respawn dans le jeu, le script attend :

  • Les objets Humanoid et Animator du personnage.
  • L'objet volume dans l'espace de travail nommé HintVolume.

La fonction getRemainingGumdrops() du script renvoie une liste d'objets gumpdrop Part dans le dossier Gumdrops et filtre toute partie que le joueur a collectée. Les gumpdrops restants sont triés dans un ordre spécifique selon l'attribut HintOrder de chaque gumpdrop.

La fonction getReindeerHint(remainingGumdrops) du script prend cette liste de getRemainingGumdrops() et renvoie un message en chaîne qui décrit où le joueur peut trouver les gumpdrops restants, y compris à la fois la description de la couleur et de l'emplacement du prochain gumpdrop que le joueur doit collecter. Cependant, si le joueur a collecté tous les gumpdrops dans l'environnement, le message en chaîne décrit où aller ensuite après avoir collecté tous les gumpdrops dans l'environnement.

Lorsque quelque chose entre en collision avec le volume, la fonction gestionnaire d'événements Touched obtient le premier ancêtre qui est un Model, qui devrait être le personnage si le BasePart qui a heurté le volume est un descendant d'un modèle de personnage. Si c'est le cas, la fonction alors :

  • Définit debounce sur true.
  • Obtient la liste des gumpdrops restants et le message en chaîne décrivant le prochain gumpdrop que le joueur doit trouver.
  • Convertit la chaîne en audio à l'aide de l'objet AudioTextToSpeech, joue l'audio et attend que l'audio se termine.
  • Définit debounce à nouveau sur false.

Passer debounce de false à true puis à false à nouveau après que l'audio TTS contextuel ait fini de jouer est un modèle de debounce qui empêche l'audio de se déclencher à plusieurs reprises alors que les joueurs entrent continuellement en collision avec le volume. Pour plus d'informations sur ce modèle de debounce, voir Debounce - Détecter les collisions.

  1. Testez le jeu pour entendre des indices contextuels lorsque votre personnage joueur touche le volume autour du renne. L'audio TTS change en fonction du nombre et de la couleur des gumpdrops que le personnage joueur a déjà trouvés dans l'environnement.

©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.