๐๏ธ ๐
godot-voip
godot-voip is a Godot Engine addon which makes it very easy to setup a real-time voice-chat system in your Godot game. This addon also includes a demo project.
Engine Compatibility
- Godot Engine 3.2: godot-voip 2.0
- Godot Engine 3.3+: godot-voip 3.0+
- Godot Engine 4:
โ unavailableโ
Setup
Adding to a existing project
(Any kind of high-level multiplayer peer is required.)
- Click on the AssetLib inside editor or go to the Godot Asset Library to download the latest release, or you can clone/download this repository to get the latest commit.
- Select the
addons/godot-voip/
folder and move it into your Godot project. (Note: make sure the structure is stillres://addons/godot-voip/
) - Go to project-settings/audio and enable audio input.
- Now go to the plugins tab also inside project-settings and enable the godot-voip plugin.
- Add either a
VoiceInstance
(one connection) or aVoiceOrchestrator
(more than 2 participants) node to your scene. - Set
$VoiceInstance.recording
or$VoiceOrchestrator.recording
totrue
and it will send your microphone input to connected participants.
Running demo
- Go to the templates tab in the Godot Engine project manager and look for godot-voip, or go to the Godot Asset Library to manually download the latest release, or you can clone/download this repository to get the latest commit.
- Open and run downloaded project.
For macOS users
Users running godot-voip on macOS need to make sure the microphone format in macOS audio settings is equal to the mix-rate in Godot project-settings.
GDNative
Some parts of this library have been ported to gdnative-rust to improve performance and to implement compression using the opus-codec and other audio processing. To use the gdnative implementation use the NativeVoiceInstance
node instead of the usual VoiceIntance
.
Building
To compile the gdnative parts of this library you will need Rust installed on your machine: https://www.rust-lang.org/. Then open addons/gdnative/
in your terminal and run cargo build
. You'll find the compiled binary in target/
. Then add the compiled binary to your platform in the godot-voip gdnative library called godot-voip-native.tres
also found in the gdnative directory.
Todo
- Implement audio compression.
Documentation
VoiceInstance
This node implements a single voice connection.
Signals
received_voice_data(data: PoolRealArray, from_id: int)
Emitted when voice data is received.sent_voice_data(data: PoolRealArray)
Emitted when recording and data is sent.
Properties
Type | Name | description |
---|---|---|
NodePath |
custom_voice_audio_stream_player | When used, the referenced AudioStreamPlayer /AudioStreamPlayer2D /AudioStreamPlayer3D will be used as output for incoming audio data. |
bool |
recording | If true, the VoiceInstance will process and send microhphone audio to the other VoipInstance. |
bool |
listen | If true, the VoiceInstance will also play any microhphone data it records. |
float |
input_threshold | Value above which microhphone data will be sent. Set to 0 to disable. |
NativeVoiceInstance
This node implements a single voice connection using rust-gdnative.
Signals
received_voice_data(data: PoolRealArray, sender_id: int)
Emitted when voice data is received.sent_voice_data(data: PoolRealArray)
Emitted when recording and data is sent.
Properties
Type | Name | description |
---|---|---|
NodePath |
custom_voice_audio_stream_player | When used, the referenced AudioStreamPlayer /AudioStreamPlayer2D /AudioStreamPlayer3D will be used as output for incoming audio data. |
bool |
recording | If true, the NativeVoiceInstance will process and send microhphone audio to the other NativeVoiceInstance. |
bool |
listen | If true, the NativeVoiceInstance will also play any microhphone data it records. |
float |
input_threshold | Value above which microhphone data will be sent. Set to 0 to disable. |
VoiceOrchestrator
This node implements multiple voice connections. It will automatically spawn new VoiceInstances when a player connects to the server and will remove them again after they disconnect.
Signals
received_voice_data(data: PoolRealArray, from_id: int)
Emitted when voice data is received.sent_voice_data(data: PoolRealArray)
Emitted when recording and data is sent.created_instance(id: int)
Emitted when a newVoiceInstance
is created.removed_instance(id: int)
Emitted when aVoiceInstance
is removed.
Properties
Type | Name | description |
---|---|---|
bool |
recording | If true, the VoiceInstance will process and send microhphone data to the other VoipInstance. |
bool |
listen | If true, the VoiceInstance will also play any microhphone data it records. |
float |
input_threshold | Value above which microhphone data will be sent. Set to 0 to disable. |
enum |
type_voice_instance | Type of VoiceInstance used. NATIVE, GDSCRIPT |
VoiceOrchestrator does not support a custom AudioStreamPlayer
.