# VoiceChatService

Roblox Engine API class from Roblox Studio 0.744.0.7441077 (version-7aaa6838d36c4448).

- Inherits from, nearest first: [Instance](https://rapi.sleaze.dev/classes/Instance.md), [Object](https://rapi.sleaze.dev/classes/Object.md)
- Tags: Not creatable, Service
- Memory category: Instances
- HTML page: https://rapi.sleaze.dev/classes/VoiceChatService/
- Roblox documentation: https://create.roblox.com/docs/reference/engine/classes/VoiceChatService

**VoiceChatService** is responsible for voice chat's high-level functionality.

## Properties

### DefaultDistanceAttenuation

```luau
VoiceChatService.DefaultDistanceAttenuation: Enum.VoiceChatDistanceAttenuationType = Enum.VoiceChatDistanceAttenuationType.Inverse
```

- Tags: Plugin security, Read capabilities: Audio + Chat

Determines which distance attenuation curve the default voice chat setup uses when [`AudioDeviceInput`](https://rapi.sleaze.dev/classes/AudioDeviceInput.md) and [`AudioEmitter`](https://rapi.sleaze.dev/classes/AudioEmitter.md) objects are generated.

### EnableDefaultVoice

```luau
VoiceChatService.EnableDefaultVoice: boolean = true
```

- Tags: Plugin security, Read capabilities: Audio + Chat

Controls whether each voice-eligible player can be heard as though they were speaking through their character.

### EnableVoiceVolumeControls

```luau
VoiceChatService.EnableVoiceVolumeControls: Enum.RolloutState = Enum.RolloutState.Default
```

- Tags: Roblox script security, Read capabilities: Audio + Chat

Controls whether Roblox's built-in voice chat volume controls are available to players.

### UseAudioApi

```luau
VoiceChatService.UseAudioApi: Enum.AudioApiRollout = Enum.AudioApiRollout.Automatic
```

- Tags: Plugin security, Read capabilities: Audio + Chat

Controls whether voice chat is represented and controlled by [`AudioDeviceInput`](https://rapi.sleaze.dev/classes/AudioDeviceInput.md) objects.

### UseNewAudioApi

```luau
VoiceChatService.UseNewAudioApi: boolean = false
```

- Tags: Hidden, Roblox script security, Read capabilities: Audio + Chat

### UseNewControlPaths

```luau
VoiceChatService.UseNewControlPaths: boolean = false
```

- Tags: Hidden, Roblox engine security, Read capabilities: Audio + Chat

### UseNewJoinFlow

```luau
VoiceChatService.UseNewJoinFlow: boolean = false
```

- Tags: Hidden, Roblox engine security, Read capabilities: Audio + Chat

### UseStreamSwitching

```luau
VoiceChatService.UseStreamSwitching: boolean = false
```

- Tags: Hidden, Roblox engine security, Read capabilities: Audio + Chat

### VoiceChatEnabledForPlaceOnRcc

```luau
VoiceChatService.VoiceChatEnabledForPlaceOnRcc: boolean = false
```

- Tags: Hidden, Roblox script security, Read capabilities: Audio + Chat

### VoiceChatEnabledForUniverseOnRcc

```luau
VoiceChatService.VoiceChatEnabledForUniverseOnRcc: boolean = false
```

- Tags: Hidden, Roblox script security, Read capabilities: Audio + Chat

## Methods

### GetChatGroupsAsync

```luau
VoiceChatService:GetChatGroupsAsync(players: { Instance }): { any }
```

- Tags: Yields, Capabilities: Audio + Chat

Returns chat group IDs that indicate which players can voice chat together.

Parameters:

- `players`: A list of [`Players`](https://rapi.sleaze.dev/classes/Players.md) currently in the experience to evaluate for voice chat compatibility.

Returns: A sorted array of arrays of chat group ID strings. Players who share a matching chat group ID are eligible to voice chat with each other.

### IsVoiceEnabledForUserIdAsync

```luau
VoiceChatService:IsVoiceEnabledForUserIdAsync(userId: User): boolean
```

- Tags: Yields, Capabilities: Audio + Chat

Returns whether or not the given user has voice enabled.

Parameters:

- `userId`: The [`Player.UserId`](https://rapi.sleaze.dev/classes/Player.md) to check.

Returns: If that user has voice enabled.

### getInternalChannelId

```luau
VoiceChatService:getInternalChannelId(): string
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### getInternalGroupId

```luau
VoiceChatService:getInternalGroupId(): string
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### getInternalPublishPause

```luau
VoiceChatService:getInternalPublishPause(): boolean
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### getInternalSessionId

```luau
VoiceChatService:getInternalSessionId(): string
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### getInternalSubscribePause

```luau
VoiceChatService:getInternalSubscribePause(userId: number): boolean
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### getInternalSubscribePauseAll

```luau
VoiceChatService:getInternalSubscribePauseAll(): boolean
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### getInternalVoiceChatApiVersion

```luau
VoiceChatService:getInternalVoiceChatApiVersion(): number
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### isInternalPublishPaused

```luau
VoiceChatService:isInternalPublishPaused(): boolean
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### joinVoice

```luau
VoiceChatService:joinVoice()
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### lastVoiceChatConnectivity

```luau
VoiceChatService:lastVoiceChatConnectivity(): { [string]: any }
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### lastVoiceChatStats

```luau
VoiceChatService:lastVoiceChatStats(): { [string]: any }
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### lastVoiceChatSubscriptions

```luau
VoiceChatService:lastVoiceChatSubscriptions(): { [string]: any }
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### leaveVoice

```luau
VoiceChatService:leaveVoice(leaveReason: Enum.VoiceClientLeaveReasons? = Enum.VoiceClientLeaveReasons.LuaInitiated)
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### notifyServerACSCleanup

```luau
VoiceChatService:notifyServerACSCleanup()
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### rejoinVoice

```luau
VoiceChatService:rejoinVoice()
```

- Tags: Roblox script security, Capabilities: Audio + Chat

## Events

### ACSCleanup

```luau
VoiceChatService.ACSCleanup: RBXScriptSignal<()>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### ClientRetryJoin

```luau
VoiceChatService.ClientRetryJoin: RBXScriptSignal<()>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### ClientRetryJoinWithConfig

```luau
VoiceChatService.ClientRetryJoinWithConfig: RBXScriptSignal<(sessionConfigFlags: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### ClientStreamSwitchAck

```luau
VoiceChatService.ClientStreamSwitchAck: RBXScriptSignal<(eventTag: number, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### FetchUserTurnAuthOperationFailed

```luau
VoiceChatService.FetchUserTurnAuthOperationFailed: RBXScriptSignal<(sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### JoinedVoice

```luau
VoiceChatService.JoinedVoice: RBXScriptSignal<(channelName: string, participantId: number, sessionId: string, channelId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### JoinedVoiceV2

```luau
VoiceChatService.JoinedVoiceV2: RBXScriptSignal<(channelName: string, participantId: number, sessionId: string, channelId: string, sfuImage: string, sfuTag: string, sfuDataCenterId: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeAcked

```luau
VoiceChatService.PublishingHandshakeAcked: RBXScriptSignal<(handshakeAnswer: string, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeAckedWithBothSdp

```luau
VoiceChatService.PublishingHandshakeAckedWithBothSdp: RBXScriptSignal<(fullHandshakeAnswer: string, compressedHandshakeAnswer: string, sessionId: string, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeAckedWithCompressedSdp

```luau
VoiceChatService.PublishingHandshakeAckedWithCompressedSdp: RBXScriptSignal<(compressedHandshakeAnswer: string, sessionId: string, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeCompleted

```luau
VoiceChatService.PublishingHandshakeCompleted: RBXScriptSignal<(sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeInitiated

```luau
VoiceChatService.PublishingHandshakeInitiated: RBXScriptSignal<(handshakeOffer: string, muteState: Enum.MuteState, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeInitiatedWithBothSdp

```luau
VoiceChatService.PublishingHandshakeInitiatedWithBothSdp: RBXScriptSignal<(fullHandshakeOffer: string, compressedHandshakeOffer: string, muteState: Enum.MuteState, sessionId: string, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishingHandshakeInitiatedWithCompressedSdp

```luau
VoiceChatService.PublishingHandshakeInitiatedWithCompressedSdp: RBXScriptSignal<(compressedHandshakeOffer: string, muteState: Enum.MuteState, sessionId: string, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### PublishStateChange

```luau
VoiceChatService.PublishStateChange: RBXScriptSignal<(muteState: Enum.MuteState, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### ReJoinedVoice

```luau
VoiceChatService.ReJoinedVoice: RBXScriptSignal<(channelName: string, participantId: number, sessionId: string, channelId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### ReJoinedVoiceV2

```luau
VoiceChatService.ReJoinedVoiceV2: RBXScriptSignal<(channelName: string, participantId: number, sessionId: string, channelId: string, sfuImage: string, sfuTag: string, sfuDataCenterId: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### RelayCandidatesGathered

```luau
VoiceChatService.RelayCandidatesGathered: RBXScriptSignal<(voiceControlPath: Enum.VoiceControlPath, serializedIceCandidates: string, isLast: boolean, sessionId: string, clientIp: string, clientPort: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SsrcUserIdMappingUpdate

```luau
VoiceChatService.SsrcUserIdMappingUpdate: RBXScriptSignal<(ssrcs: { any }, userIds: { any }, feedIds: { any }, sessionId: string, eventTag: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriberAudioQualitySample

```luau
VoiceChatService.SubscriberAudioQualitySample: RBXScriptSignal<(sampleJson: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscribeStateChange

```luau
VoiceChatService.SubscribeStateChange: RBXScriptSignal<(muteState: Enum.MuteState, userIds: string, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionFeedStarted

```luau
VoiceChatService.SubscriptionFeedStarted: RBXScriptSignal<(eventTag: number, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeAcked

```luau
VoiceChatService.SubscriptionHandshakeAcked: RBXScriptSignal<(eventTag: number, handshakeAnswer: string, usersToMute: string, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeAckedWithBothSdp

```luau
VoiceChatService.SubscriptionHandshakeAckedWithBothSdp: RBXScriptSignal<(eventTag: number, fullHandshakeAnswer: string, compressedSdpAnswer: string, usersToMute: string, sessionId: string, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeAckedWithCompressedSdp

```luau
VoiceChatService.SubscriptionHandshakeAckedWithCompressedSdp: RBXScriptSignal<(eventTag: number, compressedSdpAnswer: string, usersToMute: string, sessionId: string, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeCompleted

```luau
VoiceChatService.SubscriptionHandshakeCompleted: RBXScriptSignal<(sessionId: string, eventTag: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeInitiated

```luau
VoiceChatService.SubscriptionHandshakeInitiated: RBXScriptSignal<(handshakeOffer: string, newSubscriptionStates: string, isNewConnection: boolean, sessionId: string, eventTag: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeInitiatedWithBothSdp

```luau
VoiceChatService.SubscriptionHandshakeInitiatedWithBothSdp: RBXScriptSignal<(fullHandshakeOffer: string, compressedHandshakeOffer: string, newSubscriptionStates: string, isNewConnection: boolean, sessionId: string, eventTag: number, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionHandshakeInitiatedWithCompressedSdp

```luau
VoiceChatService.SubscriptionHandshakeInitiatedWithCompressedSdp: RBXScriptSignal<(compressedHandshakeOffer: string, newSubscriptionStates: string, isNewConnection: boolean, sessionId: string, eventTag: number, compressMode: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### SubscriptionReset

```luau
VoiceChatService.SubscriptionReset: RBXScriptSignal<(sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### UpdateTurnAuthInfoRequest

```luau
VoiceChatService.UpdateTurnAuthInfoRequest: RBXScriptSignal<()>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### UserTurnAuth

```luau
VoiceChatService.UserTurnAuth: RBXScriptSignal<(sessionId: string, userName: string, password: string, ttl: number, uris: { any })>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### UserTurnAuthV2

```luau
VoiceChatService.UserTurnAuthV2: RBXScriptSignal<(sessionId: string, userName: string, password: string, ttl: number, uris: { any }, dataCenterId: number, dataCenterPop: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatClientVoiceCapability

```luau
VoiceChatService.VoiceChatClientVoiceCapability: RBXScriptSignal<()>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatClientVoiceCapabilityWithConfig

```luau
VoiceChatService.VoiceChatClientVoiceCapabilityWithConfig: RBXScriptSignal<(sessionConfigFlags: number)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatPlayerMuteStateChangedClientToServer

```luau
VoiceChatService.VoiceChatPlayerMuteStateChangedClientToServer: RBXScriptSignal<(muteState: Enum.MuteState)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatPlayerMuteStateChangedServerToClient

```luau
VoiceChatService.VoiceChatPlayerMuteStateChangedServerToClient: RBXScriptSignal<(muteState: Enum.MuteState)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatplayerMuteStatusChangedEvent

```luau
VoiceChatService.VoiceChatplayerMuteStatusChangedEvent: RBXScriptSignal<(userId: number, muted: boolean, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatSampleTaggedEventClientToServer

```luau
VoiceChatService.VoiceChatSampleTaggedEventClientToServer: RBXScriptSignal<(tag: number, value: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatSampleTaggedEventServerToClient

```luau
VoiceChatService.VoiceChatSampleTaggedEventServerToClient: RBXScriptSignal<(tag: number, value: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceChatStatsCollected

```luau
VoiceChatService.VoiceChatStatsCollected: RBXScriptSignal<()>
```

- Tags: Roblox script security, Capabilities: Audio + Chat

### VoiceChatSubscriptionInitialBatchEmpty

```luau
VoiceChatService.VoiceChatSubscriptionInitialBatchEmpty: RBXScriptSignal<(sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceMigration

```luau
VoiceChatService.VoiceMigration: RBXScriptSignal<(reason: Enum.VoiceRccReconnectReason)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

### VoiceSetupFailed

```luau
VoiceChatService.VoiceSetupFailed: RBXScriptSignal<(voiceControlPath: Enum.VoiceControlPath, serializedFailure: string, sessionId: string)>
```

- Tags: Hidden, Roblox engine security, Capabilities: Audio + Chat

## Inherited members

- From [Instance](https://rapi.sleaze.dev/classes/Instance.md): `Archivable`, `archivable`, `Attributes`, `AttributesReplicate`, `AttributesSerialize`, `HistoryId`, `Name`, `Parent`, `PredictionMode`, `PropertyStatusStudio`, `RobloxLocked`, `SerializedOverrides`, `SourceAssetId`, `Tags`, `UniqueId`, `numExpectedDirectChildren`, `DataCost`, `Capabilities`, `DefinesCapabilities`, `IsInSandbox`, `Sandboxed`, `AddTag`, `ClearAllChildren`, `Clone`, `Destroy`, `FindFirstAncestor`, `FindFirstAncestorOfClass`, `FindFirstAncestorWhichIsA`, `FindFirstChild`, `FindFirstChildOfClass`, `FindFirstChildWhichIsA`, `FindFirstDescendant`, `GetActor`, `GetAttribute`, `GetAttributeChangedSignal`, `GetAttributes`, `GetChildren`, `GetDebugId`, `GetDescendants`, `GetFullName`, `GetStyled`, `GetStyledPropertyChangedSignal`, `GetTags`, `HasTag`, `IsAncestorOf`, `IsDescendantOf`, `IsPropertyModified`, `QueryDescendants`, `RemoveTag`, `ResetPropertyToDefault`, `SetAttribute`, `WaitForChild`, `Remove`, `children`, `clone`, `destroy`, `findFirstChild`, `getChildren`, `isDescendantOf`, `remove`, `AncestryChanged`, `AttributeChanged`, `ChildAdded`, `ChildRemoved`, `DescendantAdded`, `DescendantRemoving`, `Destroying`, `StyledPropertiesChanged`, `childAdded`
- From [Object](https://rapi.sleaze.dev/classes/Object.md): `ClassName`, `className`, `GetPropertyChangedSignal`, `IsA`, `isA`, `Changed`
