Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
When enabled, ODIN will analyze the audio input signal using smart voice detection algorithm to determine the presence of speech. You can define both the probability required to start and stop transmitting.
Attack Probability
float
Voice probability value when the VAD should engage.
Release Probability
float
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
Enable Volume Gate
boolean
When enabled, the volume gate will measure the volume of the input audio signal, thus deciding when a user is speaking loud enough to transmit voice data. You can define both the root mean square power (dBFS) for when the gate should engage and disengage.
Attack Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should engage.
Release Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
Echo Canceller
boolean
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
High Pass Filter
boolean
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
Pre Amplifier
boolean
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
Noise Suppression
enum
When enabled, the noise suppressor will remove distracting background noise from the input audio signal. You can control the aggressiveness of the suppression. Increasing the level will reduce the noise level at the expense of a higher speech distortion.
Transient Suppression
boolean
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
Gain Controller
boolean
When enabled, the gain controller will automatically bring the signal to an appropriate range. This means input signals with low volume will be amplified and high volume will be limited.
Audio settings can sometimes be challenging to navigate, especially for those new to the field. While many options are straightforward, some require specific values to optimize performance.
In environments with high background noise, it’s essential to prevent this noise from being transmitted. To address this, we offer two key settings:
Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It’s recommended to keep this feature enabled.
The AI model operates on a probability scale ranging from 0.0 to 1.0, where 0.0 indicates zero likelihood of voice presence, and 1.0 signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.
Optimal settings are generally 0.9 for Attack (90% certainty of voice) and 0.8 for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 0.1.
While effective in many scenarios, certain situations, like a bustling open-office, may require additional measures. In these cases, the AI might confidently detect voice, but it may not be the voice of the intended speaker.
The Volume Gate operates by setting a volume threshold below which the microphone remains disabled. This helps distinguish between actual speech and lower-volume background noises. The gate activates only when the detected sound exceeds this threshold.
Understanding this concept might be initially complex. A useful resource is Wikipedia on DBFS.
It’s generally advisable to disable this feature initially. A starting points for settings could be -40 for Release and -30 for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 10. For further assistance, please feel free to contact our support team.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
User Id
string
The user id to generate a token for. You can use any string that makes sense for you to connect Odin peers to your users.
Token Audience
enum
The enum value of the token audience. Possible values are Default (for using a gateway) or Single Server (for using a specific Odin server without a gateway).
Creates a token generator that is used to generate room tokens on client side.
Important
It is ok for development and testing purposes to create room tokens on client side - but in production you should switch to server side generation of room tokens!
The access key for generating room tokens. You need to get an access key by signing up to the service or create a test key by following our Getting Started guide.
User data can be anything and will be associated with the user (peer) on ODIN servers. User Data is automatically synchronized with other users in the same ODIN room. This enables you to easily exchange data like names or IDs.
Initial Peer Position
vector
The initial peer position in Odin’s space. This value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range. Please refer to the Update Peer Position node for more information and to update the position later on.
On Error
delegate
Delegate to handle errors while joining a room. Most of the time, an error will occur when the room token is invalid or the room is full.
On Success
delegate
Called when the room has been successfully joined.
Once you have joined the room, a sequence of events is created. You can learn more about these events here.
To handle these events create a Bind to .... node and connect that to your Room node created earlier in
Construct local room handle node.
Info
If you cannot find the Bind to .... node (for example Bind to Room Joined Event), you need to disable the context
filter in the blueprint node selection dialog.
Creates a media object that will be used in the Add Media To Room node input. Connect an Audio Capture or Odin Audio Capture object to it.
Important
Use the Create Audio Capture or Create Odin Audio Capture node to get access to the microphone on the users device. Make sure that the Audio Capture Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Important
The user must have joined the room before adding media. Use the Join Room node to join the room. Also, you cannot use the same media stream for multiple rooms at once, but you have to create a new one for each room.
Creates an access key that can be used to generate room tokens. These keys are only for development and should not be used in production.
Important
Do not connect this node directly to the Generate Room Token node, as a new access key would be generated during each play session for each users. Instead, print the generated access key into a log and store it in a variable, connecting that variable with the Generate Room Token node.
The access key for up to 25 peak concurrent users (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the Generate Room Token node.
The Actor to which the Odin Synth Component will be added.
Manual Attachment
boolean
When Manual Attachment is set, automatic attachment to the target actor is skipped and it is up to the user to attach the resulting component (or set it up as the root) themselves.
Relative Transform
Transform
The relative transform of the component to the target actor.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Important
The position scale should be set to the same value for all peers in the ODIN room. The scale value also has to be set individually for each room that will utilize ODIN’s optimization feature.
Updates the position of the own peer in the room. You have to set the scale beforehand via Set Room Position Scale.
Important
Invoking this method too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling Update Peer Position to a maximum of 10 times per second.
Tip
This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Onnection State Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Important
The resulting peer id is only valid in the context of this room. This event will only be called for the local user.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
The id of the peer that joined the room. This is the self peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
Room User Data
Array of byte
The user data stored in the room for the peer as an array of bytes.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Called whenever a peer joins the room. Connect a Bind to On Peer Joined delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever a peer leaves the room. Connect to a Bind to On Peer Left node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Left node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Called whenever a peer has changed its user data. Connect to a Bind to On Peer User Data Changed node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Added node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Called whenever a peer has removed a media stream. Connect to a Bind to On Media Removed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever another peer has sent a message. Connect to a Bind to On Message Received delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Important
For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to 3.0. To change the maximum volume multiplier, use the Set Max Volume Multiplier function.
Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
When enabled, ODIN will analyze the audio input signal using smart voice detection algorithm to determine the presence of speech. You can define both the probability required to start and stop transmitting.
Attack Probability
float
Voice probability value when the VAD should engage.
Release Probability
float
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
Enable Volume Gate
boolean
When enabled, the volume gate will measure the volume of the input audio signal, thus deciding when a user is speaking loud enough to transmit voice data. You can define both the root mean square power (dBFS) for when the gate should engage and disengage.
Attack Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should engage.
Release Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
Echo Canceller
boolean
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
High Pass Filter
boolean
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
Pre Amplifier
boolean
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
Noise Suppression
enum
When enabled, the noise suppressor will remove distracting background noise from the input audio signal. You can control the aggressiveness of the suppression. Increasing the level will reduce the noise level at the expense of a higher speech distortion.
Transient Suppression
boolean
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
Gain Controller
boolean
When enabled, the gain controller will automatically bring the signal to an appropriate range. This means input signals with low volume will be amplified and high volume will be limited.
Audio settings can sometimes be challenging to navigate, especially for those new to the field. While many options are straightforward, some require specific values to optimize performance.
In environments with high background noise, it’s essential to prevent this noise from being transmitted. To address this, we offer two key settings:
Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It’s recommended to keep this feature enabled.
The AI model operates on a probability scale ranging from 0.0 to 1.0, where 0.0 indicates zero likelihood of voice presence, and 1.0 signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.
Optimal settings are generally 0.9 for Attack (90% certainty of voice) and 0.8 for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 0.1.
While effective in many scenarios, certain situations, like a bustling open-office, may require additional measures. In these cases, the AI might confidently detect voice, but it may not be the voice of the intended speaker.
The Volume Gate operates by setting a volume threshold below which the microphone remains disabled. This helps distinguish between actual speech and lower-volume background noises. The gate activates only when the detected sound exceeds this threshold.
Understanding this concept might be initially complex. A useful resource is Wikipedia on DBFS.
It’s generally advisable to disable this feature initially. A starting points for settings could be -40 for Release and -30 for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 10. For further assistance, please feel free to contact our support team.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
User Id
string
The user id to generate a token for. You can use any string that makes sense for you to connect Odin peers to your users.
Token Audience
enum
The enum value of the token audience. Possible values are Default (for using a gateway) or Single Server (for using a specific Odin server without a gateway).
Creates a token generator that is used to generate room tokens on client side.
Important
It is ok for development and testing purposes to create room tokens on client side - but in production you should switch to server side generation of room tokens!
The access key for generating room tokens. You need to get an access key by signing up to the service or create a test key by following our Getting Started guide.
User data can be anything and will be associated with the user (peer) on ODIN servers. User Data is automatically synchronized with other users in the same ODIN room. This enables you to easily exchange data like names or IDs.
Initial Peer Position
vector
The initial peer position in Odin’s space. This value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range. Please refer to the Update Peer Position node for more information and to update the position later on.
On Error
delegate
Delegate to handle errors while joining a room. Most of the time, an error will occur when the room token is invalid or the room is full.
On Success
delegate
Called when the room has been successfully joined.
Once you have joined the room, a sequence of events is created. You can learn more about these events here.
To handle these events create a Bind to .... node and connect that to your Room node created earlier in
Construct local room handle node.
Info
If you cannot find the Bind to .... node (for example Bind to Room Joined Event), you need to disable the context
filter in the blueprint node selection dialog.
Creates a media object that will be used in the Add Media To Room node input. Connect an Audio Capture or Odin Audio Capture object to it.
Important
Use the Create Audio Capture or Create Odin Audio Capture node to get access to the microphone on the users device. Make sure that the Audio Capture Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Important
The user must have joined the room before adding media. Use the Join Room node to join the room. Also, you cannot use the same media stream for multiple rooms at once, but you have to create a new one for each room.
Creates an access key that can be used to generate room tokens. These keys are only for development and should not be used in production.
Important
Do not connect this node directly to the Generate Room Token node, as a new access key would be generated during each play session for each users. Instead, print the generated access key into a log and store it in a variable, connecting that variable with the Generate Room Token node.
The access key for up to 25 peak concurrent users (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the Generate Room Token node.
The Actor to which the Odin Synth Component will be added.
Manual Attachment
boolean
When Manual Attachment is set, automatic attachment to the target actor is skipped and it is up to the user to attach the resulting component (or set it up as the root) themselves.
Relative Transform
Transform
The relative transform of the component to the target actor.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Important
The position scale should be set to the same value for all peers in the ODIN room. The scale value also has to be set individually for each room that will utilize ODIN’s optimization feature.
Updates the position of the own peer in the room. You have to set the scale beforehand via Set Room Position Scale.
Important
Invoking this method too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling Update Peer Position to a maximum of 10 times per second.
Tip
This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Onnection State Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Important
The resulting peer id is only valid in the context of this room. This event will only be called for the local user.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
The id of the peer that joined the room. This is the self peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
Room User Data
Array of byte
The user data stored in the room for the peer as an array of bytes.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Called whenever a peer joins the room. Connect a Bind to On Peer Joined delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever a peer leaves the room. Connect to a Bind to On Peer Left node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Left node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Called whenever a peer has changed its user data. Connect to a Bind to On Peer User Data Changed node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Added node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Called whenever a peer has removed a media stream. Connect to a Bind to On Media Removed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever another peer has sent a message. Connect to a Bind to On Message Received delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Important
For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to 3.0. To change the maximum volume multiplier, use the Set Max Volume Multiplier function.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
When enabled, ODIN will analyze the audio input signal using smart voice detection algorithm to determine the presence of speech. You can define both the probability required to start and stop transmitting.
Attack Probability
float
Voice probability value when the VAD should engage.
Release Probability
float
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
Enable Volume Gate
boolean
When enabled, the volume gate will measure the volume of the input audio signal, thus deciding when a user is speaking loud enough to transmit voice data. You can define both the root mean square power (dBFS) for when the gate should engage and disengage.
Attack Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should engage.
Release Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
Echo Canceller
boolean
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
High Pass Filter
boolean
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
Pre Amplifier
boolean
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
Noise Suppression
enum
When enabled, the noise suppressor will remove distracting background noise from the input audio signal. You can control the aggressiveness of the suppression. Increasing the level will reduce the noise level at the expense of a higher speech distortion.
Transient Suppression
boolean
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
Gain Controller
boolean
When enabled, the gain controller will automatically bring the signal to an appropriate range. This means input signals with low volume will be amplified and high volume will be limited.
Audio settings can sometimes be challenging to navigate, especially for those new to the field. While many options are straightforward, some require specific values to optimize performance.
In environments with high background noise, it’s essential to prevent this noise from being transmitted. To address this, we offer two key settings:
Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It’s recommended to keep this feature enabled.
The AI model operates on a probability scale ranging from 0.0 to 1.0, where 0.0 indicates zero likelihood of voice presence, and 1.0 signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.
Optimal settings are generally 0.9 for Attack (90% certainty of voice) and 0.8 for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 0.1.
While effective in many scenarios, certain situations, like a bustling open-office, may require additional measures. In these cases, the AI might confidently detect voice, but it may not be the voice of the intended speaker.
The Volume Gate operates by setting a volume threshold below which the microphone remains disabled. This helps distinguish between actual speech and lower-volume background noises. The gate activates only when the detected sound exceeds this threshold.
Understanding this concept might be initially complex. A useful resource is Wikipedia on DBFS.
It’s generally advisable to disable this feature initially. A starting points for settings could be -40 for Release and -30 for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 10. For further assistance, please feel free to contact our support team.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
User Id
string
The user id to generate a token for. You can use any string that makes sense for you to connect Odin peers to your users.
Token Audience
enum
The enum value of the token audience. Possible values are Default (for using a gateway) or Single Server (for using a specific Odin server without a gateway).
Creates a token generator that is used to generate room tokens on client side.
Important
It is ok for development and testing purposes to create room tokens on client side - but in production you should switch to server side generation of room tokens!
The access key for generating room tokens. You need to get an access key by signing up to the service or create a test key by following our Getting Started guide.
User data can be anything and will be associated with the user (peer) on ODIN servers. User Data is automatically synchronized with other users in the same ODIN room. This enables you to easily exchange data like names or IDs.
Initial Peer Position
vector
The initial peer position in Odin’s space. This value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range. Please refer to the Update Peer Position node for more information and to update the position later on.
On Error
delegate
Delegate to handle errors while joining a room. Most of the time, an error will occur when the room token is invalid or the room is full.
On Success
delegate
Called when the room has been successfully joined.
Once you have joined the room, a sequence of events is created. You can learn more about these events here.
To handle these events create a Bind to .... node and connect that to your Room node created earlier in
Construct local room handle node.
Info
If you cannot find the Bind to .... node (for example Bind to Room Joined Event), you need to disable the context
filter in the blueprint node selection dialog.
Creates a media object that will be used in the Add Media To Room node input. Connect an Audio Capture or Odin Audio Capture object to it.
Important
Use the Create Audio Capture or Create Odin Audio Capture node to get access to the microphone on the users device. Make sure that the Audio Capture Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Important
The user must have joined the room before adding media. Use the Join Room node to join the room. Also, you cannot use the same media stream for multiple rooms at once, but you have to create a new one for each room.
Creates an access key that can be used to generate room tokens. These keys are only for development and should not be used in production.
Important
Do not connect this node directly to the Generate Room Token node, as a new access key would be generated during each play session for each users. Instead, print the generated access key into a log and store it in a variable, connecting that variable with the Generate Room Token node.
The access key for up to 25 peak concurrent users (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the Generate Room Token node.
The Actor to which the Odin Synth Component will be added.
Manual Attachment
boolean
When Manual Attachment is set, automatic attachment to the target actor is skipped and it is up to the user to attach the resulting component (or set it up as the root) themselves.
Relative Transform
Transform
The relative transform of the component to the target actor.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Important
The position scale should be set to the same value for all peers in the ODIN room. The scale value also has to be set individually for each room that will utilize ODIN’s optimization feature.
Updates the position of the own peer in the room. You have to set the scale beforehand via Set Room Position Scale.
Important
Invoking this method too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling Update Peer Position to a maximum of 10 times per second.
Tip
This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Onnection State Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Important
The resulting peer id is only valid in the context of this room. This event will only be called for the local user.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
The id of the peer that joined the room. This is the self peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
Room User Data
Array of byte
The user data stored in the room for the peer as an array of bytes.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Called whenever a peer joins the room. Connect a Bind to On Peer Joined delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever a peer leaves the room. Connect to a Bind to On Peer Left node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Left node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Called whenever a peer has changed its user data. Connect to a Bind to On Peer User Data Changed node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Added node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Called whenever a peer has removed a media stream. Connect to a Bind to On Media Removed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever another peer has sent a message. Connect to a Bind to On Message Received delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Important
For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to 3.0. To change the maximum volume multiplier, use the Set Max Volume Multiplier function.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
When enabled, ODIN will analyze the audio input signal using smart voice detection algorithm to determine the presence of speech. You can define both the probability required to start and stop transmitting.
Attack Probability
float
Voice probability value when the VAD should engage.
Release Probability
float
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
Enable Volume Gate
boolean
When enabled, the volume gate will measure the volume of the input audio signal, thus deciding when a user is speaking loud enough to transmit voice data. You can define both the root mean square power (dBFS) for when the gate should engage and disengage.
Attack Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should engage.
Release Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
Echo Canceller
boolean
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
High Pass Filter
boolean
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
Pre Amplifier
boolean
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
Noise Suppression
enum
When enabled, the noise suppressor will remove distracting background noise from the input audio signal. You can control the aggressiveness of the suppression. Increasing the level will reduce the noise level at the expense of a higher speech distortion.
Transient Suppression
boolean
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
Gain Controller
boolean
When enabled, the gain controller will automatically bring the signal to an appropriate range. This means input signals with low volume will be amplified and high volume will be limited.
Audio settings can sometimes be challenging to navigate, especially for those new to the field. While many options are straightforward, some require specific values to optimize performance.
In environments with high background noise, it’s essential to prevent this noise from being transmitted. To address this, we offer two key settings:
Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It’s recommended to keep this feature enabled.
The AI model operates on a probability scale ranging from 0.0 to 1.0, where 0.0 indicates zero likelihood of voice presence, and 1.0 signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.
Optimal settings are generally 0.9 for Attack (90% certainty of voice) and 0.8 for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 0.1.
While effective in many scenarios, certain situations, like a bustling open-office, may require additional measures. In these cases, the AI might confidently detect voice, but it may not be the voice of the intended speaker.
The Volume Gate operates by setting a volume threshold below which the microphone remains disabled. This helps distinguish between actual speech and lower-volume background noises. The gate activates only when the detected sound exceeds this threshold.
Understanding this concept might be initially complex. A useful resource is Wikipedia on DBFS.
It’s generally advisable to disable this feature initially. A starting points for settings could be -40 for Release and -30 for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 10. For further assistance, please feel free to contact our support team.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
User Id
string
The user id to generate a token for. You can use any string that makes sense for you to connect Odin peers to your users.
Token Audience
enum
The enum value of the token audience. Possible values are Default (for using a gateway) or Single Server (for using a specific Odin server without a gateway).
Creates a token generator that is used to generate room tokens on client side.
Important
It is ok for development and testing purposes to create room tokens on client side - but in production you should switch to server side generation of room tokens!
The access key for generating room tokens. You need to get an access key by signing up to the service or create a test key by following our Getting Started guide.
User data can be anything and will be associated with the user (peer) on ODIN servers. User Data is automatically synchronized with other users in the same ODIN room. This enables you to easily exchange data like names or IDs.
Initial Peer Position
vector
The initial peer position in Odin’s space. This value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range. Please refer to the Update Peer Position node for more information and to update the position later on.
On Error
delegate
Delegate to handle errors while joining a room. Most of the time, an error will occur when the room token is invalid or the room is full.
On Success
delegate
Called when the room has been successfully joined.
Once you have joined the room, a sequence of events is created. You can learn more about these events here.
To handle these events create a Bind to .... node and connect that to your Room node created earlier in
Construct local room handle node.
Info
If you cannot find the Bind to .... node (for example Bind to Room Joined Event), you need to disable the context
filter in the blueprint node selection dialog.
Creates a media object that will be used in the Add Media To Room node input. Connect an Audio Capture or Odin Audio Capture object to it.
Important
Use the Create Audio Capture or Create Odin Audio Capture node to get access to the microphone on the users device. Make sure that the Audio Capture Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Important
The user must have joined the room before adding media. Use the Join Room node to join the room. Also, you cannot use the same media stream for multiple rooms at once, but you have to create a new one for each room.
Creates an access key that can be used to generate room tokens. These keys are only for development and should not be used in production.
Important
Do not connect this node directly to the Generate Room Token node, as a new access key would be generated during each play session for each users. Instead, print the generated access key into a log and store it in a variable, connecting that variable with the Generate Room Token node.
The access key for up to 25 peak concurrent users (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the Generate Room Token node.
The Actor to which the Odin Synth Component will be added.
Manual Attachment
boolean
When Manual Attachment is set, automatic attachment to the target actor is skipped and it is up to the user to attach the resulting component (or set it up as the root) themselves.
Relative Transform
Transform
The relative transform of the component to the target actor.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Important
The position scale should be set to the same value for all peers in the ODIN room. The scale value also has to be set individually for each room that will utilize ODIN’s optimization feature.
Updates the position of the own peer in the room. You have to set the scale beforehand via Set Room Position Scale.
Important
Invoking this method too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling Update Peer Position to a maximum of 10 times per second.
Tip
This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Onnection State Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Important
The resulting peer id is only valid in the context of this room. This event will only be called for the local user.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
The id of the peer that joined the room. This is the self peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
Room User Data
Array of byte
The user data stored in the room for the peer as an array of bytes.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Called whenever a peer joins the room. Connect a Bind to On Peer Joined delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever a peer leaves the room. Connect to a Bind to On Peer Left node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Left node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Called whenever a peer has changed its user data. Connect to a Bind to On Peer User Data Changed node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Added node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Called whenever a peer has removed a media stream. Connect to a Bind to On Media Removed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever another peer has sent a message. Connect to a Bind to On Message Received delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Important
For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to 3.0. To change the maximum volume multiplier, use the Set Max Volume Multiplier function.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
When enabled, ODIN will analyze the audio input signal using smart voice detection algorithm to determine the presence of speech. You can define both the probability required to start and stop transmitting.
Attack Probability
float
Voice probability value when the VAD should engage.
Release Probability
float
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
Enable Volume Gate
boolean
When enabled, the volume gate will measure the volume of the input audio signal, thus deciding when a user is speaking loud enough to transmit voice data. You can define both the root mean square power (dBFS) for when the gate should engage and disengage.
Attack Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should engage.
Release Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
Echo Canceller
boolean
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
High Pass Filter
boolean
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
Pre Amplifier
boolean
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
Noise Suppression
enum
When enabled, the noise suppressor will remove distracting background noise from the input audio signal. You can control the aggressiveness of the suppression. Increasing the level will reduce the noise level at the expense of a higher speech distortion.
Transient Suppression
boolean
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
Gain Controller
boolean
When enabled, the gain controller will automatically bring the signal to an appropriate range. This means input signals with low volume will be amplified and high volume will be limited.
Audio settings can sometimes be challenging to navigate, especially for those new to the field. While many options are straightforward, some require specific values to optimize performance.
In environments with high background noise, it’s essential to prevent this noise from being transmitted. To address this, we offer two key settings:
Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It’s recommended to keep this feature enabled.
The AI model operates on a probability scale ranging from 0.0 to 1.0, where 0.0 indicates zero likelihood of voice presence, and 1.0 signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.
Optimal settings are generally 0.9 for Attack (90% certainty of voice) and 0.8 for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 0.1.
While effective in many scenarios, certain situations, like a bustling open-office, may require additional measures. In these cases, the AI might confidently detect voice, but it may not be the voice of the intended speaker.
The Volume Gate operates by setting a volume threshold below which the microphone remains disabled. This helps distinguish between actual speech and lower-volume background noises. The gate activates only when the detected sound exceeds this threshold.
Understanding this concept might be initially complex. A useful resource is Wikipedia on DBFS.
It’s generally advisable to disable this feature initially. A starting points for settings could be -40 for Release and -30 for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 10. For further assistance, please feel free to contact our support team.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
User Id
string
The user id to generate a token for. You can use any string that makes sense for you to connect Odin peers to your users.
Token Audience
enum
The enum value of the token audience. Possible values are Default (for using a gateway) or Single Server (for using a specific Odin server without a gateway).
Creates a token generator that is used to generate room tokens on client side.
Important
It is ok for development and testing purposes to create room tokens on client side - but in production you should switch to server side generation of room tokens!
The access key for generating room tokens. You need to get an access key by signing up to the service or create a test key by following our Getting Started guide.
User data can be anything and will be associated with the user (peer) on ODIN servers. User Data is automatically synchronized with other users in the same ODIN room. This enables you to easily exchange data like names or IDs.
Initial Peer Position
vector
The initial peer position in Odin’s space. This value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range. Please refer to the Update Peer Position node for more information and to update the position later on.
On Error
delegate
Delegate to handle errors while joining a room. Most of the time, an error will occur when the room token is invalid or the room is full.
On Success
delegate
Called when the room has been successfully joined.
Once you have joined the room, a sequence of events is created. You can learn more about these events here.
To handle these events create a Bind to .... node and connect that to your Room node created earlier in
Construct local room handle node.
Info
If you cannot find the Bind to .... node (for example Bind to Room Joined Event), you need to disable the context
filter in the blueprint node selection dialog.
Creates a media object that will be used in the Add Media To Room node input. Connect an Audio Capture or Odin Audio Capture object to it.
Important
Use the Create Audio Capture or Create Odin Audio Capture node to get access to the microphone on the users device. Make sure that the Audio Capture Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Important
The user must have joined the room before adding media. Use the Join Room node to join the room. Also, you cannot use the same media stream for multiple rooms at once, but you have to create a new one for each room.
Creates an access key that can be used to generate room tokens. These keys are only for development and should not be used in production.
Important
Do not connect this node directly to the Generate Room Token node, as a new access key would be generated during each play session for each users. Instead, print the generated access key into a log and store it in a variable, connecting that variable with the Generate Room Token node.
The access key for up to 25 peak concurrent users (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the Generate Room Token node.
The Actor to which the Odin Synth Component will be added.
Manual Attachment
boolean
When Manual Attachment is set, automatic attachment to the target actor is skipped and it is up to the user to attach the resulting component (or set it up as the root) themselves.
Relative Transform
Transform
The relative transform of the component to the target actor.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Important
The position scale should be set to the same value for all peers in the ODIN room. The scale value also has to be set individually for each room that will utilize ODIN’s optimization feature.
Updates the position of the own peer in the room. You have to set the scale beforehand via Set Room Position Scale.
Important
Invoking this method too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling Update Peer Position to a maximum of 10 times per second.
Tip
This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Onnection State Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Important
The resulting peer id is only valid in the context of this room. This event will only be called for the local user.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
The id of the peer that joined the room. This is the self peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
Room User Data
Array of byte
The user data stored in the room for the peer as an array of bytes.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Called whenever a peer joins the room. Connect a Bind to On Peer Joined delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever a peer leaves the room. Connect to a Bind to On Peer Left node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Left node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Called whenever a peer has changed its user data. Connect to a Bind to On Peer User Data Changed node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Added node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Called whenever a peer has removed a media stream. Connect to a Bind to On Media Removed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever another peer has sent a message. Connect to a Bind to On Message Received delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Important
For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to 3.0. To change the maximum volume multiplier, use the Set Max Volume Multiplier function.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
Creates a local room object that will be used to handle events and client side connection settings. Connect the Room output to the Room input of the Join Room node. You can also use the Room output to handle events like Room Joined or Media Added.
When enabled, ODIN will analyze the audio input signal using smart voice detection algorithm to determine the presence of speech. You can define both the probability required to start and stop transmitting.
Attack Probability
float
Voice probability value when the VAD should engage.
Release Probability
float
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
Enable Volume Gate
boolean
When enabled, the volume gate will measure the volume of the input audio signal, thus deciding when a user is speaking loud enough to transmit voice data. You can define both the root mean square power (dBFS) for when the gate should engage and disengage.
Attack Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should engage.
Release Loudness (D BFS)
float
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
Echo Canceller
boolean
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
High Pass Filter
boolean
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
Pre Amplifier
boolean
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
Noise Suppression
enum
When enabled, the noise suppressor will remove distracting background noise from the input audio signal. You can control the aggressiveness of the suppression. Increasing the level will reduce the noise level at the expense of a higher speech distortion.
Transient Suppression
boolean
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
Gain Controller
boolean
When enabled, the gain controller will automatically bring the signal to an appropriate range. This means input signals with low volume will be amplified and high volume will be limited.
Audio settings can sometimes be challenging to navigate, especially for those new to the field. While many options are straightforward, some require specific values to optimize performance.
In environments with high background noise, it’s essential to prevent this noise from being transmitted. To address this, we offer two key settings:
Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It’s recommended to keep this feature enabled.
The AI model operates on a probability scale ranging from 0.0 to 1.0, where 0.0 indicates zero likelihood of voice presence, and 1.0 signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.
Optimal settings are generally 0.9 for Attack (90% certainty of voice) and 0.8 for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 0.1.
While effective in many scenarios, certain situations, like a bustling open-office, may require additional measures. In these cases, the AI might confidently detect voice, but it may not be the voice of the intended speaker.
The Volume Gate operates by setting a volume threshold below which the microphone remains disabled. This helps distinguish between actual speech and lower-volume background noises. The gate activates only when the detected sound exceeds this threshold.
Understanding this concept might be initially complex. A useful resource is Wikipedia on DBFS.
It’s generally advisable to disable this feature initially. A starting points for settings could be -40 for Release and -30 for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of 10. For further assistance, please feel free to contact our support team.
Takes an access key and a room id and creates a room token that is used to join a room. In production this should be done in a protected environment, e.g. your authentication server (see example project `Token Server´)
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
User Id
string
The user id to generate a token for. You can use any string that makes sense for you to connect Odin peers to your users.
Token Audience
enum
The enum value of the token audience. Possible values are Default (for using a gateway) or Single Server (for using a specific Odin server without a gateway).
Creates a token generator that is used to generate room tokens on client side.
Important
It is ok for development and testing purposes to create room tokens on client side - but in production you should switch to server side generation of room tokens!
The access key for generating room tokens. You need to get an access key by signing up to the service or create a test key by following our Getting Started guide.
User data can be anything and will be associated with the user (peer) on ODIN servers. User Data is automatically synchronized with other users in the same ODIN room. This enables you to easily exchange data like names or IDs.
Initial Peer Position
vector
The initial peer position in Odin’s space. This value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range. Please refer to the Update Peer Position node for more information and to update the position later on.
On Error
delegate
Delegate to handle errors while joining a room. Most of the time, an error will occur when the room token is invalid or the room is full.
On Success
delegate
Called when the room has been successfully joined.
Once you have joined the room, a sequence of events is created. You can learn more about these events here.
To handle these events create a Bind to .... node and connect that to your Room node created earlier in
Construct local room handle node.
Info
If you cannot find the Bind to .... node (for example Bind to Room Joined Event), you need to disable the context
filter in the blueprint node selection dialog.
Creates a media object that will be used in the Add Media To Room node input. Connect an Audio Capture or Odin Audio Capture object to it.
Important
Use the Create Audio Capture or Create Odin Audio Capture node to get access to the microphone on the users device. Make sure that the Audio Capture Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.
Creates an Odin Audio Capture object, that can be used to get access to the microphone on the users device. The Odin Audio Capture object adds features to the default Unreal Audio Capture, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the Audio Capture Plugin is enabled.
Adds a previously generated media object to the room. Once this is done, the users microphone input will be sent to other users so they can hear the audio.
Important
The user must have joined the room before adding media. Use the Join Room node to join the room. Also, you cannot use the same media stream for multiple rooms at once, but you have to create a new one for each room.
Creates an access key that can be used to generate room tokens. These keys are only for development and should not be used in production.
Important
Do not connect this node directly to the Generate Room Token node, as a new access key would be generated during each play session for each users. Instead, print the generated access key into a log and store it in a variable, connecting that variable with the Generate Room Token node.
The access key for up to 25 peak concurrent users (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the Generate Room Token node.
The Actor to which the Odin Synth Component will be added.
Manual Attachment
boolean
When Manual Attachment is set, automatic attachment to the target actor is skipped and it is up to the user to attach the resulting component (or set it up as the root) themselves.
Relative Transform
Transform
The relative transform of the component to the target actor.
Sets the multiplicative scale for all coordinates used in position updates. Use this as the maximum radius in which a peer can be heard. The scale value is used to optimize audio streams by not streaming audio data to peer’s that are outside of hearing range.
Important
The position scale should be set to the same value for all peers in the ODIN room. The scale value also has to be set individually for each room that will utilize ODIN’s optimization feature.
Updates the position of the own peer in the room. You have to set the scale beforehand via Set Room Position Scale.
Important
Invoking this method too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling Update Peer Position to a maximum of 10 times per second.
Tip
This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.
Handles Connection State Changed events which are called when the connection state changed (i.e. a disconnect to the server). Connect a Bind to On Connection State Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Onnection State Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Handles Room Joined events which are called once the local user has successfully joined a room. Connect a Bind to On Room Joined delegate node to handle this event for the specified room.
Important
The resulting peer id is only valid in the context of this room. This event will only be called for the local user.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
The id of the peer that joined the room. This is the self peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
Room User Data
Array of byte
The user data stored in the room for the peer as an array of bytes.
Called whenever the user data of the room changed. Connect a Bind to On Room User Data Changed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Room User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer Joined events in the given Room object. Peer Joined events will be called whenever a peer joins the room. Will not be called for the local player. Use the On Room Joined event to handle joins from the local player instead.
Called whenever a peer joins the room. Connect a Bind to On Peer Joined delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Joined node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever a peer leaves the room. Connect to a Bind to On Peer Left node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer Left node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to Peer User Data Changed events for the given Room object. Peer User Data Changed events will be called whenever a peer updates their user data. Is not called for the local player.
Called whenever a peer has changed its user data. Connect to a Bind to On Peer User Data Changed node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Peer User Data Changed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens for On Media Added events in the given Room object. On Media Added events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.
Called whenever a peer has added a media (i.e. activated the microphone). Connect to a Bind to On Media Added delegate node to handle this event for the specified room. Will not be called for the local player.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Added node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Listens to On Media Removed events in the given Room. On Media Removed will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.
Called whenever a peer has removed a media stream. Connect to a Bind to On Media Removed delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Called whenever another peer has sent a message. Connect to a Bind to On Message Received delegate node to handle this event for the specified room.
Tip
There might be issues if you create the event manually. Instead, drop a Bind to On Media Removed node into the blueprint, drag out from Event until you see the red line. Then release the mouse button and in the drop down choose Add Custom Event. Unreal will create the correct event for you then.
Returns all available capture devices with the device id. IMPORTANT! Use the Async version in case you experience stuttering. The Async version runs asynchronously and uses a callback when the result is available.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
IMPORTANT! Use the Async version in case you experience stuttering. Updates the capture device and restarts the capture stream of the Audio Capture component. The Async version runs asynchronously and does not block the main thread.
Will be called if ODIN recognizes that the selected capture device does not supply data anymore, i.e., if a microphone was unplugged. ODIN will wait for AllowedTimeWithoutStreamUpdate seconds before trying a stream restart. You can set the AllowedTimeWithoutStreamUpdate parameter on the Odin Audio Capture Object.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.
Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.
Closes the connection to the server and destroys the local room handle. This function is used to properly disconnect and clean up resources associated with a room.
GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device’s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device’s input.
Important
For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to 3.0. To change the maximum volume multiplier, use the Set Max Volume Multiplier function.
This function can be used to reset the media handle assigned to the targeted ODIN Synth Component instance. Resetting a media handle will restore it to its default configuration. This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.
This function is used to modify the Attenuation Settings on the targeted ODIN Synth instance. It is worth noting that Attenuation Settings are only passed to new Active Sounds on start, so modified Attenuation data should be set before sound playback.