RakVoice

RakVoice provides voice chat functionality for multiplayer games.

Overview

RakVoice enables real-time voice communication between players using:

  • Opus codec for high-quality, low-latency audio compression

  • RNNoise for neural network-based noise suppression

  • Voice Activity Detection (VAD) via Opus DTX

  • Variable bitrate (VBR) encoding

  • Low latency transmission with packet loss concealment

Setup

#include "RakVoice.h"

MafiaNet::RakVoice rakVoice;
peer->AttachPlugin(&rakVoice);

// Initialize with sample rate and buffer size
// Supported rates: 8000, 16000, 24000, 48000 Hz
rakVoice.Init(48000, 960 * sizeof(short));  // 48kHz, 20ms frame

Opening Voice Channels

// Request a voice channel with a connected peer
rakVoice.RequestVoiceChannel(peerGUID);

// Handle the response in your packet loop:
// ID_RAKVOICE_OPEN_CHANNEL_REQUEST - incoming channel request
// ID_RAKVOICE_OPEN_CHANNEL_REPLY - channel opened successfully

Sending Audio

// In your audio callback (e.g., from PortAudio)
void AudioCallback(short* samples, int numSamples) {
    // Send audio to a specific peer
    rakVoice.SendFrame(peerGUID, samples);
}

Receiving Audio

// In your audio playback callback
void PlaybackCallback(short* outputBuffer, int numSamples) {
    // Get mixed audio from all channels
    rakVoice.ReceiveFrame(outputBuffer);
}

Configuration

// Enable/disable Voice Activity Detection (reduces bandwidth on silence)
rakVoice.SetVAD(true);  // Default: true

// Enable/disable RNNoise noise suppression
rakVoice.SetNoiseFilter(true);  // Default: true

// Enable/disable Variable Bitrate (better quality/bandwidth ratio)
rakVoice.SetVBR(true);  // Default: true

// Set signal type hint for Opus encoder
rakVoice.SetSignalType(OPUS_SIGNAL_VOICE);  // or OPUS_SIGNAL_MUSIC

Audio Backends

RakVoice doesn’t include audio capture/playback. Use:

  • PortAudio - Cross-platform (see Samples/RakVoice/)

  • DirectSound - Windows

  • FMOD - Cross-platform

  • OpenAL - Cross-platform

Dependencies

RakVoice bundles the following libraries:

  • Opus 1.5.2 - Audio codec (BSD license)

  • RNNoise - Noise suppression (BSD license)

These are built automatically as part of the MafiaNet build.

Sample Code

See Samples/RakVoice/ for a complete example using PortAudio.

See Also