The VoiceChat namespace contains functions for controlling voice chat in a game.
|Class Function Name||Return Type||Description||Tags|
| || ||Enables or disables voice chat in the current game.||Server-Only|
| || ||Returns the current voice chat mode.||None|
| || ||Returns true if the given player is currently speaking in the game channel.||Client-Only|
| || ||Returns a value from 0.0 to 1.0 to indicate how loudly the given player is speaking.||Client-Only|
| || ||Returns the channel with the given name, or ||None|
| || ||Returns a list of voice chat channels.||None|
| || ||Returns a list of voice chat channels that the given player is in.||None|
| || ||Returns ||None|
| || ||Mutes the given player in the specified channel.||Server-Only|
| || ||Unmutes the given player in the specified channel.||Server-Only|
| || ||Returns ||None|
In this example, players are muted when they die and unmuted when they respawn. While it's possible to mute a player in a specific channel, this example loops through all the channels a player participates in and mutes them in all.
function OnDied(player) for _,channel in ipairs(VoiceChat.GetChannelsForPlayer(player)) do channel:MutePlayer(player) end end function OnSpawned(player) for _,channel in ipairs(VoiceChat.GetChannelsForPlayer(player)) do channel:UnmutePlayer(player) end end Game.playerJoinedEvent:Connect(function(player) player.diedEvent:Connect(OnDied) player.spawnedEvent:Connect(OnSpawned) end)
In this example, a client context is setup with a UI Container and some UI Images underneath. This script finds all those images and assigns one to each player, setting the player's profile picture to appear in the image and tinting the image green whenever they speak.
-- Client Only local IMAGES = script.parent:FindDescendantsByType("UIImage") function Tick() for i,player in ipairs(Game.GetPlayers()) do local image = IMAGES[i] if image then image:SetPlayerProfile(player) if VoiceChat.IsPlayerSpeaking(player) then -- If this player is speaking, tint their picture green image:SetColor(Color.GREEN) else -- Otherwise, set their picture color back to normal image:SetColor(Color.WHITE) end end end end
This example shows how to change the Voice Chat Mode. It will only allow an admin player to change the mode for the server by pressing 1, 2, or 3. When the mode has changed, all players in the game will be notified in chat.
Changing mode could be done automatically. For example, in the lobby the mode could be set to ALL so all players can hear each other, but in game it could be set to TEAM so only players on the same team can hear each other. This could be handy when discussing tactics.
-- Name of the player who is allowed to change the voice chat mode. -- Set this up as a custom property called "adminName" on the script. local ADMIN_NAME = script:GetCustomProperty("adminName") -- Will hold the binding event for the admin player. local adminBindingEvt -- Handler for the binding pressed event. function OnBindingPressed(player, binding) -- Key 1 changes the mode to TEAM. if binding == "ability_extra_1" then VoiceChat.SetVoiceChatMode(VoiceChatMode.TEAM) Chat.BroadcastMessage("Voice Chat Mode set to TEAM") -- Key 2 changes the mode to ALL. elseif binding == "ability_extra_2" then VoiceChat.SetVoiceChatMode(VoiceChatMode.ALL) Chat.BroadcastMessage("Voice Chat Mode set to ALL") -- Key 3 changes the mode to NONE. elseif binding == "ability_extra_3" then VoiceChat.SetVoiceChatMode(VoiceChatMode.NONE) Chat.BroadcastMessage("Voice Chat Mode set to NONE") end end -- Handler for the player joined event. function OnPlayerJoined(player) -- Check if the player joining the game is the admin player -- so the binding event can be setup just for them. if player.name == ADMIN_NAME then adminBindingEvt = player.bindingPressedEvent:Connect(OnBindingPressed) end end -- When a player leaves the game, check if it was the admin player so -- the binding event can be disconnected. function OnPlayerLeft(player) if player.name == ADMIN_NAME and adminBindingEvt ~= nil and adminBindingEvt.isConnected then adminBindingEvt:Disconnect() adminBindingEvt = nil end end -- Bind the joined and left events Game.playerJoinedEvent:Connect(OnPlayerJoined) Game.playerLeftEvent:Connect(OnPlayerLeft)