Overview
Voice calls are a core feature of the Discord Social SDK that enable real-time voice communication between players in your game within lobbies. This guide will show you how to:- Start and join voice calls in lobbies
- Control voice settings like mute, deafen, and volume
- Process audio data with custom callbacks
- Integrate with external audio systems
- Check voice call status and participant states
Prerequisites
Before you can start a voice call, you must complete these essential steps:To utilize this communication feature, you must enable 
Client::GetDefaultCommunicationScopes in your OAuth Scope configuration.
See the OAuth Scopes Core Concepts Guide for more details.1. Lobby Management
Voice calls require an active lobby with participants. You must:- Create or join a lobby using the Discord Social SDK
- Add players to the lobby - voice calls only work with lobby members
Essential Reading: For detailed instructions on creating lobbies, joining lobbies, and managing lobby members, see
the complete Managing Lobbies Guide.
2. Lobby Size Limitations
While Discord lobbies technically support up to 1,000 members, voice calls should be limited to much smaller groups. We strongly recommend keeping voice calls to 25 members or fewer for optimal performance and user experience.Starting and Joining Voice Calls
The Discord Social SDK makes it simple to start and join voice calls - both operations use the same functions whether you’re creating something new or joining something that already exists.Creating/Joining a Lobby and Starting/Joining a Call
Here’s a complete example of joining a lobby and starting a voice call:How It Works
BothClient::CreateOrJoinLobby and Client::StartCall are designed to handle existing and new scenarios automatically:
- Client::CreateOrJoinLobby: If a lobby with the given secret already exists, you’ll join it. If not, a new lobby is created with that secret.
- Client::StartCall: If a voice call is already active in the lobby, you’ll join it. If not, a new voice call is started.
You don’t need to check if a lobby exists or if a call is already ongoing. The SDK handles both scenarios seamlessly, making your code simpler and more reliable.
Controlling Voice Features
The Discord Social SDK provides comprehensive voice control options at both the individual call level and globally across all calls.Global Voice Controls
These methods control voice settings across all active calls using theClient object:
- Client::SetSelfMuteAll- Mutes your microphone across all active calls
- Client::SetSelfDeafAll- Deafens you across all active calls
- Client::SetInputVolume- Sets microphone volume
- Client::SetOutputVolume- Sets speaker volume
Per-Call Voice Controls
These methods control voice settings for a specific call using theCall object:
- Call::SetSelfMute- Mutes your microphone so other participants in this call cannot hear you
- Call::SetSelfDeaf- Mutes all audio from this call so you cannot hear other participants, and they cannot hear you either
- Call::SetParticipantVolume- Adjusts the volume of a specific participant
Voice Activity Detection
UseCall::SetVADThreshold to control voice activation detection sensitivity. This allows optional fine-tuning of
when the system considers someone to be speaking.
Advanced Audio Processing
Manipulating Voice Data with Callbacks
For advanced audio processing needs, useClient::StartCallWithAudioCallbacks to access raw audio data. This
enables real-time audio manipulation and integration with external audio processing systems.
In-Place Audio Modification
To directly modify incoming audio samples (e.g., volume dampening):External Audio Pipeline Integration
To route audio to external processing systems such as FMOD or Wwise:Key Audio Processing Points
- Direct Manipulation: The dataparameter inClient::UserAudioReceivedCallbackcan be modified in-place to alter incoming audio samples
- External Processing: Set outShouldMuteData = trueto prevent Discord from playing audio directly, allowing you to handle it through your own audio pipeline
- No Encoding Required: The SDK handles all voice encoding/decoding automatically - you work with raw audio samples
Ending Voice Calls
When you need to terminate voice calls, you have two options:End a Call For a Specific Lobby
End All Calls
Checking Lobby Voice Call Status
You may want to check the voice call status for your lobby to display UI indicators, monitor participant activity, or provide information to players. The Discord Social SDK provides several ways to inspect active voice calls and participant states.Checking if a Call is Active
UseLobbyHandle::GetCallInfoHandle() to determine if there’s an active voice call in your lobby:
Checking Individual Participant Status
For each participant in a voice call, you can check their voice state usingVoiceStateHandle:
Voice State Information Available
TheVoiceStateHandle provides these key details about each participant:
- VoiceStateHandle::SelfMute: Returns- trueif the user has muted themselves (others cannot hear them)
- VoiceStateHandle::SelfDeaf: Returns- trueif the user has deafened themselves (they cannot hear others and others cannot hear them)
- Displaying voice indicators in your UI
- Implementing voice-related features or debugging audio issues
Next Steps
Integrate Moderation
Integrating and managing content moderation for your game when using the Discord Social SDK.
Use with Discord APIs
Make requests to Discord’s HTTP APIs from your game.
Managing Game Invites
Allow players to invite friends to join their game session or party.
#social-sdk-dev-help channel for support from the community.
If you encounter a bug while working with the Social SDK, please report it here:  https://dis.gd/social-sdk-bug-report
Change Log
| Date | Changes | 
|---|---|
| June 30, 2025 | Add communications scope warning | 
| June 19, 2025 | released guide | 
| March 17, 2025 | initial release |