All content on our site is free and will always be free.

Please consider supporting us with disabling your AdBlock software and to gain access to thousands of free content!

Not sure how to disable AdBLock? Follow this tutorial: How to disable AdBlock

Get the TTs Gui

The TTs Gui code is below. Copy & inject it into the game. Enjoy!

local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")
local Rayfield = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Rayfield/main/source'))()
local Window = Rayfield:CreateWindow({
 Name = "Text To Speech",
 LoadingTitle = "Loading..",
 LoadingSubtitle = "",
 ConfigurationSaving = {
  Enabled = true,
  FolderName = nil,
  FileName = "TTSConfig"
 },
 Discord = {
  Enabled = false,
  Invite = "sirius", -- The Discord invite code, do not include discord.gg/
  RememberJoins = true -- Set this to false to make them join the discord every time they load it up
 },
 KeySystem = false, -- Set this to true to use our key system
 KeySettings = {
  Title = "Sirius Hub",
  Subtitle = "Key System",
  Note = "Join the discord (discord.gg/sirius)",
  FileName = "SiriusKey",
  SaveKey = true,
  GrabKeyFromSite = false, -- If this is true, set Key below to the RAW site you would like Rayfield to get the key from
  Key = "Hello"
 }
})
local getcustomasset = getcustomasset or getsynasset
local Tab = Window:CreateTab("Main", 176572847)
local RequestSpeakers = {
 ["Arabic / Zeina"] = "Zeina",
 ["Australian English / Russell"] = "Russell",
 ["Australian English / Nicole"] = "Nicole",
 ["Brazilian Portuguese / Vitoria"] = "Vitoria",
 ["Brazilian Portuguese / Camila"] = "Camila",
 ["Brazilian Portuguese / Ricardo"] = "Ricardo",
 ["British English / Emma"] = "Emma",
 ["British English / Brian"] = "Brian",
 ["British English / Amy"] = "Amy",
 ["Canadian French / Chantal"] = "Chantal",
 ["Castilian Spanish / Conchita"] = "Conchita",
 ["Castilian Spanish / Lucia"] = "Lucia",
 ["Castilian Spanish / Enrique"] = "Enrique",
 ["Chinese Mandarin / Zhiyu"] = "Zhiyu",
 ["Danish / Naja"] = "Naja",
 ["Danish / Mads"] = "Mads",
 ["Dutch / Ruben"] = "Ruben",
 ["Dutch / Lotte"] = "Lotte",
 ["French / Celine"] = "Celine",
 ["French / Lea"] = "Lea",
 ["French / Mathieu"] = "Mathieu",
 ["German / Hans"] = "Hans",
 ["German / Vicki"] = "Vicki",
 ["German / Marlene"] = "Marlene",
 ["Icelandic / Dora"] = "Dora",
 ["Icelandic / Karl"] = "Karl",
 ["Indian English / Aditi"] = "Aditi",
 ["Indian English / Raveena"] = "Raveena",
 ["Italian / Bianca"] = "Bianca",
 ["Italian / Carla"] = "Carla",
 ["Italian / Giorgio"] = "Giorgio",
 ["Japanese / Takumi"] = "Takumi",
 ["Japanese / Mizuki"] = "Mizuki",
 ["Korean / Seoyeon"] = "Seoyeon",
 ["Mexican Spanish / Mia"] = "Mia",
 ["Norwegian / Liv"] = "Liv",
 ["Polish / Jacek"] = "Jacek",
 ["Polish / Jan"] = "Jan",
 ["Polish / Maja"] = "Maja",
 ["Polish / Ewa"] = "Ewa",
 ["Portuguese / Cristiano"] = "Cristiano",
 ["Portuguese / Ines"] = "Ines",
 ["Romanian / Carmen"] = "Carmen",
 ["Russian / Maxim"] = "Maxim",
 ["Russian / Tatyana"] = "Tatyana",
 ["Swedish / Astrid"] = "Astrid",
 ["Turkish / Filiz"] = "Filiz",
 ["US English / Salli"] = "Salli",
 ["US English / Ivy"] = "Ivy",
 ["US English / Joey"] = "Joey",
 ["US English / Matthew"] = "Matthew",
 ["US English / Kimberly"] = "Kimberly",
 ["US English / Kendra"] = "Kendra",
 ["US English / Justin"] = "Justin",
 ["US English / Joanna"] = "Joanna",
 ["US Spanish / Lupe"] = "Lupe",
 ["US Spanish / Penelope"] = "Penelope",
 ["US Spanish / Miguel"] = "Miguel",
 ["Welsh / Gwyneth"] = "Gwyneth",
 ["Welsh English / Geraint"] = "Geraint",
}
local Speakers = {
 "Arabic / Zeina",
 "Australian English / Russell",
 "Australian English / Nicole",
 "Brazilian Portuguese / Vitória",
 "Brazilian Portuguese / Camila",
 "Brazilian Portuguese / Ricardo",
 "British English / Emma",
 "British English / Brian",
 "British English / Amy",
 "Canadian French / Chantal",
 "Castilian Spanish / Conchita",
 "Castilian Spanish / Lucia",
 "Castilian Spanish / Enrique",
 "Chinese Mandarin / Zhiyu",
 "Danish / Naja",
 "Danish / Mads",
 "Dutch / Ruben",
 "Dutch / Lotte",
 "French / Céline",
 "French / Léa",
 "French / Mathieu",
 "German / Hans",
 "German / Vicki",
 "German / Marlene",
 "Icelandic / Dóra",
 "Icelandic / Karl",
 "Indian English / Aditi",
 "Indian English / Raveena",
 "Italian / Bianca",
 "Italian / Carla",
 "Italian / Giorgio",
 "Japanese / Takumi",
 "Japanese / Mizuki",
 "Korean / Seoyeon",
 "Mexican Spanish / Mia",
 "Norwegian / Liv",
 "Polish / Jacek",
 "Polish / Jan",
 "Polish / Maja",
 "Polish / Ewa",
 "Portuguese / Cristiano",
 "Portuguese / Inês",
 "Romanian / Carmen",
 "Russian / Maxim",
 "Russian / Tatyana",
 "Swedish / Astrid",
 "Turkish / Filiz",
 "US English / Salli",
 "US English / Ivy",
 "US English / Joey",
 "US English / Matthew",
 "US English / Kimberly",
 "US English / Kendra",
 "US English / Justin",
 "US English / Joanna",
 "US Spanish / Lupe",
 "US Spanish / Penélope",
 "US Spanish / Miguel",
 "Welsh / Gwyneth",
 "Welsh English / Geraint",
}
local CurrentSpeaker = "Joey"
local function TextToSpeechRawBinary(Text)
 return game:HttpGetAsync(HttpService:JSONDecode(game:HttpPostAsync("https://ttsmp3.com/makemp3_new.php", "msg=".. HttpService:UrlEncode(Text).. string.format("&lang=%s&source=ttsmp3", CurrentSpeaker), "application/x-www-form-urlencoded")).URL)
end
local function TextToSpeech(Text)
 local Got = TextToSpeechRawBinary(Text)
 local Sound = Instance.new("Sound")
 local RandomFileName = string.gsub(HttpService:GenerateGUID(false), "-", "").. ".mp3"
 writefile(RandomFileName, Got)
 Sound.SoundId = getcustomasset(RandomFileName)
 Sound.Volume = 2
 spawn(function()
  while true do
   if Sound.IsLoaded then
    delfile(RandomFileName)
    break
   end
   task.wait(0)
  end
 end)
 return Sound
end
local Toggled = true
local ChatService = game:GetService("Chat")
local TextChatService = game:GetService("TextChatService")
local ChatVersion = gethiddenproperty(TextChatService, "ChatVersion")
local Dropdown = Tab:CreateDropdown({
 Name = "Speaker",
 Options = Speakers,
 CurrentOption = "US English / Joey",
 Flag = "DropdownSpeakers", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
 Callback = function(Option)
  CurrentSpeaker = RequestSpeakers[Option]
 end,
})
local Toggle = Tab:CreateToggle({
 Name = "Toggle",
 CurrentValue = true,
 Flag = "ToggleTTS",
 Callback = function(Value)
  Toggled = Value
 end,
})
ChatService.Chatted:Connect(function(Part, Message)
 if Toggled then
  local TTS = TextToSpeech(Message)
  TTS.Parent = Part
  TTS.Playing = true
 end
end)
if ChatVersion == Enum.ChatVersion.TextChatService then
 TextChatService.MessageReceived:Connect(function(TCM)
  local Player = Players:GetPlayerByUserId(TCM.TextSource.UserId)
  if Player then
   local Character = Player.Character
   if Character then
    local Head = Character:FindFirstChild("Head")
    if Head then
     if Toggled then
      local TTS = TextToSpeech(TCM.Text)
      TTS.Parent = Head
      TTS.Playing = true
     end
    end
   end
  end
 end)
elseif ChatVersion == Enum.ChatVersion.LegacyChatService then
 local RemoteEventChatRecieve
 for _, v in pairs(game:GetDescendants()) do
  if v:IsA("RemoteEvent") then
   if v.Name == "OnMessageDoneFiltering" and v.Parent then
    if v.Parent:IsA("Folder") and v.Parent.Name == "DefaultChatSystemChatEvents" then
     RemoteEventChatRecieve = v
     break
    end
   end
  end
 end
 if RemoteEventChatRecieve == nil then
  local Connection
  Connection = game.DescendantAdded:Connect(function(v)
   if RemoteEventChatRecieve then
    Connection:Disconnect()
   end
   if v:IsA("RemoteEvent") then
    if v.Name == "OnMessageDoneFiltering" and v.Parent then
     if v.Parent:IsA("Folder") and v.Parent.Name == "DefaultChatSystemChatEvents" then
      RemoteEventChatRecieve = v
      Connection:Disconnect()
     end
    end
   end
  end)
 end
 while true do
  if RemoteEventChatRecieve then
   break
  end
  task.wait(0)
 end
 RemoteEventChatRecieve.OnClientEvent:Connect(function(MessageData)
  local Player = Players:GetPlayerByUserId(MessageData.SpeakerUserId)
  if Player then
   local Character = Player.Character
   if Character then
    local Head = Character:FindFirstChild("Head")
    if Head then
     if Toggled then
      local TTS = TextToSpeech(MessageData.Message)
      TTS.Parent = Head
      TTS.Playing = true
     end
    end
   end
  end
 end)
end