Commencer
Tutoriels intermédiaires

Ajoutez 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.

Le texte-à-parole est une forme de technologie d'assistance qui convertit des chaînes de texte en sons de parole en utilisant une voix artificielle. En plus d'améliorer l'accessibilité de vos expériences pour les joueurs ayant des déficiences de vision, de mobilité ou cognitives, 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 un audio TTS de base et contextuel à vos expériences, y compris des conseils sur :

  • Le déclenchement de TTS pour des scénarios de gameplay communs qui ne changeront jamais, tels que les interactions UI et les tutoriels.
  • La configuration de TTS afin qu'il s'adapte aux actions des joueurs, à l'état environnemental ou à des objectifs flexibles.

Si à un moment donné vous êtes 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 un 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 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 du son TTS en réponse aux actions des joueurs. Regardons comment cela fonctionne en pratique pour l'audio 3D en utilisant un exemple d'un joueur portant un casque tout en jouant à une expérience avec 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 pour 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 l'AudioListener au haut-parleur physique du joueur, ou dans ce cas, à ses écouteurs.

Les sections suivantes approfondissent et font référence à ces objets pendant que vous apprenez à jouer à la fois de l'audio de base et contextuel. À mesure que vous examinez ces objets avec les techniques à venir, vous pouvez prédire plus précisément comment capturer et transmettre le son de l'expérience 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 environnemental.

Cette forme de TTS est utile dans la plupart des scénarios de gameplay, tels que les interactions des joueurs avec les menus UI, les tutoriels ou les interactions de routine des 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 l'hôte
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 de l'échantillon Gingerbread House - Text-to-Speech :

  1. Activez un auditeur par défaut qui est attaché à votre personnage de joueur.
    1. Dans la fenêtre Explorer, sélectionnez SoundService.
    2. Dans la fenêtre Properties, définissez DefaultListenerLocation sur Character. Lorsque vous exécutez l'expérience, le moteur crée automatiquement :
      • Un AudioListener sous chaque Humanoid.RootPart de personnage joueur pour que vous puissiez entendre les sons se déplacer dans vos haut-parleurs réels selon la position et l'échelle des sources sonores dans l'expérience.
      • 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 Properties :
    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 l'expérience.
  4. Sélectionnez le Wire, puis dans la fenêtre Properties :
    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 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 qu'il puisse référencer leurs enfants et fonctionnalités. Pour chaque personnage joueur qui se charge ou réapparaît dans l'expérience, le script attend :

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

Lorsque quoi que ce soit entre en collision avec le volume, la fonction de gestionnaire d'événements Touched obtient le premier ancêtre qui est un Model, qui devrait être le personnage si le BasePart qui est entré en collision avec le volume est un descendant d'un modèle de personnage. Si c'est le cas, la fonction ensuite :

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

Passer de false à true puis à false à nouveau une fois que l'audio TTS de base a fini de jouer est un motif 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 motif de debounce, consultez Debounce - Détecter les collisions.

  1. Testez l'expérience pour entendre le dialogue du personnage d'instruction 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 fonction du joueur, de l'état de son environnement ou de l'état du gameplay. 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 gameplay qui évoluent, tels que des indices audio directionnels, l'état des objectifs ou des interactions uniques avec des PNJ. Par conséquent, comme le TTS contextuel doit se transformer pour être précis, vous devez configurer les éléments de gameplay afin de suivre leur état pendant que les joueurs naviguent dans l'environnement et complètent des objectifs de gameplay.

Bien qu'il existe de nombreuses façons d'accomplir cette tâche, l'échantillon 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, consultez 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 de l'échantillon 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 Properties, naviguez à la section Attributes, puis cliquez sur l'icône plus. Une boîte de dialogue contextuelle s'affiche.
    2. Dans le champ Name, saisissez ColorDescription.
    3. Dans le menu déroulant Type, sélectionnez string.
    4. Cliquez sur le bouton Save.
    5. Définissez le nouvel attribut ColorDescription sur yellow.
    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 Properties, créez trois attributs avec les valeurs suivantes.
    NomTypeValeur
    ColorDescriptionstringgreen
    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 Properties, créez trois attributs avec les valeurs suivantes.
    NomTypeValeur
    ColorDescriptionstringred
    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 Properties :

    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 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 y a " .. #remainingGumdrops .. " gumpdrops restants. Cherchez le " .. colorDescription .. " " .. locationDescription .. "."
or "Il reste un gumpdrop. C'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 qu'il puisse référencer leurs enfants et fonctionnalités. Pour chaque personnage joueur qui se charge ou réapparaît dans l'expérience, 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 retourne 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 retourne un message sous forme de chaîne qui décrit où le joueur peut trouver les gumpdrops restants, y compris la description de couleur et d'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 quoi que ce soit entre en collision avec le volume, la fonction de gestionnaire d'événements Touched obtient le premier ancêtre qui est un Model, qui devrait être le personnage si le BasePart qui est entré en collision avec le volume est un descendant d'un modèle de personnage. Si c'est le cas, la fonction ensuite :

  • 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 en utilisant l'objet AudioTextToSpeech, joue l'audio et attend que l'audio se termine.
  • Définit debounce sur false.

Passer de false à true puis à false à nouveau une fois que l'audio TTS contextuel a fini de jouer est un motif 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 motif de debounce, consultez Debounce - Détecter les collisions.

  1. Testez les expériences pour entendre des conseils contextuels lorsque votre personnage joueur touche le volume autour du renne. L'audio TTS change selon le nombre et 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.