var suggestions=document.getElementById("suggestions"),search=document.getElementById("search");search!==null&&document.addEventListener("keydown",inputFocus);function inputFocus(e){e.ctrlKey&&e.key==="/"&&(e.preventDefault(),search.focus()),e.key==="Escape"&&(search.blur(),suggestions.classList.add("d-none"))}document.addEventListener("click",function(e){if(suggestions!==null){var t=suggestions.contains(e.target);t||suggestions.classList.add("d-none")}}),document.addEventListener("keydown",suggestionFocus);function suggestionFocus(e){const s=suggestions.querySelectorAll("a"),o=[...s],t=o.indexOf(document.activeElement),i=suggestions.classList.contains("d-none");let n=0;e.keyCode===38&&!i?(e.preventDefault(),n=t>0?t-1:0,s[n].focus()):e.keyCode===40&&!i&&(e.preventDefault(),n=t+1<o.length?t+1:t,s[n].focus())}(function(){var e=new FlexSearch.Document({tokenize:"forward",cache:100,document:{id:"id",store:["href","title","section","description"],index:["title","description","content"]}});e.add({id:0,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/",title:"Blueprint Reference",section:"ODIN Documentation",description:"An index of all Blueprints available in our Unreal Engine Plugin",content:`<h2 id="functions">Functions</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/">Construct Local Room Handle</a></td>
<td>Creates a local room object that will be used to handle events and client side connection settings. Connect the <code>Room</code> output to the <code>Room</code> input of the <see cref="joinRoom">Join Room</see> node. You can also use the <code>Room</code> output to handle events like <code>Room Joined</code> or <code>Media Added</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/make-odin-apm-settings/">Make ODIN APM Settings</a></td>
<td>Creates an APM settings object that can be used to construct a local room handle.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/">Generate Room Token</a></td>
<td>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´)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/construct-a-token-generator/">Construct a Token Generator</a></td>
<td>Creates a token generator that is used to generate room tokens on client side.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture/">Create Odin Audio Capture</a></td>
<td>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 <a href="https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AudioCapture/CreateAudioCapture/">Audio Capture</a>, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the <code>Audio Capture</code> Plugin is enabled.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/format-error/">Format Error</a></td>
<td>Takes an ODIN error code and returns an error message a string which can be printed to the log.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/generate-access-key/">Generate Access Key</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/">Add Odin Synth Component</a></td>
<td>Adds the Odin Synth Component to the specified actor.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/get-and-set-volume-multiplier/">Get and Set Volume Multiplier</a></td>
<td>GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device&rsquo;s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device&rsquo;s input.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/get-and-set-max-volume-multiplier/">Get and Set Max Volume Multiplier</a></td>
<td>GetMaxVolumeMultiplier: Retrieves the current maximum volume multiplier value. SetMaxVolumeMultiplier: Sets the new maximum volume multiplier value.</td>
</tr>
</tbody>
</table>
<h2 id="events">Events</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-add-media-to-room-success/">On Add Media To Room Success</a></td>
<td>This event is triggered in the <see cref="addMediaToRoom">Add Media To Room</see> function once the media has been added to the room successfully.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-connection-state-changed/">On Connection State Changed</a></td>
<td>Handles <code>Connection State Changed</code> events which are called when the connection state changed (i.e. a disconnect to the server). Connect a <see cref="bindToOnConnectionChanged">Bind to On Connection State Changed</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined/">On Room Joined</a></td>
<td>Handles <code>Room Joined</code> events which are called once the local user has successfully joined a room. Connect a <see cref="bindToOnRoomJoined">Bind to On Room Joined</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-room-user-data-changed/">On Room User Data Changed</a></td>
<td>Called whenever the user data of the room changed. Connect a <see cref="bindToOnRoomUserDataChanged">Bind to On Room User Data Changed</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-joined/">On Peer Joined</a></td>
<td>Called whenever a peer joins the room. Connect a <see cref="bindToOnPeerJoined">Bind to On Peer Joined</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-left/">On Peer Left</a></td>
<td>Called whenever a peer leaves the room. Connect to a <see cref="bindToOnPeerLeft">Bind to On Peer Left</see> node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-user-data-changed/">On Peer User Data Changed</a></td>
<td>Called whenever a peer has changed its user data. Connect to a <see cref="bindToOnPeerUserDataChanged">Bind to On Peer User Data Changed</see> node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/">On Media Added</a></td>
<td>Called whenever a peer has added a media (i.e. activated the microphone). Connect to a <see cref="bindToOnMediaAdded">Bind to On Media Added</see> delegate node to handle this event for the specified room. Will not be called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-media-removed/">On Media Removed</a></td>
<td>Called whenever a peer has removed a media stream. Connect to a <see cref="bindToOnMediaRemoved">Bind to On Media Removed</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-message-received/">On Message Received</a></td>
<td>Called whenever another peer has sent a message. Connect to a <see cref="bindToOnMessageReceived">Bind to On Message Received</see> delegate node to handle this event for the specified room.</td>
</tr>
</tbody>
</table>
<h2 id="delegates">Delegates</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-connection-state-changed/">Bind to On Connection State Changed</a></td>
<td>Listens to on <code>Connection State Changed</code> events from the given Room object and calls the connected event handler of type <see cref="connectionChangedEvent">On Connection Changed</see>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-joined/">Bind to On Room Joined</a></td>
<td>Listens on <code>Room Joined</code> events on the given Room object and calls the connected <see cref="roomJoinedEvent">Room Joined Event</see> handler.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-user-data-changed/">Bind to On Room User Data Changed</a></td>
<td>Bind to <code>Room User Data Changed</code> events in the given Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined/">Bind to On Peer Joined</a></td>
<td>Listens to <code>Peer Joined</code> events in the given Room object. <code>Peer Joined</code> events will be called whenever a peer joins the room. Will not be called for the local player. Use the <see cref="onRoomJoined">On Room Joined</see> event to handle joins from the local player instead.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-left/">Bind to On Peer Left</a></td>
<td>Listens on <code>Peer Left</code> events on the given Room object which will be called whenever a peer left the room. Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-user-data-changed/">Bind to On Peer User Data Changed</a></td>
<td>Listens to <see cref="peerUserDataChangedEvent">Peer User Data Changed</see> events for the given Room object. <code>Peer User Data Changed</code> events will be called whenever a peer updates their user data. Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-added/">Bind to On Media Added</a></td>
<td>Listens for <see cref="mediaAddedEvent">On Media Added</see> events in the given Room object. <code>On Media Added</code> events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed/">Bind to On Media Removed</a></td>
<td>Listens to <see cref="mediaRemovedEvent">On Media Removed</see> events in the given Room. <code>On Media Removed</code> will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-message-received/">Bind to On Message Received</a></td>
<td>Listens to <see cref="ConstructRoom">On Message Received</see> events in the given Room object. <code>On Message Received</code> events will be triggered whenever another peer has sent a message.</td>
</tr>
</tbody>
</table>
<h2 id="audio-capture">Audio Capture</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/construct-local-media/">Construct Local Media</a></td>
<td>Creates a media object that will be used in the <see cref="addMediaToRoom">Add Media To Room</see> node input. Connect an <code>Audio Capture</code> or <code>Odin Audio Capture</code> object to it.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-capture-devices-available/">Get Capture Devices Available</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-current-audio-capture-device/">Get Current Audio Capture Device</a></td>
<td>Returns info on the current capture device.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/change-capture-device-by-id/">Change Capture Device By Id</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/change-capture-device-by-name/">Change Capture Device By Name</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/restart-capturing/">Restart Capturing</a></td>
<td>Restart the stream, using CurrentSelectedDeviceIndex as the new input.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/">Get and Set Is Paused</a></td>
<td>Get Is Capturing Paused: Returns whether the audio capture is paused. Set Is Capturing Paused: Sets the paused state of the audio capture.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/on-capture-device-reset/">On Capture Device Reset</a></td>
<td>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 <code>AllowedTimeWithoutStreamUpdate</code> seconds before trying a stream restart. You can set the <code>AllowedTimeWithoutStreamUpdate</code> parameter on the Odin Audio Capture Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/on-default-device-changed/">On Default Device Changed</a></td>
<td>Will be called if the Default Device is the currently selected device and if the Default Device was switched by the system.</td>
</tr>
</tbody>
</table>
<h2 id="room">Room</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/join-room/">Join Room</a></td>
<td>Joins an ODIN room with the room token provided. Every peer connected to the same room will be able to talk to each other and exchange data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/add-media-to-room/">Add Media To Room</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/set-room-position-scale/">Set Room Position Scale</a></td>
<td>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&rsquo;s that are outside of hearing range.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/update-peer-position/">Update Peer Position</a></td>
<td>Updates the position of the own peer in the room. You have to set the scale beforehand via <see cref="setRoomPositionScale">Set Room Position Scale</see>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/send-message/">Send Message</a></td>
<td>Sends arbitrary data to a list of target peers to an ODIN room. Every peer connected to the same room will be able to receive the message.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/get-room-connection-stats/">Get Room Connection Stats</a></td>
<td>Get statistics for a room connection. This function provides detailed information about the connection status and metrics in an ODIN room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/set-room-apm-config/">Set Room APM Config</a></td>
<td>Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/set-room-apm-stream-delay/">Set Room APM Stream Delay</a></td>
<td>Updates the delay estimate in ms for reverse stream used in echo cancellation. This function modifies the delay settings for a specific room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/destroy-local-room-handle/">Destroy Local Room Handle</a></td>
<td>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.</td>
</tr>
</tbody>
</table>
<h2 id="odin-synth-component">Odin Synth Component</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/odin-assign-synth-to-media/">Odin Assign Synth to Media</a></td>
<td>Assign a media stream coming with the <code>Media Added</code> event to the <code>Odin Synth Component</code> which will generate audio output from the incoming stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/reset-odin-media/">Reset Odin Media</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/adjust-attenuation/">Adjust Attenuation</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-connected-playback-media/">Get Connected Playback Media</a></td>
<td>Retrieves the playback media stream pointer that was assigned to this synth component.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-stats/">Get Output Media Stats</a></td>
<td>Get statistics for an output media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-id/">Get Output Media Id</a></td>
<td>Get the media ID of an output media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-peer-id/">Get Output Media Peer Id</a></td>
<td>Get the peer ID of an output media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/resume-playback-media/">Resume Playback Media</a></td>
<td>Resume the specified playback media handle, re-initiating the reception of data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/pause-playback-media/">Pause Playback Media</a></td>
<td>Pause the specified playback media handle, stopping the reception of data.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1,href:"https://www.4players.io/odin/sdk/unity/2.0.0/manual/odinroom/",title:"High Level API",section:"ODIN Documentation",description:"High Level API for Unity Components and ODIN integration in Unity Editor",content:`<p>The ODIN Unity SDK provides prefabs and components that allow you to quickly embed voice-chat into your game or
application with ease.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This manual handles the high-level API and the prefabs that are provided with the SDK.
If you are looking for a more in-depth understanding of the low-level API, please refer to the
<a href="/odin/sdk/unity/2.0.0/manual/room/">Low Level API</a>.</p>
</div>
</div>

<h2 id="getting-started">Getting started</h2>
<p>Please read the <a href="/odin/sdk/unity/2.0.0/manual/">manual</a> to get started with the ODIN Unity SDK. It will guide you through the
process of setting up the ODIN Unity SDK in your project.</p>
<p>Once you have the Unity SDK installed, you can start using the prefabs and components that are provided with the SDK.
The first prefab you need to add to your scene is the <code>OdinInstance</code> prefab that you find in the
<code>Packages/io.fourplayers.odin/Runtime/</code> path.</p>
<h3 id="odininstance-prefab">OdinInstance prefab</h3>
<p>Once you have added the prefab to your scene, it will look like this (it&rsquo;s cut off at the bottom to save space):</p>
<figure style="max-width: 800px"><a href="/images/odin/unity/unity_editor_2.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unity/unity_editor_2.jpg"
         alt="OdinInstance prefab in Unity Editor" width="800"/></a><figcaption>
            <p>OdinInstance prefab in Unity Editor</p>
        </figcaption>
</figure>
<p>It consists of the following components:</p>
<ul>
<li><code>OdinBanner</code>: It&rsquo;s just for eye candy and useful links to our developer documentation and the admin panel.</li>
<li>










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


: This is the main component that handles all the communication with the ODIN servers and
provides easy to use delegates and events that allow you to customize the experience very easily to your own needs.</li>
</ul>
<h3 id="odinroom-component">OdinRoom component</h3>
<p><a href='/odin/sdk/unity/2.0.0/classes/odinroom/' class="btn btn-primary">Switch to scripting</a></p>
<p>The 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 component is the main entry point for the ODIN Unity SDK.</p>
<figure><img src="/images/odin/unity/odininstance_prefab.jpg"
         alt="OdinRoom component in Unity Editor"/><figcaption>
            <p>OdinRoom component in Unity Editor</p>
        </figcaption>
</figure>
<h4 id="properties">Properties</h4>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Gateway</td>
<td>The base URL of the gateway. If you are using our hosted solution, leave it as is, otherwise if you are hosting yourself you need to adjust the URL</td>
</tr>
<tr>
<td>Token</td>
<td>For testing purposes you can set a token which should be used when joining the room - you typically do that in code - this is typically used for debugging purposes</td>
</tr>
<tr>
<td>Audio Mixer Group</td>
<td>Set a mixer group for audio effects that are automatically added to each voice chat audio source added to the scene</td>
</tr>
<tr>
<td>OnRoomJoined</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnRoomJoined <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onroomjoined"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
<tr>
<td>OnMediaAdded</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnMediaAdded <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaadded"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
<tr>
<td>OnMediaRemoved</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnMediaRemoved <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaremoved"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
<tr>
<td>OnPeerJoined</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnPeerJoined <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerjoined"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
<tr>
<td>OnPeerLeft</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnPeerLeft <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerleft"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
<tr>
<td>OnMessageReceived</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnMessageReceived <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmessagereceived"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
<tr>
<td>OnConnectionStateChanged</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">OdinRoom.OnConnectionStateChanged <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onconnectionstatechanged"><i class="fas fa-external-link-alt"></i></a></span>


 event</td>
</tr>
</tbody>
</table>
<p>The component already handles these events for you per default to implement basic 2D non-spatial voice-chat:</p>
<ul>
<li>













<span class="external-reference">OdinRoom.OnPeerJoined <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerjoined"><i class="fas fa-external-link-alt"></i></a></span>


</li>
<li>













<span class="external-reference">OdinRoom.OnPeerLeft <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerleft"><i class="fas fa-external-link-alt"></i></a></span>


</li>
<li>













<span class="external-reference">OdinRoom.OnMediaAdded <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaadded"><i class="fas fa-external-link-alt"></i></a></span>


</li>
<li>













<span class="external-reference">OdinRoom.OnMediaRemoved <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaremoved"><i class="fas fa-external-link-alt"></i></a></span>


</li>
<li>













<span class="external-reference">OdinRoom.OnConnectionStateChanged <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onconnectionstatechanged"><i class="fas fa-external-link-alt"></i></a></span>


</li>
</ul>
<p>Depending on what you want to do with the audio sources you can subscribe to one of these events in addition to the
default handler or you might need to drop the default handler and implement your own.</p>
<h3 id="odinmicrophonereader">OdinMicrophoneReader</h3>
<p>The 










<span class="external-reference">OdinMicrophoneReader <a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader"><i class="fas fa-external-link-alt"></i></a></span>


 component is responsible for capturing the audio from the microphone and
sending it to the ODIN servers.</p>
<figure><img src="/images/odin/unity/microphonereader_component.jpg"
         alt="OdinMicrophoneReader component in Unity Editor"/><figcaption>
            <p>OdinMicrophoneReader component in Unity Editor</p>
        </figcaption>
</figure>
<h4 id="properties-1">Properties</h4>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Redirect Captured Audio</td>
<td>If enabled (default) automatically sends captured audio to ODIN servers. Disabling requires special handling and should only be done in rare situations</td>
</tr>
<tr>
<td>Silence Captured Audio</td>
<td>Mute audio so that no audio is sent to ODIN servers. This is disabled by default.</td>
</tr>
<tr>
<td>Continue Recording</td>
<td>Once the available audio buffer is full OdinMicrophoneReader automatically wraps to start and overwrites previous audio. Should only be disabled in rare use cases</td>
</tr>
<tr>
<td>Custom Input Device</td>
<td>OdinMicrophoneReader uses the input device selected in the operation system settings. Enabling this option will allow you to set a specific <code>Input Device</code></td>
</tr>
<tr>
<td>Input Device</td>
<td>Set the name of an input device that should be used instead of the default input device set in the operating system. You need to enable <code>Custom Input Device</code> to make use of this setting</td>
</tr>
<tr>
<td>Autostart Listen</td>
<td>Automatically start listening on the microphone (will activate the microphone in <code>Start</code>)</td>
</tr>
<tr>
<td>Custom Mic Volume Scale</td>
<td>Disabled by default, enable to set the volume scale in <code>Mic Volume Scale</code> setting</td>
</tr>
<tr>
<td>Mic Volume Scale</td>
<td>Set a microphone volume scale factor (requires <code>Custom Mic Volume Scale</code> to be enabled)</td>
</tr>
<tr>
<td>OnAudioData</td>
<td>A Unity event that you can subscribe to in one of your components to handle the 













<span class="external-reference">MicrophoneReader.OnAudioData</span>


 event, which is called whenever new audio data is available.</td>
</tr>
</tbody>
</table>
<h2 id="joining-a-room">Joining a room</h2>
<p>Once you have added the prefab and configured your events, not much happens yet. You need to join a room to start with
the voice chat.</p>
<p>Every user connected to the same room can hear and talk to each other user joined in the same room. The room is identified
with a basic string identifier. You can join as many rooms as you want, but you can only talk to users in the same room.</p>
<p>To join a room, you just need to set the 













<span class="external-reference">OdinRoom.Token <a href="/odin/sdk/unity/2.0.0/classes/odinroom/token"><i class="fas fa-external-link-alt"></i></a></span>


 property. 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 will
check each <code>Update</code> cycle if the token has been set and if it has been set, it will join the room.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Tokens are typically generated by your backend and are used to authenticate the user and to provide the user with the
necessary information to join the room. You should never generate tokens in your frontend or client application as this
would expose your secret keys to the public. See <a href="/odin/introduction/access-keys/">Access Keys in ODIN</a>
for more information on that topic. We have an example on how to generate tokens using a simple NodeJS script in a
cloud function: <a href="/odin/examples/token-server/">Generating Tokens</a>.</p>
</div>
</div>

<h3 id="creating-a-token-for-testing-purposes">Creating a token for testing purposes</h3>
<p>If you want to test ODIN without setting up your own backend, you can use this code to create a token for testing purposes.
<strong>Please note</strong>: The function (













<span class="external-reference">OdinRoom.GenerateTestToken</span>


) is only available in the Unity Editor and
should not be used in a production environment.</p>
<pre><code class="language-csharp">  var accessKey = &quot;__YOUR_ACCESS_KEY__&quot;;
  var roomName = &quot;MyRoom&quot;;
  var username = &quot;Username&quot;;
  _Room.Token = OdinRoom.GenerateTestToken(roomName, username, 5, AccessKey);
</code></pre>
<p>You can create an access key for testing purposes for up to 25 users directly in this web component:</p>
<p><odin-access-key></odin-access-key></p>
<h2 id="testing-the-setup">Testing the setup</h2>
<p>Just press Play in the Unity Editor to test your basic ODIN integration. The operating system will ask you for permission
to use the microphone. You need to build the client and deploy it to a colleague or another machine to test the voice chat
integration.</p>
<p>You can also use our <strong>free Web Client</strong> to test your setup. You&rsquo;ll just open our Web Client in your browser, set the same
access key and room name and you can talk to your Unity client. You can find a guide on how to use the Web Client
<a href="/odin/introduction/web-client/">here</a>.</p>
<p>You should now have simple one-room non-spatial voice chat working. Anyone in the same room can hear and talk to each
other. During play and when others are connecting to the same room, you&rsquo;ll see new GameObjects being created in the
hierarchy for peers (they have an 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>


 component attached to them) and for each peer you&rsquo;ll see
GameObjects with an 










<span class="external-reference">OdinMedia <a href="/odin/sdk/unity/2.0.0/classes/odinmedia"><i class="fas fa-external-link-alt"></i></a></span>


 component being attached.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">
Please note: The 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>


 and 










<span class="external-reference">OdinMedia <a href="/odin/sdk/unity/2.0.0/classes/odinmedia"><i class="fas fa-external-link-alt"></i></a></span>


 GameObjects are created and destroyed
by the 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 component. You should not add them manually to your scene or modify them in any way.
The components are there to help you understand what is happening in the background.
</div>
</div>

<h2 id="implementing-3d-spatial-voice-chat">Implementing 3D spatial voice-chat</h2>
<p>Implementing a 3D spatial voice-chat requires a bit more work. It&rsquo;s basically the same as the 2D non-spatial voice-chat,
but, these two things need to be done:</p>
<ul>
<li>First, the <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 of the AudioSource needs to be set to <code>1.0</code> which is 3D sound. This enables Unity
to calculate the volume and direction of the sound based on the position of the GameObject in the scene.</li>
<li>Second, the 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>


 component (and thus subsequent 










<span class="external-reference">OdinMedia <a href="/odin/sdk/unity/2.0.0/classes/odinmedia"><i class="fas fa-external-link-alt"></i></a></span>


 objects) needs to be
attached to a GameObject that is moving in the scene. This is typically the GameObject that represents the player
or the avatar of the player.</li>
</ul>
<p>The actual implementation is different for each game or application and depends on how you have set up your multiplayer
framework. Typical multiplayer frameworks like Mirror Networking, Unity Netcode for GameObjects or Photon PUN assign
connectionIds to players. You can use these connectionIds to identify the player and attach the 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>



component to the GameObject that represents the player.</p>
<p>Odin has their own ids for peers and media, so to some extend you need to map ODINs user ids to (connection) ids in your
game. When connecting to a room in ODIN, you can set a user data object that will be sent to all other peers in the room.
This user data object can contain the connection id of the player in your game. You can then use this connection id to
map the Odin user id to the player in your game.</p>
<p>That&rsquo;s all there is to do to change 2d non-spatial voice-chat to 3D spatial voice-chat.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We have a guide on how to implement 3D spatial voice-chat using the Mirror Networking framework with the 1.x version of
the Unity SDK, but the principles are the same and can be applied to any multiplayer framework. You can find the guide
here: <a href="/odin/guides/unity/unity-mirror/">Unity Mirror Integration</a>.</p>
</div>
</div>

<h2 id="mixing-2d-and-3d-voice-chat">Mixing 2D and 3D voice-chat</h2>
<p>In some games or applications, you might want to mix 2D non-spatial voice-chat with 3D spatial voice-chat. As use-case
for this is that you have 3D spatial voice-chat for players in a &ldquo;world&rdquo; room where every player can hear and talk to
each other based on their position in the world, but you could also have a radio room for seperate teams that have
2D non-spatial voice-chat.</p>
<p>Imagine CounterStrike where you have 3D spatial voice-chat for the players in the world, but you also have 2D non-spatial
voice-chat for the players in the same team. If a player is talking via radio, only the players in the same team he still
can be heared by the enemy in 3D spatial voice-chat. So, it might be a good strategy to quickly sneak up to the enemy
and listen to what they try to privately discuss in their radio.</p>
<p>To do that, you create two 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 GameObjects in your scene but with different room names. Depending
on the room you would have different event handlers to handle 2D voice chat or 3D voice chat.</p>
<h2 id="next-steps">Next steps</h2>
<p>You should now have a basic understanding of how to use the high-level API of the ODIN Unity SDK. You can now start
implementing your own voice chat solution in your game or application. Check out the scripting API for more information
on the actual functionality.</p>
<p><a href='/odin/sdk/unity/2.0.0/classes/odinroom/' class="btn btn-primary">Switch to scripting</a></p>
`}),e.add({id:2,href:"https://www.4players.io/odin/sdk/unity/2.0.0/manual/room/",title:"Low Level API",section:"ODIN Documentation",description:"Low Level API for Unity Components and ODIN integration in Unity Editor",content:`<p><a href='/odin/sdk/unity/2.0.0/classes/room/' class="btn btn-primary">Switch to scripting</a></p>
<p>The ODIN Unity SDK provides a low-level API that allows you to create your own voice-chat experience from scratch.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This manual handles the low-level API and the classes that are provided with the SDK.
If you are looking for easy to use prefabs and components that are provided with the SDK, please refer to the
<a href="/odin/sdk/unity/2.0.0/manual/odinroom/">High Level API</a>.</p>
</div>
</div>

<h2 id="getting-started">Getting Started</h2>
<p>The low-level API is designed to give you full control over the voice-chat experience in your game. It is a set of
classes that you can use to create your own voice-chat experience from scratch. All starts with the 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>



class.</p>
<p>Please see the Sample <code>InstanceSampleBasic</code> that is provided with the SDK to see how to use the low-level API.
<strong>Please note</strong>: The sample code below only shows the most important parts of the sample. It skips error handling and
validation for the sake of simplicity. Please refer to the sample code for a complete example.</p>
<h3 id="creating-a-room">Creating a Room</h3>
<p>The 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 class is the main class that you will use to create a voice-chat experience in your game. You
first create a local Room object and then join it. The server will create the room object on the fly so you don&rsquo;t need to
to do any bookkeeping of the server-side on your own.</p>
<pre><code class="language-csharp">// Create a room instance and provide a gateway or server URL, a sample rate and a flag if the room is stereo or not
_Room = Room.Create(Gateway, 48000, false);
</code></pre>
<h3 id="handling-events">Handling Events</h3>
<p>Next step is to handle events that are fired by the room. The room will fire events for all important actions that are
happening in the room. You can subscribe to these events and handle them in your game.</p>
<pre><code class="language-csharp">_Room.OnRoomJoined += Example_OnRoomJoined;
_Room.OnMediaStarted += Example_OnMediaStarted;
_Room.OnMediaStopped += Example_OnMediaStopped;
_Room.OnMessageReceived += Example_OnMessageLog;
</code></pre>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The events are being called in a different thread that the main thread! You need to make sure that you handle the events
in a thread-safe way and you need to make sure that any call into the Unity API is dispatched to the main thread.</p>
</div>
</div>

<p>If you need to call the Unity API, you need to dispatch the call to the main thread. You can create a <code>ConcurrentQueue</code>
instance in your class and dispatch the call to the main thread in the <code>Update</code> method of your MonoBehaviour. There are
many examples on how to handle these situations in the Unity community. But here is a quick example:</p>
<pre><code class="language-csharp">public static readonly ConcurrentQueue&lt;Action&gt; UnityQueue = new ConcurrentQueue&lt;Action&gt;();

private void Example_OnRoomJoined(object sender, ulong ownPeerId, string name, byte[] roomUserData, ushort[] mediaIds, ReadOnlyCollection&lt;PeerRpc&gt; peers)
{
    // Handle the event
    // ...
    
    // If you need to call into the Unity API, you need to dispatch the call to the main thread
    UnityQueue.Enqueue(() =&gt;
    {
        // Call into the Unity API
        // ...
    });   
}

private void Update()
{
    if (UnityQueue.IsEmpty == false)
        while (UnityQueue.TryDequeue(out var action))
            action?.Invoke();
}
</code></pre>
<h3 id="joining-a-room">Joining a Room</h3>
<p>Once you have created the room and subscribed to the events, you can join the room. You just need to create a token
and join the room with it.</p>
<p>To join a room, you just need to set the 













<span class="external-reference">Room.Token <a href="/odin/sdk/unity/2.0.0/classes/room/token"><i class="fas fa-external-link-alt"></i></a></span>


 property. 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 will
check if the token has been set and if it has been set, it will join the room.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Tokens are typically generated by your backend and are used to authenticate the user and to provide the user with the
necessary information to join the room. You should never generate tokens in your frontend or client application as this
would expose your secret keys to the public. See <a href="/odin/introduction/access-keys/">Access Keys in ODIN</a>
for more information on that topic. We have an example on how to generate tokens using a simple NodeJS script in a
cloud function: <a href="/odin/examples/token-server/">Generating Tokens</a>.</p>
</div>
</div>

<p>If you want to test ODIN without setting up your own backend, you can use this code to create a token for testing purposes.
<strong>Please note</strong>: The function (













<span class="external-reference">OdinRoom.GenerateTestToken</span>


) is only available in the Unity Editor and
should not be used in a production environment.</p>
<pre><code class="language-csharp">  var accessKey = &quot;__YOUR_ACCESS_KEY__&quot;;
  var roomName = &quot;MyRoom&quot;;
  var username = &quot;Username&quot;;
  _Room.Token = OdinRoom.GenerateTestToken(roomName, username, 5, AccessKey);
</code></pre>
<p>You can create an access key for testing purposes for up to 25 users directly in this web component:</p>
<p><odin-access-key></odin-access-key></p>
<h3 id="adding-media">Adding Media</h3>
<p>Once you have joined the room, you can add media to the room, i.e. add the users microphone stream to the room. If you
want users to be connected to each other immediately, you can add the media right after joining the room.</p>
<pre><code class="language-csharp">    private void Example_OnRoomJoined(object sender, ulong ownPeerId, string name, byte[] roomUserData, ushort[] mediaIds, ReadOnlyCollection&lt;PeerRpc&gt; peers)
    {        
        // each room has a limited number of ids reserved for encoders i.e audio input / capture
        if (_Room.AvailableEncoderIds.TryDequeue(out ushort mediaId))
            CreateCapture(mediaId);
        else
            Debug.LogError($&quot;Can not create encoder without a encoder id that is free to use&quot;);
    }
    
    // Create a media instance and provide a sample rate and a flag if the media is stereo or not
    public void CreateCapture(ushort mediaId)
    {
        if( _Room == null) return;

        // create a encoder where to send audio data to
        if (_Room.GetOrCreateEncoder(mediaId, out MediaEncoder encoder))
        {
            // created encoders have to be started with a customizable rpc call
            _Room.StartMedia(encoder);
            // set a callback for the MicrophoneReader and add sample effects to the pipeline
            LinkEncoderToMicrophone(encoder);
        }
    }
    
    // Find the microphone reader in the scene and link them to the input of the encoder
    private void LinkEncoderToMicrophone(MediaEncoder encoder)
    {
        UnityQueue.Enqueue(() =&gt;
        {
            // this sample does not set PersistentListener direct or by prefab
            if (_AudioInput &amp;&amp; _AudioInput.OnAudioData?.GetPersistentEventCount() &lt;= 0 &amp;&amp; _Room != null)
                _AudioInput.OnAudioData.AddListener(ProxyAudio);

            OdinMicrophoneReader microphone = GetComponent&lt;OdinMicrophoneReader&gt;();
            if (microphone != null)
            {
                // optionally add effects to the encoder (Input/Capture)

                // add voice activity detection
                OdinVadComponent vadComponent = microphone.gameObject.AddComponent&lt;OdinVadComponent&gt;();
                vadComponent.Media = encoder;
                // add a microphone boost
                OdinVolumeBoostComponent volumeBoostComponent = microphone.gameObject.AddComponent&lt;OdinVolumeBoostComponent&gt;();
                volumeBoostComponent.Media = encoder;
            }
        });
    }
</code></pre>
<p>You&rsquo;ll need to have a 










<span class="external-reference">OdinMicrophoneReader <a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader"><i class="fas fa-external-link-alt"></i></a></span>


 component attached to your scripted game object for this to
work.</p>
<p>It is important to understand what happens here: Imagine the ODIN as an audio pipeline. The microphone has some output
and we need to connect that output to the input of the room. With this code, we do exactly that. We link the output of
the microphone to the input of the room. The room will then send the audio data to the server and the server will send
the audio data to all other peers in the room.</p>
<pre><code class="language-csharp">// Link OdinMicrophoneReader output (OnAudioData) to the input of the room (ProxyAudio)
_AudioInput.OnAudioData.AddListener(ProxyAudio);
</code></pre>
<h3 id="creating-a-playback-stream">Creating a Playback Stream</h3>
<p>Now, all users in the room can hear you, but you can&rsquo;t hear them yet. To hear them, you need to create a playback stream
for each media created by every user/peer in the room. You can do this by subscribing to the 













<span class="external-reference">Room.OnMediaStarted <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted"><i class="fas fa-external-link-alt"></i></a></span>


.</p>
<pre><code class="language-csharp">    private void Example_OnMediaStarted(object sender, ulong peerId, MediaRpc media)
    {       
        // in default setup the room creates decoders intern automatically on the event
        // get the decoder corresponding to a peer
        if (_Room.RemotePeers.TryGetValue(peerId, out PeerEntity peer))
            if (peer.Medias.TryGetValue(media.Id, out MediaDecoder decoder))
                CreatePlayback(decoder, peer);
    }
    
    public void CreatePlayback(MediaDecoder decoder, PeerEntity peer)
    {
        // EXAMPLE optionally add INTERNAL effects to the decoder (Output/Playback)
        MediaPipeline pipeline = decoder.GetPipeline();
        if (pipeline.AddVadEffect(out _))
            Debug.Log($&quot;added {nameof(VadEffect)} to \\&quot;OdinDecoder {decoder.Id}\\&quot; of peer {peer.Id}&quot;);

        // Odin uses Unity to play the audio
        DispatchCreateAudioSource(decoder, peer);
    }
    
        /// &lt;summary&gt;
    /// Add OdinMedia that handles &lt;see cref=&quot;AudioSource&quot;/&gt; and copy data from Odin to &lt;see cref=&quot;AudioClip&quot;/&gt;
    /// &lt;/summary&gt;
    /// &lt;remarks&gt;optionally &lt;see cref=&quot;MediaDecoder.Pop&quot;/&gt; samples can be used with &lt;see cref=&quot;AudioClip.SetData&quot;/&gt;&lt;/remarks&gt;
    private void DispatchCreateAudioSource(MediaDecoder decoder, PeerEntity peer)
    {
        UnityQueue.Enqueue(() =&gt;
        {
            GameObject container = new GameObject($&quot;OdinDecoder {decoder.Id}&quot;);
            container.transform.parent = transform;
            OdinMedia mediaComponent = container.AddComponent&lt;OdinMedia&gt;();
            mediaComponent.MediaDecoder = decoder; // set the decoder to copy data from
            mediaComponent.Parent = peer; // the use of OdinMedia requires a parent else it is optional
            mediaComponent.enabled = true;

            // optionally add interal effects wrapped with Unity to the decoder (Output/Playback)
            // for audio pipeline manipulation

            // add a playback volume boost
            OdinVolumeBoostComponent volumeBoostComponent = container.AddComponent&lt;OdinVolumeBoostComponent&gt;();
            volumeBoostComponent.Media = mediaComponent;
            // add a playback mute 
            OdinMuteAudioComponent muteComponent = container.AddComponent&lt;OdinMuteAudioComponent&gt;();
            muteComponent.Media = mediaComponent;
            // see other Effects or build one
            // with CustomEffect (PipelineEffect)
            // or with Unity helper class OdinCustomEffectUnityComponentBase
        });
    }
</code></pre>
<p>Of course, you also need to handle the case if users disconnect or remove their medias from the room (i.e. muting
themselves). You can do this by subscribing to the 













<span class="external-reference">Room.OnMediaStopped <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastopped"><i class="fas fa-external-link-alt"></i></a></span>


.</p>
<pre><code class="language-csharp">    private void Example_OnMediaStopped(object sender, ulong peerId, ushort mediaId)
    {
        Debug.Log($&quot;Peer {peerId} removed media {mediaId}&quot;);

        DispatchDestroyAudioSource($&quot;OdinDecoder {mediaId}&quot;);
    }
    
    /// &lt;summary&gt;
    /// Disposing objects is necessary to prevent memory leaks
    /// &lt;/summary&gt;
    private void DispatchDestroyAudioSource(string gameObjectName)
    {
        UnityQueue.Enqueue(() =&gt;
        {
            OdinMedia mediaComponent = this.gameObject
                .GetComponentsInChildren&lt;OdinMedia&gt;()
                .FirstOrDefault(component =&gt; component.name == gameObjectName);

            if (mediaComponent != null)
                Destroy(mediaComponent.gameObject);
        });
    }
</code></pre>
<h2 id="testing-the-setup">Testing the setup</h2>
<p>Just press Play in the Unity Editor to test your basic ODIN integration. The operating system will ask you for permission
to use the microphone. You need to build the client and deploy it to a colleague or another machine to test the voice chat
integration.</p>
<p>You can also use our <strong>free Web Client</strong> to test your setup. You&rsquo;ll just open our Web Client in your browser, set the same
access key and room name and you can talk to your Unity client. You can find a guide on how to use the Web Client
<a href="/odin/introduction/web-client/">here</a>.</p>
<p>You should now have simple one-room non-spatial voice chat working. Anyone in the same room can hear and talk to each
other. During play and when others are connecting to the same room, you&rsquo;ll see new GameObjects being created in the
hierarchy for peers (they have an 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>


 component attached to them) and for each peer you&rsquo;ll see
GameObjects with an 










<span class="external-reference">OdinMedia <a href="/odin/sdk/unity/2.0.0/classes/odinmedia"><i class="fas fa-external-link-alt"></i></a></span>


 component being attached.</p>
<h2 id="implementing-3d-spatial-voice-chat">Implementing 3D spatial voice-chat</h2>
<p>Implementing a 3D spatial voice-chat requires a bit more work. It&rsquo;s basically the same as the 2D non-spatial voice-chat,
but, these two things need to be done:</p>
<ul>
<li>First, the <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 of the AudioSource needs to be set to <code>1.0</code> which is 3D sound. This enables Unity
to calculate the volume and direction of the sound based on the position of the GameObject in the scene.</li>
<li>Second, the 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>


 component (and thus subsequent 










<span class="external-reference">OdinMedia <a href="/odin/sdk/unity/2.0.0/classes/odinmedia"><i class="fas fa-external-link-alt"></i></a></span>


 objects) needs to be
attached to a GameObject that is moving in the scene. This is typically the GameObject that represents the player
or the avatar of the player.</li>
</ul>
<p>The actual implementation is different for each game or application and depends on how you have set up your multiplayer
framework. Typical multiplayer frameworks like Mirror Networking, Unity Netcode for GameObjects or Photon PUN assign
connectionIds to players. You can use these connectionIds to identify the player and attach the 










<span class="external-reference">OdinPeer <a href="/odin/sdk/unity/2.0.0/classes/odinpeer"><i class="fas fa-external-link-alt"></i></a></span>



component to the GameObject that represents the player.</p>
<p>Odin has their own ids for peers and media, so to some extend you need to map ODINs user ids to (connection) ids in your
game. When connecting to a room in ODIN, you can set a user data object that will be sent to all other peers in the room.
This user data object can contain the connection id of the player in your game. You can then use this connection id to
map the Odin user id to the player in your game.</p>
<p>That&rsquo;s all there is to do to change 2d non-spatial voice-chat to 3D spatial voice-chat.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We have a guide on how to implement 3D spatial voice-chat using the Mirror Networking framework with the 1.x version of
the Unity SDK, but the principles are the same and can be applied to any multiplayer framework. You can find the guide
here: <a href="/odin/guides/unity/unity-mirror/">Unity Mirror Integration</a>.</p>
</div>
</div>

<h2 id="mixing-2d-and-3d-voice-chat">Mixing 2D and 3D voice-chat</h2>
<p>In some games or applications, you might want to mix 2D non-spatial voice-chat with 3D spatial voice-chat. As use-case
for this is that you have 3D spatial voice-chat for players in a &ldquo;world&rdquo; room where every player can hear and talk to
each other based on their position in the world, but you could also have a radio room for seperate teams that have
2D non-spatial voice-chat.</p>
<p>Imagine CounterStrike where you have 3D spatial voice-chat for the players in the world, but you also have 2D non-spatial
voice-chat for the players in the same team. If a player is talking via radio, only the players in the same team he still
can be heared by the enemy in 3D spatial voice-chat. So, it might be a good strategy to quickly sneak up to the enemy
and listen to what they try to privately discuss in their radio.</p>
<p>To do that, you create two 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 instances in your scene but with different room names. Depending
on the room you would have different event handlers to handle 2D voice chat or 3D voice chat.</p>
<h2 id="next-steps">Next steps</h2>
<p>You should now have a basic understanding of how to use the high-level API of the ODIN Unity SDK. You can now start
implementing your own voice chat solution in your game or application. Check out the scripting API for more information
on the actual functionality.</p>
<p><a href='/odin/sdk/unity/2.0.0/classes/room/' class="btn btn-primary">Switch to scripting</a></p>
`}),e.add({id:3,href:"https://www.4players.io/odin/sdk/unity/1.1.0/manual/odinbanner/",title:"Odin Banner",section:"ODIN Documentation",description:"A simple editor component that display a nice image in the Unity inspector",content:`<p><a href='/odin/sdk/unity/1.1.0/classes/odinbanner/' class="btn btn-primary">Switch to scripting</a></p>
<p>This is a simple, non-functional but cool looking editor component that shows a 4Players ODIN Banner in the inspector.</p>
<p>It also shows two buttons that allow you to quickly get to the Admin Panel and this developer documentation.</p>
`}),e.add({id:4,href:"https://www.4players.io/odin/sdk/unity/1.6.6/manual/odinbanner/",title:"Odin Banner",section:"ODIN Documentation",description:"A simple editor component that display a nice image in the Unity inspector",content:`<p><a href='/odin/sdk/unity/1.6.6/classes/odinbanner/' class="btn btn-primary">Switch to scripting</a></p>
<p>This is a simple, non-functional but cool looking editor component that shows a 4Players ODIN Banner in the inspector.</p>
<p>It also shows two buttons that allow you to quickly get to the Admin Panel and this developer documentation.</p>
`}),e.add({id:5,href:"https://www.4players.io/odin/sdk/unity/manual/odinbanner/",title:"Odin Banner",section:"ODIN Documentation",description:"A simple editor component that display a nice image in the Unity inspector",content:`<p><a href='/odin/sdk/unity/classes/odinbanner/' class="btn btn-primary">Switch to scripting</a></p>
<p>This is a simple, non-functional but cool looking editor component that shows a 4Players ODIN Banner in the inspector.</p>
<p>It also shows two buttons that allow you to quickly get to the Admin Panel and this developer documentation.</p>
`}),e.add({id:6,href:"https://www.4players.io/odin/sdk/unreal/manual/",title:"Unreal Engine Plugin Manual",section:"ODIN Documentation",description:"Manual describing the Unreal Engine Plugin",content:`<p>The Unreal Engine plugin comes with full blueprint support to make it as easy as possible to use ODIN in your game.
Please make sure to have a basic understanding of how <a href="/odin/introduction/">ODIN works</a> as this
helps a lot understanding the next steps.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This manual highlights the key steps to take to get started with ODIN. For a more detailed implementation please
refer to our Unreal Sample project. Select the blueprints in the Unreal Sample Project, Copy them and Paste them in
your own project to get started quickly!</p>
</div>
</div>



<a href='https://github.com/4Players/odin-example-unreal' target='' class="btn btn-primary">Download Unreal Sample Project</a>



<h2 id="basic-process">Basic Process</h2>
<p>If you have read the introduction you have learned that every user connected to the same ODIN room (given by a
string of your choice) will be able to exchange data and voice. An ODIN room is automatically created by the ODIN
server when the first user joins and is automatically removed once the last user leaves.</p>
<p>To join a room an access token needs to be created. An access token gives access to an ODIN room and can be created
within the client. For testing and development purposes that&rsquo;s fine. In production you should create an access token
on server side. We&rsquo;ll provide various packages for JavaScript (npm) or PHP (Composer) to create access tokens and we
also have a <a href="/odin/examples/token-server/">complete server</a> ready to go that you can deploy as a cloud
function to AWS or Google Cloud.</p>
<p>After the room has been joined, data can be exchanged, i.e. text chat messages or other real-time data. If your user
should be able to talk to others, a microphone stream (a so called media) has to be added to the room. Now, every
user can talk to every other user in that room. More advanced techniques include 3D audio that allows you to update
your position every couple of seconds to the server which then makes sure, that only users nearby hear your voice to
reduce traffic bandwidth and CPU usage. But more on that later.</p>
<p>So, to summarize, the basic process is:</p>
<ul>
<li>Get an access key</li>
<li>Create an access token with the access key for a specific room id (just a string identifying the room)</li>
<li>Join the room with the access token</li>
<li>Add a media stream to connect the microphone to the room</li>
</ul>
<h2 id="implementing-with-blueprint">Implementing with Blueprint</h2>
<p>Let&rsquo;s get started adding ODIN to an existing (or new) Unreal Engine Project. You&rsquo;ll find all Blueprint nodes in the
root folder <code>Odin</code>.</p>
<p>This is the full blueprint that we are about to create:</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_sample_complete.jpg"
         alt="The blueprint that we&amp;rsquo;ll create"/><figcaption>
            <p>The blueprint that we&rsquo;ll create</p>
        </figcaption>

    
    
</figure>

<p>You can create the blueprint anywhere in your project - but it makes most sense on your Default Player Character Class - since this is where your Odin Synth Components will live. Just make sure that you have it in a class that exists on each client (for example the Game Mode only exists on the server and therefore is not eligible for this logic).</p>
<h3 id="creating-an-access-key">Creating an access key</h3>
<p>First, you need to create an access key. As the access key is used to authenticate your requests to the server and also
includes information about your tier, e.g. how many users are able to join the same room and a few other settings.
You can create a free access key for up to 25 users right here. If you need more or want to go into production, you
need to sign up with one of our tiers. See <a href="/products/voice-chat/#pricing">pricing</a> for more
information.</p>
<p>More information about access keys can be found in our <a href="/odin/introduction/access-keys/">Understanding Access Keys guide</a>.</p>
<p>For now, you can use this widget to create a demo access key suitable for up to 25 concurrent users:</p>
<p><odin-access-key></odin-access-key></p>
<p>Press the <code>Create Access Key</code> button and write the access key down somewhere. We&rsquo;ll need this access key a bit later
down the road.</p>
<h3 id="creating-an-access-token">Creating an access token</h3>
<p>Add a <span class="external-reference">Generate Room Token <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/"><i class="fas fa-external-link-alt"></i></a></span>
 node to your Blueprint Canvas. Now, drag out from the left <code>Target</code> and
choose <span class="external-reference">Construct a Token Generator <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-a-token-generator/"><i class="fas fa-external-link-alt"></i></a></span>
 from the list. This will add the node to your canvas and connect
both. <strong>Please note</strong>: In production you would load the token from your cloud function (see above) but for now we just
generate a random access token directly in the game.</p>
<p>Now, drag out from &ldquo;Room Id&rdquo; and choose <code>Promote to Variable</code> to create a variable for the name of the Room. You&rsquo;ll
need to compile your Blueprint and then enter <code>Lobby</code> as the default value for the room name or anything else that
makes sense to you.</p>
<p>Next, drag out from <code>Access Key</code> of your <span class="external-reference">Construct a Token Generator <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-a-token-generator/"><i class="fas fa-external-link-alt"></i></a></span>
  node and choose <code>Promote to  Variable</code>. This variable will hold our access key. Compile again and set the default value to the access key you created
above.</p>
<p>Last but not least create an <code>Event Begin Play</code> node and connect it to the <span class="external-reference">Generate Room Token <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/"><i class="fas fa-external-link-alt"></i></a></span>
 node. In
most use cases you might not want players to be able to talk to everyone else right from the start. Choose another event
in this case. But for testing purposes this should be fine.</p>
<p>Your blueprint should look like this now.</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_create_access_token.jpg"
         alt="Creating an Access Token"/><figcaption>
            <p>Creating an Access Token</p>
        </figcaption>

    
    
</figure>

<h3 id="configure-the-room-access">Configure the room access</h3>
<p>ODIN supports various settings when joining a room (APM settings). Here you can set features like &ldquo;Voice Activity
Detection&rdquo; and many other features.</p>
<p>Create a new <span class="external-reference">Construct local room handle <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/"><i class="fas fa-external-link-alt"></i></a></span>
 node and drag out from <code>Initial APM Settings</code>. Choose <span class="external-reference">Make Odin APM Settings <a href="/odin/sdk/unreal/blueprint-reference/functions/make-odin-apm-settings/"><i class="fas fa-external-link-alt"></i></a></span>
 from the list. This will add the node to your canvas and connect both.</p>
<p>You can play around with APM settings to work out good values for your type of game.</p>
<p>It should look like this:</p>
<figure class="blueprint " style="width: 600px"><a href="/images/odin/unreal/bp_create_room.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_create_room.jpg"
         alt="Preparing a room" width="600"/></a><figcaption>
            <p>Preparing a room</p>
        </figcaption>

    
    
</figure>





<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The best way to get a clean blueprint is to set the output of the <span class="external-reference">Construct local room handle <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/"><i class="fas fa-external-link-alt"></i></a></span>
node to a
variable. Everywhere in the Blueprint you can now access the Room with a <code>Get Room</code> node.</p>
</div>
</div>

<h3 id="event-flow">Event Flow</h3>
<p>Once you are connected to the ODIN server, a couple of events will be fired that allow you to setup your scene and
connecting audio output to your player objects in the scene.</p>
<p>Have a look at this application flow of a very basic lobby application. Events that you need to implement are
highlighted in red.</p>

<table class="features">
    <tr>
    <td class="index"><span class="index">1</span></td>
    <td class="name">Join Room</td>
    <td><p>The user navigates to the multiplayer lobby. Here, all players currently playing the game are connected to the same
ODIN room so that they can figure out what to play. The application uses <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>
to join the room.
<strong>Please note:</strong> The server automatically creates the room if it does not exist. There is no need for bookkeeping on
your side.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">2</span></td>
    <td class="name">Room Joined</td>
    <td><p>The <span class="external-reference">On Room Joined <a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined/"><i class="fas fa-external-link-alt"></i></a></span>
event is triggered that allows you to handle logic on the joining client before the user actually
joins the room. <strong>Please note</strong>: After that <code>Room Joined</code> event you&rsquo;ll receive <code>PeerJoined</code> and
<code>MediaAdded</code> events for each user that is already connected to the room. So you can use the same code/blueprint
for users that are already connected or will later connect to the room.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">3</span></td>
    <td class="name">Peer Joined</td>
    <td><p><strong>For each user</strong> connected to the same ODIN room you&rsquo;ll receive an <span class="external-reference">On Peer Joined <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-joined/"><i class="fas fa-external-link-alt"></i></a></span>
event that allows
you to handle logic once a peer joined the room. This event contains user data that they sent when they have joined the room and is typically used to relfect any meta data of the user in your client application.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index important">4</span></td>
    <td class="name">Media Added</td>
    <td><p><strong>For each user</strong> connected to the same ODIN room which has a microphone stream enabled (some of them might only be
spectators just listening) an <span class="external-reference">On Media Added <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/"><i class="fas fa-external-link-alt"></i></a></span>
event is triggered. <strong>This event needs to be handled by
your application</strong>. In this callback, you need to assign the media object via the
<span class="external-reference">Odin Assign Synth to Media <a href="/odin/sdk/unreal/blueprint-reference/functions/odin-assign-synth-to-media/"><i class="fas fa-external-link-alt"></i></a></span>
function to an <code>Odin Synth Component</code>.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index important">6</span></td>
    <td class="name">Media Removed</td>
    <td><p>Whenever a user disconnects from the room, or closes their microhone stream an <span class="external-reference">On Media Removed <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-removed/"><i class="fas fa-external-link-alt"></i></a></span>
event
is triggered. <strong>You are responsible for cleaning up the synth components that you have
created earlier in the <code>Media Added</code> callback function using the <code>Remove Media</code>
function.</strong></p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">7</span></td>
    <td class="name">Peer Left</td>
    <td><p>Whenever a user disconnects a room, this event is triggered. For example, you can show a push notification that a
player has left the room. More info here: <span class="external-reference">On Peer Left <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-left/"><i class="fas fa-external-link-alt"></i></a></span>
. <strong>Important notice:</strong>. Whenever a peer leaves
a room, the media gets removed as well. So, aligned with this event, for each media of this peer, an
<span class="external-reference">On Media Removed <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-removed/"><i class="fas fa-external-link-alt"></i></a></span>
event will be triggered as well.</p>
</td>
</tr>

</table>

<h3 id="adding-a-peer-joined-event">Adding a Peer Joined Event</h3>
<p>To create event handling, create a new delegate <span class="external-reference">Bind to On Peer Joined <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined/"><i class="fas fa-external-link-alt"></i></a></span>
 node.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Unreal does not list the <code>Bind to On Peer Joined</code> option without dragging off of an <code>Odin Room</code> variable. If you want to have that option shown in any case, disable the <code>Context Sensitive</code> checkbox on the top right corner. Then you should find the event in the
<code>Odin/Events</code> folder.</p>
</div>
</div>

<p>You&rsquo;ll need to connect the <code>Room</code> object reference that you created earlier with the <span class="external-reference">Construct local room handle <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/"><i class="fas fa-external-link-alt"></i></a></span>

node. This way, you can easily handle events differently for different rooms you connect. You can even connect
multiple rooms at the same time, but handle them differently in your code.</p>
<p>Now, that you have created that node, drag out from the <code>Events</code> slot until you see a red line. Next, release the
mouse cursor and Unreal will automatically create the correct event node which will handle this event.</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_on_peer_joined_example.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_on_peer_joined_example.jpg"
         alt="The wired up peer joined event handler" width="600"/></a><figcaption>
            <p>The wired up peer joined event handler</p>
        </figcaption>
</figure>

<p>Don&rsquo;t forget to connect the <code>Exec</code> slot with the process flow of your application. <strong>You should always setup event
handling before joining a room</strong>.</p>
<h3 id="the-on-media-added-event">The On Media Added Event</h3>
<p>The <span class="external-reference">On Media Added <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/"><i class="fas fa-external-link-alt"></i></a></span>
 event is triggered whenever a user connected to the room activates their
microphone, or directly after joining a room you&rsquo;ll get these events for all active users in that room.</p>
<p>You&rsquo;ll get a <code>Media</code> object that represents the microphone input for the peer (i.e. connected user) that this media
belongs to. The <code>Media</code> object is a real-time representation which is basically just a number of floats that
represent the users voice. A node needs to be created that translates that into audio output. This is the <code>Odin  Synth Component</code>. You use the <span class="external-reference">Odin Assign Synth to Media <a href="/odin/sdk/unreal/blueprint-reference/functions/odin-assign-synth-to-media/"><i class="fas fa-external-link-alt"></i></a></span>
 node that will connect both and actually
activates the audio.</p>
<p>The easiest way is to add the <code>Odin Synth Component</code> to your player asset and place it somewhere near the head. Then,
in your blueprint you can use the <code>Get Component By Class</code> node to get the <code>Odin Synth Component</code> from the player
actor.</p>
<p>Instead of adding the <code>Odin Synth Component</code> to your player asset, you can also use the
<span class="external-reference">Add Odin Synth Component <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/"><i class="fas fa-external-link-alt"></i></a></span>
 to create the component and attach it to the player actor at runtime.</p>
<p>After wiring everything together, it should look something like that:</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_event_setup.jpg"
         alt="Handling On Media Added events"/><figcaption>
            <p>Handling On Media Added events</p>
        </figcaption>

    
    
</figure>

<p>That&rsquo;s it. Now, every user connected to the same room will be heard with full volume where the local player is located.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In a real 3D shooter with 3D audio you would not choose the local player, but map the Odin Peer Id with your Unreal
Player Id and then assign the Media to the corresponding player character. This way, Unreal will automatically
process the audio in its audio engine and apply attenuation, e.g. dampen the volume the farther away the player is from the listener.</p>
</div>
</div>

<h3 id="joining-a-room">Joining a room</h3>
<p>Now, we have everything in place to join a room: We have created an access token with the room id &ldquo;Lobby&rdquo; and have
configured room settings for our client. Now let&rsquo;s connect them to join a room.</p>
<p>Add a <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>
 node to your Blueprint Canvas.</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_join_room.jpg"
         alt="Joining a room"/><figcaption>
            <p>Joining a room</p>
        </figcaption>

    
    
</figure>

<p>Connect the <code>Return Value</code> from <span class="external-reference">Construct local room handle <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/"><i class="fas fa-external-link-alt"></i></a></span>
 with the <code>Room</code> input of the <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>

node. Next, connect the <code>Return Value</code> of your <span class="external-reference">Generate Room Token <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/"><i class="fas fa-external-link-alt"></i></a></span>
 node to the <code>Token</code> input of the
<span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>
 node. Next, we need to configure our gateway: Drag out from <code>URL</code> of the <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>

node and choose <code>Promote to Variable</code>. This variable will hold the gateway. Compile the Blueprint and set
<code>https://gateway.odin.4players.io</code> as the default value. This is our public gateway. You can also launch your own gateway
for maximum privacy, but to get started, our public one is a good option.</p>
<p>As shown in the image above, you can also drag out event handling to get notifications if something went wrong. We
just added simple output to the Log to see what happens.</p>
<p>Last but not least, you need to connect the <span class="external-reference">Generate Room Token <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/"><i class="fas fa-external-link-alt"></i></a></span>
 process flow output to the input of
your <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>
 node.</p>
<h3 id="adding-a-media-stream">Adding a media stream</h3>
<p>Now that we have joined a room, we need to add our microphone (at least if users should be able to talk) to the room
so everyone else in the room hears what we are saying. To do that, we create a <code>Create Audio Capture</code> node and connect
it with a new media constructed with <span class="external-reference">Construct Local Media <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/construct-local-media/"><i class="fas fa-external-link-alt"></i></a></span>
. Then we connect both with an
<span class="external-reference">Add Media To Room <a href="/odin/sdk/unreal/blueprint-reference/room/add-media-to-room/"><i class="fas fa-external-link-alt"></i></a></span>
 node as shown in the image below. Since you need to start capturing from the audio
device, we save the <code>Audio Capture</code> object in a variable and use that later to activate the microphone. By stopping the
audio capture you can implement mute very easily later or something like push to talk.</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_add_media_for%20capturing_audio.png"
         alt="Adding a microphone"/><figcaption>
            <p>Adding a microphone</p>
        </figcaption>

    
    
</figure>

<p>You can create event handling for errors as shown before. The process is basically always the same. Odin delivers an
error code, and you can use the <span class="external-reference">Format Error <a href="/odin/sdk/unreal/blueprint-reference/functions/format-error/"><i class="fas fa-external-link-alt"></i></a></span>
 node to create an error message that you can place in a log or
somewhere else.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you don&rsquo;t find the <code>Create Audio Capture</code> and <code>Start Audio Capture</code>node, please make sure you have the <code>Audio  Capture</code> Plugin enabled which is part of the default Unreal installation. See <a href="/odin/faq/unreal/">FAQ</a>
for a more detailed description on how to resolve that issue.</p>
</div>
</div>





<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure to only execute the <code>Start Audio Capture</code> node after successfully constructing audio capture with <code>Create Audio Capture</code>, constructing the media with <code>Create Media</code>, and finally adding it to the room with <code>Add Media to Room</code>.</p>
</div>
</div>

<h2 id="testing-with-odin-client">Testing with ODIN client</h2>
<p>As ODIN is working cross platform, you can use our <a href="/products/odin/">ODIN client app</a> to connect
users to your Unreal based game. There are numerous use cases where this is a great option (see <a href="/odin/introduction/concepts/">Use Cases Guide</a>) but its also great for development.</p>
<p>Fire up your browser and load our ODIN client: <a href="https://app.odin.4players.io/">https://app.odin.4players.io/</a>. We
need to configure that client to use the same access key that we use within Unreal. Click on the <code>Gear</code> icon next to
the <code>Connect</code> button. You should see something like this:</p>
<figure style="max-width: 300px"><a href="/images/odin/unreal/test_odin_client.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/test_odin_client.jpg"
         alt="Testing with ODIN client" width="300"/></a><figcaption>
            <p>Testing with ODIN client</p>
        </figcaption>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you don&rsquo;t see the <code>Your Access Key</code> option at the end of the dialog, you need to scroll down a bit.</p>
</div>
</div>

<p>Enter your access key that you have created earlier and that you have set in the <code>Access Key</code> variable exposed in
the Blueprint and click on <code>Save</code>. Now, the ODIN client will use the same access key as your Unreal based game,
connecting both platforms together.</p>
<p>In the connection dialog, set the same room name as you did in Unreal (i.e. <code>Lobby</code>), make sure the same gateway is
set as in Unreal (i.e. <code>https://gateway.odin.4players.io</code>) and enter a name. Then click on <code>Connect</code>.</p>
<figure style="max-width: 300px"><a href="/images/odin/unreal/test_odin_connect.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/test_odin_connect.jpg"
         alt="Connecting the room with ODIN client" width="300"/></a><figcaption>
            <p>Connecting the room with ODIN client</p>
        </figcaption>
</figure>
<p>You should see something like this:</p>
<figure style="max-width: 500px"><a href="/images/odin/unreal/test_odin_in_client.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/test_odin_in_client.jpg"
         alt="ODIN Client" width="500"/></a><figcaption>
            <p>ODIN Client</p>
        </figcaption>
</figure>
<p>Now, get back to Unreal and press Play in the editor. Unreal will fire up your game and will join the same room as
you have in your browser. You should here a nice sound indicating that another user has joined the room. Navigate to
your browse, and now you should see another entry in the users list: &ldquo;Unknown&rdquo;. If you talk, you should here
yourself.</p>
<p>Ask a colleague or fried to setup the ODIN client with your access key and the same room and you&rsquo;ll be able to chat
together, one inside your game and the other one in their browser. This is a great way of quickly testing if
everything works fine and we do that internally at 4Players very often.</p>
<h2 id="enabling-3d-audio">Enabling 3D Audio</h2>
<p>So far we have enabled the voice chat in your application, but most likely you want to use the 3D Audio Engine of Unreal. This for itself might be a trivial step since you can simply assign proper Attenuation Settings to your Odin Synth Component. But you also need to consider another problem: the positioning of the Odin Synth Components in your scene.</p>
<p>The simplest solution is to attach the Odin Synth Components to the Pawns representing the respective players, but you somehow need to keep track which Odin Peer is associated with which player - so let&rsquo;s have a look at how to do that.</p>
<p>The implementation in detail depends on your networking and replication system of course, but most of the time you will want to use the native Unreal Engine Networking, so we will assume that you use that. If you use another system you will need to adjust the steps accordingly.</p>
<h3 id="propagating-an-identifier">Propagating an Identifier</h3>
<p>In order to assign the correct Odin Synth Component to the according Player Controlled Character we will need to do keep track of a unique identifier for each player, their actors and their Odin Peer Ids.</p>
<p>If you have not done that earlier, now is the time to move the logic to your Player Character blueprint or at least a component living there. For this sample we will assume you have created the Odin logic directly on the Player Character class.</p>
<p>With this out of the way we can start. First we need to propagate an identifier of the player for your game session. You can use GUIDs, or your Unique Player Identifiers that you already have due to a login process or something similar. You can set the ID in any event that is called during startup, a good entry point is the <code>Event Possessed</code>of the Character Class - here you can simply check if you are running on the Server and then you set a variable that is replicated across all Clients.</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_set_player_id.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_set_player_id.jpg"
         alt="The wired up possessed event" width="600"/></a><figcaption>
            <p>The wired up possessed event</p>
        </figcaption>
</figure>

<p>With this done you can continue and use that variable to identify a player on the join call to the Odin room - so from here we can call that routine we already have created earlier in this tutorial.</p>
<p>The variable <code>Player Id</code>&rsquo;s replication mode is set to <code>RepNotify</code>. So when the variable is set we can add some extra logic to each of the clients receiving the replication notification. Find the <code>OnRepPlayerId</code>function in your character blueprint and here we will add some additional logic.</p>
<p>To your Default Game Instance blueprint add a variable named <code>PlayerCharacters</code> and first make it a <code>GUID</code>type - then in its details click the icon (looking somewhat like a pill) next to the variable type and select <code>Map</code> from the drop down menu. Now you can change the second type of the variable to your Default Player Character class. This map will help us keep track of the actors and is able to return an actor when we have an identifier - we will need that later, when we want to add Odin Synth Components to the correct Player Character objects.</p>
<p>So in the <code>OnRepPlayerId</code> function we will now add a new Key Value pair to that new map on the Game Instance - in order to do that we will need to cast the game&rsquo;s Game Instance accordingly and then add a new element to the <code>Player Characters</code> map. You can see the finished function in the image some paragraphs below.</p>
<h3 id="joining-a-room-with-the-identifier">Joining a Room with the Identifier</h3>
<p>To make sure that we already have the identifier on the owning client while joining the Odin room we can call the custom event <code>Join Odin Room</code>from the <code>OnRepPlayerId</code>function as well. If we do this on the <code>Possessed</code> event of the character, we cannot guarantee that the local player id was already set.</p>
<p>This Event will now be connected to our routine that creates an access token and connects to an Odin Room - earlier it was connected to the <code>Begin Play</code>event of our local player. So in the <code>OnRepPlayerId</code> we will just check if we are on the locally controlling client and then we will call a new custom event.</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_on_rep_player_id.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_on_rep_player_id.jpg"
         alt="The finished OnRepPlayerId function" width="600"/></a><figcaption>
            <p>The finished OnRepPlayerId function</p>
        </figcaption>
</figure>

<p>The new <code>Join Odin Room</code> event is now connected to our nodes that generate an access token.</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_join_odin_room_custom_event.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_join_odin_room_custom_event.jpg"
         alt="The start of the Join Odin Room custom event" width="600"/></a><figcaption>
            <p>The start of the Join Odin Room custom event</p>
        </figcaption>
</figure>

<p>Next we need to pass the identifier to the <code>Join Room</code>call as custom user data so that all other Odin clients can associate that identifier with our Odin id. You can use the methods to create a User Data Byte Array for that. First call <code>Construct Json Object</code> and then <code>Set String Field</code> on it and write the GUID to it as a string. Now you can <code>Encode As Bytes</code>the json object and send it with the join room call.</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_join_odin_room_user_data.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_join_odin_room_user_data.jpg"
          alt="The wired up join odin room call" width="600"/></a><figcaption>
             <p>The wired up join odin room call</p>
         </figcaption>
 </figure>

<h3 id="handling-the-peer-joined-event-with-an-identifier">Handling the Peer Joined Event with an Identifier</h3>
<p>Now each other client will receive an event once a player has joined the Odin Room. Here we can extract the given player identifier from the user data. The next problem we will handle here is that once we get the <code>Odin Media</code> object we do not get the user data in the same event, so we need to also map the <code>Odin Peer Id</code> to our Player Characters. To do that now add another map to the Game Instance and this time make it an Integer64 and Player Character map. Now you can find the correct player character and add it to the new map using the passed <code>Peer Id</code>. This is what the finished function will look like:</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_on_peer_joined_with_identifier.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_on_peer_joined_with_identifier.jpg"
         alt="The wired up join odin room call" width="600"/></a><figcaption>
            <p>The wired up join odin room call</p>
        </figcaption>
</figure>

<h3 id="handling-the-media-added-event-with-an-identifier">Handling the Media Added Event with an Identifier</h3>
<p>Now we can finally add the Odin Synth Component to the correct player character. Find your event or function that handles the <code>Media Added</code> event and now instead of simply adding an <code>Odin Synth Component</code> to the local player character we can now actually find the correct character and attach the synth component there.</p>
<p>Use the passed <code>Peer Id</code> to get the correct player character from the <code>Game Instance</code>&rsquo;s <code>Odin Player Character</code> map and assign the Odin Synth Component there now:</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_on_media_added_with_identifier.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_on_media_added_with_identifier.jpg"
         alt="The wired up join odin room call" width="600"/></a><figcaption>
            <p>The wired up join odin room call</p>
        </figcaption>
</figure>

<h3 id="conclusion">Conclusion</h3>
<p>This is all you need to do for now to add the Odin Synth Components to the correct player characters. Now you can change the attenuation settings to whatever you need for your voice chat to work in your 3D world - from what we have now it is the most straight forward to simply drag off of the <code>Create Odin Synth Component</code> node and call the <code>Set Attenuation Settings</code> node and assign it a new <code>Attenuation Settings</code> asset that you can create in the Content Browser like any other asset before.</p>
<p>Odin is agnostic of the audio engine, so you can really just use any engine you like, be it the native Unreal Audio Engine, or a 3rd Party Engine, like Steam Audio, Microsoft Audio, FMOD and so on. It is all possible simply by changing the project settings and the attenuation settings of the Odin Synth Component accordingly.</p>
`}),e.add({id:8,href:"https://www.4players.io/odin/ai-training/unity/sdk-reference/",title:"ODIN Unity SDK Reference",section:"ODIN Documentation",description:"A complete reference of all the ODIN types available in the Unity SDK with deep links to the documentation.",content:`<p>This document provides links to all the ODIN types available in the Unity SDK.</p>
<h2 id="classes">Classes</h2>
<h3 id="odinhandlerhttpswww4playersioodinsdkunityclassesodinhandler-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler">OdinHandler</a> Class</h3>
<h4 id="definition">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler">https://www.4players.io/odin/sdk/unity/classes/odinhandler</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinHandler : MonoBehaviour
</code></pre>
<p>The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes.</p>
<h4 id="properties">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/config">public static OdinEditorConfig Config { get; }</a></td>
<td>Static reference to the global Unity</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/instance">public static OdinHandler Instance { get; }</a></td>
<td>Singleton reference to this OdinHandler</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/hasconnections">public bool HasConnections { get; }</a></td>
<td>True if any Room is joined</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/microphone">public MicrophoneReader Microphone</a></td>
<td>Unity Component that handles one Microphone where data gets routed through (n) Media</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/rooms">public RoomCollection Rooms { get; }</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomjoin">public RoomJoinProxy OnRoomJoin</a></td>
<td>Called before an actual room join</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomjoined">public RoomJoinedProxy OnRoomJoined</a></td>
<td>Called after a room is joined successfully</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomleave">public RoomLeaveProxy OnRoomLeave</a></td>
<td>Called before a room leave</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomleft">public RoomLeftProxy OnRoomLeft</a></td>
<td>Called after a room is destroyed</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onpeerjoined">public PeerJoinedProxy OnPeerJoined</a></td>
<td>Called on every Peer that joins the room(s) we're connected to</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged">public PeerUserDataChangedProxy OnPeerUserDataChanged</a></td>
<td>Called on every Peer that updates his UserData in the same room(s)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onpeerleft">public PeerLeftProxy OnPeerLeft</a></td>
<td>Called on every Peer that left in the same room(s)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmediaadded">public MediaAddedProxy OnMediaAdded</a></td>
<td>Called on every Peer that created a media in the same room(s)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmediaremoved">public MediaRemovedProxy OnMediaRemoved</a></td>
<td>Called on every Peer that closed/destroyed one of his own media in the same room(s)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmediaactivestatechanged">public MediaActiveStateChangedProxy OnMediaActiveStateChanged</a></td>
<td>Called on every activity change of a media in the same room(s)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomuserdatachanged">public RoomUserDataChangedProxy OnRoomUserDataChanged</a></td>
<td>Called on the Room that updates his UserData. Changing a Room's UserData is only possible via request to Odin server API, but not supported inside the client SDK.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmessagereceived">public MessageReceivedProxy OnMessageReceived</a></td>
<td>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/onconnectionstatechanged">public ConnectionStateChangedProxy OnConnectionStateChanged</a></td>
<td>Called on the Room that changed the connection state</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject">public UnityCreatedMediaObject OnCreatedMediaObject</a></td>
<td>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/ondeletemediaobject">public UnityDeleteMediaObject OnDeleteMediaObject</a></td>
<td>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/unityaudiosourcetag">public readonly string UnityAudioSourceTag</a></td>
<td>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/use3daudio">public bool Use3DAudio</a></td>
<td>Enable 3D Audio via preset Odin</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/createplayback">public bool CreatePlayback</a></td>
<td>Creates Room_OnMediaAdded(System events</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/playbackaudiomixer">public AudioMixer PlaybackAudioMixer</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/playbackaudiomixergroup">public AudioMixerGroup PlaybackAudioMixerGroup</a></td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="methods">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getuserdata">public IUserData GetUserData()</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/joinroom">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/joinroom">public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/leaveroom">public async void LeaveRoom(string roomName)</a></td>
<td>Leave and free the Room by name</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/addplaybackcomponent">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/addplaybackcomponent">public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getorcreatemicrophonestream">public MicrophoneStream GetOrCreateMicrophoneStream(string roomName, OdinMediaConfig config = null)</a></td>
<td>Returns the attached Audio</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/roomssetpositionscale">public void RoomsSetPositionScale(float scale)</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in each room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/roomsupdateposition">public void RoomsUpdatePosition(float x, float y)</a></td>
<td>Updates the two-dimensional position of our own peer in each room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/updateuserdata">public void UpdateUserData(IUserData userData)</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getroom">public Room GetRoom(string id)</a></td>
<td>Gets the room object from Odin</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getpeer">public Peer GetPeer(string roomId, ulong peerId)</a></td>
<td>Gets the a Peer object from a specified room matching a peer ID</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getmedia">public PlaybackStream GetMedia(string roomId, long mediaStreamId)</a></td>
<td>Get the PlaybackStream of a peer in the room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getpeers">public IEnumerable&lt;Peer&gt; GetPeers(string roomId, bool includeSelf = false)</a></td>
<td>Get all remote peers inside a room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/broadcastmessage">public void BroadcastMessage(byte[] data)</a></td>
<td>Sends arbitrary data to a all remote peers in all rooms</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponents">public PlaybackComponent[] GetPlaybackComponents()</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponents">public PlaybackComponent[] GetPlaybackComponents(string roomId)</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponents">public PlaybackComponent[] GetPlaybackComponents(ulong peerId)</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponents">public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponent">public PlaybackComponent GetPlaybackComponent(string roomId, ulong peerId, long mediaStreamId)</a></td>
<td>Gets a Audio</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents">public void DestroyPlaybackComponents()</a></td>
<td>Destroys all Audio instances</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents">public void DestroyPlaybackComponents(string roomId)</a></td>
<td>Destroys all Audio instances</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents">public void DestroyPlaybackComponents(ulong peerId)</a></td>
<td>Destroys all Audio instances</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents">public void DestroyPlaybackComponents(long mediaStreamId)</a></td>
<td>Destroys all Audio instances</td>
</tr>
</tbody>
</table>
<h3 id="nativebindingshttpswww4playersioodinsdkunityclassesnativebindings-class"><a href="https://www.4players.io/odin/sdk/unity/classes/nativebindings">NativeBindings</a> Class</h3>
<h4 id="definition-1">Definition</h4>
<dl>
<dt>Name</dt>
<dd>NativeBindings</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/nativebindings">https://www.4players.io/odin/sdk/unity/classes/nativebindings</a></dd>
</dl>
<pre><code class="language-csharp">public static class NativeBindings
</code></pre>
<p>C# bindings for the native ODIN runtime</p>
<h4 id="properties-1">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/nativebindings/odinversion">public const string OdinVersion = &quot;1.6.7&quot;</a></td>
<td>ODIN_VERSION</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/nativebindings/blocksamplerate">public const uint BlockSamplerate = 48000U</a></td>
<td>Block_SAMPLE_RATE</td>
</tr>
</tbody>
</table>
<h3 id="odinexceptionhttpswww4playersioodinsdkunityclassesodinexception-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinexception">OdinException</a> Class</h3>
<h4 id="definition-2">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinException</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinexception">https://www.4players.io/odin/sdk/unity/classes/odinexception</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinException : Exception, ISerializable, _Exception
</code></pre>
<p>Exception type for the native ODIN runtime</p>
<h4 id="properties-2">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinexception/errorcode">public uint ErrorCode</a></td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
<h3 id="odinlibraryhttpswww4playersioodinsdkunityclassesodinlibrary-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary">OdinLibrary</a> Class</h3>
<h4 id="definition-3">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinLibrary</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary">https://www.4players.io/odin/sdk/unity/classes/odinlibrary</a></dd>
</dl>
<pre><code class="language-csharp">public static class OdinLibrary
</code></pre>
<p>Main lib entry class</p>
<h4 id="properties-3">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary/isinitialized">public static bool IsInitialized { get; }</a></td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary/nativebinary">public static string NativeBinary { get; }</a></td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary/platform">public static SupportedPlatform Platform { get; }</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
<h4 id="methods-1">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary/initialize">public static void Initialize()</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary/initialize">public static void Initialize(OdinLibraryParameters parameters)</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibrary/release">public static void Release()</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
<h3 id="odinlibraryparametershttpswww4playersioodinsdkunityclassesodinlibraryparameters-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters">OdinLibraryParameters</a> Class</h3>
<h4 id="definition-4">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinLibraryParameters</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters">https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinLibraryParameters
</code></pre>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h4 id="properties-4">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/possiblenativebinarylocations">public string[] PossibleNativeBinaryLocations { get; set; }</a></td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/platform">public SupportedPlatform Platform { get; set; }</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
<h4 id="methods-2">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/trygetnativebinaryname">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
<h3 id="odinmediaconfighttpswww4playersioodinsdkunityclassesodinmediaconfig-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig">OdinMediaConfig</a> Class</h3>
<h4 id="definition-5">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinMediaConfig</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig">https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinMediaConfig
</code></pre>
<p>ODIN audio stream configuration</p>
<h4 id="properties-5">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/samplerate">public MediaSampleRate SampleRate { get; set; }</a></td>
<td>The number audio samples carried per second in Hz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/channels">public MediaChannels Channels { get; set; }</a></td>
<td>The number of audio channels</td>
</tr>
</tbody>
</table>
<h4 id="methods-3">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/tostring">public override string ToString()</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
<h3 id="odinroomconfighttpswww4playersioodinsdkunityclassesodinroomconfig-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig">OdinRoomConfig</a> Class</h3>
<h4 id="definition-6">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinRoomConfig</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig">https://www.4players.io/odin/sdk/unity/classes/odinroomconfig</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinRoomConfig : IOdinApmConfig
</code></pre>
<p>Audio processing configuration of an ODIN room</p>
<h4 id="properties-6">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetection">public bool VoiceActivityDetection { get; set; }</a></td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetectionattackprobability">public float VoiceActivityDetectionAttackProbability { get; set; }</a></td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetectionreleaseprobability">public float VoiceActivityDetectionReleaseProbability { get; set; }</a></td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/volumegate">public bool VolumeGate { get; set; }</a></td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/volumegateattackloudness">public float VolumeGateAttackLoudness { get; set; }</a></td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/volumegatereleaseloudness">public float VolumeGateReleaseLoudness { get; set; }</a></td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/echocanceller">public bool EchoCanceller { get; set; }</a></td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/highpassfilter">public bool HighPassFilter { get; set; }</a></td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/preamplifier">public bool PreAmplifier { get; set; }</a></td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/noisesuppressionlevel">public OdinNoiseSuppressionLevel NoiseSuppressionLevel { get; set; }</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/transientsuppressor">public bool TransientSuppressor { get; set; }</a></td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/gaincontroller">public bool GainController { get; set; }</a></td>
<td>Enable or disable the gain controller</td>
</tr>
</tbody>
</table>
<h4 id="methods-4">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/getodindefault">public static OdinRoomConfig GetOdinDefault()</a></td>
<td>Creates Apm OdinRoomConfig based on Odin</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/tostring">public override string ToString()</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
<h3 id="utilityhttpswww4playersioodinsdkunityclassesutility-class"><a href="https://www.4players.io/odin/sdk/unity/classes/utility">Utility</a> Class</h3>
<h4 id="definition-7">Definition</h4>
<dl>
<dt>Name</dt>
<dd>Utility</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/utility">https://www.4players.io/odin/sdk/unity/classes/utility</a></dd>
</dl>
<pre><code class="language-csharp">public static class Utility
</code></pre>
<h4 id="properties-7">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/utility/ok">public const uint OK = 0U</a></td>
<td>Representative ErrorCode for Ok.</td>
</tr>
</tbody>
</table>
<h4 id="methods-5">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/utility/ratetosamples">public static int RateToSamples(MediaSampleRate sampleRate = MediaSampleRate.Hz48000, int ms = 20)</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/utility/iserror">public static bool IsError(uint error)</a></td>
<td>Determines if the specified error code identifies an actual error.</td>
</tr>
</tbody>
</table>
<h3 id="mediacollectionhttpswww4playersioodinsdkunityclassesmediacollection-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection">MediaCollection</a> Class</h3>
<h4 id="definition-8">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaCollection</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection">https://www.4players.io/odin/sdk/unity/classes/mediacollection</a></dd>
</dl>
<pre><code class="language-csharp">public class MediaCollection : IReadOnlyCollection&amp;lt;MediaStream&amp;gt;, IEnumerable&amp;lt;MediaStream&amp;gt;, IEnumerable, IEqualityComparer&amp;lt;MediaStream&amp;gt;
</code></pre>
<p>Internal collection of available media streams</p>
<h4 id="properties-8">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/this%5B%5D">public MediaStream this[long key] { get; }</a></td>
<td>Try to get a media stream by ID</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/count">public int Count { get; }</a></td>
<td>Count of streams in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/isreadonly">public bool IsReadOnly { get; }</a></td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h4 id="methods-6">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/add">public bool Add(MediaStream item)</a></td>
<td>Add a stream to the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/clear">public void Clear()</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/contains">public bool Contains(long id)</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/contains">public bool Contains(MediaStream item)</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/copyto">public void CopyTo(MediaStream[] array, int arrayIndex)</a></td>
<td>Copies stream of the collection to an array</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/equals">public bool Equals(MediaStream x, MediaStream y)</a></td>
<td>Determines whether the streams are equal</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/getenumerator">public IEnumerator&lt;MediaStream&gt; GetEnumerator()</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/gethashcode">public int GetHashCode(MediaStream obj)</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/remove">public bool Remove(long id)</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/remove">public bool Remove(MediaStream item)</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediacollection/system.collections.ienumerable.getenumerator.md">IEnumerator IEnumerable.GetEnumerator()</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="mediastreamhttpswww4playersioodinsdkunityclassesmediastream-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream">MediaStream</a> Class</h3>
<h4 id="definition-9">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaStream</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream">https://www.4players.io/odin/sdk/unity/classes/mediastream</a></dd>
</dl>
<pre><code class="language-csharp">public abstract class MediaStream : IDisposable
</code></pre>
<p>Base stream</p>
<h4 id="properties-9">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/id">public long Id { get; }</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/mediaconfig">public OdinMediaConfig MediaConfig { get; }</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/cancellationsource">public CancellationTokenSource CancellationSource { get; }</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/isactive">public bool IsActive { get; }</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/haserrors">public bool HasErrors { get; }</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/isinvalid">public bool IsInvalid { get; }</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h4 id="methods-7">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/getmediaid">public ushort GetMediaId()</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/getpeerid">public ulong GetPeerId()</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdata">public virtual void AudioPushData(float[] buffer, int length)</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdata">public virtual void AudioPushData(float[] buffer)</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdatatask">public virtual Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdataasync">public virtual async void AudioPushDataAsync(float[] buffer)</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreset">public abstract bool AudioReset()</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddata">public virtual uint AudioReadData(float[] buffer)</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddata">public virtual uint AudioReadData(float[] buffer, int length)</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audiostats">public virtual bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddatatask">public virtual Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddataasync">public virtual async Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioresample">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/audioresample">public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/cancel">public bool Cancel()</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/tostring">public override string ToString()</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediastream/dispose">public void Dispose()</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
<h3 id="microphonestreamhttpswww4playersioodinsdkunityclassesmicrophonestream-class"><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream">MicrophoneStream</a> Class</h3>
<h4 id="definition-10">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MicrophoneStream</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream">https://www.4players.io/odin/sdk/unity/classes/microphonestream</a></dd>
</dl>
<pre><code class="language-csharp">public class MicrophoneStream : MediaStream, IDisposable
</code></pre>
<p>Representation of a write only audio stream</p>
<h4 id="properties-10">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/ismuted">public bool IsMuted { get; }</a></td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="methods-8">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/mutestream">public void MuteStream(bool mute)</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/audiopushdata">public override void AudioPushData(float[] buffer, int length)</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/audiostats">public override bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreset">public override bool AudioReset()</a></td>
<td>AudioReset is not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreaddata">public override uint AudioReadData(float[] buffer)</a></td>
<td>AudioReadData is not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreaddatatask">public override Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)</a></td>
<td>AudioReadDataTask is not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreaddataasync">public override Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)</a></td>
<td>AudioReadDataAsync is not supported!</td>
</tr>
</tbody>
</table>
<h3 id="playbackstreamhttpswww4playersioodinsdkunityclassesplaybackstream-class"><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstream">PlaybackStream</a> Class</h3>
<h4 id="definition-11">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PlaybackStream</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstream">https://www.4players.io/odin/sdk/unity/classes/playbackstream</a></dd>
</dl>
<pre><code class="language-csharp">public class PlaybackStream : MediaStream, IDisposable
</code></pre>
<p>Representation of a read only audio stream</p>
<h4 id="methods-9">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstream/audiopushdata">public override void AudioPushData(float[] buffer)</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstream/audiopushdatatask">public override Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstream/audiopushdataasync">public override void AudioPushDataAsync(float[] buffer)</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstream/audioreset">public override bool AudioReset()</a></td>
<td>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</td>
</tr>
</tbody>
</table>
<h3 id="odinclienthttpswww4playersioodinsdkunityclassesodinclient-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient">OdinClient</a> Class</h3>
<h4 id="definition-12">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinClient</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient">https://www.4players.io/odin/sdk/unity/classes/odinclient</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinClient : IDisposable
</code></pre>
<p>Client Wrapper for ODIN ffi OdinLibrary</p>
<h4 id="properties-11">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/rooms">public RoomCollection Rooms { get; }</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/endpoint">public Uri EndPoint { get; }</a></td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/accesskey">public string AccessKey { get; }</a></td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/userdata">public IUserData UserData { get; set; }</a></td>
<td>Client custom UserData</td>
</tr>
</tbody>
</table>
<h4 id="methods-10">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/joinroom">public async Task&lt;Room&gt; JoinRoom(string name, string userId)</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/joinroom">public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/joinroom">public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/joinroom">public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/joinnamedroom">public async Task&lt;Room&gt; JoinNamedRoom(string roomalias, string token, IUserData userData = null, Action&lt;Room&gt; setup = null)</a></td>
<td>Join or create a named Room by token via a gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/updateuserdata">public async void UpdateUserData(IUserData userData)</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/setpositionscale">public async void SetPositionScale(float scale)</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/updateposition">public async void UpdatePosition(float x, float y)</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/leaveroom">public async Task&lt;bool&gt; LeaveRoom(string name)</a></td>
<td>Leave a joined Room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/close">public void Close()</a></td>
<td>Completly closes this Client and all Room associated.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odinclient/dispose">public void Dispose()</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
<h3 id="odindefaultshttpswww4playersioodinsdkunityclassesodindefaults-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults">OdinDefaults</a> Class</h3>
<h4 id="definition-13">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinDefaults</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults">https://www.4players.io/odin/sdk/unity/classes/odindefaults</a></dd>
</dl>
<pre><code class="language-csharp">public static class OdinDefaults
</code></pre>
<p>ODIN default configuration</p>
<h4 id="properties-12">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/verbose">public static bool Verbose</a></td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/debug">public static bool Debug</a></td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/accesskey">public static string AccessKey { get; set; }</a></td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/server">public static string Server { get; set; }</a></td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/userdatatext">public static string UserDataText { get; set; }</a></td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/devicesamplerate">public static MediaSampleRate DeviceSampleRate { get; set; }</a></td>
<td>Microphone default Sample-Rate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/devicechannels">public static MediaChannels DeviceChannels { get; set; }</a></td>
<td>Microphone default Channel</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/remotesamplerate">public static MediaSampleRate RemoteSampleRate { get; set; }</a></td>
<td>Playback default Sample-Rate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/remotechannels">public static MediaChannels RemoteChannels { get; set; }</a></td>
<td>Playback default Channel</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/peerjoinedevent">public static bool PeerJoinedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/peerleftevent">public static bool PeerLeftEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/peerupdatedevent">public static bool PeerUpdatedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/mediaaddedevent">public static bool MediaAddedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/mediaremovedevent">public static bool MediaRemovedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/roomupdatedevent">public static bool RoomUpdatedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/mediaactivestatechangedevent">public static bool MediaActiveStateChangedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/messagereceivedevent">public static bool MessageReceivedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/tokenlifetime">public static ulong TokenLifetime { get; set; }</a></td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/voiceactivitydetection">public static bool VoiceActivityDetection</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/voiceactivitydetectionattackprobability">public static float VoiceActivityDetectionAttackProbability</a></td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/voiceactivitydetectionreleaseprobability">public static float VoiceActivityDetectionReleaseProbability</a></td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/volumegate">public static bool VolumeGate</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/volumegateattackloudness">public static float VolumeGateAttackLoudness</a></td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/volumegatereleaseloudness">public static float VolumeGateReleaseLoudness</a></td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/echocanceller">public static bool EchoCanceller</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/highpassfilter">public static bool HighPassFilter</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/preamplifier">public static bool PreAmplifier</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/noisesuppressionlevel">public static NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/transientsuppressor">public static bool TransientSuppressor</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odindefaults/gaincontroller">public static bool GainController</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
<h3 id="peerhttpswww4playersioodinsdkunityclassespeer-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peer">Peer</a> Class</h3>
<h4 id="definition-14">Definition</h4>
<dl>
<dt>Name</dt>
<dd>Peer</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peer">https://www.4players.io/odin/sdk/unity/classes/peer</a></dd>
</dl>
<pre><code class="language-csharp">public class Peer : IDisposable
</code></pre>
<p>Client/Remote peer</p>
<h4 id="properties-13">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/id">public ulong Id { get; }</a></td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/roomname">public string RoomName { get; }</a></td>
<td>Associated room name of this peer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/userid">public string UserId { get; }</a></td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/userdata">public UserData UserData { get; }</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/medias">public MediaCollection Medias { get; }</a></td>
<td>Associated medias of this peer</td>
</tr>
</tbody>
</table>
<h4 id="methods-11">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/addmedia">public void AddMedia(PlaybackStream stream)</a></td>
<td>Associate a media with the peer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/removemedia">public bool RemoveMedia(long mediaStreamId)</a></td>
<td>Remove a associated media from the peer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/getmediastreamids">public List&lt;long&gt; GetMediaStreamIds()</a></td>
<td>Get a copy of all ids of Media from this peer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/tostring">public override string ToString()</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peer/dispose">public void Dispose()</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
<h3 id="peercollectionhttpswww4playersioodinsdkunityclassespeercollection-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection">PeerCollection</a> Class</h3>
<h4 id="definition-15">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerCollection</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection">https://www.4players.io/odin/sdk/unity/classes/peercollection</a></dd>
</dl>
<pre><code class="language-csharp">public class PeerCollection : IReadOnlyCollection&amp;lt;Peer&amp;gt;, IEnumerable&amp;lt;Peer&amp;gt;, IEnumerable, IEqualityComparer&amp;lt;Peer&amp;gt;
</code></pre>
<p>Intern peer dictionary</p>
<h4 id="properties-14">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/this%5B%5D">public Peer this[ulong key] { get; }</a></td>
<td>Try to get Peer by id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/count">public int Count { get; }</a></td>
<td>Count of peers in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/isreadonly">public bool IsReadOnly { get; }</a></td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h4 id="methods-12">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/add">public bool Add(Peer item)</a></td>
<td>Add a peer to the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/clear">public void Clear()</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/contains">public bool Contains(ulong id)</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/contains">public bool Contains(Peer item)</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/copyto">public void CopyTo(Peer[] array, int arrayIndex)</a></td>
<td>Copies peers of the collection to an array</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/equals">public bool Equals(Peer x, Peer y)</a></td>
<td>Determines whether the peers are equal</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/getenumerator">public IEnumerator&lt;Peer&gt; GetEnumerator()</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/gethashcode">public int GetHashCode(Peer obj)</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/remove">public bool Remove(ulong id)</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/remove">public bool Remove(Peer item)</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peercollection/system.collections.ienumerable.getenumerator.md">IEnumerator IEnumerable.GetEnumerator()</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="connectionstatechangedeventargshttpswww4playersioodinsdkunityclassesconnectionstatechangedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs">ConnectionStateChangedEventArgs</a> Class</h3>
<h4 id="definition-16">Definition</h4>
<dl>
<dt>Name</dt>
<dd>ConnectionStateChangedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs">https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h4 id="properties-15">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/connectionstate">public NativeBindings.OdinRoomConnectionState ConnectionState { get; }</a></td>
<td>Connection state of the ODIN client</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/changereason">public NativeBindings.OdinRoomConnectionStateChangeReason ChangeReason { get; }</a></td>
<td>Reason of connection state</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/retry">public int Retry { get; }</a></td>
<td>Connection retry count</td>
</tr>
</tbody>
</table>
<h3 id="mediaactivestatechangedeventargshttpswww4playersioodinsdkunityclassesmediaactivestatechangedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs">MediaActiveStateChangedEventArgs</a> Class</h3>
<h4 id="definition-17">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaActiveStateChangedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs">https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h4 id="properties-16">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/mediastreamid">public long MediaStreamId { get; }</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/peerid">public ulong PeerId { get; }</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/active">public bool Active { get; }</a></td>
<td>state of the media</td>
</tr>
</tbody>
</table>
<h3 id="mediaaddedeventargshttpswww4playersioodinsdkunityclassesmediaaddedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs">MediaAddedEventArgs</a> Class</h3>
<h4 id="definition-18">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaAddedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs">https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class MediaAddedEventArgs : EventArgs
</code></pre>
<p>Arguments for MediaAdded events in the current room</p>
<h4 id="properties-17">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/peerid">public ulong PeerId { get; }</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/peer">public Peer Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/media">public PlaybackStream Media</a></td>
<td>Media</td>
</tr>
</tbody>
</table>
<h3 id="mediaremovedeventargshttpswww4playersioodinsdkunityclassesmediaremovedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs">MediaRemovedEventArgs</a> Class</h3>
<h4 id="definition-19">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaRemovedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs">https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<p>Arguments for MediaRemoved events in the current room</p>
<h4 id="properties-18">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs/mediastreamid">public long MediaStreamId { get; }</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs/peer">public Peer Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
<h3 id="messagereceivedeventargshttpswww4playersioodinsdkunityclassesmessagereceivedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs">MessageReceivedEventArgs</a> Class</h3>
<h4 id="definition-20">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MessageReceivedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs">https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<p>Arguments for MessageReceived events in the current room</p>
<h4 id="properties-19">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs/peerid">public ulong PeerId { get; }</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs/data">public byte[] Data</a></td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
<h3 id="peerjoinedeventargshttpswww4playersioodinsdkunityclassespeerjoinedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs">PeerJoinedEventArgs</a> Class</h3>
<h4 id="definition-21">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerJoinedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs">https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<p>Arguments for PeerJoined events in the current room</p>
<h4 id="properties-20">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/peerid">public ulong PeerId { get; }</a></td>
<td>peer Id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/userid">public string UserId { get; }</a></td>
<td>user Id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/peer">public Peer Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
<h3 id="peerlefteventargshttpswww4playersioodinsdkunityclassespeerlefteventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peerlefteventargs">PeerLeftEventArgs</a> Class</h3>
<h4 id="definition-22">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerLeftEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peerlefteventargs">https://www.4players.io/odin/sdk/unity/classes/peerlefteventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class PeerLeftEventArgs : EventArgs
</code></pre>
<p>Arguments for PeerLeft events in the current room</p>
<h4 id="properties-21">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peerlefteventargs/peerid">public ulong PeerId { get; }</a></td>
<td>peer id</td>
</tr>
</tbody>
</table>
<h3 id="peeruserdatachangedeventargshttpswww4playersioodinsdkunityclassespeeruserdatachangedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs">PeerUserDataChangedEventArgs</a> Class</h3>
<h4 id="definition-23">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerUserDataChangedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs">https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h4 id="properties-22">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/peerid">public ulong PeerId { get; }</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/peer">public Peer Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/userdata">public UserData UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
<h3 id="roomhttpswww4playersioodinsdkunityclassesroom-class"><a href="https://www.4players.io/odin/sdk/unity/classes/room">Room</a> Class</h3>
<h4 id="definition-24">Definition</h4>
<dl>
<dt>Name</dt>
<dd>Room</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/room">https://www.4players.io/odin/sdk/unity/classes/room</a></dd>
</dl>
<pre><code class="language-csharp">public class Room : IDisposable
</code></pre>
<p>Main Room</p>
<h4 id="properties-23">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/connectionstate">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }</a></td>
<td>ConnectionState of the Room that is set by ODIN</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/connectionretry">public int ConnectionRetry { get; }</a></td>
<td>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/config">public readonly RoomConfig Config</a></td>
<td>Room configuration</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/isjoined">public bool IsJoined { get; }</a></td>
<td>true on successful Join or false</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/self">public Peer Self { get; }</a></td>
<td>Client Peer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/roomuserdata">public UserData RoomUserData { get; }</a></td>
<td>Odin UserData helper for marshal byte arrays on Room level</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/remotepeers">public PeerCollection RemotePeers { get; }</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/playbackmedias">public IEnumerable&lt;MediaCollection&gt; PlaybackMedias { get; }</a></td>
<td>Get all medias of room peers</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/microphonemedia">public MicrophoneStream MicrophoneMedia { get; }</a></td>
<td>Current room microphone data route</td>
</tr>
</tbody>
</table>
<h4 id="methods-13">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/getroomid">public string GetRoomId()</a></td>
<td>Retrieves the room ID (e.g. the name of the room)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/getroomcustomer">public string GetRoomCustomer()</a></td>
<td>Retrieves the identifier of the customer the room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/getroompeerid">public ulong GetRoomPeerId()</a></td>
<td>Retrieves your own peer ID</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/getroomconnectionstats">public OdinConnectionStats GetRoomConnectionStats()</a></td>
<td>Retrieves statistics for the underlying connection of this room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/setapmconfig">public bool SetApmConfig(OdinRoomConfig config)</a></td>
<td>Set rooms new Apm config</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/join">public bool Join(string name, string userId, IUserData userData = null)</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/join">public bool Join(string token)</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/createmicrophonemedia">public bool CreateMicrophoneMedia(OdinMediaConfig config)</a></td>
<td>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/updatepeeruserdata">public bool UpdatePeerUserData(IUserData userData)</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/updatepeeruserdataasync">public async Task&lt;bool&gt; UpdatePeerUserDataAsync(IUserData userData)</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/sendmessage">public bool SendMessage(ulong[] peerIdList, byte[] data)</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/sendmessageasync">public async Task&lt;bool&gt; SendMessageAsync(ulong[] peerIdList, byte[] data)</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/broadcastmessage">public bool BroadcastMessage(byte[] data, bool includeSelf = false)</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/broadcastmessageasync">public async Task&lt;bool&gt; BroadcastMessageAsync(byte[] data, bool includeSelf = false)</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/getremotepeersids">public List&lt;ulong&gt; GetRemotePeersIds(bool includeSelf)</a></td>
<td>Get a copy of all PeerIds in this room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/getremotepeersmediastreamids">public ILookup&lt;ulong, IEnumerable&lt;long&gt;&gt; GetRemotePeersMediaStreamIds()</a></td>
<td>All ids of Media from remote peers in this room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/setpositionscale">public bool SetPositionScale(float scale)</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in the room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/updateposition">public bool UpdatePosition(float x, float y)</a></td>
<td>Updates the two-dimensional position of our own peer in the room</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/audioprocessreverse">public bool AudioProcessReverse(float[] buffer)</a></td>
<td>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/tostring">public override string ToString()</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/leave">public void Leave()</a></td>
<td>Leave a room and free all remote peers and associated medias</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/room/dispose">public void Dispose()</a></td>
<td>On dispose will free the room and token generator</td>
</tr>
</tbody>
</table>
<h3 id="roomcollectionhttpswww4playersioodinsdkunityclassesroomcollection-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection">RoomCollection</a> Class</h3>
<h4 id="definition-25">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomCollection</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection">https://www.4players.io/odin/sdk/unity/classes/roomcollection</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomCollection : IReadOnlyCollection&amp;lt;Room&amp;gt;, IEnumerable&amp;lt;Room&amp;gt;, IEnumerable, IEqualityComparer&amp;lt;Room&amp;gt;
</code></pre>
<p>Intern room dictionary</p>
<h4 id="properties-24">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/this%5B%5D">public Room this[string key] { get; }</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/count">public int Count { get; }</a></td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/isremoveonly">public bool IsRemoveOnly { get; }</a></td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h4 id="methods-14">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/add">public bool Add(Room item)</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/clear">public void Clear()</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/contains">public bool Contains(string key)</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/contains">public bool Contains(Room item)</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/copyto">public void CopyTo(Room[] array, int arrayIndex)</a></td>
<td>Copies rooms of the collection to an array</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/equals">public bool Equals(Room x, Room y)</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/getenumerator">public IEnumerator&lt;Room&gt; GetEnumerator()</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/gethashcode">public int GetHashCode(Room obj)</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/remove">public bool Remove(string key)</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/remove">public bool Remove(Room item)</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/leave">public void Leave(string key)</a></td>
<td>Get the room and leave</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomcollection/system.collections.ienumerable.getenumerator.md">IEnumerator IEnumerable.GetEnumerator()</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="roomconfighttpswww4playersioodinsdkunityclassesroomconfig-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig">RoomConfig</a> Class</h3>
<h4 id="definition-26">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomConfig</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig">https://www.4players.io/odin/sdk/unity/classes/roomconfig</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomConfig
</code></pre>
<p>A set of values that are used when creating Rooms</p>
<h4 id="properties-25">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/accesskey">public string AccessKey</a></td>
<td>Room associated AccessKey</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/tokenlifetime">public ulong TokenLifetime</a></td>
<td>Room associated Token lifetime</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/name">public string Name</a></td>
<td>Room name</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/token">public string Token</a></td>
<td>Room token</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/server">public string Server</a></td>
<td>Room associated endpoint</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/haseventcallbacks">public bool HasEventCallbacks</a></td>
<td>true if Room where set and registered in ODIN ffi</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/apmconfig">public OdinRoomConfig ApmConfig</a></td>
<td>Configuration for NativeBindings</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/playbackmediaconfig">public OdinMediaConfig PlaybackMediaConfig</a></td>
<td>Configuration for Media on new medias</td>
</tr>
</tbody>
</table>
<h4 id="methods-15">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomconfig/tostring">public override string ToString()</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
<h3 id="roomjoineventargshttpswww4playersioodinsdkunityclassesroomjoineventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoineventargs">RoomJoinEventArgs</a> Class</h3>
<h4 id="definition-27">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomJoinEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoineventargs">https://www.4players.io/odin/sdk/unity/classes/roomjoineventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomJoinEventArgs : EventArgs
</code></pre>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h4 id="properties-26">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoineventargs/room">public Room Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
<h3 id="roomjoinedeventargshttpswww4playersioodinsdkunityclassesroomjoinedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinedeventargs">RoomJoinedEventArgs</a> Class</h3>
<h4 id="definition-28">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomJoinedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinedeventargs">https://www.4players.io/odin/sdk/unity/classes/roomjoinedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h4 id="properties-27">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinedeventargs/room">public Room Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
<h3 id="roomleaveeventargshttpswww4playersioodinsdkunityclassesroomleaveeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomleaveeventargs">RoomLeaveEventArgs</a> Class</h3>
<h4 id="definition-29">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomLeaveEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomleaveeventargs">https://www.4players.io/odin/sdk/unity/classes/roomleaveeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h4 id="properties-28">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomleaveeventargs/room">public Room Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
<h3 id="roomlefteventargshttpswww4playersioodinsdkunityclassesroomlefteventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomlefteventargs">RoomLeftEventArgs</a> Class</h3>
<h4 id="definition-30">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomLeftEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomlefteventargs">https://www.4players.io/odin/sdk/unity/classes/roomlefteventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomLeftEventArgs : EventArgs
</code></pre>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h4 id="properties-29">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomlefteventargs/roomname">public string RoomName</a></td>
<td>room name</td>
</tr>
</tbody>
</table>
<h3 id="roomuserdatachangedeventargshttpswww4playersioodinsdkunityclassesroomuserdatachangedeventargs-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs">RoomUserDataChangedEventArgs</a> Class</h3>
<h4 id="definition-31">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomUserDataChangedEventArgs</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs">https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs</a></dd>
</dl>
<pre><code class="language-csharp">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h4 id="properties-30">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs/roomname">public string RoomName { get; }</a></td>
<td>room name</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs/data">public UserData Data</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
<h3 id="userdatahttpswww4playersioodinsdkunityclassesuserdata-class"><a href="https://www.4players.io/odin/sdk/unity/classes/userdata">UserData</a> Class</h3>
<h4 id="definition-32">Definition</h4>
<dl>
<dt>Name</dt>
<dd>UserData</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/userdata">https://www.4players.io/odin/sdk/unity/classes/userdata</a></dd>
</dl>
<pre><code class="language-csharp">public class UserData : IUserData
</code></pre>
<p>Odin UserData helper for marshal byte arrays</p>
<h4 id="properties-31">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/encoding">public Encoding Encoding { get; set; }</a></td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/buffer">public byte[] Buffer { get; set; }</a></td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h4 id="methods-16">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/copyfrom">public virtual void CopyFrom(IntPtr ptr, ulong size)</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/isempty">public virtual bool IsEmpty()</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/contains">public virtual bool Contains(string value)</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/contains">public virtual bool Contains(byte value)</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/patternat">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/clone">public virtual UserData Clone()</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/tobytes">public virtual byte[] ToBytes()</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/userdata/tostring">public override string ToString()</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
<h3 id="microphonereaderhttpswww4playersioodinsdkunityclassesmicrophonereader-class"><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader">MicrophoneReader</a> Class</h3>
<h4 id="definition-33">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MicrophoneReader</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader">https://www.4players.io/odin/sdk/unity/classes/microphonereader</a></dd>
</dl>
<pre><code class="language-csharp">public class MicrophoneReader : MonoBehaviour
</code></pre>
<p>Handles microphone input data and sends input to ODIN</p>
<h4 id="properties-32">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/haspermission">public bool HasPermission { get; }</a></td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio">public bool RedirectCapturedAudio</a></td>
<td>Skips registered PushAudio for the OnMicrophoneData event</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/silencecapturedaudio">public bool SilenceCapturedAudio</a></td>
<td>Zero out the event audio buffer for PushAudio.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/continuerecording">public bool ContinueRecording</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/audiocliplength">public int AudioClipLength</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/overridesamplerate">public bool OverrideSampleRate</a></td>
<td>Use set <a href="/odin/sdk/unity/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/samplerate">public MediaSampleRate SampleRate</a></td>
<td>The recording Core</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/custominputdevice">public bool CustomInputDevice</a></td>
<td>Enable/Disable the use of <a href="/odin/sdk/unity/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/inputdevice">public string InputDevice</a></td>
<td>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/autostartlisten">public bool AutostartListen</a></td>
<td>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/custommicvolumescale">public bool CustomMicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/micvolumescale">public float MicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/loopback">public bool Loopback</a></td>
<td>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop. Odin APM Settings are not applied in the loopback sound.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/onmicrophonedata">public MicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h4 id="methods-17">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/startlisten">public bool StartListen()</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/microphonereader/stoplisten">public void StopListen()</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
<h3 id="playbackcomponenthttpswww4playersioodinsdkunityclassesplaybackcomponent-class"><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent">PlaybackComponent</a> Class</h3>
<h4 id="definition-34">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PlaybackComponent</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent">https://www.4players.io/odin/sdk/unity/classes/playbackcomponent</a></dd>
</dl>
<pre><code class="language-csharp">public class PlaybackComponent : MonoBehaviour
</code></pre>
<p>Handles the Playback for received ODIN audio data.</p>
<h4 id="properties-33">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/playbacksource">public AudioSource PlaybackSource</a></td>
<td>The Unity AudioSource component for playback</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/autodestroyaudiosource">public bool AutoDestroyAudioSource</a></td>
<td>On true destroy the <a href="/odin/sdk/unity/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> or false for manually manage sources</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/autodestroymediastream">public bool AutoDestroyMediaStream</a></td>
<td>On true destroy the Media in dispose to not leak or false for manually manage stream</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/samplerate">public MediaSampleRate SampleRate</a></td>
<td>The playback Core</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/mute">public bool Mute { get; set; }</a></td>
<td>The Unity AudioSource mute property</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/roomname">public string RoomName { get; set; }</a></td>
<td>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/peerid">public ulong PeerId { get; set; }</a></td>
<td>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/mediastreamid">public long MediaStreamId { get; set; }</a></td>
<td>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/hasactivity">public bool HasActivity { get; }</a></td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="methods-18">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/setmediainfo">public void SetMediaInfo(string roomName, ulong peerId, long mediaId)</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/getodinaudiostreamstats">public NativeBindings.OdinAudioStreamStats GetOdinAudioStreamStats()</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="playbackstatshttpswww4playersioodinsdkunityclassesplaybackstats-class"><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats">PlaybackStats</a> Class</h3>
<h4 id="definition-35">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PlaybackStats</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats">https://www.4players.io/odin/sdk/unity/classes/playbackstats</a></dd>
</dl>
<pre><code class="language-csharp">public class PlaybackStats : MonoBehaviour
</code></pre>
<h4 id="properties-34">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/log">public bool Log</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/pauseanimationcurve">public bool PauseAnimationCurve</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsprocessed">public uint PacketsProcessed</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsdroppedearly">public uint PacketsDroppedEarly</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsdroppedlate">public uint PacketsDroppedLate</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetslost">public uint PacketsLost</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsavailabledifference">public AnimationCurve PacketsAvailableDifference</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="connectionstatechangedproxyhttpswww4playersioodinsdkunityclassesconnectionstatechangedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedproxy">ConnectionStateChangedProxy</a> Class</h3>
<h4 id="definition-36">Definition</h4>
<dl>
<dt>Name</dt>
<dd>ConnectionStateChangedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedproxy">https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class ConnectionStateChangedProxy : UnityEvent&amp;lt;object, ConnectionStateChangedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="mediaactivestatechangedproxyhttpswww4playersioodinsdkunityclassesmediaactivestatechangedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedproxy">MediaActiveStateChangedProxy</a> Class</h3>
<h4 id="definition-37">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaActiveStateChangedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedproxy">https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class MediaActiveStateChangedProxy : UnityEvent&amp;lt;object, MediaActiveStateChangedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="mediaaddedproxyhttpswww4playersioodinsdkunityclassesmediaaddedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedproxy">MediaAddedProxy</a> Class</h3>
<h4 id="definition-38">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaAddedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediaaddedproxy">https://www.4players.io/odin/sdk/unity/classes/mediaaddedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class MediaAddedProxy : UnityEvent&amp;lt;object, MediaAddedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="mediaremovedproxyhttpswww4playersioodinsdkunityclassesmediaremovedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/mediaremovedproxy">MediaRemovedProxy</a> Class</h3>
<h4 id="definition-39">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaRemovedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/mediaremovedproxy">https://www.4players.io/odin/sdk/unity/classes/mediaremovedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class MediaRemovedProxy : UnityEvent&amp;lt;object, MediaRemovedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="messagereceivedproxyhttpswww4playersioodinsdkunityclassesmessagereceivedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/messagereceivedproxy">MessageReceivedProxy</a> Class</h3>
<h4 id="definition-40">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MessageReceivedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/messagereceivedproxy">https://www.4players.io/odin/sdk/unity/classes/messagereceivedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class MessageReceivedProxy : UnityEvent&amp;lt;object, MessageReceivedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="peerjoinedproxyhttpswww4playersioodinsdkunityclassespeerjoinedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedproxy">PeerJoinedProxy</a> Class</h3>
<h4 id="definition-41">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerJoinedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peerjoinedproxy">https://www.4players.io/odin/sdk/unity/classes/peerjoinedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class PeerJoinedProxy : UnityEvent&amp;lt;object, PeerJoinedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="peerleftproxyhttpswww4playersioodinsdkunityclassespeerleftproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peerleftproxy">PeerLeftProxy</a> Class</h3>
<h4 id="definition-42">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerLeftProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peerleftproxy">https://www.4players.io/odin/sdk/unity/classes/peerleftproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class PeerLeftProxy : UnityEvent&amp;lt;object, PeerLeftEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="peeruserdatachangedproxyhttpswww4playersioodinsdkunityclassespeeruserdatachangedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedproxy">PeerUserDataChangedProxy</a> Class</h3>
<h4 id="definition-43">Definition</h4>
<dl>
<dt>Name</dt>
<dd>PeerUserDataChangedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedproxy">https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class PeerUserDataChangedProxy : UnityEvent&amp;lt;object, PeerUserDataChangedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="roomjoinproxyhttpswww4playersioodinsdkunityclassesroomjoinproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinproxy">RoomJoinProxy</a> Class</h3>
<h4 id="definition-44">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomJoinProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinproxy">https://www.4players.io/odin/sdk/unity/classes/roomjoinproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class RoomJoinProxy : UnityEvent&amp;lt;RoomJoinEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
<h3 id="roomjoinedproxyhttpswww4playersioodinsdkunityclassesroomjoinedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinedproxy">RoomJoinedProxy</a> Class</h3>
<h4 id="definition-45">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomJoinedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomjoinedproxy">https://www.4players.io/odin/sdk/unity/classes/roomjoinedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class RoomJoinedProxy : UnityEvent&amp;lt;RoomJoinedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
<h3 id="roomleaveproxyhttpswww4playersioodinsdkunityclassesroomleaveproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomleaveproxy">RoomLeaveProxy</a> Class</h3>
<h4 id="definition-46">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomLeaveProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomleaveproxy">https://www.4players.io/odin/sdk/unity/classes/roomleaveproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class RoomLeaveProxy : UnityEvent&amp;lt;RoomLeaveEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
<h3 id="roomleftproxyhttpswww4playersioodinsdkunityclassesroomleftproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomleftproxy">RoomLeftProxy</a> Class</h3>
<h4 id="definition-47">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomLeftProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomleftproxy">https://www.4players.io/odin/sdk/unity/classes/roomleftproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class RoomLeftProxy : UnityEvent&amp;lt;RoomLeftEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
<h3 id="roomuserdatachangedproxyhttpswww4playersioodinsdkunityclassesroomuserdatachangedproxy-class"><a href="https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedproxy">RoomUserDataChangedProxy</a> Class</h3>
<h4 id="definition-48">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomUserDataChangedProxy</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedproxy">https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedproxy</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class RoomUserDataChangedProxy : UnityEvent&amp;lt;object, RoomUserDataChangedEventArgs&amp;gt;
</code></pre>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="unitycreatedmediaobjecthttpswww4playersioodinsdkunityclassesunitycreatedmediaobject-class"><a href="https://www.4players.io/odin/sdk/unity/classes/unitycreatedmediaobject">UnityCreatedMediaObject</a> Class</h3>
<h4 id="definition-49">Definition</h4>
<dl>
<dt>Name</dt>
<dd>UnityCreatedMediaObject</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/unitycreatedmediaobject">https://www.4players.io/odin/sdk/unity/classes/unitycreatedmediaobject</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class UnityCreatedMediaObject : UnityEvent&amp;lt;string, ulong, long&amp;gt;
</code></pre>
<h3 id="unitydeletemediaobjecthttpswww4playersioodinsdkunityclassesunitydeletemediaobject-class"><a href="https://www.4players.io/odin/sdk/unity/classes/unitydeletemediaobject">UnityDeleteMediaObject</a> Class</h3>
<h4 id="definition-50">Definition</h4>
<dl>
<dt>Name</dt>
<dd>UnityDeleteMediaObject</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/unitydeletemediaobject">https://www.4players.io/odin/sdk/unity/classes/unitydeletemediaobject</a></dd>
</dl>
<pre><code class="language-csharp">[Serializable]
public class UnityDeleteMediaObject : UnityEvent&amp;lt;long&amp;gt;
</code></pre>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h3 id="odinbannerhttpswww4playersioodinsdkunityclassesodinbanner-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odinbanner">OdinBanner</a> Class</h3>
<h4 id="definition-51">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinBanner</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odinbanner">https://www.4players.io/odin/sdk/unity/classes/odinbanner</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinBanner : MonoBehaviour
</code></pre>
<h3 id="odineditorconfighttpswww4playersioodinsdkunityclassesodineditorconfig-class"><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig">OdinEditorConfig</a> Class</h3>
<h4 id="definition-52">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinEditorConfig</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig">https://www.4players.io/odin/sdk/unity/classes/odineditorconfig</a></dd>
</dl>
<pre><code class="language-csharp">public class OdinEditorConfig : MonoBehaviour
</code></pre>
<p>UnityEditor UI component for instance config of Odin</p>
<h4 id="properties-35">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/verbose">public bool Verbose</a></td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/verbosedebug">public bool VerboseDebug</a></td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/accesskey">public string AccessKey</a></td>
<td>Odin Client ApiKey</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/clientid">public string ClientId</a></td>
<td>Odin Client ID</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/server">public string Server</a></td>
<td>Gateway</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/userdatatext">public string UserDataText</a></td>
<td>Default UserData content</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/devicesamplerate">public MediaSampleRate DeviceSampleRate</a></td>
<td>Microphone Sample-Rate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/devicechannels">public MediaChannels DeviceChannels</a></td>
<td>Microphone Channels</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/remotesamplerate">public MediaSampleRate RemoteSampleRate</a></td>
<td>Playback Sample-Rate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/remotechannels">public MediaChannels RemoteChannels</a></td>
<td>Playback Channels</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/peerjoinedevent">public bool PeerJoinedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/peerleftevent">public bool PeerLeftEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/peerupdatedevent">public bool PeerUpdatedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/mediaaddedevent">public bool MediaAddedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/mediaremovedevent">public bool MediaRemovedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/roomupdatedevent">public bool RoomUpdatedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/mediaactivestatechangedevent">public bool MediaActiveStateChangedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/messagereceivedevent">public bool MessageReceivedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/tokenlifetime">public ulong TokenLifetime</a></td>
<td>Time untill the token expires</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetection">public bool VoiceActivityDetection</a></td>
<td>Turns VAD on and off</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetectionattackprobability">public float VoiceActivityDetectionAttackProbability</a></td>
<td>Setup engage of VAD</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetectionreleaseprobability">public float VoiceActivityDetectionReleaseProbability</a></td>
<td>Setup disengage of VAD</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/volumegate">public bool VolumeGate</a></td>
<td>Turns volume gate on and off</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/volumegateattackloudness">public float VolumeGateAttackLoudness</a></td>
<td>Setup engage of volume gate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/volumegatereleaseloudness">public float VolumeGateReleaseLoudness</a></td>
<td>Setup disengage of volume gate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/echocanceller">public bool EchoCanceller</a></td>
<td>Turns Echo cancellation on and off</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/highpassfilter">public bool HighPassFilter</a></td>
<td>Reduces lower frequencies of the input (Automatic game control)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/preamplifier">public bool PreAmplifier</a></td>
<td>Amplifies the audio input</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/noisesuppressionlevel">public NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel</a></td>
<td>Turns noise suppression on and off</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/transientsuppressor">public bool TransientSuppressor</a></td>
<td>Filters high amplitude noices</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/gaincontroller">public bool GainController</a></td>
<td>Turns gain controller on and off</td>
</tr>
</tbody>
</table>
<h4 id="methods-19">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/generateuiaccesskey">public void GenerateUIAccessKey()</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="interfaces">Interfaces</h2>
<h3 id="iodinapmconfighttpswww4playersioodinsdkunityinterfacesiodinapmconfig-interface"><a href="https://www.4players.io/odin/sdk/unity/interfaces/iodinapmconfig">IOdinApmConfig</a> Interface</h3>
<h4 id="definition-53">Definition</h4>
<dl>
<dt>Name</dt>
<dd>IOdinApmConfig</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/interfaces/iodinapmconfig">https://www.4players.io/odin/sdk/unity/interfaces/iodinapmconfig</a></dd>
</dl>
<pre><code class="language-csharp">public interface IOdinApmConfig
</code></pre>
<p>Interface for Audio processing configuration of an ODIN room</p>
<h3 id="iuserdatahttpswww4playersioodinsdkunityinterfacesiuserdata-interface"><a href="https://www.4players.io/odin/sdk/unity/interfaces/iuserdata">IUserData</a> Interface</h3>
<h4 id="definition-54">Definition</h4>
<dl>
<dt>Name</dt>
<dd>IUserData</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/interfaces/iuserdata">https://www.4players.io/odin/sdk/unity/interfaces/iuserdata</a></dd>
</dl>
<pre><code class="language-csharp">public interface IUserData
</code></pre>
<p>interface for transmitting UserData</p>
<h4 id="methods-20">Methods</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/interfaces/iuserdata/isempty">bool IsEmpty()</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/interfaces/iuserdata/tobytes">byte[] ToBytes()</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
<h2 id="structs">Structs</h2>
<h3 id="odinaudiostreamstatshttpswww4playersioodinsdkunitystructsodinaudiostreamstats-struct"><a href="https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats">OdinAudioStreamStats</a> Struct</h3>
<h4 id="definition-55">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinAudioStreamStats</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats">https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats</a></dd>
</dl>
<pre><code class="language-csharp">public struct OdinAudioStreamStats
</code></pre>
<p>Audio stream statistics.</p>
<h4 id="properties-36">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_processed">public uint jitter_packets_processed</a></td>
<td>The number of packets processed by the medias jitter buffer.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_dropped_too_early">public uint jitter_packets_dropped_too_early</a></td>
<td>The number of packets dropped because they seemed to arrive too early.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_dropped_too_late">public uint jitter_packets_dropped_too_late</a></td>
<td>The number of packets processed because they seemed to arrive too late.</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_lost">public uint jitter_packets_lost</a></td>
<td>The number of packets marked as lost during transmission.</td>
</tr>
</tbody>
</table>
<h3 id="odinconnectionstatshttpswww4playersioodinsdkunitystructsodinconnectionstats-struct"><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats">OdinConnectionStats</a> Struct</h3>
<h4 id="definition-56">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinConnectionStats</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats">https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats</a></dd>
</dl>
<pre><code class="language-csharp">public struct OdinConnectionStats
</code></pre>
<p>Statistics for the underlying connection of a room.</p>
<h4 id="properties-37">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_tx_datagrams">public ulong udp_tx_datagrams</a></td>
<td>The amount of outgoing UDP datagrams observed</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_tx_acks">public ulong udp_tx_acks</a></td>
<td>The amount of outgoing acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_tx_bytes">public ulong udp_tx_bytes</a></td>
<td>The total amount of bytes which have been transferred inside outgoing UDP datagrams</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_rx_datagrams">public ulong udp_rx_datagrams</a></td>
<td>The amount of incoming UDP datagrams observed</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_rx_acks">public ulong udp_rx_acks</a></td>
<td>The amount of incoming acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_rx_bytes">public ulong udp_rx_bytes</a></td>
<td>The total amount of bytes which have been transferred inside incoming UDP datagrams</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/cwnd">public ulong cwnd</a></td>
<td>Current congestion window of the connection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/congestion_events">public ulong congestion_events</a></td>
<td>Congestion events on the connection</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/rtt">public float rtt</a></td>
<td>Current best estimate of the connection latency (round-trip-time) in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="enums">Enums</h2>
<h3 id="odinnoisesuppressionlevelhttpswww4playersioodinsdkunityenumsodinnoisesuppressionlevel-enum"><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel">OdinNoiseSuppressionLevel</a> Enum</h3>
<h4 id="definition-57">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinNoiseSuppressionLevel</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel">https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel</a></dd>
</dl>
<pre><code class="language-csharp">public enum OdinNoiseSuppressionLevel
</code></pre>
<p>Valid levels for aggressiveness of the noise suppression</p>
<h4 id="properties-38">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/none">None = 0</a></td>
<td>None</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/low">Low = 1</a></td>
<td>6dB</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/moderate">Moderate = 2</a></td>
<td>12 dB</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/high">High = 3</a></td>
<td>18 dB</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/veryhigh">VeryHigh = 4</a></td>
<td>21 dB</td>
</tr>
</tbody>
</table>
<h3 id="odinroomconnectionstatehttpswww4playersioodinsdkunityenumsodinroomconnectionstate-enum"><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate">OdinRoomConnectionState</a> Enum</h3>
<h4 id="definition-58">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinRoomConnectionState</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate">https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate</a></dd>
</dl>
<pre><code class="language-csharp">public enum OdinRoomConnectionState
</code></pre>
<p>Connection state of the ODIN client</p>
<h4 id="properties-39">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/connecting">Connecting = 0</a></td>
<td>Connection is being established</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/connected">Connected = 1</a></td>
<td>Connection is established</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/disconnected">Disconnected = 2</a></td>
<td>Connection is closed</td>
</tr>
</tbody>
</table>
<h3 id="odinroomconnectionstatechangereasonhttpswww4playersioodinsdkunityenumsodinroomconnectionstatechangereason-enum"><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason">OdinRoomConnectionStateChangeReason</a> Enum</h3>
<h4 id="definition-59">Definition</h4>
<dl>
<dt>Name</dt>
<dd>OdinRoomConnectionStateChangeReason</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason">https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason</a></dd>
</dl>
<pre><code class="language-csharp">public enum OdinRoomConnectionStateChangeReason
</code></pre>
<p>Reason of connection state</p>
<h4 id="properties-40">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/clientrequested">ClientRequested = 0</a></td>
<td>Connection state change was initiated by the user</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/serverrequested">ServerRequested = 1</a></td>
<td>Connection state change was initiated by the server (e.g. peer was kicked)</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/connectionlost">ConnectionLost = 2</a></td>
<td>Connection state change was caused by a timeout</td>
</tr>
</tbody>
</table>
<h3 id="mediachannelshttpswww4playersioodinsdkunityenumsmediachannels-enum"><a href="https://www.4players.io/odin/sdk/unity/enums/mediachannels">MediaChannels</a> Enum</h3>
<h4 id="definition-60">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaChannels</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/enums/mediachannels">https://www.4players.io/odin/sdk/unity/enums/mediachannels</a></dd>
</dl>
<pre><code class="language-csharp">public enum MediaChannels : byte
</code></pre>
<p>Supported values for audio channel count</p>
<h4 id="properties-41">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediachannels/mono">Mono = 1</a></td>
<td>Defines a single (monaural) channel</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediachannels/stereo">Stereo = 2</a></td>
<td>Defines two (stereo) channels</td>
</tr>
</tbody>
</table>
<h3 id="mediasampleratehttpswww4playersioodinsdkunityenumsmediasamplerate-enum"><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate">MediaSampleRate</a> Enum</h3>
<h4 id="definition-61">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaSampleRate</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate">https://www.4players.io/odin/sdk/unity/enums/mediasamplerate</a></dd>
</dl>
<pre><code class="language-csharp">public enum MediaSampleRate : uint
</code></pre>
<p>Supported audio sample rate values</p>
<h4 id="properties-42">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/device_min">Device_Min = 0U</a></td>
<td>Hardware device min samplerate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/device_max">Device_Max = 1U</a></td>
<td>Hardware device max samplerate</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz8000">Hz8000 = 8000U</a></td>
<td>8khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz11025">Hz11025 = 11025U</a></td>
<td>11.025khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz12000">Hz12000 = 12000U</a></td>
<td>12khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz16000">Hz16000 = 16000U</a></td>
<td>16khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz22050">Hz22050 = 22050U</a></td>
<td>22.05khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz24000">Hz24000 = 24000U</a></td>
<td>24khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz32000">Hz32000 = 32000U</a></td>
<td>32khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz44100">Hz44100 = 44100U</a></td>
<td>44.1khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz48000">Hz48000 = 48000U</a></td>
<td>48khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz96000">Hz96000 = 96000U</a></td>
<td>96khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz128000">Hz128000 = 128000U</a></td>
<td>128khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz144000">Hz144000 = 144000U</a></td>
<td>144khz</td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz192000">Hz192000 = 192000U</a></td>
<td>192khz</td>
</tr>
</tbody>
</table>
<h3 id="supportedplatformhttpswww4playersioodinsdkunityenumssupportedplatform-enum"><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform">SupportedPlatform</a> Enum</h3>
<h4 id="definition-62">Definition</h4>
<dl>
<dt>Name</dt>
<dd>SupportedPlatform</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform">https://www.4players.io/odin/sdk/unity/enums/supportedplatform</a></dd>
</dl>
<pre><code class="language-csharp">public enum SupportedPlatform
</code></pre>
<p>Platforms supported by the native ODIN runtime</p>
<h4 id="properties-43">Properties</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform/android">Android = 0</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform/ios">iOS = 1</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform/macosx">MacOSX = 2</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform/linux">Linux = 3</a></td>
<td></td>
</tr>
<tr>
<td><a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform/windows">Windows = 4</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="delegates">Delegates</h2>
<h3 id="mediaactivestatechangedeventhandlerhttpswww4playersioodinsdkunitydelegatesmediaactivestatechangedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/mediaactivestatechangedeventhandler">MediaActiveStateChangedEventHandler</a> Delegate</h3>
<h4 id="definition-63">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MediaActiveStateChangedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/mediaactivestatechangedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/mediaactivestatechangedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roomconnectionstatechangedeventhandlerhttpswww4playersioodinsdkunitydelegatesroomconnectionstatechangedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roomconnectionstatechangedeventhandler">RoomConnectionStateChangedEventHandler</a> Delegate</h3>
<h4 id="definition-64">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomConnectionStateChangedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roomconnectionstatechangedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roomconnectionstatechangedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roommediaaddedeventhandlerhttpswww4playersioodinsdkunitydelegatesroommediaaddedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roommediaaddedeventhandler">RoomMediaAddedEventHandler</a> Delegate</h3>
<h4 id="definition-65">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomMediaAddedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roommediaaddedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roommediaaddedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roommediaremovedeventhandlerhttpswww4playersioodinsdkunitydelegatesroommediaremovedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roommediaremovedeventhandler">RoomMediaRemovedEventHandler</a> Delegate</h3>
<h4 id="definition-66">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomMediaRemovedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roommediaremovedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roommediaremovedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roommessagereceivedeventhandlerhttpswww4playersioodinsdkunitydelegatesroommessagereceivedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roommessagereceivedeventhandler">RoomMessageReceivedEventHandler</a> Delegate</h3>
<h4 id="definition-67">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomMessageReceivedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roommessagereceivedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roommessagereceivedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roompeerjoinedeventhandlerhttpswww4playersioodinsdkunitydelegatesroompeerjoinedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roompeerjoinedeventhandler">RoomPeerJoinedEventHandler</a> Delegate</h3>
<h4 id="definition-68">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomPeerJoinedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roompeerjoinedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roompeerjoinedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roompeerlefteventhandlerhttpswww4playersioodinsdkunitydelegatesroompeerlefteventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roompeerlefteventhandler">RoomPeerLeftEventHandler</a> Delegate</h3>
<h4 id="definition-69">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomPeerLeftEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roompeerlefteventhandler">https://www.4players.io/odin/sdk/unity/delegates/roompeerlefteventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roompeeruserdatachangedeventhandlerhttpswww4playersioodinsdkunitydelegatesroompeeruserdatachangedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roompeeruserdatachangedeventhandler">RoomPeerUserDataChangedEventHandler</a> Delegate</h3>
<h4 id="definition-70">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomPeerUserDataChangedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roompeeruserdatachangedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roompeeruserdatachangedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<p>EventHandler in the current room</p>
<h3 id="roomuserdatachangedeventhandlerhttpswww4playersioodinsdkunitydelegatesroomuserdatachangedeventhandler-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/roomuserdatachangedeventhandler">RoomUserDataChangedEventHandler</a> Delegate</h3>
<h4 id="definition-71">Definition</h4>
<dl>
<dt>Name</dt>
<dd>RoomUserDataChangedEventHandler</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/roomuserdatachangedeventhandler">https://www.4players.io/odin/sdk/unity/delegates/roomuserdatachangedeventhandler</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<p>EventHandler in the current room. Changing a Room's UserData is only possible via request to Odin server API,
but not supported inside the client SDK.</p>
<h3 id="microphonecallbackdelegatehttpswww4playersioodinsdkunitydelegatesmicrophonecallbackdelegate-delegate"><a href="https://www.4players.io/odin/sdk/unity/delegates/microphonecallbackdelegate">MicrophoneCallbackDelegate</a> Delegate</h3>
<h4 id="definition-72">Definition</h4>
<dl>
<dt>Name</dt>
<dd>MicrophoneCallbackDelegate</dd>
<dt>Link to documentation</dt>
<dd><a href="https://www.4players.io/odin/sdk/unity/delegates/microphonecallbackdelegate">https://www.4players.io/odin/sdk/unity/delegates/microphonecallbackdelegate</a></dd>
</dl>
<pre><code class="language-csharp">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
`}),e.add({id:11,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Client AccessKey for all new rooms. Default from OdinHandler config. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string AccessKey { get; }
</code></pre>
<p>Client AccessKey for all new rooms. Default from OdinHandler config.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:12,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Default access key ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static string AccessKey { get; set; }
</code></pre>
<p>Default access key</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:13,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Odin Client ApiKey ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Odin Client ApiKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:14,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Room associated AccessKey ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Room associated AccessKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:15,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Client AccessKey for all new rooms. Default from OdinHandler config. ",content:`<pre><code class="language-C#">public string AccessKey { get; }
</code></pre>
<p>Client AccessKey for all new rooms. Default from OdinHandler config.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:16,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Default access key ",content:`<pre><code class="language-C#">public static string AccessKey { get; set; }
</code></pre>
<p>Default access key</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:17,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Odin Client ApiKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Odin Client ApiKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:18,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Room associated AccessKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Room associated AccessKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:19,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Client AccessKey for all new rooms. Default from OdinHandler config. ",content:`<pre><code class="language-C#">public string AccessKey { get; }
</code></pre>
<p>Client AccessKey for all new rooms. Default from OdinHandler config.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:20,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Default access key ",content:`<pre><code class="language-C#">public static string AccessKey { get; set; }
</code></pre>
<p>Default access key</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:21,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Odin Client ApiKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Odin Client ApiKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:22,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Room associated AccessKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Room associated AccessKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:23,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Client AccessKey for all new rooms. Default from OdinHandler config. ",content:`<pre><code class="language-C#">public string AccessKey { get; }
</code></pre>
<p>Client AccessKey for all new rooms. Default from OdinHandler config.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:24,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Default access key ",content:`<pre><code class="language-C#">public static string AccessKey { get; set; }
</code></pre>
<p>Default access key</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:25,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Odin Client ApiKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Odin Client ApiKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:26,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Room associated AccessKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Room associated AccessKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:27,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Client AccessKey for all new rooms. Default from OdinHandler config. ",content:`<pre><code class="language-C#">public string AccessKey { get; }
</code></pre>
<p>Client AccessKey for all new rooms. Default from OdinHandler config.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:28,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Default access key ",content:`<pre><code class="language-C#">public static string AccessKey { get; set; }
</code></pre>
<p>Default access key</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:29,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Client AccessKey for all new rooms. Default from OdinHandler config. ",content:`<pre><code class="language-C#">public string AccessKey { get; }
</code></pre>
<p>Client AccessKey for all new rooms. Default from OdinHandler config.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:30,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Default access key ",content:`<pre><code class="language-C#">public static string AccessKey { get; set; }
</code></pre>
<p>Default access key</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:31,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Odin Client ApiKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Odin Client ApiKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:32,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/accesskey/",title:"AccessKey",section:"ODIN Documentation",description:" Room associated AccessKey ",content:`<pre><code class="language-C#">public string AccessKey
</code></pre>
<p>Room associated AccessKey</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:33,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/active/",title:"active",section:"ODIN Documentation",description:"Indicates wether or not the media is currently sending/receiving data.",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Indicates wether or not the media is currently sending/receiving data.</p>
`}),e.add({id:34,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/active/",title:"Active",section:"ODIN Documentation",description:" state of the media ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Active { get; }
</code></pre>
<p>state of the media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:35,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/active/",title:"Active",section:"ODIN Documentation",description:" state of the media ",content:`<pre><code class="language-C#">public bool Active { get; }
</code></pre>
<p>state of the media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:36,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/active/",title:"Active",section:"ODIN Documentation",description:" state of the media ",content:`<pre><code class="language-C#">public bool Active { get; }
</code></pre>
<p>state of the media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:37,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/active/",title:"Active",section:"ODIN Documentation",description:" state of the media ",content:`<pre><code class="language-C#">public bool Active { get; }
</code></pre>
<p>state of the media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:38,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/active/",title:"Active",section:"ODIN Documentation",description:" state of the media ",content:`<pre><code class="language-C#">public bool Active { get; }
</code></pre>
<p>state of the media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:39,href:"https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/active/",title:"Active",section:"ODIN Documentation",description:" state of the media ",content:`<pre><code class="language-C#">public bool Active { get; }
</code></pre>
<p>state of the media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:40,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/activity/",title:"Activity",section:"ODIN Documentation",description:" Media activity state flag ",content:`<pre><code class="language-C#">public bool Activity { get; }
</code></pre>
<p>Media activity state flag</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:41,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediaevents/activity/",title:"Activity",section:"ODIN Documentation",description:"The media is sending/receiving data.",content:`<pre><code class="language-C#">OdinMediaActivityChangedEvent
</code></pre>
<p>The media is sending/receiving data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></p>
`}),e.add({id:42,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Add(MediaStream item)
</code></pre>
<p>Add a stream to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:43,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Add(Peer item)
</code></pre>
<p>Add a peer to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:44,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Add(Room item)
</code></pre>
<p>Add a room to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsRemoveOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:45,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(MediaStream item)
</code></pre>
<p>Add a stream to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:46,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Peer item)
</code></pre>
<p>Add a peer to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:47,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Room item)
</code></pre>
<p>Add a room to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsRemoveOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:48,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(MediaStream item)
</code></pre>
<p>Add a stream to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:49,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Peer item)
</code></pre>
<p>Add a peer to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:50,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Room item)
</code></pre>
<p>Add a room to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsRemoveOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:51,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(MediaStream item)
</code></pre>
<p>Add a stream to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:52,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Peer item)
</code></pre>
<p>Add a peer to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:53,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Room item)
</code></pre>
<p>Add a room to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsRemoveOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:54,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Room item)
</code></pre>
<p>Add a room to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsRemoveOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:55,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(MediaStream item)
</code></pre>
<p>Add a stream to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:56,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Peer item)
</code></pre>
<p>Add a peer to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:57,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/add/",title:"Add",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Add(Room item)
</code></pre>
<p>Add a room to the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsRemoveOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:58,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/addapm/",title:"AddApm",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinApmComponent AddApm()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/">OdinApmComponent</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:59,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/addapmeffect/",title:"AddApmEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ApmEffect AddApmEffect(uint samplerate, bool stereo, OdinApmConfig config)
</code></pre>
<p>Insert a apm effect and sets the apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>effect playback samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>effect playback stereo</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td>configuration settings for apm</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/">ApmEffect</a></td>
<td><xref href="OdinNative.Odin.Media.ApmEffect" data-throw-if-not-resolved="false"></xref> instance of base <xref href="OdinNative.Odin.Media.PiplineEffect" data-throw-if-not-resolved="false"></xref> : <xref href="OdinNative.Odin.Media.IPiplineEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:60,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/addcustomeffect/",title:"AddCustomEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public CustomEffect&lt;T&gt; AddCustomEffect&lt;T&gt;(Action&lt;OdinCallbackAudioData, T&gt; callback, T userData)
    where T : struct
</code></pre>
<p>Insert a custom effect and sets the Media where <code data-dev-comment-type="typeparamref" class="typeparamref">T</code> marks Serialize/Deserialize structures</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>callback</td>
<td>Action&lt;OdinCallbackAudioData,&lt;T&gt;&gt;</td>
<td>effect callback</td>
</tr>
<tr>
<td>userData</td>
<td>&lt;T&gt;</td>
<td>effect callback userdata of type <code data-dev-comment-type="typeparamref" class="typeparamref">T</code></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CustomEffect&lt;&lt;T&gt;&gt;</td>
<td><xref href="OdinNative.Odin.Media.CustomEffect%601" data-throw-if-not-resolved="false"></xref> instance of base <xref href="OdinNative.Odin.Media.PiplineEffect" data-throw-if-not-resolved="false"></xref> : <xref href="OdinNative.Odin.Media.IPiplineEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:61,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/addeffect/",title:"AddEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public T AddEffect&lt;T&gt;()
    where T : MonoBehaviour, IOdinEffect
public T AddEffect&lt;T&gt;(T effect)
    where T : MonoBehaviour, IOdinEffect
public CustomEffect&lt;T&gt; AddEffect&lt;T&gt;(UnityAction&lt;OdinCallbackAudioData, T&gt; callback, T userData)
    where T : struct
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effect</td>
<td>&lt;T&gt;</td>
<td></td>
</tr>
<tr>
<td>callback</td>
<td>UnityAction&lt;OdinCallbackAudioData,&lt;T&gt;&gt;</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td></td>
</tr>
<tr>
<td>CustomEffect&lt;&lt;T&gt;&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="addeffect">AddEffect()</h3>
<pre><code class="language-C#">public T AddEffect&lt;T&gt;()
    where T : MonoBehaviour, IOdinEffect
</code></pre>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="addeffecteffect">AddEffect(effect)</h3>
<pre><code class="language-C#">public T AddEffect&lt;T&gt;(T effect)
    where T : MonoBehaviour, IOdinEffect
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effect</td>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="addeffectcallback-userdata">AddEffect(callback, userData)</h3>
<pre><code class="language-C#">public CustomEffect&lt;T&gt; AddEffect&lt;T&gt;(UnityAction&lt;OdinCallbackAudioData, T&gt; callback, T userData)
    where T : struct
</code></pre>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>callback</td>
<td>UnityAction&lt;OdinCallbackAudioData,&lt;T&gt;&gt;</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CustomEffect&lt;&lt;T&gt;&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:62,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/addeventlistener/",title:"addEventListener",section:"ODIN Documentation",description:"Adds an event listener to the room for specific events.",content:`<pre><code class="language-C#">public addEventListener(eventName: Event, handler: OdinEvents[Event]): void
</code></pre>
<p>Adds an event listener to the room for specific events.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>eventName</td>
<td>Event</td>
<td>The event to listen for (see keys of OdinEvents for possible values)</td>
</tr>
<tr>
<td>handler</td>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/">OdinEvents[Event]</a></td>
<td>The callback to call when the event is fired.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:63,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/addeventlistener/",title:"addEventListener",section:"ODIN Documentation",description:"Registers to client events from `IOdinClientEvents`.",content:`<pre><code class="language-C#">addEventListener(eventName: Event, handler: IOdinClientEvents[Event]): void
</code></pre>
<p>Registers to client events from <code>IOdinClientEvents</code>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>eventName</td>
<td>Event</td>
<td>The name of the event to listen to</td>
</tr>
<tr>
<td>handler</td>
<td><a href="/odin/sdk/web/interfaces/iodinclientevents/">IOdinClientEvents[Event]</a></td>
<td>The callback to handle the event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:64,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/addeventlistener/",title:"addEventListener",section:"ODIN Documentation",description:"Registers to media events from `IOdinMediaEvents`.",content:`<pre><code class="language-C#">addEventListener(eventName: Event, handler: IOdinMediaEvents[Event]): void
</code></pre>
<p>Registers to media events from <code>IOdinMediaEvents</code>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>eventName</td>
<td>Event</td>
<td>The name of the event to listen to</td>
</tr>
<tr>
<td>handler</td>
<td><a href="/odin/sdk/web/interfaces/iodinmediaevents/">IOdinMediaEvents[Event]</a></td>
<td>The callback to handle the event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:65,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/addeventlistener/",title:"addEventListener",section:"ODIN Documentation",description:"Registers to peer events from `IOdinPeerEvents`.",content:`<pre><code class="language-C#">addEventListener(eventName: Event, handler: IOdinPeerEvents[Event]): void
</code></pre>
<p>Registers to peer events from <code>IOdinPeerEvents</code>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>eventName</td>
<td>Event</td>
<td>The name of the event to listen to</td>
</tr>
<tr>
<td>handler</td>
<td><a href="/odin/sdk/web/interfaces/iodinpeerevents/">IOdinPeerEvents[Event]</a></td>
<td>The callback to handle the event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:66,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/addeventlistener/",title:"addEventListener",section:"ODIN Documentation",description:"Register to peer events from `IOdinRoomEvents`.",content:`<pre><code class="language-C#">addEventListener(eventName: OdinEvent, handler: IOdinRoomEvents[OdinEvent]): void
</code></pre>
<p>Register to peer events from <code>IOdinRoomEvents</code>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>eventName</td>
<td>OdinEvent</td>
<td>The name of the event to listen to</td>
</tr>
<tr>
<td>handler</td>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/">IOdinRoomEvents[OdinEvent]</a></td>
<td>The callback to handle the event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:67,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/addmedia/",title:"addMedia",section:"ODIN Documentation",description:"Adds a media to the list of active medias and starts decoding.",content:`<pre><code class="language-C#">addMedia(media: OdinMedia): void
</code></pre>
<p>Adds a media to the list of active medias and starts decoding.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>media</td>
<td><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></td>
<td>The media instance to add</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:68,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/addmedia/",title:"AddMedia",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void AddMedia(PlaybackStream stream)
</code></pre>
<p>Associate a media with the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stream</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/">PlaybackStream</a></td>
<td>media stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:69,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/addmedia/",title:"AddMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void AddMedia(PlaybackStream stream)
</code></pre>
<p>Associate a media with the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stream</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/">PlaybackStream</a></td>
<td>media stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:70,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/addmedia/",title:"AddMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void AddMedia(PlaybackStream stream)
</code></pre>
<p>Associate a media with the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stream</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/">PlaybackStream</a></td>
<td>media stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:71,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/addmedia/",title:"AddMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void AddMedia(PlaybackStream stream)
</code></pre>
<p>Associate a media with the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stream</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/">PlaybackStream</a></td>
<td>media stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:72,href:"https://www.4players.io/odin/sdk/unity/classes/peer/addmedia/",title:"AddMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void AddMedia(PlaybackStream stream)
</code></pre>
<p>Associate a media with the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stream</td>
<td><a href="/odin/sdk/unity/classes/playbackstream/">PlaybackStream</a></td>
<td>media stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:73,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/addmediacomponent/",title:"AddMediaComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinMedia AddMediaComponent(GameObject containerObject, ushort mediaId, bool enable = true)
public OdinMedia AddMediaComponent(GameObject containerObject, ushort mediaId, uint samplerate, bool stereo, bool enable = true)
</code></pre>
<p>Create a Unity component</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>containerObject</td>
<td>GameObject</td>
<td>gameobject where the component will be added</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of <xref href="OdinNative.Odin.MediaDecoder" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>enable</td>
<td>Boolean</td>
<td>flag if the new <xref href="OdinNative.Unity.OdinMedia" data-throw-if-not-resolved="false"></xref> component is enabled</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>decoder samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>decoder channel flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>created component</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="addmediacomponentcontainerobject-mediaid-enable">AddMediaComponent(containerObject, mediaId, enable)</h3>
<pre><code class="language-C#">public OdinMedia AddMediaComponent(GameObject containerObject, ushort mediaId, bool enable = true)
</code></pre>
<p>Create a Unity component</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>containerObject</td>
<td>GameObject</td>
<td>gameobject where the component will be added</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of <xref href="OdinNative.Odin.MediaDecoder" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>enable</td>
<td>Boolean</td>
<td>flag if the new <xref href="OdinNative.Unity.OdinMedia" data-throw-if-not-resolved="false"></xref> component is enabled</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>created component</td>
</tr>
</tbody>
</table>
<h3 id="addmediacomponentcontainerobject-mediaid-samplerate-stereo-enable">AddMediaComponent(containerObject, mediaId, samplerate, stereo, enable)</h3>
<pre><code class="language-C#">public OdinMedia AddMediaComponent(GameObject containerObject, ushort mediaId, uint samplerate, bool stereo, bool enable = true)
</code></pre>
<p>Create a Unity component</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>containerObject</td>
<td>GameObject</td>
<td>gameobject where the component will be added</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of <xref href="OdinNative.Odin.MediaDecoder" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>decoder samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>decoder channel flag</td>
</tr>
<tr>
<td>enable</td>
<td>Boolean</td>
<td>flag if the new <xref href="OdinNative.Unity.OdinMedia" data-throw-if-not-resolved="false"></xref> component is enabled</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>created component</td>
</tr>
</tbody>
</table>
`}),e.add({id:74,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/addmute/",title:"AddMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinMuteAudioComponent AddMute()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/">OdinMuteAudioComponent</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:75,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/addpeercomponent/",title:"AddPeerComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinPeer AddPeerComponent(GameObject containerObject, ulong peerId, bool enable = true)
</code></pre>
<p>Add Unity to a gameobject</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>containerObject</td>
<td>GameObject</td>
<td>gameobject where the component will be added</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of <xref href="OdinNative.Odin.PeerEntity" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>enable</td>
<td>Boolean</td>
<td>flag if the new <xref href="OdinNative.Unity.OdinPeer" data-throw-if-not-resolved="false"></xref> component is enabled</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/">OdinPeer</a></td>
<td>created component</td>
</tr>
</tbody>
</table>
`}),e.add({id:76,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/addplaybackcomponent/",title:"AddPlaybackComponent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <see cref="!:PlaybackComponent"></see> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="addplaybackcomponentgameobjecttag-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(gameObjectTag, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <see cref="!:PlaybackComponent"></see> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h3 id="addplaybackcomponentpeercontainer-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(peerContainer, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Adds a new PlaybackComponent to the specified GameObject</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <see cref="!:PlaybackComponent"></see> from the GameObject or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:77,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/addplaybackcomponent/",title:"AddPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="addplaybackcomponentgameobjecttag-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(gameObjectTag, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h3 id="addplaybackcomponentpeercontainer-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(peerContainer, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Adds a new PlaybackComponent to the specified GameObject</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:78,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/addplaybackcomponent/",title:"AddPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="addplaybackcomponentgameobjecttag-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(gameObjectTag, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h3 id="addplaybackcomponentpeercontainer-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(peerContainer, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Adds a new PlaybackComponent to the specified GameObject</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:79,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/addplaybackcomponent/",title:"AddPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="addplaybackcomponentgameobjecttag-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(gameObjectTag, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h3 id="addplaybackcomponentpeercontainer-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(peerContainer, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Adds a new PlaybackComponent to the specified GameObject</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:80,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/",title:"AddPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>Creates a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 and attaches it to a GameObject. You can either provide a GameObject
tag or you can also provide a GameObject directly. The <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 is the audio
representation of a peer connected in an ODIN room. Use this function to create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

connected to the ODIN peer and attach it to the GameObject (i.e. the corresponding player object).</p>
<pre><code class="language-mermaid">graph LR;
    subgraph Unity Scene
        subgraph Player1 [Player 1]
            PBC1[PlaybackComponent]--&gt;GO1[GameObject]                   
        end
        subgraph Player2 [Player 2]
            PBC2[PlaybackComponent]--&gt;GO2[GameObject]
        end
        
    end
    subgraph ODON Server
        subgraph ODIN Room
            Peer1[Peer 1] --&gt; PBC1
            Peer2[Peer 2] --&gt; PBC2
        end    
    end    
    classDef blue fill:#DDFAFF
    class Player1,Player2 blue
</code></pre>
<p>The best place to call this function is in the callback <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 as you get all relevant info
in the callbacks parameters that you need when calling this function. Please see <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 for
more info on available settings.</p>
</div>



<h2 id="variants">Variants</h2>
<h3 id="addplaybackcomponentgameobjecttag-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(gameObjectTag, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(string gameObjectTag, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gameObjectTag</td>
<td>String</td>
<td>Tag string to find with <a href="https://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html">FindGameObjectsWithTag</a></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h3 id="addplaybackcomponentpeercontainer-roomname-peerid-mediastreamid-autodestroysource">AddPlaybackComponent(peerContainer, roomName, peerId, mediaStreamId, autoDestroySource)</h3>
<pre><code class="language-C#">public PlaybackComponent AddPlaybackComponent(GameObject peerContainer, string roomName, ulong peerId, long mediaStreamId, bool autoDestroySource = true)
</code></pre>
<p>Adds a new PlaybackComponent to the specified GameObject</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerContainer</td>
<td>GameObject</td>
<td>GameObject to attach to</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>PlaybackComponent room</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>PlaybackComponent peer</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>PlaybackComponent media</td>
</tr>
<tr>
<td>autoDestroySource</td>
<td>Boolean</td>
<td>optionally enable or disable on destroy of PlaybackComponent the destroy of the linked AudioSource</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>ScriptReference of <xref href="OdinNative.Unity.Audio.PlaybackComponent" data-throw-if-not-resolved="false"></xref> from the GameObject or null</td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>





<div id="example-560f1eb53bbd05a7953471be579448e5" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">AddPlaybackComponent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-560f1eb53bbd05a7953471be579448e5-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-560f1eb53bbd05a7953471be579448e5-cs">
      <pre><code class="hljs language-cs">private void OnCreatedMediaObject(string roomName, ulong peerId, ushort mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    // Find the players game object in the scene
    var peerContainer = FindPlayerForPeerId(peerId);

    // Add PlaybackComponent to new dummy PeerCube
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    // Some AudioSource test settings
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:81,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/addvad/",title:"AddVad",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinVadComponent AddVad()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/">OdinVadComponent</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:82,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/addvadeffect/",title:"AddVadEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool AddVadEffect(out VadEffect effect)
</code></pre>
<p>Insert a vad effect</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>see VadEffect for more configuration</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effect</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td>configuration settings for vad</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td><xref href="OdinNative.Odin.Media.VadEffect" data-throw-if-not-resolved="false"></xref> instance of base <xref href="OdinNative.Odin.Media.PiplineEffect" data-throw-if-not-resolved="false"></xref> : <xref href="OdinNative.Odin.Media.IPiplineEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:83,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/addvolumeboost/",title:"AddVolumeBoost",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinVolumeBoostComponent AddVolumeBoost()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/">OdinVolumeBoostComponent</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:84,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/supportedplatform/android/",title:"Android",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Android = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:85,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/android/",title:"Android",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Android = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:86,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/supportedplatform/android/",title:"Android",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Android = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:87,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/android/",title:"Android",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Android = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:88,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/android/",title:"Android",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Android = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:89,href:"https://www.4players.io/odin/sdk/unity/enums/supportedplatform/android/",title:"Android",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Android = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:90,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/apmconfig/",title:"ApmConfig",section:"ODIN Documentation",description:" Configuration for ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public OdinRoomConfig ApmConfig
</code></pre>
<p>Configuration for NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:91,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/apmconfig/",title:"ApmConfig",section:"ODIN Documentation",description:" Configuration for ",content:`<pre><code class="language-C#">public OdinRoomConfig ApmConfig
</code></pre>
<p>Configuration for NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:92,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/apmconfig/",title:"ApmConfig",section:"ODIN Documentation",description:" Configuration for ",content:`<pre><code class="language-C#">public OdinRoomConfig ApmConfig
</code></pre>
<p>Configuration for NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:93,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/apmconfig/",title:"ApmConfig",section:"ODIN Documentation",description:" Configuration for ",content:`<pre><code class="language-C#">public OdinRoomConfig ApmConfig
</code></pre>
<p>Configuration for NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:94,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/apmconfig/",title:"ApmConfig",section:"ODIN Documentation",description:" Configuration for ",content:`<pre><code class="language-C#">public OdinRoomConfig ApmConfig
</code></pre>
<p>Configuration for NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:95,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/",title:"ApmEffect",section:"ODIN Documentation",description:" VoiceActivity effect for ",content:`<p>Inherits from: <a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></p>
<pre><code class="language-C#">public class ApmEffect : PiplineEffect, IPiplineEffect
</code></pre>
<h1 id="heading"></h1>
<p>VoiceActivity effect for Odin</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/constructor_0/">ApmEffect(OdinPipelineHandle, UInt32)</a></td>
<td>Internal effect constructor, use UInt32%2cSystem</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/create/">Create</a></td>
<td>Insert a apm effect in the specified pipline and sets the apm config</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/config/">Config</a></td>
<td>Audio processing configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/echocanceller/">EchoCanceller</a></td>
<td>Idicates whether the ApmConfig setting is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/highpassfilter/">HighPassFilter</a></td>
<td>Idicates whether the ApmConfig setting is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/preamplifier/">PreAmplifier</a></td>
<td>Idicates whether the ApmConfig setting is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/transientsuppressor/">TransientSuppressor</a></td>
<td>Idicates whether the ApmConfig setting is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/gaincontroller/">GainController</a></td>
<td>Idicates whether the ApmConfig setting is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/samplerate/">Samplerate</a></td>
<td>Output decoder samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/isstereo/">IsStereo</a></td>
<td>Output decoder channel flag</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/updateeffectconfig/">UpdateEffectConfig</a></td>
<td>Set audio processing configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/setapmconfig/">SetApmConfig</a></td>
<td>Set managed audio processing configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/setvadconfig/">SetVadConfig</a></td>
<td>Not supported</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/getvadconfig/">GetVadConfig</a></td>
<td>Not supported</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/id/">Id</a></td>
<td>Effect id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/index_property/">Index</a></td>
<td>Effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/parent/">Parent</a></td>
<td>Pipeline handle</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffectindex/">GetEffectIndex</a></td>
<td>Get native effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffecttype/">GetEffectType</a></td>
<td>Get native effect NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/getvadconfig/">GetVadConfig</a></td>
<td>Get native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmconfig/">SetApmConfig</a></td>
<td>Set native audio processing config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmstreamdelay/">SetApmStreamDelay</a></td>
<td>Set native audio processing delay</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setvadconfig/">SetVadConfig</a></td>
<td>Set native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/updateapmplayback/">UpdateApmPlayback</a></td>
<td>Send samples for native audio processing</td>
</tr>
</tbody>
</table>
`}),e.add({id:96,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/constructor_0/",title:"ApmEffect(OdinPipelineHandle, UInt32)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">protected ApmEffect(OdinPipelineHandle parentHandle, uint effectId)
</code></pre>
<p>Internal effect constructor, use UInt32%2cSystem</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parentHandle</td>
<td>pipeline handle</td>
</tr>
<tr>
<td>effectId</td>
<td>effect id</td>
</tr>
</tbody>
</table>
`}),e.add({id:97,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/append/",title:"Append",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Append(byte[] bytes)
</code></pre>
<p>Append bytes to the stream at the currrent stream position</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
`}),e.add({id:98,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/append/",title:"Append",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void Append(byte[] bytes)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:99,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/array16/",title:"Array16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Array16 = 220
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:100,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/array32/",title:"Array32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Array32 = 221
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:101,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/arrayenumerable/",title:"ArrayEnumerable",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public sealed class ArrayEnumerable : IEnumerable&lt;MsgPackReader&gt;
</code></pre>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/arrayenumerable/constructor_0/">ArrayEnumerable(ref MsgPackReader)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/arrayenumerable/getenumerator/">GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:102,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/arrayenumerable/constructor_0/",title:"ArrayEnumerable(ref MsgPackReader)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ArrayEnumerable(ref MsgPackReader r)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>r</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:103,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/arraylength/",title:"ArrayLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public readonly int ArrayLength { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:104,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/asarrayenumerable/",title:"AsArrayEnumerable",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MsgPackReader.ArrayEnumerable AsArrayEnumerable()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/arrayenumerable/">ArrayEnumerable</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:105,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/asmapenumerable/",title:"AsMapEnumerable",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MsgPackReader.MapEnumerable AsMapEnumerable()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mapenumerable/">MapEnumerable</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:106,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/attack_threshold/",title:"attack_threshold",section:"ODIN Documentation",description:" when the trigger should engage ",content:`<pre><code class="language-C#">public float attack_threshold
</code></pre>
<p>when the trigger should engage</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:107,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/audiocliplength/",title:"AudioClipLength",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int AudioClipLength
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:108,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/audiocliplength/",title:"AudioClipLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int AudioClipLength
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:109,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/audiocliplength/",title:"AudioClipLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int AudioClipLength
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:110,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/audiocliplength/",title:"AudioClipLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int AudioClipLength
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:111,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/audiocliplength/",title:"AudioClipLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int AudioClipLength
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:112,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/audiodata/",title:"AudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinAudioData AudioData { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/">OdinAudioData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:113,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audiodatalength/",title:"AudioDataLength",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual uint AudioDataLength()
</code></pre>
<p>Get the number of samples available in the audio buffer.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>floats available to read with <xref href="OdinNative.Odin.Media.MediaStream.AudioReadData(System.Single%5b%5d)" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:114,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonestream/audiodatalength/",title:"AudioDataLength",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override uint AudioDataLength()
</code></pre>
<p>Get the number of samples available in the audio buffer.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always returns 0</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>0</td>
</tr>
</tbody>
</table>
`}),e.add({id:115,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audiodatalength/",title:"AudioDataLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual uint AudioDataLength()
</code></pre>
<p>Get the number of samples available in the audio buffer.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>floats available to read with <xref href="OdinNative.Odin.Media.MediaStream.AudioReadData(System.Single%5b%5d)" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:116,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonestream/audiodatalength/",title:"AudioDataLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override uint AudioDataLength()
</code></pre>
<p>Get the number of samples available in the audio buffer.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always returns 0</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>0</td>
</tr>
</tbody>
</table>
`}),e.add({id:117,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audiodatalength/",title:"AudioDataLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual uint AudioDataLength()
</code></pre>
<p>Get the number of samples available in the audio buffer.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>floats available to read with <xref href="OdinNative.Odin.Media.MediaStream.AudioReadData(System.Single%5b%5d)" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:118,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audiodatalength/",title:"AudioDataLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override uint AudioDataLength()
</code></pre>
<p>Get the number of samples available in the audio buffer.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always returns 0</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>0</td>
</tr>
</tbody>
</table>
`}),e.add({id:119,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/audiodatareceived/",title:"AudioDataReceived",section:"ODIN Documentation",description:"Fired when audio data is available for media streams. Audio comes in 16 bit and 32 bit float samples and are available individually for each peer. You can use the samples to record audio or send them to an AI for transcription.",content:`<pre><code class="language-C#">public AudioDataReceived: OdinAudioDataReceivedEvent
</code></pre>
<p>Fired when audio data is available for media streams. Audio comes in 16 bit and 32 bit float samples and are available individually for each peer.
You can use the samples to record audio or send them to an AI for transcription.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinaudiodatareceivedevent/">OdinAudioDataReceivedEvent</a></p>
`}),e.add({id:120,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/audiomixergroup/",title:"AudioMixerGroup",section:"ODIN Documentation",description:" Unity mixer ",content:`<pre><code class="language-C#">public AudioMixerGroup AudioMixerGroup
</code></pre>
<p>Unity mixer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:121,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/audiomixergroup/",title:"AudioMixerGroup",section:"ODIN Documentation",description:" Unity mixer ",content:`<pre><code class="language-C#">public AudioMixerGroup AudioMixerGroup
</code></pre>
<p>Unity mixer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:122,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/audioprocessreverse/",title:"AudioProcessReverse",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool AudioProcessReverse(float[] buffer)
</code></pre>
<p>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo
canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>the audio buffer to process</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>false on error</td>
</tr>
</tbody>
</table>
`}),e.add({id:123,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/audioprocessreverse/",title:"AudioProcessReverse",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool AudioProcessReverse(float[] buffer)
</code></pre>
<p>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo
canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>the audio buffer to process</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>false on error</td>
</tr>
</tbody>
</table>
`}),e.add({id:124,href:"https://www.4players.io/odin/sdk/unity/classes/room/audioprocessreverse/",title:"AudioProcessReverse",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool AudioProcessReverse(float[] buffer)
</code></pre>
<p>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo
canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>the audio buffer to process</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>false on error</td>
</tr>
</tbody>
</table>
`}),e.add({id:125,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audiopushdatabuffer">AudioPushData(buffer)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
</tbody>
</table>
<h3 id="audiopushdatabuffer-length">AudioPushData(buffer, length)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
`}),e.add({id:126,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackstream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override void AudioPushData(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:127,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audiopushdatabuffer">AudioPushData(buffer)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
</tbody>
</table>
<h3 id="audiopushdatabuffer-length">AudioPushData(buffer, length)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
`}),e.add({id:128,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushData(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:129,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audiopushdatabuffer">AudioPushData(buffer)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
</tbody>
</table>
<h3 id="audiopushdatabuffer-length">AudioPushData(buffer, length)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
`}),e.add({id:130,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushData(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:131,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audiopushdatabuffer-length">AudioPushData(buffer, length)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h3 id="audiopushdatabuffer">AudioPushData(buffer)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:132,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushData(float[] buffer, int length)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:133,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushData(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:134,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audiopushdatabuffer-length">AudioPushData(buffer, length)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer, int length)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to write</td>
</tr>
</tbody>
</table>
<h3 id="audiopushdatabuffer">AudioPushData(buffer)</h3>
<pre><code class="language-C#">public virtual void AudioPushData(float[] buffer)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:135,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushData(float[] buffer, int length)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:136,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstream/audiopushdata/",title:"AudioPushData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushData(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:137,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual async void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.
The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:138,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackstream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:139,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.
The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:140,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:141,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.
The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:142,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:143,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.
The data has to be interleaved [-1, 1] float data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:144,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:145,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.
The data has to be interleaved [-1, 1] float data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
</tbody>
</table>
`}),e.add({id:146,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstream/audiopushdataasync/",title:"AudioPushDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void AudioPushDataAsync(float[] buffer)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:147,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:148,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackstream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:149,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:150,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:151,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:152,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:153,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:154,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:155,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>interleaved audio data</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:156,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstream/audiopushdatatask/",title:"AudioPushDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task AudioPushDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioPushDataTask and AudioPushDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Remote streams are always readonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:157,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioreaddatabuffer">AudioReadData(buffer)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h3 id="audioreaddatabuffer-length">AudioReadData(buffer, length)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:158,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonestream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override uint AudioReadData(float[] buffer)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:159,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioreaddatabuffer">AudioReadData(buffer)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h3 id="audioreaddatabuffer-length">AudioReadData(buffer, length)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:160,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonestream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override uint AudioReadData(float[] buffer)
</code></pre>
<p>AudioReadData is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:161,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioreaddatabuffer">AudioReadData(buffer)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h3 id="audioreaddatabuffer-length">AudioReadData(buffer, length)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:162,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonestream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override uint AudioReadData(float[] buffer)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:163,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioreaddatabuffer">AudioReadData(buffer)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
</code></pre>
<p>Reads data from the audio stream.</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h3 id="audioreaddatabuffer-length">AudioReadData(buffer, length)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:164,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override uint AudioReadData(float[] buffer)
</code></pre>
<p>AudioReadData is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:165,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioreaddatabuffer">AudioReadData(buffer)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer)
</code></pre>
<p>Reads data from the audio stream.</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
<h3 id="audioreaddatabuffer-length">AudioReadData(buffer, length)</h3>
<pre><code class="language-C#">public virtual uint AudioReadData(float[] buffer, int length)
</code></pre>
<p>Reads data from the audio stream.</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>length</td>
<td>Int32</td>
<td>bytes to read</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:166,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreaddata/",title:"AudioReadData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override uint AudioReadData(float[] buffer)
</code></pre>
<p>AudioReadData is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:167,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual async Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:168,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonestream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:169,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:170,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonestream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>AudioReadDataAsync is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:171,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:172,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonestream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:173,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:174,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>AudioReadDataAsync is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:175,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual async Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:176,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreaddataasync/",title:"AudioReadDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataAsync(float[] buffer)
</code></pre>
<p>AudioReadDataAsync is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:177,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:178,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonestream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:179,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if IsPaused NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:180,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonestream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioReadDataTask is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:181,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Reads data from the audio stream.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a> NOP</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:182,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonestream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:183,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Reads data from the audio stream.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:184,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioReadDataTask is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:185,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>Reads data from the audio stream.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td>buffer to write into</td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>count of written bytes into buffer</td>
</tr>
</tbody>
</table>
`}),e.add({id:186,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreaddatatask/",title:"AudioReadDataTask",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override Task&lt;uint&gt; AudioReadDataTask(float[] buffer, CancellationToken cancellationToken)
</code></pre>
<p>AudioReadDataTask is not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Microphone streams are always writeonly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>cancellationToken</td>
<td>CancellationToken</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;UInt32&gt;</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:187,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/audioresample/",title:"AudioResample",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioresampleinput-outputsamplerate-output-capacity">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
</tbody>
</table>
<h3 id="audioresampleinput-outputsamplerate-output-capacity-1">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>source buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>to samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>target buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>target capacity</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
`}),e.add({id:188,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audioresample/",title:"AudioResample",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioresampleinput-outputsamplerate-output-capacity">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
</tbody>
</table>
<h3 id="audioresampleinput-outputsamplerate-output-capacity-1">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>source buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>to samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>target buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>target capacity</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
`}),e.add({id:189,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/audioresample/",title:"AudioResample",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioresampleinput-outputsamplerate-output-capacity">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
</tbody>
</table>
<h3 id="audioresampleinput-outputsamplerate-output-capacity-1">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>source buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>to samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>target buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>target capacity</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
`}),e.add({id:190,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audioresample/",title:"AudioResample",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioresampleinput-outputsamplerate-output-capacity">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
</tbody>
</table>
<h3 id="audioresampleinput-outputsamplerate-output-capacity-1">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>source buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>to samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>target buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>target capacity</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
`}),e.add({id:191,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audioresample/",title:"AudioResample",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="audioresampleinput-outputsamplerate-output-capacity">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual bool AudioResample(float[] input, uint outputSampleRate, out float[] output, out int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>current buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>resample samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>resampled buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>size of resampled buffer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false if missmatch of capacity i.e. errorcode</td>
</tr>
</tbody>
</table>
<h3 id="audioresampleinput-outputsamplerate-output-capacity-1">AudioResample(input, outputSampleRate, output, capacity)</h3>
<pre><code class="language-C#">public virtual uint AudioResample(float[] input, uint outputSampleRate, float[] output, int capacity)
</code></pre>
<p>Set a resampler and resamples a chunk of audio.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is intended for situations where the audio output pipeline doesn't support 48kHz.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>input</td>
<td>Single[]</td>
<td>source buffer</td>
</tr>
<tr>
<td>outputSampleRate</td>
<td>UInt32</td>
<td>to samplerate</td>
</tr>
<tr>
<td>output</td>
<td>Single[]</td>
<td>target buffer</td>
</tr>
<tr>
<td>capacity</td>
<td>Int32</td>
<td>target capacity</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>sample count on success or errorcode on failure</td>
</tr>
</tbody>
</table>
`}),e.add({id:192,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public abstract bool AudioReset()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:193,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonestream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioReset()
</code></pre>
<p>AudioReset is not supported!</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:194,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioReset()
</code></pre>
<p>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>True, if reset was successful</td>
</tr>
</tbody>
</table>
`}),e.add({id:195,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public abstract bool AudioReset()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:196,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioReset()
</code></pre>
<p>AudioReset is not supported!</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:197,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioReset()
</code></pre>
<p>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>True, if reset was successful</td>
</tr>
</tbody>
</table>
`}),e.add({id:198,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public abstract bool AudioReset()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:199,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioReset()
</code></pre>
<p>AudioReset is not supported!</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:200,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstream/audioreset/",title:"AudioReset",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioReset()
</code></pre>
<p>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>True, if reset was successful</td>
</tr>
</tbody>
</table>
`}),e.add({id:201,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)
</code></pre>
<p>Retrieves statistics for the specified Media.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will only work for remote/output streams.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stats</td>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td>Audio stream statistics</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:202,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonestream/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will only work for remote/output streams.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stats</td>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td>Audio stream statistics</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:203,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)
</code></pre>
<p>Retrieves statistics for the specified Media.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will only work for remote/output streams.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stats</td>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td>Audio stream statistics</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:204,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will only work for remote/output streams.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stats</td>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td>Audio stream statistics</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:205,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)
</code></pre>
<p>Retrieves statistics for the specified Media.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will only work for remote/output streams.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stats</td>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td>Audio stream statistics</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:206,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override bool AudioStats(out NativeBindings.OdinAudioStreamStats stats)
</code></pre>
<p>AudioReadData and AudioReadDataAsync are not supported!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will only work for remote/output streams.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>stats</td>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td>Audio stream statistics</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>throws OdinWrapperException</td>
</tr>
</tbody>
</table>
`}),e.add({id:207,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/audiostats/",title:"AudioStats",section:"ODIN Documentation",description:"Internal encoder/decoder stats updates.",content:`<pre><code class="language-C#">OdinAudioStatsEvent
</code></pre>
<p>Internal encoder/decoder stats updates.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinaudiostatsevent/">OdinAudioStatsEvent</a></p>
`}),e.add({id:208,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/autodestroyaudiosource/",title:"AutoDestroyAudioSource",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak (AudioSource) or false for manually manage sources ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool AutoDestroyAudioSource
</code></pre>
<p>On true destroy the <a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak
<see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
or false for manually manage sources</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:209,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/autodestroyaudiosource/",title:"AutoDestroyAudioSource",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak (AudioSource) or false for manually manage sources ",content:`<pre><code class="language-C#">public bool AutoDestroyAudioSource
</code></pre>
<p>On true destroy the <a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak
<see cref="!:UnityEngine.AudioSource"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
or false for manually manage sources</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:210,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/autodestroyaudiosource/",title:"AutoDestroyAudioSource",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak (AudioSource) or false for manually manage sources ",content:`<pre><code class="language-C#">public bool AutoDestroyAudioSource
</code></pre>
<p>On true destroy the <a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak
<see cref="!:UnityEngine.AudioSource"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
or false for manually manage sources</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:211,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/autodestroyaudiosource/",title:"AutoDestroyAudioSource",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak (AudioSource) or false for manually manage sources ",content:`<pre><code class="language-C#">public bool AutoDestroyAudioSource
</code></pre>
<p>On true destroy the PlaybackComponent in dispose to not leak
<see cref="!:UnityEngine.AudioSource"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
or false for manually manage sources</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:212,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/autodestroyaudiosource/",title:"AutoDestroyAudioSource",section:"ODIN Documentation",description:" Flag for destroy linked AudioSource ",content:`<pre><code class="language-C#">public bool AutoDestroyAudioSource
</code></pre>
<p>Flag for destroy <a href="/odin/sdk/unity/2.0.0/classes/odinmedia/playback/">Playback</a> linked AudioSource</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:213,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/autodestroyaudiosource/",title:"AutoDestroyAudioSource",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak (AudioSource) or false for manually manage sources ",content:`<pre><code class="language-C#">public bool AutoDestroyAudioSource
</code></pre>
<p>On true destroy the <a href="/odin/sdk/unity/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak
<see cref="!:UnityEngine.AudioSource"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
or false for manually manage sources</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:214,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/autodestroymediastream/",title:"AutoDestroyMediaStream",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak or false for manually manage stream ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool AutoDestroyMediaStream
</code></pre>
<p>On true destroy the Media in dispose to not leak
or false for manually manage stream</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>On room leave/destroy the underlying streams will still be freed up</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:215,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/autodestroymediastream/",title:"AutoDestroyMediaStream",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak or false for manually manage stream ",content:`<pre><code class="language-C#">public bool AutoDestroyMediaStream
</code></pre>
<p>On true destroy the Media in dispose to not leak
or false for manually manage stream</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>On room leave/destroy the underlying streams will still be freed up</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:216,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/autodestroymediastream/",title:"AutoDestroyMediaStream",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak or false for manually manage stream ",content:`<pre><code class="language-C#">public bool AutoDestroyMediaStream
</code></pre>
<p>On true destroy the Media in dispose to not leak
or false for manually manage stream</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>On room leave/destroy the underlying streams will still be freed up</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:217,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/autodestroymediastream/",title:"AutoDestroyMediaStream",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak or false for manually manage stream ",content:`<pre><code class="language-C#">public bool AutoDestroyMediaStream
</code></pre>
<p>On true destroy the Media in dispose to not leak
or false for manually manage stream</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>On room leave/destroy the underlying streams will still be freed up</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:218,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/autodestroymediastream/",title:"AutoDestroyMediaStream",section:"ODIN Documentation",description:" Flag for dispose of ",content:`<pre><code class="language-C#">public bool AutoDestroyMediaStream
</code></pre>
<p>Flag for dispose of <a href="/odin/sdk/unity/2.0.0/classes/odinmedia/mediadecoder/">MediaDecoder</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should only be set for unhandled or bound decoders</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:219,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/autodestroymediastream/",title:"AutoDestroyMediaStream",section:"ODIN Documentation",description:" On true destroy the in dispose to not leak or false for manually manage stream ",content:`<pre><code class="language-C#">public bool AutoDestroyMediaStream
</code></pre>
<p>On true destroy the Media in dispose to not leak
or false for manually manage stream</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>On room leave/destroy the underlying streams will still be freed up</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:220,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/autostartlisten/",title:"AutostartListen",section:"ODIN Documentation",description:" Use (Microphone.Start) in ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool AutostartListen
</code></pre>
<p>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:221,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/autostartlisten/",title:"AutostartListen",section:"ODIN Documentation",description:" Use (Microphone.Start) in ",content:`<pre><code class="language-C#">public bool AutostartListen
</code></pre>
<p>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:222,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/autostartlisten/",title:"AutostartListen",section:"ODIN Documentation",description:" Use (Microphone.Start) in ",content:`<pre><code class="language-C#">public bool AutostartListen
</code></pre>
<p>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:223,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/autostartlisten/",title:"AutostartListen",section:"ODIN Documentation",description:" Use (Microphone.Start) in ",content:`<pre><code class="language-C#">public bool AutostartListen
</code></pre>
<p>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:224,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/autostartlisten/",title:"AutostartListen",section:"ODIN Documentation",description:" Use UnityEngine.Microphone.Start (Microphone.Start) in ",content:`<pre><code class="language-C#">public bool AutostartListen
</code></pre>
<p>Use UnityEngine.Microphone.Start <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in OdinMicrophoneReader</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:225,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/autostartlisten/",title:"AutostartListen",section:"ODIN Documentation",description:" Use (Microphone.Start) in ",content:`<pre><code class="language-C#">public bool AutostartListen
</code></pre>
<p>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:226,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/availableencoderids/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:227,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onconnectionstatuschanged/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:228,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/ondatagram/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:229,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onmediastarted/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:230,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onmediastopped/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:231,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onmessagereceived/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:232,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onpeerjoined/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:233,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onpeerleft/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:234,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onroomjoined/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:235,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onrpc/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:236,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onsendrpcresponse/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:237,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/onuserdatachanged/",title:"AvailableEncoderIds",section:"ODIN Documentation",description:" Available media ids that are reserved for the room ",content:`<pre><code class="language-C#">public Queue&lt;ushort&gt; AvailableEncoderIds
</code></pre>
<p>Available media ids that are reserved for the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Contains a set of reserved ids that are free to use with input medias by the server.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Queue&lt;UInt16&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:238,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/bin16/",title:"Bin16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Bin16 = 197
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:239,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/bin32/",title:"Bin32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Bin32 = 198
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:240,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/bin8/",title:"Bin8",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Bin8 = 196
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:241,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/nativebindings/blocksamplerate/",title:"BlockSamplerate",section:"ODIN Documentation",description:" Block_SAMPLE_RATE ",content:`<pre><code class="language-C#">public const uint BlockSamplerate = 48000U
</code></pre>
<p>Block_SAMPLE_RATE</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:242,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/nativebindings/blocksamplerate/",title:"BlockSamplerate",section:"ODIN Documentation",description:" Block_SAMPLE_RATE ",content:`<pre><code class="language-C#">public const uint BlockSamplerate = 48000U
</code></pre>
<p>Block_SAMPLE_RATE</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:243,href:"https://www.4players.io/odin/sdk/unity/classes/nativebindings/blocksamplerate/",title:"BlockSamplerate",section:"ODIN Documentation",description:" Block_SAMPLE_RATE ",content:`<pre><code class="language-C#">public const uint BlockSamplerate = 48000U
</code></pre>
<p>Block_SAMPLE_RATE</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:244,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void BroadcastMessage(byte[] data)
</code></pre>
<p>Sends arbitrary data to a all remote peers in all rooms</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
`}),e.add({id:245,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool BroadcastMessage(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:246,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void BroadcastMessage(byte[] data)
</code></pre>
<p>Sends arbitrary data to a all remote peers in all rooms</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
`}),e.add({id:247,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool BroadcastMessage(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:248,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void BroadcastMessage(byte[] data)
</code></pre>
<p>Sends arbitrary data to a all remote peers in all rooms</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
`}),e.add({id:249,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool BroadcastMessage(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:250,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void BroadcastMessage(byte[] data)
</code></pre>
<p>Sends arbitrary data to a all remote peers in all rooms</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
`}),e.add({id:251,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool BroadcastMessage(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:252,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void BroadcastMessage(byte[] data)
</code></pre>
<p>Sends arbitrary data to a all remote peers in all rooms</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
`}),e.add({id:253,href:"https://www.4players.io/odin/sdk/unity/classes/room/broadcastmessage/",title:"BroadcastMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool BroadcastMessage(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:254,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/broadcastmessageasync/",title:"BroadcastMessageAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;bool&gt; BroadcastMessageAsync(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer get the message too</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:255,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/broadcastmessageasync/",title:"BroadcastMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; BroadcastMessageAsync(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer get the message too</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:256,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/broadcastmessageasync/",title:"BroadcastMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; BroadcastMessageAsync(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer get the message too</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:257,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/broadcastmessageasync/",title:"BroadcastMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; BroadcastMessageAsync(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer get the message too</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:258,href:"https://www.4players.io/odin/sdk/unity/classes/room/broadcastmessageasync/",title:"BroadcastMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; BroadcastMessageAsync(byte[] data, bool includeSelf = false)
</code></pre>
<p>Sends arbitrary data to a all remote peers in this room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>idicates whether this current peer get the message too</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:259,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/broadcastsendmessage/",title:"BroadcastSendMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void BroadcastSendMessage(string message)
</code></pre>
<p>Send a message to all rooms with the default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>String</td>
<td>UTF8 string</td>
</tr>
</tbody>
</table>
`}),e.add({id:260,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/buffer/",title:"Buffer",section:"ODIN Documentation",description:" Raw UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public byte[] Buffer { get; set; }
</code></pre>
<p>Raw UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:261,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/buffer/",title:"Buffer",section:"ODIN Documentation",description:" Raw UserData ",content:`<pre><code class="language-C#">public byte[] Buffer { get; set; }
</code></pre>
<p>Raw UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:262,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/buffer/",title:"Buffer",section:"ODIN Documentation",description:" Raw UserData ",content:`<pre><code class="language-C#">public byte[] Buffer { get; set; }
</code></pre>
<p>Raw UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:263,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/buffer/",title:"Buffer",section:"ODIN Documentation",description:" Raw UserData ",content:`<pre><code class="language-C#">public byte[] Buffer { get; set; }
</code></pre>
<p>Raw UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:264,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/buffer/",title:"Buffer",section:"ODIN Documentation",description:" Raw UserData ",content:`<pre><code class="language-C#">public byte[] Buffer { get; set; }
</code></pre>
<p>Raw UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:265,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/buffer/",title:"Buffer",section:"ODIN Documentation",description:" Raw UserData ",content:`<pre><code class="language-C#">public byte[] Buffer { get; set; }
</code></pre>
<p>Raw UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:266,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinrpc/bytes/",title:"bytes",section:"ODIN Documentation",description:" byte[] ",content:`<pre><code class="language-C#">public IntPtr bytes
</code></pre>
<p><code>byte[]</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:267,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinrpc/bytes_length/",title:"bytes_length",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt32 bytes_length
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:268,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/calculatermsdbfs/",title:"CalculateRmsDbfs",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public double CalculateRmsDbfs()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Double</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:269,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/cancel/",title:"Cancel",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Cancel()
</code></pre>
<p>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if the token was canceled or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:270,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/cancel/",title:"Cancel",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Cancel()
</code></pre>
<p>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if the token was canceled or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:271,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/cancel/",title:"Cancel",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Cancel()
</code></pre>
<p>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if the token was canceled or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:272,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/cancel/",title:"Cancel",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Cancel()
</code></pre>
<p>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if the token was canceled or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:273,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/cancel/",title:"Cancel",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Cancel()
</code></pre>
<p>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if the token was canceled or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:274,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/cancellationsource/",title:"CancellationSource",section:"ODIN Documentation",description:" Control of async read and write tasks ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public CancellationTokenSource CancellationSource { get; }
</code></pre>
<p>Control of async read and write tasks</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CancellationTokenSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:275,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/cancellationsource/",title:"CancellationSource",section:"ODIN Documentation",description:" Control of async read and write tasks ",content:`<pre><code class="language-C#">public CancellationTokenSource CancellationSource { get; }
</code></pre>
<p>Control of async read and write tasks</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CancellationTokenSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:276,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/cancellationsource/",title:"CancellationSource",section:"ODIN Documentation",description:" Control of async read and write tasks ",content:`<pre><code class="language-C#">public CancellationTokenSource CancellationSource { get; }
</code></pre>
<p>Control of async read and write tasks</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CancellationTokenSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:277,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/cancellationsource/",title:"CancellationSource",section:"ODIN Documentation",description:" Control of async read and write tasks ",content:`<pre><code class="language-C#">public CancellationTokenSource CancellationSource { get; }
</code></pre>
<p>Control of async read and write tasks</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CancellationTokenSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:278,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/cancellationsource/",title:"CancellationSource",section:"ODIN Documentation",description:" Control of async read and write tasks ",content:`<pre><code class="language-C#">public CancellationTokenSource CancellationSource { get; }
</code></pre>
<p>Control of async read and write tasks</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CancellationTokenSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:279,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/changemediastream/",title:"changeMediaStream",section:"ODIN Documentation",description:"Changes the active capture stream (e.g. when switching to another input device).",content:`<pre><code class="language-C#">changeMediaStream(mediaStream: MediaStream): Promise&lt;void&gt;
</code></pre>
<p>Changes the active capture stream (e.g. when switching to another input device).</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStream</td>
<td>MediaStream</td>
<td>The capture stream of the input device</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:280,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/changereason/",title:"ChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionStateChangeReason ChangeReason { get; }
</code></pre>
<p>Reason of connection state</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:281,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/changereason/",title:"ChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionStateChangeReason ChangeReason { get; }
</code></pre>
<p>Reason of connection state</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:282,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/changereason/",title:"ChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionStateChangeReason ChangeReason { get; }
</code></pre>
<p>Reason of connection state</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:283,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/changereason/",title:"ChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionStateChangeReason ChangeReason { get; }
</code></pre>
<p>Reason of connection state</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:284,href:"https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/changereason/",title:"ChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionStateChangeReason ChangeReason { get; }
</code></pre>
<p>Reason of connection state</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:285,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/changevolume/",title:"changeVolume",section:"ODIN Documentation",description:"Changes the playback volume of the media.",content:`<pre><code class="language-C#">changeVolume(volume: number): void
</code></pre>
<p>Changes the playback volume of the media.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>volume</td>
<td>number</td>
<td>The new volume (Default is 1)</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:286,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/changevolume/",title:"changeVolume",section:"ODIN Documentation",description:"Change the global master volume for the room (should be between 0 and 2).",content:`<pre><code class="language-C#">changeVolume(volume: number): void
</code></pre>
<p>Change the global master volume for the room (should be between 0 and 2).</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>volume</td>
<td>number</td>
<td>The new volume</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:287,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinmediaconfig/channels/",title:"Channels",section:"ODIN Documentation",description:" The number of audio channels ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaChannels Channels { get; set; }
</code></pre>
<p>The number of audio channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:288,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinmediaconfig/channels/",title:"Channels",section:"ODIN Documentation",description:" The number of audio channels ",content:`<pre><code class="language-C#">public MediaChannels Channels { get; set; }
</code></pre>
<p>The number of audio channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:289,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinmediaconfig/channels/",title:"Channels",section:"ODIN Documentation",description:" The number of audio channels ",content:`<pre><code class="language-C#">public MediaChannels Channels { get; set; }
</code></pre>
<p>The number of audio channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:290,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinmediaconfig/channels/",title:"Channels",section:"ODIN Documentation",description:" The number of audio channels ",content:`<pre><code class="language-C#">public MediaChannels Channels { get; set; }
</code></pre>
<p>The number of audio channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:291,href:"https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/channels/",title:"Channels",section:"ODIN Documentation",description:" The number of audio channels ",content:`<pre><code class="language-C#">public MediaChannels Channels { get; set; }
</code></pre>
<p>The number of audio channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:292,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/checkresetframebuffer/",title:"CheckResetFrameBuffer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CheckResetFrameBuffer(float audioBufferSize)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audioBufferSize</td>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:293,href:"https://www.4players.io/odin/sdk/nodejs/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all Classes available in the ODIN Unity SDK",content:`<p>The ODIN JavaScript SDK has defined these Classes:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/classes/odinclient/">OdinClient</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/">OdinMedia</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></li>
</span>
</ul>
`}),e.add({id:294,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all classes available in the ODIN Unity SDK",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p>The Unity SDK consists of these classes:</p>
<h2 id="unity-components">Unity Components</h2>
<p>You typically interact with these components directly in the Unity Editor. Check out the <a href="/odin/sdk/unity/manual/">manual</a>
on how to use these components in the Unity editor.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/">MicrophoneReader</a></td>
<td>Handles microphone input data and sends input to ODIN</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>Handles the Playback for received ODIN audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinbanner/">OdinBanner</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="utility-classes">Utility Classes</h2>
<p>Many of these classes are used internally or you rarely need to work with these.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/nativebindings/">NativeBindings</a></td>
<td>C# bindings for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinexception/">OdinException</a></td>
<td>Exception type for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibrary/">OdinLibrary</a></td>
<td>Main lib entry class</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>A set of values that are used when initializing the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>ODIN audio stream configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/utility/">Utility</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/">MediaCollection</a></td>
<td>Internal collection of available media streams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>Base stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/">MicrophoneStream</a></td>
<td>Representation of a write only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/">PlaybackStream</a></td>
<td>Representation of a read only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/">OdinClient</a></td>
<td>Client Wrapper for ODIN ffi OdinLibrary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/">OdinDefaults</a></td>
<td>ODIN default configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>Client/Remote peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/">PeerCollection</a></td>
<td>Intern peer dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments for ConnectionStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments for MediaActiveStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments for MediaAdded events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments for MediaRemoved events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments for MessageReceived events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments for PeerJoined events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments for PeerLeft events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments for PeerUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>Main Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/">RoomCollection</a></td>
<td>Intern room dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/">RoomConfig</a></td>
<td>A set of values that are used when creating Rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoineventargs/">RoomJoinEventArgs</a></td>
<td>Arguments for RoomJoin events right before the room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinedeventargs/">RoomJoinedEventArgs</a></td>
<td>Arguments for RoomJoined events when the room was joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleaveeventargs/">RoomLeaveEventArgs</a></td>
<td>Arguments for RoomLeave events right before the room handle is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomlefteventargs/">RoomLeftEventArgs</a></td>
<td>Arguments for RoomLeft events when the room handle was destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments for RoomUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>UnityEditor UI component for instance config of Odin</td>
</tr>
</tbody>
</table>
`}),e.add({id:295,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all classes available in the ODIN Unity SDK",content:`<p>The Unity SDK consists of these classes:</p>
<h2 id="unity-components">Unity Components</h2>
<p>You typically interact with these components directly in the Unity Editor. Check out the <a href="/odin/sdk/unity/manual/">manual</a>
on how to use these components in the Unity editor.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/">MicrophoneReader</a></td>
<td>Handles microphone input data and sends input to ODIN</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>Handles the Playback for received ODIN audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/">PlaybackStats</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinbanner/">OdinBanner</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>UnityEditor UI component for instance config of Odin</td>
</tr>
</tbody>
</table>
<h2 id="utility-classes">Utility Classes</h2>
<p>Many of these classes are used internally or you rarely need to work with these.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/nativebindings/">NativeBindings</a></td>
<td>C# bindings for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinexception/">OdinException</a></td>
<td>Exception type for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibrary/">OdinLibrary</a></td>
<td>Main lib entry class</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>A set of values that are used when initializing the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>ODIN audio stream configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/utility/">Utility</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/">MediaCollection</a></td>
<td>Internal collection of available media streams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>Base stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/">MicrophoneStream</a></td>
<td>Representation of a write only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/">PlaybackStream</a></td>
<td>Representation of a read only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/">OdinClient</a></td>
<td>Client Wrapper for ODIN ffi OdinLibrary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/">OdinDefaults</a></td>
<td>ODIN default configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>Client/Remote peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/">PeerCollection</a></td>
<td>Intern peer dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments for ConnectionStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments for MediaActiveStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments for MediaAdded events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments for MediaRemoved events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments for MessageReceived events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments for PeerJoined events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments for PeerLeft events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments for PeerUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>Main Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/">RoomCollection</a></td>
<td>Intern room dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/">RoomConfig</a></td>
<td>A set of values that are used when creating Rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoineventargs/">RoomJoinEventArgs</a></td>
<td>Arguments for RoomJoin events right before the room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinedeventargs/">RoomJoinedEventArgs</a></td>
<td>Arguments for RoomJoined events when the room was joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleaveeventargs/">RoomLeaveEventArgs</a></td>
<td>Arguments for RoomLeave events right before the room handle is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomlefteventargs/">RoomLeftEventArgs</a></td>
<td>Arguments for RoomLeft events when the room handle was destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments for RoomUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
</tbody>
</table>
`}),e.add({id:296,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all classes available in the ODIN Unity SDK",content:`<p>The Unity SDK consists of these classes:</p>
<h2 id="unity-components">Unity Components</h2>
<p>You typically interact with these components directly in the Unity Editor. Check out the <a href="/odin/sdk/unity/manual/">manual</a>
on how to use these components in the Unity editor.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/">MicrophoneReader</a></td>
<td>Handles microphone input data and sends input to ODIN</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>Handles the Playback for received ODIN audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/">PlaybackStats</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinbanner/">OdinBanner</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="utility-classes">Utility Classes</h2>
<p>Many of these classes are used internally or you rarely need to work with these.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/nativebindings/">NativeBindings</a></td>
<td>C# bindings for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinexception/">OdinException</a></td>
<td>Exception type for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibrary/">OdinLibrary</a></td>
<td>Main lib entry class</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>A set of values that are used when initializing the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>ODIN audio stream configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/utility/">Utility</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/">MediaCollection</a></td>
<td>Internal collection of available media streams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>Base stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/">MicrophoneStream</a></td>
<td>Representation of a write only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/">PlaybackStream</a></td>
<td>Representation of a read only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/">OdinClient</a></td>
<td>Client Wrapper for ODIN ffi OdinLibrary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/">OdinDefaults</a></td>
<td>ODIN default configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>Client/Remote peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/">PeerCollection</a></td>
<td>Intern peer dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments for ConnectionStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments for MediaActiveStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments for MediaAdded events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments for MediaRemoved events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments for MessageReceived events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments for PeerJoined events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments for PeerLeft events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments for PeerUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>Main Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/">RoomCollection</a></td>
<td>Intern room dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/">RoomConfig</a></td>
<td>A set of values that are used when creating Rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoineventargs/">RoomJoinEventArgs</a></td>
<td>Arguments for RoomJoin events right before the room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinedeventargs/">RoomJoinedEventArgs</a></td>
<td>Arguments for RoomJoined events when the room was joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleaveeventargs/">RoomLeaveEventArgs</a></td>
<td>Arguments for RoomLeave events right before the room handle is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomlefteventargs/">RoomLeftEventArgs</a></td>
<td>Arguments for RoomLeft events when the room handle was destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments for RoomUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>UnityEditor UI component for instance config of Odin</td>
</tr>
</tbody>
</table>
`}),e.add({id:297,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all classes available in the ODIN Unity SDK",content:`<p>The Unity SDK consists of these classes:</p>
<h2 id="unity-components">Unity Components</h2>
<p>You typically interact with these components directly in the Unity Editor. Check out the <a href="/odin/sdk/unity/manual/">manual</a>
on how to use these components in the Unity editor.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/">MicrophoneReader</a></td>
<td>Handles microphone input data and sends input to ODIN</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinbanner/">OdinBanner</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>UnityEditor UI component for instance config of Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/">OdinHandler</a></td>
<td>The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>Handles the Playback for received ODIN audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/">PlaybackStats</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="utility-classes">Utility Classes</h2>
<p>Many of these classes are used internally or you rarely need to work with these.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments for ConnectionStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments for MediaActiveStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments for MediaAdded events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/">MediaCollection</a></td>
<td>Internal collection of available media streams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments for MediaRemoved events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>Base stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments for MessageReceived events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/">MicrophoneStream</a></td>
<td>Representation of a write only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/nativebindings/">NativeBindings</a></td>
<td>C# bindings for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/">OdinClient</a></td>
<td>Client Wrapper for ODIN ffi OdinLibrary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/">OdinDefaults</a></td>
<td>ODIN default configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinexception/">OdinException</a></td>
<td>Exception type for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibrary/">OdinLibrary</a></td>
<td>Main lib entry class</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>A set of values that are used when initializing the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>ODIN audio stream configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>Client/Remote peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/">PeerCollection</a></td>
<td>Intern peer dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments for PeerJoined events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments for PeerLeft events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments for PeerUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/">PlaybackStream</a></td>
<td>Representation of a read only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>Main Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/">RoomCollection</a></td>
<td>Intern room dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/">RoomConfig</a></td>
<td>A set of values that are used when creating Rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoineventargs/">RoomJoinEventArgs</a></td>
<td>Arguments for RoomJoin events right before the room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoinedeventargs/">RoomJoinedEventArgs</a></td>
<td>Arguments for RoomJoined events when the room was joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomleaveeventargs/">RoomLeaveEventArgs</a></td>
<td>Arguments for RoomLeave events right before the room handle is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomlefteventargs/">RoomLeftEventArgs</a></td>
<td>Arguments for RoomLeft events when the room handle was destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments for RoomUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/utility/">Utility</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:298,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all classes available in the ODIN Unity SDK",content:`<p>The Unity SDK consists of these classes:</p>
<h2 id="unity-components">Unity Components</h2>
<p>You typically interact with these components directly in the Unity Editor. Check out the <a href="/odin/sdk/unity/manual/">manual</a>
on how to use these components in the Unity editor.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/">OdinApmComponent</a></td>
<td>AudioProcessingModule component for Media <p> This class provides configuration for the native implemented audio processing. The supported processor/filter are applicable to Media which must be set. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/">OdinAudioReader</a></td>
<td>Handles audioclip input data and sends input to ODIN <p> This convenient class gathers input audio data from Unity to pass the data with OdinAudioReader event to other components. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinbanner/">OdinBanner</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnection/">OdinConnection</a></td>
<td>Wrapper class of Odin connections <p> This convenient class provides dispatching of events to Unity with passthrough <see cref="!:UnityEngine.Events.UnityEvent"></see> to support multiple rooms on fewer connections. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/">OdinCustomEffectUnityComponentBase<U></a></td>
<td>Custom base component for Media <p> This convenient class provides effect template with a passthrough of custom userdata on a callback. The abstract representation of a base custom effect is to simplify implementation of Audio as a Unity component. (see other predefined custom effects) </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>Wrapper class of Odin for Unity (require AudioSource) <p> This convenient class provides predefined helper functions to cover for a default usecases where the voice chat needs to work with AudioSource, AudioClip, AudioMixer, &hellip; </p> Default Unity GameObject altering functions: <ul><li>OdinMediaAdd OdinMuteAudioComponent to the current GameObject</li></ul></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/">OdinMicrophoneReader</a></td>
<td>Handles microphone input data and sends input to ODIN <p> This convenient class gathers input audio data from Unity managed Microphone to pass the data with OdinMicrophoneReader event to other components. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/">OdinPeer</a></td>
<td>Wrapper class of Odin for Unity <p> This convenient class provides dispatching of events to Unity with passthrough <see cref="!:UnityEngine.Events.UnityEvent"></see> as well as predefined helper functions to cover for a default usecases where the voice chat is visually and logical represented Unity gameobject that are manageable with the Unity editor. </p> Default Unity GameObject altering event callback functions: <ul><li>Unity component</li></ul></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/">OdinRoom</a></td>
<td>Wrapper class of Room for Unity. <p> This convenient class provides dispatching of events to Unity with passthrough <see cref="!:UnityEngine.Events.UnityEvent"></see> as well as predefined helper functions to cover for a default usecases where the voice chat is visually and logical represented Unity gameobject that are manageable with the Unity editor like Context menu, Inspector and/or Hierarchy window. </p> Default Unity GameObject altering event callback functions: <ul><li>ConnectionStatusState(SystemDestroy this components GameObject if the connection is closed i.e cleanup</li></ul></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/">OdinVadComponent</a></td>
<td>VoiceActivity component for Media <p> This class provides configuration for the native implemented voice detection. Supports speech recognition and/or a volume threshold. </p></td>
</tr>
</tbody>
</table>
<h2 id="utility-classes">Utility Classes</h2>
<p>Many of these classes are used internally or you rarely need to work with these.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/">ApmEffect</a></td>
<td>VoiceActivity effect for Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/arrayenumerable/">ArrayEnumerable</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments for ConnectionStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/">CustomEffect<T></a></td>
<td>Custom effect for Odin callbacks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/">DatagramEventArgs</a></td>
<td>Arguments for datagram events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagramproxy/">DatagramProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mapenumerable/">MapEnumerable</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments for MediaActiveStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments for MediaAdded events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>Odin Playback Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>Odin Capture Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>Odin audio pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments for MediaRemoved events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/">MediaRpcProperties</a></td>
<td>arbitrary media data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagepackreaderexception/">MessagePackReaderException</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments for MessageReceived events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/">MsgPackToken</a></td>
<td><a href="https://github.com/msgpack/msgpack/blob/master/spec.md"><a href="https://github.com/msgpack/msgpack/blob/master/spec.md">https://github.com/msgpack/msgpack/blob/master/spec.md</a></a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/">MsgPackWriter</a></td>
<td>Rudimentary Msgpack implementation that will be used for sending RPC to the server.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/nativebindings/">NativeBindings</a></td>
<td>C# bindings for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/notification/">Notification</a></td>
<td>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/">OdinAudioData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/">OdinAudioMediaCallbackMarshal</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/">OdinAudioMediaMarshal</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/">OdinClient</a></td>
<td>Client Wrapper for ODIN ffi <code>OdinNative.Core.OdinLibrary.NativeMethods</code></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/">OdinColliderFilterComponent</a></td>
<td>Custom filter by collider component for Media <p> This class is a effect in the odin audio pipline to mute audio based on GameObject collisions in Unity space. The effect can help to trigger specific audio packets quickly without the adjustment of Server-side positions. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/">OdinConnectionPoolHandle</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindecoderhandle/">OdinDecoderHandle</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/">OdinDefaults</a></td>
<td>ODIN default configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinencoderhandle/">OdinEncoderHandle</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinexception/">OdinException</a></td>
<td>Exception type for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibrary/">OdinLibrary</a></td>
<td>Main lib entry class</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>A set of values that are used when initializing the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/">OdinMediaData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/">OdinMuteAudioComponent</a></td>
<td>Custom mute audio component for Media <p> This class is a effect in the odin audio pipline to mute based on the OdinMuteAudioComponent flag. The intention is to provide a convenient way with Unity Editor UI of Marshal a 1-byte signed integer bool for a specific audio packet in the current pipline. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpipelinehandle/">OdinPipelineHandle</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroomhandle/">OdinRoomHandle</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/">OdinTerrainFilterComponent</a></td>
<td>Custom filter by terrain component for Media <p> This class is a effect in the odin audio pipline to mute audio based on location of a GameObject relative to a terrain type in Unity space. Note that the default implementation is Unity specific on a 2D calculation with X, Z and is not useful in all occlusions. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odintokengeneratorhandle/">OdinTokenGeneratorHandle</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/">OdinVolumeBoostComponent</a></td>
<td>Custom volume scale component for Media <p> This class is a effect in the odin audio pipline to scale each sample individually in the buffer. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/">OdinVolumeComponent</a></td>
<td>Custom volume component for Media. Recommend the use of AudioSource.volume or AudioMixer/AudioMixerGroup instead <p> This class is a effect in the odin audio pipline to change audio buffers by amplify the volume level. </p></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/">PeerEntity</a></td>
<td>Client/Remote peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments for PeerJoined events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments for PeerLeft events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments for PeerUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/request/">Request</a></td>
<td>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/response/">Response</a></td>
<td>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Main Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/">RoomCollection</a></td>
<td>Intern room dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoineventargs/">RoomJoinEventArgs</a></td>
<td>Arguments for RoomJoin events right before the room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoinedeventargs/">RoomJoinedEventArgs</a></td>
<td>Arguments for RoomJoined events when the room was joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomleaveeventargs/">RoomLeaveEventArgs</a></td>
<td>Arguments for RoomLeave events right before the room handle is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomlefteventargs/">RoomLeftEventArgs</a></td>
<td>Arguments for RoomLeft events when the room handle was destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments for RoomUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpceventargs/">RpcEventArgs</a></td>
<td>Arguments for rpc events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcformat/">RpcFormat</a></td>
<td>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcproxy/">RpcProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcresult/">RpcResult</a></td>
<td>Result of send rpc responses <pre><code>msgid, (method, params, error, result)</code></pre></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/unityaudiodata/">UnityAudioData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/">Utility</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td>VoiceActivity effect for Odin</td>
</tr>
</tbody>
</table>
`}),e.add({id:299,href:"https://www.4players.io/odin/sdk/unity/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all classes available in the ODIN Unity SDK",content:`<p>The Unity SDK consists of these classes:</p>
<h2 id="unity-components">Unity Components</h2>
<p>You typically interact with these components directly in the Unity Editor. Check out the <a href="/odin/sdk/unity/manual/">manual</a>
on how to use these components in the Unity editor.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/">MicrophoneReader</a></td>
<td>Handles microphone input data and sends input to ODIN</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinbanner/">OdinBanner</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>UnityEditor UI component for instance config of Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/">OdinHandler</a></td>
<td>The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>Handles the Playback for received ODIN audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/">PlaybackStats</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="utility-classes">Utility Classes</h2>
<p>Many of these classes are used internally or you rarely need to work with these.</p>
<table>
<thead>
<tr>
<th>Component</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments for ConnectionStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments for MediaActiveStateChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments for MediaAdded events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/">MediaCollection</a></td>
<td>Internal collection of available media streams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments for MediaRemoved events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>Base stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments for MessageReceived events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/">MicrophoneStream</a></td>
<td>Representation of a write only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/nativebindings/">NativeBindings</a></td>
<td>C# bindings for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/">OdinClient</a></td>
<td>Client Wrapper for ODIN ffi OdinLibrary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/">OdinDefaults</a></td>
<td>ODIN default configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinexception/">OdinException</a></td>
<td>Exception type for the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibrary/">OdinLibrary</a></td>
<td>Main lib entry class</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>A set of values that are used when initializing the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>ODIN audio stream configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>Client/Remote peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/">PeerCollection</a></td>
<td>Intern peer dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments for PeerJoined events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments for PeerLeft events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments for PeerUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/">PlaybackStream</a></td>
<td>Representation of a read only audio stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>Main Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/">RoomCollection</a></td>
<td>Intern room dictionary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/">RoomConfig</a></td>
<td>A set of values that are used when creating Rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoineventargs/">RoomJoinEventArgs</a></td>
<td>Arguments for RoomJoin events right before the room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoinedeventargs/">RoomJoinedEventArgs</a></td>
<td>Arguments for RoomJoined events when the room was joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomleaveeventargs/">RoomLeaveEventArgs</a></td>
<td>Arguments for RoomLeave events right before the room handle is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomlefteventargs/">RoomLeftEventArgs</a></td>
<td>Arguments for RoomLeft events when the room handle was destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments for RoomUserDataChanged events in the current room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>This class provides the base functionality for UnityEvents based Room. A persistent callback that can be saved with the Scene. Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/utility/">Utility</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:300,href:"https://www.4players.io/odin/sdk/web/classes/",title:"Classes",section:"ODIN Documentation",description:"An index of all Classes available in the ODIN Unity SDK",content:`<p>The ODIN JavaScript SDK has defined these Classes:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/classes/odinclient/">OdinClient</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/classes/odinmedia/">OdinMedia</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/classes/odinpeer/">OdinPeer</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/classes/odinroom/">OdinRoom</a></li>
</span>
</ul>
`}),e.add({id:301,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/cleanupmanageddata/",title:"CleanUpManagedData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CleanUpManagedData(object managedObj)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>managedObj</td>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:302,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/cleanupmanageddata/",title:"CleanUpManagedData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CleanUpManagedData(object managedObj)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>managedObj</td>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:303,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/cleanupnativedata/",title:"CleanUpNativeData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CleanUpNativeData(IntPtr pNativeData)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pNativeData</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:304,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/cleanupnativedata/",title:"CleanUpNativeData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CleanUpNativeData(IntPtr pNativeData)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pNativeData</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:305,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:306,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:307,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:308,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:309,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:310,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:311,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:312,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:313,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:314,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:315,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:316,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:317,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Clear stream buffer</p>
`}),e.add({id:318,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:319,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void Clear()
</code></pre>
`}),e.add({id:320,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:321,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:322,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/clear/",title:"Clear",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Clear()
</code></pre>
<p>Free and empty the collection</p>
`}),e.add({id:323,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/clientid/",title:"ClientId",section:"ODIN Documentation",description:" Odin Client ID ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string ClientId
</code></pre>
<p>Odin Client ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Room token userId</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:324,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/clientid/",title:"ClientId",section:"ODIN Documentation",description:" Odin Client ID ",content:`<pre><code class="language-C#">public string ClientId
</code></pre>
<p>Odin Client ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Room token userId</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:325,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/clientid/",title:"ClientId",section:"ODIN Documentation",description:" Odin Client ID ",content:`<pre><code class="language-C#">public string ClientId
</code></pre>
<p>Odin Client ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Room token userId</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:326,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/clientid/",title:"ClientId",section:"ODIN Documentation",description:" Odin Client ID ",content:`<pre><code class="language-C#">public string ClientId
</code></pre>
<p>Odin Client ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Room token userId</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:327,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/clientid/",title:"ClientId",section:"ODIN Documentation",description:" Odin Client ID ",content:`<pre><code class="language-C#">public string ClientId
</code></pre>
<p>Odin Client ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Room token userId</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:328,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/clientrequested/",title:"ClientRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the user ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">ClientRequested = 0
</code></pre>
<p>Connection state change was initiated by the user</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:329,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/clientrequested/",title:"ClientRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the user ",content:`<pre><code class="language-C#">ClientRequested = 0
</code></pre>
<p>Connection state change was initiated by the user</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:330,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/clientrequested/",title:"ClientRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the user ",content:`<pre><code class="language-C#">ClientRequested = 0
</code></pre>
<p>Connection state change was initiated by the user</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:331,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/clientrequested/",title:"ClientRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the user ",content:`<pre><code class="language-C#">ClientRequested = 0
</code></pre>
<p>Connection state change was initiated by the user</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:332,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/clientrequested/",title:"ClientRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the user ",content:`<pre><code class="language-C#">ClientRequested = 0
</code></pre>
<p>Connection state change was initiated by the user</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:333,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/clone/",title:"Clone",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual UserData Clone()
</code></pre>
<p>Creates a shallow copy of the Buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>new instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:334,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/clone/",title:"Clone",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual UserData Clone()
</code></pre>
<p>Creates a shallow copy of the Buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>new instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:335,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/clone/",title:"Clone",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual UserData Clone()
</code></pre>
<p>Creates a shallow copy of the Buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>new instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:336,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/clone/",title:"Clone",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual UserData Clone()
</code></pre>
<p>Creates a shallow copy of the Buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td>new instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:337,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/clone/",title:"Clone",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual UserData Clone()
</code></pre>
<p>Creates a shallow copy of the Buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/">UserData</a></td>
<td>new instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:338,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/clone/",title:"Clone",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual UserData Clone()
</code></pre>
<p>Creates a shallow copy of the Buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td>new instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:339,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/close/",title:"close",section:"ODIN Documentation",description:"Closes the local audio stream and removed the media from the room",content:`<pre><code class="language-C#">public close(): void
</code></pre>
<p>Closes the local audio stream and removed the media from the room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:340,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/close/",title:"close",section:"ODIN Documentation",description:"Closes the room and disconnects from the server.",content:`<pre><code class="language-C#">public close(): void
</code></pre>
<p>Closes the room and disconnects from the server.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:341,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/close/",title:"Close",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Close()
</code></pre>
<p>Completly closes this Client and all Room associated.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should only be called in Loading-Screens or Scene transissions</p>
</div>
</div>

`}),e.add({id:342,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/close/",title:"Close",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Close()
</code></pre>
<p>Completly closes this Client and all Room associated.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should only be called in Loading-Screens or Scene transissions</p>
</div>
</div>

`}),e.add({id:343,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/close/",title:"Close",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Close()
</code></pre>
<p>Completly closes this Client and all Room associated.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should only be called in Loading-Screens or Scene transissions</p>
</div>
</div>

`}),e.add({id:344,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/close/",title:"Close",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Close()
</code></pre>
<p>Completly closes this Client and all Room associated.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should only be called in Loading-Screens or Scene transissions</p>
</div>
</div>

`}),e.add({id:345,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/close/",title:"Close",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Close()
</code></pre>
<p>Close the native room. (native dispose)</p>
`}),e.add({id:346,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/close/",title:"Close",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Close(Room room)
public bool Close(ulong id)
</code></pre>
<p>Close a room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will not remove the room from collection</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>id</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if room to close found</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="closeroom">Close(room)</h3>
<pre><code class="language-C#">public bool Close(Room room)
</code></pre>
<p>Close a room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will not remove the room from collection</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if room to close found</td>
</tr>
</tbody>
</table>
<h3 id="closeid">Close(id)</h3>
<pre><code class="language-C#">public bool Close(ulong id)
</code></pre>
<p>Close a room</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if room to close found</td>
</tr>
</tbody>
</table>
`}),e.add({id:347,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/close/",title:"Close",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Close()
</code></pre>
<p>Completly closes this Client and all Room associated.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should only be called in Loading-Screens or Scene transissions</p>
</div>
</div>

`}),e.add({id:348,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/closeroom/",title:"CloseRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CloseRoom(ulong roomId)
public bool CloseRoom(Room room)
</code></pre>
<p>Close a room by Id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>UInt64</td>
<td>room id</td>
</tr>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room to close</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="closeroomroomid">CloseRoom(roomId)</h3>
<pre><code class="language-C#">public bool CloseRoom(ulong roomId)
</code></pre>
<p>Close a room by Id</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>UInt64</td>
<td>room id</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="closeroomroom">CloseRoom(room)</h3>
<pre><code class="language-C#">public bool CloseRoom(Room room)
</code></pre>
<p>Close a room</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room to close</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:349,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/closerooms/",title:"CloseRooms",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CloseRooms()
</code></pre>
<p>Completely closes all Room associated.</p>
`}),e.add({id:350,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/collidertag/",title:"ColliderTag",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string ColliderTag
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:351,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/comparison/",title:"Comparison",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public StringComparison Comparison
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>StringComparison</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:352,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/config/",title:"config",section:"ODIN Documentation",description:"Global settings for ODIN connections.",content:`<pre><code class="language-C#">IOdinClientSettings
</code></pre>
<p>Global settings for ODIN connections.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/interfaces/iodinclientsettings/">IOdinClientSettings</a></p>
`}),e.add({id:353,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/config/",title:"Config",section:"ODIN Documentation",description:" Static reference to the global ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static OdinEditorConfig Config { get; }
</code></pre>
<p>Static reference to the global Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is a <see cref="!:UnityEngine.RequireComponent"></see> <a href="https://docs.unity3d.com/ScriptReference/RequireComponent.html">(RequireComponent attribute)</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:354,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/config/",title:"Config",section:"ODIN Documentation",description:" Room configuration ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public readonly RoomConfig Config
</code></pre>
<p>Room configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/">RoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:355,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/config/",title:"Config",section:"ODIN Documentation",description:" Static reference to the global ",content:`<pre><code class="language-C#">public static OdinEditorConfig Config { get; }
</code></pre>
<p>Static reference to the global Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is a <see cref="!:UnityEngine.RequireComponent"></see> <a href="https://docs.unity3d.com/ScriptReference/RequireComponent.html">(RequireComponent attribute)</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:356,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/config/",title:"Config",section:"ODIN Documentation",description:" Room configuration ",content:`<pre><code class="language-C#">public readonly RoomConfig Config
</code></pre>
<p>Room configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/">RoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:357,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/config/",title:"Config",section:"ODIN Documentation",description:" Static reference to the global ",content:`<pre><code class="language-C#">public static OdinEditorConfig Config { get; }
</code></pre>
<p>Static reference to the global Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is a <see cref="!:UnityEngine.RequireComponent"></see> <a href="https://docs.unity3d.com/ScriptReference/RequireComponent.html">(RequireComponent attribute)</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:358,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/config/",title:"Config",section:"ODIN Documentation",description:" Room configuration ",content:`<pre><code class="language-C#">public readonly RoomConfig Config
</code></pre>
<p>Room configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/">RoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:359,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/config/",title:"Config",section:"ODIN Documentation",description:" Static reference to the global ",content:`<pre><code class="language-C#">public static OdinEditorConfig Config { get; }
</code></pre>
<p>Static reference to the global Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is a <see cref="!:UnityEngine.RequireComponent"></see> <a href="https://docs.unity3d.com/ScriptReference/RequireComponent.html">(RequireComponent attribute)</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:360,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/config/",title:"Config",section:"ODIN Documentation",description:" Room configuration ",content:`<pre><code class="language-C#">public readonly RoomConfig Config
</code></pre>
<p>Room configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/">RoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:361,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/config/",title:"Config",section:"ODIN Documentation",description:" Audio processing configuration ",content:`<pre><code class="language-C#">public OdinApmConfig Config
</code></pre>
<p>Audio processing configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:362,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/config/",title:"Config",section:"ODIN Documentation",description:" Intern voice activity configuration ",content:`<pre><code class="language-C#">public OdinVadConfig Config
</code></pre>
<p>Intern voice activity configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:363,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/config/",title:"Config",section:"ODIN Documentation",description:" Static reference to the global ",content:`<pre><code class="language-C#">public static OdinEditorConfig Config { get; }
</code></pre>
<p>Static reference to the global Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is a <see cref="!:UnityEngine.RequireComponent"></see> <a href="https://docs.unity3d.com/ScriptReference/RequireComponent.html">(RequireComponent attribute)</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:364,href:"https://www.4players.io/odin/sdk/unity/classes/room/config/",title:"Config",section:"ODIN Documentation",description:" Room configuration ",content:`<pre><code class="language-C#">public readonly RoomConfig Config
</code></pre>
<p>Room configuration</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/">RoomConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:365,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/congestion_events/",title:"congestion_events",section:"ODIN Documentation",description:" Congestion events on the connection ",content:`<pre><code class="language-C#">public ulong congestion_events
</code></pre>
<p>Congestion events on the connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:366,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/congestion_events/",title:"congestion_events",section:"ODIN Documentation",description:" Congestion events on the connection ",content:`<pre><code class="language-C#">public ulong congestion_events
</code></pre>
<p>Congestion events on the connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:367,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/congestion_events/",title:"congestion_events",section:"ODIN Documentation",description:" Congestion events on the connection ",content:`<pre><code class="language-C#">public ulong congestion_events
</code></pre>
<p>Congestion events on the connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:368,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/connected/",title:"Connected",section:"ODIN Documentation",description:" Connection is established ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Connected = 1
</code></pre>
<p>Connection is established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:369,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/connected/",title:"Connected",section:"ODIN Documentation",description:" Connection is established ",content:`<pre><code class="language-C#">Connected = 1
</code></pre>
<p>Connection is established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:370,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/connected/",title:"Connected",section:"ODIN Documentation",description:" Connection is established ",content:`<pre><code class="language-C#">Connected = 1
</code></pre>
<p>Connection is established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:371,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/connected/",title:"Connected",section:"ODIN Documentation",description:" Connection is established ",content:`<pre><code class="language-C#">Connected = 1
</code></pre>
<p>Connection is established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:372,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/connected/",title:"Connected",section:"ODIN Documentation",description:" Connection is established ",content:`<pre><code class="language-C#">Connected = 1
</code></pre>
<p>Connection is established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:373,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/connecting/",title:"Connecting",section:"ODIN Documentation",description:" Connection is being established ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Connecting = 0
</code></pre>
<p>Connection is being established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:374,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/connecting/",title:"Connecting",section:"ODIN Documentation",description:" Connection is being established ",content:`<pre><code class="language-C#">Connecting = 0
</code></pre>
<p>Connection is being established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:375,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/connecting/",title:"Connecting",section:"ODIN Documentation",description:" Connection is being established ",content:`<pre><code class="language-C#">Connecting = 0
</code></pre>
<p>Connection is being established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:376,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/connecting/",title:"Connecting",section:"ODIN Documentation",description:" Connection is being established ",content:`<pre><code class="language-C#">Connecting = 0
</code></pre>
<p>Connection is being established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:377,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/connecting/",title:"Connecting",section:"ODIN Documentation",description:" Connection is being established ",content:`<pre><code class="language-C#">Connecting = 0
</code></pre>
<p>Connection is being established</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:378,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/connectionlost/",title:"ConnectionLost",section:"ODIN Documentation",description:" Connection state change was caused by a timeout ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">ConnectionLost = 2
</code></pre>
<p>Connection state change was caused by a timeout</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:379,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/connectionlost/",title:"ConnectionLost",section:"ODIN Documentation",description:" Connection state change was caused by a timeout ",content:`<pre><code class="language-C#">ConnectionLost = 2
</code></pre>
<p>Connection state change was caused by a timeout</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:380,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/connectionlost/",title:"ConnectionLost",section:"ODIN Documentation",description:" Connection state change was caused by a timeout ",content:`<pre><code class="language-C#">ConnectionLost = 2
</code></pre>
<p>Connection state change was caused by a timeout</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:381,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/connectionlost/",title:"ConnectionLost",section:"ODIN Documentation",description:" Connection state change was caused by a timeout ",content:`<pre><code class="language-C#">ConnectionLost = 2
</code></pre>
<p>Connection state change was caused by a timeout</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:382,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/connectionlost/",title:"ConnectionLost",section:"ODIN Documentation",description:" Connection state change was caused by a timeout ",content:`<pre><code class="language-C#">ConnectionLost = 2
</code></pre>
<p>Connection state change was caused by a timeout</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:383,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/connectionretry/",title:"ConnectionRetry",section:"ODIN Documentation",description:" The count of ConnectionState retry for reconnects. Reset on Connected ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int ConnectionRetry { get; }
</code></pre>
<p>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:384,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/connectionretry/",title:"ConnectionRetry",section:"ODIN Documentation",description:" The count of ConnectionState retry for reconnects. Reset on Connected ",content:`<pre><code class="language-C#">public int ConnectionRetry { get; }
</code></pre>
<p>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:385,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/connectionretry/",title:"ConnectionRetry",section:"ODIN Documentation",description:" The count of ConnectionState retry for reconnects. Reset on Connected ",content:`<pre><code class="language-C#">public int ConnectionRetry { get; }
</code></pre>
<p>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:386,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/connectionretry/",title:"ConnectionRetry",section:"ODIN Documentation",description:" The count of ConnectionState retry for reconnects. Reset on Connected ",content:`<pre><code class="language-C#">public int ConnectionRetry { get; }
</code></pre>
<p>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:387,href:"https://www.4players.io/odin/sdk/unity/classes/room/connectionretry/",title:"ConnectionRetry",section:"ODIN Documentation",description:" The count of ConnectionState retry for reconnects. Reset on Connected ",content:`<pre><code class="language-C#">public int ConnectionRetry { get; }
</code></pre>
<p>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:388,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/connectionstate/",title:"connectionState",section:"ODIN Documentation",description:"The current state of the main stream connection.",content:`<pre><code class="language-C#">OdinConnectionState
</code></pre>
<p>The current state of the main stream connection.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></p>
`}),e.add({id:389,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/connectionstate/",title:"connectionState",section:"ODIN Documentation",description:"The current state of the room stream connection.",content:`<pre><code class="language-C#">OdinConnectionState
</code></pre>
<p>The current state of the room stream connection.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></p>
`}),e.add({id:390,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionState ConnectionState { get; }
</code></pre>
<p>Connection state of the ODIN client</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:391,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:392,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionState ConnectionState { get; }
</code></pre>
<p>Connection state of the ODIN client</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:393,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:394,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionState ConnectionState { get; }
</code></pre>
<p>Connection state of the ODIN client</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:395,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:396,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionState ConnectionState { get; }
</code></pre>
<p>Connection state of the ODIN client</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:397,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:398,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onconnectionstatechanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:399,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onmediaactivestatechanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:400,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onmediaadded/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:401,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onmediaremoved/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:402,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onmessagereceived/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:403,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onpeerjoined/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:404,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onpeerleft/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:405,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onpeeruserdatachanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:406,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/onroomuserdatachanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:407,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/connectionstatechangedeventargs/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public string ConnectionState { get; }
</code></pre>
<p>Connection state of the ODIN client</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:408,href:"https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public NativeBindings.OdinRoomConnectionState ConnectionState { get; }
</code></pre>
<p>Connection state of the ODIN client</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:409,href:"https://www.4players.io/odin/sdk/unity/classes/room/connectionstate/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:410,href:"https://www.4players.io/odin/sdk/unity/classes/room/onconnectionstatechanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:411,href:"https://www.4players.io/odin/sdk/unity/classes/room/onmediaactivestatechanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:412,href:"https://www.4players.io/odin/sdk/unity/classes/room/onmediaadded/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:413,href:"https://www.4players.io/odin/sdk/unity/classes/room/onmediaremoved/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:414,href:"https://www.4players.io/odin/sdk/unity/classes/room/onmessagereceived/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:415,href:"https://www.4players.io/odin/sdk/unity/classes/room/onpeerjoined/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:416,href:"https://www.4players.io/odin/sdk/unity/classes/room/onpeerleft/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:417,href:"https://www.4players.io/odin/sdk/unity/classes/room/onpeeruserdatachanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:418,href:"https://www.4players.io/odin/sdk/unity/classes/room/onroomuserdatachanged/",title:"ConnectionState",section:"ODIN Documentation",description:" ConnectionState of the Room that is set by ODIN ",content:`<pre><code class="language-C#">public static KeyValuePair&lt;OdinRoomConnectionState, OdinRoomConnectionStateChangeReason&gt; ConnectionState { get; }
</code></pre>
<p>ConnectionState of the Room that is set by ODIN</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:419,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/connectionstatechanged/",title:"ConnectionStateChanged",section:"ODIN Documentation",description:"Fired when the connection state of the room changed.",content:`<pre><code class="language-C#">public ConnectionStateChanged: OdinConnectionStateChangedEvent
</code></pre>
<p>Fired when the connection state of the room changed.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></p>
`}),e.add({id:420,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinclientevents/connectionstatechanged/",title:"ConnectionStateChanged",section:"ODIN Documentation",description:"Main stream connection state updates.",content:`<pre><code class="language-C#">OdinConnectionStateChangedEvent
</code></pre>
<p>Main stream connection state updates.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></p>
`}),e.add({id:421,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/connectionstatechanged/",title:"ConnectionStateChanged",section:"ODIN Documentation",description:"Room stream connection state updates.",content:`<pre><code class="language-C#">OdinConnectionStateChangedEvent
</code></pre>
<p>Room stream connection state updates.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></p>
`}),e.add({id:422,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/",title:"ConnectionStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for ConnectionStateChanged events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/connectionstate/">ConnectionState</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection state of the ODIN client</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/changereason/">ChangeReason</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Reason of connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/retry/">Retry</a></td>
<td>Int32</td>
<td>Connection retry count</td>
</tr>
</tbody>
</table>
`}),e.add({id:423,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/",title:"ConnectionStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for ConnectionStateChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/connectionstate/">ConnectionState</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection state of the ODIN client</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/changereason/">ChangeReason</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Reason of connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/retry/">Retry</a></td>
<td>Int32</td>
<td>Connection retry count</td>
</tr>
</tbody>
</table>
`}),e.add({id:424,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/",title:"ConnectionStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for ConnectionStateChanged events in the current room ",content:`<pre><code class="language-C#">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/connectionstate/">ConnectionState</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection state of the ODIN client</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/changereason/">ChangeReason</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Reason of connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/retry/">Retry</a></td>
<td>Int32</td>
<td>Connection retry count</td>
</tr>
</tbody>
</table>
`}),e.add({id:425,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/",title:"ConnectionStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for ConnectionStateChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/connectionstate/">ConnectionState</a></td>
<td>Connection state of the ODIN client</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/changereason/">ChangeReason</a></td>
<td>Reason of connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/retry/">Retry</a></td>
<td>Connection retry count</td>
</tr>
</tbody>
</table>
`}),e.add({id:426,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/connectionstatechangedeventargs/",title:"ConnectionStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for ConnectionStateChanged events in the current room ",content:`<pre><code class="language-C#">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/connectionstatechangedeventargs/connectionstate/">ConnectionState</a></td>
<td>Connection state of the ODIN client</td>
</tr>
</tbody>
</table>
`}),e.add({id:427,href:"https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/",title:"ConnectionStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for ConnectionStateChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class ConnectionStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for ConnectionStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedeventargs/connectionstate/">ConnectionState</a></td>
<td>Connection state of the ODIN client</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedeventargs/changereason/">ChangeReason</a></td>
<td>Reason of connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedeventargs/retry/">Retry</a></td>
<td>Connection retry count</td>
</tr>
</tbody>
</table>
`}),e.add({id:428,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/connectionstatechangedproxy/",title:"ConnectionStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class ConnectionStateChangedProxy : UnityEvent&lt;object, ConnectionStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:429,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/connectionstatechangedproxy/",title:"ConnectionStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class ConnectionStateChangedProxy : UnityEvent&lt;object, ConnectionStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:430,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/connectionstatechangedproxy/",title:"ConnectionStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class ConnectionStateChangedProxy : UnityEvent&lt;object, ConnectionStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:431,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/connectionstatechangedproxy/",title:"ConnectionStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class ConnectionStateChangedProxy : UnityEvent&lt;object, ConnectionStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:432,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/connectionstatechangedproxy/",title:"ConnectionStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class ConnectionStateChangedProxy : UnityEvent&lt;object, ConnectionStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:433,href:"https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedproxy/",title:"ConnectionStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class ConnectionStateChangedProxy : UnityEvent&lt;object, ConnectionStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:434,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/connectionstatus/",title:"ConnectionStatus",section:"ODIN Documentation",description:" RoomStatus ",content:`<pre><code class="language-C#">public string ConnectionStatus { get; }
</code></pre>
<p>RoomStatus</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:435,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/connectionstatusstate/",title:"ConnectionStatusState",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void ConnectionStatusState(object sender, ConnectionStateChangedEventArgs status)
</code></pre>
<p>Check status if the room should destroy the gameobject</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Any room can not recover from a <code>&quot;Closed&quot;</code> state and will destroy the gameobject.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>OdinRoom object</td>
</tr>
<tr>
<td>status</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>new status</td>
</tr>
</tbody>
</table>
`}),e.add({id:436,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/constructor/",title:"constructor",section:"ODIN Documentation",description:"Creates a new instance of a client. Use this to create rooms.",content:`<pre><code class="language-C#">var odinclient = new OdinClient(sampleRate?: number, channelCount?: number)
</code></pre>
<p>Creates a new instance of a client. Use this to create rooms.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td>number</td>
<td>The sample rate of the audio stream (between 8000 and 48000) - default is 48000</td>
</tr>
<tr>
<td>channelCount</td>
<td>number</td>
<td>The number of channels of the audio stream (1 or 2) - default is 1</td>
</tr>
</tbody>
</table>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/classes/odinclient/">OdinClient</a></p>
`}),e.add({id:437,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/constructor/",title:"constructor",section:"ODIN Documentation",description:"Creates a new instance of a media object. Don't create OdinMedia directly, use `createAudioStream` from OdinRoom instead.",content:`<pre><code class="language-C#">var odinmedia = new OdinMedia(room: OdinRoom, sampleRate: number, channelCount: number, options?: OdinAPMSettings)
</code></pre>
<p>Creates a new instance of a media object. Don&rsquo;t create OdinMedia directly, use <code>createAudioStream</code> from OdinRoom instead.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td>The room to add the media to.</td>
</tr>
<tr>
<td>sampleRate</td>
<td>number</td>
<td>The sample rate of the audio stream (between 8000 and 48000)</td>
</tr>
<tr>
<td>channelCount</td>
<td>number</td>
<td>The number of channels of the audio stream (1 or 2)</td>
</tr>
<tr>
<td>options</td>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/">OdinAPMSettings</a></td>
<td>Optional configuration options for Odin Audio Processing Module (APM).</td>
</tr>
</tbody>
</table>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/classes/odinmedia/">OdinMedia</a></p>
`}),e.add({id:438,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/constructor/",title:"constructor",section:"ODIN Documentation",description:"Creates a new instance of a room with a token. Use OdinClient if you don't want to manage tokens yourself. Important: Don't use this function directly, use OdinClient instead.",content:`<pre><code class="language-C#">var odinroom = new OdinRoom(token: string)
</code></pre>
<p>Creates a new instance of a room with a token. Use OdinClient if you don&rsquo;t want to manage tokens yourself.
Important: Don&rsquo;t use this function directly, use OdinClient instead.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>string</td>
<td>The token to use for this room.</td>
</tr>
</tbody>
</table>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:439,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Contains(long id)
public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(long id)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the media is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:440,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Contains(ulong id)
public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(ulong id)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:441,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Contains(string key)
public bool Contains(Room item)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containskey">Contains(key)</h3>
<pre><code class="language-C#">public bool Contains(string key)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Room item)
</code></pre>
<p>Determines whether the room is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:442,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual bool Contains(string value)
public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsvalue">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(string value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h3 id="containsvalue-1">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether element occurs</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:443,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(long id)
public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(long id)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the media is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:444,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(ulong id)
public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(ulong id)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:445,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(string key)
public bool Contains(Room item)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containskey">Contains(key)</h3>
<pre><code class="language-C#">public bool Contains(string key)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Room item)
</code></pre>
<p>Determines whether the room is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:446,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool Contains(string value)
public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsvalue">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(string value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h3 id="containsvalue-1">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether element occurs</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:447,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(long id)
public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(long id)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the media is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:448,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(ulong id)
public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(ulong id)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:449,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(string key)
public bool Contains(Room item)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containskey">Contains(key)</h3>
<pre><code class="language-C#">public bool Contains(string key)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Room item)
</code></pre>
<p>Determines whether the room is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:450,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool Contains(string value)
public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsvalue">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(string value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h3 id="containsvalue-1">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether element occurs</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:451,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(long id)
public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(long id)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the media is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:452,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(ulong id)
public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(ulong id)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:453,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(string key)
public bool Contains(Room item)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containskey">Contains(key)</h3>
<pre><code class="language-C#">public bool Contains(string key)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Room item)
</code></pre>
<p>Determines whether the room is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:454,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool Contains(string value)
public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsvalue">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(string value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h3 id="containsvalue-1">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether element occurs</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:455,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(Room item)
</code></pre>
<p>Determines whether the room is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:456,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool Contains(string value)
public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsvalue">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(string value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h3 id="containsvalue-1">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether element occurs</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:457,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(long id)
public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(long id)
</code></pre>
<p>Determines whether the stream by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(MediaStream item)
</code></pre>
<p>Determines whether the media is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:458,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(ulong id)
public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsid">Contains(id)</h3>
<pre><code class="language-C#">public bool Contains(ulong id)
</code></pre>
<p>Determines whether the peer by id is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Peer item)
</code></pre>
<p>Determines whether the peer is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:459,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Contains(string key)
public bool Contains(Room item)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containskey">Contains(key)</h3>
<pre><code class="language-C#">public bool Contains(string key)
</code></pre>
<p>Determines whether the room by name/token is in the collection</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room key of the room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="containsitem">Contains(item)</h3>
<pre><code class="language-C#">public bool Contains(Room item)
</code></pre>
<p>Determines whether the room is in the collection</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:460,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/contains/",title:"Contains",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool Contains(string value)
public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="containsvalue">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(string value)
</code></pre>
<p>Indicates whether substring occurs</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
<h3 id="containsvalue-1">Contains(value)</h3>
<pre><code class="language-C#">public virtual bool Contains(byte value)
</code></pre>
<p>Indicates whether element occurs</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td>byte</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:461,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:462,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:463,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:464,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:465,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:466,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:467,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/continuerecording/",title:"ContinueRecording",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool ContinueRecording
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:468,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiodata/copyframe/",title:"CopyFrame",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float[] CopyFrame()
public void CopyFrame(ref float[] buffer)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="copyframe">CopyFrame()</h3>
<pre><code class="language-C#">public float[] CopyFrame()
</code></pre>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="copyframebuffer">CopyFrame(buffer)</h3>
<pre><code class="language-C#">public void CopyFrame(ref float[] buffer)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:469,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual void CopyFrom(IntPtr ptr, ulong size)
</code></pre>
<p>Copies data from memory to Buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>source</td>
</tr>
<tr>
<td>size</td>
<td>UInt64</td>
<td>Buffer size</td>
</tr>
</tbody>
</table>
`}),e.add({id:470,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CopyFrom(IntPtr ptr, ulong size)
</code></pre>
<p>Copies data from memory to Buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>source</td>
</tr>
<tr>
<td>size</td>
<td>UInt64</td>
<td>Buffer size</td>
</tr>
</tbody>
</table>
`}),e.add({id:471,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CopyFrom(IntPtr ptr, ulong size)
</code></pre>
<p>Copies data from memory to Buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>source</td>
</tr>
<tr>
<td>size</td>
<td>UInt64</td>
<td>Buffer size</td>
</tr>
</tbody>
</table>
`}),e.add({id:472,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CopyFrom(IntPtr ptr, ulong size)
</code></pre>
<p>Copies data from memory to Buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>source</td>
</tr>
<tr>
<td>size</td>
<td>UInt64</td>
<td>Buffer size</td>
</tr>
</tbody>
</table>
`}),e.add({id:473,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyFrom(float[] buffer)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:474,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CopyFrom(IntPtr ptr, ulong size)
</code></pre>
<p>Copies data from memory to Buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>source</td>
</tr>
<tr>
<td>size</td>
<td>UInt64</td>
<td>Buffer size</td>
</tr>
</tbody>
</table>
`}),e.add({id:475,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/copyfrom/",title:"CopyFrom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CopyFrom(IntPtr ptr, ulong size)
</code></pre>
<p>Copies data from memory to Buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>source</td>
</tr>
<tr>
<td>size</td>
<td>UInt64</td>
<td>Buffer size</td>
</tr>
</tbody>
</table>
`}),e.add({id:476,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void CopyTo(MediaStream[] array, int arrayIndex)
</code></pre>
<p>Copies stream of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>MediaStream[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:477,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void CopyTo(Peer[] array, int arrayIndex)
</code></pre>
<p>Copies peers of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Peer[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:478,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void CopyTo(Room[] array, int arrayIndex)
</code></pre>
<p>Copies rooms of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Room[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:479,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(MediaStream[] array, int arrayIndex)
</code></pre>
<p>Copies stream of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>MediaStream[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:480,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Peer[] array, int arrayIndex)
</code></pre>
<p>Copies peers of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Peer[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:481,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Room[] array, int arrayIndex)
</code></pre>
<p>Copies rooms of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Room[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:482,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(MediaStream[] array, int arrayIndex)
</code></pre>
<p>Copies stream of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>MediaStream[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:483,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Peer[] array, int arrayIndex)
</code></pre>
<p>Copies peers of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Peer[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:484,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Room[] array, int arrayIndex)
</code></pre>
<p>Copies rooms of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Room[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:485,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(MediaStream[] array, int arrayIndex)
</code></pre>
<p>Copies stream of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>MediaStream[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:486,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Peer[] array, int arrayIndex)
</code></pre>
<p>Copies peers of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Peer[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:487,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Room[] array, int arrayIndex)
</code></pre>
<p>Copies rooms of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Room[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:488,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(ref float[] buffer)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:489,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(MediaStream[] array, int arrayIndex)
</code></pre>
<p>Copies stream of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>MediaStream[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:490,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Peer[] array, int arrayIndex)
</code></pre>
<p>Copies peers of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Peer[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:491,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/copyto/",title:"CopyTo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void CopyTo(Room[] array, int arrayIndex)
</code></pre>
<p>Copies rooms of the collection to an array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>array</td>
<td>Room[]</td>
<td>target array</td>
</tr>
<tr>
<td>arrayIndex</td>
<td>Int32</td>
<td>array offset</td>
</tr>
</tbody>
</table>
`}),e.add({id:492,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of streams in the collection ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of streams in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:493,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of peers in the collection ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of peers in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:494,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of rooms in the collection ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of rooms in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:495,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of streams in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of streams in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:496,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of peers in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of peers in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:497,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of rooms in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of rooms in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:498,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of streams in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of streams in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:499,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of peers in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of peers in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:500,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of rooms in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of rooms in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:501,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of streams in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of streams in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:502,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of peers in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of peers in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:503,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of rooms in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of rooms in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:504,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of rooms in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of rooms in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:505,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of streams in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of streams in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:506,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of peers in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of peers in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:507,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/count/",title:"Count",section:"ODIN Documentation",description:" Count of rooms in the collection ",content:`<pre><code class="language-C#">public int Count { get; }
</code></pre>
<p>Count of rooms in the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:508,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static ApmEffect Create(MediaPipeline pipeline, uint samplerate, bool stereo, OdinApmConfig config)
</code></pre>
<p>Insert a apm effect in the specified pipline and sets the apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>where to create a apm effect</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>samplerate of playback</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>stereo of playback</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td>configuration settings for apm</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/">ApmEffect</a></td>
<td>Instance of <xref href="OdinNative.Odin.Media.ApmEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:509,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static CustomEffect&lt;T&gt; Create(MediaPipeline pipeline, Action&lt;OdinCallbackAudioData, T&gt; callback, T userData)
</code></pre>
<p>Insert a custom effect in the specified pipline</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>where to create a vad effect</td>
</tr>
<tr>
<td>callback</td>
<td>Action&lt;OdinCallbackAudioData,&lt;T&gt;&gt;</td>
<td>delegate reference for effect event</td>
</tr>
<tr>
<td>userData</td>
<td>&lt;T&gt;</td>
<td>custom userdata Marshal.StructureToPtr</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/">CustomEffect</a></td>
<td>Instance of <xref href="OdinNative.Odin.Media.CustomEffect%601" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:510,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static MediaDecoder Create(ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new dangling output media.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is not automatically assigned to a managed room yet but exists in a specific native room only.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>output media id</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
`}),e.add({id:511,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static MediaEncoder Create(ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new dangling input media.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Is not automatically assigned to a managed room yet but exists in a specific native room only.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>input media id</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
`}),e.add({id:512,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static MsgPackWriter Create(byte[] bytes)
public static MsgPackWriter Create(byte[] bytes, Encoding encoding)
</code></pre>
<p>Create writer with a prefilled stream buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td>data that will be pushed into the stream</td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/">MsgPackWriter</a></td>
<td>writer</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="createbytes">Create(bytes)</h3>
<pre><code class="language-C#">public static MsgPackWriter Create(byte[] bytes)
</code></pre>
<p>Create writer with a prefilled stream buffer</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td>data that will be pushed into the stream</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/">MsgPackWriter</a></td>
<td>writer</td>
</tr>
</tbody>
</table>
<h3 id="createbytes-encoding">Create(bytes, encoding)</h3>
<pre><code class="language-C#">public static MsgPackWriter Create(byte[] bytes, Encoding encoding)
</code></pre>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td></td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/">MsgPackWriter</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:513,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static OdinClient Create(Uri server)
public static OdinClient Create(Uri server, string accessKey)
public static OdinClient Create(Uri server, string accessKey, NativeBindings.OdinConnectionPoolSettings settings)
</code></pre>
<p>Creates a new initialized instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will set a random accesskey; Can fail on initialize!</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td>Uri</td>
<td>Odin Server/Gateway</td>
</tr>
<tr>
<td>accessKey</td>
<td>String</td>
<td>Odin access key</td>
</tr>
<tr>
<td>settings</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinconnectionpoolsettings/">OdinConnectionPoolSettings</a></td>
<td>Custom settings</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/">OdinClient</a></td>
<td>OdinClient wrapper</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="createserver">Create(server)</h3>
<pre><code class="language-C#">public static OdinClient Create(Uri server)
</code></pre>
<p>Creates a new initialized instance for ODIN ffi C# Wrapper</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will set a random accesskey; Can fail on initialize!</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td>Uri</td>
<td>Odin Server/Gateway</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/">OdinClient</a></td>
<td>OdinClient wrapper</td>
</tr>
</tbody>
</table>
<h3 id="createserver-accesskey">Create(server, accessKey)</h3>
<pre><code class="language-C#">public static OdinClient Create(Uri server, string accessKey)
</code></pre>
<p>Creates a new initialized instance for ODIN ffi C# Wrapper</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Can fail on initialize!</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td>Uri</td>
<td>Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>String</td>
<td>Odin access key</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/">OdinClient</a></td>
<td>OdinClient wrapper</td>
</tr>
</tbody>
</table>
<h3 id="createserver-accesskey-settings">Create(server, accessKey, settings)</h3>
<pre><code class="language-C#">public static OdinClient Create(Uri server, string accessKey, NativeBindings.OdinConnectionPoolSettings settings)
</code></pre>
<p>Creates a new initialized instance for ODIN ffi C# Wrapper</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Can fail on initialize!</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td>Uri</td>
<td>Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>String</td>
<td>Odin access key</td>
</tr>
<tr>
<td>settings</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinconnectionpoolsettings/">OdinConnectionPoolSettings</a></td>
<td>Custom settings</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/">OdinClient</a></td>
<td>OdinClient wrapper</td>
</tr>
</tbody>
</table>
`}),e.add({id:514,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static NativeBindings.OdinMediaData Create(uint size)
public static NativeBindings.OdinMediaData Create(float[] samples)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>size</td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td>samples</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/">OdinMediaData</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="createsize">Create(size)</h3>
<pre><code class="language-C#">public static NativeBindings.OdinMediaData Create(uint size)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>size</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/">OdinMediaData</a></td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="createsamples">Create(samples)</h3>
<pre><code class="language-C#">public static NativeBindings.OdinMediaData Create(float[] samples)
</code></pre>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/">OdinMediaData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:515,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static Room Create(string endPoint, uint samplerate, bool stereo)
</code></pre>
<p>Initialise independent room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>endPoint</td>
<td>String</td>
<td>Gateway server</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>sets default stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:516,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool Create(MediaPipeline pipeline, out VadEffect vad)
public static VadEffect Create(MediaPipeline pipeline, OdinVadConfig config)
</code></pre>
<p>Insert a vad effect in the specified pipline</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>where to create a vad effect</td>
</tr>
<tr>
<td>vad</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td></td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>configuration settings for vad</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>Instance of <xref href="OdinNative.Odin.Media.VadEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td>Instance of <xref href="OdinNative.Odin.Media.VadEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="createpipeline-vad">Create(pipeline, vad)</h3>
<pre><code class="language-C#">public static bool Create(MediaPipeline pipeline, out VadEffect vad)
</code></pre>
<p>Insert a vad effect in the specified pipline</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>where to create a vad effect</td>
</tr>
<tr>
<td>vad</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>Instance of <xref href="OdinNative.Odin.Media.VadEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
<h3 id="createpipeline-config">Create(pipeline, config)</h3>
<pre><code class="language-C#">public static VadEffect Create(MediaPipeline pipeline, OdinVadConfig config)
</code></pre>
<p>Insert a vad effect in the specified pipline and sets the vad config</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>where to create a vad effect</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>configuration settings for vad</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td>Instance of <xref href="OdinNative.Odin.Media.VadEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:517,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/create/",title:"Create",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static MsgPackReader Create(byte[] data)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/">MsgPackReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:518,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/createaccesskey/",title:"CreateAccessKey",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static string CreateAccessKey()
</code></pre>
<p>Create a example access key that can be registered on 4Players (see <a href="https://developers.4players.io/odin/"><a href="https://developers.4players.io/odin/">https://developers.4players.io/odin/</a></a>)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is for testing and not intended for production. Access key should never be client side.</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>access key string or empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:519,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/createaudiostream/",title:"createAudioStream",section:"ODIN Documentation",description:"Creates a local audio stream and adds it to the room. An OdinMedia object will be returned that allows you to send audio data.",content:`<pre><code class="language-C#">public createAudioStream(sampleRate: number, channels: number, apmSettings?: OdinAPMSettings): OdinMedia
</code></pre>
<p>Creates a local audio stream and adds it to the room. An OdinMedia object will be returned that allows you to send
audio data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td>number</td>
<td>The sample rate of the audio stream. Can be between 8000 and 48000.</td>
</tr>
<tr>
<td>channels</td>
<td>number</td>
<td>The number of channels of the audio stream. Can be 1 or 2.</td>
</tr>
<tr>
<td>apmSettings</td>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/">OdinAPMSettings</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/">OdinMedia</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:520,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/createdecoder/",title:"CreateDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaDecoder CreateDecoder(ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new output media that will be added to PeerEntity</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>decoder id</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
`}),e.add({id:521,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/createdecoder/",title:"CreateDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaDecoder CreateDecoder(ulong peerId, ushort mediaId)
public MediaDecoder CreateDecoder(ulong peerId, ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new output media that will be added to PeerEntity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="createdecoderpeerid-mediaid">CreateDecoder(peerId, mediaId)</h3>
<pre><code class="language-C#">public MediaDecoder CreateDecoder(ulong peerId, ushort mediaId)
</code></pre>
<p>Create a new output media that will be added to PeerEntity</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
<h3 id="createdecoderpeerid-mediaid-samplerate-stereo">CreateDecoder(peerId, mediaId, samplerate, stereo)</h3>
<pre><code class="language-C#">public MediaDecoder CreateDecoder(ulong peerId, ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new output media that will be added to PeerEntity</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
`}),e.add({id:522,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/createencoder/",title:"CreateEncoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaEncoder CreateEncoder(ushort mediaId)
public MediaEncoder CreateEncoder(ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new input media that will be added toRoom</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="createencodermediaid">CreateEncoder(mediaId)</h3>
<pre><code class="language-C#">public MediaEncoder CreateEncoder(ushort mediaId)
</code></pre>
<p>Create a new input media that will be added toRoom</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
<h3 id="createencodermediaid-samplerate-stereo">CreateEncoder(mediaId, samplerate, stereo)</h3>
<pre><code class="language-C#">public MediaEncoder CreateEncoder(ushort mediaId, uint samplerate, bool stereo)
</code></pre>
<p>Create a new input media that will be added toRoom</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
`}),e.add({id:523,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/createmedia/",title:"createMedia",section:"ODIN Documentation",description:"Creates a local media, configures audio capture/playback and returns the new `OdinMedia` instance.",content:`<pre><code class="language-C#">createMedia(): OdinMedia
</code></pre>
<p>Creates a local media, configures audio capture/playback and returns the new <code>OdinMedia</code> instance.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:524,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/createmedia/",title:"createMedia",section:"ODIN Documentation",description:"Creates a new local media using the specified stream.",content:`<pre><code class="language-C#">createMedia(mediaStream: MediaStream, audioSettings?: IOdinAudioSettings): Promise&lt;OdinMedia&gt;
</code></pre>
<p>Creates a new local media using the specified stream.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStream</td>
<td>MediaStream</td>
<td>The capture stream of the input device</td>
</tr>
<tr>
<td>audioSettings</td>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/">IOdinAudioSettings</a></td>
<td>Optional audio settings like VAD or master volume used to initialize audio</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/">Promise&lt;OdinMedia&gt;</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:525,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/createmicrophonemedia/",title:"CreateMicrophoneMedia",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool CreateMicrophoneMedia(OdinMediaConfig config)
</code></pre>
<p>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Microphone device configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if media was added to the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:526,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/createmicrophonemedia/",title:"CreateMicrophoneMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CreateMicrophoneMedia(OdinMediaConfig config)
</code></pre>
<p>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Microphone device configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if media was added to the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:527,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/createmicrophonemedia/",title:"CreateMicrophoneMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CreateMicrophoneMedia(OdinMediaConfig config)
</code></pre>
<p>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Microphone device configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if media was added to the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:528,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/createmicrophonemedia/",title:"CreateMicrophoneMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CreateMicrophoneMedia(OdinMediaConfig config)
</code></pre>
<p>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Microphone device configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if media was added to the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:529,href:"https://www.4players.io/odin/sdk/unity/classes/room/createmicrophonemedia/",title:"CreateMicrophoneMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CreateMicrophoneMedia(OdinMediaConfig config)
</code></pre>
<p>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Microphone device configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if media was added to the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:530,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/createplayback/",title:"CreatePlayback",section:"ODIN Documentation",description:" Creates on events ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool CreatePlayback
</code></pre>
<p>Creates Room_OnMediaAdded(System events</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:531,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/createplayback/",title:"CreatePlayback",section:"ODIN Documentation",description:" Creates on events ",content:`<pre><code class="language-C#">public bool CreatePlayback
</code></pre>
<p>Creates Room_OnMediaAdded(System events</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:532,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/createplayback/",title:"CreatePlayback",section:"ODIN Documentation",description:" Creates on events ",content:`<pre><code class="language-C#">public bool CreatePlayback
</code></pre>
<p>Creates Room_OnMediaAdded(System events</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:533,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/createplayback/",title:"CreatePlayback",section:"ODIN Documentation",description:" Creates on events ",content:`<pre><code class="language-C#">public bool CreatePlayback
</code></pre>
<p>Creates Room_OnMediaAdded(System events</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:534,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/createplayback/",title:"CreatePlayback",section:"ODIN Documentation",description:" Creates on events ",content:`<pre><code class="language-C#">public bool CreatePlayback
</code></pre>
<p>Creates Room_OnMediaAdded(System events</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:535,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/createroom/",title:"createRoom",section:"ODIN Documentation",description:"Creates a new local room instance with the given ID and user ID. Use join to connect to that room.",content:`<pre><code class="language-C#">public createRoom(accessKey: string, roomId: string, userId: string): OdinRoom
</code></pre>
<p>Creates a new local room instance with the given ID and user ID. Use join to connect to that room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>accessKey</td>
<td>string</td>
<td>The access key to use to generate the token. You can get a free access token in our developer center</td>
</tr>
<tr>
<td>roomId</td>
<td>string</td>
<td>The ID of the room to create.</td>
</tr>
<tr>
<td>userId</td>
<td>string</td>
<td>The ID of the user to create the room for.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:536,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/createroom/",title:"CreateRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room CreateRoom(uint samplerate, bool stereo)
</code></pre>
<p>Create a room for the set gateway.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is for testing and not intended for production. Access key should never be client side.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>room default samplerate fallback</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>room default stereo flag fallback</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Room object with a connection</td>
</tr>
</tbody>
</table>
`}),e.add({id:537,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/createroomwithaccesstoken/",title:"createRoomWithAccessToken",section:"ODIN Documentation",description:"Creates a new local room instance with the given access token. Use `join` on the returned OdinRoom instance to connect to that room. Use this method if you already have an access token, either created elsewhere or by calling `generateToken`. To be more consistent with other SDKs, this method is deprecated. Use createRoomWithToken instead.",content:`<pre><code class="language-C#">public createRoomWithAccessToken(accessToken: string): OdinRoom
</code></pre>
<p>Creates a new local room instance with the given access token. Use <code>join</code> on the returned OdinRoom instance to
connect to that room. Use this method if you already have an access token, either created elsewhere or by calling
<code>generateToken</code>.
To be more consistent with other SDKs, this method is deprecated. Use createRoomWithToken instead.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>accessToken</td>
<td>string</td>
<td>The access token to use to join the room.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:538,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/createroomwithtoken/",title:"createRoomWithToken",section:"ODIN Documentation",description:"Creates a new local room instance with the given room token. Use `join` on the returned OdinRoom instance to connect to that room. Use this method if you already have an access token, either created elsewhere or by calling `generateAccessToken`.",content:`<pre><code class="language-C#">public createRoomWithToken(accessToken: string): OdinRoom
</code></pre>
<p>Creates a new local room instance with the given room token. Use <code>join</code> on the returned OdinRoom instance to
connect to that room. Use this method if you already have an access token, either created elsewhere or by calling
<code>generateAccessToken</code>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>accessToken</td>
<td>string</td>
<td>The access token to use to join the room.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:539,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/createtoken/",title:"CreateToken",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static string CreateToken(string accesskey, string body)
</code></pre>
<p>Create a example token to join a room. For production use a token server!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is for testing and not intended for production. Access key should never be client side.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>accesskey</td>
<td>String</td>
<td>Key to generate a token from</td>
</tr>
<tr>
<td>body</td>
<td>String</td>
<td>token body</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>token string or empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:540,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/enumerator/current/",title:"Current",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public readonly KeyValuePair&lt;string, MsgPackReader&gt; Current { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>KeyValuePair&lt;MsgPackReader&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:541,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/constructor_0/",title:"CustomEffect(OdinPipelineHandle, UInt32)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">protected CustomEffect(OdinPipelineHandle parentHandle, uint effectId)
</code></pre>
<p>Internal effect constructor, use <code>CustomEffect.Create{T}(MediaPipeline, Action{OdinCallbackAudioData, T}, T)&quot;</code></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parentHandle</td>
<td>pipeline handle</td>
</tr>
<tr>
<td>effectId</td>
<td>effect id</td>
</tr>
</tbody>
</table>
`}),e.add({id:542,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/",title:"CustomEffect<T>",section:"ODIN Documentation",description:" Custom effect for callbacks ",content:`<p>Inherits from: <a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></p>
<pre><code class="language-C#">public class CustomEffect&lt;T&gt; : PiplineEffect, IPiplineEffect where T : struct
</code></pre>
<h1 id="heading"></h1>
<p>Custom effect for Odin callbacks</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/constructor_0/">CustomEffect(OdinPipelineHandle, UInt32)</a></td>
<td>Internal effect constructor, use <code>CustomEffect.Create{T}(MediaPipeline, Action{OdinCallbackAudioData, T}, T)&quot;</code></td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/create/">Create</a></td>
<td>Insert a custom effect in the specified pipline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/serialize/">Serialize</a></td>
<td>Serialize structure to pointer for arbitary data T</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/deserialize/">Deserialize</a></td>
<td>Deserializes a structure from a byte array</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/serializeuserdata/">SerializeUserdata</a></td>
<td>Serialize arbitary userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/customeffect/deserializeuserdata/">DeserializeUserdata</a></td>
<td>Deserializes userdata from a byte array</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/id/">Id</a></td>
<td>Effect id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/index_property/">Index</a></td>
<td>Effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/parent/">Parent</a></td>
<td>Pipeline handle</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffectindex/">GetEffectIndex</a></td>
<td>Get native effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffecttype/">GetEffectType</a></td>
<td>Get native effect NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/getvadconfig/">GetVadConfig</a></td>
<td>Get native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmconfig/">SetApmConfig</a></td>
<td>Set native audio processing config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmstreamdelay/">SetApmStreamDelay</a></td>
<td>Set native audio processing delay</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setvadconfig/">SetVadConfig</a></td>
<td>Set native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/updateapmplayback/">UpdateApmPlayback</a></td>
<td>Send samples for native audio processing</td>
</tr>
</tbody>
</table>
`}),e.add({id:543,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/customeffectcallback/",title:"CustomEffectCallback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void CustomEffectCallback(OdinCallbackAudioData audio, IntPtr _)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td></td>
</tr>
<tr>
<td>_</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:544,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/customeffectcallback/",title:"CustomEffectCallback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void CustomEffectCallback(OdinCallbackAudioData audio, U _)
</code></pre>
<p>Callback delegate for the effect</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td>audio data wrapper for copy buffer to native</td>
</tr>
<tr>
<td>_</td>
<td>&lt;U&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:545,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/customeffectcallback/",title:"CustomEffectCallback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void CustomEffectCallback(OdinCallbackAudioData audio, IntPtr _)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td></td>
</tr>
<tr>
<td>_</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:546,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/customeffectcallback/",title:"CustomEffectCallback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void CustomEffectCallback(OdinCallbackAudioData audio, OdinTerrainFilterComponent.TerrainFilterUserData userData)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/">TerrainFilterUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:547,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/customeffectcallback/",title:"CustomEffectCallback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void CustomEffectCallback(OdinCallbackAudioData audio, IntPtr _)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td></td>
</tr>
<tr>
<td>_</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:548,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/customeffectcallback/",title:"CustomEffectCallback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override void CustomEffectCallback(OdinCallbackAudioData audio, IntPtr _)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/">OdinCallbackAudioData</a></td>
<td></td>
</tr>
<tr>
<td>_</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:549,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/customer/",title:"customer",section:"ODIN Documentation",description:"The customer identifier this room is assigned to.",content:`<pre><code class="language-C#">string
</code></pre>
<p>The customer identifier this room is assigned to.</p>
`}),e.add({id:550,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/custominputdevice/",title:"CustomInputDevice",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool CustomInputDevice
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:551,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/custominputdevice/",title:"CustomInputDevice",section:"ODIN Documentation",description:" Enable/Disable the use of as a new/fixed device name ",content:`<pre><code class="language-C#">public bool CustomInputDevice
</code></pre>
<p>Enable/Disable the use of <a href="/odin/sdk/unity/1.5.8/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:552,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/custominputdevice/",title:"CustomInputDevice",section:"ODIN Documentation",description:" Enable/Disable the use of as a new/fixed device name ",content:`<pre><code class="language-C#">public bool CustomInputDevice
</code></pre>
<p>Enable/Disable the use of <a href="/odin/sdk/unity/1.6.0/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:553,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/custominputdevice/",title:"CustomInputDevice",section:"ODIN Documentation",description:" Enable/Disable the use of as a new/fixed device name ",content:`<pre><code class="language-C#">public bool CustomInputDevice
</code></pre>
<p>Enable/Disable the use of MicrophoneReader as a new/fixed device name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:554,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/custominputdevice/",title:"CustomInputDevice",section:"ODIN Documentation",description:" Enable/Disable the use of as a new/fixed device name ",content:`<pre><code class="language-C#">public bool CustomInputDevice
</code></pre>
<p>Enable/Disable the use of <a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/inputdevice/">InputDevice</a> as a new/fixed device name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:555,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/custominputdevice/",title:"CustomInputDevice",section:"ODIN Documentation",description:" Enable/Disable the use of as a new/fixed device name ",content:`<pre><code class="language-C#">public bool CustomInputDevice
</code></pre>
<p>Enable/Disable the use of <a href="/odin/sdk/unity/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:556,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/custominputvolumescale/",title:"CustomInputVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CustomInputVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:557,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/custommicvolumescale/",title:"CustomMicVolumeScale",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool CustomMicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:558,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/custommicvolumescale/",title:"CustomMicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CustomMicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:559,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/custommicvolumescale/",title:"CustomMicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CustomMicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:560,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/custommicvolumescale/",title:"CustomMicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CustomMicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:561,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/custommicvolumescale/",title:"CustomMicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CustomMicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:562,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/custommicvolumescale/",title:"CustomMicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool CustomMicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:563,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/cwnd/",title:"cwnd",section:"ODIN Documentation",description:" Current congestion window of the connection ",content:`<pre><code class="language-C#">public ulong cwnd
</code></pre>
<p>Current congestion window of the connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:564,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/cwnd/",title:"cwnd",section:"ODIN Documentation",description:" Current congestion window of the connection ",content:`<pre><code class="language-C#">public ulong cwnd
</code></pre>
<p>Current congestion window of the connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:565,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/cwnd/",title:"cwnd",section:"ODIN Documentation",description:" Current congestion window of the connection ",content:`<pre><code class="language-C#">public ulong cwnd
</code></pre>
<p>Current congestion window of the connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:566,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/data/",title:"data",section:"ODIN Documentation",description:"The arbitrary user data of the peer.",content:`<pre><code class="language-C#">Uint8Array
</code></pre>
<p>The arbitrary user data of the peer.</p>
`}),e.add({id:567,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/data/",title:"data",section:"ODIN Documentation",description:"The arbitrary user data of the room.",content:`<pre><code class="language-C#">Uint8Array
</code></pre>
<p>The arbitrary user data of the room.</p>
`}),e.add({id:568,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/messagereceivedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" arbitrary data ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public byte[] Data
</code></pre>
<p>arbitrary data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:569,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomuserdatachangedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" room userdata ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public UserData Data
</code></pre>
<p>room userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:570,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/messagereceivedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" arbitrary data ",content:`<pre><code class="language-C#">public byte[] Data
</code></pre>
<p>arbitrary data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:571,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomuserdatachangedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" room userdata ",content:`<pre><code class="language-C#">public UserData Data
</code></pre>
<p>room userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:572,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/messagereceivedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" arbitrary data ",content:`<pre><code class="language-C#">public byte[] Data
</code></pre>
<p>arbitrary data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:573,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomuserdatachangedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" room userdata ",content:`<pre><code class="language-C#">public UserData Data
</code></pre>
<p>room userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:574,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" arbitrary data ",content:`<pre><code class="language-C#">public byte[] Data
</code></pre>
<p>arbitrary data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:575,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" room userdata ",content:`<pre><code class="language-C#">public UserData Data
</code></pre>
<p>room userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:576,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" arbitrary data ",content:`<pre><code class="language-C#">public byte[] Data
</code></pre>
<p>arbitrary data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:577,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/data/",title:"Data",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Terrain Data
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Terrain</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:578,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" room userdata ",content:`<pre><code class="language-C#">public UserData Data
</code></pre>
<p>room userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:579,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/messagepackextension/data/",title:"Data",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public byte[] Data
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:580,href:"https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" arbitrary data ",content:`<pre><code class="language-C#">public byte[] Data
</code></pre>
<p>arbitrary data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:581,href:"https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs/data/",title:"Data",section:"ODIN Documentation",description:" room userdata ",content:`<pre><code class="language-C#">public UserData Data
</code></pre>
<p>room userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:582,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/datagrameventargs/datagram/",title:"Datagram",section:"ODIN Documentation",description:" decoder datagram ",content:`<pre><code class="language-C#">public NativeBindings.OdinDatagramRecv Datagram { get; }
</code></pre>
<p>decoder datagram</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/">OdinDatagramRecv</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:583,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/datagrameventargs/",title:"DatagramEventArgs",section:"ODIN Documentation",description:" Arguments for datagram events ",content:`<pre><code class="language-C#">public class DatagramEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for datagram events</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/roomid/">RoomId</a></td>
<td>room id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/datagram/">Datagram</a></td>
<td>decoder datagram</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/payload/">Payload</a></td>
<td>decoder datagram payload</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/userdata/">Userdata</a></td>
<td>unused</td>
</tr>
</tbody>
</table>
`}),e.add({id:584,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/datagrameventhandler/",title:"DatagramEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void DatagramEventHandler(object sender, DatagramEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/">DatagramEventArgs</a></td>
<td>Arguments events</td>
</tr>
</tbody>
</table>
`}),e.add({id:585,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/datagramproxy/",title:"DatagramProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class DatagramProxy : UnityEvent&lt;object, DatagramEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:586,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/debug/",title:"Debug",section:"ODIN Documentation",description:" Enable additional debug logs ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool Debug
</code></pre>
<p>Enable additional debug logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:587,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/debug/",title:"Debug",section:"ODIN Documentation",description:" Enable additional debug logs ",content:`<pre><code class="language-C#">public static bool Debug
</code></pre>
<p>Enable additional debug logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:588,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/debug/",title:"Debug",section:"ODIN Documentation",description:" Enable additional debug logs ",content:`<pre><code class="language-C#">public static bool Debug
</code></pre>
<p>Enable additional debug logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:589,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/debug/",title:"Debug",section:"ODIN Documentation",description:" Enable additional debug logs ",content:`<pre><code class="language-C#">public static bool Debug
</code></pre>
<p>Enable additional debug logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:590,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/debug/",title:"Debug",section:"ODIN Documentation",description:" Enable additional debug logs ",content:`<pre><code class="language-C#">public static bool Debug
</code></pre>
<p>Enable additional debug logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:591,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/debug/",title:"Debug",section:"ODIN Documentation",description:" Enable additional debug logs ",content:`<pre><code class="language-C#">public static bool Debug
</code></pre>
<p>Enable additional debug logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:592,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostats/decoder/",title:"decoder",section:"ODIN Documentation",description:"Internal Opus decoder statistics.",content:`<pre><code class="language-C#">{avg_decode_time: number, cache_length: number, packets_invalid: number, packets_lost: number, packets_processed: number, packets_repeated: number, packets_seen: number, packets_too_early: number, packets_too_late: number, rewinds: number}
</code></pre>
<p>Internal Opus decoder statistics.</p>
`}),e.add({id:593,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/decoders/",title:"Decoders",section:"ODIN Documentation",description:" Elements of room output medias ",content:`<pre><code class="language-C#">public IEnumerable&lt;MediaDecoder&gt; Decoders { get; }
</code></pre>
<p>Elements of room output medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;MediaDecoder&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:594,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in the ODIN Unity SDK",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p>The ODIN Unity SDK has defined these Delegates:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/mediaactivestatechangedeventhandler/">MediaActiveStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roomconnectionstatechangedeventhandler/">RoomConnectionStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roommediaaddedeventhandler/">RoomMediaAddedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roommediaremovedeventhandler/">RoomMediaRemovedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roommessagereceivedeventhandler/">RoomMessageReceivedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roompeerjoinedeventhandler/">RoomPeerJoinedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roompeerlefteventhandler/">RoomPeerLeftEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roompeeruserdatachangedeventhandler/">RoomPeerUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roomuserdatachangedeventhandler/">RoomUserDataChangedEventHandler</a></li>
</span>
</ul>
`}),e.add({id:595,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Delegates:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/mediaactivestatechangedeventhandler/">MediaActiveStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roomconnectionstatechangedeventhandler/">RoomConnectionStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roommediaaddedeventhandler/">RoomMediaAddedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roommediaremovedeventhandler/">RoomMediaRemovedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roommessagereceivedeventhandler/">RoomMessageReceivedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roompeerjoinedeventhandler/">RoomPeerJoinedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roompeerlefteventhandler/">RoomPeerLeftEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roompeeruserdatachangedeventhandler/">RoomPeerUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roomuserdatachangedeventhandler/">RoomUserDataChangedEventHandler</a></li>
</span>
</ul>
`}),e.add({id:596,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Delegates:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/mediaactivestatechangedeventhandler/">MediaActiveStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roomconnectionstatechangedeventhandler/">RoomConnectionStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roommediaaddedeventhandler/">RoomMediaAddedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roommediaremovedeventhandler/">RoomMediaRemovedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roommessagereceivedeventhandler/">RoomMessageReceivedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roompeerjoinedeventhandler/">RoomPeerJoinedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roompeerlefteventhandler/">RoomPeerLeftEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roompeeruserdatachangedeventhandler/">RoomPeerUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roomuserdatachangedeventhandler/">RoomUserDataChangedEventHandler</a></li>
</span>
</ul>
`}),e.add({id:597,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Delegates:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/mediaactivestatechangedeventhandler/">MediaActiveStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roomconnectionstatechangedeventhandler/">RoomConnectionStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roommediaaddedeventhandler/">RoomMediaAddedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roommediaremovedeventhandler/">RoomMediaRemovedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roommessagereceivedeventhandler/">RoomMessageReceivedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roompeerjoinedeventhandler/">RoomPeerJoinedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roompeerlefteventhandler/">RoomPeerLeftEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roompeeruserdatachangedeventhandler/">RoomPeerUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roomuserdatachangedeventhandler/">RoomUserDataChangedEventHandler</a></li>
</span>
</ul>
`}),e.add({id:598,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Delegates:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/datagrameventhandler/">DatagramEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/mediaactivestatechangedeventhandler/">MediaActiveStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onconnectionstatuschangeddelegate/">OnConnectionStatusChangedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onmediastarteddelegate/">OnMediaStartedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onmediastoppeddelegate/">OnMediaStoppedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onmessagereceiveddelegate/">OnMessageReceivedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onpeerjoineddelegate/">OnPeerJoinedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onpeerleftdelegate/">OnPeerLeftDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onroomjoineddelegate/">OnRoomJoinedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onuserdatachangeddelegate/">OnUserDataChangedDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roomconnectionstatechangedeventhandler/">RoomConnectionStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roommediaaddedeventhandler/">RoomMediaAddedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roommediaremovedeventhandler/">RoomMediaRemovedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roommessagereceivedeventhandler/">RoomMessageReceivedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roompeerjoinedeventhandler/">RoomPeerJoinedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roompeerlefteventhandler/">RoomPeerLeftEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roompeeruserdatachangedeventhandler/">RoomPeerUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roomuserdatachangedeventhandler/">RoomUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/delegates/rpceventhandler/">RpcEventHandler</a></li>
</span>
</ul>
`}),e.add({id:599,href:"https://www.4players.io/odin/sdk/unity/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Delegates:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/mediaactivestatechangedeventhandler/">MediaActiveStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roomconnectionstatechangedeventhandler/">RoomConnectionStateChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roommediaaddedeventhandler/">RoomMediaAddedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roommediaremovedeventhandler/">RoomMediaRemovedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roommessagereceivedeventhandler/">RoomMessageReceivedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roompeerjoinedeventhandler/">RoomPeerJoinedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roompeerlefteventhandler/">RoomPeerLeftEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roompeeruserdatachangedeventhandler/">RoomPeerUserDataChangedEventHandler</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/delegates/roomuserdatachangedeventhandler/">RoomUserDataChangedEventHandler</a></li>
</span>
</ul>
`}),e.add({id:600,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/deserialize/",title:"Deserialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static T Deserialize(byte[] data)
public static T Deserialize(IntPtr ptr)
</code></pre>
<p>Deserializes a structure from a byte array</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>copy to Marshal.PtrToStructure</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>binary data to deserialize</td>
</tr>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>pointer to deserialize as structure</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>structure <see cref="!:T"></see></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="deserializedata">Deserialize(data)</h3>
<pre><code class="language-C#">public static T Deserialize(byte[] data)
</code></pre>
<p>Deserializes a structure from a byte array</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>copy to Marshal.PtrToStructure</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>binary data to deserialize</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>structure <see cref="!:T"></see></td>
</tr>
</tbody>
</table>
<h3 id="deserializeptr">Deserialize(ptr)</h3>
<pre><code class="language-C#">public static T Deserialize(IntPtr ptr)
</code></pre>
<p>Deserializes a structure from a pointer</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>pointer to deserialize as structure</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>structure <see cref="!:T"></see></td>
</tr>
</tbody>
</table>
`}),e.add({id:601,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/deserializeuserdata/",title:"DeserializeUserdata",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual T DeserializeUserdata(byte[] data)
public virtual T DeserializeUserdata(IntPtr ptr)
</code></pre>
<p>Deserializes userdata from a byte array</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>custom userdata</td>
</tr>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>pointer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>Instance of <xref href="OdinNative.Odin.Media.CustomEffect%601" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="deserializeuserdatadata">DeserializeUserdata(data)</h3>
<pre><code class="language-C#">public virtual T DeserializeUserdata(byte[] data)
</code></pre>
<p>Deserializes userdata from a byte array</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>custom userdata</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>Instance of <xref href="OdinNative.Odin.Media.CustomEffect%601" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
<h3 id="deserializeuserdataptr">DeserializeUserdata(ptr)</h3>
<pre><code class="language-C#">public virtual T DeserializeUserdata(IntPtr ptr)
</code></pre>
<p>Deserializes userdata from a pointer</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ptr</td>
<td>IntPtr</td>
<td>pointer</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>Instance of <xref href="OdinNative.Odin.Media.CustomEffect%601" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:602,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/destroyonerror/",title:"DestroyOnError",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool DestroyOnError
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:603,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/destroyplaybackcomponents/",title:"DestroyPlaybackComponents",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void DestroyPlaybackComponents()
public void DestroyPlaybackComponents(string roomId)
public void DestroyPlaybackComponents(ulong peerId)
public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="destroyplaybackcomponents">DestroyPlaybackComponents()</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents()
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h3 id="destroyplaybackcomponentsroomid">DestroyPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(string roomId)
</code></pre>
<p>Destroys all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent by room and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentspeerid">DestroyPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(ulong peerId)
</code></pre>
<p>Destroys all Audio filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent from a peer and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentsmediastreamid">DestroyPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free the media with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
`}),e.add({id:604,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/destroyplaybackcomponents/",title:"DestroyPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void DestroyPlaybackComponents()
public void DestroyPlaybackComponents(string roomId)
public void DestroyPlaybackComponents(ulong peerId)
public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="destroyplaybackcomponents">DestroyPlaybackComponents()</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents()
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h3 id="destroyplaybackcomponentsroomid">DestroyPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(string roomId)
</code></pre>
<p>Destroys all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent by room and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentspeerid">DestroyPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(ulong peerId)
</code></pre>
<p>Destroys all Audio filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent from a peer and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentsmediastreamid">DestroyPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free the media with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
`}),e.add({id:605,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/destroyplaybackcomponents/",title:"DestroyPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void DestroyPlaybackComponents()
public void DestroyPlaybackComponents(string roomId)
public void DestroyPlaybackComponents(ulong peerId)
public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="destroyplaybackcomponents">DestroyPlaybackComponents()</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents()
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h3 id="destroyplaybackcomponentsroomid">DestroyPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(string roomId)
</code></pre>
<p>Destroys all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent by room and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentspeerid">DestroyPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(ulong peerId)
</code></pre>
<p>Destroys all Audio filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent from a peer and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentsmediastreamid">DestroyPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free the media with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
`}),e.add({id:606,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/destroyplaybackcomponents/",title:"DestroyPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void DestroyPlaybackComponents()
public void DestroyPlaybackComponents(string roomId)
public void DestroyPlaybackComponents(ulong peerId)
public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="destroyplaybackcomponents">DestroyPlaybackComponents()</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents()
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h3 id="destroyplaybackcomponentsroomid">DestroyPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(string roomId)
</code></pre>
<p>Destroys all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent by room and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentspeerid">DestroyPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(ulong peerId)
</code></pre>
<p>Destroys all Audio filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent from a peer and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentsmediastreamid">DestroyPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free the media with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
`}),e.add({id:607,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents/",title:"DestroyPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void DestroyPlaybackComponents()
public void DestroyPlaybackComponents(string roomId)
public void DestroyPlaybackComponents(ulong peerId)
public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="destroyplaybackcomponents">DestroyPlaybackComponents()</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents()
</code></pre>
<p>Destroys all Audio instances</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h3 id="destroyplaybackcomponentsroomid">DestroyPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(string roomId)
</code></pre>
<p>Destroys all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent by room and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentspeerid">DestroyPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(ulong peerId)
</code></pre>
<p>Destroys all Audio filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free all medias with a PlaybackComponent from a peer and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h3 id="destroyplaybackcomponentsmediastreamid">DestroyPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public void DestroyPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Destroys all Audio filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will free the media with a PlaybackComponent and
removes the associated <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">AudioSource</a>,
If Audio is set!</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
`}),e.add({id:608,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/device_max/",title:"Device_Max",section:"ODIN Documentation",description:" Hardware device max samplerate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Device_Max = 1U
</code></pre>
<p>Hardware device max samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:609,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/device_max/",title:"Device_Max",section:"ODIN Documentation",description:" Hardware device max samplerate ",content:`<pre><code class="language-C#">Device_Max = 1U
</code></pre>
<p>Hardware device max samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:610,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/device_max/",title:"Device_Max",section:"ODIN Documentation",description:" Hardware device max samplerate ",content:`<pre><code class="language-C#">Device_Max = 1U
</code></pre>
<p>Hardware device max samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:611,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/device_max/",title:"Device_Max",section:"ODIN Documentation",description:" Hardware device max samplerate ",content:`<pre><code class="language-C#">Device_Max = 1U
</code></pre>
<p>Hardware device max samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:612,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/device_max/",title:"Device_Max",section:"ODIN Documentation",description:" Hardware device max samplerate ",content:`<pre><code class="language-C#">Device_Max = 1U
</code></pre>
<p>Hardware device max samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:613,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/device_min/",title:"Device_Min",section:"ODIN Documentation",description:" Hardware device min samplerate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Device_Min = 0U
</code></pre>
<p>Hardware device min samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:614,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/device_min/",title:"Device_Min",section:"ODIN Documentation",description:" Hardware device min samplerate ",content:`<pre><code class="language-C#">Device_Min = 0U
</code></pre>
<p>Hardware device min samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:615,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/device_min/",title:"Device_Min",section:"ODIN Documentation",description:" Hardware device min samplerate ",content:`<pre><code class="language-C#">Device_Min = 0U
</code></pre>
<p>Hardware device min samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:616,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/device_min/",title:"Device_Min",section:"ODIN Documentation",description:" Hardware device min samplerate ",content:`<pre><code class="language-C#">Device_Min = 0U
</code></pre>
<p>Hardware device min samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:617,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/device_min/",title:"Device_Min",section:"ODIN Documentation",description:" Hardware device min samplerate ",content:`<pre><code class="language-C#">Device_Min = 0U
</code></pre>
<p>Hardware device min samplerate</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should currently not be used!</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:618,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone default Channel ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static MediaChannels DeviceChannels { get; set; }
</code></pre>
<p>Microphone default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:619,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone Channels ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaChannels DeviceChannels
</code></pre>
<p>Microphone Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:620,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone default Channel ",content:`<pre><code class="language-C#">public static MediaChannels DeviceChannels { get; set; }
</code></pre>
<p>Microphone default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:621,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone Channels ",content:`<pre><code class="language-C#">public MediaChannels DeviceChannels
</code></pre>
<p>Microphone Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:622,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone default Channel ",content:`<pre><code class="language-C#">public static MediaChannels DeviceChannels { get; set; }
</code></pre>
<p>Microphone default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:623,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone Channels ",content:`<pre><code class="language-C#">public MediaChannels DeviceChannels
</code></pre>
<p>Microphone Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:624,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone default Channel ",content:`<pre><code class="language-C#">public static MediaChannels DeviceChannels { get; set; }
</code></pre>
<p>Microphone default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:625,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone Channels ",content:`<pre><code class="language-C#">public MediaChannels DeviceChannels
</code></pre>
<p>Microphone Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:626,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone default Channel ",content:`<pre><code class="language-C#">public static MediaChannels DeviceChannels { get; set; }
</code></pre>
<p>Microphone default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:627,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/devicechannels/",title:"DeviceChannels",section:"ODIN Documentation",description:" Microphone Channels ",content:`<pre><code class="language-C#">public MediaChannels DeviceChannels
</code></pre>
<p>Microphone Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:628,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone default Sample-Rate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static MediaSampleRate DeviceSampleRate { get; set; }
</code></pre>
<p>Microphone default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:629,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone Sample-Rate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaSampleRate DeviceSampleRate
</code></pre>
<p>Microphone Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:630,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate DeviceSampleRate { get; set; }
</code></pre>
<p>Microphone default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:631,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate DeviceSampleRate
</code></pre>
<p>Microphone Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:632,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate DeviceSampleRate { get; set; }
</code></pre>
<p>Microphone default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:633,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate DeviceSampleRate
</code></pre>
<p>Microphone Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:634,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate DeviceSampleRate { get; set; }
</code></pre>
<p>Microphone default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:635,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate DeviceSampleRate
</code></pre>
<p>Microphone Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:636,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate DeviceSampleRate { get; set; }
</code></pre>
<p>Microphone default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:637,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/devicesamplerate/",title:"DeviceSampleRate",section:"ODIN Documentation",description:" Microphone Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate DeviceSampleRate
</code></pre>
<p>Microphone Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:638,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/disablevad/",title:"disableVAD",section:"ODIN Documentation",description:"Disables RNN-based voice activity detection.",content:`<pre><code class="language-C#">disableVAD(): void
</code></pre>
<p>Disables RNN-based voice activity detection.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:639,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/disablevolumegate/",title:"disableVolumeGate",section:"ODIN Documentation",description:"Disables RNN-based voice activity detection.",content:`<pre><code class="language-C#">disableVolumeGate(): void
</code></pre>
<p>Disables RNN-based voice activity detection.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:640,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/disconnect/",title:"disconnect",section:"ODIN Documentation",description:"Disconnects from all rooms and stops all audio handling.",content:`<pre><code class="language-C#">disconnect(state: OdinConnectionState): void
</code></pre>
<p>Disconnects from all rooms and stops all audio handling.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>state</td>
<td><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:641,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/disconnected/",title:"Disconnected",section:"ODIN Documentation",description:" Connection is closed ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Disconnected = 2
</code></pre>
<p>Connection is closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:642,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/disconnected/",title:"Disconnected",section:"ODIN Documentation",description:" Connection is closed ",content:`<pre><code class="language-C#">Disconnected = 2
</code></pre>
<p>Connection is closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:643,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/disconnected/",title:"Disconnected",section:"ODIN Documentation",description:" Connection is closed ",content:`<pre><code class="language-C#">Disconnected = 2
</code></pre>
<p>Connection is closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:644,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/disconnected/",title:"Disconnected",section:"ODIN Documentation",description:" Connection is closed ",content:`<pre><code class="language-C#">Disconnected = 2
</code></pre>
<p>Connection is closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:645,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/disconnected/",title:"Disconnected",section:"ODIN Documentation",description:" Connection is closed ",content:`<pre><code class="language-C#">Disconnected = 2
</code></pre>
<p>Connection is closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:646,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the stream and resampler</p>
`}),e.add({id:647,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free all NativeMethods</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Override dispose if muliple Odin are needed</p>
</div>
</div>

`}),e.add({id:648,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free peer with all associated medias</p>
`}),e.add({id:649,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the room and token generator</p>
`}),e.add({id:650,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the stream and resampler</p>
`}),e.add({id:651,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free all NativeMethods</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Override dispose if muliple Odin are needed</p>
</div>
</div>

`}),e.add({id:652,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free peer with all associated medias</p>
`}),e.add({id:653,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the room and token generator</p>
`}),e.add({id:654,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the stream and resampler</p>
`}),e.add({id:655,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free all NativeMethods</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Override dispose if muliple Odin are needed</p>
</div>
</div>

`}),e.add({id:656,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free peer with all associated medias</p>
`}),e.add({id:657,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the room and token generator</p>
`}),e.add({id:658,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the stream and resampler</p>
`}),e.add({id:659,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free all NativeMethods</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Override dispose if muliple Odin are needed</p>
</div>
</div>

`}),e.add({id:660,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free peer with all associated medias</p>
`}),e.add({id:661,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the room and token generator</p>
`}),e.add({id:662,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free native media decoder</p>
`}),e.add({id:663,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free native media encoder</p>
`}),e.add({id:664,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>dispose</p>
`}),e.add({id:665,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free all NativeMethods</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Override dispose if muliple Odin are needed</p>
</div>
</div>

`}),e.add({id:666,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
`}),e.add({id:667,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free peer with all associated medias</p>
`}),e.add({id:668,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the room and all associated data</p>
`}),e.add({id:669,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/enumerator/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
`}),e.add({id:670,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the stream and resampler</p>
`}),e.add({id:671,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free all NativeMethods</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Override dispose if muliple Odin are needed</p>
</div>
</div>

`}),e.add({id:672,href:"https://www.4players.io/odin/sdk/unity/classes/peer/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>Free peer with all associated medias</p>
`}),e.add({id:673,href:"https://www.4players.io/odin/sdk/unity/classes/room/dispose/",title:"Dispose",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Dispose()
</code></pre>
<p>On dispose will free the room and token generator</p>
`}),e.add({id:674,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/echo_canceller/",title:"echo_canceller",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool echo_canceller
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:675,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/echocanceller/",title:"echoCanceller",section:"ODIN Documentation",description:"Enable or disable echo cancellation",content:`<pre><code class="language-C#">public echoCanceller: boolean
</code></pre>
<p>Enable or disable echo cancellation</p>
`}),e.add({id:676,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool EchoCanceller
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:677,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Turns Echo cancellation on and off ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool EchoCanceller
</code></pre>
<p>Turns Echo cancellation on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:678,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Enable or disable echo cancellation ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool EchoCanceller { get; set; }
</code></pre>
<p>Enable or disable echo cancellation</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:679,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool EchoCanceller
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:680,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Turns Echo cancellation on and off ",content:`<pre><code class="language-C#">public bool EchoCanceller
</code></pre>
<p>Turns Echo cancellation on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:681,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Enable or disable echo cancellation ",content:`<pre><code class="language-C#">public bool EchoCanceller { get; set; }
</code></pre>
<p>Enable or disable echo cancellation</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:682,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool EchoCanceller
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:683,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Turns Echo cancellation on and off ",content:`<pre><code class="language-C#">public bool EchoCanceller
</code></pre>
<p>Turns Echo cancellation on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:684,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Enable or disable echo cancellation ",content:`<pre><code class="language-C#">public bool EchoCanceller { get; set; }
</code></pre>
<p>Enable or disable echo cancellation</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:685,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool EchoCanceller
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:686,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Turns Echo cancellation on and off ",content:`<pre><code class="language-C#">public bool EchoCanceller
</code></pre>
<p>Turns Echo cancellation on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:687,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Enable or disable echo cancellation ",content:`<pre><code class="language-C#">public bool EchoCanceller { get; set; }
</code></pre>
<p>Enable or disable echo cancellation</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:688,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled ",content:`<pre><code class="language-C#">public bool EchoCanceller { get; set; }
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:689,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool EchoCanceller
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:690,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool EchoCanceller
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:691,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool EchoCanceller
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:692,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Turns Echo cancellation on and off ",content:`<pre><code class="language-C#">public bool EchoCanceller
</code></pre>
<p>Turns Echo cancellation on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:693,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/echocanceller/",title:"EchoCanceller",section:"ODIN Documentation",description:" Enable or disable echo cancellation ",content:`<pre><code class="language-C#">public bool EchoCanceller { get; set; }
</code></pre>
<p>Enable or disable echo cancellation</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:694,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/effect/",title:"Effect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ApmEffect Effect { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/">ApmEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:695,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/effect/",title:"Effect",section:"ODIN Documentation",description:" Get base effect ",content:`<pre><code class="language-C#">public PiplineEffect Effect { get; }
</code></pre>
<p>Get base effect</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:696,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/effect/",title:"Effect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public VadEffect Effect { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:697,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/emitter/",title:"Emitter",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public GameObject Emitter
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>GameObject</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:698,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/enabled/",title:"enabled",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool enabled
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:699,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/enablevad/",title:"enableVAD",section:"ODIN Documentation",description:"Enables RNN-based voice activity detection.",content:`<pre><code class="language-C#">enableVAD(): void
</code></pre>
<p>Enables RNN-based voice activity detection.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:700,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/enablevolumegate/",title:"enableVolumeGate",section:"ODIN Documentation",description:"Enables RNN-based voice activity detection.",content:`<pre><code class="language-C#">enableVolumeGate(): void
</code></pre>
<p>Enables RNN-based voice activity detection.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:701,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostats/encoder/",title:"encoder",section:"ODIN Documentation",description:"Internal Opus encoder statistics.",content:`<pre><code class="language-C#">{avg_encode_time: number, complexity: number, complexity_factor: number, fec: boolean, fec_packet_loss: number, voip: boolean}
</code></pre>
<p>Internal Opus encoder statistics.</p>
`}),e.add({id:702,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/encoders/",title:"Encoders",section:"ODIN Documentation",description:" Container of room input medias ",content:`<pre><code class="language-C#">public ConcurrentDictionary&lt;ushort, MediaEncoder&gt; Encoders { get; }
</code></pre>
<p>Container of room input medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ConcurrentDictionary&lt;UInt16,MediaEncoder&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:703,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Default Encoding ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Encoding Encoding { get; set; }
</code></pre>
<p>Default Encoding</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:704,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Default Encoding ",content:`<pre><code class="language-C#">public Encoding Encoding { get; set; }
</code></pre>
<p>Default Encoding</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:705,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Default Encoding ",content:`<pre><code class="language-C#">public Encoding Encoding { get; set; }
</code></pre>
<p>Default Encoding</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:706,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Default Encoding ",content:`<pre><code class="language-C#">public Encoding Encoding { get; set; }
</code></pre>
<p>Default Encoding</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:707,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Used Encoding defaults to UTF8 ",content:`<pre><code class="language-C#">public Encoding Encoding { get; }
</code></pre>
<p>Used Encoding defaults to UTF8</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:708,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Default Encoding ",content:`<pre><code class="language-C#">public Encoding Encoding { get; set; }
</code></pre>
<p>Default Encoding</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:709,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/encoding/",title:"Encoding",section:"ODIN Documentation",description:" Default Encoding ",content:`<pre><code class="language-C#">public Encoding Encoding { get; set; }
</code></pre>
<p>Default Encoding</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:710,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Connection EndPoint. Default from OdinEditorConfig. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Uri EndPoint { get; }
</code></pre>
<p>Connection EndPoint. Default from OdinEditorConfig.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uri</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:711,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Connection EndPoint. Default from OdinEditorConfig. ",content:`<pre><code class="language-C#">public Uri EndPoint { get; }
</code></pre>
<p>Connection EndPoint. Default from OdinEditorConfig.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uri</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:712,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Connection EndPoint. Default from OdinEditorConfig. ",content:`<pre><code class="language-C#">public Uri EndPoint { get; }
</code></pre>
<p>Connection EndPoint. Default from OdinEditorConfig.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uri</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:713,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Connection EndPoint. Default from OdinEditorConfig. ",content:`<pre><code class="language-C#">public Uri EndPoint { get; }
</code></pre>
<p>Connection EndPoint. Default from OdinEditorConfig.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uri</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:714,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Connection EndPoint. Default from OdinEditorConfig. ",content:`<pre><code class="language-C#">public Uri EndPoint { get; }
</code></pre>
<p>Connection EndPoint. Default from OdinEditorConfig.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uri</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:715,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Room server gateway endpoint ",content:`<pre><code class="language-C#">public string EndPoint { get; }
</code></pre>
<p>Room server gateway endpoint</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:716,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/endpoint/",title:"EndPoint",section:"ODIN Documentation",description:" Connection EndPoint. Default from OdinEditorConfig. ",content:`<pre><code class="language-C#">public Uri EndPoint { get; }
</code></pre>
<p>Connection EndPoint. Default from OdinEditorConfig.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Uri</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:717,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/enumerator/",title:"Enumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct Enumerator : IEnumerator&lt;KeyValuePair&lt;string, MsgPackReader&gt;&gt;
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/enumerator/current/">Current</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/enumerator/movenext/">MoveNext</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/enumerator/dispose/">Dispose</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:718,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/",title:"Enums",section:"ODIN Documentation",description:"An index of all Enums available in the ODIN Unity SDK",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p>The ODIN Unity SDK has defined these Enums:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></li>
</span>
</ul>
`}),e.add({id:719,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/",title:"Enums",section:"ODIN Documentation",description:"An index of all Enums available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Enums:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/">OdinUserDataTarget</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></li>
</span>
</ul>
`}),e.add({id:720,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/",title:"Enums",section:"ODIN Documentation",description:"An index of all Enums available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Enums:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></li>
</span>
</ul>
`}),e.add({id:721,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/",title:"Enums",section:"ODIN Documentation",description:"An index of all Enums available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Enums:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></li>
</span>
</ul>
`}),e.add({id:722,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/",title:"Enums",section:"ODIN Documentation",description:"An index of all Enums available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Enums:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/">MsgPackMessageType</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/enums/odineffecttype/">OdinEffectType</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></li>
</span>
</ul>
`}),e.add({id:723,href:"https://www.4players.io/odin/sdk/unity/enums/",title:"Enums",section:"ODIN Documentation",description:"An index of all Enums available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Enums:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/odinuserdatatarget/">OdinUserDataTarget</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></li>
</span>
</ul>
`}),e.add({id:724,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Equals(MediaStream x, MediaStream y)
</code></pre>
<p>Determines whether the streams are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:725,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Equals(Peer x, Peer y)
</code></pre>
<p>Determines whether the peers are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:726,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Equals(Room x, Room y)
</code></pre>
<p>Compares two rooms by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is equal</td>
</tr>
</tbody>
</table>
`}),e.add({id:727,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(MediaStream x, MediaStream y)
</code></pre>
<p>Determines whether the streams are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:728,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Peer x, Peer y)
</code></pre>
<p>Determines whether the peers are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:729,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Room x, Room y)
</code></pre>
<p>Compares two rooms by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is equal</td>
</tr>
</tbody>
</table>
`}),e.add({id:730,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(MediaStream x, MediaStream y)
</code></pre>
<p>Determines whether the streams are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:731,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Peer x, Peer y)
</code></pre>
<p>Determines whether the peers are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:732,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Room x, Room y)
</code></pre>
<p>Compares two rooms by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is equal</td>
</tr>
</tbody>
</table>
`}),e.add({id:733,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(MediaStream x, MediaStream y)
</code></pre>
<p>Determines whether the streams are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:734,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Peer x, Peer y)
</code></pre>
<p>Determines whether the peers are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:735,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Room x, Room y)
</code></pre>
<p>Compares two rooms by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is equal</td>
</tr>
</tbody>
</table>
`}),e.add({id:736,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Room x, Room y)
</code></pre>
<p>Compares two rooms by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is equal</td>
</tr>
</tbody>
</table>
`}),e.add({id:737,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(MediaStream x, MediaStream y)
</code></pre>
<p>Determines whether the streams are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:738,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Peer x, Peer y)
</code></pre>
<p>Determines whether the peers are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if equal or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:739,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/equals/",title:"Equals",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Equals(Room x, Room y)
</code></pre>
<p>Compares two rooms by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
<tr>
<td>y</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is equal</td>
</tr>
</tbody>
</table>
`}),e.add({id:740,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcresult/error/",title:"Error",section:"ODIN Documentation",description:" error ",content:`<pre><code class="language-C#">public string Error { get; }
</code></pre>
<p>error</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:741,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinexception/errorcode/",title:"ErrorCode",section:"ODIN Documentation",description:" OdinErrorCode ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public uint ErrorCode
</code></pre>
<p>OdinErrorCode</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:742,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinexception/errorcode/",title:"ErrorCode",section:"ODIN Documentation",description:" OdinErrorCode ",content:`<pre><code class="language-C#">public uint ErrorCode
</code></pre>
<p>OdinErrorCode</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:743,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinexception/errorcode/",title:"ErrorCode",section:"ODIN Documentation",description:" OdinErrorCode ",content:`<pre><code class="language-C#">public uint ErrorCode
</code></pre>
<p>OdinErrorCode</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:744,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinexception/errorcode/",title:"ErrorCode",section:"ODIN Documentation",description:" OdinErrorCode ",content:`<pre><code class="language-C#">public uint ErrorCode
</code></pre>
<p>OdinErrorCode</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:745,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinexception/errorcode/",title:"ErrorCode",section:"ODIN Documentation",description:" OdinErrorCode ",content:`<pre><code class="language-C#">public OdinError ErrorCode
</code></pre>
<p>OdinErrorCode</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:746,href:"https://www.4players.io/odin/sdk/unity/classes/odinexception/errorcode/",title:"ErrorCode",section:"ODIN Documentation",description:" OdinErrorCode ",content:`<pre><code class="language-C#">public uint ErrorCode
</code></pre>
<p>OdinErrorCode</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:747,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/response/errorindex/",title:"ErrorIndex",section:"ODIN Documentation",description:" binary|string|null field (error) ",content:`<pre><code class="language-C#">public const int ErrorIndex = 2
</code></pre>
<p><code>binary|string|null</code> field (error)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:748,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:749,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odineventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:750,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:751,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinlefteventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:752,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:753,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:754,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:755,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:756,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:757,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:758,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:759,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/event/",title:"event",section:"ODIN Documentation",description:"The name of the event that was fired (see keys of OdinEvents for possible values).",content:`<pre><code class="language-C#">public event: any
</code></pre>
<p>The name of the event that was fired (see keys of OdinEvents for possible values).</p>
`}),e.add({id:760,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnection/eventuserdata/",title:"EventUserdata",section:"ODIN Documentation",description:" Custom connection userdata ",content:`<pre><code class="language-C#">public MarshalByRefObject EventUserdata { get; }
</code></pre>
<p>Custom connection userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>MarshalByRefObject</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:761,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/exponentofscale/",title:"ExponentOfScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float ExponentOfScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:762,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/ext16/",title:"Ext16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Ext16 = 200
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:763,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/ext32/",title:"Ext32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Ext32 = 201
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:764,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/ext8/",title:"Ext8",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Ext8 = 199
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:765,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/exttypecode_timestamp/",title:"ExtTypeCode_Timestamp",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const sbyte ExtTypeCode_Timestamp = -1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>SByte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:766,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/false/",title:"False",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte False = 194
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:767,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext1/",title:"FixExt1",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte FixExt1 = 212
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:768,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext16/",title:"FixExt16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte FixExt16 = 216
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:769,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext2/",title:"FixExt2",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte FixExt2 = 213
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:770,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext4/",title:"FixExt4",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte FixExt4 = 214
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:771,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext8/",title:"FixExt8",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte FixExt8 = 215
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:772,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/float32/",title:"Float32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Float32 = 202
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:773,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/float64/",title:"Float64",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Float64 = 203
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:774,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/flush/",title:"Flush",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Flush()
</code></pre>
`}),e.add({id:775,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/flushframebuffer/",title:"FlushFrameBuffer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void FlushFrameBuffer()
</code></pre>
`}),e.add({id:776,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/flushownpeerdataupdate/",title:"flushOwnPeerDataUpdate",section:"ODIN Documentation",description:"Sends updated user data of your own peer to the server.",content:`<pre><code class="language-C#">flushOwnPeerDataUpdate(): Promise&lt;void&gt;
</code></pre>
<p>Sends updated user data of your own peer to the server.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:777,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/flushsilentflag/",title:"FlushSilentFlag",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void FlushSilentFlag()
</code></pre>
`}),e.add({id:778,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/freeroom/",title:"FreeRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool FreeRoom(ulong roomId)
public bool FreeRoom(Room room)
</code></pre>
<p>Close and remove a room by Id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>UInt64</td>
<td>room id</td>
</tr>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="freeroomroomid">FreeRoom(roomId)</h3>
<pre><code class="language-C#">public bool FreeRoom(ulong roomId)
</code></pre>
<p>Close and remove a room by Id</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>UInt64</td>
<td>room id</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="freeroomroom">FreeRoom(room)</h3>
<pre><code class="language-C#">public bool FreeRoom(Room room)
</code></pre>
<p>Close and remove a room</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:779,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/freerooms/",title:"FreeRooms",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void FreeRooms()
</code></pre>
<p>Free all Room associated.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Should only be called in Loading-Screens or Scene transissions</p>
</div>
</div>

`}),e.add({id:780,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/gain_controller/",title:"gain_controller",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool gain_controller
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:781,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/gaincontroller/",title:"gainController",section:"ODIN Documentation",description:"Enable or disable the gain controller",content:`<pre><code class="language-C#">public gainController: boolean
</code></pre>
<p>Enable or disable the gain controller</p>
`}),e.add({id:782,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool GainController
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:783,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Turns gain controller on and off ",content:`<pre><code class="language-C#">public bool GainController
</code></pre>
<p>Turns gain controller on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:784,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Enable or disable the gain controller ",content:`<pre><code class="language-C#">public bool GainController { get; set; }
</code></pre>
<p>Enable or disable the gain controller</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:785,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Turns gain controller on and off ",content:`<pre><code class="language-C#">public bool GainController
</code></pre>
<p>Turns gain controller on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:786,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool GainController
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:787,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Turns gain controller on and off ",content:`<pre><code class="language-C#">public bool GainController
</code></pre>
<p>Turns gain controller on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:788,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Enable or disable the gain controller ",content:`<pre><code class="language-C#">public bool GainController { get; set; }
</code></pre>
<p>Enable or disable the gain controller</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:789,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled ",content:`<pre><code class="language-C#">public bool GainController { get; set; }
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:790,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GainController
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:791,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool GainController
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:792,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool GainController
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:793,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Turns gain controller on and off ",content:`<pre><code class="language-C#">public bool GainController
</code></pre>
<p>Turns gain controller on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:794,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/gaincontroller/",title:"GainController",section:"ODIN Documentation",description:" Enable or disable the gain controller ",content:`<pre><code class="language-C#">public bool GainController { get; set; }
</code></pre>
<p>Enable or disable the gain controller</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:795,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/gateway/",title:"Gateway",section:"ODIN Documentation",description:" Odin endpoint server ",content:`<pre><code class="language-C#">public string Gateway
</code></pre>
<p>Odin endpoint server</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:796,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinclientsettings/gatewayurl/",title:"gatewayUrl",section:"ODIN Documentation",description:"The URL of the ODIN gateway to use.",content:`<pre><code class="language-C#">string
</code></pre>
<p>The URL of the ODIN gateway to use.</p>
`}),e.add({id:797,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/generateaccesstoken/",title:"generateAccessToken",section:"ODIN Documentation",description:"Generates a token for the given access key, room and user ID. This token can be used to join the room. To be more consistent with other SDKs, this method is deprecated. Use generateToken instead.",content:`<pre><code class="language-C#">public generateAccessToken(accessKey: string, roomId: string, userId: string): string
</code></pre>
<p>Generates a token for the given access key, room and user ID. This token can be used to join the room.
To be more consistent with other SDKs, this method is deprecated. Use generateToken instead.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>accessKey</td>
<td>string</td>
<td>The access key to use to generate the token. You can get a free access token in our developer center</td>
</tr>
<tr>
<td>roomId</td>
<td>string</td>
<td>The ID of the room to generate the token for.</td>
</tr>
<tr>
<td>userId</td>
<td>string</td>
<td>The ID of the user to generate the token for.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>string</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:798,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/generatetoken/",title:"generateToken",section:"ODIN Documentation",description:"Generates a room token for the given access key, room and user ID. This token can be used to join the room.",content:`<pre><code class="language-C#">public generateToken(accessKey: string, roomId: string, userId: string): string
</code></pre>
<p>Generates a room token for the given access key, room and user ID. This token can be used to join the room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>accessKey</td>
<td>string</td>
<td>The access key to use to generate the token. You can get a free access token in our developer center</td>
</tr>
<tr>
<td>roomId</td>
<td>string</td>
<td>The ID of the room to generate the token for.</td>
</tr>
<tr>
<td>userId</td>
<td>string</td>
<td>The ID of the user to generate the token for.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>string</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:799,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/generatetoken/",title:"GenerateToken",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GenerateToken(string body, out string token)
</code></pre>
<p>Create a example token to join a room. For production use a token server!</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is for testing and not intended for production. Access key should never be client side.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>body</td>
<td>String</td>
<td>token body</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>token string</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:800,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/generateuiaccesskey/",title:"GenerateUIAccessKey",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void GenerateUIAccessKey()
</code></pre>
`}),e.add({id:801,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/generateuiaccesskey/",title:"GenerateUIAccessKey",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void GenerateUIAccessKey()
</code></pre>
`}),e.add({id:802,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/generateuiaccesskey/",title:"GenerateUIAccessKey",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void GenerateUIAccessKey()
</code></pre>
`}),e.add({id:803,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/generateuiaccesskey/",title:"GenerateUIAccessKey",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void GenerateUIAccessKey()
</code></pre>
`}),e.add({id:804,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/generateuiaccesskey/",title:"GenerateUIAccessKey",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void GenerateUIAccessKey()
</code></pre>
`}),e.add({id:805,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/getaudiosettings/",title:"getAudioSettings",section:"ODIN Documentation",description:"Returns the current voice processing config for VAD and volume gate.",content:`<pre><code class="language-C#">getAudioSettings(): undefined | IOdinAudioSettings
</code></pre>
<p>Returns the current voice processing config for VAD and volume gate.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/">undefined | IOdinAudioSettings</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:806,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/getbasepeer/",title:"GetBasePeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PeerEntity GetBasePeer()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/">PeerEntity</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:807,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/getbasepeer/",title:"GetBasePeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PeerEntity GetBasePeer()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/">PeerEntity</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:808,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipeer/getbasepeer/",title:"GetBasePeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">PeerEntity GetBasePeer()
</code></pre>
<p>Get the underlying Odin</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/">PeerEntity</a></td>
<td>native wrapper peer</td>
</tr>
</tbody>
</table>
`}),e.add({id:809,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/getbaseroom/",title:"GetBaseRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetBaseRoom()
</code></pre>
<p>Odin base room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>wrapper room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:810,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/getbaseroom/",title:"GetBaseRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetBaseRoom()
</code></pre>
<p>This will always return itself</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:811,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iroom/getbaseroom/",title:"GetBaseRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Room GetBaseRoom()
</code></pre>
<p>Get the underlying Room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>native wrapper room</td>
</tr>
</tbody>
</table>
`}),e.add({id:812,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getbinary/",title:"GetBinary",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public byte[] GetBinary()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:813,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getbool/",title:"GetBool",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetBool()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:814,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/getbuffer/",title:"GetBuffer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetBuffer(out ArraySegment&lt;byte&gt; buffer)
</code></pre>
<p>Get raw bytes from the underlying stream buffer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>ArraySegment&lt;Byte&gt;</td>
<td>underlying stream buffer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:815,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/getbuffer/",title:"GetBuffer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">bool GetBuffer(out ArraySegment&lt;byte&gt; buffer)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>ArraySegment&lt;Byte&gt;</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:816,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getbyte/",title:"GetByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public byte GetByte()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:817,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/getbytes/",title:"GetBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public byte[] GetBytes()
</code></pre>
<p>Get raw bytes from the stream buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>Msgpack bytes</td>
</tr>
</tbody>
</table>
`}),e.add({id:818,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/getbytes/",title:"GetBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">byte[] GetBytes()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:819,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/getdecoder/",title:"GetDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetDecoder(ushort mediaId, out MediaDecoder decoder)
</code></pre>
<p>Get a output media by id.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>decoder id</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on found or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:820,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/getdecoder/",title:"GetDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetDecoder(ulong peerId, ushort mediaId, out MediaDecoder decoder)
</code></pre>
<p>Get a decoder from <a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a> by id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output object or null</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on decoder found or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:821,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getdouble/",title:"GetDouble",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public double GetDouble()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Double</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:822,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/geteffect/",title:"GetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PiplineEffect GetEffect()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:823,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/geteffect/",title:"GetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual PiplineEffect GetEffect()
</code></pre>
<p>Get custom effect</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></td>
<td>custom effect</td>
</tr>
</tbody>
</table>
`}),e.add({id:824,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/geteffect/",title:"GetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PiplineEffect GetEffect()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:825,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iodineffect/geteffect/",title:"GetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">PiplineEffect GetEffect()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:826,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/geteffectcount/",title:"GetEffectCount",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint GetEffectCount()
</code></pre>
<p>Get the current effect count of the native pipeline</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>count of native registered effects</td>
</tr>
</tbody>
</table>
`}),e.add({id:827,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/geteffectid/",title:"GetEffectId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint GetEffectId(uint indexId)
</code></pre>
<p>Get the effect id of the native pipeline by index id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexId</td>
<td>UInt32</td>
<td>index id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>effect id</td>
</tr>
</tbody>
</table>
`}),e.add({id:828,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffectindex/",title:"GetEffectIndex",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError GetEffectIndex(out uint indexId)
</code></pre>
<p>Get native effect index</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexId</td>
<td>UInt32</td>
<td>native index</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:829,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/geteffectindex/",title:"GetEffectIndex",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError GetEffectIndex(out uint indexId)
</code></pre>
<p>Get native effect index</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexId</td>
<td>UInt32</td>
<td>native index</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:830,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/geteffects/",title:"GetEffects",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ILookup&lt;uint, IPiplineEffect&gt; GetEffects()
</code></pre>
<p>Get Pipeline effects collection</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ILookup&lt;UInt32,IPiplineEffect&gt;</td>
<td>Get effects mapped by id</td>
</tr>
</tbody>
</table>
`}),e.add({id:831,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffecttype/",title:"GetEffectType",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError GetEffectType(out NativeBindings.OdinEffectType effectType)
</code></pre>
<p>Get native effect NativeBindings</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effectType</td>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/">OdinEffectType</a></td>
<td>native type</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:832,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/geteffecttype/",title:"GetEffectType",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError GetEffectType(out NativeBindings.OdinEffectType effectType)
</code></pre>
<p>Get native effect NativeBindings</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effectType</td>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/">OdinEffectType</a></td>
<td>native type</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:833,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/geteffectuserdata/",title:"GetEffectUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual U GetEffectUserData()
</code></pre>
<p>Get userdata used for the OdinCustomEffectUnityComponentBase%601</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;U&gt;</td>
<td>effect userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:834,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/geteffectuserdata/",title:"GetEffectUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override IntPtr GetEffectUserData()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:835,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/geteffectuserdata/",title:"GetEffectUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinTerrainFilterComponent.TerrainFilterUserData GetEffectUserData()
</code></pre>
<p>Get delegate userdata</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/">TerrainFilterUserData</a></td>
<td>effect userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:836,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/getencoder/",title:"GetEncoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetEncoder(ushort mediaId, out MediaEncoder encoder)
</code></pre>
<p>Get a encoder from Room by id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input object</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on encoder found or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:837,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IEnumerator&lt;MediaStream&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;MediaStream&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:838,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IEnumerator&lt;Peer&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Peer&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:839,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IEnumerator&lt;Room&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Room&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:840,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;MediaStream&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;MediaStream&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:841,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Peer&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Peer&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:842,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Room&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Room&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:843,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;MediaStream&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;MediaStream&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:844,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Peer&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Peer&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:845,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Room&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Room&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:846,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;MediaStream&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;MediaStream&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:847,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Peer&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Peer&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:848,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Room&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Room&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:849,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/arrayenumerable/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;MsgPackReader&gt; GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;MsgPackReader&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:850,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mapenumerable/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;KeyValuePair&lt;string, MsgPackReader&gt;&gt; GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;KeyValuePair&lt;MsgPackReader&gt;&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:851,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Room&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Room&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:852,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;MediaStream&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;MediaStream&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:853,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Peer&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Peer&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:854,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/getenumerator/",title:"GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator&lt;Room&gt; GetEnumerator()
</code></pre>
<p>Get enumerator for iteration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator&lt;Room&gt;</td>
<td>enumerator</td>
</tr>
</tbody>
</table>
`}),e.add({id:855,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getextension/",title:"GetExtension",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MessagePackExtension GetExtension()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/messagepackextension/">MessagePackExtension</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:856,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getfloat/",title:"GetFloat",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float GetFloat()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:857,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getformatcode/",title:"GetFormatCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public byte GetFormatCode()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:858,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/getformatname/",title:"GetFormatName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static string GetFormatName(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:859,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getformatname/",title:"GetFormatName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetFormatName()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:860,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/getframebuffersize/",title:"GetFrameBufferSize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual float GetFrameBufferSize()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:861,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int GetHashCode(MediaStream obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:862,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int GetHashCode(Peer obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:863,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int GetHashCode(Room obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:864,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(MediaStream obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:865,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Peer obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:866,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Room obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:867,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(MediaStream obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:868,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Peer obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:869,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Room obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:870,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(MediaStream obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:871,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Peer obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:872,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Room obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:873,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Room obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:874,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(MediaStream obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:875,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Peer obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:876,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/gethashcode/",title:"GetHashCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetHashCode(Room obj)
</code></pre>
<p>Default GetHashCode</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>hash code</td>
</tr>
</tbody>
</table>
`}),e.add({id:877,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/getinstance/",title:"GetInstance",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static ICustomMarshaler GetInstance(string cookie)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>cookie</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ICustomMarshaler</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:878,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/getinstance/",title:"GetInstance",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static ICustomMarshaler GetInstance(string cookie)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>cookie</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ICustomMarshaler</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:879,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getint/",title:"GetInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetInt()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:880,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/getlength/",title:"GetLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public long GetLength()
</code></pre>
<p>Get raw bytes from the stream buffer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td>Msgpack buffer length</td>
</tr>
</tbody>
</table>
`}),e.add({id:881,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/getlength/",title:"GetLength",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">long GetLength()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:882,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getlong/",title:"GetLong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public long GetLong()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:883,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PlaybackStream GetMedia(string roomId, long mediaStreamId)
</code></pre>
<p>Get the PlaybackStream of a peer in the room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/">PlaybackStream</a></td>
<td>PlaybackStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:884,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackStream GetMedia(string roomId, long mediaStreamId)
</code></pre>
<p>Get the PlaybackStream of a peer in the room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/">PlaybackStream</a></td>
<td>PlaybackStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:885,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackStream GetMedia(string roomId, long mediaStreamId)
</code></pre>
<p>Get the PlaybackStream of a peer in the room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/">PlaybackStream</a></td>
<td>PlaybackStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:886,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackStream GetMedia(string roomId, long mediaStreamId)
</code></pre>
<p>Get the PlaybackStream of a peer in the room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/">PlaybackStream</a></td>
<td>PlaybackStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:887,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public T GetMedia&lt;T&gt;()
    where T : IMedia
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:888,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual T GetMedia&lt;T&gt;()
    where T : IMedia
</code></pre>
<p>Get Media</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td>Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:889,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public T GetMedia&lt;T&gt;()
    where T : IMedia
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:890,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iodineffect/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">T GetMedia&lt;T&gt;()
    where T : IMedia
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>&lt;T&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:891,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getmedia/",title:"GetMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackStream GetMedia(string roomId, long mediaStreamId)
</code></pre>
<p>Get the PlaybackStream of a peer in the room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/">PlaybackStream</a></td>
<td>PlaybackStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:892,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/getmediabyid/",title:"getMediaById",section:"ODIN Documentation",description:"Returns the `OdinMedia` instance matching the specified ID.",content:`<pre><code class="language-C#">getMediaById(id: number): undefined | OdinMedia
</code></pre>
<p>Returns the <code>OdinMedia</code> instance matching the specified ID.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>number</td>
<td>The media ID to search for</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/">undefined | OdinMedia</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:893,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/getmediaid/",title:"GetMediaId",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ushort GetMediaId()
</code></pre>
<p>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td>id value</td>
</tr>
</tbody>
</table>
`}),e.add({id:894,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/getmediaid/",title:"GetMediaId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort GetMediaId()
</code></pre>
<p>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td>id value</td>
</tr>
</tbody>
</table>
`}),e.add({id:895,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/getmediaid/",title:"GetMediaId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort GetMediaId()
</code></pre>
<p>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td>id value</td>
</tr>
</tbody>
</table>
`}),e.add({id:896,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/getmediaid/",title:"GetMediaId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort GetMediaId()
</code></pre>
<p>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td>id value</td>
</tr>
</tbody>
</table>
`}),e.add({id:897,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/getmediaid/",title:"GetMediaId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort GetMediaId()
</code></pre>
<p>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td>id value</td>
</tr>
</tbody>
</table>
`}),e.add({id:898,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/getmediastreamids/",title:"GetMediaStreamIds",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public List&lt;long&gt; GetMediaStreamIds()
</code></pre>
<p>Get a copy of all ids of Media from this peer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;Int64&gt;</td>
<td>MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:899,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/getmediastreamids/",title:"GetMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;long&gt; GetMediaStreamIds()
</code></pre>
<p>Get a copy of all ids of Media from this peer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;Int64&gt;</td>
<td>MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:900,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/getmediastreamids/",title:"GetMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;long&gt; GetMediaStreamIds()
</code></pre>
<p>Get a copy of all ids of Media from this peer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;Int64&gt;</td>
<td>MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:901,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/getmediastreamids/",title:"GetMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;long&gt; GetMediaStreamIds()
</code></pre>
<p>Get a copy of all ids of Media from this peer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;Int64&gt;</td>
<td>MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:902,href:"https://www.4players.io/odin/sdk/unity/classes/peer/getmediastreamids/",title:"GetMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;long&gt; GetMediaStreamIds()
</code></pre>
<p>Get a copy of all ids of Media from this peer</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;Int64&gt;</td>
<td>MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:903,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/getnativebuffer/",title:"GetNativeBuffer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static byte[] GetNativeBuffer(IntPtr pointer, uint length)
</code></pre>
<p>Get Odin native buffer IntPtr data</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pointer</td>
<td>IntPtr</td>
<td></td>
</tr>
<tr>
<td>length</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:904,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/getnativedatasize/",title:"GetNativeDataSize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetNativeDataSize()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:905,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/getnativedatasize/",title:"GetNativeDataSize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int GetNativeDataSize()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:906,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/getnextindex/",title:"GetNextIndex",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint GetNextIndex()
</code></pre>
<p>Calculate the next available index based on MediaPipeline entries</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td>next available index</td>
</tr>
</tbody>
</table>
`}),e.add({id:907,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/getodinaudiostreamstats/",title:"GetOdinAudioStreamStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinAudioStreamStats GetOdinAudioStreamStats()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:908,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/getodinaudiostreamstats/",title:"GetOdinAudioStreamStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinAudioStreamStats GetOdinAudioStreamStats()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>OdinAudioStreamStats</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:909,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/getodinaudiostreamstats/",title:"GetOdinAudioStreamStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinAudioStreamStats GetOdinAudioStreamStats()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:910,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/getodinaudiostreamstats/",title:"GetOdinAudioStreamStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinAudioStreamStats GetOdinAudioStreamStats()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/">OdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:911,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/getodindefault/",title:"GetOdinDefault",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static OdinRoomConfig GetOdinDefault()
</code></pre>
<p>Creates Apm OdinRoomConfig based on Odin</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>default Odin Apm Room Config</td>
</tr>
</tbody>
</table>
`}),e.add({id:912,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/getodindefault/",title:"GetOdinDefault",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static OdinRoomConfig GetOdinDefault()
</code></pre>
<p>Creates Apm OdinRoomConfig based on Odin</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>default Odin Apm Room Config</td>
</tr>
</tbody>
</table>
`}),e.add({id:913,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/getodindefault/",title:"GetOdinDefault",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static OdinRoomConfig GetOdinDefault()
</code></pre>
<p>Creates Apm OdinRoomConfig based on Odin</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>default Odin Apm Room Config</td>
</tr>
</tbody>
</table>
`}),e.add({id:914,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/getodindefault/",title:"GetOdinDefault",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static OdinRoomConfig GetOdinDefault()
</code></pre>
<p>Creates Apm OdinRoomConfig based on Odin</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>default Odin Apm Room Config</td>
</tr>
</tbody>
</table>
`}),e.add({id:915,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/getodindefault/",title:"GetOdinDefault",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static OdinRoomConfig GetOdinDefault()
</code></pre>
<p>Creates Apm OdinRoomConfig based on Odin</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>default Odin Apm Room Config</td>
</tr>
</tbody>
</table>
`}),e.add({id:916,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/getorcreatedecoder/",title:"GetOrCreateDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetOrCreateDecoder(ushort mediaId, uint samplerate, bool stereo, out MediaDecoder decoder)
</code></pre>
<p>Get a output media by id. If the decoder is not found create a new one that will be added PeerEntity</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>decoder id</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>stereo flag</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:917,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/getorcreatedecoder/",title:"GetOrCreateDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetOrCreateDecoder(ulong peerId, ushort mediaId, out MediaDecoder decoder)
public bool GetOrCreateDecoder(ulong peerId, ushort mediaId, uint samplerate, bool stereo, out MediaDecoder decoder)
</code></pre>
<p>Get a decoder from <a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a> by id. If the decoder is not found create a new one that will be added to the Peer</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output object or null</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on decoder found or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getorcreatedecoderpeerid-mediaid-decoder">GetOrCreateDecoder(peerId, mediaId, decoder)</h3>
<pre><code class="language-C#">public bool GetOrCreateDecoder(ulong peerId, ushort mediaId, out MediaDecoder decoder)
</code></pre>
<p>Get a decoder from <a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a> by id. If the decoder is not found create a new one that will be added to the Peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output object or null</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on decoder found or false</td>
</tr>
</tbody>
</table>
<h3 id="getorcreatedecoderpeerid-mediaid-samplerate-stereo-decoder">GetOrCreateDecoder(peerId, mediaId, samplerate, stereo, decoder)</h3>
<pre><code class="language-C#">public bool GetOrCreateDecoder(ulong peerId, ushort mediaId, uint samplerate, bool stereo, out MediaDecoder decoder)
</code></pre>
<p>Get a decoder from <a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a> by id. If the decoder is not found create a new one that will be added to the Peer</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of output media</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output object or null</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on decoder found or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:918,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/getorcreateencoder/",title:"GetOrCreateEncoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool GetOrCreateEncoder(ushort mediaId, out MediaEncoder encoder)
public bool GetOrCreateEncoder(ushort mediaId, uint samplerate, bool stereo, out MediaEncoder encoder)
</code></pre>
<p>Get a encoder from Room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input object</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true or false on error</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getorcreateencodermediaid-encoder">GetOrCreateEncoder(mediaId, encoder)</h3>
<pre><code class="language-C#">public bool GetOrCreateEncoder(ushort mediaId, out MediaEncoder encoder)
</code></pre>
<p>Get a encoder from Room.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will use the default samplerate and stereo flag set by the current room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input object</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true or false on error</td>
</tr>
</tbody>
</table>
<h3 id="getorcreateencodermediaid-samplerate-stereo-encoder">GetOrCreateEncoder(mediaId, samplerate, stereo, encoder)</h3>
<pre><code class="language-C#">public bool GetOrCreateEncoder(ushort mediaId, uint samplerate, bool stereo, out MediaEncoder encoder)
</code></pre>
<p>Get a encoder from Room.</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>custom samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>custom stereo flag</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input object</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true or false on error</td>
</tr>
</tbody>
</table>
`}),e.add({id:919,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getorcreatemicrophonestream/",title:"GetOrCreateMicrophoneStream",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MicrophoneStream GetOrCreateMicrophoneStream(string roomName, OdinMediaConfig config = null)
</code></pre>
<p>Returns the attached Audio</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/">MicrophoneStream</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> or null if there is no room</td>
</tr>
</tbody>
</table>
`}),e.add({id:920,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getorcreatemicrophonestream/",title:"GetOrCreateMicrophoneStream",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream GetOrCreateMicrophoneStream(string roomName, OdinMediaConfig config = null)
</code></pre>
<p>Returns the attached Audio</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/">MicrophoneStream</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> or null if there is no room</td>
</tr>
</tbody>
</table>
`}),e.add({id:921,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getorcreatemicrophonestream/",title:"GetOrCreateMicrophoneStream",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream GetOrCreateMicrophoneStream(string roomName, OdinMediaConfig config = null)
</code></pre>
<p>Returns the attached Audio</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/">MicrophoneStream</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> or null if there is no room</td>
</tr>
</tbody>
</table>
`}),e.add({id:922,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getorcreatemicrophonestream/",title:"GetOrCreateMicrophoneStream",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream GetOrCreateMicrophoneStream(string roomName, OdinMediaConfig config = null)
</code></pre>
<p>Returns the attached Audio</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/">MicrophoneStream</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> or null if there is no room</td>
</tr>
</tbody>
</table>
`}),e.add({id:923,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getorcreatemicrophonestream/",title:"GetOrCreateMicrophoneStream",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream GetOrCreateMicrophoneStream(string roomName, OdinMediaConfig config = null)
</code></pre>
<p>Returns the attached Audio</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/">MicrophoneStream</a></td>
<td><xref href="OdinNative.Odin.Media.MicrophoneStream" data-throw-if-not-resolved="false"></xref> or null if there is no room</td>
</tr>
</tbody>
</table>
`}),e.add({id:924,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getpeer/",title:"GetPeer",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer GetPeer(string roomId, ulong peerId)
</code></pre>
<p>Gets the a Peer object from a specified room matching a peer ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Local seen Peers only, not</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:925,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getpeer/",title:"GetPeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Peer GetPeer(string roomId, ulong peerId)
</code></pre>
<p>Gets the a Peer object from a specified room matching a peer ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Local seen Peers only, not</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:926,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getpeer/",title:"GetPeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Peer GetPeer(string roomId, ulong peerId)
</code></pre>
<p>Gets the a Peer object from a specified room matching a peer ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Local seen Peers only, not</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:927,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getpeer/",title:"GetPeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Peer GetPeer(string roomId, ulong peerId)
</code></pre>
<p>Gets the a Peer object from a specified room matching a peer ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Local seen Peers only, not</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:928,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getpeer/",title:"GetPeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Peer GetPeer(string roomId, ulong peerId)
</code></pre>
<p>Gets the a Peer object from a specified room matching a peer ID</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Local seen Peers only, not</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:929,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/getpeerbyid/",title:"getPeerById",section:"ODIN Documentation",description:"Returns the `OdinPeer` instance matching the specified ID.",content:`<pre><code class="language-C#">getPeerById(id: number): undefined | OdinPeer
</code></pre>
<p>Returns the <code>OdinPeer</code> instance matching the specified ID.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>number</td>
<td>The peer ID to search for</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/">undefined | OdinPeer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:930,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/getpeerid/",title:"GetPeerId",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong GetPeerId()
</code></pre>
<p>Returns the ID of the peer that own this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>id</td>
</tr>
</tbody>
</table>
`}),e.add({id:931,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/getpeerid/",title:"GetPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetPeerId()
</code></pre>
<p>Returns the ID of the peer that own this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>id</td>
</tr>
</tbody>
</table>
`}),e.add({id:932,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/getpeerid/",title:"GetPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetPeerId()
</code></pre>
<p>Returns the ID of the peer that own this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>id</td>
</tr>
</tbody>
</table>
`}),e.add({id:933,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/getpeerid/",title:"GetPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetPeerId()
</code></pre>
<p>Returns the ID of the peer that own this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>id</td>
</tr>
</tbody>
</table>
`}),e.add({id:934,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/getpeerid/",title:"GetPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetPeerId()
</code></pre>
<p>Returns the ID of the peer that own this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>id</td>
</tr>
</tbody>
</table>
`}),e.add({id:935,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getpeers/",title:"GetPeers",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IEnumerable&lt;Peer&gt; GetPeers(string roomId, bool includeSelf = false)
</code></pre>
<p>Get all remote peers inside a room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>optionally include Self in peers result</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Peer&gt;</td>
<td>IEnumerable of RemotePeers</td>
</tr>
</tbody>
</table>
`}),e.add({id:936,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getpeers/",title:"GetPeers",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerable&lt;Peer&gt; GetPeers(string roomId, bool includeSelf = false)
</code></pre>
<p>Get all remote peers inside a room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>optionally include Self in peers result</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Peer&gt;</td>
<td>IEnumerable of RemotePeers</td>
</tr>
</tbody>
</table>
`}),e.add({id:937,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getpeers/",title:"GetPeers",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerable&lt;Peer&gt; GetPeers(string roomId, bool includeSelf = false)
</code></pre>
<p>Get all remote peers inside a room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>optionally include Self in peers result</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Peer&gt;</td>
<td>IEnumerable of RemotePeers</td>
</tr>
</tbody>
</table>
`}),e.add({id:938,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getpeers/",title:"GetPeers",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerable&lt;Peer&gt; GetPeers(string roomId, bool includeSelf = false)
</code></pre>
<p>Get all remote peers inside a room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>optionally include Self in peers result</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Peer&gt;</td>
<td>IEnumerable of RemotePeers</td>
</tr>
</tbody>
</table>
`}),e.add({id:939,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getpeers/",title:"GetPeers",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerable&lt;Peer&gt; GetPeers(string roomId, bool includeSelf = false)
</code></pre>
<p>Get all remote peers inside a room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>optionally include Self in peers result</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Peer&gt;</td>
<td>IEnumerable of RemotePeers</td>
</tr>
</tbody>
</table>
`}),e.add({id:940,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/getpipeline/",title:"GetPipeline",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaPipeline GetPipeline()
</code></pre>
<p>Get native effect pipeline</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>managed effect pipeline</td>
</tr>
</tbody>
</table>
`}),e.add({id:941,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/getpipeline/",title:"GetPipeline",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaPipeline GetPipeline()
</code></pre>
<p>Get native effect pipeline</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>managed effect pipeline</td>
</tr>
</tbody>
</table>
`}),e.add({id:942,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/getpipeline/",title:"GetPipeline",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaPipeline GetPipeline()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:943,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imedia/getpipeline/",title:"GetPipeline",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">MediaPipeline GetPipeline()
</code></pre>
<p>Get native effect pipeline</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td>managed effect pipeline</td>
</tr>
</tbody>
</table>
`}),e.add({id:944,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getplaybackcomponent/",title:"GetPlaybackComponent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PlaybackComponent GetPlaybackComponent(string roomId, ulong peerId, long mediaStreamId)
</code></pre>
<p>Gets a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>PlaybackComponent or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:945,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getplaybackcomponent/",title:"GetPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent GetPlaybackComponent(string roomId, ulong peerId, long mediaStreamId)
</code></pre>
<p>Gets a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>PlaybackComponent or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:946,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getplaybackcomponent/",title:"GetPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent GetPlaybackComponent(string roomId, ulong peerId, long mediaStreamId)
</code></pre>
<p>Gets a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>PlaybackComponent or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:947,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getplaybackcomponent/",title:"GetPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent GetPlaybackComponent(string roomId, ulong peerId, long mediaStreamId)
</code></pre>
<p>Gets a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>PlaybackComponent or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:948,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponent/",title:"GetPlaybackComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent GetPlaybackComponent(string roomId, ulong peerId, long mediaStreamId)
</code></pre>
<p>Gets a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/">PlaybackComponent</a></td>
<td>PlaybackComponent or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:949,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getplaybackcomponents/",title:"GetPlaybackComponents",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
public PlaybackComponent[] GetPlaybackComponents(string roomId)
public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getplaybackcomponents">GetPlaybackComponents()</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsroomid">GetPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(string roomId)
</code></pre>
<p>Gets all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentspeerid">GetPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
</code></pre>
<p>Gets all Audio across rooms filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsmediastreamid">GetPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across rooms filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
`}),e.add({id:950,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getplaybackcomponents/",title:"GetPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
public PlaybackComponent[] GetPlaybackComponents(string roomId)
public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getplaybackcomponents">GetPlaybackComponents()</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsroomid">GetPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(string roomId)
</code></pre>
<p>Gets all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentspeerid">GetPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
</code></pre>
<p>Gets all Audio across rooms filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsmediastreamid">GetPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across rooms filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
`}),e.add({id:951,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getplaybackcomponents/",title:"GetPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
public PlaybackComponent[] GetPlaybackComponents(string roomId)
public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getplaybackcomponents">GetPlaybackComponents()</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsroomid">GetPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(string roomId)
</code></pre>
<p>Gets all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentspeerid">GetPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
</code></pre>
<p>Gets all Audio across rooms filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsmediastreamid">GetPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across rooms filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
`}),e.add({id:952,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getplaybackcomponents/",title:"GetPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
public PlaybackComponent[] GetPlaybackComponents(string roomId)
public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getplaybackcomponents">GetPlaybackComponents()</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsroomid">GetPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(string roomId)
</code></pre>
<p>Gets all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentspeerid">GetPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
</code></pre>
<p>Gets all Audio across rooms filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsmediastreamid">GetPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across rooms filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
`}),e.add({id:953,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getplaybackcomponents/",title:"GetPlaybackComponents",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
public PlaybackComponent[] GetPlaybackComponents(string roomId)
public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getplaybackcomponents">GetPlaybackComponents()</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents()
</code></pre>
<p>Gets all Audio across all rooms</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Simply uses <a href="https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html">FindObjectsOfType PlaybackComponent</a>
A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsroomid">GetPlaybackComponents(roomId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(string roomId)
</code></pre>
<p>Gets all Audio filtered by room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomId</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentspeerid">GetPlaybackComponents(peerId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(ulong peerId)
</code></pre>
<p>Gets all Audio across rooms filtered by peer</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>peer ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
<h3 id="getplaybackcomponentsmediastreamid">GetPlaybackComponents(mediaStreamId)</h3>
<pre><code class="language-C#">public PlaybackComponent[] GetPlaybackComponents(long mediaStreamId)
</code></pre>
<p>Gets all Audio across rooms filtered by media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>A PlaybackComponent always have RoomName, PeerId and MediaId properties.</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>media handle ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>PlaybackComponent[]</td>
<td>The filtered array of objects found matching the type PlaybackComponent.</td>
</tr>
</tbody>
</table>
`}),e.add({id:954,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/getremotepeersids/",title:"GetRemotePeersIds",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public List&lt;ulong&gt; GetRemotePeersIds(bool includeSelf)
</code></pre>
<p>Get a copy of all PeerIds in this room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>to add the own peer id from the Joined event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;UInt64&gt;</td>
<td>PeerIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:955,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/getremotepeersids/",title:"GetRemotePeersIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;ulong&gt; GetRemotePeersIds(bool includeSelf)
</code></pre>
<p>Get a copy of all PeerIds in this room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>to add the own peer id from the Joined event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;UInt64&gt;</td>
<td>PeerIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:956,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/getremotepeersids/",title:"GetRemotePeersIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;ulong&gt; GetRemotePeersIds(bool includeSelf)
</code></pre>
<p>Get a copy of all PeerIds in this room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>to add the own peer id from the Joined event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;UInt64&gt;</td>
<td>PeerIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:957,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/getremotepeersids/",title:"GetRemotePeersIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;ulong&gt; GetRemotePeersIds(bool includeSelf)
</code></pre>
<p>Get a copy of all PeerIds in this room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>to add the own peer id from the Joined event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;UInt64&gt;</td>
<td>PeerIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:958,href:"https://www.4players.io/odin/sdk/unity/classes/room/getremotepeersids/",title:"GetRemotePeersIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public List&lt;ulong&gt; GetRemotePeersIds(bool includeSelf)
</code></pre>
<p>Get a copy of all PeerIds in this room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>includeSelf</td>
<td>Boolean</td>
<td>to add the own peer id from the Joined event</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;UInt64&gt;</td>
<td>PeerIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:959,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/getremotepeersmediastreamids/",title:"GetRemotePeersMediaStreamIds",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ILookup&lt;ulong, IEnumerable&lt;long&gt;&gt; GetRemotePeersMediaStreamIds()
</code></pre>
<p>All ids of Media from remote peers in this room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ILookup&lt;UInt64,IEnumerable&lt;Int64&gt;&gt;</td>
<td>Lookup of PeerId, MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:960,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/getremotepeersmediastreamids/",title:"GetRemotePeersMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ILookup&lt;ulong, IEnumerable&lt;long&gt;&gt; GetRemotePeersMediaStreamIds()
</code></pre>
<p>All ids of Media from remote peers in this room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ILookup&lt;IEnumerable&lt;Int64&gt;&gt;</td>
<td>Lookup of PeerId, MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:961,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/getremotepeersmediastreamids/",title:"GetRemotePeersMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ILookup&lt;ulong, IEnumerable&lt;long&gt;&gt; GetRemotePeersMediaStreamIds()
</code></pre>
<p>All ids of Media from remote peers in this room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ILookup&lt;UInt64,IEnumerable&lt;Int64&gt;&gt;</td>
<td>Lookup of PeerId, MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:962,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/getremotepeersmediastreamids/",title:"GetRemotePeersMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ILookup&lt;ulong, IEnumerable&lt;long&gt;&gt; GetRemotePeersMediaStreamIds()
</code></pre>
<p>All ids of Media from remote peers in this room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ILookup&lt;IEnumerable&lt;Int64&gt;&gt;</td>
<td>Lookup of PeerId, MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:963,href:"https://www.4players.io/odin/sdk/unity/classes/room/getremotepeersmediastreamids/",title:"GetRemotePeersMediaStreamIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ILookup&lt;ulong, IEnumerable&lt;long&gt;&gt; GetRemotePeersMediaStreamIds()
</code></pre>
<p>All ids of Media from remote peers in this room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ILookup&lt;IEnumerable&lt;Int64&gt;&gt;</td>
<td>Lookup of PeerId, MediaStreamIds</td>
</tr>
</tbody>
</table>
`}),e.add({id:964,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getroom/",title:"GetRoom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Room GetRoom(string id)
</code></pre>
<p>Gets the room object from Odin</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:965,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getroom/",title:"GetRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetRoom(string id)
</code></pre>
<p>Gets the room object from Odin</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:966,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getroom/",title:"GetRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetRoom(string id)
</code></pre>
<p>Gets the room object from Odin</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:967,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getroom/",title:"GetRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetRoom(string id)
</code></pre>
<p>Gets the room object from Odin</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:968,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getroom/",title:"GetRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetRoom(string id)
</code></pre>
<p>Gets the room object from Odin</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>String</td>
<td>Room identifier e.g name or token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:969,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/getroomapi/",title:"GetRoomApi",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetRoomApi()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:970,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/getroomapi/",title:"GetRoomApi",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room GetRoomApi()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:971,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipeer/getroomapi/",title:"GetRoomApi",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Room GetRoomApi()
</code></pre>
<p>Get the underlying Room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>native wrapper room</td>
</tr>
</tbody>
</table>
`}),e.add({id:972,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/getroomconnectionstats/",title:"GetRoomConnectionStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinConnectionStats GetRoomConnectionStats()
</code></pre>
<p>Retrieves statistics for the underlying connection of this room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room has to be in a joined state</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/">OdinConnectionStats</a></td>
<td>Statistics for the underlying connection of this room</td>
</tr>
</tbody>
</table>
`}),e.add({id:973,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/getroomconnectionstats/",title:"GetRoomConnectionStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinConnectionStats GetRoomConnectionStats()
</code></pre>
<p>Retrieves statistics for the underlying connection of this room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room has to be in a joined state</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/">OdinConnectionStats</a></td>
<td>Statistics for the underlying connection of this room</td>
</tr>
</tbody>
</table>
`}),e.add({id:974,href:"https://www.4players.io/odin/sdk/unity/classes/room/getroomconnectionstats/",title:"GetRoomConnectionStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinConnectionStats GetRoomConnectionStats()
</code></pre>
<p>Retrieves statistics for the underlying connection of this room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room has to be in a joined state</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/">OdinConnectionStats</a></td>
<td>Statistics for the underlying connection of this room</td>
</tr>
</tbody>
</table>
`}),e.add({id:975,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/getroomcustomer/",title:"GetRoomCustomer",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string GetRoomCustomer()
</code></pre>
<p>Retrieves the identifier of the customer the room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>customer</td>
</tr>
</tbody>
</table>
`}),e.add({id:976,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/getroomcustomer/",title:"GetRoomCustomer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomCustomer()
</code></pre>
<p>Retrieves the identifier of the customer the room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>customer</td>
</tr>
</tbody>
</table>
`}),e.add({id:977,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/getroomcustomer/",title:"GetRoomCustomer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomCustomer()
</code></pre>
<p>Retrieves the identifier of the customer the room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>customer</td>
</tr>
</tbody>
</table>
`}),e.add({id:978,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/getroomcustomer/",title:"GetRoomCustomer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomCustomer()
</code></pre>
<p>Retrieves the identifier of the customer the room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>customer</td>
</tr>
</tbody>
</table>
`}),e.add({id:979,href:"https://www.4players.io/odin/sdk/unity/classes/room/getroomcustomer/",title:"GetRoomCustomer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomCustomer()
</code></pre>
<p>Retrieves the identifier of the customer the room</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>customer</td>
</tr>
</tbody>
</table>
`}),e.add({id:980,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/getroomid/",title:"GetRoomId",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string GetRoomId()
</code></pre>
<p>Retrieves the room ID (e.g. the name of the room)</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:981,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/getroomid/",title:"GetRoomId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomId()
</code></pre>
<p>Retrieves the room ID (e.g. the name of the room)</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:982,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/getroomid/",title:"GetRoomId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomId()
</code></pre>
<p>Retrieves the room ID (e.g. the name of the room)</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:983,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/getroomid/",title:"GetRoomId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomId()
</code></pre>
<p>Retrieves the room ID (e.g. the name of the room)</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:984,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/getroomid/",title:"GetRoomId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetRoomId()
</code></pre>
<p>Retrieves the room id</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>room id</td>
</tr>
</tbody>
</table>
`}),e.add({id:985,href:"https://www.4players.io/odin/sdk/unity/classes/room/getroomid/",title:"GetRoomId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetRoomId()
</code></pre>
<p>Retrieves the room ID (e.g. the name of the room)</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:986,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/getroompeerid/",title:"GetRoomPeerId",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong GetRoomPeerId()
</code></pre>
<p>Retrieves your own peer ID</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:987,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/getroompeerid/",title:"GetRoomPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetRoomPeerId()
</code></pre>
<p>Retrieves your own peer ID</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:988,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/getroompeerid/",title:"GetRoomPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetRoomPeerId()
</code></pre>
<p>Retrieves your own peer ID</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:989,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/getroompeerid/",title:"GetRoomPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetRoomPeerId()
</code></pre>
<p>Retrieves your own peer ID</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:990,href:"https://www.4players.io/odin/sdk/unity/classes/room/getroompeerid/",title:"GetRoomPeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetRoomPeerId()
</code></pre>
<p>Retrieves your own peer ID</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:991,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/getsamples/",title:"GetSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float[] GetSamples()
public void GetSamples(out float[] buffer)
public void GetSamples(ref float[] buffer, int index = 0)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>index</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="getsamples">GetSamples()</h3>
<pre><code class="language-C#">public float[] GetSamples()
</code></pre>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="getsamplesbuffer">GetSamples(buffer)</h3>
<pre><code class="language-C#">public void GetSamples(out float[] buffer)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="getsamplesbuffer-index">GetSamples(buffer, index)</h3>
<pre><code class="language-C#">public void GetSamples(ref float[] buffer, int index = 0)
</code></pre>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>index</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:992,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getsbyte/",title:"GetSByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public sbyte GetSByte()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>SByte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:993,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getshort/",title:"GetShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public short GetShort()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:994,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/getsourcetype/",title:"GetSourceType",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static byte GetSourceType(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:995,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getstring/",title:"GetString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string GetString()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:996,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/gettimestamp/",title:"GetTimestamp",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public DateTime GetTimestamp()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>DateTime</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:997,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getuint/",title:"GetUInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint GetUInt()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:998,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getulong/",title:"GetULong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong GetULong()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:999,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/getuserdata/",title:"GetUserData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IUserData GetUserData()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1e3,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/getuserdata/",title:"GetUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IUserData GetUserData()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1001,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/getuserdata/",title:"GetUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IUserData GetUserData()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1002,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/getuserdata/",title:"GetUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IUserData GetUserData()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1003,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/getuserdata/",title:"GetUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IUserData GetUserData()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1004,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/getushort/",title:"GetUShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort GetUShort()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1005,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/getvadconfig/",title:"GetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError GetVadConfig(out OdinVadConfig config)
</code></pre>
<p>Not supported</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1006,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/getvadconfig/",title:"GetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError GetVadConfig(out NativeBindings.OdinVadConfig config)
</code></pre>
<p>Get native voice activity config</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>native config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1007,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/getvadconfig/",title:"GetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinVadConfig GetVadConfig()
</code></pre>
<p>Get native voice activity configuration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>updated config</td>
</tr>
</tbody>
</table>
`}),e.add({id:1008,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/getvadconfig/",title:"GetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError GetVadConfig(out NativeBindings.OdinVadConfig config)
</code></pre>
<p>Get native voice activity config</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>native config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1009,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/guardsilence/",title:"GuardSilence",section:"ODIN Documentation",description:" On true isSilent = true will not push data to the native encoder ",content:`<pre><code class="language-C#">public bool GuardSilence { get; set; }
</code></pre>
<p>On true Single%5b%5d%2cSystem <pre><code>isSilent = true</code></pre> will not push data to the native encoder</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>On true always returns OdinError</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1010,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnection/handle/",title:"Handle",section:"ODIN Documentation",description:" Odin connection ",content:`<pre><code class="language-C#">public OdinConnectionPoolHandle Handle { get; }
</code></pre>
<p>Odin connection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/">OdinConnectionPoolHandle</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1011,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/hasactivity/",title:"HasActivity",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HasActivity { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1012,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/hasactivity/",title:"HasActivity",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool HasActivity { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1013,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/hasactivity/",title:"HasActivity",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool HasActivity { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1014,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/hasactivity/",title:"HasActivity",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool HasActivity { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1015,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/hasactivity/",title:"HasActivity",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool HasActivity { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1016,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/hasconnections/",title:"HasConnections",section:"ODIN Documentation",description:" True if any is joined ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HasConnections { get; }
</code></pre>
<p>True if any Room is joined</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1017,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/hasconnections/",title:"HasConnections",section:"ODIN Documentation",description:" True if any is joined ",content:`<pre><code class="language-C#">public bool HasConnections { get; }
</code></pre>
<p>True if any Room is joined</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1018,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/hasconnections/",title:"HasConnections",section:"ODIN Documentation",description:" True if any is joined ",content:`<pre><code class="language-C#">public bool HasConnections { get; }
</code></pre>
<p>True if any Room is joined</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1019,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/hasconnections/",title:"HasConnections",section:"ODIN Documentation",description:" True if any is joined ",content:`<pre><code class="language-C#">public bool HasConnections { get; }
</code></pre>
<p>True if any Room is joined</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1020,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/hasconnections/",title:"HasConnections",section:"ODIN Documentation",description:" True if any is joined ",content:`<pre><code class="language-C#">public bool HasConnections { get; }
</code></pre>
<p>True if any Room is joined</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1021,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/haserrors/",title:"HasErrors",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HasErrors { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1022,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/haserrors/",title:"HasErrors",section:"ODIN Documentation",description:" Indicates wether or not the last media stream api call result is an error code ",content:`<pre><code class="language-C#">public bool HasErrors { get; }
</code></pre>
<p>Indicates wether or not the last media stream api call result is an error code</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1023,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/haserrors/",title:"HasErrors",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool HasErrors { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1024,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/haserrors/",title:"HasErrors",section:"ODIN Documentation",description:" Indicates wether or not the last media stream api call result is an error code ",content:`<pre><code class="language-C#">public bool HasErrors { get; }
</code></pre>
<p>Indicates wether or not the last media stream api call result is an error code</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1025,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/haserrors/",title:"HasErrors",section:"ODIN Documentation",description:" Indicates wether or not the last media stream api call result is an error code ",content:`<pre><code class="language-C#">public bool HasErrors { get; }
</code></pre>
<p>Indicates wether or not the last media stream api call result is an error code</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1026,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/haseventcallbacks/",title:"HasEventCallbacks",section:"ODIN Documentation",description:" true if where set and registered in ODIN ffi ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HasEventCallbacks
</code></pre>
<p>true if Room where set and registered in ODIN ffi</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1027,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/haseventcallbacks/",title:"HasEventCallbacks",section:"ODIN Documentation",description:" true if where set and registered in ODIN ffi ",content:`<pre><code class="language-C#">public bool HasEventCallbacks
</code></pre>
<p>true if Room where set and registered in ODIN ffi</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1028,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/haseventcallbacks/",title:"HasEventCallbacks",section:"ODIN Documentation",description:" true if where set and registered in ODIN ffi ",content:`<pre><code class="language-C#">public bool HasEventCallbacks
</code></pre>
<p>true if Room where set and registered in ODIN ffi</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1029,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/haseventcallbacks/",title:"HasEventCallbacks",section:"ODIN Documentation",description:" true if where set and registered in ODIN ffi ",content:`<pre><code class="language-C#">public bool HasEventCallbacks
</code></pre>
<p>true if Room where set and registered in ODIN ffi</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1030,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/haseventcallbacks/",title:"HasEventCallbacks",section:"ODIN Documentation",description:" true if where set and registered in ODIN ffi ",content:`<pre><code class="language-C#">public bool HasEventCallbacks
</code></pre>
<p>true if Room where set and registered in ODIN ffi</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1031,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/haspermission/",title:"HasPermission",section:"ODIN Documentation",description:" Check if the user has authorized use of the microphone ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HasPermission { get; }
</code></pre>
<p>Check if the user has authorized use of the microphone</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In other build targets except for Web Player, this function will always return true.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1032,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/haspermission/",title:"HasPermission",section:"ODIN Documentation",description:" Check if the user has authorized use of the microphone ",content:`<pre><code class="language-C#">public bool HasPermission { get; }
</code></pre>
<p>Check if the user has authorized use of the microphone</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In other build targets except for Web Player, this function will always return true.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1033,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/haspermission/",title:"HasPermission",section:"ODIN Documentation",description:" Check if the user has authorized use of the microphone ",content:`<pre><code class="language-C#">public bool HasPermission { get; }
</code></pre>
<p>Check if the user has authorized use of the microphone</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In other build targets except for Web Player, this function will always return true.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1034,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/haspermission/",title:"HasPermission",section:"ODIN Documentation",description:" Check if the user has authorized use of the microphone ",content:`<pre><code class="language-C#">public bool HasPermission { get; }
</code></pre>
<p>Check if the user has authorized use of the microphone</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In other build targets except for Web Player, this function will always return true.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1035,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/haspermission/",title:"HasPermission",section:"ODIN Documentation",description:" Check if the user has authorized use of the microphone ",content:`<pre><code class="language-C#">public bool HasPermission { get; }
</code></pre>
<p>Check if the user has authorized use of the microphone</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In other build targets except for Web Player, this function will always return true.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1036,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/haspermission/",title:"HasPermission",section:"ODIN Documentation",description:" Check if the user has authorized use of the microphone ",content:`<pre><code class="language-C#">public bool HasPermission { get; }
</code></pre>
<p>Check if the user has authorized use of the microphone</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In other build targets except for Web Player, this function will always return true.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1037,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/high/",title:"High",section:"ODIN Documentation",description:" 18 dB ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">High = 3
</code></pre>
<p>18 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1038,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/high/",title:"High",section:"ODIN Documentation",description:" 18 dB ",content:`<pre><code class="language-C#">High = 3
</code></pre>
<p>18 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1039,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/high/",title:"High",section:"ODIN Documentation",description:" 18 dB ",content:`<pre><code class="language-C#">High = 3
</code></pre>
<p>18 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1040,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/high/",title:"High",section:"ODIN Documentation",description:" 18 dB ",content:`<pre><code class="language-C#">High = 3
</code></pre>
<p>18 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1041,href:"https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/high/",title:"High",section:"ODIN Documentation",description:" 18 dB ",content:`<pre><code class="language-C#">High = 3
</code></pre>
<p>18 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1042,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/high_pass_filter/",title:"high_pass_filter",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool high_pass_filter
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1043,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/highpassfilter/",title:"highPassFilter",section:"ODIN Documentation",description:"Enable or disable high pass filtering",content:`<pre><code class="language-C#">public highPassFilter: boolean
</code></pre>
<p>Enable or disable high pass filtering</p>
`}),e.add({id:1044,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool HighPassFilter
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1045,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Reduces lower frequencies of the input (Automatic game control) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HighPassFilter
</code></pre>
<p>Reduces lower frequencies of the input (Automatic game control)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1046,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Enable or disable high pass filtering ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool HighPassFilter { get; set; }
</code></pre>
<p>Enable or disable high pass filtering</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1047,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool HighPassFilter
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1048,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Reduces lower frequencies of the input (Automatic game control) ",content:`<pre><code class="language-C#">public bool HighPassFilter
</code></pre>
<p>Reduces lower frequencies of the input (Automatic game control)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1049,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Enable or disable high pass filtering ",content:`<pre><code class="language-C#">public bool HighPassFilter { get; set; }
</code></pre>
<p>Enable or disable high pass filtering</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1050,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool HighPassFilter
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1051,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Reduces lower frequencies of the input (Automatic game control) ",content:`<pre><code class="language-C#">public bool HighPassFilter
</code></pre>
<p>Reduces lower frequencies of the input (Automatic game control)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1052,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Enable or disable high pass filtering ",content:`<pre><code class="language-C#">public bool HighPassFilter { get; set; }
</code></pre>
<p>Enable or disable high pass filtering</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1053,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool HighPassFilter
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1054,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Reduces lower frequencies of the input (Automatic game control) ",content:`<pre><code class="language-C#">public bool HighPassFilter
</code></pre>
<p>Reduces lower frequencies of the input (Automatic game control)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1055,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Enable or disable high pass filtering ",content:`<pre><code class="language-C#">public bool HighPassFilter { get; set; }
</code></pre>
<p>Enable or disable high pass filtering</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1056,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled ",content:`<pre><code class="language-C#">public bool HighPassFilter { get; set; }
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1057,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool HighPassFilter
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1058,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool HighPassFilter
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1059,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool HighPassFilter
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1060,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Reduces lower frequencies of the input (Automatic game control) ",content:`<pre><code class="language-C#">public bool HighPassFilter
</code></pre>
<p>Reduces lower frequencies of the input (Automatic game control)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1061,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/highpassfilter/",title:"HighPassFilter",section:"ODIN Documentation",description:" Enable or disable high pass filtering ",content:`<pre><code class="language-C#">public bool HighPassFilter { get; set; }
</code></pre>
<p>Enable or disable high pass filtering</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1062,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz11025/",title:"Hz11025",section:"ODIN Documentation",description:" 11.025khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz11025 = 11025U
</code></pre>
<p>11.025khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1063,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz11025/",title:"Hz11025",section:"ODIN Documentation",description:" 11.025khz ",content:`<pre><code class="language-C#">Hz11025 = 11025U
</code></pre>
<p>11.025khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1064,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz11025/",title:"Hz11025",section:"ODIN Documentation",description:" 11.025khz ",content:`<pre><code class="language-C#">Hz11025 = 11025U
</code></pre>
<p>11.025khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1065,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz11025/",title:"Hz11025",section:"ODIN Documentation",description:" 11.025khz ",content:`<pre><code class="language-C#">Hz11025 = 11025U
</code></pre>
<p>11.025khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1066,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz11025/",title:"Hz11025",section:"ODIN Documentation",description:" 11.025khz ",content:`<pre><code class="language-C#">Hz11025 = 11025U
</code></pre>
<p>11.025khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1067,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz12000/",title:"Hz12000",section:"ODIN Documentation",description:" 12khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz12000 = 12000U
</code></pre>
<p>12khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1068,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz12000/",title:"Hz12000",section:"ODIN Documentation",description:" 12khz ",content:`<pre><code class="language-C#">Hz12000 = 12000U
</code></pre>
<p>12khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1069,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz12000/",title:"Hz12000",section:"ODIN Documentation",description:" 12khz ",content:`<pre><code class="language-C#">Hz12000 = 12000U
</code></pre>
<p>12khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1070,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz12000/",title:"Hz12000",section:"ODIN Documentation",description:" 12khz ",content:`<pre><code class="language-C#">Hz12000 = 12000U
</code></pre>
<p>12khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1071,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz12000/",title:"Hz12000",section:"ODIN Documentation",description:" 12khz ",content:`<pre><code class="language-C#">Hz12000 = 12000U
</code></pre>
<p>12khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1072,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz128000/",title:"Hz128000",section:"ODIN Documentation",description:" 128khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz128000 = 128000U
</code></pre>
<p>128khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1073,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz128000/",title:"Hz128000",section:"ODIN Documentation",description:" 128khz ",content:`<pre><code class="language-C#">Hz128000 = 128000U
</code></pre>
<p>128khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1074,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz128000/",title:"Hz128000",section:"ODIN Documentation",description:" 128khz ",content:`<pre><code class="language-C#">Hz128000 = 128000U
</code></pre>
<p>128khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1075,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz128000/",title:"Hz128000",section:"ODIN Documentation",description:" 128khz ",content:`<pre><code class="language-C#">Hz128000 = 128000U
</code></pre>
<p>128khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1076,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz128000/",title:"Hz128000",section:"ODIN Documentation",description:" 128khz ",content:`<pre><code class="language-C#">Hz128000 = 128000U
</code></pre>
<p>128khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1077,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz144000/",title:"Hz144000",section:"ODIN Documentation",description:" 144khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz144000 = 144000U
</code></pre>
<p>144khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1078,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz144000/",title:"Hz144000",section:"ODIN Documentation",description:" 144khz ",content:`<pre><code class="language-C#">Hz144000 = 144000U
</code></pre>
<p>144khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1079,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz144000/",title:"Hz144000",section:"ODIN Documentation",description:" 144khz ",content:`<pre><code class="language-C#">Hz144000 = 144000U
</code></pre>
<p>144khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1080,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz144000/",title:"Hz144000",section:"ODIN Documentation",description:" 144khz ",content:`<pre><code class="language-C#">Hz144000 = 144000U
</code></pre>
<p>144khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1081,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz144000/",title:"Hz144000",section:"ODIN Documentation",description:" 144khz ",content:`<pre><code class="language-C#">Hz144000 = 144000U
</code></pre>
<p>144khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1082,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz16000/",title:"Hz16000",section:"ODIN Documentation",description:" 16khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz16000 = 16000U
</code></pre>
<p>16khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1083,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz16000/",title:"Hz16000",section:"ODIN Documentation",description:" 16khz ",content:`<pre><code class="language-C#">Hz16000 = 16000U
</code></pre>
<p>16khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1084,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz16000/",title:"Hz16000",section:"ODIN Documentation",description:" 16khz ",content:`<pre><code class="language-C#">Hz16000 = 16000U
</code></pre>
<p>16khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1085,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz16000/",title:"Hz16000",section:"ODIN Documentation",description:" 16khz ",content:`<pre><code class="language-C#">Hz16000 = 16000U
</code></pre>
<p>16khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1086,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz16000/",title:"Hz16000",section:"ODIN Documentation",description:" 16khz ",content:`<pre><code class="language-C#">Hz16000 = 16000U
</code></pre>
<p>16khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1087,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz192000/",title:"Hz192000",section:"ODIN Documentation",description:" 192khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz192000 = 192000U
</code></pre>
<p>192khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1088,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz192000/",title:"Hz192000",section:"ODIN Documentation",description:" 192khz ",content:`<pre><code class="language-C#">Hz192000 = 192000U
</code></pre>
<p>192khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1089,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz192000/",title:"Hz192000",section:"ODIN Documentation",description:" 192khz ",content:`<pre><code class="language-C#">Hz192000 = 192000U
</code></pre>
<p>192khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1090,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz192000/",title:"Hz192000",section:"ODIN Documentation",description:" 192khz ",content:`<pre><code class="language-C#">Hz192000 = 192000U
</code></pre>
<p>192khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1091,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz192000/",title:"Hz192000",section:"ODIN Documentation",description:" 192khz ",content:`<pre><code class="language-C#">Hz192000 = 192000U
</code></pre>
<p>192khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1092,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz22050/",title:"Hz22050",section:"ODIN Documentation",description:" 22.05khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz22050 = 22050U
</code></pre>
<p>22.05khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1093,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz22050/",title:"Hz22050",section:"ODIN Documentation",description:" 22.05khz ",content:`<pre><code class="language-C#">Hz22050 = 22050U
</code></pre>
<p>22.05khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1094,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz22050/",title:"Hz22050",section:"ODIN Documentation",description:" 22.05khz ",content:`<pre><code class="language-C#">Hz22050 = 22050U
</code></pre>
<p>22.05khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1095,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz22050/",title:"Hz22050",section:"ODIN Documentation",description:" 22.05khz ",content:`<pre><code class="language-C#">Hz22050 = 22050U
</code></pre>
<p>22.05khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1096,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz22050/",title:"Hz22050",section:"ODIN Documentation",description:" 22.05khz ",content:`<pre><code class="language-C#">Hz22050 = 22050U
</code></pre>
<p>22.05khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1097,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz24000/",title:"Hz24000",section:"ODIN Documentation",description:" 24khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz24000 = 24000U
</code></pre>
<p>24khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1098,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz24000/",title:"Hz24000",section:"ODIN Documentation",description:" 24khz ",content:`<pre><code class="language-C#">Hz24000 = 24000U
</code></pre>
<p>24khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1099,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz24000/",title:"Hz24000",section:"ODIN Documentation",description:" 24khz ",content:`<pre><code class="language-C#">Hz24000 = 24000U
</code></pre>
<p>24khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1100,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz24000/",title:"Hz24000",section:"ODIN Documentation",description:" 24khz ",content:`<pre><code class="language-C#">Hz24000 = 24000U
</code></pre>
<p>24khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1101,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz24000/",title:"Hz24000",section:"ODIN Documentation",description:" 24khz ",content:`<pre><code class="language-C#">Hz24000 = 24000U
</code></pre>
<p>24khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1102,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz32000/",title:"Hz32000",section:"ODIN Documentation",description:" 32khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz32000 = 32000U
</code></pre>
<p>32khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1103,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz32000/",title:"Hz32000",section:"ODIN Documentation",description:" 32khz ",content:`<pre><code class="language-C#">Hz32000 = 32000U
</code></pre>
<p>32khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1104,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz32000/",title:"Hz32000",section:"ODIN Documentation",description:" 32khz ",content:`<pre><code class="language-C#">Hz32000 = 32000U
</code></pre>
<p>32khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1105,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz32000/",title:"Hz32000",section:"ODIN Documentation",description:" 32khz ",content:`<pre><code class="language-C#">Hz32000 = 32000U
</code></pre>
<p>32khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1106,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz32000/",title:"Hz32000",section:"ODIN Documentation",description:" 32khz ",content:`<pre><code class="language-C#">Hz32000 = 32000U
</code></pre>
<p>32khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1107,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz44100/",title:"Hz44100",section:"ODIN Documentation",description:" 44.1khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz44100 = 44100U
</code></pre>
<p>44.1khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1108,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz44100/",title:"Hz44100",section:"ODIN Documentation",description:" 44.1khz ",content:`<pre><code class="language-C#">Hz44100 = 44100U
</code></pre>
<p>44.1khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1109,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz44100/",title:"Hz44100",section:"ODIN Documentation",description:" 44.1khz ",content:`<pre><code class="language-C#">Hz44100 = 44100U
</code></pre>
<p>44.1khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1110,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz44100/",title:"Hz44100",section:"ODIN Documentation",description:" 44.1khz ",content:`<pre><code class="language-C#">Hz44100 = 44100U
</code></pre>
<p>44.1khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1111,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz44100/",title:"Hz44100",section:"ODIN Documentation",description:" 44.1khz ",content:`<pre><code class="language-C#">Hz44100 = 44100U
</code></pre>
<p>44.1khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1112,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz48000/",title:"Hz48000",section:"ODIN Documentation",description:" 48khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz48000 = 48000U
</code></pre>
<p>48khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1113,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz48000/",title:"Hz48000",section:"ODIN Documentation",description:" 48khz ",content:`<pre><code class="language-C#">Hz48000 = 48000U
</code></pre>
<p>48khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1114,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz48000/",title:"Hz48000",section:"ODIN Documentation",description:" 48khz ",content:`<pre><code class="language-C#">Hz48000 = 48000U
</code></pre>
<p>48khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1115,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz48000/",title:"Hz48000",section:"ODIN Documentation",description:" 48khz ",content:`<pre><code class="language-C#">Hz48000 = 48000U
</code></pre>
<p>48khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1116,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz48000/",title:"Hz48000",section:"ODIN Documentation",description:" 48khz ",content:`<pre><code class="language-C#">Hz48000 = 48000U
</code></pre>
<p>48khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1117,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz8000/",title:"Hz8000",section:"ODIN Documentation",description:" 8khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz8000 = 8000U
</code></pre>
<p>8khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1118,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz8000/",title:"Hz8000",section:"ODIN Documentation",description:" 8khz ",content:`<pre><code class="language-C#">Hz8000 = 8000U
</code></pre>
<p>8khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1119,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz8000/",title:"Hz8000",section:"ODIN Documentation",description:" 8khz ",content:`<pre><code class="language-C#">Hz8000 = 8000U
</code></pre>
<p>8khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1120,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz8000/",title:"Hz8000",section:"ODIN Documentation",description:" 8khz ",content:`<pre><code class="language-C#">Hz8000 = 8000U
</code></pre>
<p>8khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1121,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz8000/",title:"Hz8000",section:"ODIN Documentation",description:" 8khz ",content:`<pre><code class="language-C#">Hz8000 = 8000U
</code></pre>
<p>8khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1122,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz96000/",title:"Hz96000",section:"ODIN Documentation",description:" 96khz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Hz96000 = 96000U
</code></pre>
<p>96khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1123,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz96000/",title:"Hz96000",section:"ODIN Documentation",description:" 96khz ",content:`<pre><code class="language-C#">Hz96000 = 96000U
</code></pre>
<p>96khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1124,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz96000/",title:"Hz96000",section:"ODIN Documentation",description:" 96khz ",content:`<pre><code class="language-C#">Hz96000 = 96000U
</code></pre>
<p>96khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1125,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz96000/",title:"Hz96000",section:"ODIN Documentation",description:" 96khz ",content:`<pre><code class="language-C#">Hz96000 = 96000U
</code></pre>
<p>96khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1126,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/hz96000/",title:"Hz96000",section:"ODIN Documentation",description:" 96khz ",content:`<pre><code class="language-C#">Hz96000 = 96000U
</code></pre>
<p>96khz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1127,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/id/",title:"id",section:"ODIN Documentation",description:"Gets the ID of the media.",content:`<pre><code class="language-C#">public id: string
</code></pre>
<p>Gets the ID of the media.</p>
`}),e.add({id:1128,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/id/",title:"id",section:"ODIN Documentation",description:"Gets the ID of the room.",content:`<pre><code class="language-C#">public id: string
</code></pre>
<p>Gets the ID of the room.</p>
`}),e.add({id:1129,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/id/",title:"id",section:"ODIN Documentation",description:"The ID of the media.",content:`<pre><code class="language-C#">number
</code></pre>
<p>The ID of the media.</p>
`}),e.add({id:1130,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/id/",title:"id",section:"ODIN Documentation",description:"The ID of the peer.",content:`<pre><code class="language-C#">number
</code></pre>
<p>The ID of the peer.</p>
`}),e.add({id:1131,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/id/",title:"id",section:"ODIN Documentation",description:"The ID of the room.",content:`<pre><code class="language-C#">string
</code></pre>
<p>The ID of the room.</p>
`}),e.add({id:1132,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/id/",title:"Id",section:"ODIN Documentation",description:" Handle ID ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public long Id { get; }
</code></pre>
<p>Handle ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1133,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/id/",title:"Id",section:"ODIN Documentation",description:" Peer id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1134,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/id/",title:"Id",section:"ODIN Documentation",description:" Handle ID ",content:`<pre><code class="language-C#">public long Id { get; }
</code></pre>
<p>Handle ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1135,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/id/",title:"Id",section:"ODIN Documentation",description:" Peer id ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1136,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/id/",title:"Id",section:"ODIN Documentation",description:" Handle ID ",content:`<pre><code class="language-C#">public long Id { get; }
</code></pre>
<p>Handle ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1137,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/id/",title:"Id",section:"ODIN Documentation",description:" Peer id ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1138,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/id/",title:"Id",section:"ODIN Documentation",description:" Handle ID ",content:`<pre><code class="language-C#">public long Id { get; }
</code></pre>
<p>Handle ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1139,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/id/",title:"Id",section:"ODIN Documentation",description:" Peer id ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1140,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/id/",title:"Id",section:"ODIN Documentation",description:" Media id ",content:`<pre><code class="language-C#">public ushort Id { get; }
</code></pre>
<p>Media id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1141,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/id/",title:"Id",section:"ODIN Documentation",description:" Media id ",content:`<pre><code class="language-C#">public ushort Id { get; }
</code></pre>
<p>Media id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1142,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/id/",title:"Id",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort Id { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1143,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/id/",title:"Id",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong Id { get; set; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1144,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/id/",title:"Id",section:"ODIN Documentation",description:" Odin room id ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Odin room id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1145,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/id/",title:"Id",section:"ODIN Documentation",description:" Peer id ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1146,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/id/",title:"Id",section:"ODIN Documentation",description:" Effect id ",content:`<pre><code class="language-C#">public uint Id { get; }
</code></pre>
<p>Effect id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1147,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/id/",title:"Id",section:"ODIN Documentation",description:" RoomId ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>RoomId</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1148,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcresult/id/",title:"Id",section:"ODIN Documentation",description:" msgid ",content:`<pre><code class="language-C#">public uint Id { get; }
</code></pre>
<p>msgid</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1149,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/mediarpc/id/",title:"Id",section:"ODIN Documentation",description:" media id ",content:`<pre><code class="language-C#">public ushort Id
</code></pre>
<p>media id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1150,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/peerrpc/id/",title:"Id",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong Id
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1151,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/id/",title:"Id",section:"ODIN Documentation",description:" Handle ID ",content:`<pre><code class="language-C#">public long Id { get; }
</code></pre>
<p>Handle ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1152,href:"https://www.4players.io/odin/sdk/unity/classes/peer/id/",title:"Id",section:"ODIN Documentation",description:" Peer id ",content:`<pre><code class="language-C#">public ulong Id { get; }
</code></pre>
<p>Peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1153,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imedia/",title:"IMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public interface IMedia
</code></pre>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imedia/getpipeline/">GetPipeline</a></td>
<td>Get native effect pipeline</td>
</tr>
</tbody>
</table>
`}),e.add({id:1154,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/",title:"IMsgPackWriter",section:"ODIN Documentation",description:" General Msgpack interface that will be used for sending RPC to the server. ",content:`<pre><code class="language-C#">public interface IMsgPackWriter : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>General Msgpack interface that will be used for sending RPC to the server.</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/append/">Append</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/getbuffer/">GetBuffer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/clear/">Clear</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/getbytes/">GetBytes</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/getlength/">GetLength</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/write/">Write</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writearrayheader/">WriteArrayHeader</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writebinary/">WriteBinary</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writebool/">WriteBool</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writebyte/">WriteByte</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writedouble/">WriteDouble</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writefloat/">WriteFloat</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeint/">WriteInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writelong/">WriteLong</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writemapheader/">WriteMapHeader</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writesbyte/">WriteSByte</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeshort/">WriteShort</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writestring/">WriteString</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeuint/">WriteUInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeulong/">WriteULong</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeushort/">WriteUShort</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1155,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/index_property/",title:"Index",section:"ODIN Documentation",description:" Effect index ",content:`<pre><code class="language-C#">public uint Index { get; set; }
</code></pre>
<p>Effect index</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1156,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibrary/initialize/",title:"Initialize",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static void Initialize()
public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="initialize">Initialize()</h3>
<pre><code class="language-C#">public static void Initialize()
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h3 id="initializeparameters">Initialize(parameters)</h3>
<pre><code class="language-C#">public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Creates a new Core-Instance</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1157,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibrary/initialize/",title:"Initialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Initialize()
public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="initialize">Initialize()</h3>
<pre><code class="language-C#">public static void Initialize()
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h3 id="initializeparameters">Initialize(parameters)</h3>
<pre><code class="language-C#">public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Creates a new Core-Instance</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1158,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibrary/initialize/",title:"Initialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Initialize()
public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="initialize">Initialize()</h3>
<pre><code class="language-C#">public static void Initialize()
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h3 id="initializeparameters">Initialize(parameters)</h3>
<pre><code class="language-C#">public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Creates a new Core-Instance</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1159,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibrary/initialize/",title:"Initialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Initialize()
public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="initialize">Initialize()</h3>
<pre><code class="language-C#">public static void Initialize()
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h3 id="initializeparameters">Initialize(parameters)</h3>
<pre><code class="language-C#">public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Creates a new Core-Instance</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1160,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibrary/initialize/",title:"Initialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Initialize()
public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="initialize">Initialize()</h3>
<pre><code class="language-C#">public static void Initialize()
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h3 id="initializeparameters">Initialize(parameters)</h3>
<pre><code class="language-C#">public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Creates a new Core-Instance</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1161,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibrary/initialize/",title:"Initialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Initialize()
public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="initialize">Initialize()</h3>
<pre><code class="language-C#">public static void Initialize()
</code></pre>
<p>Initializes the native ODIN runtime</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function explicitly loads the ODIN library. It will be invoked automatically by the SDK when required.</p>
</div>
</div>

<h3 id="initializeparameters">Initialize(parameters)</h3>
<pre><code class="language-C#">public static void Initialize(OdinLibraryParameters parameters)
</code></pre>
<p>Creates a new Core-Instance</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parameters</td>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/">OdinLibraryParameters</a></td>
<td>Information used to create the instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1162,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/initroom/",title:"initRoom",section:"ODIN Documentation",description:"Authenticates against the ODIN server and returns an `OdinRoom` instance for the first room set in the specified token. This function accepts an optional `AudioContext` parameter for audio capture. The `AudioContext` interface is a part of the Web Audio API that represents an audio-processing graph, which can be used to control and manipulate audio signals in web applications. If the `AudioContext` is not provided or explicitly set to `undefined`, we will try to create one internally.",content:`<pre><code class="language-C#">initRoom(token: string, gateway?: string, audioContext?: AudioContext): Promise&lt;OdinRoom&gt;
</code></pre>
<p>Authenticates against the ODIN server and returns an <code>OdinRoom</code> instance for the first room set in the specified token.</p>
<p>This function accepts an optional <code>AudioContext</code> parameter for audio capture. The <code>AudioContext</code> interface is a part of
the Web Audio API that represents an audio-processing graph, which can be used to control and manipulate audio signals
in web applications. If the <code>AudioContext</code> is not provided or explicitly set to <code>undefined</code>, we will try to create one
internally.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>string</td>
<td>The room token for authentication</td>
</tr>
<tr>
<td>gateway</td>
<td>string</td>
<td>The gateway to authenticate against</td>
</tr>
<tr>
<td>audioContext</td>
<td>AudioContext</td>
<td>An optional audio context to use for capture</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/">Promise&lt;OdinRoom&gt;</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1163,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/initrooms/",title:"initRooms",section:"ODIN Documentation",description:"Authenticates against the ODIN server and returns `OdinRoom` instances for all rooms set in the specified token. This function accepts an optional `AudioContext` parameter for audio capture. The `AudioContext` interface is a part of the Web Audio API that represents an audio-processing graph, which can be used to control and manipulate audio signals in web applications. If the `AudioContext` is not provided or explicitly set to `undefined`, we will try to create one internally.",content:`<pre><code class="language-C#">initRooms(token: string, gateway?: string, audioContext?: AudioContext): Promise&lt;OdinRoom[]&gt;
</code></pre>
<p>Authenticates against the ODIN server and returns <code>OdinRoom</code> instances for all rooms set in the specified token.</p>
<p>This function accepts an optional <code>AudioContext</code> parameter for audio capture. The <code>AudioContext</code> interface is a part of
the Web Audio API that represents an audio-processing graph, which can be used to control and manipulate audio signals
in web applications. If the <code>AudioContext</code> is not provided or explicitly set to <code>undefined</code>, we will try to create one
internally.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>string</td>
<td>The room token for authentication</td>
</tr>
<tr>
<td>gateway</td>
<td>string</td>
<td>The gateway to authenticate against</td>
</tr>
<tr>
<td>audioContext</td>
<td>AudioContext</td>
<td>An optional audio context to use for capture</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/">Promise&lt;OdinRoom[]&gt;</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1164,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/inputclip/",title:"InputClip",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioClip InputClip
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioClip</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1165,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/inputdevice/",title:"InputDevice",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string InputDevice
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1166,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/inputdevice/",title:"InputDevice",section:"ODIN Documentation",description:" The device name to use as microphone in Unity. (i.e Microphone.Start) ",content:`<pre><code class="language-C#">public string InputDevice
</code></pre>
<p>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you pass a null or empty string for the device name then the default microphone will be used. You can get a list of available microphone devices from the devices property. (see <a href="https://docs.unity3d.com/ScriptReference/Microphone-devices.html">Microphone.devices</a>)</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1167,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/inputdevice/",title:"InputDevice",section:"ODIN Documentation",description:" The device name to use as microphone in Unity. (i.e Microphone.Start) ",content:`<pre><code class="language-C#">public string InputDevice
</code></pre>
<p>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you pass a null or empty string for the device name then the default microphone will be used. You can get a list of available microphone devices from the devices property. (see <a href="https://docs.unity3d.com/ScriptReference/Microphone-devices.html">Microphone.devices</a>)</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1168,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/inputdevice/",title:"InputDevice",section:"ODIN Documentation",description:" The device name to use as microphone in Unity. (i.e Microphone.Start) ",content:`<pre><code class="language-C#">public string InputDevice
</code></pre>
<p>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you pass a null or empty string for the device name then the default microphone will be used. You can get a list of available microphone devices from the devices property. (see <a href="https://docs.unity3d.com/ScriptReference/Microphone-devices.html">Microphone.devices</a>)</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1169,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/inputdevice/",title:"InputDevice",section:"ODIN Documentation",description:" The device name to use as microphone in Unity. (i.e Microphone.Start) ",content:`<pre><code class="language-C#">public string InputDevice
</code></pre>
<p>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you pass a null or empty string for the device name then the default microphone will be used. You can get a list of available microphone devices from the devices property. (see <a href="https://docs.unity3d.com/ScriptReference/Microphone-devices.html">Microphone.devices</a>)</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1170,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/inputdevice/",title:"InputDevice",section:"ODIN Documentation",description:" The device name to use as microphone in Unity. (i.e Microphone.Start) ",content:`<pre><code class="language-C#">public string InputDevice
</code></pre>
<p>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you pass a null or empty string for the device name then the default microphone will be used. You can get a list of available microphone devices from the devices property. (see <a href="https://docs.unity3d.com/ScriptReference/Microphone-devices.html">Microphone.devices</a>)</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1171,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/inputvolumescale/",title:"InputVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float InputVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1172,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/insertapmeffect/",title:"InsertApmEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ApmEffect InsertApmEffect(uint indexId, uint samplerate, bool stereo)
</code></pre>
<p>Insert a apm effect to native pipeline</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexId</td>
<td>UInt32</td>
<td>effect index</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>effect playback samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>effect playback stereo</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/apmeffect/">ApmEffect</a></td>
<td><xref href="OdinNative.Odin.Media.ApmEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:1173,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/insertcustomeffect/",title:"InsertCustomEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public CustomEffect&lt;T&gt; InsertCustomEffect&lt;T&gt;(uint indexId, Action&lt;OdinCallbackAudioData, IntPtr&gt; callback, IntPtr user_data)
    where T : struct
</code></pre>
<p>Insert a custom effect to native pipeline</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexId</td>
<td>UInt32</td>
<td>effect index</td>
</tr>
<tr>
<td>callback</td>
<td>Action&lt;OdinCallbackAudioData,IntPtr&gt;</td>
<td>effect callback</td>
</tr>
<tr>
<td>user_data</td>
<td>IntPtr</td>
<td>effect callback userdata</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>CustomEffect&lt;&lt;T&gt;&gt;</td>
<td><xref href="OdinNative.Odin.Media.CustomEffect%601" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:1174,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/insertvadeffect/",title:"InsertVadEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public VadEffect InsertVadEffect(uint indexId)
</code></pre>
<p>Insert a vad effect to native pipeline</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>indexId</td>
<td>UInt32</td>
<td>effect index</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/">VadEffect</a></td>
<td><xref href="OdinNative.Odin.Media.VadEffect" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:1175,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/instance/",title:"Instance",section:"ODIN Documentation",description:" Singleton reference to this ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static OdinHandler Instance { get; }
</code></pre>
<p>Singleton reference to this OdinHandler</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Provides access to the client with a usual Unity singleton pattern and add a instance if the client is missing in the scene</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1176,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/instance/",title:"Instance",section:"ODIN Documentation",description:" Singleton reference to this ",content:`<pre><code class="language-C#">public static OdinHandler Instance { get; }
</code></pre>
<p>Singleton reference to this OdinHandler</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Provides access to the client with a usual Unity singleton pattern and add a instance if the client is missing in the scene</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1177,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/instance/",title:"Instance",section:"ODIN Documentation",description:" Singleton reference to this ",content:`<pre><code class="language-C#">public static OdinHandler Instance { get; }
</code></pre>
<p>Singleton reference to this OdinHandler</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Provides access to the client with a usual Unity singleton pattern and add a instance if the client is missing in the scene</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1178,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/instance/",title:"Instance",section:"ODIN Documentation",description:" Singleton reference to this ",content:`<pre><code class="language-C#">public static OdinHandler Instance { get; }
</code></pre>
<p>Singleton reference to this OdinHandler</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Provides access to the client with a usual Unity singleton pattern and add a instance if the client is missing in the scene</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1179,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/instance/",title:"Instance",section:"ODIN Documentation",description:" Singleton reference to this ",content:`<pre><code class="language-C#">public static OdinHandler Instance { get; }
</code></pre>
<p>Singleton reference to this OdinHandler</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Provides access to the client with a usual Unity singleton pattern and add a instance if the client is missing in the scene</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/">OdinHandler</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1180,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/int16/",title:"Int16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Int16 = 209
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1181,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/int32/",title:"Int32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Int32 = 210
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1182,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/int64/",title:"Int64",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Int64 = 211
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1183,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/int8/",title:"Int8",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Int8 = 208
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1184,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN JavaScript SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/">OdinAPMSettings</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/">OdinAudioDataReceivedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/">OdinConnectionStateChangedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odineventpayload/">OdinEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/">OdinEvents</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/">OdinJoinedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinlefteventpayload/">OdinLeftEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/">OdinMediaActivityEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/">OdinMediaAddedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/">OdinMediaRemovedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/">OdinMessageReceivedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/">OdinPeerJoinedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/">OdinPeerLeftEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/">OdinPeerUserDataChangedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/">OdinRoomUserDataChangedEventPayload</a></li>
</span>
</ul>
`}),e.add({id:1185,href:"https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p>The ODIN Unity SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/iodinapmconfig/">IOdinApmConfig</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></li>
</span>
</ul>
`}),e.add({id:1186,href:"https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/iodinapmconfig/">IOdinApmConfig</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></li>
</span>
</ul>
`}),e.add({id:1187,href:"https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/iodinapmconfig/">IOdinApmConfig</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></li>
</span>
</ul>
`}),e.add({id:1188,href:"https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/iodinapmconfig/">IOdinApmConfig</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></li>
</span>
</ul>
`}),e.add({id:1189,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imedia/">IMedia</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/">IMsgPackWriter</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iodineffect/">IOdinEffect</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipeer/">IPeer</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/">IPiplineEffect</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iroom/">IRoom</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></li>
</span>
</ul>
`}),e.add({id:1190,href:"https://www.4players.io/odin/sdk/unity/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN Unity SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/interfaces/iodinapmconfig/">IOdinApmConfig</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></li>
</span>
</ul>
`}),e.add({id:1191,href:"https://www.4players.io/odin/sdk/web/interfaces/",title:"Interfaces",section:"ODIN Documentation",description:"An index of all Interfaces available in the ODIN Unity SDK",content:`<p>The ODIN JavaScript SDK has defined these Interfaces:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/">IOdinAudioSettings</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostats/">IOdinAudioStats</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostatseventpayload/">IOdinAudioStatsEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinclientevents/">IOdinClientEvents</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinclientsettings/">IOdinClientSettings</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/">IOdinConnectionStateChangedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinevent/">IOdinEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/">IOdinMediaActivityChangedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinmediaevents/">IOdinMediaEvents</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/">IOdinMediaStartedStoppedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/">IOdinMessageReceivedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/">IOdinPeerDataChangedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/">IOdinPeerEvents</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/">IOdinPeerJoinedLeftEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinroomdatachangedeventpayload/">IOdinRoomDataChangedEventPayload</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/">IOdinRoomEvents</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/interfaces/iodinroomjoinedlefteventpayload/">IOdinRoomJoinedLeftEventPayload</a></li>
</span>
</ul>
`}),e.add({id:1192,href:"https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/iodinapmconfig/",title:"IOdinApmConfig",section:"ODIN Documentation",description:" Interface for Audio processing configuration of an ODIN room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public interface IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Interface for Audio processing configuration of an ODIN room</p>
`}),e.add({id:1193,href:"https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/iodinapmconfig/",title:"IOdinApmConfig",section:"ODIN Documentation",description:" Interface for Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public interface IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Interface for Audio processing configuration of an ODIN room</p>
`}),e.add({id:1194,href:"https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/iodinapmconfig/",title:"IOdinApmConfig",section:"ODIN Documentation",description:" Interface for Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public interface IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Interface for Audio processing configuration of an ODIN room</p>
`}),e.add({id:1195,href:"https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/iodinapmconfig/",title:"IOdinApmConfig",section:"ODIN Documentation",description:" Interface for Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public interface IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Interface for Audio processing configuration of an ODIN room</p>
`}),e.add({id:1196,href:"https://www.4players.io/odin/sdk/unity/interfaces/iodinapmconfig/",title:"IOdinApmConfig",section:"ODIN Documentation",description:" Interface for Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public interface IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Interface for Audio processing configuration of an ODIN room</p>
`}),e.add({id:1197,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/",title:"IOdinAudioSettings",section:"ODIN Documentation",description:"Interface describing audio settings to be applied on connect.",content:`<pre><code class="language-TypeScript">export interface IOdinAudioSettings
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing audio settings to be applied on connect.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/voiceactivitydetection/">voiceActivityDetection</a></td>
<td>boolean</td>
<td>Enable or disable RNN-based voice activity detection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/voiceactivitydetectionattackprobability/">voiceActivityDetectionAttackProbability</a></td>
<td>number</td>
<td>Voice probability value when the VAD should engage</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/voiceactivitydetectionreleaseprobability/">voiceActivityDetectionReleaseProbability</a></td>
<td>number</td>
<td>Voice probability value when the VAD should disengage</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/volumegate/">volumeGate</a></td>
<td>boolean</td>
<td>Enables or disables the input volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/volumegateattackloudness/">volumeGateAttackLoudness</a></td>
<td>number</td>
<td>Root mean square power (dBFS) when the volume gate should engage</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/volumegatereleaseloudness/">volumeGateReleaseLoudness</a></td>
<td>number</td>
<td>Root mean square power (dBFS) when the volume gate should disengage</td>
</tr>
</tbody>
</table>
`}),e.add({id:1198,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostats/",title:"IOdinAudioStats",section:"ODIN Documentation",description:"Interface describing encoder/decoder statistics from the audio worker.",content:`<pre><code class="language-TypeScript">export interface IOdinAudioStats
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing encoder/decoder statistics from the audio worker.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiostats/decoder/">decoder</a></td>
<td>{avg_decode_time: number, cache_length: number, packets_invalid: number, packets_lost: number, packets_processed: number, packets_repeated: number, packets_seen: number, packets_too_early: number, packets_too_late: number, rewinds: number}</td>
<td>Internal Opus decoder statistics.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiostats/encoder/">encoder</a></td>
<td>{avg_encode_time: number, complexity: number, complexity_factor: number, fec: boolean, fec_packet_loss: number, voip: boolean}</td>
<td>Internal Opus encoder statistics.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1199,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostatseventpayload/",title:"IOdinAudioStatsEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinAudioStatsEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinAudioStatsEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinAudioStatsEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiostatseventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The <code>OdinRoom</code> instance the stats ere coming from.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinaudiostatseventpayload/stats/">stats</a></td>
<td><a href="/odin/sdk/web/interfaces/iodinaudiostats/">IOdinAudioStats</a></td>
<td>The internal Opus encoder/decoder stats.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1200,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinclientevents/",title:"IOdinClientEvents",section:"ODIN Documentation",description:"Interface describing possible media events.",content:`<pre><code class="language-TypeScript">export interface IOdinClientEvents
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing possible media events.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinclientevents/connectionstatechanged/">ConnectionStateChanged</a></td>
<td><a href="/odin/sdk/web/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></td>
<td>Main stream connection state updates.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1201,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinclientsettings/",title:"IOdinClientSettings",section:"ODIN Documentation",description:"Interface describing custom options for ODIN clients.",content:`<pre><code class="language-TypeScript">export interface IOdinClientSettings
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing custom options for ODIN clients.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinclientsettings/gatewayurl/">gatewayUrl</a></td>
<td>string</td>
<td>The URL of the ODIN gateway to use.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1202,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/",title:"IOdinConnectionStateChangedEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinConnectionStateChangedEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinConnectionStateChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinConnectionStateChangedEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/newstate/">newState</a></td>
<td><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></td>
<td>Current state of the connection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/oldstate/">oldState</a></td>
<td><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></td>
<td>Previous state of the connection.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1203,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iodineffect/",title:"IOdinEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public interface IOdinEffect
</code></pre>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iodineffect/getmedia/">GetMedia</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iodineffect/geteffect/">GetEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1204,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinevent/",title:"IOdinEvent",section:"ODIN Documentation",description:"Interface extending default JavaScript events with custom information.",content:`<pre><code class="language-TypeScript">export interface IOdinEvent
</code></pre>
<h1 id="heading"></h1>
<p>Interface extending default JavaScript events with custom information.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinevent/payload/">payload</a></td>
<td>T</td>
<td>Custom payload of the event (see <code>IOdin*Payload</code> interfaces).</td>
</tr>
</tbody>
</table>
`}),e.add({id:1205,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/",title:"IOdinMediaActivityChangedEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinMediaActivityChangedEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinMediaActivityChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinMediaActivityChangedEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/media/">media</a></td>
<td><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></td>
<td>The media that was updated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/peer/">peer</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></td>
<td>The peer that owns the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The room the media is added to.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1206,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediaevents/",title:"IOdinMediaEvents",section:"ODIN Documentation",description:"Interface describing possible media events.",content:`<pre><code class="language-TypeScript">export interface IOdinMediaEvents
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing possible media events.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediaevents/activity/">Activity</a></td>
<td><a href="/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></td>
<td>The media is sending/receiving data.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1207,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/",title:"IOdinMediaStartedStoppedEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinMediaStartedStoppedEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinMediaStartedStoppedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinMediaStartedStoppedEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/media/">media</a></td>
<td><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></td>
<td>The media that was added/removed.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/peer/">peer</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></td>
<td>The peer that owns the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The room where the media was added/removed.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1208,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/",title:"IOdinMessageReceivedEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinMessageReceivedEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinMessageReceivedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinMessageReceivedEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/message/">message</a></td>
<td>Uint8Array</td>
<td>A byte array with the message.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The room where the message was received.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/senderid/">senderId</a></td>
<td>number</td>
<td>The ID of the peer that sent the message (might not be in proximity).</td>
</tr>
</tbody>
</table>
`}),e.add({id:1209,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/",title:"IOdinPeerDataChangedEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinPeerDataChangedEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinPeerDataChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinPeerDataChangedEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/peer/">peer</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></td>
<td>The updated <code>OdinPeer</code> instance.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The room where the peer was updated.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1210,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/",title:"IOdinPeerEvents",section:"ODIN Documentation",description:"Interface describing possible peer events.",content:`<pre><code class="language-TypeScript">export interface IOdinPeerEvents
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing possible peer events.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerevents/mediaactivity/">MediaActivity</a></td>
<td><a href="/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></td>
<td>A media owned by the peer is sending/receiving data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerevents/mediastarted/">MediaStarted</a></td>
<td><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></td>
<td>Peer added a new media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerevents/mediastopped/">MediaStopped</a></td>
<td><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></td>
<td>Peer removed a media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerevents/messagereceived/">MessageReceived</a></td>
<td><a href="/odin/sdk/web/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></td>
<td>Peer sent a message with arbitrary data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerevents/userdatachanged/">UserDataChanged</a></td>
<td><a href="/odin/sdk/web/types/odinpeerdatachangedevent/">OdinPeerDataChangedEvent</a></td>
<td>Peer updated its user data.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1211,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/",title:"IOdinPeerJoinedLeftEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinPeerJoinedLeftEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinPeerJoinedLeftEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinPeerJoinedLeftEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/peer/">peer</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></td>
<td>The peer that joined/left.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The room the peer joined/left.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1212,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomdatachangedeventpayload/",title:"IOdinRoomDataChangedEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinRoomDataChangedEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinRoomDataChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinRoomDataChangedEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomdatachangedeventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The updated <code>OdinRoom</code> instance.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1213,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/",title:"IOdinRoomEvents",section:"ODIN Documentation",description:"Interface describing possible room events.",content:`<pre><code class="language-TypeScript">export interface IOdinRoomEvents
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing possible room events.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/audiostats/">AudioStats</a></td>
<td><a href="/odin/sdk/web/types/odinaudiostatsevent/">OdinAudioStatsEvent</a></td>
<td>Internal encoder/decoder stats updates.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/connectionstatechanged/">ConnectionStateChanged</a></td>
<td><a href="/odin/sdk/web/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></td>
<td>Room stream connection state updates.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/joined/">Joined</a></td>
<td><a href="/odin/sdk/web/types/odinroomjoinedleftevent/">OdinRoomJoinedLeftEvent</a></td>
<td>The room was joined successfully.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/left/">Left</a></td>
<td><a href="/odin/sdk/web/types/odinroomjoinedleftevent/">OdinRoomJoinedLeftEvent</a></td>
<td>The room was left.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/mediaactivity/">MediaActivity</a></td>
<td><a href="/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></td>
<td>A media in the room is sending/receiving data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/mediastarted/">MediaStarted</a></td>
<td><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></td>
<td>A new media stream was added to the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/mediastopped/">MediaStopped</a></td>
<td><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></td>
<td>A media stream was removed from the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/messagereceived/">MessageReceived</a></td>
<td><a href="/odin/sdk/web/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></td>
<td>Received a message with arbitrary data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/peerjoined/">PeerJoined</a></td>
<td><a href="/odin/sdk/web/types/odinpeerjoinedleftevent/">OdinPeerJoinedLeftEvent</a></td>
<td>A new peer entered the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/peerleft/">PeerLeft</a></td>
<td><a href="/odin/sdk/web/types/odinpeerjoinedleftevent/">OdinPeerJoinedLeftEvent</a></td>
<td>A peer left the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/peeruserdatachanged/">PeerUserDataChanged</a></td>
<td><a href="/odin/sdk/web/types/odinpeerdatachangedevent/">OdinPeerDataChangedEvent</a></td>
<td>A peer in the room updated its user data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/userdatachanged/">UserDataChanged</a></td>
<td><a href="/odin/sdk/web/types/odinroomdatachangedevent/">OdinRoomDataChangedEvent</a></td>
<td>The global room user data was updated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomevents/voiceprocessingstats/">VoiceProcessingStats</a></td>
<td>OdinVoiceProcessingStatsEvent</td>
<td>Internal RNN VAD stats updates.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1214,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomjoinedlefteventpayload/",title:"IOdinRoomJoinedLeftEventPayload",section:"ODIN Documentation",description:"Interface describing the payload of an `OdinRoomJoinedLeftEvent`.",content:`<pre><code class="language-TypeScript">export interface IOdinRoomJoinedLeftEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>Interface describing the payload of an <code>OdinRoomJoinedLeftEvent</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/interfaces/iodinroomjoinedlefteventpayload/room/">room</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></td>
<td>The room that was joined/left.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1215,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/ios/",title:"iOS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">iOS = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1216,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/ios/",title:"iOS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">iOS = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1217,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/ios/",title:"iOS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">iOS = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1218,href:"https://www.4players.io/odin/sdk/unity/enums/supportedplatform/ios/",title:"iOS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">iOS = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1219,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipeer/",title:"IPeer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public interface IPeer
</code></pre>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipeer/getbasepeer/">GetBasePeer</a></td>
<td>Get the underlying Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipeer/getroomapi/">GetRoomApi</a></td>
<td>Get the underlying Room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1220,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/",title:"IPiplineEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public interface IPiplineEffect
</code></pre>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/geteffectindex/">GetEffectIndex</a></td>
<td>Get native effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/geteffecttype/">GetEffectType</a></td>
<td>Get native effect NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/getvadconfig/">GetVadConfig</a></td>
<td>Get native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/setapmconfig/">SetApmConfig</a></td>
<td>Set native audio processing config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/setapmstreamdelay/">SetApmStreamDelay</a></td>
<td>Set native audio processing delay</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/setvadconfig/">SetVadConfig</a></td>
<td>Set native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/updateapmplayback/">UpdateApmPlayback</a></td>
<td>Send samples for native audio processing</td>
</tr>
</tbody>
</table>
`}),e.add({id:1221,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iroom/",title:"IRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public interface IRoom
</code></pre>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iroom/getbaseroom/">GetBaseRoom</a></td>
<td>Get the underlying Room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1222,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/is_end_of_spurt/",title:"is_end_of_spurt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool is_end_of_spurt
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1223,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramsend/is_end_of_spurt/",title:"is_end_of_spurt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool is_end_of_spurt
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1224,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiodata/is_silent/",title:"is_silent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool is_silent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1225,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/is_silent/",title:"is_silent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool is_silent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1226,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/is_silent/",title:"is_silent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool is_silent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1227,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/isactive/",title:"IsActive",section:"ODIN Documentation",description:" Indicates wether or not the media stream is active and sending/receiving data ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsActive { get; }
</code></pre>
<p>Indicates wether or not the media stream is active and sending/receiving data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1228,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/isactive/",title:"IsActive",section:"ODIN Documentation",description:" Indicates wether or not the media stream is active and sending/receiving data ",content:`<pre><code class="language-C#">public bool IsActive { get; }
</code></pre>
<p>Indicates wether or not the media stream is active and sending/receiving data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1229,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/isactive/",title:"IsActive",section:"ODIN Documentation",description:" Indicates wether or not the media stream is active and sending/receiving data ",content:`<pre><code class="language-C#">public bool IsActive { get; }
</code></pre>
<p>Indicates wether or not the media stream is active and sending/receiving data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1230,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/isactive/",title:"IsActive",section:"ODIN Documentation",description:" Indicates wether or not the media stream is active and sending/receiving data ",content:`<pre><code class="language-C#">public bool IsActive { get; }
</code></pre>
<p>Indicates wether or not the media stream is active and sending/receiving data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1231,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/isactive/",title:"IsActive",section:"ODIN Documentation",description:" Indicates wether or not the media stream is active and sending/receiving data ",content:`<pre><code class="language-C#">public bool IsActive { get; }
</code></pre>
<p>Indicates wether or not the media stream is active and sending/receiving data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1232,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/isalive/",title:"IsAlive",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsAlive { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1233,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindecoderhandle/isalive/",title:"IsAlive",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsAlive { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1234,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinencoderhandle/isalive/",title:"IsAlive",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsAlive { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1235,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpipelinehandle/isalive/",title:"IsAlive",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsAlive { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1236,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroomhandle/isalive/",title:"IsAlive",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsAlive { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1237,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odintokengeneratorhandle/isalive/",title:"IsAlive",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsAlive { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1238,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isarray/",title:"IsArray",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsArray(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1239,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isbinary/",title:"IsBinary",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsBinary(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1240,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isbyte/",title:"IsByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsByte(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1241,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/isclosed/",title:"IsClosed",section:"ODIN Documentation",description:" IsClosed ",content:`<pre><code class="language-C#">public bool IsClosed { get; }
</code></pre>
<p>IsClosed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1242,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/isconnected/",title:"IsConnected",section:"ODIN Documentation",description:" IsJoined ",content:`<pre><code class="language-C#">public bool IsConnected { get; }
</code></pre>
<p>IsJoined</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1243,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/iscreated/",title:"IsCreated",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsCreated { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1244,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/iscreated/",title:"IsCreated",section:"ODIN Documentation",description:" Flag if the effect was added to the pipeline ",content:`<pre><code class="language-C#">public bool IsCreated { get; }
</code></pre>
<p>Flag if the effect was added to the pipeline</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1245,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/iscreated/",title:"IsCreated",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsCreated { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1246,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isdouble/",title:"IsDouble",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsDouble(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1247,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1248,href:"https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/iuserdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1249,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1250,href:"https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/iuserdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1251,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1252,href:"https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/iuserdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1253,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1254,href:"https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/iuserdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1255,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1256,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iuserdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1257,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1258,href:"https://www.4players.io/odin/sdk/unity/interfaces/iuserdata/isempty/",title:"IsEmpty",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">bool IsEmpty()
</code></pre>
<p>Indicates whether data is null or empty</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if empty</td>
</tr>
</tbody>
</table>
`}),e.add({id:1259,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/isenabled/",title:"IsEnabled",section:"ODIN Documentation",description:" Flag if the component is active or use isActiveAndEnabled ",content:`<pre><code class="language-C#">public bool IsEnabled { get; }
</code></pre>
<p>Flag if the component is active or use <code>isActiveAndEnabled</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1260,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/utility/iserror/",title:"IsError",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool IsError(uint error)
</code></pre>
<p>Determines if the specified error code identifies an actual error.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>UInt32</td>
<td>error code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1261,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/utility/iserror/",title:"IsError",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsError(uint error)
</code></pre>
<p>Determines if the specified error code identifies an actual error.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>UInt32</td>
<td>error code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1262,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/utility/iserror/",title:"IsError",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsError(uint error)
</code></pre>
<p>Determines if the specified error code identifies an actual error.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>UInt32</td>
<td>error code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1263,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/utility/iserror/",title:"IsError",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsError(uint error)
</code></pre>
<p>Determines if the specified error code identifies an actual error.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>UInt32</td>
<td>error code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1264,href:"https://www.4players.io/odin/sdk/unity/classes/utility/iserror/",title:"IsError",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsError(uint error)
</code></pre>
<p>Determines if the specified error code identifies an actual error.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>UInt32</td>
<td>error code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1265,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isextension/",title:"IsExtension",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsExtension(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1266,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfixarray/",title:"IsFixArray",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsFixArray(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1267,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfixmap/",title:"IsFixMap",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsFixMap(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1268,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfixstr/",title:"IsFixStr",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsFixStr(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1269,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfloat/",title:"IsFloat",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsFloat(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1270,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibrary/isinitialized/",title:"IsInitialized",section:"ODIN Documentation",description:" Indicates whether or not the native ODIN runtime has been loaded and initialized ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool IsInitialized { get; }
</code></pre>
<p>Indicates whether or not the native ODIN runtime has been loaded and initialized</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1271,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibrary/isinitialized/",title:"IsInitialized",section:"ODIN Documentation",description:" Indicates whether or not the native ODIN runtime has been loaded and initialized ",content:`<pre><code class="language-C#">public static bool IsInitialized { get; }
</code></pre>
<p>Indicates whether or not the native ODIN runtime has been loaded and initialized</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1272,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibrary/isinitialized/",title:"IsInitialized",section:"ODIN Documentation",description:" Indicates whether or not the native ODIN runtime has been loaded and initialized ",content:`<pre><code class="language-C#">public static bool IsInitialized { get; }
</code></pre>
<p>Indicates whether or not the native ODIN runtime has been loaded and initialized</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1273,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibrary/isinitialized/",title:"IsInitialized",section:"ODIN Documentation",description:" Indicates whether or not the native ODIN runtime has been loaded and initialized ",content:`<pre><code class="language-C#">public static bool IsInitialized { get; }
</code></pre>
<p>Indicates whether or not the native ODIN runtime has been loaded and initialized</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1274,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibrary/isinitialized/",title:"IsInitialized",section:"ODIN Documentation",description:" Indicates whether or not the native ODIN runtime has been loaded and initialized ",content:`<pre><code class="language-C#">public static bool IsInitialized { get; }
</code></pre>
<p>Indicates whether or not the native ODIN runtime has been loaded and initialized</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1275,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibrary/isinitialized/",title:"IsInitialized",section:"ODIN Documentation",description:" Indicates whether or not the native ODIN runtime has been loaded and initialized ",content:`<pre><code class="language-C#">public static bool IsInitialized { get; }
</code></pre>
<p>Indicates whether or not the native ODIN runtime has been loaded and initialized</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1276,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isint/",title:"IsInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsInt(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1277,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/isinvalid/",title:"IsInvalid",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsInvalid { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1278,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/isinvalid/",title:"IsInvalid",section:"ODIN Documentation",description:" Indicates wether or not the media stream handle is invalid or closed ",content:`<pre><code class="language-C#">public bool IsInvalid { get; }
</code></pre>
<p>Indicates wether or not the media stream handle is invalid or closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1279,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/isinvalid/",title:"IsInvalid",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsInvalid { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1280,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/isinvalid/",title:"IsInvalid",section:"ODIN Documentation",description:" Indicates wether or not the media stream handle is invalid or closed ",content:`<pre><code class="language-C#">public bool IsInvalid { get; }
</code></pre>
<p>Indicates wether or not the media stream handle is invalid or closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1281,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/isinvalid/",title:"IsInvalid",section:"ODIN Documentation",description:" Indicates wether or not the media stream handle is invalid or closed ",content:`<pre><code class="language-C#">public bool IsInvalid { get; }
</code></pre>
<p>Indicates wether or not the media stream handle is invalid or closed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1282,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/isjoined/",title:"IsJoined",section:"ODIN Documentation",description:" true on successful Join or false ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsJoined { get; }
</code></pre>
<p>true on successful Join or false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1283,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/isjoined/",title:"IsJoined",section:"ODIN Documentation",description:" true on successful Join or false ",content:`<pre><code class="language-C#">public bool IsJoined { get; }
</code></pre>
<p>true on successful Join or false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1284,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/isjoined/",title:"IsJoined",section:"ODIN Documentation",description:" true on successful Join or false ",content:`<pre><code class="language-C#">public bool IsJoined { get; }
</code></pre>
<p>true on successful Join or false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1285,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/isjoined/",title:"IsJoined",section:"ODIN Documentation",description:" true on successful Join or false ",content:`<pre><code class="language-C#">public bool IsJoined { get; }
</code></pre>
<p>true on successful Join or false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1286,href:"https://www.4players.io/odin/sdk/unity/classes/room/isjoined/",title:"IsJoined",section:"ODIN Documentation",description:" true on successful Join or false ",content:`<pre><code class="language-C#">public bool IsJoined { get; }
</code></pre>
<p>true on successful Join or false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1287,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/islong/",title:"IsLong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsLong(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1288,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/ismap/",title:"IsMap",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsMap(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1289,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/ismuted/",title:"IsMuted",section:"ODIN Documentation",description:" Indicates wether or not the media stream is muted ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsMuted { get; set; }
</code></pre>
<p>Indicates wether or not the media stream is muted</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, no data will always be empty and thrown away</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1290,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/ismuted/",title:"IsMuted",section:"ODIN Documentation",description:" Indicates wether or not the media stream is muted ",content:`<pre><code class="language-C#">public bool IsMuted { get; set; }
</code></pre>
<p>Indicates wether or not the media stream is muted</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, no data will always be empty and thrown away</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1291,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/ismuted/",title:"IsMuted",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsMuted { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1292,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/ismuted/",title:"IsMuted",section:"ODIN Documentation",description:" Indicates wether or not the media stream is muted ",content:`<pre><code class="language-C#">public bool IsMuted { get; set; }
</code></pre>
<p>Indicates wether or not the media stream is muted</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, no data will always be empty and thrown away</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1293,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/ismuted/",title:"IsMuted",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsMuted { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1294,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isnegativefixint/",title:"IsNegativeFixInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsNegativeFixInt(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1295,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isnil/",title:"IsNil",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsNil(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1296,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/isok/",title:"IsOk",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsOk(NativeBindings.OdinError error)
</code></pre>
<p>Checks the return code for errors</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td>Odin error return code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>false on error</td>
</tr>
</tbody>
</table>
`}),e.add({id:1297,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/ispaused/",title:"IsPaused",section:"ODIN Documentation",description:" Indicates wether or not the media stream is paused ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsPaused { get; set; }
</code></pre>
<p>Indicates wether or not the media stream is paused</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, no data will be read/pushed for the media handle</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1298,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/ispaused/",title:"IsPaused",section:"ODIN Documentation",description:" Indicates wether or not the media stream is paused ",content:`<pre><code class="language-C#">public bool IsPaused { get; set; }
</code></pre>
<p>Indicates wether or not the media stream is paused</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, no data will be read/pushed for the media handle</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1299,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/ispaused/",title:"IsPaused",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsPaused { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1300,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/ispaused/",title:"IsPaused",section:"ODIN Documentation",description:" Indicates wether or not the media stream is paused ",content:`<pre><code class="language-C#">public bool IsPaused { get; set; }
</code></pre>
<p>Indicates wether or not the media stream is paused</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, no data will be read/pushed for the media handle</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1301,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/ispositivefixint/",title:"IsPositiveFixInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsPositiveFixInt(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1302,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1303,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1304,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1305,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1306,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1307,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1308,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1309,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1310,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1311,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/isreadonly/",title:"IsReadOnly",section:"ODIN Documentation",description:" Indicates whether elements can be added or removed from the collection ",content:`<pre><code class="language-C#">public bool IsReadOnly { get; }
</code></pre>
<p>Indicates whether elements can be added or removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1312,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/isremoveonly/",title:"IsRemoveOnly",section:"ODIN Documentation",description:" Indicates whether elements can be removed from the collection ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool IsRemoveOnly { get; }
</code></pre>
<p>Indicates whether elements can be removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1313,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/isremoveonly/",title:"IsRemoveOnly",section:"ODIN Documentation",description:" Indicates whether elements can be removed from the collection ",content:`<pre><code class="language-C#">public bool IsRemoveOnly { get; }
</code></pre>
<p>Indicates whether elements can be removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1314,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/isremoveonly/",title:"IsRemoveOnly",section:"ODIN Documentation",description:" Indicates whether elements can be removed from the collection ",content:`<pre><code class="language-C#">public bool IsRemoveOnly { get; }
</code></pre>
<p>Indicates whether elements can be removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1315,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/isremoveonly/",title:"IsRemoveOnly",section:"ODIN Documentation",description:" Indicates whether elements can be removed from the collection ",content:`<pre><code class="language-C#">public bool IsRemoveOnly { get; }
</code></pre>
<p>Indicates whether elements can be removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1316,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/isremoveonly/",title:"IsRemoveOnly",section:"ODIN Documentation",description:" Indicates whether elements can be removed from the collection ",content:`<pre><code class="language-C#">public bool IsRemoveOnly { get; }
</code></pre>
<p>Indicates whether elements can be removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1317,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/isremoveonly/",title:"IsRemoveOnly",section:"ODIN Documentation",description:" Indicates whether elements can be removed from the collection ",content:`<pre><code class="language-C#">public bool IsRemoveOnly { get; }
</code></pre>
<p>Indicates whether elements can be removed from the collection</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1318,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/issbyte/",title:"IsSByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsSByte(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1319,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isshort/",title:"IsShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsShort(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1320,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/issilent/",title:"IsSilent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool IsSilent { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1321,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/isstereo/",title:"IsStereo",section:"ODIN Documentation",description:" Output decoder channel flag ",content:`<pre><code class="language-C#">public bool IsStereo { get; }
</code></pre>
<p>Output decoder channel flag</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1322,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/isstereo/",title:"IsStereo",section:"ODIN Documentation",description:" Unity channel flag ",content:`<pre><code class="language-C#">public bool IsStereo { get; set; }
</code></pre>
<p>Unity channel flag</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We let Unity resample/mix audio on demand and use only mono by default internally</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1323,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isstring/",title:"IsString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsString(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1324,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isuint/",title:"IsUInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsUInt(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1325,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isulong/",title:"IsULong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsULong(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1326,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/isushort/",title:"IsUShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool IsUShort(byte token)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1327,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/this/",title:"Item[Int32]",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public readonly MsgPackReader this[int index] { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/">MsgPackReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1328,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/this/",title:"Item[Int64]",section:"ODIN Documentation",description:" Try to get a media stream by ID ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaStream this[long key] { get; }
</code></pre>
<p>Try to get a media stream by ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>MediaStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1329,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/this/",title:"Item[Int64]",section:"ODIN Documentation",description:" Try to get a media stream by ID ",content:`<pre><code class="language-C#">public MediaStream this[long key] { get; }
</code></pre>
<p>Try to get a media stream by ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>MediaStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1330,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/this/",title:"Item[Int64]",section:"ODIN Documentation",description:" Try to get a media stream by ID ",content:`<pre><code class="language-C#">public MediaStream this[long key] { get; }
</code></pre>
<p>Try to get a media stream by ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>MediaStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1331,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/this/",title:"Item[Int64]",section:"ODIN Documentation",description:" Try to get a media stream by ID ",content:`<pre><code class="language-C#">public MediaStream this[long key] { get; }
</code></pre>
<p>Try to get a media stream by ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>MediaStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1332,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/this/",title:"Item[Int64]",section:"ODIN Documentation",description:" Try to get a media stream by ID ",content:`<pre><code class="language-C#">public MediaStream this[long key] { get; }
</code></pre>
<p>Try to get a media stream by ID</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>MediaStream or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1333,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/this/",title:"Item[String]",section:"ODIN Documentation",description:" Try to get room by name ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Room this[string key] { get; }
</code></pre>
<p>Try to get room by name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1334,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/this/",title:"Item[String]",section:"ODIN Documentation",description:" Try to get room by name ",content:`<pre><code class="language-C#">public Room this[string key] { get; }
</code></pre>
<p>Try to get room by name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1335,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/this/",title:"Item[String]",section:"ODIN Documentation",description:" Try to get room by name ",content:`<pre><code class="language-C#">public Room this[string key] { get; }
</code></pre>
<p>Try to get room by name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1336,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/this/",title:"Item[String]",section:"ODIN Documentation",description:" Try to get room by name ",content:`<pre><code class="language-C#">public Room this[string key] { get; }
</code></pre>
<p>Try to get room by name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1337,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/this/",title:"Item[String]",section:"ODIN Documentation",description:" Try to get room by name ",content:`<pre><code class="language-C#">public Room this[string key] { get; }
</code></pre>
<p>Try to get room by name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>Room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1338,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/this/",title:"Item[UInt64]",section:"ODIN Documentation",description:" Try to get Peer by id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer this[ulong key] { get; }
</code></pre>
<p>Try to get Peer by id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1339,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/this/",title:"Item[UInt64]",section:"ODIN Documentation",description:" Try to get Peer by id ",content:`<pre><code class="language-C#">public Peer this[ulong key] { get; }
</code></pre>
<p>Try to get Peer by id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1340,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/this/",title:"Item[UInt64]",section:"ODIN Documentation",description:" Try to get Peer by id ",content:`<pre><code class="language-C#">public Peer this[ulong key] { get; }
</code></pre>
<p>Try to get Peer by id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1341,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/this/",title:"Item[UInt64]",section:"ODIN Documentation",description:" Try to get Peer by id ",content:`<pre><code class="language-C#">public Peer this[ulong key] { get; }
</code></pre>
<p>Try to get Peer by id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1342,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/this/",title:"Item[UInt64]",section:"ODIN Documentation",description:" Get room by Id ",content:`<pre><code class="language-C#">public Room this[ulong id] { get; }
</code></pre>
<p>Get room by Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1343,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/this/",title:"Item[UInt64]",section:"ODIN Documentation",description:" Try to get Peer by id ",content:`<pre><code class="language-C#">public Peer this[ulong key] { get; }
</code></pre>
<p>Try to get Peer by id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>Peer or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1344,href:"https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/iuserdata/",title:"IUserData",section:"ODIN Documentation",description:" interface for transmitting UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public interface IUserData
</code></pre>
<h1 id="heading"></h1>
<p>interface for transmitting UserData</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
`}),e.add({id:1345,href:"https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/iuserdata/",title:"IUserData",section:"ODIN Documentation",description:" interface for transmitting UserData ",content:`<pre><code class="language-C#">public interface IUserData
</code></pre>
<h1 id="heading"></h1>
<p>interface for transmitting UserData</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
`}),e.add({id:1346,href:"https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/iuserdata/",title:"IUserData",section:"ODIN Documentation",description:" interface for transmitting UserData ",content:`<pre><code class="language-C#">public interface IUserData
</code></pre>
<h1 id="heading"></h1>
<p>interface for transmitting UserData</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
`}),e.add({id:1347,href:"https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/iuserdata/",title:"IUserData",section:"ODIN Documentation",description:" interface for transmitting UserData ",content:`<pre><code class="language-C#">public interface IUserData
</code></pre>
<h1 id="heading"></h1>
<p>interface for transmitting UserData</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
`}),e.add({id:1348,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iuserdata/",title:"IUserData",section:"ODIN Documentation",description:" interface for transmitting UserData ",content:`<pre><code class="language-C#">public interface IUserData
</code></pre>
<h1 id="heading"></h1>
<p>interface for transmitting UserData</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
`}),e.add({id:1349,href:"https://www.4players.io/odin/sdk/unity/interfaces/iuserdata/",title:"IUserData",section:"ODIN Documentation",description:" interface for transmitting UserData ",content:`<pre><code class="language-C#">public interface IUserData
</code></pre>
<h1 id="heading"></h1>
<p>interface for transmitting UserData</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
</tbody>
</table>
`}),e.add({id:1350,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_dropped_too_early/",title:"jitter_packets_dropped_too_early",section:"ODIN Documentation",description:" The number of packets dropped because they seemed to arrive too early. ",content:`<pre><code class="language-C#">public uint jitter_packets_dropped_too_early
</code></pre>
<p>The number of packets dropped because they seemed to arrive too early.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1351,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_dropped_too_early/",title:"jitter_packets_dropped_too_early",section:"ODIN Documentation",description:" The number of packets dropped because they seemed to arrive too early. ",content:`<pre><code class="language-C#">public uint jitter_packets_dropped_too_early
</code></pre>
<p>The number of packets dropped because they seemed to arrive too early.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1352,href:"https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_dropped_too_early/",title:"jitter_packets_dropped_too_early",section:"ODIN Documentation",description:" The number of packets dropped because they seemed to arrive too early. ",content:`<pre><code class="language-C#">public uint jitter_packets_dropped_too_early
</code></pre>
<p>The number of packets dropped because they seemed to arrive too early.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1353,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_dropped_too_late/",title:"jitter_packets_dropped_too_late",section:"ODIN Documentation",description:" The number of packets processed because they seemed to arrive too late. ",content:`<pre><code class="language-C#">public uint jitter_packets_dropped_too_late
</code></pre>
<p>The number of packets processed because they seemed to arrive too late.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1354,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_dropped_too_late/",title:"jitter_packets_dropped_too_late",section:"ODIN Documentation",description:" The number of packets processed because they seemed to arrive too late. ",content:`<pre><code class="language-C#">public uint jitter_packets_dropped_too_late
</code></pre>
<p>The number of packets processed because they seemed to arrive too late.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1355,href:"https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_dropped_too_late/",title:"jitter_packets_dropped_too_late",section:"ODIN Documentation",description:" The number of packets processed because they seemed to arrive too late. ",content:`<pre><code class="language-C#">public uint jitter_packets_dropped_too_late
</code></pre>
<p>The number of packets processed because they seemed to arrive too late.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1356,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_lost/",title:"jitter_packets_lost",section:"ODIN Documentation",description:" The number of packets marked as lost during transmission. ",content:`<pre><code class="language-C#">public uint jitter_packets_lost
</code></pre>
<p>The number of packets marked as lost during transmission.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1357,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_lost/",title:"jitter_packets_lost",section:"ODIN Documentation",description:" The number of packets marked as lost during transmission. ",content:`<pre><code class="language-C#">public uint jitter_packets_lost
</code></pre>
<p>The number of packets marked as lost during transmission.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1358,href:"https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_lost/",title:"jitter_packets_lost",section:"ODIN Documentation",description:" The number of packets marked as lost during transmission. ",content:`<pre><code class="language-C#">public uint jitter_packets_lost
</code></pre>
<p>The number of packets marked as lost during transmission.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1359,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_processed/",title:"jitter_packets_processed",section:"ODIN Documentation",description:" The number of packets processed by the medias jitter buffer. ",content:`<pre><code class="language-C#">public uint jitter_packets_processed
</code></pre>
<p>The number of packets processed by the medias jitter buffer.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1360,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_processed/",title:"jitter_packets_processed",section:"ODIN Documentation",description:" The number of packets processed by the medias jitter buffer. ",content:`<pre><code class="language-C#">public uint jitter_packets_processed
</code></pre>
<p>The number of packets processed by the medias jitter buffer.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1361,href:"https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_processed/",title:"jitter_packets_processed",section:"ODIN Documentation",description:" The number of packets processed by the medias jitter buffer. ",content:`<pre><code class="language-C#">public uint jitter_packets_processed
</code></pre>
<p>The number of packets processed by the medias jitter buffer.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1362,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/join/",title:"join",section:"ODIN Documentation",description:"Joins the room with the given gateway URL and optional user data.",content:`<pre><code class="language-C#">public join(gatewayOrServerUrl: string, userData?: Uint8Array): void
</code></pre>
<p>Joins the room with the given gateway URL and optional user data.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>gatewayOrServerUrl</td>
<td>string</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td>Uint8Array</td>
<td>The user data to send to the room. This can be used to identify the user.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1363,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/join/",title:"join",section:"ODIN Documentation",description:"Joins the room and returns your own peer instance after the room was successfully joined.",content:`<pre><code class="language-C#">join(userData?: Uint8Array, position?: any): Promise&lt;OdinPeer&gt;
</code></pre>
<p>Joins the room and returns your own peer instance after the room was successfully joined.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td>Uint8Array</td>
<td>Optional user data to set for the peer when connecting</td>
</tr>
<tr>
<td>position</td>
<td>any</td>
<td>Optional coordinates to set the three-dimensional position of the peer in the room when connecting</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/">Promise&lt;OdinPeer&gt;</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1364,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/join/",title:"Join",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinname-userid-userdata">Join(name, userId, userData)</h3>
<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h3 id="jointoken">Join(token)</h3>
<pre><code class="language-C#">public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room token should be generated <em>SERVER SIDE</em> by String%40%2cSystem</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1365,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/join/",title:"Join",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinname-userid-userdata">Join(name, userId, userData)</h3>
<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h3 id="jointoken">Join(token)</h3>
<pre><code class="language-C#">public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room token should be generated <em>SERVER SIDE</em> by String%40%2cSystem</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1366,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/join/",title:"Join",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinname-userid-userdata">Join(name, userId, userData)</h3>
<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h3 id="jointoken">Join(token)</h3>
<pre><code class="language-C#">public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room token should be generated <em>SERVER SIDE</em> by String%40%2cSystem</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1367,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/join/",title:"Join",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinname-userid-userdata">Join(name, userId, userData)</h3>
<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h3 id="jointoken">Join(token)</h3>
<pre><code class="language-C#">public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room token should be generated <em>SERVER SIDE</em> by String%40%2cSystem</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1368,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/join/",title:"Join",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Join(Room room, string token)
public bool Join(Room room, string token, string roomName, byte[] userData, float positionX, float positionY)
</code></pre>
<p>Join a object of base Room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the join fails the room is freed and removed from the client</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>base type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>room alias</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>server culling position X</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>server culling position Y</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroom-token">Join(room, token)</h3>
<pre><code class="language-C#">public bool Join(Room room, string token)
</code></pre>
<p>Join a object of base Room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the join fails the room is freed and removed from the client</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>base type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="joinroom-token-roomname-userdata-positionx-positiony">Join(room, token, roomName, userData, positionX, positionY)</h3>
<pre><code class="language-C#">public bool Join(Room room, string token, string roomName, byte[] userData, float positionX, float positionY)
</code></pre>
<p>Join a object of base Room</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the join fails the room is freed and removed from the client</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>base type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>token</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>room alias</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>server culling position X</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>server culling position Y</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1369,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/join/",title:"Join",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool Join(string endPoint, string token, uint samplerate, bool stereo, out Room room)
public static bool Join(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, string token, uint samplerate, bool stereo, out Room room)
public static bool Join(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, string token, string roomName, byte[] userData, float positionX, float positionY, float positionZ, uint samplerate, bool stereo, out Room room)
public static Room Join(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, string token, string roomName, byte[] userData, float positionX, float positionY, float positionZ, uint samplerate, bool stereo)
</code></pre>
<p>Create and join a Room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>endPoint</td>
<td>String</td>
<td>Gateway server</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Join token</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>sets default stereo flag</td>
</tr>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Initialized room</td>
</tr>
<tr>
<td>connectionPoolHandle</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/">OdinConnectionPoolHandle</a></td>
<td>Connection pool for the room</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>initial room name</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>positionZ</td>
<td>Single</td>
<td>initial position</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successfully request join or false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>true on successfully request join or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinendpoint-token-samplerate-stereo-room">Join(endPoint, token, samplerate, stereo, room)</h3>
<pre><code class="language-C#">public static bool Join(string endPoint, string token, uint samplerate, bool stereo, out Room room)
</code></pre>
<p>Create and join a Room</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>endPoint</td>
<td>String</td>
<td>Gateway server</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Join token</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>sets default stereo flag</td>
</tr>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Initialized room</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successfully request join or false</td>
</tr>
</tbody>
</table>
<h3 id="joinconnectionpoolhandle-endpoint-token-samplerate-stereo-room">Join(connectionPoolHandle, endPoint, token, samplerate, stereo, room)</h3>
<pre><code class="language-C#">public static bool Join(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, string token, uint samplerate, bool stereo, out Room room)
</code></pre>
<p>Create and join a Room</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>connectionPoolHandle</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/">OdinConnectionPoolHandle</a></td>
<td>Connection pool for the room</td>
</tr>
<tr>
<td>endPoint</td>
<td>String</td>
<td>Gateway server</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Join token</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>sets default stereo flag</td>
</tr>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Initialized room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successfully request join or false</td>
</tr>
</tbody>
</table>
<h3 id="joinconnectionpoolhandle-endpoint-token-roomname-userdata-positionx-positiony-positionz-samplerate-stereo-room">Join(connectionPoolHandle, endPoint, token, roomName, userData, positionX, positionY, positionZ, samplerate, stereo, room)</h3>
<pre><code class="language-C#">public static bool Join(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, string token, string roomName, byte[] userData, float positionX, float positionY, float positionZ, uint samplerate, bool stereo, out Room room)
</code></pre>
<p>Create and join a Room</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>connectionPoolHandle</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/">OdinConnectionPoolHandle</a></td>
<td>Connection pool for the room</td>
</tr>
<tr>
<td>endPoint</td>
<td>String</td>
<td>Gateway server</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Join token</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>initial room name</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>positionZ</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>sets default stereo flag</td>
</tr>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>Initialized room</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successfully request join or false</td>
</tr>
</tbody>
</table>
<h3 id="joinconnectionpoolhandle-endpoint-token-roomname-userdata-positionx-positiony-positionz-samplerate-stereo">Join(connectionPoolHandle, endPoint, token, roomName, userData, positionX, positionY, positionZ, samplerate, stereo)</h3>
<pre><code class="language-C#">public static Room Join(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, string token, string roomName, byte[] userData, float positionX, float positionY, float positionZ, uint samplerate, bool stereo)
</code></pre>
<p>Create and join a Room</p>
<h4 id="parameters-4">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>connectionPoolHandle</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/">OdinConnectionPoolHandle</a></td>
<td>Connection pool for the room</td>
</tr>
<tr>
<td>endPoint</td>
<td>String</td>
<td>Gateway server</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Join token</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>initial room name</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>positionZ</td>
<td>Single</td>
<td>initial position</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>sets default stereo flag</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>true on successfully request join or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1370,href:"https://www.4players.io/odin/sdk/unity/classes/room/join/",title:"Join",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinname-userid-userdata">Join(name, userId, userData)</h3>
<pre><code class="language-C#">public bool Join(string name, string userId, IUserData userData = null)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Generates a room token and update UserData before join</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>user id</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>custom userdata</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
<h3 id="jointoken">Join(token)</h3>
<pre><code class="language-C#">public bool Join(string token)
</code></pre>
<p>Join the room via Odin gateway</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room token should be generated <em>SERVER SIDE</em> by String%40%2cSystem</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>room token</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful join or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1371,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/joined/",title:"Joined",section:"ODIN Documentation",description:"Fired when the local user connected to the room (successfully joined).",content:`<pre><code class="language-C#">public Joined: OdinJoinedEvent
</code></pre>
<p>Fired when the local user connected to the room (successfully joined).</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinjoinedevent/">OdinJoinedEvent</a></p>
`}),e.add({id:1372,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/joined/",title:"Joined",section:"ODIN Documentation",description:"The room was joined successfully.",content:`<pre><code class="language-C#">OdinRoomJoinedLeftEvent
</code></pre>
<p>The room was joined successfully.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinroomjoinedleftevent/">OdinRoomJoinedLeftEvent</a></p>
`}),e.add({id:1373,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/joinnamedroom/",title:"JoinNamedRoom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;Room&gt; JoinNamedRoom(string roomalias, string token, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a named Room by token via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomalias</td>
<td>String</td>
<td>Room alias</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1374,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/joinnamedroom/",title:"JoinNamedRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinNamedRoom(string roomalias, string token, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a named Room by token via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomalias</td>
<td>String</td>
<td>Room alias</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1375,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/joinnamedroom/",title:"JoinNamedRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinNamedRoom(string roomalias, string token, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a named Room by token via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomalias</td>
<td>String</td>
<td>Room alias</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1376,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/joinnamedroom/",title:"JoinNamedRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinNamedRoom(string roomalias, string token, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a named Room by token via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomalias</td>
<td>String</td>
<td>Room alias</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1377,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/joinnamedroom/",title:"JoinNamedRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinNamedRoom(string roomalias, string token, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a named Room by token via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomalias</td>
<td>String</td>
<td>Room alias</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1378,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomname-userid">JoinRoom(name, userId)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-setup">JoinRoom(name, userId, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-userdata-setup">JoinRoom(name, userId, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomtoken-userdata-setup">JoinRoom(token, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by token via a gateway</p>
<h4 id="parameters-4">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1379,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomroomname-userdata-setup">JoinRoom(roomName, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
<h3 id="joinroomroomalias-token-userdata-setup">JoinRoom(roomAlias, token, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
`}),e.add({id:1380,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomname-userid">JoinRoom(name, userId)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-setup">JoinRoom(name, userId, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-userdata-setup">JoinRoom(name, userId, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomtoken-userdata-setup">JoinRoom(token, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by token via a gateway</p>
<h4 id="parameters-4">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1381,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomroomname-userdata-setup">JoinRoom(roomName, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
<h3 id="joinroomroomalias-token-userdata-setup">JoinRoom(roomAlias, token, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
`}),e.add({id:1382,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomname-userid">JoinRoom(name, userId)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-setup">JoinRoom(name, userId, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-userdata-setup">JoinRoom(name, userId, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomtoken-userdata-setup">JoinRoom(token, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by token via a gateway</p>
<h4 id="parameters-4">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1383,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomroomname-userdata-setup">JoinRoom(roomName, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
<h3 id="joinroomroomalias-token-userdata-setup">JoinRoom(roomAlias, token, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
`}),e.add({id:1384,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomname-userid">JoinRoom(name, userId)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-setup">JoinRoom(name, userId, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-userdata-setup">JoinRoom(name, userId, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomtoken-userdata-setup">JoinRoom(token, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by token via a gateway</p>
<h4 id="parameters-4">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1385,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomroomname-userdata-setup">JoinRoom(roomName, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
<h3 id="joinroomroomalias-token-userdata-setup">JoinRoom(roomAlias, token, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
`}),e.add({id:1386,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room JoinRoom(string token, uint samplerate, bool stereo, bool handleRoom = true)
public Room JoinRoom(string token, string roomName, byte[] userData, float positionX, float positionY, float positionZ, uint samplerate, bool stereo, bool handleRoom = true)
</code></pre>
<p>Create and join a Room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>token</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td>handleRoom</td>
<td>Boolean</td>
<td>true will add the room to <xref href="OdinNative.Odin.Room.RoomCollection" data-throw-if-not-resolved="false"></xref> of the client</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>room alias</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>server culling position X</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>server culling position Y</td>
</tr>
<tr>
<td>positionZ</td>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomtoken-samplerate-stereo-handleroom">JoinRoom(token, samplerate, stereo, handleRoom)</h3>
<pre><code class="language-C#">public Room JoinRoom(string token, uint samplerate, bool stereo, bool handleRoom = true)
</code></pre>
<p>Create and join a Room</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>token</td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td>handleRoom</td>
<td>Boolean</td>
<td>true will add the room to <xref href="OdinNative.Odin.Room.RoomCollection" data-throw-if-not-resolved="false"></xref> of the client</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomtoken-roomname-userdata-positionx-positiony-positionz-samplerate-stereo-handleroom">JoinRoom(token, roomName, userData, positionX, positionY, positionZ, samplerate, stereo, handleRoom)</h3>
<pre><code class="language-C#">public Room JoinRoom(string token, string roomName, byte[] userData, float positionX, float positionY, float positionZ, uint samplerate, bool stereo, bool handleRoom = true)
</code></pre>
<p>Create and join a Room</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>token</td>
</tr>
<tr>
<td>roomName</td>
<td>String</td>
<td>room alias</td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td>initial userdata</td>
</tr>
<tr>
<td>positionX</td>
<td>Single</td>
<td>server culling position X</td>
</tr>
<tr>
<td>positionY</td>
<td>Single</td>
<td>server culling position Y</td>
</tr>
<tr>
<td>positionZ</td>
<td>Single</td>
<td></td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td>handleRoom</td>
<td>Boolean</td>
<td>true will add the room to <xref href="OdinNative.Odin.Room.RoomCollection" data-throw-if-not-resolved="false"></xref> of the client</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td>room or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1387,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="joinroomname-userid">JoinRoom(name, userId)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>User ID</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-setup">JoinRoom(name, userId, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomname-userid-userdata-setup">JoinRoom(name, userId, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string name, string userId, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by name via a gateway</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td>Odin client ID</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
<h3 id="joinroomtoken-userdata-setup">JoinRoom(token, userData, setup)</h3>
<pre><code class="language-C#">public async Task&lt;Room&gt; JoinRoom(string token, IUserData userData, Action&lt;Room&gt; setup)
</code></pre>
<p>Join or create a Room by token via a gateway</p>
<h4 id="parameters-4">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>token</td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Set new <xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> on room join</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>will invoke to setup a room before adding or joining</td>
</tr>
</tbody>
</table>
<h4 id="returns-4">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Room&gt;</td>
<td><xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref> or null</td>
</tr>
</tbody>
</table>
`}),e.add({id:1388,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/joinroom/",title:"JoinRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>ODIN does not require any bookkeeping from your side. ODIN automatically creates a room when a user joins it (by
name) and deletes the room once the last user has left the room.</p>
<p>Provide a room name as a string in <code>roomName</code>. It can be anything you like. Remember, that all users that have
joined the same room can talk to each other (or at least listen to what others are saying). If you have two teams of
users in your game, and each team should only talk to other team members, you could have two rooms: <code>Team_A</code> and
<code>Team_B</code>. We have created a couple of use-cases explaining various methods of defining room names in <a href="/odin/introduction/concepts/">this document</a>.</p>
<p><code>userData</code> is of type <span class="external-reference">UserData <a href="/odin/sdk/unity/classes/userdata/"><i class="fas fa-external-link-alt"></i></a></span>
 and is basically just a byte array. You can set any user data you
like. The best way is to create a class and serialize that class to whatever you like. We provide a sample of such a
class in the guide <a href="/odin/guides/unity/user-data/">Understanding User Data</a>.</p>
<p>Use the <code>setup</code> callback to adjust <span class="external-reference">room settings <a href="/odin/sdk/unity/classes/odinroomconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 before data is sent to ODIN and the room is created on the ODIN
servers.</p>
<pre><code class="language-C#">public class Radio: MonoBehaviour
{
    private string _currentRoom;
    public int currentChannel = 1;
    
    void Start()
    {
        UpdateRadioConnection();
    }
    
    public void ChangeChannel(newChannel) 
    {
        currentChannel = newChannel;
        UpdateRadioConnection();
    }
    
    void UpdateRadioConnection()
    {
        // Leave the current radio room
        if (_currentRoom) {
            OdinHandler.Instance.LeaveRoom(_currentRoom);
        }
        
        _currentRoom = &quot;Radio_&quot; + currentChannel.ToString();
        OdinHandler.Instance.JoinRoom(_currentRoom, null, room =&gt; {
            // Activate Voice Activity Detection 
            room.Config.ApmConfig.VadEnable = true;
        });
    }
}
</code></pre>
</div>



<h2 id="variants">Variants</h2>
<h3 id="joinroomroomname-userdata-setup">JoinRoom(roomName, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomName, IUserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
<h3 id="joinroomroomalias-token-userdata-setup">JoinRoom(roomAlias, token, userData, setup)</h3>
<pre><code class="language-C#">public async void JoinRoom(string roomAlias, string token, UserData userData = null, Action&lt;Room&gt; setup = null)
</code></pre>
<p>Join or create a room by name and attach a Media</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Configure Room-Apm i.e VadEnable, &hellip; or Odin-Event-Listeners i.e PeerJoinedEvent, &hellip; with <a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomAlias</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>token</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td>Override OdinClient default UserData</td>
</tr>
<tr>
<td>setup</td>
<td>Action&lt;Room&gt;</td>
<td>Override default Room setup</td>
</tr>
</tbody>
</table>
`}),e.add({id:1389,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/keytobytes/",title:"KeyToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static byte[] KeyToBytes(string key)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1390,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediarpcproperties/kind/",title:"Kind",section:"ODIN Documentation",description:" preset field &quot;Audio&quot; ",content:`<pre><code class="language-C#">public string Kind
</code></pre>
<p>preset field <code>&quot;Audio&quot;</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1391,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/ldb/",title:"Ldb",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Ldb
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1392,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Leave()
</code></pre>
<p>Leave a room and free all remote peers and associated medias</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This resets the room object for a final close use Dispose</p>
</div>
</div>

`}),e.add({id:1393,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void Leave(string key)
</code></pre>
<p>Get the room and leave</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT remove the room from the collection</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1394,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave()
</code></pre>
<p>Leave a room and free all remote peers and associated medias</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This resets the room object for a final close use Dispose</p>
</div>
</div>

`}),e.add({id:1395,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave(string key)
</code></pre>
<p>Get the room and leave</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT remove the room from the collection</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1396,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave()
</code></pre>
<p>Leave a room and free all remote peers and associated medias</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This resets the room object for a final close use Dispose</p>
</div>
</div>

`}),e.add({id:1397,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave(string key)
</code></pre>
<p>Get the room and leave</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT remove the room from the collection</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1398,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave()
</code></pre>
<p>Leave a room and free all remote peers and associated medias</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This resets the room object for a final close use Dispose</p>
</div>
</div>

`}),e.add({id:1399,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave(string key)
</code></pre>
<p>Get the room and leave</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT remove the room from the collection</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1400,href:"https://www.4players.io/odin/sdk/unity/classes/room/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave()
</code></pre>
<p>Leave a room and free all remote peers and associated medias</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This resets the room object for a final close use Dispose</p>
</div>
</div>

`}),e.add({id:1401,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/leave/",title:"Leave",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void Leave(string key)
</code></pre>
<p>Get the room and leave</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT remove the room from the collection</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1402,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;bool&gt; LeaveRoom(string name)
</code></pre>
<p>Leave a joined Room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will dispose the Room object</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if removed from <xref href="OdinNative.Odin.OdinClient.Rooms" data-throw-if-not-resolved="false"></xref> or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1403,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async void LeaveRoom(string roomName)
</code></pre>
<p>Leave and free the Room by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1404,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; LeaveRoom(string name)
</code></pre>
<p>Leave a joined Room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will dispose the Room object</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if removed from <xref href="OdinNative.Odin.OdinClient.Rooms" data-throw-if-not-resolved="false"></xref> or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1405,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void LeaveRoom(string roomName)
</code></pre>
<p>Leave and free the Room by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1406,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; LeaveRoom(string name)
</code></pre>
<p>Leave a joined Room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will dispose the Room object</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if removed from <xref href="OdinNative.Odin.OdinClient.Rooms" data-throw-if-not-resolved="false"></xref> or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1407,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void LeaveRoom(string roomName)
</code></pre>
<p>Leave and free the Room by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1408,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; LeaveRoom(string name)
</code></pre>
<p>Leave a joined Room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will dispose the Room object</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if removed from <xref href="OdinNative.Odin.OdinClient.Rooms" data-throw-if-not-resolved="false"></xref> or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1409,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void LeaveRoom(string roomName)
</code></pre>
<p>Leave and free the Room by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1410,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; LeaveRoom(string name)
</code></pre>
<p>Leave a joined Room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will dispose the Room object</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if removed from <xref href="OdinNative.Odin.OdinClient.Rooms" data-throw-if-not-resolved="false"></xref> or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1411,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/leaveroom/",title:"LeaveRoom",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void LeaveRoom(string roomName)
</code></pre>
<p>Leave and free the Room by name</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:1412,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/left/",title:"Left",section:"ODIN Documentation",description:"Fired when the local user disconnected from the room (left).",content:`<pre><code class="language-C#">public Left: OdinLeftEvent
</code></pre>
<p>Fired when the local user disconnected from the room (left).</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinleftevent/">OdinLeftEvent</a></p>
`}),e.add({id:1413,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/left/",title:"Left",section:"ODIN Documentation",description:"The room was left.",content:`<pre><code class="language-C#">OdinRoomJoinedLeftEvent
</code></pre>
<p>The room was left.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinroomjoinedleftevent/">OdinRoomJoinedLeftEvent</a></p>
`}),e.add({id:1414,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/linkinputmedia/",title:"LinkInputMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool LinkInputMedia(uint samplerate, bool stereo, out MediaEncoder encoder)
</code></pre>
<p>Add a input media encoder to the corresponding room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td>encoder samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td>encoder channel flag</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>started encoder or null</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on start or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1415,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/supportedplatform/linux/",title:"Linux",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Linux = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1416,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/linux/",title:"Linux",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Linux = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1417,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/supportedplatform/linux/",title:"Linux",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Linux = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1418,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/linux/",title:"Linux",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Linux = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1419,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/linux/",title:"Linux",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Linux = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1420,href:"https://www.4players.io/odin/sdk/unity/enums/supportedplatform/linux/",title:"Linux",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Linux = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1421,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/log/",title:"Log",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Log
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1422,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/log/",title:"Log",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Log
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1423,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/log/",title:"Log",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Log
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1424,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/log/",title:"Log",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Log
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1425,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/loopback/",title:"Loopback",section:"ODIN Documentation",description:" Create and play (AudioSource) with a Microphone (AudioClip) on loop. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Loopback
</code></pre>
<p>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Needs <a href="https://docs.unity3d.com/Manual/PlatformSpecific.html">Platform specific Permissions</a> i.e Microphone to work.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1426,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/loopback/",title:"Loopback",section:"ODIN Documentation",description:" Create and play (AudioSource) with a Microphone (AudioClip) on loop. ",content:`<pre><code class="language-C#">public bool Loopback
</code></pre>
<p>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Needs <a href="https://docs.unity3d.com/Manual/PlatformSpecific.html">Platform specific Permissions</a> i.e Microphone to work.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1427,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/loopback/",title:"Loopback",section:"ODIN Documentation",description:" Create and play (AudioSource) with a Microphone (AudioClip) on loop. ",content:`<pre><code class="language-C#">public bool Loopback
</code></pre>
<p>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Needs <a href="https://docs.unity3d.com/Manual/PlatformSpecific.html">Platform specific Permissions</a> i.e Microphone to work.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1428,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/loopback/",title:"Loopback",section:"ODIN Documentation",description:" Create and play (AudioSource) with a Microphone (AudioClip) on loop. Odin APM Settings are not applied in the loopback sound. ",content:`<pre><code class="language-C#">public bool Loopback
</code></pre>
<p>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.
Odin APM Settings are not applied in the loopback sound.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Needs <a href="https://docs.unity3d.com/Manual/PlatformSpecific.html">Platform specific Permissions</a> i.e Microphone to work.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1429,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/loopback/",title:"Loopback",section:"ODIN Documentation",description:" Create and play (AudioSource) with a Microphone (AudioClip) on loop. Odin APM Settings are not applied in the loopback sound. ",content:`<pre><code class="language-C#">public bool Loopback
</code></pre>
<p>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a>
with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.
Odin APM Settings are not applied in the loopback sound.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Needs <a href="https://docs.unity3d.com/Manual/PlatformSpecific.html">Platform specific Permissions</a> i.e Microphone to work.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1430,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/low/",title:"Low",section:"ODIN Documentation",description:" 6dB ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Low = 1
</code></pre>
<p>6dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1431,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/low/",title:"Low",section:"ODIN Documentation",description:" 6dB ",content:`<pre><code class="language-C#">Low = 1
</code></pre>
<p>6dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1432,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/low/",title:"Low",section:"ODIN Documentation",description:" 6dB ",content:`<pre><code class="language-C#">Low = 1
</code></pre>
<p>6dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1433,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/low/",title:"Low",section:"ODIN Documentation",description:" 6dB ",content:`<pre><code class="language-C#">Low = 1
</code></pre>
<p>6dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1434,href:"https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/low/",title:"Low",section:"ODIN Documentation",description:" 6dB ",content:`<pre><code class="language-C#">Low = 1
</code></pre>
<p>6dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1435,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/supportedplatform/macosx/",title:"MacOSX",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">MacOSX = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1436,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/macosx/",title:"MacOSX",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">MacOSX = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1437,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/supportedplatform/macosx/",title:"MacOSX",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">MacOSX = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1438,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/macosx/",title:"MacOSX",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">MacOSX = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1439,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/macosx/",title:"MacOSX",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">MacOSX = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1440,href:"https://www.4players.io/odin/sdk/unity/enums/supportedplatform/macosx/",title:"MacOSX",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">MacOSX = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1441,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/map16/",title:"Map16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Map16 = 222
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1442,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/map32/",title:"Map32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Map32 = 223
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1443,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mapenumerable/",title:"MapEnumerable",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public sealed class MapEnumerable : IEnumerable&lt;KeyValuePair&lt;string, MsgPackReader&gt;&gt;
</code></pre>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mapenumerable/constructor_0/">MapEnumerable(ref MsgPackReader)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mapenumerable/getenumerator/">GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1444,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mapenumerable/constructor_0/",title:"MapEnumerable(ref MsgPackReader)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MapEnumerable(ref MsgPackReader r)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>r</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1445,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/mapposition/",title:"MapPosition",section:"ODIN Documentation",description:" Relative position ",content:`<pre><code class="language-C#">public Vector3 MapPosition
</code></pre>
<p>Relative position</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vector3</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1446,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/marshalmanagedtonative/",title:"MarshalManagedToNative",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IntPtr MarshalManagedToNative(object managedObj)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>managedObj</td>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1447,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/marshalmanagedtonative/",title:"MarshalManagedToNative",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IntPtr MarshalManagedToNative(object managedObj)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>managedObj</td>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1448,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/marshalnativetomanaged/",title:"MarshalNativeToManaged",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public object MarshalNativeToManaged(IntPtr pNativeData)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pNativeData</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1449,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/marshalnativetomanaged/",title:"MarshalNativeToManaged",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public object MarshalNativeToManaged(IntPtr pNativeData)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pNativeData</td>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1450,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/maxdistance/",title:"MaxDistance",section:"ODIN Documentation",description:" Property of AudioSource ",content:`<pre><code class="language-C#">public float MaxDistance { get; set; }
</code></pre>
<p>Property of AudioSource</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1451,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxfixarray/",title:"MaxFixArray",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MaxFixArray = 159
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1452,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxfixmap/",title:"MaxFixMap",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MaxFixMap = 143
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1453,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxfixstr/",title:"MaxFixStr",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MaxFixStr = 191
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1454,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxnegativefixint/",title:"MaxNegativeFixInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MaxNegativeFixInt = 255
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1455,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxpositivefixint/",title:"MaxPositiveFixInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MaxPositiveFixInt = 127
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1456,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/media/",title:"media",section:"ODIN Documentation",description:"The media that was updated.",content:`<pre><code class="language-C#">OdinMedia
</code></pre>
<p>The media that was updated.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></p>
`}),e.add({id:1457,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/media/",title:"media",section:"ODIN Documentation",description:"The media that was added/removed.",content:`<pre><code class="language-C#">OdinMedia
</code></pre>
<p>The media that was added/removed.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></p>
`}),e.add({id:1458,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/media/",title:"Media",section:"ODIN Documentation",description:" with ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PlaybackStream Media
</code></pre>
<p>Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/">PlaybackStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1459,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/media/",title:"Media",section:"ODIN Documentation",description:" with ",content:`<pre><code class="language-C#">public PlaybackStream Media
</code></pre>
<p>Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/">PlaybackStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1460,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/media/",title:"Media",section:"ODIN Documentation",description:" with ",content:`<pre><code class="language-C#">public PlaybackStream Media
</code></pre>
<p>Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/">PlaybackStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1461,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/media/",title:"Media",section:"ODIN Documentation",description:" with ",content:`<pre><code class="language-C#">public PlaybackStream Media
</code></pre>
<p>Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/">PlaybackStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1462,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/media/",title:"Media",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IMedia Media { get; set; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imedia/">IMedia</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1463,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/media/",title:"Media",section:"ODIN Documentation",description:" Get Media ",content:`<pre><code class="language-C#">public virtual IMedia Media { get; set; }
</code></pre>
<p>Get Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Will reset the effect if the media id has changed</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imedia/">IMedia</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1464,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/media/",title:"Media",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IMedia Media { get; set; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imedia/">IMedia</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1465,href:"https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/media/",title:"Media",section:"ODIN Documentation",description:" with ",content:`<pre><code class="language-C#">public PlaybackStream Media
</code></pre>
<p>Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/">PlaybackStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1466,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/media_id/",title:"media_id",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt16 media_id
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1467,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool MediaActiveStateChangedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1468,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool MediaActiveStateChangedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1469,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaActiveStateChangedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1470,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaActiveStateChangedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1471,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaActiveStateChangedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1472,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaActiveStateChangedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1473,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaActiveStateChangedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1474,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaActiveStateChangedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1475,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaActiveStateChangedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1476,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/mediaactivestatechangedevent/",title:"MediaActiveStateChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaActiveStateChangedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1477,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/",title:"MediaActiveStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaActiveStateChanged events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/active/">Active</a></td>
<td>Boolean</td>
<td>state of the media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1478,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/",title:"MediaActiveStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaActiveStateChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/active/">Active</a></td>
<td>Boolean</td>
<td>state of the media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1479,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/",title:"MediaActiveStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaActiveStateChanged events in the current room ",content:`<pre><code class="language-C#">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/active/">Active</a></td>
<td>Boolean</td>
<td>state of the media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1480,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/",title:"MediaActiveStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaActiveStateChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/active/">Active</a></td>
<td>state of the media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1481,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/",title:"MediaActiveStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaActiveStateChanged events in the current room ",content:`<pre><code class="language-C#">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/mediaid/">MediaId</a></td>
<td>media id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/active/">Active</a></td>
<td>state of the media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/rmsdbfs/">RmsDbfs</a></td>
<td>value between the peak and minimum for amplitude levels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1482,href:"https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/",title:"MediaActiveStateChangedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaActiveStateChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaActiveStateChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaActiveStateChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedeventargs/active/">Active</a></td>
<td>state of the media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1483,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/mediaactivestatechangedeventhandler/",title:"MediaActiveStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:1484,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/mediaactivestatechangedeventhandler/",title:"MediaActiveStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:1485,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/mediaactivestatechangedeventhandler/",title:"MediaActiveStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:1486,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/mediaactivestatechangedeventhandler/",title:"MediaActiveStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1487,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/mediaactivestatechangedeventhandler/",title:"MediaActiveStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1488,href:"https://www.4players.io/odin/sdk/unity/delegates/mediaactivestatechangedeventhandler/",title:"MediaActiveStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void MediaActiveStateChangedEventHandler(object sender, MediaActiveStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedeventargs/">MediaActiveStateChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1489,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedproxy/",title:"MediaActiveStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaActiveStateChangedProxy : UnityEvent&lt;object, MediaActiveStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1490,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedproxy/",title:"MediaActiveStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaActiveStateChangedProxy : UnityEvent&lt;object, MediaActiveStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1491,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedproxy/",title:"MediaActiveStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MediaActiveStateChangedProxy : UnityEvent&lt;object, MediaActiveStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1492,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedproxy/",title:"MediaActiveStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaActiveStateChangedProxy : UnityEvent&lt;object, MediaActiveStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1493,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedproxy/",title:"MediaActiveStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MediaActiveStateChangedProxy : UnityEvent&lt;object, MediaActiveStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1494,href:"https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedproxy/",title:"MediaActiveStateChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaActiveStateChangedProxy : UnityEvent&lt;object, MediaActiveStateChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1495,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/mediaactivity/",title:"MediaActivity",section:"ODIN Documentation",description:"Fired when a media stream was activated or deactivated. The active flag is true if the user started to talk and false if the user stopped talking.",content:`<pre><code class="language-C#">public MediaActivity: OdinMediaActivityEvent
</code></pre>
<p>Fired when a media stream was activated or deactivated. The active flag is true if the user started to talk and false if the user stopped talking.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinmediaactivityevent/">OdinMediaActivityEvent</a></p>
`}),e.add({id:1496,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/mediaactivity/",title:"MediaActivity",section:"ODIN Documentation",description:"A media owned by the peer is sending/receiving data.",content:`<pre><code class="language-C#">OdinMediaActivityChangedEvent
</code></pre>
<p>A media owned by the peer is sending/receiving data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></p>
`}),e.add({id:1497,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/mediaactivity/",title:"MediaActivity",section:"ODIN Documentation",description:"A media in the room is sending/receiving data.",content:`<pre><code class="language-C#">OdinMediaActivityChangedEvent
</code></pre>
<p>A media in the room is sending/receiving data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></p>
`}),e.add({id:1498,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/mediaadded/",title:"MediaAdded",section:"ODIN Documentation",description:"Fired when a media stream was added to a peer. This happens for example if a peer adds a microphone to the room",content:`<pre><code class="language-C#">public MediaAdded: OdinMediaAddedEvent
</code></pre>
<p>Fired when a media stream was added to a peer. This happens for example if a peer adds a microphone to the room</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinmediaaddedevent/">OdinMediaAddedEvent</a></p>
`}),e.add({id:1499,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool MediaAddedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1500,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool MediaAddedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1501,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaAddedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1502,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaAddedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1503,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaAddedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1504,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaAddedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1505,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaAddedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1506,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaAddedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1507,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaAddedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1508,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/mediaaddedevent/",title:"MediaAddedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaAddedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1509,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/",title:"MediaAddedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaAdded events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaAddedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaAdded events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/media/">Media</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/">PlaybackStream</a></td>
<td>Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1510,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/",title:"MediaAddedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaAdded events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaAddedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaAdded events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/media/">Media</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/">PlaybackStream</a></td>
<td>Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1511,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/",title:"MediaAddedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaAdded events in the current room ",content:`<pre><code class="language-C#">public class MediaAddedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaAdded events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/media/">Media</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/">PlaybackStream</a></td>
<td>Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1512,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/",title:"MediaAddedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaAdded events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaAddedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaAdded events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/media/">Media</a></td>
<td>Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1513,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/",title:"MediaAddedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaAdded events in the current room ",content:`<pre><code class="language-C#">public class MediaAddedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaAdded events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/roomid/">RoomId</a></td>
<td>room id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/mediaid/">MediaId</a></td>
<td>media id</td>
</tr>
</tbody>
</table>
`}),e.add({id:1514,href:"https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/",title:"MediaAddedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaAdded events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaAddedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaAdded events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaaddedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaaddedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaaddedeventargs/media/">Media</a></td>
<td>Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1515,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaaddedproxy/",title:"MediaAddedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaAddedProxy : UnityEvent&lt;object, MediaAddedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1516,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaaddedproxy/",title:"MediaAddedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaAddedProxy : UnityEvent&lt;object, MediaAddedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1517,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaaddedproxy/",title:"MediaAddedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MediaAddedProxy : UnityEvent&lt;object, MediaAddedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1518,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaaddedproxy/",title:"MediaAddedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaAddedProxy : UnityEvent&lt;object, MediaAddedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1519,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaaddedproxy/",title:"MediaAddedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MediaAddedProxy : UnityEvent&lt;object, MediaAddedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1520,href:"https://www.4players.io/odin/sdk/unity/classes/mediaaddedproxy/",title:"MediaAddedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaAddedProxy : UnityEvent&lt;object, MediaAddedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1521,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediachannels/",title:"MediaChannels",section:"ODIN Documentation",description:" Supported values for audio channel count ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum MediaChannels : byte
</code></pre>
<h1 id="heading"></h1>
<p>Supported values for audio channel count</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/mono/">Mono</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>Defines a single (monaural) channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/stereo/">Stereo</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>Defines two (stereo) channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1522,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediachannels/",title:"MediaChannels",section:"ODIN Documentation",description:" Supported values for audio channel count ",content:`<pre><code class="language-C#">public enum MediaChannels : byte
</code></pre>
<h1 id="heading"></h1>
<p>Supported values for audio channel count</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/mono/">Mono</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>Defines a single (monaural) channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/stereo/">Stereo</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>Defines two (stereo) channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1523,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediachannels/",title:"MediaChannels",section:"ODIN Documentation",description:" Supported values for audio channel count ",content:`<pre><code class="language-C#">public enum MediaChannels : byte
</code></pre>
<h1 id="heading"></h1>
<p>Supported values for audio channel count</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/mono/">Mono</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>Defines a single (monaural) channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/stereo/">Stereo</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>Defines two (stereo) channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1524,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediachannels/",title:"MediaChannels",section:"ODIN Documentation",description:" Supported values for audio channel count ",content:`<pre><code class="language-C#">public enum MediaChannels : byte
</code></pre>
<h1 id="heading"></h1>
<p>Supported values for audio channel count</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/mono/">Mono</a></td>
<td>Defines a single (monaural) channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/stereo/">Stereo</a></td>
<td>Defines two (stereo) channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1525,href:"https://www.4players.io/odin/sdk/unity/enums/mediachannels/",title:"MediaChannels",section:"ODIN Documentation",description:" Supported values for audio channel count ",content:`<pre><code class="language-C#">public enum MediaChannels : byte
</code></pre>
<h1 id="heading"></h1>
<p>Supported values for audio channel count</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/mono/">Mono</a></td>
<td>Defines a single (monaural) channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/stereo/">Stereo</a></td>
<td>Defines two (stereo) channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1526,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/",title:"MediaCollection",section:"ODIN Documentation",description:" Internal collection of available media streams ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaCollection : IReadOnlyCollection&lt;MediaStream&gt;, IEqualityComparer&lt;MediaStream&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Internal collection of available media streams</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/this/">Item[Int64]</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>Try to get a media stream by ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of streams in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/isreadonly/">IsReadOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/add/">Add</a></td>
<td>Add a stream to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/contains/">Contains</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/copyto/">CopyTo</a></td>
<td>Copies stream of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/equals/">Equals</a></td>
<td>Determines whether the streams are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/remove/">Remove</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/setmute/">SetMute</a></td>
<td>Set IsMuted on each Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1527,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/",title:"MediaCollection",section:"ODIN Documentation",description:" Internal collection of available media streams ",content:`<pre><code class="language-C#">public class MediaCollection : IReadOnlyCollection&lt;MediaStream&gt;, IEnumerable&lt;MediaStream&gt;, IEnumerable, IEqualityComparer&lt;MediaStream&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Internal collection of available media streams</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/this/">Item[Int64]</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>Try to get a media stream by ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of streams in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/isreadonly/">IsReadOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/add/">Add</a></td>
<td>Add a stream to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/contains/">Contains</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/copyto/">CopyTo</a></td>
<td>Copies stream of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/equals/">Equals</a></td>
<td>Determines whether the streams are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/remove/">Remove</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1528,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/",title:"MediaCollection",section:"ODIN Documentation",description:" Internal collection of available media streams ",content:`<pre><code class="language-C#">public class MediaCollection : IReadOnlyCollection&lt;MediaStream&gt;, IEqualityComparer&lt;MediaStream&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Internal collection of available media streams</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/this/">Item[Int64]</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>Try to get a media stream by ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of streams in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/isreadonly/">IsReadOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/add/">Add</a></td>
<td>Add a stream to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/contains/">Contains</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/copyto/">CopyTo</a></td>
<td>Copies stream of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/equals/">Equals</a></td>
<td>Determines whether the streams are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/remove/">Remove</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/setmute/">SetMute</a></td>
<td>Set IsMuted on each Media</td>
</tr>
</tbody>
</table>
`}),e.add({id:1529,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/",title:"MediaCollection",section:"ODIN Documentation",description:" Internal collection of available media streams ",content:`<pre><code class="language-C#">public class MediaCollection : IReadOnlyCollection&lt;MediaStream&gt;, IEnumerable&lt;MediaStream&gt;, IEnumerable, IEqualityComparer&lt;MediaStream&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Internal collection of available media streams</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/constructor_0/">MediaCollection()</a></td>
<td>Internal collection of available media streams</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/this/">Item[Int64]</a></td>
<td>Try to get a media stream by ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/count/">Count</a></td>
<td>Count of streams in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/isreadonly/">IsReadOnly</a></td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/add/">Add</a></td>
<td>Add a stream to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/contains/">Contains</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/copyto/">CopyTo</a></td>
<td>Copies stream of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/equals/">Equals</a></td>
<td>Determines whether the streams are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/remove/">Remove</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1530,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/",title:"MediaCollection",section:"ODIN Documentation",description:" Internal collection of available media streams ",content:`<pre><code class="language-C#">public class MediaCollection : IReadOnlyCollection&lt;MediaStream&gt;, IEnumerable&lt;MediaStream&gt;, IEnumerable, IEqualityComparer&lt;MediaStream&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Internal collection of available media streams</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/constructor_0/">MediaCollection()</a></td>
<td>Internal collection of available media streams</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/this/">Item[Int64]</a></td>
<td>Try to get a media stream by ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/count/">Count</a></td>
<td>Count of streams in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/isreadonly/">IsReadOnly</a></td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/add/">Add</a></td>
<td>Add a stream to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/contains/">Contains</a></td>
<td>Determines whether the stream by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/copyto/">CopyTo</a></td>
<td>Copies stream of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/equals/">Equals</a></td>
<td>Determines whether the streams are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/remove/">Remove</a></td>
<td>Remove a stream by handle id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1531,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/constructor_0/",title:"MediaCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaCollection()
</code></pre>
<p>Internal collection of available media streams</p>
`}),e.add({id:1532,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/constructor_0/",title:"MediaCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaCollection()
</code></pre>
<p>Internal collection of available media streams</p>
`}),e.add({id:1533,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/mediaconfig/",title:"MediaConfig",section:"ODIN Documentation",description:" Audio config of the media stream ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public OdinMediaConfig MediaConfig { get; }
</code></pre>
<p>Audio config of the media stream</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1534,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/mediaconfig/",title:"MediaConfig",section:"ODIN Documentation",description:" Audio config of the media stream ",content:`<pre><code class="language-C#">public OdinMediaConfig MediaConfig { get; }
</code></pre>
<p>Audio config of the media stream</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1535,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/mediaconfig/",title:"MediaConfig",section:"ODIN Documentation",description:" Audio config of the media stream ",content:`<pre><code class="language-C#">public OdinMediaConfig MediaConfig { get; }
</code></pre>
<p>Audio config of the media stream</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1536,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/mediaconfig/",title:"MediaConfig",section:"ODIN Documentation",description:" Audio config of the media stream ",content:`<pre><code class="language-C#">public OdinMediaConfig MediaConfig { get; }
</code></pre>
<p>Audio config of the media stream</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1537,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/mediaconfig/",title:"MediaConfig",section:"ODIN Documentation",description:" Audio config of the media stream ",content:`<pre><code class="language-C#">public OdinMediaConfig MediaConfig { get; }
</code></pre>
<p>Audio config of the media stream</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1538,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/",title:"MediaDecoder",section:"ODIN Documentation",description:" Odin Playback Media ",content:`<pre><code class="language-C#">public class MediaDecoder : IMedia, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Odin Playback Media</p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/create/">Create</a></td>
<td>Create a new dangling output media.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/id/">Id</a></td>
<td>Media id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/mediaproperties/">MediaProperties</a></td>
<td>Arbitrary media data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/ispaused/">IsPaused</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/samplerate/">Samplerate</a></td>
<td>Output samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/stereo/">Stereo</a></td>
<td>Output channel flag</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/pipeline/">Pipeline</a></td>
<td>Odin effect pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/parent/">Parent</a></td>
<td>Default value null indicates root or not set</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/getpipeline/">GetPipeline</a></td>
<td>Get native effect pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/pop/">Pop</a></td>
<td>Pop output audio from the media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/push/">Push</a></td>
<td>Push output audio into the media for effect processing</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/dispose/">Dispose</a></td>
<td>Free native media decoder</td>
</tr>
</tbody>
</table>
`}),e.add({id:1539,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/mediadecoder/",title:"MediaDecoder",section:"ODIN Documentation",description:" Media reference ",content:`<pre><code class="language-C#">public MediaDecoder MediaDecoder { get; set; }
</code></pre>
<p>Media reference</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1540,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/",title:"MediaEncoder",section:"ODIN Documentation",description:" Odin Capture Media ",content:`<pre><code class="language-C#">public class MediaEncoder : IMedia, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Odin Capture Media</p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/create/">Create</a></td>
<td>Create a new dangling input media.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/id/">Id</a></td>
<td>Media id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/mediaproperties/">MediaProperties</a></td>
<td>Arbitrary media data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/samplerate/">Samplerate</a></td>
<td>Input samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/stereo/">Stereo</a></td>
<td>Input channel flag</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/pipeline/">Pipeline</a></td>
<td>Odin effect pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/guardsilence/">GuardSilence</a></td>
<td>On true Single%5b%5d%2cSystem isSilent = true will not push data to the native encoder</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/parent/">Parent</a></td>
<td>Default value null indicates root or not set</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/getpipeline/">GetPipeline</a></td>
<td>Get native effect pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/popall/">PopAll</a></td>
<td>Pop all audio datagrams into the stack</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/pop/">Pop</a></td>
<td>Pop one datagram from the media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/push/">Push</a></td>
<td>Push samples to the media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/dispose/">Dispose</a></td>
<td>Free native media encoder</td>
</tr>
</tbody>
</table>
`}),e.add({id:1541,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/mediaid/",title:"mediaId",section:"ODIN Documentation",description:"The ID of the media that sent the audio data.",content:`<pre><code class="language-C#">public mediaId: number
</code></pre>
<p>The ID of the media that sent the audio data.</p>
`}),e.add({id:1542,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/mediaid/",title:"mediaId",section:"ODIN Documentation",description:"The ID of the media that changed the activity.",content:`<pre><code class="language-C#">public mediaId: number
</code></pre>
<p>The ID of the media that changed the activity.</p>
`}),e.add({id:1543,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/mediaid/",title:"mediaId",section:"ODIN Documentation",description:"The ID of the media that was added.",content:`<pre><code class="language-C#">public mediaId: number
</code></pre>
<p>The ID of the media that was added.</p>
`}),e.add({id:1544,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/mediaid/",title:"mediaId",section:"ODIN Documentation",description:"The ID of the media that was removed.",content:`<pre><code class="language-C#">public mediaId: number
</code></pre>
<p>The ID of the media that was removed.</p>
`}),e.add({id:1545,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/mediaid/",title:"MediaId",section:"ODIN Documentation",description:" media id ",content:`<pre><code class="language-C#">public ushort MediaId { get; }
</code></pre>
<p>media id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1546,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/mediaid/",title:"MediaId",section:"ODIN Documentation",description:" media id ",content:`<pre><code class="language-C#">public ushort MediaId { get; }
</code></pre>
<p>media id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1547,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/mediaid/",title:"MediaId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public ushort MediaId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1548,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/mediaids/",title:"MediaIds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ushort[] MediaIds
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt16[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1549,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/",title:"MediaPipeline",section:"ODIN Documentation",description:" Odin audio pipeline ",content:`<pre><code class="language-C#">public class MediaPipeline
</code></pre>
<h1 id="heading"></h1>
<p>Odin audio pipeline</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/constructor_0/">MediaPipeline(OdinPipelineHandle)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/geteffects/">GetEffects</a></td>
<td>Get Pipeline effects collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/getnextindex/">GetNextIndex</a></td>
<td>Calculate the next available index based on MediaPipeline entries</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/geteffectcount/">GetEffectCount</a></td>
<td>Get the current effect count of the native pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/geteffectid/">GetEffectId</a></td>
<td>Get the effect id of the native pipeline by index id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/addapmeffect/">AddApmEffect</a></td>
<td>Insert a apm effect and sets the apm config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/insertapmeffect/">InsertApmEffect</a></td>
<td>Insert a apm effect to native pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/addcustomeffect/">AddCustomEffect</a></td>
<td>Insert a custom effect and sets the Media where T marks Serialize/Deserialize structures</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/insertcustomeffect/">InsertCustomEffect</a></td>
<td>Insert a custom effect to native pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/addvadeffect/">AddVadEffect</a></td>
<td>Insert a vad effect</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/insertvadeffect/">InsertVadEffect</a></td>
<td>Insert a vad effect to native pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/moveeffect/">MoveEffect</a></td>
<td>Moves a effect in the native pipeline to a new index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/removeeffect/">RemoveEffect</a></td>
<td>Removes a effect from the native pipeline</td>
</tr>
</tbody>
</table>
`}),e.add({id:1550,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/constructor_0/",title:"MediaPipeline(OdinPipelineHandle)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaPipeline(OdinPipelineHandle handle)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>handle</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1551,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/mediaproperties/",title:"MediaProperties",section:"ODIN Documentation",description:" Arbitrary media data ",content:`<pre><code class="language-C#">public MediaRpcProperties MediaProperties { get; }
</code></pre>
<p>Arbitrary media data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/">MediaRpcProperties</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1552,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/mediaproperties/",title:"MediaProperties",section:"ODIN Documentation",description:" Arbitrary media data ",content:`<pre><code class="language-C#">public MediaRpcProperties MediaProperties { get; }
</code></pre>
<p>Arbitrary media data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/">MediaRpcProperties</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1553,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/mediaremoved/",title:"MediaRemoved",section:"ODIN Documentation",description:"Fired when a media stream was removed from a peer. This happens for example if a peer removes a microphone from the room",content:`<pre><code class="language-C#">public MediaRemoved: OdinMediaRemovedEvent
</code></pre>
<p>Fired when a media stream was removed from a peer. This happens for example if a peer removes a microphone from the room</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinmediaremovedevent/">OdinMediaRemovedEvent</a></p>
`}),e.add({id:1554,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool MediaRemovedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1555,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool MediaRemovedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1556,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaRemovedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1557,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaRemovedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1558,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaRemovedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1559,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaRemovedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1560,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaRemovedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1561,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaRemovedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1562,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MediaRemovedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1563,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/mediaremovedevent/",title:"MediaRemovedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MediaRemovedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1564,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaremovedeventargs/",title:"MediaRemovedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaRemoved events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaRemoved events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaremovedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaremovedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:1565,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaremovedeventargs/",title:"MediaRemovedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaRemoved events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaRemoved events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaremovedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaremovedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:1566,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaremovedeventargs/",title:"MediaRemovedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaRemoved events in the current room ",content:`<pre><code class="language-C#">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaRemoved events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaremovedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaremovedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:1567,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/",title:"MediaRemovedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaRemoved events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaRemoved events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:1568,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/",title:"MediaRemovedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaRemoved events in the current room ",content:`<pre><code class="language-C#">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaRemoved events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/mediaid/">MediaId</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/peerid/">PeerId</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:1569,href:"https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs/",title:"MediaRemovedEventArgs",section:"ODIN Documentation",description:" Arguments for MediaRemoved events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MediaRemovedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MediaRemoved events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaremovedeventargs/mediastreamid/">MediaStreamId</a></td>
<td>stream handle id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaremovedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:1570,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaremovedproxy/",title:"MediaRemovedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MediaRemovedProxy : UnityEvent&lt;object, MediaRemovedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1571,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaremovedproxy/",title:"MediaRemovedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaRemovedProxy : UnityEvent&lt;object, MediaRemovedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1572,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaremovedproxy/",title:"MediaRemovedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MediaRemovedProxy : UnityEvent&lt;object, MediaRemovedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1573,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaremovedproxy/",title:"MediaRemovedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaRemovedProxy : UnityEvent&lt;object, MediaRemovedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1574,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaremovedproxy/",title:"MediaRemovedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MediaRemovedProxy : UnityEvent&lt;object, MediaRemovedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1575,href:"https://www.4players.io/odin/sdk/unity/classes/mediaremovedproxy/",title:"MediaRemovedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MediaRemovedProxy : UnityEvent&lt;object, MediaRemovedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1576,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/mediarpc/",title:"MediaRpc",section:"ODIN Documentation",description:" RPC data map ",content:`<pre><code class="language-C#">public struct MediaRpc
</code></pre>
<h1 id="heading"></h1>
<p>RPC data map</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/mediarpc/id/">Id</a></td>
<td>media id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/mediarpc/properties/">Properties</a></td>
<td>arbitrary media data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/mediarpc/paused/">Paused</a></td>
<td>media state</td>
</tr>
</tbody>
</table>
`}),e.add({id:1577,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediarpcproperties/",title:"MediaRpcProperties",section:"ODIN Documentation",description:" arbitrary media data ",content:`<pre><code class="language-C#">public class MediaRpcProperties
</code></pre>
<h1 id="heading"></h1>
<p>arbitrary media data</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/kind/">Kind</a></td>
<td>preset field &quot;Audio&quot;</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/uid/">uId</a></td>
<td>preset field of an unique id</td>
</tr>
</tbody>
</table>
`}),e.add({id:1578,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/medias/",title:"medias",section:"ODIN Documentation",description:"A list of media instances owned by the peer.",content:`<pre><code class="language-C#">Map&lt;number&gt;&lt;OdinMedia&gt;
</code></pre>
<p>A list of media instances owned by the peer.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinmedia/">Map&lt;number&gt;&lt;OdinMedia&gt;</a></p>
`}),e.add({id:1579,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/medias/",title:"Medias",section:"ODIN Documentation",description:" Associated medias of this peer ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaCollection Medias { get; }
</code></pre>
<p>Associated medias of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/">MediaCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1580,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/medias/",title:"Medias",section:"ODIN Documentation",description:" Associated medias of this peer ",content:`<pre><code class="language-C#">public MediaCollection Medias { get; }
</code></pre>
<p>Associated medias of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/">MediaCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1581,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/medias/",title:"Medias",section:"ODIN Documentation",description:" Associated medias of this peer ",content:`<pre><code class="language-C#">public MediaCollection Medias { get; }
</code></pre>
<p>Associated medias of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/">MediaCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1582,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/medias/",title:"Medias",section:"ODIN Documentation",description:" Associated medias of this peer ",content:`<pre><code class="language-C#">public MediaCollection Medias { get; }
</code></pre>
<p>Associated medias of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediacollection/">MediaCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1583,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/medias/",title:"Medias",section:"ODIN Documentation",description:" Peer output medias ",content:`<pre><code class="language-C#">public ConcurrentDictionary&lt;ushort, MediaDecoder&gt; Medias { get; }
</code></pre>
<p>Peer output medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ConcurrentDictionary&lt;UInt16,MediaDecoder&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1584,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/peerrpc/medias/",title:"Medias",section:"ODIN Documentation",description:" peer decoders ",content:`<pre><code class="language-C#">public List&lt;MediaRpc&gt; Medias
</code></pre>
<p>peer decoders</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>List&lt;MediaRpc&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1585,href:"https://www.4players.io/odin/sdk/unity/classes/peer/medias/",title:"Medias",section:"ODIN Documentation",description:" Associated medias of this peer ",content:`<pre><code class="language-C#">public MediaCollection Medias { get; }
</code></pre>
<p>Associated medias of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediacollection/">MediaCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1586,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediasamplerate/",title:"MediaSampleRate",section:"ODIN Documentation",description:" Supported audio sample rate values ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum MediaSampleRate : uint
</code></pre>
<h1 id="heading"></h1>
<p>Supported audio sample rate values</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/device_min/">Device_Min</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Hardware device min samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/device_max/">Device_Max</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Hardware device max samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz8000/">Hz8000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>8khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz11025/">Hz11025</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>11.025khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz12000/">Hz12000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>12khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz16000/">Hz16000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>16khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz22050/">Hz22050</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>22.05khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz24000/">Hz24000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>24khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz32000/">Hz32000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>32khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz44100/">Hz44100</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>44.1khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz48000/">Hz48000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>48khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz96000/">Hz96000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>96khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz128000/">Hz128000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>128khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz144000/">Hz144000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>144khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/hz192000/">Hz192000</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>192khz</td>
</tr>
</tbody>
</table>
`}),e.add({id:1587,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediasamplerate/",title:"MediaSampleRate",section:"ODIN Documentation",description:" Supported audio sample rate values ",content:`<pre><code class="language-C#">public enum MediaSampleRate : uint
</code></pre>
<h1 id="heading"></h1>
<p>Supported audio sample rate values</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/device_min/">Device_Min</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Hardware device min samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/device_max/">Device_Max</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Hardware device max samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz8000/">Hz8000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>8khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz11025/">Hz11025</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>11.025khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz12000/">Hz12000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>12khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz16000/">Hz16000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>16khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz22050/">Hz22050</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>22.05khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz24000/">Hz24000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>24khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz32000/">Hz32000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>32khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz44100/">Hz44100</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>44.1khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz48000/">Hz48000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>48khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz96000/">Hz96000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>96khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz128000/">Hz128000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>128khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz144000/">Hz144000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>144khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/hz192000/">Hz192000</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>192khz</td>
</tr>
</tbody>
</table>
`}),e.add({id:1588,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediasamplerate/",title:"MediaSampleRate",section:"ODIN Documentation",description:" Supported audio sample rate values ",content:`<pre><code class="language-C#">public enum MediaSampleRate : uint
</code></pre>
<h1 id="heading"></h1>
<p>Supported audio sample rate values</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/device_min/">Device_Min</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Hardware device min samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/device_max/">Device_Max</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Hardware device max samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz8000/">Hz8000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>8khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz11025/">Hz11025</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>11.025khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz12000/">Hz12000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>12khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz16000/">Hz16000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>16khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz22050/">Hz22050</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>22.05khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz24000/">Hz24000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>24khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz32000/">Hz32000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>32khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz44100/">Hz44100</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>44.1khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz48000/">Hz48000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>48khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz96000/">Hz96000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>96khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz128000/">Hz128000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>128khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz144000/">Hz144000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>144khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/hz192000/">Hz192000</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>192khz</td>
</tr>
</tbody>
</table>
`}),e.add({id:1589,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediasamplerate/",title:"MediaSampleRate",section:"ODIN Documentation",description:" Supported audio sample rate values ",content:`<pre><code class="language-C#">public enum MediaSampleRate : uint
</code></pre>
<h1 id="heading"></h1>
<p>Supported audio sample rate values</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/device_min/">Device_Min</a></td>
<td>Hardware device min samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/device_max/">Device_Max</a></td>
<td>Hardware device max samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz8000/">Hz8000</a></td>
<td>8khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz11025/">Hz11025</a></td>
<td>11.025khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz12000/">Hz12000</a></td>
<td>12khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz16000/">Hz16000</a></td>
<td>16khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz22050/">Hz22050</a></td>
<td>22.05khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz24000/">Hz24000</a></td>
<td>24khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz32000/">Hz32000</a></td>
<td>32khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz44100/">Hz44100</a></td>
<td>44.1khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz48000/">Hz48000</a></td>
<td>48khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz96000/">Hz96000</a></td>
<td>96khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz128000/">Hz128000</a></td>
<td>128khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz144000/">Hz144000</a></td>
<td>144khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/hz192000/">Hz192000</a></td>
<td>192khz</td>
</tr>
</tbody>
</table>
`}),e.add({id:1590,href:"https://www.4players.io/odin/sdk/unity/enums/mediasamplerate/",title:"MediaSampleRate",section:"ODIN Documentation",description:" Supported audio sample rate values ",content:`<pre><code class="language-C#">public enum MediaSampleRate : uint
</code></pre>
<h1 id="heading"></h1>
<p>Supported audio sample rate values</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/device_min/">Device_Min</a></td>
<td>Hardware device min samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/device_max/">Device_Max</a></td>
<td>Hardware device max samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz8000/">Hz8000</a></td>
<td>8khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz11025/">Hz11025</a></td>
<td>11.025khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz12000/">Hz12000</a></td>
<td>12khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz16000/">Hz16000</a></td>
<td>16khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz22050/">Hz22050</a></td>
<td>22.05khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz24000/">Hz24000</a></td>
<td>24khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz32000/">Hz32000</a></td>
<td>32khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz44100/">Hz44100</a></td>
<td>44.1khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz48000/">Hz48000</a></td>
<td>48khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz96000/">Hz96000</a></td>
<td>96khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz128000/">Hz128000</a></td>
<td>128khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz144000/">Hz144000</a></td>
<td>144khz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/hz192000/">Hz192000</a></td>
<td>192khz</td>
</tr>
</tbody>
</table>
`}),e.add({id:1591,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/mediastarted/",title:"MediaStarted",section:"ODIN Documentation",description:"Peer added a new media stream.",content:`<pre><code class="language-C#">OdinMediaStartedStoppedEvent
</code></pre>
<p>Peer added a new media stream.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></p>
`}),e.add({id:1592,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/mediastarted/",title:"MediaStarted",section:"ODIN Documentation",description:"A new media stream was added to the room.",content:`<pre><code class="language-C#">OdinMediaStartedStoppedEvent
</code></pre>
<p>A new media stream was added to the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></p>
`}),e.add({id:1593,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/mediastopped/",title:"MediaStopped",section:"ODIN Documentation",description:"Peer removed a media stream.",content:`<pre><code class="language-C#">OdinMediaStartedStoppedEvent
</code></pre>
<p>Peer removed a media stream.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></p>
`}),e.add({id:1594,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/mediastopped/",title:"MediaStopped",section:"ODIN Documentation",description:"A media stream was removed from the room.",content:`<pre><code class="language-C#">OdinMediaStartedStoppedEvent
</code></pre>
<p>A media stream was removed from the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></p>
`}),e.add({id:1595,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/",title:"MediaStream",section:"ODIN Documentation",description:" Base stream ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public abstract class MediaStream : IVideoStream, IAudioStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Base stream</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/ispaused/">IsPaused</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is paused</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/ismuted/">IsMuted</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is muted</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/setpause/">SetPause</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/togglepause/">TogglePause</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/setmute/">SetMute</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/togglemute/">ToggleMute</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1596,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/",title:"MediaStream",section:"ODIN Documentation",description:" Base stream ",content:`<pre><code class="language-C#">public abstract class MediaStream : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Base stream</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1597,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/",title:"MediaStream",section:"ODIN Documentation",description:" Base stream ",content:`<pre><code class="language-C#">public abstract class MediaStream : IVideoStream, IAudioStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Base stream</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/ispaused/">IsPaused</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is paused</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/ismuted/">IsMuted</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is muted</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/setpause/">SetPause</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/togglepause/">TogglePause</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/setmute/">SetMute</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/togglemute/">ToggleMute</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1598,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/",title:"MediaStream",section:"ODIN Documentation",description:" Base stream ",content:`<pre><code class="language-C#">public abstract class MediaStream : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Base stream</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/constructor_0/">MediaStream(OdinMediaConfig)</a></td>
<td>Base stream</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/id/">Id</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/isactive/">IsActive</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1599,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/",title:"MediaStream",section:"ODIN Documentation",description:" Base stream ",content:`<pre><code class="language-C#">public abstract class MediaStream : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Base stream</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/constructor_0/">MediaStream(OdinMediaConfig)</a></td>
<td>Base stream</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/id/">Id</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/isactive/">IsActive</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1600,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/constructor_0/",title:"MediaStream(OdinMediaConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaStream(OdinMediaConfig config)
</code></pre>
<p>Base stream</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td>audio stream configuration</td>
</tr>
</tbody>
</table>
`}),e.add({id:1601,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/constructor_0/",title:"MediaStream(OdinMediaConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MediaStream(OdinMediaConfig config)
</code></pre>
<p>Base stream</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td>audio stream configuration</td>
</tr>
</tbody>
</table>
`}),e.add({id:1602,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1603,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaremovedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1604,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public long MediaStreamId { get; set; }
</code></pre>
<p>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1605,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1606,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaremovedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1607,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias. ",content:`<pre><code class="language-C#">public long MediaStreamId { get; set; }
</code></pre>
<p>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1608,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1609,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaremovedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1610,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias. ",content:`<pre><code class="language-C#">public long MediaStreamId { get; set; }
</code></pre>
<p>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1611,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1612,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1613,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias. ",content:`<pre><code class="language-C#">public long MediaStreamId { get; set; }
</code></pre>
<p>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1614,href:"https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1615,href:"https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" stream handle id ",content:`<pre><code class="language-C#">public long MediaStreamId { get; }
</code></pre>
<p>stream handle id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1616,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/mediastreamid/",title:"MediaStreamId",section:"ODIN Documentation",description:" Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias. ",content:`<pre><code class="language-C#">public long MediaStreamId { get; set; }
</code></pre>
<p>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1617,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/message/",title:"message",section:"ODIN Documentation",description:"A byte array with the message.",content:`<pre><code class="language-C#">Uint8Array
</code></pre>
<p>A byte array with the message.</p>
`}),e.add({id:1618,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/messagedata/",title:"messageData",section:"ODIN Documentation",description:"The message data received from the peer.",content:`<pre><code class="language-C#">public messageData: Uint8Array
</code></pre>
<p>The message data received from the peer.</p>
`}),e.add({id:1619,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/messagepackextension/",title:"MessagePackExtension",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct MessagePackExtension
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/messagepackextension/typecode/">TypeCode</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/messagepackextension/data/">Data</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1620,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagepackreaderexception/",title:"MessagePackReaderException",section:"ODIN Documentation",description:"",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MessagePackReaderException : Exception, ISerializable, _Exception
</code></pre>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagepackreaderexception/constructor_0/">MessagePackReaderException()</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagepackreaderexception/constructor_1/">MessagePackReaderException(String)</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1621,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagepackreaderexception/constructor_0/",title:"MessagePackReaderException()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MessagePackReaderException()
</code></pre>
`}),e.add({id:1622,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagepackreaderexception/constructor_1/",title:"MessagePackReaderException(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MessagePackReaderException(string message)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1623,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/messagereceived/",title:"MessageReceived",section:"ODIN Documentation",description:"Fired when a remote peer sent a message to the room.",content:`<pre><code class="language-C#">public MessageReceived: OdinMessageReceivedEvent
</code></pre>
<p>Fired when a remote peer sent a message to the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></p>
`}),e.add({id:1624,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/messagereceived/",title:"MessageReceived",section:"ODIN Documentation",description:"Peer sent a message with arbitrary data.",content:`<pre><code class="language-C#">OdinMessageReceivedEvent
</code></pre>
<p>Peer sent a message with arbitrary data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></p>
`}),e.add({id:1625,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/messagereceived/",title:"MessageReceived",section:"ODIN Documentation",description:"Received a message with arbitrary data.",content:`<pre><code class="language-C#">OdinMessageReceivedEvent
</code></pre>
<p>Received a message with arbitrary data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></p>
`}),e.add({id:1626,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool MessageReceivedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1627,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool MessageReceivedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1628,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MessageReceivedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1629,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MessageReceivedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1630,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MessageReceivedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1631,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MessageReceivedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1632,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MessageReceivedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1633,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MessageReceivedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1634,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool MessageReceivedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1635,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/messagereceivedevent/",title:"MessageReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MessageReceivedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1636,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/messagereceivedeventargs/",title:"MessageReceivedEventArgs",section:"ODIN Documentation",description:" Arguments for MessageReceived events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MessageReceived events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/messagereceivedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/messagereceivedeventargs/data/">Data</a></td>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:1637,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/messagereceivedeventargs/",title:"MessageReceivedEventArgs",section:"ODIN Documentation",description:" Arguments for MessageReceived events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MessageReceived events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/messagereceivedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/messagereceivedeventargs/data/">Data</a></td>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:1638,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/messagereceivedeventargs/",title:"MessageReceivedEventArgs",section:"ODIN Documentation",description:" Arguments for MessageReceived events in the current room ",content:`<pre><code class="language-C#">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MessageReceived events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/messagereceivedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/messagereceivedeventargs/data/">Data</a></td>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:1639,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/",title:"MessageReceivedEventArgs",section:"ODIN Documentation",description:" Arguments for MessageReceived events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MessageReceived events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/data/">Data</a></td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:1640,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/",title:"MessageReceivedEventArgs",section:"ODIN Documentation",description:" Arguments for MessageReceived events in the current room ",content:`<pre><code class="language-C#">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MessageReceived events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/data/">Data</a></td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:1641,href:"https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs/",title:"MessageReceivedEventArgs",section:"ODIN Documentation",description:" Arguments for MessageReceived events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class MessageReceivedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for MessageReceived events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/messagereceivedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/messagereceivedeventargs/data/">Data</a></td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:1642,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/messagereceivedproxy/",title:"MessageReceivedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class MessageReceivedProxy : UnityEvent&lt;object, MessageReceivedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:1643,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/messagereceivedproxy/",title:"MessageReceivedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MessageReceivedProxy : UnityEvent&lt;object, MessageReceivedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:1644,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/messagereceivedproxy/",title:"MessageReceivedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MessageReceivedProxy : UnityEvent&lt;object, MessageReceivedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:1645,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/messagereceivedproxy/",title:"MessageReceivedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MessageReceivedProxy : UnityEvent&lt;object, MessageReceivedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1646,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagereceivedproxy/",title:"MessageReceivedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class MessageReceivedProxy : UnityEvent&lt;object, MessageReceivedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:1647,href:"https://www.4players.io/odin/sdk/unity/classes/messagereceivedproxy/",title:"MessageReceivedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class MessageReceivedProxy : UnityEvent&lt;object, MessageReceivedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>

<div><p>The callback proxy for <span class="external-reference">OnMessageReceived <a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/"><i class="fas fa-external-link-alt"></i></a></span>
 callback functions. You&rsquo;ll receive the sender of the message
in the <code>object</code> parameter and details about the message in a <span class="external-reference">MessageReceivedEventArgs <a href="/odin/sdk/unity/classes/messagereceivedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 class instance.</p>
</div>



<h2 id="example">Example</h2>





<div id="example-4546a13a55a8e0788240b06fd5935a6f" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">MessageReceivedProxy Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-4546a13a55a8e0788240b06fd5935a6f-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-4546a13a55a8e0788240b06fd5935a6f-cs">
      <pre><code class="hljs language-cs">class Message
{
	public string text;
	public string type;
}

class MyMessageHandler : MonoBehaviour
{
	public void OnMessageReceived(object sender, MessageReceivedEventArgs args)
	{
		// Get the peer id
		ulong peerId = args.PeerId;

		// Get the data
		byte[] bytes = args.Data;

		// Serialize data in your own classes (just an example, add error handling)
		var bytesAsString = Encoding.UTF8.GetString(bytes);
        var message = JsonConvert.DeserializeObject&lt;Message&gt;(bytesAsString);

        // Show a text chat message
        if (message.type == &#34;chat&#34;) {
            UI.ShowIncomingChatMessage(message.text);
        }
	}

	public void SendChatMessage(Room room, string chatMessage)
	{
		var message = new Message{
			type = &#34;chat&#34;;
			text = chatMessage;
		}
		var stringMessage = JsonConvert.SerializeObject(message, Formatting.None);
        var bytes = Encoding.UTF8.GetBytes(stringMessage);
		room.SendMessage(bytes);
	}
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:1648,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/notification/methodindex/",title:"MethodIndex",section:"ODIN Documentation",description:" string field (method) ",content:`<pre><code class="language-C#">public const int MethodIndex = 1
</code></pre>
<p><code>string</code> field (method)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1649,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/request/methodindex/",title:"MethodIndex",section:"ODIN Documentation",description:" string field (method) ",content:`<pre><code class="language-C#">public const int MethodIndex = 2
</code></pre>
<p><code>string</code> field (method)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1650,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/microphone/",title:"Microphone",section:"ODIN Documentation",description:" Unity Component that handles one Microphone where data gets routed through (n) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MicrophoneReader Microphone
</code></pre>
<p>Unity Component that handles one Microphone where data gets routed through (n) Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/">MicrophoneReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1651,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/microphone/",title:"Microphone",section:"ODIN Documentation",description:" Unity Component that handles one Microphone where data gets routed through (n) ",content:`<pre><code class="language-C#">public MicrophoneReader Microphone
</code></pre>
<p>Unity Component that handles one Microphone where data gets routed through (n) Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/">MicrophoneReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1652,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/microphone/",title:"Microphone",section:"ODIN Documentation",description:" Unity Component that handles one Microphone where data gets routed through (n) ",content:`<pre><code class="language-C#">public MicrophoneReader Microphone
</code></pre>
<p>Unity Component that handles one Microphone where data gets routed through (n) Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/">MicrophoneReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1653,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/microphone/",title:"Microphone",section:"ODIN Documentation",description:" Unity Component that handles one Microphone where data gets routed through (n) ",content:`<pre><code class="language-C#">public MicrophoneReader Microphone
</code></pre>
<p>Unity Component that handles one Microphone where data gets routed through (n) Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/">MicrophoneReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1654,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/microphone/",title:"Microphone",section:"ODIN Documentation",description:" Unity Component that handles one Microphone where data gets routed through (n) ",content:`<pre><code class="language-C#">public MicrophoneReader Microphone
</code></pre>
<p>Unity Component that handles one Microphone where data gets routed through (n) Media</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/">MicrophoneReader</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1655,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/microphonecallbackdelegate/",title:"MicrophoneCallbackDelegate",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
`}),e.add({id:1656,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/microphonecallbackdelegate/",title:"MicrophoneCallbackDelegate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
`}),e.add({id:1657,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/microphonecallbackdelegate/",title:"MicrophoneCallbackDelegate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
`}),e.add({id:1658,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/microphonecallbackdelegate/",title:"MicrophoneCallbackDelegate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>position</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1659,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/microphonecallbackdelegate/",title:"MicrophoneCallbackDelegate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>position</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1660,href:"https://www.4players.io/odin/sdk/unity/delegates/microphonecallbackdelegate/",title:"MicrophoneCallbackDelegate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public delegate void MicrophoneCallbackDelegate(float[] buffer, int position);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>position</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1661,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/microphonechannels/",title:"MicrophoneChannels",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int MicrophoneChannels { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1662,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/microphonemedia/",title:"MicrophoneMedia",section:"ODIN Documentation",description:" Current room microphone data route ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MicrophoneStream MicrophoneMedia { get; }
</code></pre>
<p>Current room microphone data route</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/">MicrophoneStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1663,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/microphonemedia/",title:"MicrophoneMedia",section:"ODIN Documentation",description:" Current room microphone data route ",content:`<pre><code class="language-C#">public MicrophoneStream MicrophoneMedia { get; }
</code></pre>
<p>Current room microphone data route</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/">MicrophoneStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1664,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/microphonemedia/",title:"MicrophoneMedia",section:"ODIN Documentation",description:" Current room microphone data route ",content:`<pre><code class="language-C#">public MicrophoneStream MicrophoneMedia { get; }
</code></pre>
<p>Current room microphone data route</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/">MicrophoneStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1665,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/microphonemedia/",title:"MicrophoneMedia",section:"ODIN Documentation",description:" Current room microphone data route ",content:`<pre><code class="language-C#">public MicrophoneStream MicrophoneMedia { get; }
</code></pre>
<p>Current room microphone data route</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/">MicrophoneStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1666,href:"https://www.4players.io/odin/sdk/unity/classes/room/microphonemedia/",title:"MicrophoneMedia",section:"ODIN Documentation",description:" Current room microphone data route ",content:`<pre><code class="language-C#">public MicrophoneStream MicrophoneMedia { get; }
</code></pre>
<p>Current room microphone data route</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/">MicrophoneStream</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1667,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/",title:"MicrophoneReader",section:"ODIN Documentation",description:" Handles microphone input data and sends input to ODIN ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p><a href='/odin/sdk/unity/manual/microphonereader/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class MicrophoneReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles microphone input data and sends input to ODIN</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/haspermission/">HasPermission</a></td>
<td>Boolean</td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/redirectcapturedaudio/">RedirectCapturedAudio</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/continuerecording/">ContinueRecording</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/audiocliplength/">AudioClipLength</a></td>
<td>Int32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></td>
<td>Boolean</td>
<td>Use set <a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The recording Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/custominputdevice/">CustomInputDevice</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/inputdevice/">InputDevice</a></td>
<td>String</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/autostartlisten/">AutostartListen</a></td>
<td>Boolean</td>
<td>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/custommicvolumescale/">CustomMicVolumeScale</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/micvolumescale/">MicVolumeScale</a></td>
<td>Single</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/loopback/">Loopback</a></td>
<td>Boolean</td>
<td>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/onmicrophonedata/">OnMicrophoneData</a></td>
<td><a href="/odin/sdk/unity/1.1.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/startlisten/">StartListen</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/muteroommicrophone/">MuteRoomMicrophone</a></td>
<td>Request SetMicrophoneMute(System to mute by room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/stoplisten/">StopListen</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
`}),e.add({id:1668,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/",title:"MicrophoneReader",section:"ODIN Documentation",description:" Handles microphone input data and sends input to ODIN ",content:`<pre><code class="language-C#">public class MicrophoneReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles microphone input data and sends input to ODIN</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/haspermission/">HasPermission</a></td>
<td>Boolean</td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/redirectcapturedaudio/">RedirectCapturedAudio</a></td>
<td>Boolean</td>
<td>Skips registered PushAudio for the OnMicrophoneData event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/silencecapturedaudio/">SilenceCapturedAudio</a></td>
<td>Boolean</td>
<td>Zero out the event audio buffer for PushAudio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/continuerecording/">ContinueRecording</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/audiocliplength/">AudioClipLength</a></td>
<td>Int32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></td>
<td>Boolean</td>
<td>Use set <a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The recording Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/custominputdevice/">CustomInputDevice</a></td>
<td>Boolean</td>
<td>Enable/Disable the use of <a href="/odin/sdk/unity/1.5.8/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/inputdevice/">InputDevice</a></td>
<td>String</td>
<td>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/autostartlisten/">AutostartListen</a></td>
<td>Boolean</td>
<td>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/custommicvolumescale/">CustomMicVolumeScale</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/micvolumescale/">MicVolumeScale</a></td>
<td>Single</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/loopback/">Loopback</a></td>
<td>Boolean</td>
<td>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/onmicrophonedata/">OnMicrophoneData</a></td>
<td><a href="/odin/sdk/unity/1.5.8/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/startlisten/">StartListen</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/stoplisten/">StopListen</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
`}),e.add({id:1669,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/",title:"MicrophoneReader",section:"ODIN Documentation",description:" Handles microphone input data and sends input to ODIN ",content:`<pre><code class="language-C#">public class MicrophoneReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles microphone input data and sends input to ODIN</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/haspermission/">HasPermission</a></td>
<td>Boolean</td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/redirectcapturedaudio/">RedirectCapturedAudio</a></td>
<td>Boolean</td>
<td>Skips registered PushAudio for the OnMicrophoneData event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/silencecapturedaudio/">SilenceCapturedAudio</a></td>
<td>Boolean</td>
<td>Zero out the event audio buffer for PushAudio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/continuerecording/">ContinueRecording</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/audiocliplength/">AudioClipLength</a></td>
<td>Int32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></td>
<td>Boolean</td>
<td>Use set <a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The recording Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/custominputdevice/">CustomInputDevice</a></td>
<td>Boolean</td>
<td>Enable/Disable the use of <a href="/odin/sdk/unity/1.6.0/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/inputdevice/">InputDevice</a></td>
<td>String</td>
<td>The device name to use as microphone in Unity. (i.e <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">Microphone.Start</a>)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/autostartlisten/">AutostartListen</a></td>
<td>Boolean</td>
<td>Use <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a> in MicrophoneReader</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/custommicvolumescale/">CustomMicVolumeScale</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/micvolumescale/">MicVolumeScale</a></td>
<td>Single</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/loopback/">Loopback</a></td>
<td>Boolean</td>
<td>Create and play <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> with a Microphone <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> on loop.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/onmicrophonedata/">OnMicrophoneData</a></td>
<td><a href="/odin/sdk/unity/1.6.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/startlisten/">StartListen</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/stoplisten/">StopListen</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
`}),e.add({id:1670,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/",title:"MicrophoneReader",section:"ODIN Documentation",description:" Handles microphone input data and sends input to ODIN ",content:`<pre><code class="language-C#">public class MicrophoneReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles microphone input data and sends input to ODIN</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/haspermission/">HasPermission</a></td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/redirectcapturedaudio/">RedirectCapturedAudio</a></td>
<td>Skips registered PushAudio for the OnMicrophoneData event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/silencecapturedaudio/">SilenceCapturedAudio</a></td>
<td>Zero out the event audio buffer for PushAudio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/continuerecording/">ContinueRecording</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/audiocliplength/">AudioClipLength</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></td>
<td>Use set OdinEditorConfig on false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/samplerate/">SampleRate</a></td>
<td>The recording Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/custominputdevice/">CustomInputDevice</a></td>
<td>Enable/Disable the use of MicrophoneReader as a new/fixed device name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/inputdevice/">InputDevice</a></td>
<td>The device name to use as microphone in Unity. (i.e Microphone.Start )</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/autostartlisten/">AutostartListen</a></td>
<td>Use (Microphone.Start) in MicrophoneReader</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/custommicvolumescale/">CustomMicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/micvolumescale/">MicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/loopback/">Loopback</a></td>
<td>Create and play (AudioSource) with a Microphone (AudioClip) on loop. Odin APM Settings are not applied in the loopback sound.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/onmicrophonedata/">OnMicrophoneData</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/startlisten/">StartListen</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonereader/stoplisten/">StopListen</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
`}),e.add({id:1671,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/",title:"MicrophoneReader",section:"ODIN Documentation",description:" Handles microphone input data and sends input to ODIN ",content:`<p><a href='/odin/sdk/unity/1.6.6/manual/microphonereader/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class MicrophoneReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles microphone input data and sends input to ODIN</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/haspermission/">HasPermission</a></td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio/">RedirectCapturedAudio</a></td>
<td>Skips registered PushAudio for the OnMicrophoneData event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/silencecapturedaudio/">SilenceCapturedAudio</a></td>
<td>Zero out the event audio buffer for PushAudio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/continuerecording/">ContinueRecording</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/audiocliplength/">AudioClipLength</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></td>
<td>Use set <a href="/odin/sdk/unity/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/samplerate/">SampleRate</a></td>
<td>The recording Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/custominputdevice/">CustomInputDevice</a></td>
<td>Enable/Disable the use of <a href="/odin/sdk/unity/classes/microphonereader/inputdevice/">InputDevice</a> as a new/fixed device name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/inputdevice/">InputDevice</a></td>
<td>The device name to use as microphone in Unity. (i.e Microphone.Start )</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/autostartlisten/">AutostartListen</a></td>
<td>Use (Microphone.Start) in MicrophoneReader</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/custommicvolumescale/">CustomMicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/micvolumescale/">MicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/loopback/">Loopback</a></td>
<td>Create and play (AudioSource) with a Microphone (AudioClip) on loop. Odin APM Settings are not applied in the loopback sound.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/onmicrophonedata/">OnMicrophoneData</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/startlisten/">StartListen</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonereader/stoplisten/">StopListen</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
`}),e.add({id:1672,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/microphonesamplerate/",title:"MicrophoneSamplerate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int MicrophoneSamplerate { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1673,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonestream/",title:"MicrophoneStream",section:"ODIN Documentation",description:" Representation of a write only audio stream ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p>Inherits from: <a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class MicrophoneStream : MediaStream, IVideoStream, IAudioStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a write only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/audioreaddata/">AudioReadData</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/ispaused/">IsPaused</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is paused</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/ismuted/">IsMuted</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is muted</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/setpause/">SetPause</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/togglepause/">TogglePause</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/setmute/">SetMute</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/togglemute/">ToggleMute</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1674,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonestream/",title:"MicrophoneStream",section:"ODIN Documentation",description:" Representation of a write only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class MicrophoneStream : MediaStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a write only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/audiostats/">AudioStats</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/audioreset/">AudioReset</a></td>
<td>AudioReset is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/audioreaddata/">AudioReadData</a></td>
<td>AudioReadData is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>AudioReadDataTask is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>AudioReadDataAsync is not supported!</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1675,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonestream/",title:"MicrophoneStream",section:"ODIN Documentation",description:" Representation of a write only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class MicrophoneStream : MediaStream, IVideoStream, IAudioStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a write only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/audioreaddata/">AudioReadData</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/ispaused/">IsPaused</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is paused</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/ismuted/">IsMuted</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is muted</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/setpause/">SetPause</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/togglepause/">TogglePause</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/setmute/">SetMute</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/togglemute/">ToggleMute</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1676,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/",title:"MicrophoneStream",section:"ODIN Documentation",description:" Representation of a write only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class MicrophoneStream : MediaStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a write only audio stream</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/constructor_0/">MicrophoneStream()</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/constructor_1/">MicrophoneStream(OdinMediaConfig)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/ismuted/">IsMuted</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/mutestream/">MuteStream</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/audiopushdata/">AudioPushData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/audiostats/">AudioStats</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/audioreset/">AudioReset</a></td>
<td>AudioReset is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/audioreaddata/">AudioReadData</a></td>
<td>AudioReadData is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>AudioReadDataTask is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/microphonestream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>AudioReadDataAsync is not supported!</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/id/">Id</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/isactive/">IsActive</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1677,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/",title:"MicrophoneStream",section:"ODIN Documentation",description:" Representation of a write only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class MicrophoneStream : MediaStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a write only audio stream</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/constructor_0/">MicrophoneStream()</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/constructor_1/">MicrophoneStream(OdinMediaConfig)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/ismuted/">IsMuted</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/mutestream/">MuteStream</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/audiopushdata/">AudioPushData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/audiostats/">AudioStats</a></td>
<td>AudioReadData and AudioReadDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/audioreset/">AudioReset</a></td>
<td>AudioReset is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/audioreaddata/">AudioReadData</a></td>
<td>AudioReadData is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>AudioReadDataTask is not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/microphonestream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>AudioReadDataAsync is not supported!</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/id/">Id</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/isactive/">IsActive</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:1678,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/constructor_0/",title:"MicrophoneStream()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream()
</code></pre>
`}),e.add({id:1679,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/constructor_0/",title:"MicrophoneStream()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream()
</code></pre>
`}),e.add({id:1680,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/constructor_1/",title:"MicrophoneStream(OdinMediaConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream(OdinMediaConfig config)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1681,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/constructor_1/",title:"MicrophoneStream(OdinMediaConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MicrophoneStream(OdinMediaConfig config)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1682,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/micvolumescale/",title:"MicVolumeScale",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float MicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1683,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/micvolumescale/",title:"MicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float MicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1684,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/micvolumescale/",title:"MicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float MicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1685,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/micvolumescale/",title:"MicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float MicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1686,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/micvolumescale/",title:"MicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float MicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1687,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/micvolumescale/",title:"MicVolumeScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float MicVolumeScale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1688,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/min_dbfs/",title:"MIN_DBFS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const float MIN_DBFS = -897.069F
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1689,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/mindistance/",title:"MinDistance",section:"ODIN Documentation",description:" Property of AudioSource ",content:`<pre><code class="language-C#">public float MinDistance { get; set; }
</code></pre>
<p>Property of AudioSource</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1690,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/minfixarray/",title:"MinFixArray",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MinFixArray = 144
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1691,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/minfixmap/",title:"MinFixMap",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MinFixMap = 128
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1692,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/minfixstr/",title:"MinFixStr",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MinFixStr = 160
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1693,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/minnegativefixint/",title:"MinNegativeFixInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MinNegativeFixInt = 224
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1694,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/minpositivefixint/",title:"MinPositiveFixInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte MinPositiveFixInt = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1695,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/moderate/",title:"Moderate",section:"ODIN Documentation",description:" 12 dB ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Moderate = 2
</code></pre>
<p>12 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1696,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/moderate/",title:"Moderate",section:"ODIN Documentation",description:" 12 dB ",content:`<pre><code class="language-C#">Moderate = 2
</code></pre>
<p>12 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1697,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/moderate/",title:"Moderate",section:"ODIN Documentation",description:" 12 dB ",content:`<pre><code class="language-C#">Moderate = 2
</code></pre>
<p>12 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1698,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/moderate/",title:"Moderate",section:"ODIN Documentation",description:" 12 dB ",content:`<pre><code class="language-C#">Moderate = 2
</code></pre>
<p>12 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1699,href:"https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/moderate/",title:"Moderate",section:"ODIN Documentation",description:" 12 dB ",content:`<pre><code class="language-C#">Moderate = 2
</code></pre>
<p>12 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1700,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediachannels/mono/",title:"Mono",section:"ODIN Documentation",description:" Defines a single (monaural) channel ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Mono = 1
</code></pre>
<p>Defines a single (monaural) channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1701,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediachannels/mono/",title:"Mono",section:"ODIN Documentation",description:" Defines a single (monaural) channel ",content:`<pre><code class="language-C#">Mono = 1
</code></pre>
<p>Defines a single (monaural) channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1702,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediachannels/mono/",title:"Mono",section:"ODIN Documentation",description:" Defines a single (monaural) channel ",content:`<pre><code class="language-C#">Mono = 1
</code></pre>
<p>Defines a single (monaural) channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1703,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediachannels/mono/",title:"Mono",section:"ODIN Documentation",description:" Defines a single (monaural) channel ",content:`<pre><code class="language-C#">Mono = 1
</code></pre>
<p>Defines a single (monaural) channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1704,href:"https://www.4players.io/odin/sdk/unity/enums/mediachannels/mono/",title:"Mono",section:"ODIN Documentation",description:" Defines a single (monaural) channel ",content:`<pre><code class="language-C#">Mono = 1
</code></pre>
<p>Defines a single (monaural) channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1705,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/moveeffect/",title:"MoveEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MoveEffect(uint effectId, uint oldIndexId, ref uint newIndexId)
</code></pre>
<p>Moves a effect in the native pipeline to a new index</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If adding the effect to MediaPipeline</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effectId</td>
<td>UInt32</td>
<td>native effect id</td>
</tr>
<tr>
<td>oldIndexId</td>
<td>UInt32</td>
<td><xref href="OdinNative.Odin.MediaPipeline._Effects" data-throw-if-not-resolved="false"></xref> index id</td>
</tr>
<tr>
<td>newIndexId</td>
<td>UInt32</td>
<td>native index id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1706,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/enumerator/movenext/",title:"MoveNext",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool MoveNext()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1707,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/request/msgidindex/",title:"MsgidIndex",section:"ODIN Documentation",description:" uint32 field (msgid) ",content:`<pre><code class="language-C#">public const int MsgidIndex = 1
</code></pre>
<p><code>uint32</code> field (msgid)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1708,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/response/msgidindex/",title:"MsgidIndex",section:"ODIN Documentation",description:" uint32 field (msgid) ",content:`<pre><code class="language-C#">public const int MsgidIndex = 1
</code></pre>
<p><code>uint32</code> field (msgid)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1709,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/",title:"MsgPackMessageType",section:"ODIN Documentation",description:" Msgpack RPC spec https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md ",content:`<pre><code class="language-C#">public enum MsgPackMessageType
</code></pre>
<h1 id="heading"></h1>
<p>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/request/">Request</a></td>
<td>Format: [type, msgid, method, params]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/response/">Response</a></td>
<td>Format: [type, msgid, error, result]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/notification/">Notification</a></td>
<td>Format: [type, method, params]</td>
</tr>
</tbody>
</table>
`}),e.add({id:1710,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/msgpackreader/",title:"MsgPackReader",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct MsgPackReader
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/create/">Create</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/keytobytes/">KeyToBytes</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/this/">Item[Byte[]]</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/this/">Item[String]</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/arraylength/">ArrayLength</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/this/">Item[Int32]</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/asmapenumerable/">AsMapEnumerable</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/asarrayenumerable/">AsArrayEnumerable</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getbyte/">GetByte</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getsbyte/">GetSByte</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getshort/">GetShort</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getushort/">GetUShort</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getint/">GetInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getuint/">GetUInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getlong/">GetLong</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getulong/">GetULong</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getfloat/">GetFloat</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getdouble/">GetDouble</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getbool/">GetBool</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getstring/">GetString</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getbinary/">GetBinary</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/gettimestamp/">GetTimestamp</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getextension/">GetExtension</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getformatcode/">GetFormatCode</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/msgpackreader/getformatname/">GetFormatName</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1711,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/",title:"MsgPackToken",section:"ODIN Documentation",description:" https://github.com/msgpack/msgpack/blob/master/spec.md ",content:`<pre><code class="language-C#">public static class MsgPackToken
</code></pre>
<h1 id="heading"></h1>
<p><a href="https://github.com/msgpack/msgpack/blob/master/spec.md"><a href="https://github.com/msgpack/msgpack/blob/master/spec.md">https://github.com/msgpack/msgpack/blob/master/spec.md</a></a></p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/getsourcetype/">GetSourceType</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/getformatname/">GetFormatName</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isnegativefixint/">IsNegativeFixInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/ispositivefixint/">IsPositiveFixInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfixstr/">IsFixStr</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfixmap/">IsFixMap</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfixarray/">IsFixArray</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isbyte/">IsByte</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/issbyte/">IsSByte</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isshort/">IsShort</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isushort/">IsUShort</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isint/">IsInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isuint/">IsUInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/islong/">IsLong</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isulong/">IsULong</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isfloat/">IsFloat</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isdouble/">IsDouble</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isstring/">IsString</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isbinary/">IsBinary</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isarray/">IsArray</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/ismap/">IsMap</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isextension/">IsExtension</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/isnil/">IsNil</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/minpositivefixint/">MinPositiveFixInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxpositivefixint/">MaxPositiveFixInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/minfixmap/">MinFixMap</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxfixmap/">MaxFixMap</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/minfixarray/">MinFixArray</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxfixarray/">MaxFixArray</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/minfixstr/">MinFixStr</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxfixstr/">MaxFixStr</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/nil/">Nil</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/neverused/">NeverUsed</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/false/">False</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/true/">True</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/bin8/">Bin8</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/bin16/">Bin16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/bin32/">Bin32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/ext8/">Ext8</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/ext16/">Ext16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/ext32/">Ext32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/float32/">Float32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/float64/">Float64</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint8/">Uint8</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint16/">Uint16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint32/">Uint32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint64/">Uint64</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/int8/">Int8</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/int16/">Int16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/int32/">Int32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/int64/">Int64</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext1/">FixExt1</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext2/">FixExt2</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext4/">FixExt4</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext8/">FixExt8</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/fixext16/">FixExt16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/str8/">Str8</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/str16/">Str16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/str32/">Str32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/array16/">Array16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/array32/">Array32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/map16/">Map16</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/map32/">Map32</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/minnegativefixint/">MinNegativeFixInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/maxnegativefixint/">MaxNegativeFixInt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_unknown/">Type_Unknown</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_integer/">Type_Integer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_nil/">Type_Nil</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_boolean/">Type_Boolean</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_float/">Type_Float</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_string/">Type_String</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_binary/">Type_Binary</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_array/">Type_Array</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_map/">Type_Map</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_extension/">Type_Extension</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpacktoken/exttypecode_timestamp/">ExtTypeCode_Timestamp</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1712,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/",title:"MsgPackWriter",section:"ODIN Documentation",description:" Rudimentary Msgpack implementation that will be used for sending RPC to the server. ",content:`<pre><code class="language-C#">public class MsgPackWriter : IMsgPackWriter, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Rudimentary Msgpack implementation that will be used for sending RPC to the server.</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/constructor_0/">MsgPackWriter()</a></td>
<td>Create Writer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/constructor_1/">MsgPackWriter(Encoding, Boolean)</a></td>
<td>Create Writer</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/create/">Create</a></td>
<td>Create writer with a prefilled stream buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebyte/">WriteByte</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writesbyte/">WriteSByte</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeshort/">WriteShort</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeushort/">WriteUShort</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeint/">WriteInt</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeuint/">WriteUInt</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writelong/">WriteLong</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeulong/">WriteULong</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writefloat/">WriteFloat</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writedouble/">WriteDouble</a></td>
<td>Append value with MsgPackToken token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebool/">WriteBool</a></td>
<td>Append fixedbool with either MsgPackToken to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writestring/">WriteString</a></td>
<td>Append string value with size based token to bytes</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebinary/">WriteBinary</a></td>
<td>Append values with size based token to bytes</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/encoding/">Encoding</a></td>
<td>Used Encoding defaults to UTF8</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/clear/">Clear</a></td>
<td>Clear stream buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/write/">Write</a></td>
<td>Set MsgPackToken based on the unsigend value size</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebyte/">WriteByte</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writesbyte/">WriteSByte</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeshort/">WriteShort</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeushort/">WriteUShort</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeint/">WriteInt</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeuint/">WriteUInt</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writelong/">WriteLong</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeulong/">WriteULong</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writefloat/">WriteFloat</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writedouble/">WriteDouble</a></td>
<td>Write value with token MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebool/">WriteBool</a></td>
<td>Write fixedbool of either MsgPackToken</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writestring/">WriteString</a></td>
<td>Write string with writer encoding (default UTF8)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebinary/">WriteBinary</a></td>
<td>MessagePack header is big-endian, value binarywriter default little-endian</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writearrayheader/">WriteArrayHeader</a></td>
<td>MessagePack header is big-endian, value binarywriter default little-endian</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/writemapheader/">WriteMapHeader</a></td>
<td>MessagePack header is big-endian value binarywriter default little-endian</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/getbytes/">GetBytes</a></td>
<td>Get raw bytes from the stream buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/getlength/">GetLength</a></td>
<td>Get raw bytes from the stream buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/getbuffer/">GetBuffer</a></td>
<td>Get raw bytes from the underlying stream buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/append/">Append</a></td>
<td>Append bytes to the stream at the currrent stream position</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/tostring/">ToString</a></td>
<td>String representation of the stream based on encoding (default UTF8)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/tohex/">ToHex</a></td>
<td>String representation of the stream in hex</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/msgpackwriter/dispose/">Dispose</a></td>
<td>dispose</td>
</tr>
</tbody>
</table>
`}),e.add({id:1713,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/constructor_0/",title:"MsgPackWriter()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MsgPackWriter()
</code></pre>
<p>Create Writer</p>
`}),e.add({id:1714,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/constructor_1/",title:"MsgPackWriter(Encoding, Boolean)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public MsgPackWriter(Encoding encoding, bool keep = true)
</code></pre>
<p>Create Writer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoding</td>
<td>4Players online endpoints use UTF8</td>
</tr>
<tr>
<td>keep</td>
<td>keep or close the binary stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:1715,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/mute/",title:"Mute",section:"ODIN Documentation",description:" The Unity AudioSource mute property ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Mute { get; set; }
</code></pre>
<p>The Unity AudioSource mute property</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Sets volume to 0 or restore original volume</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1716,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/mute/",title:"Mute",section:"ODIN Documentation",description:" The Unity AudioSource mute property ",content:`<pre><code class="language-C#">public bool Mute { get; set; }
</code></pre>
<p>The Unity AudioSource mute property</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Sets volume to 0 or restore original volume</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1717,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/mute/",title:"Mute",section:"ODIN Documentation",description:" The Unity AudioSource mute property ",content:`<pre><code class="language-C#">public bool Mute { get; set; }
</code></pre>
<p>The Unity AudioSource mute property</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Sets volume to 0 or restore original volume</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1718,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/mute/",title:"Mute",section:"ODIN Documentation",description:" The Unity AudioSource mute property ",content:`<pre><code class="language-C#">public bool Mute { get; set; }
</code></pre>
<p>The Unity AudioSource mute property</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Sets volume to 0 or restore original volume</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1719,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/mute/",title:"Mute",section:"ODIN Documentation",description:" The Unity AudioSource mute property ",content:`<pre><code class="language-C#">public bool Mute { get; set; }
</code></pre>
<p>The Unity AudioSource mute property</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Sets volume to 0 or restore original volume</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1720,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/muteroommicrophone/",title:"MuteRoomMicrophone",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool MuteRoomMicrophone(Room room, bool mute)
</code></pre>
<p>Request SetMicrophoneMute(System to mute by room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if there is no microphone or the room was not joined</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>room</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td></td>
</tr>
<tr>
<td>mute</td>
<td>Boolean</td>
<td>true to mute and false to unmute</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:1721,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/mutestream/",title:"MuteStream",section:"ODIN Documentation",description:" The Odin PlaybackStream underlying media stream calls ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool MuteStream { get; set; }
</code></pre>
<p>The Odin PlaybackStream underlying media stream calls</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>on true ignores stream calls</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1722,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonestream/mutestream/",title:"MuteStream",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void MuteStream(bool mute)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mute</td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1723,href:"https://www.4players.io/odin/sdk/unity/classes/microphonestream/mutestream/",title:"MuteStream",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void MuteStream(bool mute)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mute</td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1724,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/name/",title:"Name",section:"ODIN Documentation",description:" Room name ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string Name
</code></pre>
<p>Room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1725,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/name/",title:"Name",section:"ODIN Documentation",description:" Room name ",content:`<pre><code class="language-C#">public string Name
</code></pre>
<p>Room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1726,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/name/",title:"Name",section:"ODIN Documentation",description:" Room name ",content:`<pre><code class="language-C#">public string Name
</code></pre>
<p>Room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1727,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/name/",title:"Name",section:"ODIN Documentation",description:" Room name ",content:`<pre><code class="language-C#">public string Name
</code></pre>
<p>Room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1728,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/name/",title:"Name",section:"ODIN Documentation",description:" Room name ",content:`<pre><code class="language-C#">public string Name { get; }
</code></pre>
<p>Room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1729,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcresult/name/",title:"Name",section:"ODIN Documentation",description:" method ",content:`<pre><code class="language-C#">public string Name { get; }
</code></pre>
<p>method</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1730,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/name/",title:"Name",section:"ODIN Documentation",description:" Room name ",content:`<pre><code class="language-C#">public string Name
</code></pre>
<p>Room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1731,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibrary/nativebinary/",title:"NativeBinary",section:"ODIN Documentation",description:" Location of the native ODIN runtime binary ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static string NativeBinary { get; }
</code></pre>
<p>Location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1732,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibrary/nativebinary/",title:"NativeBinary",section:"ODIN Documentation",description:" Location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public static string NativeBinary { get; }
</code></pre>
<p>Location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1733,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibrary/nativebinary/",title:"NativeBinary",section:"ODIN Documentation",description:" Location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public static string NativeBinary { get; }
</code></pre>
<p>Location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1734,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibrary/nativebinary/",title:"NativeBinary",section:"ODIN Documentation",description:" Location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public static string NativeBinary { get; }
</code></pre>
<p>Location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1735,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibrary/nativebinary/",title:"NativeBinary",section:"ODIN Documentation",description:" Location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public static string NativeBinary { get; }
</code></pre>
<p>Location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1736,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibrary/nativebinary/",title:"NativeBinary",section:"ODIN Documentation",description:" Location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public static string NativeBinary { get; }
</code></pre>
<p>Location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1737,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/nativebindings/",title:"NativeBindings",section:"ODIN Documentation",description:" C# bindings for the native ODIN runtime ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static class NativeBindings
</code></pre>
<h1 id="heading"></h1>
<p>C# bindings for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/nativebindings/odinversion/">OdinVersion</a></td>
<td>String</td>
<td>ODIN_VERSION</td>
</tr>
</tbody>
</table>
`}),e.add({id:1738,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/nativebindings/",title:"NativeBindings",section:"ODIN Documentation",description:" C# bindings for the native ODIN runtime ",content:`<pre><code class="language-C#">public static class NativeBindings
</code></pre>
<h1 id="heading"></h1>
<p>C# bindings for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/nativebindings/odinversion/">OdinVersion</a></td>
<td>String</td>
<td>ODIN_VERSION</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/nativebindings/blocksamplerate/">BlockSamplerate</a></td>
<td>UInt32</td>
<td>Block_SAMPLE_RATE</td>
</tr>
</tbody>
</table>
`}),e.add({id:1739,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/nativebindings/",title:"NativeBindings",section:"ODIN Documentation",description:" C# bindings for the native ODIN runtime ",content:`<pre><code class="language-C#">public static class NativeBindings
</code></pre>
<h1 id="heading"></h1>
<p>C# bindings for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/nativebindings/odinversion/">OdinVersion</a></td>
<td>String</td>
<td>ODIN_VERSION</td>
</tr>
</tbody>
</table>
`}),e.add({id:1740,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/nativebindings/",title:"NativeBindings",section:"ODIN Documentation",description:" C# bindings for the native ODIN runtime ",content:`<pre><code class="language-C#">public static class NativeBindings
</code></pre>
<h1 id="heading"></h1>
<p>C# bindings for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/nativebindings/odinversion/">OdinVersion</a></td>
<td>ODIN_VERSION</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/nativebindings/blocksamplerate/">BlockSamplerate</a></td>
<td>Block_SAMPLE_RATE</td>
</tr>
</tbody>
</table>
`}),e.add({id:1741,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/nativebindings/",title:"NativeBindings",section:"ODIN Documentation",description:" C# bindings for the native ODIN runtime ",content:`<pre><code class="language-C#">public static class NativeBindings
</code></pre>
<h1 id="heading"></h1>
<p>C# bindings for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/nativebindings/odinversion/">OdinVersion</a></td>
<td>ODIN_VERSION</td>
</tr>
</tbody>
</table>
`}),e.add({id:1742,href:"https://www.4players.io/odin/sdk/unity/classes/nativebindings/",title:"NativeBindings",section:"ODIN Documentation",description:" C# bindings for the native ODIN runtime ",content:`<pre><code class="language-C#">public static class NativeBindings
</code></pre>
<h1 id="heading"></h1>
<p>C# bindings for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/nativebindings/odinversion/">OdinVersion</a></td>
<td>ODIN_VERSION</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/nativebindings/blocksamplerate/">BlockSamplerate</a></td>
<td>Block_SAMPLE_RATE</td>
</tr>
</tbody>
</table>
`}),e.add({id:1743,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/neverused/",title:"NeverUsed",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte NeverUsed = 193
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1744,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/newstate/",title:"newState",section:"ODIN Documentation",description:"Current state of the connection.",content:`<pre><code class="language-C#">OdinConnectionState
</code></pre>
<p>Current state of the connection.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></p>
`}),e.add({id:1745,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/nil/",title:"Nil",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Nil = 192
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1746,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/noise_suppression/",title:"noise_suppression",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppression noise_suppression
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1747,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/noisesuppression/",title:"NoiseSuppression",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppression NoiseSuppression
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1748,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/noisesuppressionlevel/",title:"noiseSuppressionLevel",section:"ODIN Documentation",description:"Set the aggressiveness of the suppression",content:`<pre><code class="language-C#">public noiseSuppressionLevel: OdinNoiseSuppressionLevel
</code></pre>
<p>Set the aggressiveness of the suppression</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></p>
`}),e.add({id:1749,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1750,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Turns noise suppression on and off ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Turns noise suppression on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1751,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Set the aggressiveness of the suppression ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public OdinNoiseSuppressionLevel NoiseSuppressionLevel { get; set; }
</code></pre>
<p>Set the aggressiveness of the suppression</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1752,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`<pre><code class="language-C#">public static NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1753,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Turns noise suppression on and off ",content:`<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Turns noise suppression on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1754,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Set the aggressiveness of the suppression ",content:`<pre><code class="language-C#">public OdinNoiseSuppressionLevel NoiseSuppressionLevel { get; set; }
</code></pre>
<p>Set the aggressiveness of the suppression</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1755,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`<pre><code class="language-C#">public static NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1756,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Turns noise suppression on and off ",content:`<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Turns noise suppression on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1757,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Set the aggressiveness of the suppression ",content:`<pre><code class="language-C#">public OdinNoiseSuppressionLevel NoiseSuppressionLevel { get; set; }
</code></pre>
<p>Set the aggressiveness of the suppression</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1758,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`<pre><code class="language-C#">public static NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1759,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Turns noise suppression on and off ",content:`<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Turns noise suppression on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1760,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Set the aggressiveness of the suppression ",content:`<pre><code class="language-C#">public OdinNoiseSuppressionLevel NoiseSuppressionLevel { get; set; }
</code></pre>
<p>Set the aggressiveness of the suppression</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1761,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`<pre><code class="language-C#">public OdinNoiseSuppression NoiseSuppressionLevel { get; set; }
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1762,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`<pre><code class="language-C#">public static NativeBindings.OdinNoiseSuppression NoiseSuppressionLevel
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1763,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Idicates the level of noise suppression ApmConfig setting by default ",content:`<pre><code class="language-C#">public static NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Idicates the level of noise suppression ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1764,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Turns noise suppression on and off ",content:`<pre><code class="language-C#">public NativeBindings.OdinNoiseSuppressionLevel NoiseSuppressionLevel
</code></pre>
<p>Turns noise suppression on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1765,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/noisesuppressionlevel/",title:"NoiseSuppressionLevel",section:"ODIN Documentation",description:" Set the aggressiveness of the suppression ",content:`<pre><code class="language-C#">public OdinNoiseSuppressionLevel NoiseSuppressionLevel { get; set; }
</code></pre>
<p>Set the aggressiveness of the suppression</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1766,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/none/",title:"None",section:"ODIN Documentation",description:" None ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">None = 0
</code></pre>
<p>None</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1767,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/none/",title:"None",section:"ODIN Documentation",description:" None ",content:`<pre><code class="language-C#">None = 0
</code></pre>
<p>None</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1768,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/none/",title:"None",section:"ODIN Documentation",description:" None ",content:`<pre><code class="language-C#">None = 0
</code></pre>
<p>None</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1769,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/none/",title:"None",section:"ODIN Documentation",description:" None ",content:`<pre><code class="language-C#">None = 0
</code></pre>
<p>None</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1770,href:"https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/none/",title:"None",section:"ODIN Documentation",description:" None ",content:`<pre><code class="language-C#">None = 0
</code></pre>
<p>None</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1771,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/notification/",title:"Notification",section:"ODIN Documentation",description:" Msgpack RPC spec https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md ",content:`<pre><code class="language-C#">public static class Notification
</code></pre>
<h1 id="heading"></h1>
<p>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/notification/methodindex/">MethodIndex</a></td>
<td>string field (method)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/notification/paramsindex/">ParamsIndex</a></td>
<td>params field (params)</td>
</tr>
</tbody>
</table>
`}),e.add({id:1772,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/notification/",title:"Notification",section:"ODIN Documentation",description:" Format: [type, method, params] ",content:`<pre><code class="language-C#">Notification = 2
</code></pre>
<p>Format: [type, method, params]</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/">MsgPackMessageType</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1773,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/objectposition/",title:"ObjectPosition",section:"ODIN Documentation",description:" Original source ",content:`<pre><code class="language-C#">public Vector3 ObjectPosition
</code></pre>
<p>Original source</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vector3</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1776,href:"https://www.4players.io/odin/offline-doc-manual/",title:"ODIN Unity Offline Documentation",section:"ODIN Documentation",description:"",content:`<p><strong>Welcome to 4Players ODIN</strong>, our next-generation, real-time, zero maintenance, highest quality voice solution deeply
integrated into Unity. <strong>Thank you very much for your interest in ODIN and for the time you&rsquo;ll spend</strong> figuring out if ODIN
is the best solution for your game. We are sure it is, and therefore we have made our best to provide extensive
documentation to get you started quickly.</p>
<p>In this document we provide basic info to the ODIN components and a basic introduction. We provide
links to our extensive API reference documentation. We also suggest that you follow the getting started guide either in
the provided <code>getting-started.pdf</code> file or on our <a href="https://developers.4players.io/odin">online documentation</a>.</p>
<h1 id="table-of-contents">Table of Contents</h1>
<ul>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#components">Components</a>
<ul>
<li><a href="#odin-editor-config">Odin Editor Config</a></li>
<li><a href="#odin-handler">Odin Handler</a></li>
<li><a href="#microphone-reader">Microphone Reader</a></li>
<li><a href="#playback-component">PlaybackComponent</a></li>
</ul>
</li>
</ul>
<h1 id="introduction">Introduction</h1>

<div><p>ODIN is a standalone client server architecture. 4Players hosts the servers, handles the network and all the audio
processing that is required for great voice communication. From your perspective, ODIN is a pur client integration, you
don&rsquo;t need to do any server side processing or maintenance.</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    OR2[Odin Room]
    OR[Odin Room]    
  end
  subgraph Gameserver
    GS[Game Server]
  end
  subgraph Game
    ClientA[Player A] --&gt; OR[ODIN Room]
    ClientB[Player B] --&gt; OR[ODIN Room] 
    ClientB[Player B] --&gt; GS[Game Server]   
    ClientC[Player C] --&gt; GS[Game Server]
    ClientC[Player C] --&gt; OR[ODIN Room] 
    ClientD[Player D] --&gt; GS[Game Server]
  end
  subgraph Lobby
    ClientE[Players E] --&gt; OR2[ODIN Room]
    ClientF[Players F] --&gt; OR2[ODIN Room]
  end      
</code></pre>
<p>This graph outlines how ODIN works in a multiplayer environment. You build the client application (i.e. the game)
and the server component (game server) as usual. Once ODIN is integrated into your game, the players device will
connect to the game server as usual, but in addition to that to ODIN servers that route all voice packets to all
other players joined to the same ODIN room. Players may choose not to use voice chat. Those players will not connect
to ODIN and will not be able to listen or talk to other players (like Player D). On the other side, other players
might only join the voice server, without playing - for example if they are in the lobby, or the angry mum yelling
that the player should stop playing and doing his homework (player A).</p>
<p>You can integrate ODIN in single player games with a community element, virtual or augmented reality based video
conferencing solutions, the meta verse, virtual homeschooling and training applications and of course multiplayer
games (peer to peer or dedicated servers) from simple shooters to massive multiplayer online games with thousands of
players in the same room.</p>
<p>As ODIN supports cross play you can even connect a mobile application or website directly
with players in the game. A battle net like launcher application based on Electron where players can meet and chat
and directly start a shared game with automatic hand-over.</p>
<p>The possibilities are endless, and you don&rsquo;t need to be an audio or server expert! <a href="/odin/introduction/concepts/">We have compiled a couple of
use-cases</a> if you are still unsure if ODIN fits for needs.</p>
</div>



<h2 id="requirements">Requirements</h2>
<h3 id="supported-platforms">Supported platforms</h3>
<ul>
<li>Windows (x64)</li>
<li>MacOS (Universal)</li>
<li>iOS (Universal)</li>
<li>Android (ARM64)</li>
</ul>
<p>For additional platform support, please contact us!</p>
<h1 id="components">Components</h1>
<p>The ODIN SDK for Unity comes with four components. <code>OdinEditorConfig</code> is the place for all ODIN specific settings. Here
you&rsquo;ll setup sample rate, event callbacks and more. The <code>OdinHandler</code> is the singleton class that is persistent throughout
the lifecycle of your game ( uses <code>DontDestroyOnLoad</code>) and is used to join rooms and exposes callback functions and
delegates that allow you to customize the experience. Next, <code>MicrophoneReader</code> is the component that handles the devices
audio devices (microphones), captures audio and sends them to ODIN servers. Last but not least, the <code>PlaybackComponent</code>
is the &ldquo;speaker&rdquo; in the system. It&rsquo;s basically a standard Unity <code>AudioSource</code> that does play the microphone of the
connected player right in the Unity scene.</p>
<p>In a nutshell, the <code>MicrophoneReader</code> component is the mic, the <code>PlaybackComponent</code> is the speaker playing in real-time
what is recorded by the connected mic and the <code>OdinHandler</code> manages these connections and their lifecycle using settings
and event callbacks stored in the <code>OdinEditorConfig</code>.</p>
<h1 id="odin-editor-config">Odin Editor Config</h1>

<div><p><a href='/odin/sdk/unity/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <code>OdinEditorConfig</code>
 component class allows you to setup various aspects of ODIN within your game.
If you follow our <a href="/odin/sdk/unity/1.6.6/manual/">guide</a> on settings up ODIN within your game, you should see
this in your Unity inspector if the <em>Odin Manager Game Object</em> is selected. <strong>Odin Editor Config</strong> is one of three parts
of the <em>Odin Manager Game Object</em>.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="328"/></a>
</figure>
<h2 id="client-authentication">Client Authentication</h2>
<p>Use the first section <strong>Client Authentication</strong> to set up your access key and user data. This is for development purposes
only as you should not expose your access key in the production version of your game. You should rather request the
access key from a secure server backend. We have compiled a document explaining access keys and how to generate and
use/store them: <a href="/odin/introduction/access-keys/">Access Keys in ODIN</a>.</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Access Key</td>
<td>The access key that shall be used to generate access tokens for individual users. Read <a href="/odin/introduction/access-keys/">here</a> on how to generate it.</td>
</tr>
<tr>
<td>Gateway URL</td>
<td>The base URL of the gateway. If you are using our hosted solution, leave it as is, otherwise if you are hosting yourself you need to adjust the URL</td>
</tr>
<tr>
<td>Manage Access</td>
<td>You can generate an access token for testing purposes right in the Unity editor for up to 25 users by pressing this button. <a href="#create-access-token">See below</a> for more details.</td>
</tr>
<tr>
<td>Client ID</td>
<td>The client id of your application. Use the Player Settings of Unity to set this value</td>
</tr>
<tr>
<td>User Data</td>
<td>This is the default user data that will be used for each player (if nothing is provided by you when <a href="/odin/sdk/unity/1.6.6/classes/odinhandler/joinroom/">joining the room</a>)</td>
</tr>
</tbody>
</table>
<p>More info on the user data can be found in the <a href="/odin/guides/unity/user-data/">user data guide</a>. A sample of
what you can do with user data can be found in one of our <a href="/odin/guides/unity/unity-mirror/">integration guides</a>.</p>
<h3 id="create-access-token">Create access token</h3>
<p>You don&rsquo;t need to talk to anyone at 4Players or subscribe to our tiers to test ODIN. After clicking on the <code>Manage Access</code>
button, this window will popup. Click on the &ldquo;Generate Access Key&rdquo; button to create an access key that allows you to test
ODIN for up to 25 players.</p>
<figure style="max-width: 376px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg" width="376"/></a>
</figure>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You don&rsquo;t need a (paid) tier for testing and development purposes. But you may not go into production with access keys
generated this way. There is no guarantee that they will work for a longer period of time and there is also not any support.</p>
</div>
</div>

<h2 id="capture--playback">Capture &amp; Playback</h2>
<p>Use this section to setup your audio settings.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" width="328"/></a>
</figure>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Capture Sample Rate</td>
<td>The sample rate that will be captured from the players <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Capture Channels</td>
<td>Choose if <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 should capture <code>Mono</code> or <code>Stereo</code> channels. In most cases, <code>Mono</code> is enough.</td>
</tr>
<tr>
<td>Playback Sample Rate</td>
<td>The sample rate that the server will use. If it does not match to the players sample rate the server will downgrade accordingly</td>
</tr>
<tr>
<td>Playback Channels</td>
<td>Choose if the server handles <code>Mono</code> or <code>Stereo</code> samples</td>
</tr>
</tbody>
</table>
<h2 id="room-settings">Room Settings</h2>
<p>ODIN provides latest audio technology based on machine learning and other advanced techniques to make sure, that audio
quality is excellent for your players. It&rsquo;s important, that the game experience and immersion is not destroyed by noise
like cars, airplanes, kids screaming or just the noise produced by cheap microphones.</p>
<p>Our mission is to provide the best audio experience for each of your players. Some of these features can be enabled or
disabled or adjusted directly in the Unity editor. You&rsquo;ll find these settings in this section.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" width="326"/></a>
</figure>
<h2 id="event-listeners">Event Listeners</h2>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>From Unity SDK version 0.5.0 the event handler settings have been moved to the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
class.</p>
</div>
</div>

<h2 id="odin-handler">ODIN Handler</h2>
<p>Let&rsquo;s have a look at the settings exposed by the next component of a typical <em>ODIN Manager Game Object</em>: <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
</div>



<h1 id="odin-handler">Odin Handler</h1>

<div><p><a href='/odin/sdk/unity/classes/odinhandler/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component class is the global manager (singleton) for Odin inside your game. You can
use it to connect your own callbacks.</p>
<figure style="max-width: 325px"><a href="/images/odin/odin_unity_inspector_odin_handler.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler.jpg" width="325"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses <code>DontDestroyOnLoad</code> in this class to make sure that this component and game object survives scene changes.</p>
</div>
</div>

<h2 id="microphone">Microphone</h2>
<p>The first option provided in the Odin Handler Inspector is the microphone setting:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" width="322"/></a>
</figure>
<p>Drag &amp; Drop the <em>Game Object</em> within your scene that has the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component attached. If
you have created a standard <em>ODIN Manager Game Object</em> by following our <a href="/odin/sdk/unity/1.6.6/manual/">manual</a>
then this will be the same game object that the Odin Handler is attached to.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you put the <code>Microphone Reader</code> component on a different game object than the <code>Odin Handler</code> you need to make sure that
the other game object also uses <code>DontDestroyOnLoad</code> to survice scene changes. Otherwise, your players will not be able
to talk to other players as their microphone game object got removed. Of course, you can also use that as a feature to
disable microphone input in specific scenes. But you need to be careful with lifecycle management of your game objects
if you separate <code>Odin Handler</code> and <code>Microphone Reader</code> into different game objects.</p>
</div>
</div>

<h2 id="mixer-settings">Mixer Settings</h2>
<p>Another set of options is playback mixer settings.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" width="326"/></a>
</figure>
<p>Sometimes you want to apply some audio effects to voice, like cell broadcast interferences or noise. Create a Unity
<span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 or <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and assign it to one of these options.</p>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Playback Mixer</td>
<td>Create a Unity <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
<tr>
<td>Playback Mixer Group</td>
<td>Create a Unity <span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
</tbody>
</table>
<h2 id="playback-creation">Playback Creation</h2>
<p>In this section, you can activate some SDK automations, that make your life easier. In some special cases you might
take control of various aspects yourself, but for most use-cases you can make use of these automations.</p>
<figure style="max-width: 278px"><a href="/images/odin/odin_unity_inspector_playback_creation.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_playback_creation.jpg" width="278"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: You should only select one of these checkboxes. We&rsquo;ll change that to a drop down field in the next
version of the SDK.</p>
</div>
</div>

<p>If both settings are unchecked you&rsquo;ll need to handle the events like <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 yourself and
you&rsquo;ll also need to create audio pipeline elements yourself. See the source-code of the SDK on how to do that.</p>
<h3 id="playback-auto-creation">Playback auto creation</h3>
<p>If you check this box, the ODIN SDK will automatically create an <code>AudioSource</code> and link that to the ODIN server for
you and will handle the lifetime for you.</p>
<p>In addition to that, and that distinguishes this setting to <code>Manual Positional Audio</code> is that the
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 will be automatically attached to the GameObject with the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>

attached.</p>
<p>This is the easiest way to implement a simple &ldquo;video conferencing&rdquo; like use case where you don&rsquo;t have positional
audio or specific teams.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As all users voice is attached to one GameObject automatically you cannot implement any form of 3D audio this way. If
you want to have 3D audio, you need to deactivate this setting and activate <code>Manual Positional Audio</code> instead (see
description below).</p>
</div>
</div>

<h3 id="manual-positional-audio">Manual Positional Audio</h3>
<p>If you check this box (and uncheck the other setting) ODIN will automatically create an <code>AudioSource</code> for you and
link that to the ODIN server and handles the lifetime of it.</p>
<p>However, you are responsible to attach the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to a GameObject representing the
player (in space) and thus allowing you to implement 3D audio with ease.</p>
<p>Check out these guides on how to get notified of the SDK once an audio stream has been prepared and how to handle
the event:</p>
<ul>
<li><a href="/odin/guides/unity/getting-started-unity/">Getting Started with Unity</a>: Create a simple Unity
project and add ODIN to it. Shows the basic workflow and basic event handling.</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>: Shows how to implement ODIN into
a multiplayer game built with mirror networking. Create a simple multi-player game and add ODIN to it in under 20
minutes.</li>
</ul>
<p>What you basically have to do is to listen on the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>

events of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 instance like this:</p>
<pre><code class="language-C#">void Start()
{
    OdinHandler.Instance.OnCreatedMediaObject.AddListener(OnCreatedMediaObject);
    OdinHandler.Instance.OnDeleteMediaObject.AddListener(OnDeleteMediaObject);
}
</code></pre>
<p>ODIN will call these events once a user joined the room and added a media object or removed it (i.e. muted their
audio). Please note, that users can join a room without adding their own media stream (i.e. spectators).</p>
<p>You&rsquo;ll need to call <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 method which will create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

and attach it to the Game Object that you provide. Of course, you&rsquo;ll need to have some logic to find the correct
player GameObject for the ODIN. Every ODIN user (peer) has it&rsquo;s own user data which you can use to link your
GameObjects to ODIN. The best place to learn how to do that is our guide
<a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>.</p>
<p>Here is a simple example on how to handle the event. More examples can be found in the reference documentation of
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
, the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and the guides linked above.</p>
<pre><code class="language-C#">private void OnCreatedMediaObject(string roomName, ulong peerId, int mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    // Create or find a player object in the scene
    var peerContainer = CreateOrFindGameObject(peerId, roomName);

    // Create PlaybackComponent and add to the players GameObject
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    // Set spatialBlend to 1.0f to activate fill 3D audio and adjust some 3D audio settings
    // This is basic Unity stuff. PlaybackSource is an AudioSource object. See Unity documentation for more info 
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;
}
</code></pre>
<h2 id="events">Events</h2>
<p>ODIN has a couple of events that allows you to react on things that happen within the ODIN runtime. Use these settings
to connect your own game objects and scripts to ODIN. You can also do that in code if you like. Have a look at the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class
for more infos about that.</p>
<figure style="max-width: 329px"><a href="/images/odin/odin_unity_inspector_odin_handler_events.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_events.jpg" width="329"/></a>
</figure>
<p>These are standard Unity events. Click on the <code>+</code> button to add a listener and than drag &amp; drop the game object that
has your handler script attached exposing public callbacks for the events you want to listen to.</p>
<p>Read more about the events available in our Scripting documentation:</p>
<h3 id="room-events">Room events</h3>
<p>These events are sent if anything happens with the rooms the player has joined. Use the <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 method
of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class to connect the player to one or more rooms. These events will then trigger and
allow you to react on these in your own scripts by attaching callbacks.</p>
<table>
<thead>
<tr>
<th>Event Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Room Join</td>
<td>Called before a player joins a room: <span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Joined</td>
<td>Called after a player joined a room: <span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Leave</td>
<td>Called before a player leaves a room: <span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Left</td>
<td>Called after a player left a room: <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h3 id="peer-events">Peer events</h3>
<p>Whenever something happens in the room the player is connected to, i.e. another player joins the room or updates his
user data, these events are triggered and allow you to react on those in your own scripts.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Peer Joined</td>
<td>Called when another player joined the room: <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Left</td>
<td>Called when another player left the room: <span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Updated</td>
<td>When the user data of a peer changes, this callback is called: <span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to understand the difference between a peer and a media stream. In ODIN it&rsquo;s possible to join a room as
a listener but not sending media into the room. A typical use case for this is a spectator or in a podcast, only the podcaster
is able to say something while the others are just listening.</p>
<p>It&rsquo;s the same in ODIN: If a player connects a room, the <code>Peer Joined</code> event is triggered. Now, the player listens to
the audio streams in this room. If the <code>Odin Handler</code> of the other player has a <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span></p>
<p>attached and is active and recording, a <code>Media Added</code> event will be triggered once the audio stream of the other player
notifying all other peers, that there is an additional audio stream they need to listen to now.</p>
<p>If the other player disables his microphone, a <code>Media Removed</code> event is triggered and all other peers will stop listening
on this audio source.</p>
</div>
</div>

<h3 id="media-events">Media events</h3>
<p>When media streams are added or removed, you&rsquo;ll receive these events.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Media Added</td>
<td>Called when the microphone stream of another user is joining the room: <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Media State Changed</td>
<td>Called when the medias state changed: <code>OnMediaActiveStateChanged</code>
</td>
</tr>
<tr>
<td>Media Removed</td>
<td>When one of the peers removes his microphone stream of the room, this callback is triggered: <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h2 id="microphone-reader-settings">Microphone Reader settings</h2>
<p>In a typical <em>ODIN Manager Game Object</em> a <em>Microphone Reader</em> component is attached which handles the
players microphone and audio input. Let&rsquo;s step through these settings here: <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
</div>



<h1 id="microphone-reader">Microphone Reader</h1>

<div><p><a href='/odin/sdk/unity/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component class starts capturing audio input from attached microphones and sends
audio packets to the ODIN runtime which distributes them to the other peers joined to the same room.</p>
<p>This component is typically attached to the same game object as the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
. If you put this object
on a different game object, make sure you attach it to the <span class="external-reference">Microphone <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/#microphone"><i class="fas fa-external-link-alt"></i></a></span>
 setting of the
<span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component.</p>
<h2 id="basic-settings">Basic Settings</h2>
<p>These are the settings exposed in the Unity Inspector for this component:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_microphone_reader.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_microphone_reader.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Redirect captured audio</td>
<td>Automatically send all captured audio data to all rooms this player joined. If you want more control, disable this setting.</td>
</tr>
<tr>
<td>Continue Recording</td>
<td>Indicates whether the recording should continue recording if AudioClipLength is reached, and wrap around and record from the beginning of the AudioClip.</td>
</tr>
</tbody>
</table>
<h2 id="mic-audio-clip-settings">Mic Audio-Clip Settings</h2>
<p>In this section you can adjust various settings relevant for Audio Clip Management. In Unity all audio is stored in an
<code>AudioClip</code>
. As Unity does not support real-time audio streams, ODIN just modifies an Audio Clip and
overwrites it over and over again once it came to an end.</p>
<p>Use these settings to adjust these behaviors.</p>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Audio Clip Length</td>
<td>The length of the audio clip. If <code>Continue Recording</code> is enabled, this will be overwritten everytime it&rsquo;s full.</td>
</tr>
<tr>
<td>Override Sample Rate</td>
<td>Activate this setting to specify a different sample rate than globally set in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Sample Rate</td>
<td>Only visible of Override Sample Rate is active. Set the sample rate that you want to have for this microphone. &gt;}}</td>
</tr>
<tr>
<td>Autostart Microphone</td>
<td>If enabled, the microphone will immediately start listening and sending audio data to ODIN. If disabled, you need to call <span class="external-reference">StartListen <a href="/odin/sdk/unity/1.6.6/classes/microphonereader/startlisten/"><i class="fas fa-external-link-alt"></i></a></span>
 manually.</td>
</tr>
</tbody>
</table>
</div>



<h1 id="playback-component">Playback Component</h1>

<div><p><a href='/odin/sdk/unity/classes/playbackcomponent/' class="btn btn-primary">Switch to scripting</a></p>
<p>This component is automatically created and attached during runtime when you call the method <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

on the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 singleton in your scene.</p>
<p><strong>Do not add this component manually in the editor.</strong></p>
<p>More info on this topic can be found here:</p>
<ul>
<li><span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 reference documentation</li>
<li><span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and how to use it</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity Multiplayer Game Integration Guide</a></li>
</ul>
</div>



`}),e.add({id:1780,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odineffecttype/odin_effect_type_apm/",title:"ODIN_EFFECT_TYPE_APM",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_EFFECT_TYPE_APM = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/">OdinEffectType</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1781,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odineffecttype/odin_effect_type_custom/",title:"ODIN_EFFECT_TYPE_CUSTOM",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_EFFECT_TYPE_CUSTOM = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/">OdinEffectType</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1782,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odineffecttype/odin_effect_type_vad/",title:"ODIN_EFFECT_TYPE_VAD",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_EFFECT_TYPE_VAD = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/">OdinEffectType</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1783,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_apm_error/",title:"ODIN_ERROR_APM_ERROR",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_APM_ERROR = -1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1784,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_invalid_handle/",title:"ODIN_ERROR_ARGUMENT_INVALID_HANDLE",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_ARGUMENT_INVALID_HANDLE = -3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1785,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_invalid_id/",title:"ODIN_ERROR_ARGUMENT_INVALID_ID",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_ARGUMENT_INVALID_ID = -5
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1786,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_invalid_string/",title:"ODIN_ERROR_ARGUMENT_INVALID_STRING",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_ARGUMENT_INVALID_STRING = -2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1787,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_null/",title:"ODIN_ERROR_ARGUMENT_NULL",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_ARGUMENT_NULL = -4
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1788,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_out_of_bounds/",title:"ODIN_ERROR_ARGUMENT_OUT_OF_BOUNDS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_ARGUMENT_OUT_OF_BOUNDS = -6
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1789,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_closed/",title:"ODIN_ERROR_CLOSED",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_CLOSED = -112
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1790,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_decoder_error/",title:"ODIN_ERROR_DECODER_ERROR",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_DECODER_ERROR = -108
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1791,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_end_argument_errors/",title:"ODIN_ERROR_END_ARGUMENT_ERRORS",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_END_ARGUMENT_ERRORS = -7
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1792,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_initialization_failed/",title:"ODIN_ERROR_INITIALIZATION_FAILED",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_INITIALIZATION_FAILED = -101
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1793,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_access_key/",title:"ODIN_ERROR_INVALID_ACCESS_KEY",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_INVALID_ACCESS_KEY = -102
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1794,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_gateway_uri/",title:"ODIN_ERROR_INVALID_GATEWAY_URI",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_INVALID_GATEWAY_URI = -103
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1795,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_state/",title:"ODIN_ERROR_INVALID_STATE",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_INVALID_STATE = -104
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1796,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_token/",title:"ODIN_ERROR_INVALID_TOKEN",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_INVALID_TOKEN = -105
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1797,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_version/",title:"ODIN_ERROR_INVALID_VERSION",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_INVALID_VERSION = -106
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1798,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_no_data/",title:"ODIN_ERROR_NO_DATA",section:"ODIN Documentation",description:" Successful status code equivalent with &quot;end of data&quot; ",content:`<pre><code class="language-C#">ODIN_ERROR_NO_DATA = 1
</code></pre>
<p>Successful status code equivalent with &quot;end of data&quot;</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1799,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_opus_error/",title:"ODIN_ERROR_OPUS_ERROR",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_OPUS_ERROR = -107
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1800,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_success/",title:"ODIN_ERROR_SUCCESS",section:"ODIN Documentation",description:" Successful status code OK ",content:`<pre><code class="language-C#">ODIN_ERROR_SUCCESS = 0
</code></pre>
<p>Successful status code OK</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1801,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_token_room_rejected/",title:"ODIN_ERROR_TOKEN_ROOM_REJECTED",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_TOKEN_ROOM_REJECTED = -109
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1802,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_unsupported_effect/",title:"ODIN_ERROR_UNSUPPORTED_EFFECT",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_UNSUPPORTED_EFFECT = -111
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1803,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_unsupported_version/",title:"ODIN_ERROR_UNSUPPORTED_VERSION",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">ODIN_ERROR_UNSUPPORTED_VERSION = -110
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1804,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_high/",title:"ODIN_NOISE_SUPPRESSION_HIGH",section:"ODIN Documentation",description:" Use high suppression (18 dB) ",content:`<pre><code class="language-C#">ODIN_NOISE_SUPPRESSION_HIGH = 3
</code></pre>
<p>Use high suppression (18 dB)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1805,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_low/",title:"ODIN_NOISE_SUPPRESSION_LOW",section:"ODIN Documentation",description:" Use low suppression (6 dB) ",content:`<pre><code class="language-C#">ODIN_NOISE_SUPPRESSION_LOW = 1
</code></pre>
<p>Use low suppression (6 dB)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1806,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_moderate/",title:"ODIN_NOISE_SUPPRESSION_MODERATE",section:"ODIN Documentation",description:" Use moderate suppression (12 dB) ",content:`<pre><code class="language-C#">ODIN_NOISE_SUPPRESSION_MODERATE = 2
</code></pre>
<p>Use moderate suppression (12 dB)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1807,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_none/",title:"ODIN_NOISE_SUPPRESSION_NONE",section:"ODIN Documentation",description:" Noise suppression is disabled ",content:`<pre><code class="language-C#">ODIN_NOISE_SUPPRESSION_NONE = 0
</code></pre>
<p>Noise suppression is disabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1808,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_very_high/",title:"ODIN_NOISE_SUPPRESSION_VERY_HIGH",section:"ODIN Documentation",description:" Use very high suppression (21 dB) ",content:`<pre><code class="language-C#">ODIN_NOISE_SUPPRESSION_VERY_HIGH = 4
</code></pre>
<p>Use very high suppression (21 dB)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/">OdinNoiseSuppression</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1809,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/",title:"OdinApmComponent",section:"ODIN Documentation",description:" AudioProcessingModule component for This class provides configuration for the native implemented audio processing. The supported processor/filter are applicable to which must be set. ",content:`<pre><code class="language-C#">public class OdinApmComponent : MonoBehaviour, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>AudioProcessingModule component for Media</p>
<p>
This class provides configuration for the native implemented audio processing. 
The supported processor/filter are applicable to Media which must be set.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/media/">Media</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/effect/">Effect</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/iscreated/">IsCreated</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/echocanceller/">EchoCanceller</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/highpassfilter/">HighPassFilter</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/preamplifier/">PreAmplifier</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/noisesuppression/">NoiseSuppression</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/transientsuppressor/">TransientSuppressor</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/gaincontroller/">GainController</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/updateconfig/">UpdateConfig</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/reseteffect/">ResetEffect</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/getmedia/">GetMedia</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinapmcomponent/geteffect/">GetEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1810,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/",title:"OdinApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinApmConfig
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/echo_canceller/">echo_canceller</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/high_pass_filter/">high_pass_filter</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/pre_amplifier/">pre_amplifier</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/noise_suppression/">noise_suppression</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/transient_suppressor/">transient_suppressor</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/gain_controller/">gain_controller</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1811,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/",title:"OdinAPMSettings",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">export interface OdinAPMSettings
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/echocanceller/">echoCanceller</a></td>
<td>boolean</td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/gaincontroller/">gainController</a></td>
<td>boolean</td>
<td>Enable or disable the gain controller</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/highpassfilter/">highPassFilter</a></td>
<td>boolean</td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/noisesuppressionlevel/">noiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/nodejs/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/preamplifier/">preAmplifier</a></td>
<td>boolean</td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/transientsuppressor/">transientSuppressor</a></td>
<td>boolean</td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/voiceactivitydetection/">voiceActivityDetection</a></td>
<td>boolean</td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/voiceactivitydetectionattackprobability/">voiceActivityDetectionAttackProbability</a></td>
<td>number</td>
<td>Voice probability value when the VAD should engage</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/voiceactivitydetectionreleaseprobability/">voiceActivityDetectionReleaseProbability</a></td>
<td>number</td>
<td>Voice probability value when the VAD should disengage</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/volumegate/">volumeGate</a></td>
<td>boolean</td>
<td>Enables or disables the input volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/volumegateattackloudness/">volumeGateAttackLoudness</a></td>
<td>number</td>
<td>Root-mean-square power (dBFS) when the volume gate should engage</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinapmsettings/volumegatereleaseloudness/">volumeGateReleaseLoudness</a></td>
<td>number</td>
<td>Root-mean-square power (dBFS) when the volume gate should disengage</td>
</tr>
</tbody>
</table>
`}),e.add({id:1812,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiodata/",title:"OdinAudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinAudioData
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/samples/">samples</a></td>
<td>float[]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/samples_count/">samples_count</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/is_silent/">is_silent</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/copyframe/">CopyFrame</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiodata/setframe/">SetFrame</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1813,href:"https://www.4players.io/odin/sdk/nodejs/types/odinaudiodatareceivedevent/",title:"OdinAudioDataReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinAudioDataReceivedEvent = (event: OdinAudioDataReceivedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinAudioDataReceivedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1814,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/",title:"OdinAudioDataReceivedEventPayload",section:"ODIN Documentation",description:"The payload for the AudioDataReceived event.",content:`<pre><code class="language-TypeScript">export interface OdinAudioDataReceivedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the AudioDataReceived event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/mediaid/">mediaId</a></td>
<td>number</td>
<td>The ID of the media that sent the audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that sent the audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/samples16/">samples16</a></td>
<td>Uint8Array</td>
<td>The audio data received from the peer as 16-bit PCM samples ranging from -32768 to 32767 as a byte array. Use <code>const samplesArray = new Int16Array(samples16.buffer)</code> to get an actual array</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/samples32/">samples32</a></td>
<td>Uint8Array</td>
<td>The audio data received from the peer as 32-bit PCM samples ranging from -1 to 1. Use <code>const floats = new Float32Array(samples32.buffer)</code> to get an actual array</td>
</tr>
</tbody>
</table>
`}),e.add({id:1815,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/",title:"OdinAudioMediaCallbackMarshal",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinAudioMediaCallbackMarshal : ICustomMarshaler
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/getinstance/">GetInstance</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/marshalmanagedtonative/">MarshalManagedToNative</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/marshalnativetomanaged/">MarshalNativeToManaged</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/cleanupnativedata/">CleanUpNativeData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/cleanupmanageddata/">CleanUpManagedData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediacallbackmarshal/getnativedatasize/">GetNativeDataSize</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1816,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/",title:"OdinAudioMediaMarshal",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinAudioMediaMarshal : ICustomMarshaler
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/getinstance/">GetInstance</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/marshalmanagedtonative/">MarshalManagedToNative</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/marshalnativetomanaged/">MarshalNativeToManaged</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/cleanupnativedata/">CleanUpNativeData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/cleanupmanageddata/">CleanUpManagedData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudiomediamarshal/getnativedatasize/">GetNativeDataSize</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1817,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/",title:"OdinAudioReader",section:"ODIN Documentation",description:" Handles audioclip input data and sends input to ODIN This convenient class gathers input audio data from Unity to pass the data with event to other components. ",content:`<pre><code class="language-C#">public class OdinAudioReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles audioclip input data and sends input to ODIN</p>
<p>
This convenient class gathers input audio data from Unity to pass the data with OdinAudioReader event to other components.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/redirectinputaudio/">RedirectInputAudio</a></td>
<td>Skips registered PushAudio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/silenceinputaudio/">SilenceInputAudio</a></td>
<td>Zero out the event audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/continuerecording/">ContinueRecording</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/inputclip/">InputClip</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/custominputvolumescale/">CustomInputVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/inputvolumescale/">InputVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinaudioreader/onaudiodata/">OnAudioData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1818,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/",title:"OdinAudioReadOnlyData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinAudioReadOnlyData
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/samples/">samples</a></td>
<td>float[]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/samples_count/">samples_count</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/is_silent/">is_silent</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1819,href:"https://www.4players.io/odin/sdk/web/types/odinaudiostatsevent/",title:"OdinAudioStatsEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinAudioStatsEvent = (event: IOdinEvent&lt;IOdinAudioStatsEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinAudioStatsEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances every second and provides access to internal Opus encoder/decoder statistics, which can be used for diagnostic purposes.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinAudioStatsEventPayload <a href="/odin/sdk/web/interfaces/iodinaudiostatseventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-a37af3b90ef3eaad6f921f22407571cf" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinAudioStatsEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-a37af3b90ef3eaad6f921f22407571cf-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-a37af3b90ef3eaad6f921f22407571cf-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Listen for audio stats updates
  odinRoom.addEventListener(&#39;AudioStats&#39;, (event) =&gt; {
    console.log(&#39;Audio stats received:&#39;, event.payload);
  });

  // Join the room
  odinRoom.join();

  // Create a new audio stream for our default capture device and append it to the room
  navigator.mediaDevices.getUserMedia({ audio: true }).then((mediaStream) =&gt; {
    odinRoom.createMedia(mediaStream);
  });
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinAudioStatsEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1820,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/",title:"OdinAudioStreamStats",section:"ODIN Documentation",description:" Audio stream statistics. ",content:`<pre><code class="language-C#">public struct OdinAudioStreamStats
</code></pre>
<h1 id="heading"></h1>
<p>Audio stream statistics.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_processed/">jitter_packets_processed</a></td>
<td>UInt32</td>
<td>The number of packets processed by the medias jitter buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_dropped_too_early/">jitter_packets_dropped_too_early</a></td>
<td>UInt32</td>
<td>The number of packets dropped because they seemed to arrive too early.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_dropped_too_late/">jitter_packets_dropped_too_late</a></td>
<td>UInt32</td>
<td>The number of packets processed because they seemed to arrive too late.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinaudiostreamstats/jitter_packets_lost/">jitter_packets_lost</a></td>
<td>UInt32</td>
<td>The number of packets marked as lost during transmission.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1821,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/",title:"OdinAudioStreamStats",section:"ODIN Documentation",description:" Audio stream statistics. ",content:`<pre><code class="language-C#">public struct OdinAudioStreamStats
</code></pre>
<h1 id="heading"></h1>
<p>Audio stream statistics.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_processed/">jitter_packets_processed</a></td>
<td>The number of packets processed by the medias jitter buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_dropped_too_early/">jitter_packets_dropped_too_early</a></td>
<td>The number of packets dropped because they seemed to arrive too early.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_dropped_too_late/">jitter_packets_dropped_too_late</a></td>
<td>The number of packets processed because they seemed to arrive too late.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinaudiostreamstats/jitter_packets_lost/">jitter_packets_lost</a></td>
<td>The number of packets marked as lost during transmission.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1822,href:"https://www.4players.io/odin/sdk/unity/structs/odinaudiostreamstats/",title:"OdinAudioStreamStats",section:"ODIN Documentation",description:" Audio stream statistics. ",content:`<pre><code class="language-C#">public struct OdinAudioStreamStats
</code></pre>
<h1 id="heading"></h1>
<p>Audio stream statistics.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_processed/">jitter_packets_processed</a></td>
<td>The number of packets processed by the medias jitter buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_dropped_too_early/">jitter_packets_dropped_too_early</a></td>
<td>The number of packets dropped because they seemed to arrive too early.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_dropped_too_late/">jitter_packets_dropped_too_late</a></td>
<td>The number of packets processed because they seemed to arrive too late.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinaudiostreamstats/jitter_packets_lost/">jitter_packets_lost</a></td>
<td>The number of packets marked as lost during transmission.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1823,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinbanner/",title:"OdinBanner",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p><a href='/odin/sdk/unity/manual/odinbanner/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinBanner : MonoBehaviour
</code></pre>
`}),e.add({id:1824,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinbanner/",title:"OdinBanner",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinBanner : MonoBehaviour
</code></pre>
`}),e.add({id:1825,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinbanner/",title:"OdinBanner",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinBanner : MonoBehaviour
</code></pre>
`}),e.add({id:1826,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinbanner/",title:"OdinBanner",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinBanner : MonoBehaviour
</code></pre>
`}),e.add({id:1827,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinbanner/",title:"OdinBanner",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinBanner : MonoBehaviour
</code></pre>
`}),e.add({id:1828,href:"https://www.4players.io/odin/sdk/unity/classes/odinbanner/",title:"OdinBanner",section:"ODIN Documentation",description:"",content:`<p><a href='/odin/sdk/unity/1.6.6/manual/odinbanner/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinBanner : MonoBehaviour
</code></pre>
`}),e.add({id:1829,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/",title:"OdinCallbackAudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinCallbackAudioData
</code></pre>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/constructor_0/">OdinCallbackAudioData(IntPtr, IntPtr, UInt32)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/samples/">samples</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/samples_count/">samples_count</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/is_silent/">is_silent</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/resetbuffer/">ResetBuffer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/flushframebuffer/">FlushFrameBuffer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/flushsilentflag/">FlushSilentFlag</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/copyfrom/">CopyFrom</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/copyto/">CopyTo</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/flush/">Flush</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1830,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/constructor_0/",title:"OdinCallbackAudioData(IntPtr, IntPtr, UInt32)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinCallbackAudioData(IntPtr nativePtr, IntPtr samplesPtr, uint samplesCount)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>nativePtr</td>
<td></td>
</tr>
<tr>
<td>samplesPtr</td>
<td></td>
</tr>
<tr>
<td>samplesCount</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1831,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:"The Odin client is the main entry point for the Odin SDK. It is used to create rooms. Create an instance with your access key and use it to create rooms.",content:`<pre><code class="language-TypeScript">export class OdinClient
</code></pre>
<h1 id="heading"></h1>
<p>The Odin client is the main entry point for the Odin SDK. It is used to create rooms. Create an instance with your
access key and use it to create rooms.</p>
<h2 id="constructor">Constructor</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinclient/constructor/">constructor</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinclient/">OdinClient</a></td>
<td>Creates a new instance of a client. Use this to create rooms.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinclient/createroom/">createRoom</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td>Creates a new local room instance with the given ID and user ID. Use join to connect to that room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinclient/createroomwithaccesstoken/">createRoomWithAccessToken</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td>Creates a new local room instance with the given access token. Use <code>join</code> on the returned OdinRoom instance to connect to that room. Use this method if you already have an access token, either created elsewhere or by calling <code>generateToken</code>. To be more consistent with other SDKs, this method is deprecated. Use createRoomWithToken instead.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinclient/createroomwithtoken/">createRoomWithToken</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td>Creates a new local room instance with the given room token. Use <code>join</code> on the returned OdinRoom instance to connect to that room. Use this method if you already have an access token, either created elsewhere or by calling <code>generateAccessToken</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinclient/generateaccesstoken/">generateAccessToken</a></td>
<td>string</td>
<td>Generates a token for the given access key, room and user ID. This token can be used to join the room. To be more consistent with other SDKs, this method is deprecated. Use generateToken instead.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinclient/generatetoken/">generateToken</a></td>
<td>string</td>
<td>Generates a room token for the given access key, room and user ID. This token can be used to join the room.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1832,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:" Client Wrapper for ODIN ffi ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class OdinClient : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client Wrapper for ODIN ffi OdinLibrary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/rooms/">Rooms</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/">RoomCollection</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/endpoint/">EndPoint</a></td>
<td>Uri</td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Client custom UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/joinroom/">JoinRoom</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/joinnamedroom/">JoinNamedRoom</a></td>
<td>Join or create a named Room by token via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/setpositionscale/">SetPositionScale</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/updateposition/">UpdatePosition</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/leaveroom/">LeaveRoom</a></td>
<td>Leave a joined Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/close/">Close</a></td>
<td>Completly closes this Client and all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinclient/dispose/">Dispose</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
`}),e.add({id:1833,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:" Client Wrapper for ODIN ffi ",content:`<pre><code class="language-C#">public class OdinClient : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client Wrapper for ODIN ffi OdinLibrary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/rooms/">Rooms</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/">RoomCollection</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/endpoint/">EndPoint</a></td>
<td>Uri</td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Client custom UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/joinroom/">JoinRoom</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/joinnamedroom/">JoinNamedRoom</a></td>
<td>Join or create a named Room by token via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/setpositionscale/">SetPositionScale</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/updateposition/">UpdatePosition</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/leaveroom/">LeaveRoom</a></td>
<td>Leave a joined Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/close/">Close</a></td>
<td>Completly closes this Client and all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinclient/dispose/">Dispose</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
`}),e.add({id:1834,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:" Client Wrapper for ODIN ffi ",content:`<pre><code class="language-C#">public class OdinClient : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client Wrapper for ODIN ffi OdinLibrary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/rooms/">Rooms</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/">RoomCollection</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/endpoint/">EndPoint</a></td>
<td>Uri</td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Client custom UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/joinroom/">JoinRoom</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/joinnamedroom/">JoinNamedRoom</a></td>
<td>Join or create a named Room by token via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/setpositionscale/">SetPositionScale</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/updateposition/">UpdatePosition</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/leaveroom/">LeaveRoom</a></td>
<td>Leave a joined Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/close/">Close</a></td>
<td>Completly closes this Client and all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinclient/dispose/">Dispose</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
`}),e.add({id:1835,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:" Client Wrapper for ODIN ffi ",content:`<pre><code class="language-C#">public class OdinClient : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client Wrapper for ODIN ffi OdinLibrary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/constructor_0/">OdinClient(String, String)</a></td>
<td>Creates a new instance for ODIN ffi C# Wrapper</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/constructor_1/">OdinClient(Uri, String)</a></td>
<td>Creates a new instance for ODIN ffi C# Wrapper</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/constructor_2/">OdinClient(Uri, String, IUserData)</a></td>
<td>Creates a new instance for ODIN ffi C# Wrapper</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/rooms/">Rooms</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/endpoint/">EndPoint</a></td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/accesskey/">AccessKey</a></td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/userdata/">UserData</a></td>
<td>Client custom UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/joinroom/">JoinRoom</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/joinnamedroom/">JoinNamedRoom</a></td>
<td>Join or create a named Room by token via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/setpositionscale/">SetPositionScale</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/updateposition/">UpdatePosition</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/leaveroom/">LeaveRoom</a></td>
<td>Leave a joined Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/close/">Close</a></td>
<td>Completly closes this Client and all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinclient/dispose/">Dispose</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
`}),e.add({id:1836,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:" Client Wrapper for ODIN ffi OdinNative.Core.OdinLibrary.NativeMethods ",content:`<pre><code class="language-C#">public class OdinClient : MarshalByRefObject, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client Wrapper for ODIN ffi <code>OdinNative.Core.OdinLibrary.NativeMethods</code></p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/create/">Create</a></td>
<td>Creates a new initialized instance for ODIN ffi C# Wrapper</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/createaccesskey/">CreateAccessKey</a></td>
<td>Create a example access key that can be registered on 4Players (see <a href="https://developers.4players.io/odin/">https://developers.4players.io/odin/</a> )</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/createtoken/">CreateToken</a></td>
<td>Create a example token to join a room. For production use a token server!</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/rooms/">Rooms</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/endpoint/">EndPoint</a></td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/accesskey/">AccessKey</a></td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/generatetoken/">GenerateToken</a></td>
<td>Create a example token to join a room. For production use a token server!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/createroom/">CreateRoom</a></td>
<td>Create a room for the set gateway.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/joinroom/">JoinRoom</a></td>
<td>Create and join a Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/join/">Join</a></td>
<td>Join a object of base Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/closeroom/">CloseRoom</a></td>
<td>Close a room by Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/freeroom/">FreeRoom</a></td>
<td>Close and remove a room by Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/broadcastsendmessage/">BroadcastSendMessage</a></td>
<td>Send a message to all rooms with the default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/closerooms/">CloseRooms</a></td>
<td>Completely closes all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/freerooms/">FreeRooms</a></td>
<td>Free all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinclient/dispose/">Dispose</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
`}),e.add({id:1837,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:" Client Wrapper for ODIN ffi ",content:`<pre><code class="language-C#">public class OdinClient : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client Wrapper for ODIN ffi OdinLibrary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/constructor_0/">OdinClient(String, String)</a></td>
<td>Creates a new instance for ODIN ffi C# Wrapper</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/constructor_1/">OdinClient(Uri, String)</a></td>
<td>Creates a new instance for ODIN ffi C# Wrapper</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/constructor_2/">OdinClient(Uri, String, IUserData)</a></td>
<td>Creates a new instance for ODIN ffi C# Wrapper</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
<td>A collection of all Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/endpoint/">EndPoint</a></td>
<td>Connection EndPoint. Default from OdinEditorConfig.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/accesskey/">AccessKey</a></td>
<td>Client AccessKey for all new rooms. Default from OdinHandler config.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/userdata/">UserData</a></td>
<td>Client custom UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/joinroom/">JoinRoom</a></td>
<td>Join or create a Room by name via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/joinnamedroom/">JoinNamedRoom</a></td>
<td>Join or create a named Room by token via a gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/setpositionscale/">SetPositionScale</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/updateposition/">UpdatePosition</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/leaveroom/">LeaveRoom</a></td>
<td>Leave a joined Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/close/">Close</a></td>
<td>Completly closes this Client and all Room associated.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinclient/dispose/">Dispose</a></td>
<td>On dispose will free all NativeMethods</td>
</tr>
</tbody>
</table>
`}),e.add({id:1838,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/",title:"OdinClient",section:"ODIN Documentation",description:"Class providing static methods to handle ODIN client connections.",content:`<pre><code class="language-TypeScript">export class OdinClient
</code></pre>
<h1 id="heading"></h1>
<p>Class providing static methods to handle ODIN client connections.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/config/">config</a></td>
<td><a href="/odin/sdk/web/interfaces/iodinclientsettings/">IOdinClientSettings</a></td>
<td>Global settings for ODIN connections.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/connectionstate/">connectionState</a></td>
<td><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></td>
<td>The current state of the main stream connection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/rooms/">rooms</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">OdinRoom[]</a></td>
<td>An array of available <code>OdinRoom</code> instances.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/addeventlistener/">addEventListener</a></td>
<td>void</td>
<td>Registers to client events from <code>IOdinClientEvents</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/disconnect/">disconnect</a></td>
<td>void</td>
<td>Disconnects from all rooms and stops all audio handling.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/initroom/">initRoom</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">Promise&lt;OdinRoom&gt;</a></td>
<td>Authenticates against the ODIN server and returns an <code>OdinRoom</code> instance for the first room set in the specified token. This function accepts an optional <code>AudioContext</code> parameter for audio capture. The <code>AudioContext</code> interface is a part of the Web Audio API that represents an audio-processing graph, which can be used to control and manipulate audio signals in web applications. If the <code>AudioContext</code> is not provided or explicitly set to <code>undefined</code>, we will try to create one internally.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinclient/initrooms/">initRooms</a></td>
<td><a href="/odin/sdk/web/classes/odinroom/">Promise&lt;OdinRoom[]&gt;</a></td>
<td>Authenticates against the ODIN server and returns <code>OdinRoom</code> instances for all rooms set in the specified token. This function accepts an optional <code>AudioContext</code> parameter for audio capture. The <code>AudioContext</code> interface is a part of the Web Audio API that represents an audio-processing graph, which can be used to control and manipulate audio signals in web applications. If the <code>AudioContext</code> is not provided or explicitly set to <code>undefined</code>, we will try to create one internally.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1839,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/constructor_0/",title:"OdinClient(String, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinClient(string url, string accessKey)
</code></pre>
<p>Creates a new instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Odin will be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td><xref href="OdinNative.Odin.OdinClient.EndPoint" data-throw-if-not-resolved="false"></xref> Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>Odin access key</td>
</tr>
</tbody>
</table>
`}),e.add({id:1840,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/constructor_0/",title:"OdinClient(String, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinClient(string url, string accessKey)
</code></pre>
<p>Creates a new instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Odin will be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td><xref href="OdinNative.Odin.OdinClient.EndPoint" data-throw-if-not-resolved="false"></xref> Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>Odin access key</td>
</tr>
</tbody>
</table>
`}),e.add({id:1841,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/constructor_2/",title:"OdinClient(Uri, String, IUserData)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinClient(Uri server, string accessKey, IUserData userData = null)
</code></pre>
<p>Creates a new instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Odin is optional</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td><xref href="OdinNative.Odin.OdinClient.EndPoint" data-throw-if-not-resolved="false"></xref> Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>Odin access key</td>
</tr>
<tr>
<td>userData</td>
<td><xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> to set</td>
</tr>
</tbody>
</table>
`}),e.add({id:1842,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/constructor_2/",title:"OdinClient(Uri, String, IUserData)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinClient(Uri server, string accessKey, IUserData userData = null)
</code></pre>
<p>Creates a new instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Odin is optional</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td><xref href="OdinNative.Odin.OdinClient.EndPoint" data-throw-if-not-resolved="false"></xref> Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>Odin access key</td>
</tr>
<tr>
<td>userData</td>
<td><xref href="OdinNative.Odin.OdinClient.UserData" data-throw-if-not-resolved="false"></xref> to set</td>
</tr>
</tbody>
</table>
`}),e.add({id:1843,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/constructor_1/",title:"OdinClient(Uri, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinClient(Uri server, string accessKey)
</code></pre>
<p>Creates a new instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Odin will be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td><xref href="OdinNative.Odin.OdinClient.EndPoint" data-throw-if-not-resolved="false"></xref> Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>Odin access key</td>
</tr>
</tbody>
</table>
`}),e.add({id:1844,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/constructor_1/",title:"OdinClient(Uri, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinClient(Uri server, string accessKey)
</code></pre>
<p>Creates a new instance for ODIN ffi C# Wrapper</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Odin will be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td><xref href="OdinNative.Odin.OdinClient.EndPoint" data-throw-if-not-resolved="false"></xref> Odin Server</td>
</tr>
<tr>
<td>accessKey</td>
<td>Odin access key</td>
</tr>
</tbody>
</table>
`}),e.add({id:1845,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/",title:"OdinColliderFilterComponent",section:"ODIN Documentation",description:" Custom filter by collider component for This class is a effect in the odin audio pipline to mute audio based on GameObject collisions in Unity space. The effect can help to trigger specific audio packets quickly without the adjustment of Server-side positions. ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinColliderFilterComponent : OdinCustomEffectUnityComponentBase&lt;IntPtr&gt;, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>Custom filter by collider component for Media</p>
<p>
This class is a effect in the odin audio pipline to mute audio based on GameObject collisions in Unity space.
The effect can help to trigger specific audio packets quickly without the adjustment of Server-side positions.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/collidertag/">ColliderTag</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/comparison/">Comparison</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/settriggercount/">SetTriggerCount</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/customeffectcallback/">CustomEffectCallback</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1846,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnection/",title:"OdinConnection",section:"ODIN Documentation",description:" Wrapper class of Odin connections This convenient class provides dispatching of events to Unity with passthrough to support multiple rooms on fewer connections. ",content:`<pre><code class="language-C#">public class OdinConnection : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Wrapper class of Odin connections</p>
<p>
This convenient class provides dispatching of events to Unity with passthrough <see cref="!:UnityEngine.Events.UnityEvent"></see> 
to support multiple rooms on fewer connections. 
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnection/settings/">Settings</a></td>
<td>Native connection settings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnection/handle/">Handle</a></td>
<td>Odin connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnection/ondatagram/">OnDatagram</a></td>
<td>Redirect of <a href="/odin/sdk/unity/2.0.0/classes/room/ondatagram/">OnDatagram</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnection/onrpc/">OnRpc</a></td>
<td>Redirect of <a href="/odin/sdk/unity/2.0.0/classes/room/onrpc/">OnRpc</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnection/eventuserdata/">EventUserdata</a></td>
<td>Custom connection userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:1847,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/",title:"OdinConnectionPoolHandle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinConnectionPoolHandle : SafeHandleZeroOrMinusOneIsInvalid
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinconnectionpoolhandle/isalive/">IsAlive</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1848,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinconnectionpoolsettings/",title:"OdinConnectionPoolSettings",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinConnectionPoolSettings
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinconnectionpoolsettings/user_data/">user_data</a></td>
<td>IntPtr</td>
</tr>
</tbody>
</table>
`}),e.add({id:1849,href:"https://www.4players.io/odin/sdk/nodejs/types/odinconnectionstate/",title:"OdinConnectionState",section:"ODIN Documentation",description:"Connection states of the room",content:`<p>Connection states of the room</p>
<pre><code class="language-TypeScript">export type OdinConnectionState
</code></pre>
<h2 id="values">Values</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>connecting</td>
<td>literal</td>
</tr>
<tr>
<td>connected</td>
<td>literal</td>
</tr>
<tr>
<td>disconnecting</td>
<td>literal</td>
</tr>
<tr>
<td>disconnected</td>
<td>literal</td>
</tr>
<tr>
<td>unknown</td>
<td>literal</td>
</tr>
</tbody>
</table>
`}),e.add({id:1850,href:"https://www.4players.io/odin/sdk/web/types/odinconnectionstate/",title:"OdinConnectionState",section:"ODIN Documentation",description:"Enum defining all possible connection states of the ODIN client.",content:`<p>Enum defining all possible connection states of the ODIN client.</p>
<pre><code class="language-TypeScript">export type OdinConnectionState
</code></pre>
<h2 id="values">Values</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>disconnected</td>
<td>literal</td>
</tr>
<tr>
<td>connecting</td>
<td>literal</td>
</tr>
<tr>
<td>connected</td>
<td>literal</td>
</tr>
<tr>
<td>error</td>
<td>literal</td>
</tr>
<tr>
<td>incomplete</td>
<td>literal</td>
</tr>
</tbody>
</table>
`}),e.add({id:1851,href:"https://www.4players.io/odin/sdk/nodejs/types/odinconnectionstatechangedevent/",title:"OdinConnectionStateChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinConnectionStateChangedEvent = (event: OdinConnectionStateChangedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinConnectionStateChangedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1852,href:"https://www.4players.io/odin/sdk/web/types/odinconnectionstatechangedevent/",title:"OdinConnectionStateChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinConnectionStateChangedEvent = (event: IOdinEvent&lt;IOdinConnectionStateChangedEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinConnectionStateChangedEvent</code> event is emitted on <span class="external-reference">OdinClient <a href="/odin/sdk/web/classes/odinclient/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when the internal connection state of the underlying main/room stream is updated. You can use the event to determine when your connection is closed unexpectedly (e.g. timeout or server shutdown).</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinConnectionStateChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinClientEvents <a href="/odin/sdk/web/interfaces/iodinclientevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-02f9f37010c0a758e5af39b820585032" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinConnectionStateChangedEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-02f9f37010c0a758e5af39b820585032-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-02f9f37010c0a758e5af39b820585032-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Listen for connection state change events of the main stream
  odinRoom.addEventListener(&#39;ConnectionStateChanged&#39;, (event) =&gt; {
    console.log(\`Room connection state changed from \${event.payload.oldState} to \${event.payload.newState}\`);
  });

  // Join the room
  odinRoom.join();
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinConnectionStateChangedEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1853,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/",title:"OdinConnectionStateChangedEventPayload",section:"ODIN Documentation",description:"The payload for the ConnectionStateChanged event.",content:`<pre><code class="language-TypeScript">export interface OdinConnectionStateChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the ConnectionStateChanged event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/reason/">reason</a></td>
<td><a href="/odin/sdk/nodejs/types/odinconnectionstatechangereason/">OdinConnectionStateChangeReason</a></td>
<td>The error code if the connection state is Error.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/state/">state</a></td>
<td><a href="/odin/sdk/nodejs/types/odinconnectionstate/">OdinConnectionState</a></td>
<td>The new connection state of the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1854,href:"https://www.4players.io/odin/sdk/nodejs/types/odinconnectionstatechangereason/",title:"OdinConnectionStateChangeReason",section:"ODIN Documentation",description:"Change reasons for the connection state",content:`<p>Change reasons for the connection state</p>
<pre><code class="language-TypeScript">export type OdinConnectionStateChangeReason
</code></pre>
<h2 id="values">Values</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
</tr>
</thead>
<tbody>
<tr>
<td>client_request</td>
<td>literal</td>
</tr>
<tr>
<td>server_request</td>
<td>literal</td>
</tr>
<tr>
<td>timeout</td>
<td>literal</td>
</tr>
<tr>
<td>unknown</td>
<td>literal</td>
</tr>
</tbody>
</table>
`}),e.add({id:1855,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/",title:"OdinConnectionStats",section:"ODIN Documentation",description:" Statistics for the underlying connection of a room. ",content:`<pre><code class="language-C#">public struct OdinConnectionStats
</code></pre>
<h1 id="heading"></h1>
<p>Statistics for the underlying connection of a room.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_tx_datagrams/">udp_tx_datagrams</a></td>
<td>UInt64</td>
<td>The amount of outgoing UDP datagrams observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_tx_acks/">udp_tx_acks</a></td>
<td>UInt64</td>
<td>The amount of outgoing acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_tx_bytes/">udp_tx_bytes</a></td>
<td>UInt64</td>
<td>The total amount of bytes which have been transferred inside outgoing UDP datagrams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_rx_datagrams/">udp_rx_datagrams</a></td>
<td>UInt64</td>
<td>The amount of incoming UDP datagrams observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_rx_acks/">udp_rx_acks</a></td>
<td>UInt64</td>
<td>The amount of incoming acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_rx_bytes/">udp_rx_bytes</a></td>
<td>UInt64</td>
<td>The total amount of bytes which have been transferred inside incoming UDP datagrams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/cwnd/">cwnd</a></td>
<td>UInt64</td>
<td>Current congestion window of the connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/congestion_events/">congestion_events</a></td>
<td>UInt64</td>
<td>Congestion events on the connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/structs/odinconnectionstats/rtt/">rtt</a></td>
<td>Single</td>
<td>Current best estimate of the connection latency (round-trip-time) in milliseconds</td>
</tr>
</tbody>
</table>
`}),e.add({id:1856,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/",title:"OdinConnectionStats",section:"ODIN Documentation",description:" Statistics for the underlying connection of a room. ",content:`<pre><code class="language-C#">public struct OdinConnectionStats
</code></pre>
<h1 id="heading"></h1>
<p>Statistics for the underlying connection of a room.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_tx_datagrams/">udp_tx_datagrams</a></td>
<td>The amount of outgoing UDP datagrams observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_tx_acks/">udp_tx_acks</a></td>
<td>The amount of outgoing acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_tx_bytes/">udp_tx_bytes</a></td>
<td>The total amount of bytes which have been transferred inside outgoing UDP datagrams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_rx_datagrams/">udp_rx_datagrams</a></td>
<td>The amount of incoming UDP datagrams observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_rx_acks/">udp_rx_acks</a></td>
<td>The amount of incoming acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_rx_bytes/">udp_rx_bytes</a></td>
<td>The total amount of bytes which have been transferred inside incoming UDP datagrams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/cwnd/">cwnd</a></td>
<td>Current congestion window of the connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/congestion_events/">congestion_events</a></td>
<td>Congestion events on the connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/structs/odinconnectionstats/rtt/">rtt</a></td>
<td>Current best estimate of the connection latency (round-trip-time) in milliseconds</td>
</tr>
</tbody>
</table>
`}),e.add({id:1857,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/",title:"OdinConnectionStats",section:"ODIN Documentation",description:" Statistics for the underlying connection of a room. ",content:`<pre><code class="language-C#">public struct OdinConnectionStats
</code></pre>
<h1 id="heading"></h1>
<p>Statistics for the underlying connection of a room.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/udp_tx_datagrams/">udp_tx_datagrams</a></td>
<td>The amount of outgoing UDP datagrams observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/udp_tx_acks/">udp_tx_acks</a></td>
<td>The amount of outgoing acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/udp_tx_bytes/">udp_tx_bytes</a></td>
<td>The total amount of bytes which have been transferred inside outgoing UDP datagrams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/udp_rx_datagrams/">udp_rx_datagrams</a></td>
<td>The amount of incoming UDP datagrams observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/udp_rx_acks/">udp_rx_acks</a></td>
<td>The amount of incoming acknowledgement frames observed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/udp_rx_bytes/">udp_rx_bytes</a></td>
<td>The total amount of bytes which have been transferred inside incoming UDP datagrams</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/cwnd/">cwnd</a></td>
<td>Current congestion window of the connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/congestion_events/">congestion_events</a></td>
<td>Congestion events on the connection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/structs/odinconnectionstats/rtt/">rtt</a></td>
<td>Current best estimate of the connection latency (round-trip-time) in milliseconds</td>
</tr>
</tbody>
</table>
`}),e.add({id:1858,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/",title:"OdinCustomEffectUnityComponentBase<U>",section:"ODIN Documentation",description:" Custom base component for This convenient class provides effect template with a passthrough of custom userdata on a callback. The abstract representation of a base custom effect is to simplify implementation of as a Unity component. (see other predefined custom effects) ",content:`<pre><code class="language-C#">public abstract class OdinCustomEffectUnityComponentBase&lt;U&gt; : MonoBehaviour, IOdinEffect where U : struct
</code></pre>
<h1 id="heading"></h1>
<p>Custom base component for Media</p>
<p>
This convenient class provides effect template with a passthrough of custom userdata on a callback.
The abstract representation of a base custom effect is to simplify implementation of Audio as a Unity component.
(see other predefined custom effects)
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/media/">Media</a></td>
<td>Get Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/effect/">Effect</a></td>
<td>Get base effect</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/iscreated/">IsCreated</a></td>
<td>Flag if the effect was added to the pipeline</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/isenabled/">IsEnabled</a></td>
<td>Flag if the component is active or use isActiveAndEnabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/destroyonerror/">DestroyOnError</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/geteffectuserdata/">GetEffectUserData</a></td>
<td>Get userdata used for the OdinCustomEffectUnityComponentBase%601</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/customeffectcallback/">CustomEffectCallback</a></td>
<td>Callback delegate for the effect</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/reseteffect/">ResetEffect</a></td>
<td>Removes an effect from the pipeline and add a new effect with callbacks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/getmedia/">GetMedia</a></td>
<td>Get Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/geteffect/">GetEffect</a></td>
<td>Get custom effect</td>
</tr>
</tbody>
</table>
`}),e.add({id:1859,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/",title:"OdinDatagramRecv",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinDatagramRecv
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/media_id/">media_id</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/rtt_milliseconds/">rtt_milliseconds</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/sequence_number/">sequence_number</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/timestamp/">timestamp</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/is_end_of_spurt/">is_end_of_spurt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/payload/">payload</a></td>
<td>byte[]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/payload_length/">payload_length</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/updatepinnedpayload/">UpdatePinnedPayload</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1860,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramsend/",title:"OdinDatagramSend",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinDatagramSend
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramsend/sequence_number/">sequence_number</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramsend/timestamp/">timestamp</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramsend/is_end_of_spurt/">is_end_of_spurt</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramsend/payload/">payload</a></td>
<td>byte[]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramsend/payload_length/">payload_length</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1861,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindecoderhandle/",title:"OdinDecoderHandle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinDecoderHandle : SafeHandleZeroOrMinusOneIsInvalid
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindecoderhandle/isalive/">IsAlive</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1862,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/",title:"OdinDefaults",section:"ODIN Documentation",description:" ODIN default configuration ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static class OdinDefaults
</code></pre>
<h1 id="heading"></h1>
<p>ODIN default configuration</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/verbose/">Verbose</a></td>
<td>Boolean</td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/debug/">Debug</a></td>
<td>Boolean</td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/server/">Server</a></td>
<td>String</td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/userdatatext/">UserDataText</a></td>
<td>String</td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/devicesamplerate/">DeviceSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Microphone default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/devicechannels/">DeviceChannels</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>Microphone default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/remotesamplerate/">RemoteSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Playback default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/remotechannels/">RemoteChannels</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>Playback default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/peerleftevent/">PeerLeftEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odindefaults/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
`}),e.add({id:1863,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/",title:"OdinDefaults",section:"ODIN Documentation",description:" ODIN default configuration ",content:`<pre><code class="language-C#">public static class OdinDefaults
</code></pre>
<h1 id="heading"></h1>
<p>ODIN default configuration</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/verbose/">Verbose</a></td>
<td>Boolean</td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/debug/">Debug</a></td>
<td>Boolean</td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/server/">Server</a></td>
<td>String</td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/userdatatext/">UserDataText</a></td>
<td>String</td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/devicesamplerate/">DeviceSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Microphone default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/devicechannels/">DeviceChannels</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>Microphone default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/remotesamplerate/">RemoteSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Playback default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/remotechannels/">RemoteChannels</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>Playback default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/peerleftevent/">PeerLeftEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odindefaults/gaincontroller/">GainController</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
`}),e.add({id:1864,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/",title:"OdinDefaults",section:"ODIN Documentation",description:" ODIN default configuration ",content:`<pre><code class="language-C#">public static class OdinDefaults
</code></pre>
<h1 id="heading"></h1>
<p>ODIN default configuration</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/verbose/">Verbose</a></td>
<td>Boolean</td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/debug/">Debug</a></td>
<td>Boolean</td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/server/">Server</a></td>
<td>String</td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/userdatatext/">UserDataText</a></td>
<td>String</td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/devicesamplerate/">DeviceSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Microphone default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/devicechannels/">DeviceChannels</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>Microphone default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/remotesamplerate/">RemoteSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Playback default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/remotechannels/">RemoteChannels</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>Playback default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/peerleftevent/">PeerLeftEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Boolean</td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odindefaults/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
`}),e.add({id:1865,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/",title:"OdinDefaults",section:"ODIN Documentation",description:" ODIN default configuration ",content:`<pre><code class="language-C#">public static class OdinDefaults
</code></pre>
<h1 id="heading"></h1>
<p>ODIN default configuration</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/verbose/">Verbose</a></td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/debug/">Debug</a></td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/accesskey/">AccessKey</a></td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/server/">Server</a></td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/userdatatext/">UserDataText</a></td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/devicesamplerate/">DeviceSampleRate</a></td>
<td>Microphone default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/devicechannels/">DeviceChannels</a></td>
<td>Microphone default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/remotesamplerate/">RemoteSampleRate</a></td>
<td>Playback default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/remotechannels/">RemoteChannels</a></td>
<td>Playback default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/peerleftevent/">PeerLeftEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/tokenlifetime/">TokenLifetime</a></td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/volumegate/">VolumeGate</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/echocanceller/">EchoCanceller</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/highpassfilter/">HighPassFilter</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/preamplifier/">PreAmplifier</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/transientsuppressor/">TransientSuppressor</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odindefaults/gaincontroller/">GainController</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
`}),e.add({id:1866,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/",title:"OdinDefaults",section:"ODIN Documentation",description:" ODIN default configuration ",content:`<pre><code class="language-C#">public static class OdinDefaults
</code></pre>
<h1 id="heading"></h1>
<p>ODIN default configuration</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/verbose/">Verbose</a></td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/debug/">Debug</a></td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/accesskey/">AccessKey</a></td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/server/">Server</a></td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/userdatatext/">UserDataText</a></td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/tokenlifetime/">TokenLifetime</a></td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/volumegate/">VolumeGate</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/echocanceller/">EchoCanceller</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/highpassfilter/">HighPassFilter</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/preamplifier/">PreAmplifier</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/transientsuppressor/">TransientSuppressor</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odindefaults/gaincontroller/">GainController</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
`}),e.add({id:1867,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/",title:"OdinDefaults",section:"ODIN Documentation",description:" ODIN default configuration ",content:`<pre><code class="language-C#">public static class OdinDefaults
</code></pre>
<h1 id="heading"></h1>
<p>ODIN default configuration</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/verbose/">Verbose</a></td>
<td>Enable additional logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/debug/">Debug</a></td>
<td>Enable additional debug logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/accesskey/">AccessKey</a></td>
<td>Default access key</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/server/">Server</a></td>
<td>Default server url</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/userdatatext/">UserDataText</a></td>
<td>Default text representation of UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/devicesamplerate/">DeviceSampleRate</a></td>
<td>Microphone default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/devicechannels/">DeviceChannels</a></td>
<td>Microphone default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/remotesamplerate/">RemoteSampleRate</a></td>
<td>Playback default Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/remotechannels/">RemoteChannels</a></td>
<td>Playback default Channel</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/peerleftevent/">PeerLeftEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Idicates whether the event is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/tokenlifetime/">TokenLifetime</a></td>
<td>JWT room token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Idicates the vad attack probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Idicates the vad release probability ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/volumegate/">VolumeGate</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Idicates the gate attack loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Idicates the gate release loudness ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/echocanceller/">EchoCanceller</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/highpassfilter/">HighPassFilter</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/preamplifier/">PreAmplifier</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Idicates the level of noise suppression ApmConfig setting by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/transientsuppressor/">TransientSuppressor</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odindefaults/gaincontroller/">GainController</a></td>
<td>Idicates whether the ApmConfig setting is enabled by default</td>
</tr>
</tbody>
</table>
`}),e.add({id:1868,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/",title:"OdinEditorConfig",section:"ODIN Documentation",description:" UnityEditor UI component for instance config of ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p><a href='/odin/sdk/unity/manual/odineditorconfig/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinEditorConfig : MonoBehaviour, IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>UnityEditor UI component for instance config of Odin</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/verbose/">Verbose</a></td>
<td>Boolean</td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/verbosedebug/">VerboseDebug</a></td>
<td>Boolean</td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Odin Client ApiKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/clientid/">ClientId</a></td>
<td>String</td>
<td>Odin Client ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/server/">Server</a></td>
<td>String</td>
<td>Gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/userdatatext/">UserDataText</a></td>
<td>String</td>
<td>Default UserData content</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Microphone Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicechannels/">DeviceChannels</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>Microphone Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Playback Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/remotechannels/">RemoteChannels</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>Playback Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/peerleftevent/">PeerLeftEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>Time untill the token expires</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Turns VAD on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Setup engage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Setup disengage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Turns volume gate on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Setup engage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Setup disengage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Turns Echo cancellation on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Reduces lower frequencies of the input (Automatic game control)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Amplifies the audio input</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Turns noise suppression on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Filters high amplitude noices</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/generateuiaccesskey/">GenerateUIAccessKey</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1869,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/",title:"OdinEditorConfig",section:"ODIN Documentation",description:" UnityEditor UI component for instance config of ",content:`<pre><code class="language-C#">public class OdinEditorConfig : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>UnityEditor UI component for instance config of Odin</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/verbose/">Verbose</a></td>
<td>Boolean</td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/verbosedebug/">VerboseDebug</a></td>
<td>Boolean</td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Odin Client ApiKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/clientid/">ClientId</a></td>
<td>String</td>
<td>Odin Client ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/server/">Server</a></td>
<td>String</td>
<td>Gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/userdatatext/">UserDataText</a></td>
<td>String</td>
<td>Default UserData content</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Microphone Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicechannels/">DeviceChannels</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>Microphone Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Playback Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/remotechannels/">RemoteChannels</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>Playback Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/peerleftevent/">PeerLeftEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>Time untill the token expires</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Turns VAD on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Setup engage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Setup disengage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Turns volume gate on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Setup engage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Setup disengage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Turns Echo cancellation on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Reduces lower frequencies of the input (Automatic game control)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Amplifies the audio input</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Turns noise suppression on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Filters high amplitude noices</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/gaincontroller/">GainController</a></td>
<td>Boolean</td>
<td>Turns gain controller on and off</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/generateuiaccesskey/">GenerateUIAccessKey</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1870,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/",title:"OdinEditorConfig",section:"ODIN Documentation",description:" UnityEditor UI component for instance config of ",content:`<pre><code class="language-C#">public class OdinEditorConfig : MonoBehaviour, IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>UnityEditor UI component for instance config of Odin</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/verbose/">Verbose</a></td>
<td>Boolean</td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/verbosedebug/">VerboseDebug</a></td>
<td>Boolean</td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Odin Client ApiKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/clientid/">ClientId</a></td>
<td>String</td>
<td>Odin Client ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/server/">Server</a></td>
<td>String</td>
<td>Gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/userdatatext/">UserDataText</a></td>
<td>String</td>
<td>Default UserData content</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Microphone Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicechannels/">DeviceChannels</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>Microphone Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>Playback Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/remotechannels/">RemoteChannels</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>Playback Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/peerjoinedevent/">PeerJoinedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/peerleftevent/">PeerLeftEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/mediaaddedevent/">MediaAddedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/mediaremovedevent/">MediaRemovedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/messagereceivedevent/">MessageReceivedEvent</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>Time untill the token expires</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Turns VAD on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Setup engage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Setup disengage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Turns volume gate on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Setup engage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Setup disengage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Turns Echo cancellation on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Reduces lower frequencies of the input (Automatic game control)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Amplifies the audio input</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Turns noise suppression on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Filters high amplitude noices</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/gaincontroller/">GainController</a></td>
<td>Boolean</td>
<td>Turns gain controller on and off</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/generateuiaccesskey/">GenerateUIAccessKey</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1871,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/",title:"OdinEditorConfig",section:"ODIN Documentation",description:" UnityEditor UI component for instance config of ",content:`<pre><code class="language-C#">public class OdinEditorConfig : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>UnityEditor UI component for instance config of Odin</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/verbose/">Verbose</a></td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/verbosedebug/">VerboseDebug</a></td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/accesskey/">AccessKey</a></td>
<td>Odin Client ApiKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/clientid/">ClientId</a></td>
<td>Odin Client ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/server/">Server</a></td>
<td>Gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/userdatatext/">UserDataText</a></td>
<td>Default UserData content</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a></td>
<td>Microphone Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/devicechannels/">DeviceChannels</a></td>
<td>Microphone Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a></td>
<td>Playback Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/remotechannels/">RemoteChannels</a></td>
<td>Playback Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/peerjoinedevent/">PeerJoinedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/peerleftevent/">PeerLeftEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/mediaaddedevent/">MediaAddedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/mediaremovedevent/">MediaRemovedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/messagereceivedevent/">MessageReceivedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/tokenlifetime/">TokenLifetime</a></td>
<td>Time untill the token expires</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Turns VAD on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Setup engage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Setup disengage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/volumegate/">VolumeGate</a></td>
<td>Turns volume gate on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Setup engage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Setup disengage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/echocanceller/">EchoCanceller</a></td>
<td>Turns Echo cancellation on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/highpassfilter/">HighPassFilter</a></td>
<td>Reduces lower frequencies of the input (Automatic game control)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/preamplifier/">PreAmplifier</a></td>
<td>Amplifies the audio input</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Turns noise suppression on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Filters high amplitude noices</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/gaincontroller/">GainController</a></td>
<td>Turns gain controller on and off</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odineditorconfig/generateuiaccesskey/">GenerateUIAccessKey</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1872,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/",title:"OdinEditorConfig",section:"ODIN Documentation",description:" UnityEditor UI component for instance config of ",content:`<p><a href='/odin/sdk/unity/1.6.6/manual/odineditorconfig/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinEditorConfig : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>UnityEditor UI component for instance config of Odin</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/verbose/">Verbose</a></td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/verbosedebug/">VerboseDebug</a></td>
<td>Enable additional Logs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/accesskey/">AccessKey</a></td>
<td>Odin Client ApiKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/clientid/">ClientId</a></td>
<td>Odin Client ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/server/">Server</a></td>
<td>Gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/userdatatext/">UserDataText</a></td>
<td>Default UserData content</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a></td>
<td>Microphone Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/devicechannels/">DeviceChannels</a></td>
<td>Microphone Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a></td>
<td>Playback Sample-Rate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/remotechannels/">RemoteChannels</a></td>
<td>Playback Channels</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/peerjoinedevent/">PeerJoinedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/peerleftevent/">PeerLeftEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/peerupdatedevent/">PeerUpdatedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/mediaaddedevent/">MediaAddedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/mediaremovedevent/">MediaRemovedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/roomupdatedevent/">RoomUpdatedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/mediaactivestatechangedevent/">MediaActiveStateChangedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/messagereceivedevent/">MessageReceivedEvent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/tokenlifetime/">TokenLifetime</a></td>
<td>Time untill the token expires</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Turns VAD on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Setup engage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Setup disengage of VAD</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/volumegate/">VolumeGate</a></td>
<td>Turns volume gate on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Setup engage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Setup disengage of volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/echocanceller/">EchoCanceller</a></td>
<td>Turns Echo cancellation on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/highpassfilter/">HighPassFilter</a></td>
<td>Reduces lower frequencies of the input (Automatic game control)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/preamplifier/">PreAmplifier</a></td>
<td>Amplifies the audio input</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Turns noise suppression on and off</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Filters high amplitude noices</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/gaincontroller/">GainController</a></td>
<td>Turns gain controller on and off</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odineditorconfig/generateuiaccesskey/">GenerateUIAccessKey</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1873,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odineffecttype/",title:"OdinEffectType",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public enum OdinEffectType
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/odin_effect_type_vad/">ODIN_EFFECT_TYPE_VAD</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/odin_effect_type_apm/">ODIN_EFFECT_TYPE_APM</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odineffecttype/odin_effect_type_custom/">ODIN_EFFECT_TYPE_CUSTOM</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1874,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinencoderhandle/",title:"OdinEncoderHandle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinEncoderHandle : SafeHandleZeroOrMinusOneIsInvalid
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinencoderhandle/isalive/">IsAlive</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1875,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinerror/",title:"OdinError",section:"ODIN Documentation",description:" Odin error codes where negative values are errors and positive values status codes Successful status code equivalent with &quot;end of data&quot;Successful status code generic OK ",content:`<pre><code class="language-C#">public enum OdinError
</code></pre>
<h1 id="heading"></h1>
<p>Odin error codes where negative values are errors and positive values status codes</p>
<ul><li>OdinErrorSuccessful status code generic OK</li></ul>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_no_data/">ODIN_ERROR_NO_DATA</a></td>
<td>Successful status code equivalent with &quot;end of data&quot;</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_success/">ODIN_ERROR_SUCCESS</a></td>
<td>Successful status code OK</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_apm_error/">ODIN_ERROR_APM_ERROR</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_invalid_string/">ODIN_ERROR_ARGUMENT_INVALID_STRING</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_invalid_handle/">ODIN_ERROR_ARGUMENT_INVALID_HANDLE</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_null/">ODIN_ERROR_ARGUMENT_NULL</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_invalid_id/">ODIN_ERROR_ARGUMENT_INVALID_ID</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_argument_out_of_bounds/">ODIN_ERROR_ARGUMENT_OUT_OF_BOUNDS</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_end_argument_errors/">ODIN_ERROR_END_ARGUMENT_ERRORS</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_initialization_failed/">ODIN_ERROR_INITIALIZATION_FAILED</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_access_key/">ODIN_ERROR_INVALID_ACCESS_KEY</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_gateway_uri/">ODIN_ERROR_INVALID_GATEWAY_URI</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_state/">ODIN_ERROR_INVALID_STATE</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_token/">ODIN_ERROR_INVALID_TOKEN</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_invalid_version/">ODIN_ERROR_INVALID_VERSION</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_opus_error/">ODIN_ERROR_OPUS_ERROR</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_decoder_error/">ODIN_ERROR_DECODER_ERROR</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_token_room_rejected/">ODIN_ERROR_TOKEN_ROOM_REJECTED</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_unsupported_version/">ODIN_ERROR_UNSUPPORTED_VERSION</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_unsupported_effect/">ODIN_ERROR_UNSUPPORTED_EFFECT</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/odin_error_closed/">ODIN_ERROR_CLOSED</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1876,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/odinerrortostring/",title:"OdinErrorToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static string OdinErrorToString(NativeBindings.OdinError error)
</code></pre>
<p>Retrieves the name of the constant in the specified NativeBindings</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td>Odin error return code</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation of <xref href="OdinNative.Core.Imports.NativeBindings.OdinError" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:1877,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odineventpayload/",title:"OdinEventPayload",section:"ODIN Documentation",description:"The base event payload that is passed to all events.",content:`<pre><code class="language-TypeScript">export interface OdinEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The base event payload that is passed to all events.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odineventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odineventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1878,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/",title:"OdinEvents",section:"ODIN Documentation",description:"Defines available Odin events",content:`<pre><code class="language-TypeScript">export interface OdinEvents
</code></pre>
<h1 id="heading"></h1>
<p>Defines available Odin events</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/audiodatareceived/">AudioDataReceived</a></td>
<td><a href="/odin/sdk/nodejs/types/odinaudiodatareceivedevent/">OdinAudioDataReceivedEvent</a></td>
<td>Fired when audio data is available for media streams. Audio comes in 16 bit and 32 bit float samples and are available individually for each peer. You can use the samples to record audio or send them to an AI for transcription.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/connectionstatechanged/">ConnectionStateChanged</a></td>
<td><a href="/odin/sdk/nodejs/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></td>
<td>Fired when the connection state of the room changed.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/joined/">Joined</a></td>
<td><a href="/odin/sdk/nodejs/types/odinjoinedevent/">OdinJoinedEvent</a></td>
<td>Fired when the local user connected to the room (successfully joined).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/left/">Left</a></td>
<td><a href="/odin/sdk/nodejs/types/odinleftevent/">OdinLeftEvent</a></td>
<td>Fired when the local user disconnected from the room (left).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/mediaactivity/">MediaActivity</a></td>
<td><a href="/odin/sdk/nodejs/types/odinmediaactivityevent/">OdinMediaActivityEvent</a></td>
<td>Fired when a media stream was activated or deactivated. The active flag is true if the user started to talk and false if the user stopped talking.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/mediaadded/">MediaAdded</a></td>
<td><a href="/odin/sdk/nodejs/types/odinmediaaddedevent/">OdinMediaAddedEvent</a></td>
<td>Fired when a media stream was added to a peer. This happens for example if a peer adds a microphone to the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/mediaremoved/">MediaRemoved</a></td>
<td><a href="/odin/sdk/nodejs/types/odinmediaremovedevent/">OdinMediaRemovedEvent</a></td>
<td>Fired when a media stream was removed from a peer. This happens for example if a peer removes a microphone from the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/messagereceived/">MessageReceived</a></td>
<td><a href="/odin/sdk/nodejs/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></td>
<td>Fired when a remote peer sent a message to the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/peerjoined/">PeerJoined</a></td>
<td><a href="/odin/sdk/nodejs/types/odinpeerjoinedevent/">OdinPeerJoinedEvent</a></td>
<td>Fired when a remote peer joined the room. This event is fired for all existing peers in the room before the Joined event is fired.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/peerleft/">PeerLeft</a></td>
<td><a href="/odin/sdk/nodejs/types/odinpeerleftevent/">OdinPeerLeftEvent</a></td>
<td>Fired when a remote peer left the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/peeruserdatachanged/">PeerUserDataChanged</a></td>
<td><a href="/odin/sdk/nodejs/types/odinpeeruserdatachangedevent/">OdinPeerUserDataChangedEvent</a></td>
<td>Fired when the user data of a remote peer changed.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinevents/roomuserdatachanged/">RoomUserDataChanged</a></td>
<td><a href="/odin/sdk/nodejs/types/odinroomuserdatachangedevent/">OdinRoomUserDataChangedEvent</a></td>
<td>Fired when the user data of the room changed.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1879,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinexception/",title:"OdinException",section:"ODIN Documentation",description:" Exception type for the native ODIN runtime ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class OdinException : Exception
</code></pre>
<h1 id="heading"></h1>
<p>Exception type for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinexception/errorcode/">ErrorCode</a></td>
<td>UInt32</td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
`}),e.add({id:1880,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinexception/",title:"OdinException",section:"ODIN Documentation",description:" Exception type for the native ODIN runtime ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinException : Exception, ISerializable, _Exception
</code></pre>
<h1 id="heading"></h1>
<p>Exception type for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinexception/errorcode/">ErrorCode</a></td>
<td>UInt32</td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
`}),e.add({id:1881,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinexception/",title:"OdinException",section:"ODIN Documentation",description:" Exception type for the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinException : Exception
</code></pre>
<h1 id="heading"></h1>
<p>Exception type for the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinexception/errorcode/">ErrorCode</a></td>
<td>UInt32</td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
`}),e.add({id:1882,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinexception/",title:"OdinException",section:"ODIN Documentation",description:" Exception type for the native ODIN runtime ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinException : Exception, ISerializable, _Exception
</code></pre>
<h1 id="heading"></h1>
<p>Exception type for the native ODIN runtime</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinexception/constructor_0/">OdinException(UInt32, String)</a></td>
<td>OdinErrorCode container</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinexception/constructor_1/">OdinException(UInt32, String, Exception)</a></td>
<td>OdinErrorCode container</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinexception/errorcode/">ErrorCode</a></td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
`}),e.add({id:1883,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinexception/",title:"OdinException",section:"ODIN Documentation",description:" Exception type for the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinException : Exception
</code></pre>
<h1 id="heading"></h1>
<p>Exception type for the native ODIN runtime</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinexception/constructor_0/">OdinException(OdinError, String)</a></td>
<td>OdinErrorCode container</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinexception/constructor_1/">OdinException(OdinError, String, Exception)</a></td>
<td>OdinErrorCode container</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinexception/errorcode/">ErrorCode</a></td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
`}),e.add({id:1884,href:"https://www.4players.io/odin/sdk/unity/classes/odinexception/",title:"OdinException",section:"ODIN Documentation",description:" Exception type for the native ODIN runtime ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinException : Exception, ISerializable, _Exception
</code></pre>
<h1 id="heading"></h1>
<p>Exception type for the native ODIN runtime</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinexception/constructor_0/">OdinException(UInt32, String)</a></td>
<td>OdinErrorCode container</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinexception/constructor_1/">OdinException(UInt32, String, Exception)</a></td>
<td>OdinErrorCode container</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinexception/errorcode/">ErrorCode</a></td>
<td>OdinErrorCode</td>
</tr>
</tbody>
</table>
`}),e.add({id:1885,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinexception/constructor_1/",title:"OdinException(OdinError, String, Exception)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinException(OdinError error, string message, Exception innerException)
</code></pre>
<p>OdinErrorCode container</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>OdinError enum</td>
</tr>
<tr>
<td>message</td>
<td>odin error message</td>
</tr>
<tr>
<td>innerException</td>
<td>wrapper inner</td>
</tr>
</tbody>
</table>
`}),e.add({id:1886,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinexception/constructor_0/",title:"OdinException(OdinError, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinException(OdinError error, string message)
</code></pre>
<p>OdinErrorCode container</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>OdinError enum</td>
</tr>
<tr>
<td>message</td>
<td>odin error message</td>
</tr>
</tbody>
</table>
`}),e.add({id:1887,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinexception/constructor_1/",title:"OdinException(UInt32, String, Exception)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinException(uint error, string message, Exception innerException)
</code></pre>
<p>OdinErrorCode container</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>OdinErrorCode</td>
</tr>
<tr>
<td>message</td>
<td>odin error message</td>
</tr>
<tr>
<td>innerException</td>
<td>wrapper inner</td>
</tr>
</tbody>
</table>
`}),e.add({id:1888,href:"https://www.4players.io/odin/sdk/unity/classes/odinexception/constructor_1/",title:"OdinException(UInt32, String, Exception)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinException(uint error, string message, Exception innerException)
</code></pre>
<p>OdinErrorCode container</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>OdinErrorCode</td>
</tr>
<tr>
<td>message</td>
<td>odin error message</td>
</tr>
<tr>
<td>innerException</td>
<td>wrapper inner</td>
</tr>
</tbody>
</table>
`}),e.add({id:1889,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinexception/constructor_0/",title:"OdinException(UInt32, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinException(uint error, string message)
</code></pre>
<p>OdinErrorCode container</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>OdinErrorCode</td>
</tr>
<tr>
<td>message</td>
<td>odin error message</td>
</tr>
</tbody>
</table>
`}),e.add({id:1890,href:"https://www.4players.io/odin/sdk/unity/classes/odinexception/constructor_0/",title:"OdinException(UInt32, String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinException(uint error, string message)
</code></pre>
<p>OdinErrorCode container</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>error</td>
<td>OdinErrorCode</td>
</tr>
<tr>
<td>message</td>
<td>odin error message</td>
</tr>
</tbody>
</table>
`}),e.add({id:1891,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/",title:"OdinHandler",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p><a href='/odin/sdk/unity/manual/odinhandler/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinHandler : MonoBehaviour
</code></pre>
<h2 id="discussion">Discussion</h2>




<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/hasconnections/">HasConnections</a></td>
<td>Boolean</td>
<td>True if any Room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/microphone/">Microphone</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonereader/">MicrophoneReader</a></td>
<td>Unity Component that handles one Microphone where data gets routed through (n) Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/rooms/">Rooms</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onroomjoin/">OnRoomJoin</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>Called before an actual room join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onroomjoined/">OnRoomJoined</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>Called after a room is joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onroomleave/">OnRoomLeave</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>Called before a room leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onroomleft/">OnRoomLeft</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>Called after a room is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onpeerjoined/">OnPeerJoined</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>Called on every Peer that joins the room(s) we're connected to</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>Called on every Peer that updates his UserData in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onpeerleft/">OnPeerLeft</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>Called on every Peer that left in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaadded/">OnMediaAdded</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>Called on every Peer that created a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>Called on every Peer that closed/destroyed one of his own media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>Called on every activity change of a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>Called on the Room that updates his UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onmessagereceived/">OnMessageReceived</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>Called on every Peer that received message from a peer by <see cref="!:OdinNative.Odin.Room.Room.SendMessage(ulong, byte[])"></see></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>Called on the Room that changed the connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/oncreatedmediaobject/">OnCreatedMediaObject</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/unityaudiosourcetag/">UnityAudioSourceTag</a></td>
<td>String</td>
<td>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/use3daudio/">Use3DAudio</a></td>
<td>Boolean</td>
<td>Enable 3D Audio via preset Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/createplayback/">CreatePlayback</a></td>
<td>Boolean</td>
<td>Creates Room_OnMediaAdded(System events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/playbackaudiomixer/">PlaybackAudioMixer</a></td>
<td>AudioMixer</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/playbackaudiomixergroup/">PlaybackAudioMixerGroup</a></td>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/config/">Config</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>Static reference to the global Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/instance/">Instance</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/">OdinHandler</a></td>
<td>Singleton reference to this OdinHandler</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getuserdata/">GetUserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/joinroom/">JoinRoom</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/leaveroom/">LeaveRoom</a></td>
<td>Leave and free the Room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/addplaybackcomponent/">AddPlaybackComponent</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getorcreatemicrophonestream/">GetOrCreateMicrophoneStream</a></td>
<td>Returns the attached Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/roomssetpositionscale/">RoomsSetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/roomsupdateposition/">RoomsUpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/updateuserdata/">UpdateUserData</a></td>
<td>Updates the UserData for all <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getroom/">GetRoom</a></td>
<td>Gets the room object from Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getpeer/">GetPeer</a></td>
<td>Gets the a Peer object from a specified room matching a peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getmedia/">GetMedia</a></td>
<td>Get the PlaybackStream of a peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getpeers/">GetPeers</a></td>
<td>Get all remote peers inside a room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getplaybackcomponents/">GetPlaybackComponents</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/getplaybackcomponent/">GetPlaybackComponent</a></td>
<td>Gets a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinhandler/destroyplaybackcomponents/">DestroyPlaybackComponents</a></td>
<td>Destroys all Audio instances</td>
</tr>
</tbody>
</table>
`}),e.add({id:1892,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/",title:"OdinHandler",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinHandler : MonoBehaviour
</code></pre>
<h2 id="discussion">Discussion</h2>




<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/hasconnections/">HasConnections</a></td>
<td>Boolean</td>
<td>True if any Room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/microphone/">Microphone</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonereader/">MicrophoneReader</a></td>
<td>Unity Component that handles one Microphone where data gets routed through (n) Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/rooms/">Rooms</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onroomjoin/">OnRoomJoin</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>Called before an actual room join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onroomjoined/">OnRoomJoined</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>Called after a room is joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onroomleave/">OnRoomLeave</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>Called before a room leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onroomleft/">OnRoomLeft</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>Called after a room is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onpeerjoined/">OnPeerJoined</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>Called on every Peer that joins the room(s) we're connected to</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>Called on every Peer that updates his UserData in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onpeerleft/">OnPeerLeft</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>Called on every Peer that left in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaadded/">OnMediaAdded</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>Called on every Peer that created a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>Called on every Peer that closed/destroyed one of his own media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>Called on every activity change of a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>Called on the Room that updates his UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onmessagereceived/">OnMessageReceived</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>Called on the Room that changed the connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/oncreatedmediaobject/">OnCreatedMediaObject</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/unityaudiosourcetag/">UnityAudioSourceTag</a></td>
<td>String</td>
<td>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/use3daudio/">Use3DAudio</a></td>
<td>Boolean</td>
<td>Enable 3D Audio via preset Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/createplayback/">CreatePlayback</a></td>
<td>Boolean</td>
<td>Creates Room_OnMediaAdded(System events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/playbackaudiomixer/">PlaybackAudioMixer</a></td>
<td>AudioMixer</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/playbackaudiomixergroup/">PlaybackAudioMixerGroup</a></td>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/config/">Config</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>Static reference to the global Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/instance/">Instance</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/">OdinHandler</a></td>
<td>Singleton reference to this OdinHandler</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getuserdata/">GetUserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/joinroom/">JoinRoom</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/leaveroom/">LeaveRoom</a></td>
<td>Leave and free the Room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/addplaybackcomponent/">AddPlaybackComponent</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getorcreatemicrophonestream/">GetOrCreateMicrophoneStream</a></td>
<td>Returns the attached Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/roomssetpositionscale/">RoomsSetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/roomsupdateposition/">RoomsUpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getroom/">GetRoom</a></td>
<td>Gets the room object from Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getpeer/">GetPeer</a></td>
<td>Gets the a Peer object from a specified room matching a peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getmedia/">GetMedia</a></td>
<td>Get the PlaybackStream of a peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getpeers/">GetPeers</a></td>
<td>Get all remote peers inside a room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getplaybackcomponents/">GetPlaybackComponents</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/getplaybackcomponent/">GetPlaybackComponent</a></td>
<td>Gets a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinhandler/destroyplaybackcomponents/">DestroyPlaybackComponents</a></td>
<td>Destroys all Audio instances</td>
</tr>
</tbody>
</table>
`}),e.add({id:1893,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/",title:"OdinHandler",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinHandler : MonoBehaviour
</code></pre>
<h2 id="discussion">Discussion</h2>




<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/hasconnections/">HasConnections</a></td>
<td>Boolean</td>
<td>True if any Room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/microphone/">Microphone</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonereader/">MicrophoneReader</a></td>
<td>Unity Component that handles one Microphone where data gets routed through (n) Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/rooms/">Rooms</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onroomjoin/">OnRoomJoin</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td>Called before an actual room join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onroomjoined/">OnRoomJoined</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td>Called after a room is joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onroomleave/">OnRoomLeave</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td>Called before a room leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onroomleft/">OnRoomLeft</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td>Called after a room is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onpeerjoined/">OnPeerJoined</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td>Called on every Peer that joins the room(s) we're connected to</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td>Called on every Peer that updates his UserData in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onpeerleft/">OnPeerLeft</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td>Called on every Peer that left in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaadded/">OnMediaAdded</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td>Called on every Peer that created a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td>Called on every Peer that closed/destroyed one of his own media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td>Called on every activity change of a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td>Called on the Room that updates his UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onmessagereceived/">OnMessageReceived</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td>Called on the Room that changed the connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/oncreatedmediaobject/">OnCreatedMediaObject</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/unityaudiosourcetag/">UnityAudioSourceTag</a></td>
<td>String</td>
<td>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/use3daudio/">Use3DAudio</a></td>
<td>Boolean</td>
<td>Enable 3D Audio via preset Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/createplayback/">CreatePlayback</a></td>
<td>Boolean</td>
<td>Creates Room_OnMediaAdded(System events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/playbackaudiomixer/">PlaybackAudioMixer</a></td>
<td>AudioMixer</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/playbackaudiomixergroup/">PlaybackAudioMixerGroup</a></td>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/config/">Config</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/">OdinEditorConfig</a></td>
<td>Static reference to the global Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/instance/">Instance</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/">OdinHandler</a></td>
<td>Singleton reference to this OdinHandler</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getuserdata/">GetUserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/joinroom/">JoinRoom</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/leaveroom/">LeaveRoom</a></td>
<td>Leave and free the Room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/addplaybackcomponent/">AddPlaybackComponent</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getorcreatemicrophonestream/">GetOrCreateMicrophoneStream</a></td>
<td>Returns the attached Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/roomssetpositionscale/">RoomsSetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/roomsupdateposition/">RoomsUpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getroom/">GetRoom</a></td>
<td>Gets the room object from Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getpeer/">GetPeer</a></td>
<td>Gets the a Peer object from a specified room matching a peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getmedia/">GetMedia</a></td>
<td>Get the PlaybackStream of a peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getpeers/">GetPeers</a></td>
<td>Get all remote peers inside a room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getplaybackcomponents/">GetPlaybackComponents</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/getplaybackcomponent/">GetPlaybackComponent</a></td>
<td>Gets a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinhandler/destroyplaybackcomponents/">DestroyPlaybackComponents</a></td>
<td>Destroys all Audio instances</td>
</tr>
</tbody>
</table>
`}),e.add({id:1894,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/",title:"OdinHandler",section:"ODIN Documentation",description:" The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes. ",content:`<pre><code class="language-C#">public class OdinHandler : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/hasconnections/">HasConnections</a></td>
<td>True if any Room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/microphone/">Microphone</a></td>
<td>Unity Component that handles one Microphone where data gets routed through (n) Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/rooms/">Rooms</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onroomjoin/">OnRoomJoin</a></td>
<td>Called before an actual room join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onroomjoined/">OnRoomJoined</a></td>
<td>Called after a room is joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onroomleave/">OnRoomLeave</a></td>
<td>Called before a room leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onroomleft/">OnRoomLeft</a></td>
<td>Called after a room is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onpeerjoined/">OnPeerJoined</a></td>
<td>Called on every Peer that joins the room(s) we're connected to</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td>Called on every Peer that updates his UserData in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onpeerleft/">OnPeerLeft</a></td>
<td>Called on every Peer that left in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onmediaadded/">OnMediaAdded</a></td>
<td>Called on every Peer that created a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></td>
<td>Called on every Peer that closed/destroyed one of his own media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td>Called on every activity change of a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td>Called on the Room that updates his UserData. Changing a Room's UserData is only possible via request to Odin server API, but not supported inside the client SDK.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onmessagereceived/">OnMessageReceived</a></td>
<td>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td>Called on the Room that changed the connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/oncreatedmediaobject/">OnCreatedMediaObject</a></td>
<td>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></td>
<td>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/unityaudiosourcetag/">UnityAudioSourceTag</a></td>
<td>Identify by Unity-Tag to attach a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/use3daudio/">Use3DAudio</a></td>
<td>Enable 3D Audio via preset Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/createplayback/">CreatePlayback</a></td>
<td>Creates Room_OnMediaAdded(System events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/playbackaudiomixer/">PlaybackAudioMixer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/playbackaudiomixergroup/">PlaybackAudioMixerGroup</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/config/">Config</a></td>
<td>Static reference to the global Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/instance/">Instance</a></td>
<td>Singleton reference to this OdinHandler</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getuserdata/">GetUserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/joinroom/">JoinRoom</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/leaveroom/">LeaveRoom</a></td>
<td>Leave and free the Room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/addplaybackcomponent/">AddPlaybackComponent</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getorcreatemicrophonestream/">GetOrCreateMicrophoneStream</a></td>
<td>Returns the attached Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/roomssetpositionscale/">RoomsSetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/roomsupdateposition/">RoomsUpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getroom/">GetRoom</a></td>
<td>Gets the room object from Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getpeer/">GetPeer</a></td>
<td>Gets the a Peer object from a specified room matching a peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getmedia/">GetMedia</a></td>
<td>Get the PlaybackStream of a peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getpeers/">GetPeers</a></td>
<td>Get all remote peers inside a room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getplaybackcomponents/">GetPlaybackComponents</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/getplaybackcomponent/">GetPlaybackComponent</a></td>
<td>Gets a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinhandler/destroyplaybackcomponents/">DestroyPlaybackComponents</a></td>
<td>Destroys all Audio instances</td>
</tr>
</tbody>
</table>
`}),e.add({id:1895,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/",title:"OdinHandler",section:"ODIN Documentation",description:" The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes. ",content:`<p><a href='/odin/sdk/unity/1.6.6/manual/odinhandler/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinHandler : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>The OdinHandler class is the global ODIN manager within Unity. It’s built as a singleton. Create an empty game object in your scene and add this script to it. OdinHandler uses DontDestroyOnLoad to keep the singleton alive even if the scene changes.</p>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinHandler</code> class is the global ODIN manager within Unity. It&rsquo;s built as a singleton. Create an empty game object
in your scene and add this script to it. <code>OdinHandler</code> uses <code>DontDestroyOnLoad</code>
 to keep the singleton
alive even if the scene changes.</p>
<p>You can access the global singleton instance with the <span class="external-reference">Instance <a href="/odin/sdk/unity/classes/odinhandler/instance/"><i class="fas fa-external-link-alt"></i></a></span>
 property.</p>
</div>



<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/hasconnections/">HasConnections</a></td>
<td>True if any Room is joined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/microphone/">Microphone</a></td>
<td>Unity Component that handles one Microphone where data gets routed through (n) Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/">OnRoomJoin</a></td>
<td>Called before an actual room join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/">OnRoomJoined</a></td>
<td>Called after a room is joined successfully</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onroomleave/">OnRoomLeave</a></td>
<td>Called before a room leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onroomleft/">OnRoomLeft</a></td>
<td>Called after a room is destroyed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/">OnPeerJoined</a></td>
<td>Called on every Peer that joins the room(s) we're connected to</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td>Called on every Peer that updates his UserData in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/">OnPeerLeft</a></td>
<td>Called on every Peer that left in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/">OnMediaAdded</a></td>
<td>Called on every Peer that created a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></td>
<td>Called on every Peer that closed/destroyed one of his own media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td>Called on every activity change of a media in the same room(s)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td>Called on the Room that updates his UserData. Changing a Room's UserData is only possible via request to Odin server API, but not supported inside the client SDK.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/">OnMessageReceived</a></td>
<td>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td>Called on the Room that changed the connection state</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/">OnCreatedMediaObject</a></td>
<td>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></td>
<td>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/unityaudiosourcetag/">UnityAudioSourceTag</a></td>
<td>Identify by Unity-Tag to attach a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/use3daudio/">Use3DAudio</a></td>
<td>Enable 3D Audio via preset Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/createplayback/">CreatePlayback</a></td>
<td>Creates Room_OnMediaAdded(System events</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/playbackaudiomixer/">PlaybackAudioMixer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/playbackaudiomixergroup/">PlaybackAudioMixerGroup</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/config/">Config</a></td>
<td>Static reference to the global Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/instance/">Instance</a></td>
<td>Singleton reference to this OdinHandler</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getuserdata/">GetUserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/joinroom/">JoinRoom</a></td>
<td>Join or create a room by name and attach a Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/leaveroom/">LeaveRoom</a></td>
<td>Leave and free the Room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/">AddPlaybackComponent</a></td>
<td>Tries to identifiy a gameobject by tag to assign the PlaybackComponent</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getorcreatemicrophonestream/">GetOrCreateMicrophoneStream</a></td>
<td>Returns the attached Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/roomssetpositionscale/">RoomsSetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/roomsupdateposition/">RoomsUpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in each room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/updateuserdata/">UpdateUserData</a></td>
<td>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getroom/">GetRoom</a></td>
<td>Gets the room object from Odin</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getpeer/">GetPeer</a></td>
<td>Gets the a Peer object from a specified room matching a peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getmedia/">GetMedia</a></td>
<td>Get the PlaybackStream of a peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getpeers/">GetPeers</a></td>
<td>Get all remote peers inside a room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getplaybackcomponents/">GetPlaybackComponents</a></td>
<td>Gets all Audio across all rooms</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/getplaybackcomponent/">GetPlaybackComponent</a></td>
<td>Gets a Audio</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents/">DestroyPlaybackComponents</a></td>
<td>Destroys all Audio instances</td>
</tr>
</tbody>
</table>
`}),e.add({id:1896,href:"https://www.4players.io/odin/sdk/nodejs/types/odinjoinedevent/",title:"OdinJoinedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinJoinedEvent = (event: OdinJoinedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinJoinedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1897,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/",title:"OdinJoinedEventPayload",section:"ODIN Documentation",description:"The payload for the Joined event.",content:`<pre><code class="language-TypeScript">export interface OdinJoinedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the Joined event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/ownpeerid/">ownPeerId</a></td>
<td>number</td>
<td>The ID of the local peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/ownuserid/">ownUserId</a></td>
<td>string</td>
<td>The ID of the local user. It is the same as the user id that was passed to join.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/roomid/">roomId</a></td>
<td>string</td>
<td>The ID of the room that was joined. It&rsquo;s the same as the room id that was passed to join.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/roomuserdata/">roomUserData</a></td>
<td>undefined | Uint8Array</td>
<td>The current user data of the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1898,href:"https://www.4players.io/odin/sdk/nodejs/types/odinleftevent/",title:"OdinLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinLeftEvent = (event: OdinLeftEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinLeftEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1899,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinlefteventpayload/",title:"OdinLeftEventPayload",section:"ODIN Documentation",description:"The payload for the Left event.",content:`<pre><code class="language-TypeScript">export interface OdinLeftEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the Left event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinlefteventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinlefteventpayload/roomid/">roomId</a></td>
<td>string</td>
<td>The ID of the room that was left. It&rsquo;s the same as the room id that was passed to join.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinlefteventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1900,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibrary/",title:"OdinLibrary",section:"ODIN Documentation",description:" Main lib entry class ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static class OdinLibrary
</code></pre>
<h1 id="heading"></h1>
<p>Main lib entry class</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibrary/isinitialized/">IsInitialized</a></td>
<td>Boolean</td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibrary/nativebinary/">NativeBinary</a></td>
<td>String</td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibrary/platform/">Platform</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibrary/initialize/">Initialize</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibrary/release/">Release</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1901,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibrary/",title:"OdinLibrary",section:"ODIN Documentation",description:" Main lib entry class ",content:`<pre><code class="language-C#">public static class OdinLibrary
</code></pre>
<h1 id="heading"></h1>
<p>Main lib entry class</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibrary/isinitialized/">IsInitialized</a></td>
<td>Boolean</td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibrary/nativebinary/">NativeBinary</a></td>
<td>String</td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibrary/platform/">Platform</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibrary/initialize/">Initialize</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibrary/release/">Release</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1902,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibrary/",title:"OdinLibrary",section:"ODIN Documentation",description:" Main lib entry class ",content:`<pre><code class="language-C#">public static class OdinLibrary
</code></pre>
<h1 id="heading"></h1>
<p>Main lib entry class</p>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibrary/isinitialized/">IsInitialized</a></td>
<td>Boolean</td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibrary/nativebinary/">NativeBinary</a></td>
<td>String</td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibrary/platform/">Platform</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibrary/initialize/">Initialize</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibrary/release/">Release</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
`}),e.add({id:1903,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibrary/",title:"OdinLibrary",section:"ODIN Documentation",description:" Main lib entry class ",content:`<pre><code class="language-C#">public static class OdinLibrary
</code></pre>
<h1 id="heading"></h1>
<p>Main lib entry class</p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibrary/initialize/">Initialize</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibrary/release/">Release</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibrary/isinitialized/">IsInitialized</a></td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibrary/nativebinary/">NativeBinary</a></td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibrary/platform/">Platform</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
`}),e.add({id:1904,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibrary/",title:"OdinLibrary",section:"ODIN Documentation",description:" Main lib entry class ",content:`<pre><code class="language-C#">public static class OdinLibrary
</code></pre>
<h1 id="heading"></h1>
<p>Main lib entry class</p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibrary/initialize/">Initialize</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibrary/release/">Release</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibrary/isinitialized/">IsInitialized</a></td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibrary/nativebinary/">NativeBinary</a></td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibrary/platform/">Platform</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
`}),e.add({id:1905,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibrary/",title:"OdinLibrary",section:"ODIN Documentation",description:" Main lib entry class ",content:`<pre><code class="language-C#">public static class OdinLibrary
</code></pre>
<h1 id="heading"></h1>
<p>Main lib entry class</p>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibrary/initialize/">Initialize</a></td>
<td>Initializes the native ODIN runtime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibrary/release/">Release</a></td>
<td>Releases the unmanaged resources used by the Core-Instance</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibrary/isinitialized/">IsInitialized</a></td>
<td>Indicates whether or not the native ODIN runtime has been loaded and initialized</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibrary/nativebinary/">NativeBinary</a></td>
<td>Location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibrary/platform/">Platform</a></td>
<td>Platform the library is running on</td>
</tr>
</tbody>
</table>
`}),e.add({id:1906,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/",title:"OdinLibraryParameters",section:"ODIN Documentation",description:" A set of values that are used when initializing the native ODIN runtime ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class OdinLibraryParameters
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/possiblenativebinarylocations/">PossibleNativeBinaryLocations</a></td>
<td>String[]</td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/platform/">Platform</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/trygetnativebinaryname/">TryGetNativeBinaryName</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
`}),e.add({id:1907,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/",title:"OdinLibraryParameters",section:"ODIN Documentation",description:" A set of values that are used when initializing the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinLibraryParameters
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/possiblenativebinarylocations/">PossibleNativeBinaryLocations</a></td>
<td>String[]</td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/platform/">Platform</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/trygetnativebinaryname/">TryGetNativeBinaryName</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
`}),e.add({id:1908,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/",title:"OdinLibraryParameters",section:"ODIN Documentation",description:" A set of values that are used when initializing the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinLibraryParameters
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/possiblenativebinarylocations/">PossibleNativeBinaryLocations</a></td>
<td>String[]</td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/platform/">Platform</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/trygetnativebinaryname/">TryGetNativeBinaryName</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
`}),e.add({id:1909,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/",title:"OdinLibraryParameters",section:"ODIN Documentation",description:" A set of values that are used when initializing the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinLibraryParameters
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/constructor_0/">OdinLibraryParameters()</a></td>
<td>Creates a new Core-Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/constructor_1/">OdinLibraryParameters(String)</a></td>
<td>Creates a new Core-Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/constructor_2/">OdinLibraryParameters(String, SupportedPlatform)</a></td>
<td>Creates a new Core-Object.</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/trygetnativebinaryname/">TryGetNativeBinaryName</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/possiblenativebinarylocations/">PossibleNativeBinaryLocations</a></td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/platform/">Platform</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1910,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/",title:"OdinLibraryParameters",section:"ODIN Documentation",description:" A set of values that are used when initializing the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinLibraryParameters
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/constructor_0/">OdinLibraryParameters()</a></td>
<td>Creates a new Core-Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/constructor_1/">OdinLibraryParameters(String)</a></td>
<td>Creates a new Core-Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/constructor_2/">OdinLibraryParameters(String, SupportedPlatform)</a></td>
<td>Creates a new Core-Object.</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/trygetnativebinaryname/">TryGetNativeBinaryName</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/possiblenativebinarylocations/">PossibleNativeBinaryLocations</a></td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/platform/">Platform</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1911,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/",title:"OdinLibraryParameters",section:"ODIN Documentation",description:" A set of values that are used when initializing the native ODIN runtime ",content:`<pre><code class="language-C#">public class OdinLibraryParameters
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when initializing the native ODIN runtime</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/constructor_0/">OdinLibraryParameters()</a></td>
<td>Creates a new Core-Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/constructor_1/">OdinLibraryParameters(String)</a></td>
<td>Creates a new Core-Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/constructor_2/">OdinLibraryParameters(String, SupportedPlatform)</a></td>
<td>Creates a new Core-Object.</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/trygetnativebinaryname/">TryGetNativeBinaryName</a></td>
<td>Returns the name of the native ODIN runtime binary that fits the current environment</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/possiblenativebinarylocations/">PossibleNativeBinaryLocations</a></td>
<td>Possible install location of the native ODIN runtime binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinlibraryparameters/platform/">Platform</a></td>
<td>Determines which platform specific code needs to be executed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1912,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/constructor_0/",title:"OdinLibraryParameters()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters()
</code></pre>
<p>Creates a new Core-Object.</p>
`}),e.add({id:1913,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/constructor_0/",title:"OdinLibraryParameters()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters()
</code></pre>
<p>Creates a new Core-Object.</p>
`}),e.add({id:1914,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/constructor_0/",title:"OdinLibraryParameters()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters()
</code></pre>
<p>Creates a new Core-Object.</p>
`}),e.add({id:1915,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/constructor_2/",title:"OdinLibraryParameters(String, SupportedPlatform)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters(string nativeBinaryLocation, SupportedPlatform platform)
</code></pre>
<p>Creates a new Core-Object.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>nativeBinaryLocation</td>
<td>Location to the Aki library binary.</td>
</tr>
<tr>
<td>platform</td>
<td>Determines which platform specific code will be executed.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1916,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/constructor_2/",title:"OdinLibraryParameters(String, SupportedPlatform)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters(string nativeBinaryLocation, SupportedPlatform platform)
</code></pre>
<p>Creates a new Core-Object.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>nativeBinaryLocation</td>
<td>Location to the Aki library binary.</td>
</tr>
<tr>
<td>platform</td>
<td>Determines which platform specific code will be executed.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1917,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/constructor_2/",title:"OdinLibraryParameters(String, SupportedPlatform)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters(string nativeBinaryLocation, SupportedPlatform platform)
</code></pre>
<p>Creates a new Core-Object.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>nativeBinaryLocation</td>
<td>Location to the Aki library binary.</td>
</tr>
<tr>
<td>platform</td>
<td>Determines which platform specific code will be executed.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1918,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/constructor_1/",title:"OdinLibraryParameters(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters(string odinBinaryFolder)
</code></pre>
<p>Creates a new Core-Object.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>odinBinaryFolder</td>
<td>location where the native Aki sdk files can be found.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1919,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/constructor_1/",title:"OdinLibraryParameters(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters(string odinBinaryFolder)
</code></pre>
<p>Creates a new Core-Object.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>odinBinaryFolder</td>
<td>location where the native Aki sdk files can be found.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1920,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/constructor_1/",title:"OdinLibraryParameters(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinLibraryParameters(string odinBinaryFolder)
</code></pre>
<p>Creates a new Core-Object.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>odinBinaryFolder</td>
<td>location where the native Aki sdk files can be found.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1921,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/",title:"OdinMedia",section:"ODIN Documentation",description:"The OdinMedia class. Represents a local media stream added to the room - i.e. a microphone, another audio stream like files. Don't create OdinMedia instances directly, use `createAudioStream` from OdinRoom instead.",content:`<pre><code class="language-TypeScript">export class OdinMedia
</code></pre>
<h1 id="heading"></h1>
<p>The OdinMedia class. Represents a local media stream added to the room - i.e. a microphone, another audio stream like files.
Don&rsquo;t create OdinMedia instances directly, use <code>createAudioStream</code> from OdinRoom instead.</p>
<h2 id="constructor">Constructor</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/constructor/">constructor</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/">OdinMedia</a></td>
<td>Creates a new instance of a media object. Don&rsquo;t create OdinMedia directly, use <code>createAudioStream</code> from OdinRoom instead.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/id/">id</a></td>
<td>string</td>
<td>Gets the ID of the media.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/close/">close</a></td>
<td>void</td>
<td>Closes the local audio stream and removed the media from the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/pause/">pause</a></td>
<td>void</td>
<td>Instructs the server to pause the media object, ceasing the reception of data. This operation essentially communicates a server-side mute request from the client, thus indicating a desire to halt packet reception for this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/resume/">resume</a></td>
<td>void</td>
<td>Instructs the server to resume the media object, resuming the reception of data. This operation essentially communicates a server-side unmute request from the client, thus indicating a desire to resume packet reception for this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/sendaudiodata/">sendAudioData</a></td>
<td>void</td>
<td>Sends audio data to the room. The data must be in the format specified when creating the media as a 32-bit float array. Samples need to be between -1 and 1. Audio data needs to be sent in regular intervals, otherwise the audio will be sound interrupted. See the example for more details.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1922,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/",title:"OdinMedia",section:"ODIN Documentation",description:" Wrapper class of for Unity (require AudioSource) This convenient class provides predefined helper functions to cover for a default usecases where the voice chat needs to work with AudioSource, AudioClip, AudioMixer, ... Default Unity GameObject altering functions: Add to the current GameObjectAdd to the current GameObjectAdd to the current GameObjectAdd to the current GameObject ",content:`<pre><code class="language-C#">public class OdinMedia : MonoBehaviour, IMedia
</code></pre>
<h1 id="heading"></h1>
<p>Wrapper class of Odin for Unity (require AudioSource)</p>
<p>
This convenient class provides predefined helper functions to cover for a default usecases where the voice chat needs to work with AudioSource, AudioClip, AudioMixer, ...
</p>
Default Unity GameObject altering functions:
<ul><li>OdinMediaAdd OdinMuteAudioComponent to the current GameObject</li></ul>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/playback/">Playback</a></td>
<td>Actual Unity audio output component</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/outsamplerate/">OutSampleRate</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/outchannels/">OutChannels</a></td>
<td>Gets the current speaker mode. Default is 2 channel stereo.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/parent/">Parent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/id/">Id</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/mediadecoder/">MediaDecoder</a></td>
<td>Media reference</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/audiomixergroup/">AudioMixerGroup</a></td>
<td>Unity mixer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/spatialblend/">SpatialBlend</a></td>
<td>Property of AudioSource</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/rolloffmode/">RolloffMode</a></td>
<td>Property of AudioSource</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/mindistance/">MinDistance</a></td>
<td>Property of AudioSource</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/maxdistance/">MaxDistance</a></td>
<td>Property of AudioSource</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/activity/">Activity</a></td>
<td>Media activity state flag</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/onactivestatechanged/">OnActiveStateChanged</a></td>
<td>Trigger on <a href="/odin/sdk/unity/2.0.0/classes/odinmedia/activity/">Activity</a> changed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/autodestroyaudiosource/">AutoDestroyAudioSource</a></td>
<td>Flag for destroy <a href="/odin/sdk/unity/2.0.0/classes/odinmedia/playback/">Playback</a> linked AudioSource</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/autodestroymediastream/">AutoDestroyMediaStream</a></td>
<td>Flag for dispose of <a href="/odin/sdk/unity/2.0.0/classes/odinmedia/mediadecoder/">MediaDecoder</a></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/getpipeline/">GetPipeline</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/addapm/">AddApm</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/addvad/">AddVad</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/addvolumeboost/">AddVolumeBoost</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/addmute/">AddMute</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/addeffect/">AddEffect</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/setdecoder/">SetDecoder</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/readodinaudiodata/">ReadOdinAudioData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/getframebuffersize/">GetFrameBufferSize</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/checkresetframebuffer/">CheckResetFrameBuffer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/setaudiosourceptich/">SetAudioSourcePtich</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/setaudioclipdata/">SetAudioClipData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1923,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/",title:"OdinMedia",section:"ODIN Documentation",description:"Class describing a single media stream inside an `OdinRoom`.",content:`<pre><code class="language-TypeScript">export class OdinMedia
</code></pre>
<h1 id="heading"></h1>
<p>Class describing a single media stream inside an <code>OdinRoom</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/active/">active</a></td>
<td>boolean</td>
<td>Indicates wether or not the media is currently sending/receiving data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/id/">id</a></td>
<td>number</td>
<td>The ID of the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/paused/">paused</a></td>
<td>boolean</td>
<td>Indicates wether or not the media is paused.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that owns the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/remote/">remote</a></td>
<td>boolean</td>
<td>Indicates wether or not the media belongs to a remote peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/started/">started</a></td>
<td>boolean</td>
<td>Indicates whether or not the media is registered in the audio service instance (e.g. started).</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/volume/">volume</a></td>
<td>number</td>
<td>The individual playback volume of the media stream.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/addeventlistener/">addEventListener</a></td>
<td>void</td>
<td>Registers to media events from <code>IOdinMediaEvents</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/changevolume/">changeVolume</a></td>
<td>void</td>
<td>Changes the playback volume of the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/pause/">pause</a></td>
<td>Promise&lt;void&gt;</td>
<td>Paused the media stream on the server to stop receiving data on it.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/resume/">resume</a></td>
<td>Promise&lt;void&gt;</td>
<td>Paused the media stream on the server to start receiving data on it.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/start/">start</a></td>
<td>Promise&lt;void&gt;</td>
<td>Starts the media stream by initiating the encoder/decoder and adding it to the room if it belongs to the local peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinmedia/stop/">stop</a></td>
<td>Promise&lt;void&gt;</td>
<td>Stops the media stream by terminating the encoder/decoder and removing it from the room if it belongs to the local peer.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1924,href:"https://www.4players.io/odin/sdk/web/types/odinmediaactivitychangedevent/",title:"OdinMediaActivityChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMediaActivityChangedEvent = (event: IOdinEvent&lt;IOdinMediaActivityChangedEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinMediaActivityChangedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
, <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinMedia <a href="/odin/sdk/web/classes/odinmedia/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when a media is sending/receiving data. This can be used to determine when a user starts/stops speaking.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinMediaActivityChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinMediaEvents <a href="/odin/sdk/web/interfaces/iodinmediaevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-bc840b91ed739d85796b2b340ca8373f" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinMediaActivityChangedEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-bc840b91ed739d85796b2b340ca8373f-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-bc840b91ed739d85796b2b340ca8373f-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Listen to media started events in the room and start decoding its voice packets
  odinRoom.addEventListener(&#39;MediaStarted&#39;, (event) =&gt; {
    event.payload.media.start();
  });

  // Listen to media stopped events in the room and stop decoding its voice packets
  odinRoom.addEventListener(&#39;MediaStopped&#39;, (event) =&gt; {
    event.payload.media.stop();
  });

  // Listen to activity events of started medias in the room (e.g. someone is talking)
  odinRoom.addEventListener(&#39;MediaActivity&#39;, (event) =&gt; {
    console.log(\`Media \${event.payload.media.id} activity updated:\`, event.payload.media.active);
  });

  // Join the room
  odinRoom.join();

  // Create a new audio stream for our default capture device and append it to the room
  navigator.mediaDevices.getUserMedia({ audio: true }).then((mediaStream) =&gt; {
    odinRoom.createMedia(mediaStream);
  });
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinMediaActivityChangedEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1925,href:"https://www.4players.io/odin/sdk/nodejs/types/odinmediaactivityevent/",title:"OdinMediaActivityEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMediaActivityEvent = (event: OdinMediaActivityEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinMediaActivityEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1926,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/",title:"OdinMediaActivityEventPayload",section:"ODIN Documentation",description:"The payload for the MediaActivity event.",content:`<pre><code class="language-TypeScript">export interface OdinMediaActivityEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the MediaActivity event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/mediaid/">mediaId</a></td>
<td>number</td>
<td>The ID of the media that changed the activity.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that changed the media activity.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/state/">state</a></td>
<td>boolean</td>
<td>Indicates if the media is currently active or not (i.e. user talking or not).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1927,href:"https://www.4players.io/odin/sdk/nodejs/types/odinmediaaddedevent/",title:"OdinMediaAddedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMediaAddedEvent = (event: OdinMediaAddedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinMediaAddedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1928,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/",title:"OdinMediaAddedEventPayload",section:"ODIN Documentation",description:"The payload for the MediaAdded event.",content:`<pre><code class="language-TypeScript">export interface OdinMediaAddedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the MediaAdded event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/mediaid/">mediaId</a></td>
<td>number</td>
<td>The ID of the media that was added.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that added the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1929,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinmediaconfig/",title:"OdinMediaConfig",section:"ODIN Documentation",description:" ODIN audio stream configuration ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class OdinMediaConfig
</code></pre>
<h1 id="heading"></h1>
<p>ODIN audio stream configuration</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The number audio samples carried per second in Hz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/channels/">Channels</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td>The number of audio channels</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1930,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinmediaconfig/",title:"OdinMediaConfig",section:"ODIN Documentation",description:" ODIN audio stream configuration ",content:`<pre><code class="language-C#">public class OdinMediaConfig
</code></pre>
<h1 id="heading"></h1>
<p>ODIN audio stream configuration</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The number audio samples carried per second in Hz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/channels/">Channels</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td>The number of audio channels</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1931,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinmediaconfig/",title:"OdinMediaConfig",section:"ODIN Documentation",description:" ODIN audio stream configuration ",content:`<pre><code class="language-C#">public class OdinMediaConfig
</code></pre>
<h1 id="heading"></h1>
<p>ODIN audio stream configuration</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The number audio samples carried per second in Hz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/channels/">Channels</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td>The number of audio channels</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1932,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinmediaconfig/",title:"OdinMediaConfig",section:"ODIN Documentation",description:" ODIN audio stream configuration ",content:`<pre><code class="language-C#">public class OdinMediaConfig
</code></pre>
<h1 id="heading"></h1>
<p>ODIN audio stream configuration</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/constructor_0/">OdinMediaConfig(MediaSampleRate, MediaChannels)</a></td>
<td>MediaConfig for Media</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/samplerate/">SampleRate</a></td>
<td>The number audio samples carried per second in Hz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/channels/">Channels</a></td>
<td>The number of audio channels</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1933,href:"https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/",title:"OdinMediaConfig",section:"ODIN Documentation",description:" ODIN audio stream configuration ",content:`<pre><code class="language-C#">public class OdinMediaConfig
</code></pre>
<h1 id="heading"></h1>
<p>ODIN audio stream configuration</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/constructor_0/">OdinMediaConfig(MediaSampleRate, MediaChannels)</a></td>
<td>MediaConfig for Media</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/samplerate/">SampleRate</a></td>
<td>The number audio samples carried per second in Hz</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/channels/">Channels</a></td>
<td>The number of audio channels</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1934,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinmediaconfig/constructor_0/",title:"OdinMediaConfig(MediaSampleRate, MediaChannels)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinMediaConfig(MediaSampleRate rate, MediaChannels channels)
</code></pre>
<p>MediaConfig for Media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>rate</td>
<td>stream samplerate</td>
</tr>
<tr>
<td>channels</td>
<td>stream channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1935,href:"https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/constructor_0/",title:"OdinMediaConfig(MediaSampleRate, MediaChannels)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinMediaConfig(MediaSampleRate rate, MediaChannels channels)
</code></pre>
<p>MediaConfig for Media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>rate</td>
<td>stream samplerate</td>
</tr>
<tr>
<td>channels</td>
<td>stream channels</td>
</tr>
</tbody>
</table>
`}),e.add({id:1936,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/",title:"OdinMediaData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinMediaData : IDisposable
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/create/">Create</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/audiodata/">AudioData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/issilent/">IsSilent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/samplescount/">SamplesCount</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/getsamples/">GetSamples</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/setsamples/">SetSamples</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/calculatermsdbfs/">CalculateRmsDbfs</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/dispose/">Dispose</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1937,href:"https://www.4players.io/odin/sdk/nodejs/types/odinmediaremovedevent/",title:"OdinMediaRemovedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMediaRemovedEvent = (event: OdinMediaRemovedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinMediaRemovedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1938,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/",title:"OdinMediaRemovedEventPayload",section:"ODIN Documentation",description:"The payload for the MediaRemoved event.",content:`<pre><code class="language-TypeScript">export interface OdinMediaRemovedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the MediaRemoved event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/mediaid/">mediaId</a></td>
<td>number</td>
<td>The ID of the media that was removed.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that removed the media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1939,href:"https://www.4players.io/odin/sdk/web/types/odinmediastartedstoppedevent/",title:"OdinMediaStartedStoppedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMediaStartedStoppedEvent = (event: IOdinEvent&lt;IOdinMediaStartedStoppedEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinMediaStartedStoppedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 instances whenever a remote peer started/stopped a media in the room. Usually, you would want to call the <code>start</code> or <code>stop</code> method on such media to start/stop the Opus decoder for audio playback.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinMediaStartedStoppedEventPayload <a href="/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-868eab5b7186b9ab12abd69a3736cef9" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinMediaStartedStoppedEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-868eab5b7186b9ab12abd69a3736cef9-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-868eab5b7186b9ab12abd69a3736cef9-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Listen to media started events in the room and start decoding its voice packets
  odinRoom.addEventListener(&#39;MediaStarted&#39;, (event) =&gt; {
    console.log(\`Peer \${event.payload.peer.id} added a new media stream to the room\`);
    event.payload.media.start();
  });

  // Listen to media stopped events in the room and stop decoding its voice packets
  odinRoom.addEventListener(&#39;MediaStopped&#39;, (event) =&gt; {
    console.log(\`Peer \${event.payload.peer.id} removed a media stream from the room\`);
    event.payload.media.stop();
  });

  // Listen to activity events of started medias in the room (e.g. someone is talking)
  odinRoom.addEventListener(&#39;MediaActivity&#39;, (event) =&gt; {
    console.log(\`Media \${event.payload.media.id} activity updated:\`, event.payload.media.active);
  });

  // Join the room
  odinRoom.join();

  // Create a new audio stream for our default capture device and append it to the room
  navigator.mediaDevices.getUserMedia({ audio: true }).then((mediaStream) =&gt; {
    odinRoom.createMedia(mediaStream);
  });
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinMediaStartedStoppedEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1940,href:"https://www.4players.io/odin/sdk/nodejs/types/odinmessagereceivedevent/",title:"OdinMessageReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMessageReceivedEvent = (event: OdinMessageReceivedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinMessageReceivedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1941,href:"https://www.4players.io/odin/sdk/web/types/odinmessagereceivedevent/",title:"OdinMessageReceivedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinMessageReceivedEvent = (event: IOdinEvent&lt;IOdinMessageReceivedEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinMessageReceivedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when receiving a message from another peer in the room. Note that this event only provides the ID of the peer as <code>senderId</code>. This is because the invoking peer might not be in proximity due to server-side culling.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinMessageReceivedEventPayload <a href="/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-9fcf5ca2e4dbdd557fd8e2ff30e50b3c" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinMessageReceivedEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-9fcf5ca2e4dbdd557fd8e2ff30e50b3c-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-9fcf5ca2e4dbdd557fd8e2ff30e50b3c-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Get notified when a message with arbitrary data was received (data is encoded as Uint8Array)
  odinRoom.addEventListener(&#39;MessageReceived&#39;, (event) =&gt; {
    console.log(\`Received data from peer \${event.payload.senderId}:\`, event.payload.message);
  });

  // Join the room
  odinRoom.join();
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinMessageReceivedEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1942,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/",title:"OdinMessageReceivedEventPayload",section:"ODIN Documentation",description:"The payload for the MessageReceived event.",content:`<pre><code class="language-TypeScript">export interface OdinMessageReceivedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the MessageReceived event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/messagedata/">messageData</a></td>
<td>Uint8Array</td>
<td>The message data received from the peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that sent the message.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1943,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/",title:"OdinMicrophoneReader",section:"ODIN Documentation",description:" Handles microphone input data and sends input to ODIN This convenient class gathers input audio data from Unity managed Microphone to pass the data with event to other components. ",content:`<pre><code class="language-C#">public class OdinMicrophoneReader : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles microphone input data and sends input to ODIN</p>
<p>
This convenient class gathers input audio data from Unity managed Microphone to pass the data with OdinMicrophoneReader event to other components.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/haspermission/">HasPermission</a></td>
<td>Check if the user has authorized use of the microphone</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/redirectcapturedaudio/">RedirectCapturedAudio</a></td>
<td>Skips registered PushAudio for the OnMicrophoneData event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/silencecapturedaudio/">SilenceCapturedAudio</a></td>
<td>Zero out the event audio buffer for PushAudio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/continuerecording/">ContinueRecording</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/samplerate/">Samplerate</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/custominputdevice/">CustomInputDevice</a></td>
<td>Enable/Disable the use of <a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/inputdevice/">InputDevice</a> as a new/fixed device name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/inputdevice/">InputDevice</a></td>
<td>The device name to use as microphone in Unity. (i.e Microphone.Start )</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/autostartlisten/">AutostartListen</a></td>
<td>Use UnityEngine.Microphone.Start (Microphone.Start) in OdinMicrophoneReader</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/custommicvolumescale/">CustomMicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/micvolumescale/">MicVolumeScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/onaudiodata/">OnAudioData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/microphonesamplerate/">MicrophoneSamplerate</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/microphonechannels/">MicrophoneChannels</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/onmicrophonedata/">OnMicrophoneData</a></td>
<td>Event is fired if raw microphone data is available</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/startlisten/">StartListen</a></td>
<td>Start Unity microphone capture</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/stoplisten/">StopListen</a></td>
<td>Stop Unity Microphone capture if this AudioSender created the recording</td>
</tr>
</tbody>
</table>
`}),e.add({id:1944,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/",title:"OdinMuteAudioComponent",section:"ODIN Documentation",description:" Custom mute audio component for This class is a effect in the odin audio pipline to mute based on the flag. The intention is to provide a convenient way with Unity Editor UI of Marshal a 1-byte signed integer bool for a specific audio packet in the current pipline. ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinMuteAudioComponent : OdinCustomEffectUnityComponentBase&lt;IntPtr&gt;, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>Custom mute audio component for Media</p>
<p>
This class is a effect in the odin audio pipline to mute based on the OdinMuteAudioComponent flag.
The intention is to provide a convenient way with Unity Editor UI of Marshal a 1-byte signed integer bool for a specific audio packet in the current pipline.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/silencetoggle/">SilenceToggle</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/geteffectuserdata/">GetEffectUserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/customeffectcallback/">CustomEffectCallback</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1945,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/",title:"OdinNoiseSuppression",section:"ODIN Documentation",description:" Valid levels for aggressiveness of the noise suppression. A higher level will reduce the noise level at the expense of a higher speech distortion. ",content:`<pre><code class="language-C#">public enum OdinNoiseSuppression
</code></pre>
<h1 id="heading"></h1>
<p>Valid levels for aggressiveness of the noise suppression. A higher level will reduce the noise
level at the expense of a higher speech distortion.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_none/">ODIN_NOISE_SUPPRESSION_NONE</a></td>
<td>Noise suppression is disabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_low/">ODIN_NOISE_SUPPRESSION_LOW</a></td>
<td>Use low suppression (6 dB)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_moderate/">ODIN_NOISE_SUPPRESSION_MODERATE</a></td>
<td>Use moderate suppression (12 dB)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_high/">ODIN_NOISE_SUPPRESSION_HIGH</a></td>
<td>Use high suppression (18 dB)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinnoisesuppression/odin_noise_suppression_very_high/">ODIN_NOISE_SUPPRESSION_VERY_HIGH</a></td>
<td>Use very high suppression (21 dB)</td>
</tr>
</tbody>
</table>
`}),e.add({id:1946,href:"https://www.4players.io/odin/sdk/nodejs/enums/odinnoisesuppressionlevel/",title:"OdinNoiseSuppressionLevel",section:"ODIN Documentation",description:"Noise suppression levels",content:`<pre><code class="language-TypeScript">export enumeration OdinNoiseSuppressionLevel
</code></pre>
<h1 id="heading"></h1>
<p>Noise suppression levels</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Value</th>
<th>Description</th>
</tr>
</thead>
</table>
`}),e.add({id:1947,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/",title:"OdinNoiseSuppressionLevel",section:"ODIN Documentation",description:" Valid levels for aggressiveness of the noise suppression ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum OdinNoiseSuppressionLevel
</code></pre>
<h1 id="heading"></h1>
<p>Valid levels for aggressiveness of the noise suppression</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/none/">None</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>None</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/low/">Low</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>6dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/moderate/">Moderate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>12 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/high/">High</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>18 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/veryhigh/">VeryHigh</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>21 dB</td>
</tr>
</tbody>
</table>
`}),e.add({id:1948,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/",title:"OdinNoiseSuppressionLevel",section:"ODIN Documentation",description:" Valid levels for aggressiveness of the noise suppression ",content:`<pre><code class="language-C#">public enum OdinNoiseSuppressionLevel
</code></pre>
<h1 id="heading"></h1>
<p>Valid levels for aggressiveness of the noise suppression</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/none/">None</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>None</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/low/">Low</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>6dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/moderate/">Moderate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>12 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/high/">High</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>18 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/veryhigh/">VeryHigh</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>21 dB</td>
</tr>
</tbody>
</table>
`}),e.add({id:1949,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/",title:"OdinNoiseSuppressionLevel",section:"ODIN Documentation",description:" Valid levels for aggressiveness of the noise suppression ",content:`<pre><code class="language-C#">public enum OdinNoiseSuppressionLevel
</code></pre>
<h1 id="heading"></h1>
<p>Valid levels for aggressiveness of the noise suppression</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/none/">None</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>None</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/low/">Low</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>6dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/moderate/">Moderate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>12 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/high/">High</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>18 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/veryhigh/">VeryHigh</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>21 dB</td>
</tr>
</tbody>
</table>
`}),e.add({id:1950,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/",title:"OdinNoiseSuppressionLevel",section:"ODIN Documentation",description:" Valid levels for aggressiveness of the noise suppression ",content:`<pre><code class="language-C#">public enum OdinNoiseSuppressionLevel
</code></pre>
<h1 id="heading"></h1>
<p>Valid levels for aggressiveness of the noise suppression</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/none/">None</a></td>
<td>None</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/low/">Low</a></td>
<td>6dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/moderate/">Moderate</a></td>
<td>12 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/high/">High</a></td>
<td>18 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/veryhigh/">VeryHigh</a></td>
<td>21 dB</td>
</tr>
</tbody>
</table>
`}),e.add({id:1951,href:"https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/",title:"OdinNoiseSuppressionLevel",section:"ODIN Documentation",description:" Valid levels for aggressiveness of the noise suppression ",content:`<pre><code class="language-C#">public enum OdinNoiseSuppressionLevel
</code></pre>
<h1 id="heading"></h1>
<p>Valid levels for aggressiveness of the noise suppression</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/none/">None</a></td>
<td>None</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/low/">Low</a></td>
<td>6dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/moderate/">Moderate</a></td>
<td>12 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/high/">High</a></td>
<td>18 dB</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/veryhigh/">VeryHigh</a></td>
<td>21 dB</td>
</tr>
</tbody>
</table>
`}),e.add({id:1952,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/",title:"OdinPeer",section:"ODIN Documentation",description:" Wrapper class of for Unity This convenient class provides dispatching of events to Unity with passthrough as well as predefined helper functions to cover for a default usecases where the voice chat is visually and logical represented Unity gameobject that are manageable with the Unity editor. Default Unity GameObject altering event callback functions: Creates GameObject with component and attach mediaDestroy GameObject with component ",content:`<pre><code class="language-C#">public class OdinPeer : MonoBehaviour, IPeer
</code></pre>
<h1 id="heading"></h1>
<p>Wrapper class of Odin for Unity</p>
<p>
This convenient class provides dispatching of events to Unity with passthrough <see cref="!:UnityEngine.Events.UnityEvent"></see> 
as well as predefined helper functions to cover for a default usecases where the voice chat is visually and logical represented
Unity gameobject that are manageable with the Unity editor.
</p>
Default Unity GameObject altering event callback functions:
<ul><li>Unity component</li></ul>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/parent/">Parent</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/onmediaadded/">OnMediaAdded</a></td>
<td>Additional event redirect from Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/onmediaremoved/">OnMediaRemoved</a></td>
<td>Additional event redirect from Unity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/id/">Id</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/userid/">UserId</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/getbasepeer/">GetBasePeer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/getroomapi/">GetRoomApi</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/peer_mediaadded/">Peer_MediaAdded</a></td>
<td>Event trigger to create a Unity component</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/addmediacomponent/">AddMediaComponent</a></td>
<td>Create a Unity component</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/peer_mediaremoved/">Peer_MediaRemoved</a></td>
<td>Event trigger to remove a Unity component</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpeer/removemediacomponent/">RemoveMediaComponent</a></td>
<td>Removes all child components with the same media id</td>
</tr>
</tbody>
</table>
`}),e.add({id:1953,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/",title:"OdinPeer",section:"ODIN Documentation",description:"Class describing a single peer inside an `OdinRoom`.",content:`<pre><code class="language-TypeScript">export class OdinPeer
</code></pre>
<h1 id="heading"></h1>
<p>Class describing a single peer inside an <code>OdinRoom</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/data/">data</a></td>
<td>Uint8Array</td>
<td>The arbitrary user data of the peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/id/">id</a></td>
<td>number</td>
<td>The ID of the peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/medias/">medias</a></td>
<td><a href="/odin/sdk/web/classes/odinmedia/">Map&lt;number&gt;&lt;OdinMedia&gt;</a></td>
<td>A list of media instances owned by the peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/remote/">remote</a></td>
<td>boolean</td>
<td>Indicates, whether the peer is a remote peer or not.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/userid/">userId</a></td>
<td>string</td>
<td>The identifier of the peer.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/addeventlistener/">addEventListener</a></td>
<td>void</td>
<td>Registers to peer events from <code>IOdinPeerEvents</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/addmedia/">addMedia</a></td>
<td>void</td>
<td>Adds a media to the list of active medias and starts decoding.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/createmedia/">createMedia</a></td>
<td><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></td>
<td>Creates a local media, configures audio capture/playback and returns the new <code>OdinMedia</code> instance.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/removemedia/">removeMedia</a></td>
<td>void</td>
<td>Removes a media from the list of active medias and stops decoding.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/removemediabyid/">removeMediaById</a></td>
<td>void</td>
<td>Removes a media from the list of active medias by the given ID and stops decoding.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/sendmessage/">sendMessage</a></td>
<td>Promise&lt;void&gt;</td>
<td>Sends a message with arbitrary data to this peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/startmedias/">startMedias</a></td>
<td>Promise&lt;void&gt;</td>
<td>Starts all active medias or a list of specific active medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/stopmedias/">stopMedias</a></td>
<td>Promise&lt;void&gt;</td>
<td>Stops all active medias or a list of specific active medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinpeer/update/">update</a></td>
<td>Promise&lt;void&gt;</td>
<td>Sends user data of the peer to the server.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1954,href:"https://www.4players.io/odin/sdk/web/types/odinpeerdatachangedevent/",title:"OdinPeerDataChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinPeerDataChangedEvent = (event: IOdinEvent&lt;IOdinPeerDataChangedEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinPeerDataChangedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when the user data of a remote peer changed.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinPeerDataChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-6b746574113e934359b7cae252de9586" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinPeerDataChangedEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-6b746574113e934359b7cae252de9586-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-6b746574113e934359b7cae252de9586-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Adds an event listener to get notified whenever a remote peer updated its user data
  odinRoom.addEventListener(&#39;PeerUserDataChanged&#39;, (event) =&gt; {
    console.log(&#39;Updated remote peer user data received:&#39;, event.payload.peer.data);
  });

  // Join the room
  odinRoom.join();
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinPeerDataChangedEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1955,href:"https://www.4players.io/odin/sdk/nodejs/types/odinpeerjoinedevent/",title:"OdinPeerJoinedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinPeerJoinedEvent = (event: OdinPeerJoinedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinPeerJoinedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1956,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/",title:"OdinPeerJoinedEventPayload",section:"ODIN Documentation",description:"The payload for the PeerJoined event.",content:`<pre><code class="language-TypeScript">export interface OdinPeerJoinedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the PeerJoined event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that joined.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/userdata/">userData</a></td>
<td>undefined | Uint8Array</td>
<td>The user data of the peer that joined.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/userid/">userId</a></td>
<td>string</td>
<td>The ID of the user that joined.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1957,href:"https://www.4players.io/odin/sdk/web/types/odinpeerjoinedleftevent/",title:"OdinPeerJoinedLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinPeerJoinedLeftEvent = (event: IOdinEvent&lt;IOdinPeerJoinedLeftEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinPeerJoinedLeftEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when a remote peer joins or leaves the room.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinPeerJoinedLeftEventPayload <a href="/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-9cead0e6e13f8b77373e34858cbdba34" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinPeerJoinedLeftEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-9cead0e6e13f8b77373e34858cbdba34-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-9cead0e6e13f8b77373e34858cbdba34-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Adds an event listener to get notified when a new peer joined the room
  odinRoom.addEventListener(&#39;PeerJoined&#39;, (event) =&gt; {
    console.log(&#39;A peer joined the room:&#39;, event.payload.peer);
  });
  // Adds an event listener to get notified then a peer left the room
  odinRoom.addEventListener(&#39;PeerLeft&#39;, (event) =&gt; {
    console.log(&#39;A peer left the room:&#39;, event.payload.peer);
  });

  // Join the room
  odinRoom.join();
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinPeerJoinedLeftEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1958,href:"https://www.4players.io/odin/sdk/nodejs/types/odinpeerleftevent/",title:"OdinPeerLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinPeerLeftEvent = (event: OdinPeerLeftEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinPeerLeftEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1959,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/",title:"OdinPeerLeftEventPayload",section:"ODIN Documentation",description:"The payload for the PeerLeft event.",content:`<pre><code class="language-TypeScript">export interface OdinPeerLeftEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the PeerLeft event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that left.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1960,href:"https://www.4players.io/odin/sdk/nodejs/types/odinpeeruserdatachangedevent/",title:"OdinPeerUserDataChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinPeerUserDataChangedEvent = (event: OdinPeerUserDataChangedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinPeerUserDataChangedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1961,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/",title:"OdinPeerUserDataChangedEventPayload",section:"ODIN Documentation",description:"The payload for the PeerUserDataChanged event.",content:`<pre><code class="language-TypeScript">export interface OdinPeerUserDataChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the PeerUserDataChanged event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/peerid/">peerId</a></td>
<td>number</td>
<td>The ID of the peer that changed the user data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/userdata/">userData</a></td>
<td>undefined | Uint8Array</td>
<td>The new user data of the peer.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1962,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpipelinehandle/",title:"OdinPipelineHandle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinPipelineHandle : SafeHandleZeroOrMinusOneIsInvalid
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpipelinehandle/isalive/">IsAlive</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1963,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/",title:"OdinRoom",section:"ODIN Documentation",description:"The OdinRoom class. Use createRoom from OdinClient instance to create a room. The OdinRoom requires a token to connect to a room. OdinClients handles token creation for you, so its easier to just use OdinClient for room creation. Typical procedure is to create an OdinClient instance with an access key and call its `createRoom` function to create a room with a name and for a user id. Then add event listeners to the room and call `join` to connect to the room.",content:`<pre><code class="language-TypeScript">export class OdinRoom
</code></pre>
<h1 id="heading"></h1>
<p>The OdinRoom class. Use createRoom from OdinClient instance to create a room. The OdinRoom requires a token to connect
to a room. OdinClients handles token creation for you, so its easier to just use OdinClient for room creation.
Typical procedure is to create an OdinClient instance with an access key and call its <code>createRoom</code> function to create
a room with a name and for a user id. Then add event listeners to the room and call <code>join</code> to connect to the room.</p>
<h2 id="constructor">Constructor</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/constructor/">constructor</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinroom/">OdinRoom</a></td>
<td>Creates a new instance of a room with a token. Use OdinClient if you don&rsquo;t want to manage tokens yourself. Important: Don&rsquo;t use this function directly, use OdinClient instead.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/id/">id</a></td>
<td>string</td>
<td>Gets the ID of the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/ownpeerid/">ownPeerId</a></td>
<td>number</td>
<td>Gets the ID of the local peer joined to the room.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/addeventlistener/">addEventListener</a></td>
<td>void</td>
<td>Adds an event listener to the room for specific events.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/close/">close</a></td>
<td>void</td>
<td>Closes the room and disconnects from the server.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/createaudiostream/">createAudioStream</a></td>
<td><a href="/odin/sdk/nodejs/classes/odinmedia/">OdinMedia</a></td>
<td>Creates a local audio stream and adds it to the room. An OdinMedia object will be returned that allows you to send audio data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/join/">join</a></td>
<td>void</td>
<td>Joins the room with the given gateway URL and optional user data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/removeeventlistener/">removeEventListener</a></td>
<td>void</td>
<td>Removes an event listener from the room for specific events.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/sendmessage/">sendMessage</a></td>
<td>void</td>
<td>Sends a message to the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/seteventlistener/">setEventListener</a></td>
<td>void</td>
<td>Sets a global event listener that received all events, this can be helpful for debugging. Please use addEventListener instead for production code.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/setpositionscale/">setPositionScale</a></td>
<td>void</td>
<td>Sets the scaling factor for coordinates supplied to <code>updatePosition</code>, facilitating adaptation to your game&rsquo;s unique coordinate system requirements. Peers are visible to each other only within a unit circle of radius <code>1.0</code>. When altering a peer&rsquo;s position, ensure the position is scaled such that the maximum distance remains one or less. This scaling can be performed manually or by specifying the multiplicative scale here. Note: It&rsquo;s crucial to maintain consistent scaling across all client applications.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/updateownuserdata/">updateOwnUserData</a></td>
<td>void</td>
<td>Updates the peer user data of the local peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/classes/odinroom/updateposition/">updatePosition</a></td>
<td>void</td>
<td>Updates the three-dimensional position of the current peer in this room. The server utilizes the provided coordinates to perform automatic culling among peers in the same room, based on unit circles with a radius of <code>1.0</code>. This feature is particularly beneficial in scenarios involving a large number of peers within the same room, enabling peers to interact or &lsquo;see&rsquo; each other only when in close proximity. To modify the distance sensitivity for position updates, use <code>setPositionScale</code>. Note: Use this before calling <code>join</code> to set the initial peer position upon connect.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1964,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/",title:"OdinRoom",section:"ODIN Documentation",description:" Wrapper class of for Unity. This convenient class provides dispatching of events to Unity with passthrough as well as predefined helper functions to cover for a default usecases where the voice chat is visually and logical represented Unity gameobject that are manageable with the Unity editor like Context menu, Inspector and/or Hierarchy window. Default Unity GameObject altering event callback functions: Creates GameObject with componentDestroy GameObject with componentDestroy this components GameObject if the connection is closed i.e cleanup ",content:`<p><a href='/odin/sdk/unity/2.0.0/manual/odinroom/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class OdinRoom : MonoBehaviour, IRoom
</code></pre>
<h1 id="heading"></h1>
<p>Wrapper class of Room for Unity.</p>
<p>
This convenient class provides dispatching of events to Unity with passthrough <see cref="!:UnityEngine.Events.UnityEvent"></see> 
as well as predefined helper functions to cover for a default usecases where the voice chat is visually and logical represented
Unity gameobject that are manageable with the Unity editor like Context menu, Inspector and/or Hierarchy window.
</p>
Default Unity GameObject altering event callback functions:
<ul><li>ConnectionStatusState(SystemDestroy this components GameObject if the connection is closed i.e cleanup</li></ul>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/gateway/">Gateway</a></td>
<td>Odin endpoint server</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/token/">Token</a></td>
<td>Odin room token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/audiomixergroup/">AudioMixerGroup</a></td>
<td>Unity mixer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/samplerate/">Samplerate</a></td>
<td>Unity samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/isstereo/">IsStereo</a></td>
<td>Unity channel flag</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/id/">Id</a></td>
<td>Odin room id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/parent/">Parent</a></td>
<td>Default value gameObject parent or Unity root</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onroomjoined/">OnRoomJoined</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaadded/">OnMediaAdded</a></td>
<td>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted/">OnMediaStarted</a> redirected as Unity event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaremoved/">OnMediaRemoved</a></td>
<td>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastopped/">OnMediaStopped</a> redirected as Unity event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerjoined/">OnPeerJoined</a></td>
<td>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onpeerjoined/">OnPeerJoined</a> redirected as Unity event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerleft/">OnPeerLeft</a></td>
<td>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onpeerleft/">OnPeerLeft</a> redirected as Unity event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmessagereceived/">OnMessageReceived</a></td>
<td>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onmessagereceived/">OnMessageReceived</a> redirected as Unity event</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onconnectionstatuschanged/">OnConnectionStatusChanged</a> redirected as Unity event</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/getbaseroom/">GetBaseRoom</a></td>
<td>Odin base room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/peerleftremovecomponent/">PeerLeftRemoveComponent</a></td>
<td>Removes all child components with the same peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/removepeercomponent/">RemovePeerComponent</a></td>
<td>Remove a Unity from a gameobject</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/peerjoinedcreatecomponent/">PeerJoinedCreateComponent</a></td>
<td>Add a new GameObject with a new Unity component</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/addpeercomponent/">AddPeerComponent</a></td>
<td>Add Unity to a gameobject</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/connectionstatusstate/">ConnectionStatusState</a></td>
<td>Check status if the room should destroy the gameobject</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/proxyaudio/">ProxyAudio</a></td>
<td>Redirects audio to all media encoders in the corresponding room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/linkinputmedia/">LinkInputMedia</a></td>
<td>Add a input media encoder to the corresponding room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/unlinkinputmedia/">UnlinkInputMedia</a></td>
<td>Remove a input media encoder from the corresponding room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/resumeoutputmedia/">ResumeOutputMedia</a></td>
<td>Start a stopped remote output decoder</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/pauseoutputmedia/">PauseOutputMedia</a></td>
<td>Stop a started remote output decoder</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroom/webrequesttoken/">WebRequestToken</a></td>
<td>Uses UnityWebRequest with POST data as json to get a response from a token-server</td>
</tr>
</tbody>
</table>
`}),e.add({id:1965,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/",title:"OdinRoom",section:"ODIN Documentation",description:"Class describing an `OdinRoom`.",content:`<pre><code class="language-TypeScript">export class OdinRoom
</code></pre>
<h1 id="heading"></h1>
<p>Class describing an <code>OdinRoom</code>.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/connectionstate/">connectionState</a></td>
<td><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></td>
<td>The current state of the room stream connection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/customer/">customer</a></td>
<td>string</td>
<td>The customer identifier this room is assigned to.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/data/">data</a></td>
<td>Uint8Array</td>
<td>The arbitrary user data of the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/id/">id</a></td>
<td>string</td>
<td>The ID of the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/ownpeer/">ownPeer</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></td>
<td>An instance of your own <code>OdinPeer</code> in the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/position/">position</a></td>
<td>any</td>
<td>The current three-dimensional position of our own <code>OdinPeer</code> in the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/remotepeers/">remotePeers</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">Map&lt;number&gt;&lt;OdinPeer&gt;</a></td>
<td>A map of all remote <code>OdinPeer</code> instances in the room using the peer ID as index.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/serveraddress/">serverAddress</a></td>
<td>string</td>
<td>The address of the voice server this room is living on.</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/addeventlistener/">addEventListener</a></td>
<td>void</td>
<td>Register to peer events from <code>IOdinRoomEvents</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/changemediastream/">changeMediaStream</a></td>
<td>Promise&lt;void&gt;</td>
<td>Changes the active capture stream (e.g. when switching to another input device).</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/changevolume/">changeVolume</a></td>
<td>void</td>
<td>Change the global master volume for the room (should be between 0 and 2).</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/createmedia/">createMedia</a></td>
<td><a href="/odin/sdk/web/classes/odinmedia/">Promise&lt;OdinMedia&gt;</a></td>
<td>Creates a new local media using the specified stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/disablevad/">disableVAD</a></td>
<td>void</td>
<td>Disables RNN-based voice activity detection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/disablevolumegate/">disableVolumeGate</a></td>
<td>void</td>
<td>Disables RNN-based voice activity detection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/enablevad/">enableVAD</a></td>
<td>void</td>
<td>Enables RNN-based voice activity detection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/enablevolumegate/">enableVolumeGate</a></td>
<td>void</td>
<td>Enables RNN-based voice activity detection.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/flushownpeerdataupdate/">flushOwnPeerDataUpdate</a></td>
<td>Promise&lt;void&gt;</td>
<td>Sends updated user data of your own peer to the server.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/getaudiosettings/">getAudioSettings</a></td>
<td><a href="/odin/sdk/web/interfaces/iodinaudiosettings/">undefined | IOdinAudioSettings</a></td>
<td>Returns the current voice processing config for VAD and volume gate.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/getmediabyid/">getMediaById</a></td>
<td><a href="/odin/sdk/web/classes/odinmedia/">undefined | OdinMedia</a></td>
<td>Returns the <code>OdinMedia</code> instance matching the specified ID.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/getpeerbyid/">getPeerById</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">undefined | OdinPeer</a></td>
<td>Returns the <code>OdinPeer</code> instance matching the specified ID.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/join/">join</a></td>
<td><a href="/odin/sdk/web/classes/odinpeer/">Promise&lt;OdinPeer&gt;</a></td>
<td>Joins the room and returns your own peer instance after the room was successfully joined.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/sendmessage/">sendMessage</a></td>
<td>Promise&lt;void&gt;</td>
<td>Sends a message with arbitrary data to all peers in the room or optionally to a list of specified peers.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/setposition/">setPosition</a></td>
<td>void</td>
<td>Updates the three-dimensional position of our own <code>OdinPeer</code> in the room to apply server-side culling.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/startvadmeter/">startVADMeter</a></td>
<td>void</td>
<td>Enables emitting of RNN-based voice activity detection statistics.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/stopvadmeter/">stopVADMeter</a></td>
<td>void</td>
<td>Disables emitting of RNN-based voice activity detection statistics.</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/updatevadthresholds/">updateVADThresholds</a></td>
<td>void</td>
<td>Updates thresholds for vice activity detection (between 0 and 1).</td>
</tr>
<tr>
<td><a href="/odin/sdk/web/classes/odinroom/updatevolumegatethresholds/">updateVolumeGateThresholds</a></td>
<td>void</td>
<td>Updates thresholds for the input volume gate (between -90 and 0).</td>
</tr>
</tbody>
</table>
`}),e.add({id:1966,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/",title:"OdinRoomConfig",section:"ODIN Documentation",description:" Audio processing configuration of an ODIN room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class OdinRoomConfig : IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Enable or disable the transient suppressor</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/getodindefault/">GetOdinDefault</a></td>
<td>Creates Apm OdinRoomConfig based on Odin</td>
</tr>
</tbody>
</table>
`}),e.add({id:1967,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/",title:"OdinRoomConfig",section:"ODIN Documentation",description:" Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public class OdinRoomConfig : IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/gaincontroller/">GainController</a></td>
<td>Boolean</td>
<td>Enable or disable the gain controller</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/getodindefault/">GetOdinDefault</a></td>
<td>Creates Apm OdinRoomConfig based on Odin</td>
</tr>
</tbody>
</table>
`}),e.add({id:1968,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/",title:"OdinRoomConfig",section:"ODIN Documentation",description:" Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public class OdinRoomConfig : IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Boolean</td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Single</td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Single</td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/volumegate/">VolumeGate</a></td>
<td>Boolean</td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Single</td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Single</td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/echocanceller/">EchoCanceller</a></td>
<td>Boolean</td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/highpassfilter/">HighPassFilter</a></td>
<td>Boolean</td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/preamplifier/">PreAmplifier</a></td>
<td>Boolean</td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Boolean</td>
<td>Enable or disable the transient suppressor</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/getodindefault/">GetOdinDefault</a></td>
<td>Creates Apm OdinRoomConfig based on Odin</td>
</tr>
</tbody>
</table>
`}),e.add({id:1969,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/",title:"OdinRoomConfig",section:"ODIN Documentation",description:" Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public class OdinRoomConfig : IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/constructor_0/">OdinRoomConfig(Boolean, Single, Single, Boolean, Single, Single, Boolean, Boolean, Boolean, OdinNoiseSuppressionLevel, Boolean, Boolean)</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/constructor_1/">OdinRoomConfig(IOdinApmConfig)</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/getodindefault/">GetOdinDefault</a></td>
<td>Creates Apm OdinRoomConfig based on Odin</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/volumegate/">VolumeGate</a></td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/echocanceller/">EchoCanceller</a></td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/highpassfilter/">HighPassFilter</a></td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/preamplifier/">PreAmplifier</a></td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/gaincontroller/">GainController</a></td>
<td>Enable or disable the gain controller</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1970,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/",title:"OdinRoomConfig",section:"ODIN Documentation",description:" Audio processing configuration of an ODIN room ",content:`<pre><code class="language-C#">public class OdinRoomConfig : IOdinApmConfig
</code></pre>
<h1 id="heading"></h1>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/constructor_0/">OdinRoomConfig(Boolean, Single, Single, Boolean, Single, Single, Boolean, Boolean, Boolean, OdinNoiseSuppressionLevel, Boolean, Boolean)</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/constructor_1/">OdinRoomConfig(IOdinApmConfig)</a></td>
<td>Audio processing configuration of an ODIN room</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/getodindefault/">GetOdinDefault</a></td>
<td>Creates Apm OdinRoomConfig based on Odin</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetection/">VoiceActivityDetection</a></td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetectionattackprobability/">VoiceActivityDetectionAttackProbability</a></td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/">VoiceActivityDetectionReleaseProbability</a></td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/volumegate/">VolumeGate</a></td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/volumegateattackloudness/">VolumeGateAttackLoudness</a></td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/volumegatereleaseloudness/">VolumeGateReleaseLoudness</a></td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/echocanceller/">EchoCanceller</a></td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/highpassfilter/">HighPassFilter</a></td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/preamplifier/">PreAmplifier</a></td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/noisesuppressionlevel/">NoiseSuppressionLevel</a></td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/transientsuppressor/">TransientSuppressor</a></td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/gaincontroller/">GainController</a></td>
<td>Enable or disable the gain controller</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:1971,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/constructor_0/",title:"OdinRoomConfig(Boolean, Single, Single, Boolean, Single, Single, Boolean, Boolean, Boolean, OdinNoiseSuppressionLevel, Boolean, Boolean)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinRoomConfig(bool voiceActivityDetection = false, float voiceActivityDetectionAttackProbability = 0F, float voiceActivityDetectionReleaseProbability = 0F, bool volumeGate = false, float volumeGateAttackLoudness = 0F, float volumeGateReleaseLoudness = 0F, bool echoCanceller = false, bool highPassFilter = false, bool preAmplifier = false, OdinNoiseSuppressionLevel noiseSuppressionLevel = null, bool transientSuppressor = false, bool gainController = false)
</code></pre>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>voiceActivityDetection</td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td>voiceActivityDetectionAttackProbability</td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td>voiceActivityDetectionReleaseProbability</td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td>volumeGate</td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td>volumeGateAttackLoudness</td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td>volumeGateReleaseLoudness</td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td>echoCanceller</td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td>highPassFilter</td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td>preAmplifier</td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td>noiseSuppressionLevel</td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td>transientSuppressor</td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td>gainController</td>
<td>Enable or disable the gain controller</td>
</tr>
</tbody>
</table>
`}),e.add({id:1972,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/constructor_0/",title:"OdinRoomConfig(Boolean, Single, Single, Boolean, Single, Single, Boolean, Boolean, Boolean, OdinNoiseSuppressionLevel, Boolean, Boolean)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinRoomConfig(bool voiceActivityDetection = false, float voiceActivityDetectionAttackProbability = 0F, float voiceActivityDetectionReleaseProbability = 0F, bool volumeGate = false, float volumeGateAttackLoudness = 0F, float volumeGateReleaseLoudness = 0F, bool echoCanceller = false, bool highPassFilter = false, bool preAmplifier = false, OdinNoiseSuppressionLevel noiseSuppressionLevel = null, bool transientSuppressor = false, bool gainController = false)
</code></pre>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>voiceActivityDetection</td>
<td>Enables or disables voice activity detection (VAD)</td>
</tr>
<tr>
<td>voiceActivityDetectionAttackProbability</td>
<td>Voice probability value when the VAD should engage.</td>
</tr>
<tr>
<td>voiceActivityDetectionReleaseProbability</td>
<td>Voice probability value when the VAD should disengage after previously being engaged.</td>
</tr>
<tr>
<td>volumeGate</td>
<td>Enables or disables volume gate</td>
</tr>
<tr>
<td>volumeGateAttackLoudness</td>
<td>Root mean square power (dBFS) when the volume gate should engage.</td>
</tr>
<tr>
<td>volumeGateReleaseLoudness</td>
<td>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</td>
</tr>
<tr>
<td>echoCanceller</td>
<td>Enable or disable echo cancellation</td>
</tr>
<tr>
<td>highPassFilter</td>
<td>Enable or disable high pass filtering</td>
</tr>
<tr>
<td>preAmplifier</td>
<td>Enable or disable the pre amplifier</td>
</tr>
<tr>
<td>noiseSuppressionLevel</td>
<td>Set the aggressiveness of the suppression</td>
</tr>
<tr>
<td>transientSuppressor</td>
<td>Enable or disable the transient suppressor</td>
</tr>
<tr>
<td>gainController</td>
<td>Enable or disable the gain controller</td>
</tr>
</tbody>
</table>
`}),e.add({id:1973,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/constructor_1/",title:"OdinRoomConfig(IOdinApmConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinRoomConfig(IOdinApmConfig odinApm)
</code></pre>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>odinApm</td>
<td>Interface for Audio processing configuration of an ODIN room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1974,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/constructor_1/",title:"OdinRoomConfig(IOdinApmConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinRoomConfig(IOdinApmConfig odinApm)
</code></pre>
<p>Audio processing configuration of an ODIN room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>odinApm</td>
<td>Interface for Audio processing configuration of an ODIN room</td>
</tr>
</tbody>
</table>
`}),e.add({id:1975,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/",title:"OdinRoomConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum OdinRoomConnectionState
</code></pre>
<h1 id="heading"></h1>
<p>Connection state of the ODIN client</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/connecting/">Connecting</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is being established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/connected/">Connected</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/disconnected/">Disconnected</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is closed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1976,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/",title:"OdinRoomConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionState
</code></pre>
<h1 id="heading"></h1>
<p>Connection state of the ODIN client</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/connecting/">Connecting</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is being established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/connected/">Connected</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/disconnected/">Disconnected</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is closed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1977,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/",title:"OdinRoomConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionState
</code></pre>
<h1 id="heading"></h1>
<p>Connection state of the ODIN client</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/connecting/">Connecting</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is being established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/connected/">Connected</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/disconnected/">Disconnected</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstate/">OdinRoomConnectionState</a></td>
<td>Connection is closed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1978,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/",title:"OdinRoomConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionState
</code></pre>
<h1 id="heading"></h1>
<p>Connection state of the ODIN client</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/connecting/">Connecting</a></td>
<td>Connection is being established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/connected/">Connected</a></td>
<td>Connection is established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstate/disconnected/">Disconnected</a></td>
<td>Connection is closed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1979,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstate/",title:"OdinRoomConnectionState",section:"ODIN Documentation",description:" Connection state of the ODIN client ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionState
</code></pre>
<h1 id="heading"></h1>
<p>Connection state of the ODIN client</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/connecting/">Connecting</a></td>
<td>Connection is being established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/connected/">Connected</a></td>
<td>Connection is established</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstate/disconnected/">Disconnected</a></td>
<td>Connection is closed</td>
</tr>
</tbody>
</table>
`}),e.add({id:1980,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/",title:"OdinRoomConnectionStateChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum OdinRoomConnectionStateChangeReason
</code></pre>
<h1 id="heading"></h1>
<p>Reason of connection state</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/clientrequested/">ClientRequested</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was initiated by the user</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/serverrequested/">ServerRequested</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was initiated by the server (e.g. peer was kicked)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/connectionlost/">ConnectionLost</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was caused by a timeout</td>
</tr>
</tbody>
</table>
`}),e.add({id:1981,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/",title:"OdinRoomConnectionStateChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionStateChangeReason
</code></pre>
<h1 id="heading"></h1>
<p>Reason of connection state</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/clientrequested/">ClientRequested</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was initiated by the user</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/serverrequested/">ServerRequested</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was initiated by the server (e.g. peer was kicked)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/connectionlost/">ConnectionLost</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was caused by a timeout</td>
</tr>
</tbody>
</table>
`}),e.add({id:1982,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/",title:"OdinRoomConnectionStateChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionStateChangeReason
</code></pre>
<h1 id="heading"></h1>
<p>Reason of connection state</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/clientrequested/">ClientRequested</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was initiated by the user</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/serverrequested/">ServerRequested</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was initiated by the server (e.g. peer was kicked)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/connectionlost/">ConnectionLost</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td>Connection state change was caused by a timeout</td>
</tr>
</tbody>
</table>
`}),e.add({id:1983,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/",title:"OdinRoomConnectionStateChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionStateChangeReason
</code></pre>
<h1 id="heading"></h1>
<p>Reason of connection state</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/clientrequested/">ClientRequested</a></td>
<td>Connection state change was initiated by the user</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/serverrequested/">ServerRequested</a></td>
<td>Connection state change was initiated by the server (e.g. peer was kicked)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/connectionlost/">ConnectionLost</a></td>
<td>Connection state change was caused by a timeout</td>
</tr>
</tbody>
</table>
`}),e.add({id:1984,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/",title:"OdinRoomConnectionStateChangeReason",section:"ODIN Documentation",description:" Reason of connection state ",content:`<pre><code class="language-C#">public enum OdinRoomConnectionStateChangeReason
</code></pre>
<h1 id="heading"></h1>
<p>Reason of connection state</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/clientrequested/">ClientRequested</a></td>
<td>Connection state change was initiated by the user</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/serverrequested/">ServerRequested</a></td>
<td>Connection state change was initiated by the server (e.g. peer was kicked)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/connectionlost/">ConnectionLost</a></td>
<td>Connection state change was caused by a timeout</td>
</tr>
</tbody>
</table>
`}),e.add({id:1985,href:"https://www.4players.io/odin/sdk/web/types/odinroomdatachangedevent/",title:"OdinRoomDataChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinRoomDataChangedEvent = (event: IOdinEvent&lt;IOdinRoomDataChangedEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinRoomDataChangedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when the global user data of a room changed by a remote peer.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinRoomDataChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinroomdatachangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="example">Example</h2>





<div id="example-25e3e3e6e9f99f6bde7328594f962cff" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinRoomDataChangedEvent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-25e3e3e6e9f99f6bde7328594f962cff-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-25e3e3e6e9f99f6bde7328594f962cff-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

const startOdin = async function (token: string) {
  // Authenticate using a token obtained externally and spawn a room instance
  const odinRoom = await OdinClient.initRoom(token);

  // Adds an event listener to get notified whenever a remote peer updated the global room user data
  odinRoom.addEventListener(&#39;UserDataChanged&#39;, (event) =&gt; {
    console.log(&#39;Updated room user data received:&#39;, event.payload.room.data);
  });

  // Join the room
  odinRoom.join();
};

startOdin(&#39;__YOUR TOKEN__&#39;).then(() =&gt; {
  console.log(&#39;Started ODIN&#39;);
});
</code></pre>
    </div></div>
</div>


<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinRoomDataChangedEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1986,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroomhandle/",title:"OdinRoomHandle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinRoomHandle : SafeHandleZeroOrMinusOneIsInvalid
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinroomhandle/isalive/">IsAlive</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1987,href:"https://www.4players.io/odin/sdk/web/types/odinroomjoinedleftevent/",title:"OdinRoomJoinedLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinRoomJoinedLeftEvent = (event: IOdinEvent&lt;IOdinRoomJoinedLeftEventPayload&gt;)
</code></pre>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>OdinRoomJoinedLeftEvent</code> event is emitted <strong>internally</strong> when a room was joined/left. It is reserved for future use.</p>
<p>To get notifications about your own client joining/leaving a room, use the <span class="external-reference">OdinConnectionStateChangedEvent <a href="/odin/sdk/web/types/odinconnectionstatechangedevent/"><i class="fas fa-external-link-alt"></i></a></span>
 event instead.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
</div>



<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>IOdinEvent&lt;IOdinRoomJoinedLeftEventPayload&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1988,href:"https://www.4players.io/odin/sdk/nodejs/types/odinroomuserdatachangedevent/",title:"OdinRoomUserDataChangedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-TypeScript">type OdinRoomUserDataChangedEvent = (event: OdinRoomUserDataChangedEventPayload)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>event</td>
<td>OdinRoomUserDataChangedEventPayload</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1989,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/",title:"OdinRoomUserDataChangedEventPayload",section:"ODIN Documentation",description:"The payload for the RoomUserDataChanged event.",content:`<pre><code class="language-TypeScript">export interface OdinRoomUserDataChangedEventPayload
</code></pre>
<h1 id="heading"></h1>
<p>The payload for the RoomUserDataChanged event.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/event/">event</a></td>
<td>any</td>
<td>The name of the event that was fired (see keys of OdinEvents for possible values).</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/tag/">tag</a></td>
<td>number</td>
<td>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</td>
</tr>
<tr>
<td><a href="/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/userdata/">userData</a></td>
<td>undefined | Uint8Array</td>
<td>The new user data of the room.</td>
</tr>
</tbody>
</table>
`}),e.add({id:1990,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinrpc/",title:"OdinRpc",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinRpc
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinrpc/bytes/">bytes</a></td>
<td>byte[]</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinrpc/bytes_length/">bytes_length</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1991,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/",title:"OdinSensitivityConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinSensitivityConfig
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/enabled/">enabled</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/attack_threshold/">attack_threshold</a></td>
<td>when the trigger should engage</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/release_threshold/">release_threshold</a></td>
<td>when the trigger should disengage</td>
</tr>
</tbody>
</table>
`}),e.add({id:1992,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/",title:"OdinTerrainFilterComponent",section:"ODIN Documentation",description:" Custom filter by terrain component for This class is a effect in the odin audio pipline to mute audio based on location of a GameObject relative to a terrain type in Unity space. Note that the default implementation is Unity specific on a 2D calculation with X, Z and is not useful in all occlusions. ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinTerrainFilterComponent : OdinCustomEffectUnityComponentBase&lt;TerrainFilterUserData&gt;, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>Custom filter by terrain component for Media</p>
<p>
This class is a effect in the odin audio pipline to mute audio based on location of a GameObject relative to a terrain type in Unity space.
Note that the default implementation is Unity specific on a 2D calculation with X, Z and is not useful in all occlusions.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/emitter/">Emitter</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/data/">Data</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/setuserdata/">SetUserData</a></td>
<td>Set delegate userdata for effect callback</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/geteffectuserdata/">GetEffectUserData</a></td>
<td>Get delegate userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/customeffectcallback/">CustomEffectCallback</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1993,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odintokengeneratorhandle/",title:"OdinTokenGeneratorHandle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class OdinTokenGeneratorHandle : SafeHandleZeroOrMinusOneIsInvalid
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odintokengeneratorhandle/isalive/">IsAlive</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1994,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/",title:"OdinUserDataTarget",section:"ODIN Documentation",description:" Supported targets for user data updates. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum OdinUserDataTarget
</code></pre>
<h1 id="heading"></h1>
<p>Supported targets for user data updates.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/odinuserdatatarget_peer/">OdinUserDataTarget_Peer</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Peer UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/odinuserdatatarget_room/">OdinUserDataTarget_Room</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Room UserData</td>
</tr>
</tbody>
</table>
`}),e.add({id:1995,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/",title:"OdinUserDataTarget",section:"ODIN Documentation",description:" Supported targets for user data updates. ",content:`<pre><code class="language-C#">public enum OdinUserDataTarget
</code></pre>
<h1 id="heading"></h1>
<p>Supported targets for user data updates.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/odinuserdatatarget_peer/">OdinUserDataTarget_Peer</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Peer UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/odinuserdatatarget_room/">OdinUserDataTarget_Room</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Room UserData</td>
</tr>
</tbody>
</table>
`}),e.add({id:1996,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/",title:"OdinUserDataTarget",section:"ODIN Documentation",description:" Supported targets for user data updates. ",content:`<pre><code class="language-C#">public enum OdinUserDataTarget
</code></pre>
<h1 id="heading"></h1>
<p>Supported targets for user data updates.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/odinuserdatatarget_peer/">OdinUserDataTarget_Peer</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Peer UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/odinuserdatatarget_room/">OdinUserDataTarget_Room</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Room UserData</td>
</tr>
</tbody>
</table>
`}),e.add({id:1997,href:"https://www.4players.io/odin/sdk/unity/enums/odinuserdatatarget/",title:"OdinUserDataTarget",section:"ODIN Documentation",description:" Supported targets for user data updates. ",content:`<pre><code class="language-C#">public enum OdinUserDataTarget
</code></pre>
<h1 id="heading"></h1>
<p>Supported targets for user data updates.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinuserdatatarget/odinuserdatatarget_peer/">OdinUserDataTarget_Peer</a></td>
<td><a href="/odin/sdk/unity/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Peer UserData</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/odinuserdatatarget/odinuserdatatarget_room/">OdinUserDataTarget_Room</a></td>
<td><a href="/odin/sdk/unity/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td>Room UserData</td>
</tr>
</tbody>
</table>
`}),e.add({id:1998,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/odinuserdatatarget_peer/",title:"OdinUserDataTarget_Peer",section:"ODIN Documentation",description:" Peer UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">OdinUserDataTarget_Peer = 0
</code></pre>
<p>Peer UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:1999,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/odinuserdatatarget_peer/",title:"OdinUserDataTarget_Peer",section:"ODIN Documentation",description:" Peer UserData ",content:`<pre><code class="language-C#">OdinUserDataTarget_Peer = 0
</code></pre>
<p>Peer UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2e3,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/odinuserdatatarget_peer/",title:"OdinUserDataTarget_Peer",section:"ODIN Documentation",description:" Peer UserData ",content:`<pre><code class="language-C#">OdinUserDataTarget_Peer = 0
</code></pre>
<p>Peer UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2001,href:"https://www.4players.io/odin/sdk/unity/enums/odinuserdatatarget/odinuserdatatarget_peer/",title:"OdinUserDataTarget_Peer",section:"ODIN Documentation",description:" Peer UserData ",content:`<pre><code class="language-C#">OdinUserDataTarget_Peer = 0
</code></pre>
<p>Peer UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2002,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/odinuserdatatarget_room/",title:"OdinUserDataTarget_Room",section:"ODIN Documentation",description:" Room UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">OdinUserDataTarget_Room = 1
</code></pre>
<p>Room UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2003,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/odinuserdatatarget_room/",title:"OdinUserDataTarget_Room",section:"ODIN Documentation",description:" Room UserData ",content:`<pre><code class="language-C#">OdinUserDataTarget_Room = 1
</code></pre>
<p>Room UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2004,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/odinuserdatatarget_room/",title:"OdinUserDataTarget_Room",section:"ODIN Documentation",description:" Room UserData ",content:`<pre><code class="language-C#">OdinUserDataTarget_Room = 1
</code></pre>
<p>Room UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2005,href:"https://www.4players.io/odin/sdk/unity/enums/odinuserdatatarget/odinuserdatatarget_room/",title:"OdinUserDataTarget_Room",section:"ODIN Documentation",description:" Room UserData ",content:`<pre><code class="language-C#">OdinUserDataTarget_Room = 1
</code></pre>
<p>Room UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinuserdatatarget/">OdinUserDataTarget</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2006,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/",title:"OdinVadComponent",section:"ODIN Documentation",description:" VoiceActivity component for This class provides configuration for the native implemented voice detection. Supports speech recognition and/or a volume threshold. ",content:`<pre><code class="language-C#">public class OdinVadComponent : MonoBehaviour, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>VoiceActivity component for Media</p>
<p>
This class provides configuration for the native implemented voice detection. Supports speech recognition and/or a volume threshold.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/media/">Media</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/effect/">Effect</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/iscreated/">IsCreated</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/voiceactivityenabled/">VoiceActivityEnabled</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/voiceactivityattackthreshold/">VoiceActivityAttackThreshold</a></td>
<td>Idicates the vad attack probability setting in NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/voiceactivityreleasethreshold/">VoiceActivityReleaseThreshold</a></td>
<td>Idicates the vad release probability setting in NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/volumegateenabled/">VolumeGateEnabled</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/volumegateattackthreshold/">VolumeGateAttackThreshold</a></td>
<td>Idicates the gate attack loudness setting in NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/volumegatereleasethreshold/">VolumeGateReleaseThreshold</a></td>
<td>Idicates the gate release loudness setting in NativeBindings</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/updateconfig/">UpdateConfig</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/reseteffect/">ResetEffect</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/getmedia/">GetMedia</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvadcomponent/geteffect/">GetEffect</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2007,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinvadconfig/",title:"OdinVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct OdinVadConfig
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/voice_activity/">voice_activity</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/volume_gate/">volume_gate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2008,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/nativebindings/odinversion/",title:"OdinVersion",section:"ODIN Documentation",description:" ODIN_VERSION ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public const string OdinVersion = &quot;1.0.0&quot;
</code></pre>
<p>ODIN_VERSION</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2009,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/nativebindings/odinversion/",title:"OdinVersion",section:"ODIN Documentation",description:" ODIN_VERSION ",content:`<pre><code class="language-C#">public const string OdinVersion = &quot;1.5.8&quot;
</code></pre>
<p>ODIN_VERSION</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2010,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/nativebindings/odinversion/",title:"OdinVersion",section:"ODIN Documentation",description:" ODIN_VERSION ",content:`<pre><code class="language-C#">public const string OdinVersion = &quot;1.6.0&quot;
</code></pre>
<p>ODIN_VERSION</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2011,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/nativebindings/odinversion/",title:"OdinVersion",section:"ODIN Documentation",description:" ODIN_VERSION ",content:`<pre><code class="language-C#">public const string OdinVersion = &quot;1.6.7&quot;
</code></pre>
<p>ODIN_VERSION</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2012,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/nativebindings/odinversion/",title:"OdinVersion",section:"ODIN Documentation",description:" ODIN_VERSION ",content:`<pre><code class="language-C#">public const string OdinVersion = &quot;1.0.0&quot;
</code></pre>
<p>ODIN_VERSION</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2013,href:"https://www.4players.io/odin/sdk/unity/classes/nativebindings/odinversion/",title:"OdinVersion",section:"ODIN Documentation",description:" ODIN_VERSION ",content:`<pre><code class="language-C#">public const string OdinVersion = &quot;1.6.7&quot;
</code></pre>
<p>ODIN_VERSION</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2014,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/",title:"OdinVolumeBoostComponent",section:"ODIN Documentation",description:" Custom volume scale component for This class is a effect in the odin audio pipline to scale each sample individually in the buffer. ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinVolumeBoostComponent : OdinCustomEffectUnityComponentBase&lt;IntPtr&gt;, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>Custom volume scale component for Media</p>
<p>
This class is a effect in the odin audio pipline to scale each sample individually in the buffer.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/exponentofscale/">ExponentOfScale</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/scale/">Scale</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/customeffectcallback/">CustomEffectCallback</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2015,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/",title:"OdinVolumeComponent",section:"ODIN Documentation",description:" Custom volume component for . Recommend the use of AudioSource.volume or AudioMixer/AudioMixerGroup instead This class is a effect in the odin audio pipline to change audio buffers by amplify the volume level. ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class OdinVolumeComponent : OdinCustomEffectUnityComponentBase&lt;IntPtr&gt;, IOdinEffect
</code></pre>
<h1 id="heading"></h1>
<p>Custom volume component for Media. Recommend the use of AudioSource.volume or AudioMixer/AudioMixerGroup instead</p>
<p>
This class is a effect in the odin audio pipline to change audio buffers by amplify the volume level.
</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/volume/">Volume</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/ldb/">Ldb</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/customeffectcallback/">CustomEffectCallback</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2016,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/utility/ok/",title:"OK",section:"ODIN Documentation",description:" Representative ErrorCode for Ok. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public const uint OK = 0U
</code></pre>
<p>Representative ErrorCode for Ok.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2017,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/utility/ok/",title:"OK",section:"ODIN Documentation",description:" Representative ErrorCode for Ok. ",content:`<pre><code class="language-C#">public const uint OK = 0U
</code></pre>
<p>Representative ErrorCode for Ok.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2018,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/utility/ok/",title:"OK",section:"ODIN Documentation",description:" Representative ErrorCode for Ok. ",content:`<pre><code class="language-C#">public const uint OK = 0U
</code></pre>
<p>Representative ErrorCode for Ok.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2019,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/utility/ok/",title:"OK",section:"ODIN Documentation",description:" Representative ErrorCode for Ok. ",content:`<pre><code class="language-C#">public const uint OK = 0U
</code></pre>
<p>Representative ErrorCode for Ok.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2020,href:"https://www.4players.io/odin/sdk/unity/classes/utility/ok/",title:"OK",section:"ODIN Documentation",description:" Representative ErrorCode for Ok. ",content:`<pre><code class="language-C#">public const uint OK = 0U
</code></pre>
<p>Representative ErrorCode for Ok.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2021,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/oldstate/",title:"oldState",section:"ODIN Documentation",description:"Previous state of the connection.",content:`<pre><code class="language-C#">OdinConnectionState
</code></pre>
<p>Previous state of the connection.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></p>
`}),e.add({id:2022,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/onactivestatechanged/",title:"OnActiveStateChanged",section:"ODIN Documentation",description:" Trigger on changed ",content:`<pre><code class="language-C#">public MediaActiveStateChangedProxy OnActiveStateChanged
</code></pre>
<p>Trigger on <a href="/odin/sdk/unity/2.0.0/classes/odinmedia/activity/">Activity</a> changed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2023,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/onaudiodata/",title:"OnAudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UnityAudioData OnAudioData
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/unityaudiodata/">UnityAudioData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2024,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/onaudiodata/",title:"OnAudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UnityAudioData OnAudioData
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/unityaudiodata/">UnityAudioData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2025,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onconnectionstatechanged/",title:"OnConnectionStateChanged",section:"ODIN Documentation",description:" Called on the Room that changed the connection state ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ConnectionStateChangedProxy OnConnectionStateChanged
</code></pre>
<p>Called on the Room that changed the connection state</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the client loses connection every connected room sends this event. Reconnect can fail and run into a timeout consequently additional events can be delayed.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2026,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onconnectionstatechanged/",title:"OnConnectionStateChanged",section:"ODIN Documentation",description:" Called on the Room that changed the connection state ",content:`<pre><code class="language-C#">public ConnectionStateChangedProxy OnConnectionStateChanged
</code></pre>
<p>Called on the Room that changed the connection state</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the client loses connection every connected room sends this event. Reconnect can fail and run into a timeout consequently additional events can be delayed.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2027,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onconnectionstatechanged/",title:"OnConnectionStateChanged",section:"ODIN Documentation",description:" Called on the Room that changed the connection state ",content:`<pre><code class="language-C#">public ConnectionStateChangedProxy OnConnectionStateChanged
</code></pre>
<p>Called on the Room that changed the connection state</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the client loses connection every connected room sends this event. Reconnect can fail and run into a timeout consequently additional events can be delayed.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2028,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onconnectionstatechanged/",title:"OnConnectionStateChanged",section:"ODIN Documentation",description:" Called on the Room that changed the connection state ",content:`<pre><code class="language-C#">public ConnectionStateChangedProxy OnConnectionStateChanged
</code></pre>
<p>Called on the Room that changed the connection state</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the client loses connection every connected room sends this event. Reconnect can fail and run into a timeout consequently additional events can be delayed.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2029,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onconnectionstatechanged/",title:"OnConnectionStateChanged",section:"ODIN Documentation",description:" Event redirected as Unity event ",content:`<pre><code class="language-C#">public ConnectionStateChangedProxy OnConnectionStateChanged
</code></pre>
<p>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onconnectionstatuschanged/">OnConnectionStatusChanged</a> redirected as Unity event</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2030,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onconnectionstatechanged/",title:"OnConnectionStateChanged",section:"ODIN Documentation",description:" Called on the Room that changed the connection state ",content:`<pre><code class="language-C#">public ConnectionStateChangedProxy OnConnectionStateChanged
</code></pre>
<p>Called on the Room that changed the connection state</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If the client loses connection every connected room sends this event. Reconnect can fail and run into a timeout consequently additional events can be delayed.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedproxy/">ConnectionStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2031,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onconnectionstatuschangeddelegate/",title:"OnConnectionStatusChangedDelegate",section:"ODIN Documentation",description:" Odin connection status ",content:`<pre><code class="language-C#">public delegate void OnConnectionStatusChangedDelegate(object sender, string connectionStatus);
</code></pre>
<h1 id="heading"></h1>
<p>Odin connection status</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>connectionStatus</td>
<td>String</td>
<td>string status</td>
</tr>
</tbody>
</table>
`}),e.add({id:2032,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/oncreatedmediaobject/",title:"OnCreatedMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler created a MediaStream that was requested by the MediaQueue ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public UnityCreatedMediaObject OnCreatedMediaObject
</code></pre>
<p>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaadded/">OnMediaAdded</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2033,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/oncreatedmediaobject/",title:"OnCreatedMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler created a MediaStream that was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityCreatedMediaObject OnCreatedMediaObject
</code></pre>
<p>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaadded/">OnMediaAdded</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2034,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/oncreatedmediaobject/",title:"OnCreatedMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler created a MediaStream that was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityCreatedMediaObject OnCreatedMediaObject
</code></pre>
<p>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaadded/">OnMediaAdded</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2035,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/oncreatedmediaobject/",title:"OnCreatedMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler created a MediaStream that was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityCreatedMediaObject OnCreatedMediaObject
</code></pre>
<p>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after OdinHandler</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2036,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/",title:"OnCreatedMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler created a MediaStream that was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityCreatedMediaObject OnCreatedMediaObject
</code></pre>
<p>Called if this OdinHandler created a MediaStream that was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/">OnMediaAdded</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/unitycreatedmediaobject/">UnityCreatedMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) has joined a room and starts sending audio data (i.e. has activated the
microphone) this event is triggered after <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
<p>You can respond to this event and call the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the <span class="external-reference">OdinHandler.Instance <a href="/odin/sdk/unity/classes/odinhandler/instance/"><i class="fas fa-external-link-alt"></i></a></span>
 like shown in the example below.</p>
<p>Your callback function must have this structure and contains information about the room, peer and the media object.</p>
<pre><code class="language-C#">public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, int&gt;;
</code></pre>
<p>Whenever this callback is triggered, imagine a new player comes in the arena and the game master needs to give him a
Walky Talky so that he can listen and talk to the other players.</p>
</div>



<h2 id="example">Example</h2>





<div id="example-c64209f8b332a9c1feea998b818366f9" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OnCreatedMediaObject Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-c64209f8b332a9c1feea998b818366f9-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-c64209f8b332a9c1feea998b818366f9-cs">
      <pre><code class="hljs language-cs">private void OnCreatedMediaObject(string roomName, ulong peerId, ushort mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    // Find the players game object in the scene
    var peerContainer = FindPlayerForPeerId(peerId);

    // Add PlaybackComponent to new dummy PeerCube
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    // Some AudioSource test settings
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2037,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnection/ondatagram/",title:"OnDatagram",section:"ODIN Documentation",description:" Redirect of ",content:`<pre><code class="language-C#">public DatagramProxy OnDatagram
</code></pre>
<p>Redirect of <a href="/odin/sdk/unity/2.0.0/classes/room/ondatagram/">OnDatagram</a></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagramproxy/">DatagramProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2038,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/ondeletemediaobject/",title:"OnDeleteMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public UnityDeleteMediaObject OnDeleteMediaObject
</code></pre>
<p>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2039,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/ondeletemediaobject/",title:"OnDeleteMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityDeleteMediaObject OnDeleteMediaObject
</code></pre>
<p>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2040,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/ondeletemediaobject/",title:"OnDeleteMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityDeleteMediaObject OnDeleteMediaObject
</code></pre>
<p>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2041,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/ondeletemediaobject/",title:"OnDeleteMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityDeleteMediaObject OnDeleteMediaObject
</code></pre>
<p>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after OdinHandler</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2042,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/",title:"OnDeleteMediaObject",section:"ODIN Documentation",description:" Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue ",content:`<pre><code class="language-C#">public UnityDeleteMediaObject OnDeleteMediaObject
</code></pre>
<p>Called if this OdinHandler destroyed a MediaStream that was closed by a remote peer and was requested by the MediaQueue</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes after <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/">OnMediaRemoved</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/unitydeletemediaobject/">UnityDeleteMediaObject</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2043,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaactivestatechanged/",title:"OnMediaActiveStateChanged",section:"ODIN Documentation",description:" Called on every activity change of a media in the same room(s) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaActiveStateChangedProxy OnMediaActiveStateChanged
</code></pre>
<p>Called on every activity change of a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2044,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaactivestatechanged/",title:"OnMediaActiveStateChanged",section:"ODIN Documentation",description:" Called on every activity change of a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaActiveStateChangedProxy OnMediaActiveStateChanged
</code></pre>
<p>Called on every activity change of a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2045,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaactivestatechanged/",title:"OnMediaActiveStateChanged",section:"ODIN Documentation",description:" Called on every activity change of a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaActiveStateChangedProxy OnMediaActiveStateChanged
</code></pre>
<p>Called on every activity change of a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2046,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onmediaactivestatechanged/",title:"OnMediaActiveStateChanged",section:"ODIN Documentation",description:" Called on every activity change of a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaActiveStateChangedProxy OnMediaActiveStateChanged
</code></pre>
<p>Called on every activity change of a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2047,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmediaactivestatechanged/",title:"OnMediaActiveStateChanged",section:"ODIN Documentation",description:" Called on every activity change of a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaActiveStateChangedProxy OnMediaActiveStateChanged
</code></pre>
<p>Called on every activity change of a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaactivestatechangedproxy/">MediaActiveStateChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2048,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Called on every Peer that created a media in the same room(s) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Called on every Peer that created a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2049,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Called on every Peer that created a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Called on every Peer that created a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2050,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Called on every Peer that created a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Called on every Peer that created a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2051,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Called on every Peer that created a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Called on every Peer that created a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2052,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Additional event redirect from ",content:`<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Additional event redirect from Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Usually invoked by MediaAddedPeerCreateComponent(System</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2053,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Event redirected as Unity event ",content:`<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted/">OnMediaStarted</a> redirected as Unity event</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2054,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmediaadded/",title:"OnMediaAdded",section:"ODIN Documentation",description:" Called on every Peer that created a media in the same room(s) ",content:`<pre><code class="language-C#">public MediaAddedProxy OnMediaAdded
</code></pre>
<p>Called on every Peer that created a media in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaaddedproxy/">MediaAddedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) has joined a room and starts sending audio data (i.e. has activated the
microphone) this event is triggered.</p>
<p>You need to respond to this event and call the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the <span class="external-reference">OdinHandler.Instance <a href="/odin/sdk/unity/classes/odinhandler/instance/"><i class="fas fa-external-link-alt"></i></a></span>

like shown in the example below.</p>
<p>Your callback function must have this structure. <span class="external-reference">MediaAddedEventArgs <a href="/odin/sdk/unity/classes/mediaaddedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 contains information about the
peer and the media added to the room:</p>
<pre><code class="language-C#">public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs);
</code></pre>
<p>Whenever this callback is triggered, imagine a new player comes in the arena and the game master needs to give him a
Walky Talky so that he can listen and talk to the other players.</p>
</div>



<h2 id="example">Example</h2>





<div id="example-f9de095a386fc79b73e4c39e115c5192" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OnMediaAdded Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-f9de095a386fc79b73e4c39e115c5192-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-f9de095a386fc79b73e4c39e115c5192-cs">
      <pre><code class="hljs language-cs">using OdinNative.Odin;
using OdinNative.Odin.Room;
using OdinNative.Unity;
using OdinNative.Unity.Audio;
using UnityEngine;

public class MyOdinPeerManager : MonoBehaviour
{
    private void AttachOdinPlaybackToPlayer(PlayerScript player, Room room, ulong peerId, int mediaId)
    {
        // Create the PlaybackComponent and AudioSource at the players gameObject
        PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(player.gameObject, room.Config.Name, peerId, mediaId);

        // Setup the Playback Component
        playback.CheckPlayingStatusAsInvoke = true; // set checking status as MonoBehaviour.InvokeRepeating active
        playback.PlayingStatusDelay = 1.0f; // (default 0f)
        playback.PlayingStatusRepeatingTime = 0.3f; // (default 0.2f)

        // Make the AudioSource a 3D source (use 0.0 if the volume should be the same regardless of position to the camera)
        playback.PlaybackSource.spatialBlend = 1.0f; // set AudioSource to full 3D
    }

    public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
    {
        // Called if a peer has started to send audio
        Room room = sender as Room;
        Debug.Log($&#34;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&#34;);

        // Use the User Data to to map the ODIN peer to the player in the network
        CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
        PlayerScript player = GetPlayerForOdinPeer(userData);
        if (player)
        {
            // We have found a player, attach the ODIN audio to that player
            AttachOdinPlaybackToPlayer(player, room, eventArgs.PeerId, eventArgs.Media.Id);
        }
    }
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2055,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Called on every Peer that closed/destroyed one of his own media in the same room(s) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Called on every Peer that closed/destroyed one of his own media in the same room(s)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes before <a href="/odin/sdk/unity/1.1.0/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2056,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Called on every Peer that closed/destroyed one of his own media in the same room(s) ",content:`<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Called on every Peer that closed/destroyed one of his own media in the same room(s)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes before <a href="/odin/sdk/unity/1.5.8/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2057,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Called on every Peer that closed/destroyed one of his own media in the same room(s) ",content:`<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Called on every Peer that closed/destroyed one of his own media in the same room(s)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes before <a href="/odin/sdk/unity/1.6.0/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2058,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Called on every Peer that closed/destroyed one of his own media in the same room(s) ",content:`<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Called on every Peer that closed/destroyed one of his own media in the same room(s)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes before OdinHandler</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2059,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Additional event redirect from ",content:`<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Additional event redirect from Unity</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Usually invoked by MediaRemovedPeerRemoveComponent(System</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2060,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Event redirected as Unity event ",content:`<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastopped/">OnMediaStopped</a> redirected as Unity event</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2061,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmediaremoved/",title:"OnMediaRemoved",section:"ODIN Documentation",description:" Called on every Peer that closed/destroyed one of his own media in the same room(s) ",content:`<pre><code class="language-C#">public MediaRemovedProxy OnMediaRemoved
</code></pre>
<p>Called on every Peer that closed/destroyed one of his own media in the same room(s)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes before <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/">OnDeleteMediaObject</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediaremovedproxy/">MediaRemovedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) stops sending audio data (i.e. has deactivated the microphone) this
event is triggered.</p>
<p>Your callback function must have this structure. <span class="external-reference">MediaRemovedEventArgs <a href="/odin/sdk/unity/classes/mediaremovedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 contains information about the
peer and the media removed from the room:</p>
<pre><code class="language-C#">public void OnMediaRemoved(object sender, MediaRemovedEventArgs eventArgs);
</code></pre>
<p>You need to respond to this event and you need to remove the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 that you have attached
to a game object before in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 callback. You also need to remove the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>

from the Game Object which has been created by ODIN automatically.</p>
</div>



<h2 id="example">Example</h2>





<div id="example-6f1df56b3f188c46619351ae00696b3f" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OnMediaRemoved Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-6f1df56b3f188c46619351ae00696b3f-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-6f1df56b3f188c46619351ae00696b3f-cs">
      <pre><code class="hljs language-cs">using OdinNative.Odin;
using OdinNative.Odin.Room;
using OdinNative.Unity;
using OdinNative.Unity.Audio;
using UnityEngine;

public class MyOdinPeerManager : MonoBehaviour
{
    public void RemoveOdinPlaybackFromPlayer(PlayerScript player)
    {
        // Remove the PlaybackComponent and the AudioSource
        PlaybackComponent playback = player.GetComponent&lt;PlaybackComponent&gt;();
        Destroy(playback);

        AudioSource audioSource = player.GetComponent&lt;AudioSource&gt;();
        Destroy(audioSource);
    }

    public void OnMediaRemoved(object sender, MediaRemovedEventArgs eventArgs)
    {
        // Called when the peer stops sending audio
        Room room = sender as Room;
        Debug.Log($&#34;ODIN MEDIA REMOVED. Room: {room.Config.Name}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&#34;);

        // Use the User Data to to map the ODIN peer to the player in the network
        CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
        PlayerScript player = GetPlayerForOdinPeer(userData);
        if (player)
        {
            RemoveOdinPlaybackFromPlayer(player);
        }
    }
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2062,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onmediastarteddelegate/",title:"OnMediaStartedDelegate",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public delegate void OnMediaStartedDelegate(object sender, ulong peerId, MediaRpc media);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>media</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/mediarpc/">MediaRpc</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2063,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onmediastoppeddelegate/",title:"OnMediaStoppedDelegate",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public delegate void OnMediaStoppedDelegate(object sender, ulong peerId, ushort mediaId);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2064,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onmessagereceived/",title:"OnMessageReceived",section:"ODIN Documentation",description:" Called on every Peer that received message from a peer by ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MessageReceivedProxy OnMessageReceived
</code></pre>
<p>Called on every Peer that received message from a peer by <see cref="!:OdinNative.Odin.Room.Room.SendMessage(ulong, byte[])"></see></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2065,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onmessagereceived/",title:"OnMessageReceived",section:"ODIN Documentation",description:" Called on every Peer that received message from a peer by ",content:`<pre><code class="language-C#">public MessageReceivedProxy OnMessageReceived
</code></pre>
<p>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2066,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onmessagereceived/",title:"OnMessageReceived",section:"ODIN Documentation",description:" Called on every Peer that received message from a peer by ",content:`<pre><code class="language-C#">public MessageReceivedProxy OnMessageReceived
</code></pre>
<p>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2067,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onmessagereceived/",title:"OnMessageReceived",section:"ODIN Documentation",description:" Called on every Peer that received message from a peer by ",content:`<pre><code class="language-C#">public MessageReceivedProxy OnMessageReceived
</code></pre>
<p>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2068,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onmessagereceived/",title:"OnMessageReceived",section:"ODIN Documentation",description:" Event redirected as Unity event ",content:`<pre><code class="language-C#">public MessageReceivedProxy OnMessageReceived
</code></pre>
<p>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onmessagereceived/">OnMessageReceived</a> redirected as Unity event</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2069,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onmessagereceived/",title:"OnMessageReceived",section:"ODIN Documentation",description:" Called on every Peer that received message from a peer by ",content:`<pre><code class="language-C#">public MessageReceivedProxy OnMessageReceived
</code></pre>
<p>Called on every Peer that received message from a peer by UInt64%5b%5d%2cSystem</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/messagereceivedproxy/">MessageReceivedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>





<div id="example-774d71afd2b2486308923a48a99b3ef7" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OnMessageReceived Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-774d71afd2b2486308923a48a99b3ef7-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-774d71afd2b2486308923a48a99b3ef7-cs">
      <pre><code class="hljs language-cs">class Message
{
	public string text;
	public string type;
}

class MyMessageHandler : MonoBehaviour
{
	public void OnMessageReceived(object sender, MessageReceivedEventArgs args)
	{
		// Get the peer id
		ulong peerId = args.PeerId;

		// Get the data
		byte[] bytes = args.Data;

		// Serialize data in your own classes (just an example, add error handling)
		var bytesAsString = Encoding.UTF8.GetString(bytes);
        var message = JsonConvert.DeserializeObject&lt;Message&gt;(bytesAsString);

        // Show a text chat message
        if (message.type == &#34;chat&#34;) {
            UI.ShowIncomingChatMessage(message.text);
        }
	}

	public void SendChatMessage(Room room, string chatMessage)
	{
		var message = new Message{
			type = &#34;chat&#34;;
			text = chatMessage;
		}
		var stringMessage = JsonConvert.SerializeObject(message, Formatting.None);
        var bytes = Encoding.UTF8.GetBytes(stringMessage);
		room.SendMessage(bytes);
	}
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2070,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onmessagereceiveddelegate/",title:"OnMessageReceivedDelegate",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public delegate void OnMessageReceivedDelegate(object sender, ulong peerId, byte[] message);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>message</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2071,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/onmicrophonedata/",title:"OnMicrophoneData",section:"ODIN Documentation",description:" Event is fired if raw microphone data is available ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData
</code></pre>
<p>Event is fired if raw microphone data is available</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2072,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/onmicrophonedata/",title:"OnMicrophoneData",section:"ODIN Documentation",description:" Event is fired if raw microphone data is available ",content:`<pre><code class="language-C#">public MicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData
</code></pre>
<p>Event is fired if raw microphone data is available</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2073,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/onmicrophonedata/",title:"OnMicrophoneData",section:"ODIN Documentation",description:" Event is fired if raw microphone data is available ",content:`<pre><code class="language-C#">public MicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData
</code></pre>
<p>Event is fired if raw microphone data is available</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2074,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/onmicrophonedata/",title:"OnMicrophoneData",section:"ODIN Documentation",description:" Event is fired if raw microphone data is available ",content:`<pre><code class="language-C#">public MicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData
</code></pre>
<p>Event is fired if raw microphone data is available</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2075,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/onmicrophonedata/",title:"OnMicrophoneData",section:"ODIN Documentation",description:" Event is fired if raw microphone data is available ",content:`<pre><code class="language-C#">public OdinMicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData
</code></pre>
<p>Event is fired if raw microphone data is available</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2076,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/onmicrophonedata/",title:"OnMicrophoneData",section:"ODIN Documentation",description:" Event is fired if raw microphone data is available ",content:`<pre><code class="language-C#">public MicrophoneReader.MicrophoneCallbackDelegate OnMicrophoneData
</code></pre>
<p>Event is fired if raw microphone data is available</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/delegates/microphonecallbackdelegate/">MicrophoneCallbackDelegate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2077,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onpeerjoined/",title:"OnPeerJoined",section:"ODIN Documentation",description:" Called on every Peer that joins the room(s) we&apos;re connected to ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PeerJoinedProxy OnPeerJoined
</code></pre>
<p>Called on every Peer that joins the room(s) we're connected to</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Self is marked as Peer and this handler will trigger this invoke too</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2078,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onpeerjoined/",title:"OnPeerJoined",section:"ODIN Documentation",description:" Called on every Peer that joins the room(s) we&apos;re connected to ",content:`<pre><code class="language-C#">public PeerJoinedProxy OnPeerJoined
</code></pre>
<p>Called on every Peer that joins the room(s) we're connected to</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Self is marked as Peer and this handler will trigger this invoke too</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2079,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onpeerjoined/",title:"OnPeerJoined",section:"ODIN Documentation",description:" Called on every Peer that joins the room(s) we&apos;re connected to ",content:`<pre><code class="language-C#">public PeerJoinedProxy OnPeerJoined
</code></pre>
<p>Called on every Peer that joins the room(s) we're connected to</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Self is marked as Peer and this handler will trigger this invoke too</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2080,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onpeerjoined/",title:"OnPeerJoined",section:"ODIN Documentation",description:" Called on every Peer that joins the room(s) we&apos;re connected to ",content:`<pre><code class="language-C#">public PeerJoinedProxy OnPeerJoined
</code></pre>
<p>Called on every Peer that joins the room(s) we're connected to</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Self is marked as Peer and this handler will trigger this invoke too</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2081,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onpeerjoined/",title:"OnPeerJoined",section:"ODIN Documentation",description:" Event redirected as Unity event ",content:`<pre><code class="language-C#">public PeerJoinedProxy OnPeerJoined
</code></pre>
<p>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onpeerjoined/">OnPeerJoined</a> redirected as Unity event</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2082,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onpeerjoined/",title:"OnPeerJoined",section:"ODIN Documentation",description:" Called on every Peer that joins the room(s) we&apos;re connected to ",content:`<pre><code class="language-C#">public PeerJoinedProxy OnPeerJoined
</code></pre>
<p>Called on every Peer that joins the room(s) we're connected to</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Self is marked as Peer and this handler will trigger this invoke too</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peerjoinedproxy/">PeerJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) joins a room, this event is triggered in all clients. You can listen
to this event in your own code as shown in the example above. You can use this to fill an array with active players/users
in your game.</p>
<p>The structure of the function looks like this (<span class="external-reference">PeerJoinedProxy <a href="/odin/sdk/unity/classes/peerjoinedproxy/"><i class="fas fa-external-link-alt"></i></a></span>
):</p>
<pre><code class="language-C#">public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<p>In this example, taken from our <a href="/odin/guides/unity/unity-mirror/">Integration guide</a> user data is stored in a
<span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 format (you can use any format you like). See our guides for
more info on this topic.</p>
</div>



<h2 id="example">Example</h2>





<div id="example-5b0074ee6f49b60a54d49d56ae417330" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OnPeerJoined Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-5b0074ee6f49b60a54d49d56ae417330-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-5b0074ee6f49b60a54d49d56ae417330-cs">
      <pre><code class="hljs language-cs">public void OnPeerJoined (object sender, PeerJoinedEventArgs eventArgs)
{
    // Sender is typically a Room instance
    Room room = sender as Room;

    Debug.Log($&#34;ODIN PEER JOINED. Room: {room.Config.Name}, PeerId: {eventInfo.PeerId}, UserData: {eventInfo.Peer.UserData.ToString()}&#34;);

    // Use CustomUserDataJsonFormat to parse UserData stored in JSON format
    CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventInfo.Peer.UserData);
    if (userData.seed != null)
    {
        Debug.Log(&#34;Player has network Id: &#34; &#43; userData.seed);
        PlayerScript[] players = FindObjectsOfType&lt;PlayerScript&gt;();
        foreach (var player in players)
        {
            if (player.odinSeed == userData.seed)
            {
                Debug.Log(&#34;Found PlayerScript with seed &#34; &#43; userData.seed);
                if (player.isLocalPlayer)
                {
                    Debug.Log(&#34;Is local player, no need to do anything&#34;);
                }
                else
                {
                    // We have matched the OdinPeer with our local player instance
                }
            }
        }
    }
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2083,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onpeerjoineddelegate/",title:"OnPeerJoinedDelegate",section:"ODIN Documentation",description:" Odin peer joined wrapped data ",content:`<pre><code class="language-C#">public delegate void OnPeerJoinedDelegate(object sender, ulong peerId, string userId, byte[] userData, MediaRpc[] medias);
</code></pre>
<h1 id="heading"></h1>
<p>Odin peer joined wrapped data</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>userId</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td></td>
</tr>
<tr>
<td>medias</td>
<td>MediaRpc[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2084,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onpeerleft/",title:"OnPeerLeft",section:"ODIN Documentation",description:" Called on every Peer that left in the same room(s) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PeerLeftProxy OnPeerLeft
</code></pre>
<p>Called on every Peer that left in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2085,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onpeerleft/",title:"OnPeerLeft",section:"ODIN Documentation",description:" Called on every Peer that left in the same room(s) ",content:`<pre><code class="language-C#">public PeerLeftProxy OnPeerLeft
</code></pre>
<p>Called on every Peer that left in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2086,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onpeerleft/",title:"OnPeerLeft",section:"ODIN Documentation",description:" Called on every Peer that left in the same room(s) ",content:`<pre><code class="language-C#">public PeerLeftProxy OnPeerLeft
</code></pre>
<p>Called on every Peer that left in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2087,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onpeerleft/",title:"OnPeerLeft",section:"ODIN Documentation",description:" Called on every Peer that left in the same room(s) ",content:`<pre><code class="language-C#">public PeerLeftProxy OnPeerLeft
</code></pre>
<p>Called on every Peer that left in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2088,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onpeerleft/",title:"OnPeerLeft",section:"ODIN Documentation",description:" Event redirected as Unity event ",content:`<pre><code class="language-C#">public PeerLeftProxy OnPeerLeft
</code></pre>
<p>Event <a href="/odin/sdk/unity/2.0.0/classes/room/onpeerleft/">OnPeerLeft</a> redirected as Unity event</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2089,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onpeerleft/",title:"OnPeerLeft",section:"ODIN Documentation",description:" Called on every Peer that left in the same room(s) ",content:`<pre><code class="language-C#">public PeerLeftProxy OnPeerLeft
</code></pre>
<p>Called on every Peer that left in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peerleftproxy/">PeerLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2090,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onpeerleftdelegate/",title:"OnPeerLeftDelegate",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public delegate void OnPeerLeftDelegate(object sender, ulong peerId);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2091,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onpeeruserdatachanged/",title:"OnPeerUserDataChanged",section:"ODIN Documentation",description:" Called on every Peer that updates his UserData in the same room(s) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PeerUserDataChangedProxy OnPeerUserDataChanged
</code></pre>
<p>Called on every Peer that updates his UserData in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2092,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onpeeruserdatachanged/",title:"OnPeerUserDataChanged",section:"ODIN Documentation",description:" Called on every Peer that updates his UserData in the same room(s) ",content:`<pre><code class="language-C#">public PeerUserDataChangedProxy OnPeerUserDataChanged
</code></pre>
<p>Called on every Peer that updates his UserData in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2093,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onpeeruserdatachanged/",title:"OnPeerUserDataChanged",section:"ODIN Documentation",description:" Called on every Peer that updates his UserData in the same room(s) ",content:`<pre><code class="language-C#">public PeerUserDataChangedProxy OnPeerUserDataChanged
</code></pre>
<p>Called on every Peer that updates his UserData in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2094,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onpeeruserdatachanged/",title:"OnPeerUserDataChanged",section:"ODIN Documentation",description:" Called on every Peer that updates his UserData in the same room(s) ",content:`<pre><code class="language-C#">public PeerUserDataChangedProxy OnPeerUserDataChanged
</code></pre>
<p>Called on every Peer that updates his UserData in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2095,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/",title:"OnPeerUserDataChanged",section:"ODIN Documentation",description:" Called on every Peer that updates his UserData in the same room(s) ",content:`<pre><code class="language-C#">public PeerUserDataChangedProxy OnPeerUserDataChanged
</code></pre>
<p>Called on every Peer that updates his UserData in the same room(s)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedproxy/">PeerUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2096,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onroomjoin/",title:"OnRoomJoin",section:"ODIN Documentation",description:" Called before an actual room join ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomJoinProxy OnRoomJoin
</code></pre>
<p>Called before an actual room join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2097,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onroomjoin/",title:"OnRoomJoin",section:"ODIN Documentation",description:" Called before an actual room join ",content:`<pre><code class="language-C#">public RoomJoinProxy OnRoomJoin
</code></pre>
<p>Called before an actual room join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2098,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onroomjoin/",title:"OnRoomJoin",section:"ODIN Documentation",description:" Called before an actual room join ",content:`<pre><code class="language-C#">public RoomJoinProxy OnRoomJoin
</code></pre>
<p>Called before an actual room join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2099,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onroomjoin/",title:"OnRoomJoin",section:"ODIN Documentation",description:" Called before an actual room join ",content:`<pre><code class="language-C#">public RoomJoinProxy OnRoomJoin
</code></pre>
<p>Called before an actual room join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2100,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomjoin/",title:"OnRoomJoin",section:"ODIN Documentation",description:" Called before an actual room join ",content:`<pre><code class="language-C#">public RoomJoinProxy OnRoomJoin
</code></pre>
<p>Called before an actual room join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoinproxy/">RoomJoinProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2101,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onroomjoined/",title:"OnRoomJoined",section:"ODIN Documentation",description:" Called after a room is joined successfully ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomJoinedProxy OnRoomJoined
</code></pre>
<p>Called after a room is joined successfully</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes only on success</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2102,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onroomjoined/",title:"OnRoomJoined",section:"ODIN Documentation",description:" Called after a room is joined successfully ",content:`<pre><code class="language-C#">public RoomJoinedProxy OnRoomJoined
</code></pre>
<p>Called after a room is joined successfully</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes only on success</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2103,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onroomjoined/",title:"OnRoomJoined",section:"ODIN Documentation",description:" Called after a room is joined successfully ",content:`<pre><code class="language-C#">public RoomJoinedProxy OnRoomJoined
</code></pre>
<p>Called after a room is joined successfully</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes only on success</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2104,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onroomjoined/",title:"OnRoomJoined",section:"ODIN Documentation",description:" Called after a room is joined successfully ",content:`<pre><code class="language-C#">public RoomJoinedProxy OnRoomJoined
</code></pre>
<p>Called after a room is joined successfully</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes only on success</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2105,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/onroomjoined/",title:"OnRoomJoined",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomJoinedProxy OnRoomJoined
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2106,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomjoined/",title:"OnRoomJoined",section:"ODIN Documentation",description:" Called after a room is joined successfully ",content:`<pre><code class="language-C#">public RoomJoinedProxy OnRoomJoined
</code></pre>
<p>Called after a room is joined successfully</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invokes only on success</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoinedproxy/">RoomJoinedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2107,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onroomjoineddelegate/",title:"OnRoomJoinedDelegate",section:"ODIN Documentation",description:" Odin room joined bookkeeping ",content:`<pre><code class="language-C#">public delegate void OnRoomJoinedDelegate(object sender, ulong ownPeerId, string name, byte[] roomUserData, ushort[] mediaIds, ReadOnlyCollection&lt;PeerRpc&gt; peers);
</code></pre>
<h1 id="heading"></h1>
<p>Odin room joined bookkeeping</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>ownPeerId</td>
<td>UInt64</td>
<td>Self id</td>
</tr>
<tr>
<td>name</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>roomUserData</td>
<td>Byte[]</td>
<td>arbitrary datas</td>
</tr>
<tr>
<td>mediaIds</td>
<td>UInt16[]</td>
<td>raw media ids in remote room</td>
</tr>
<tr>
<td>peers</td>
<td>ReadOnlyCollection&lt;PeerRpc&gt;</td>
<td>Parsed peer rpc data</td>
</tr>
</tbody>
</table>
`}),e.add({id:2108,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onroomleave/",title:"OnRoomLeave",section:"ODIN Documentation",description:" Called before a room leave ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomLeaveProxy OnRoomLeave
</code></pre>
<p>Called before a room leave</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2109,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onroomleave/",title:"OnRoomLeave",section:"ODIN Documentation",description:" Called before a room leave ",content:`<pre><code class="language-C#">public RoomLeaveProxy OnRoomLeave
</code></pre>
<p>Called before a room leave</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2110,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onroomleave/",title:"OnRoomLeave",section:"ODIN Documentation",description:" Called before a room leave ",content:`<pre><code class="language-C#">public RoomLeaveProxy OnRoomLeave
</code></pre>
<p>Called before a room leave</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2111,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onroomleave/",title:"OnRoomLeave",section:"ODIN Documentation",description:" Called before a room leave ",content:`<pre><code class="language-C#">public RoomLeaveProxy OnRoomLeave
</code></pre>
<p>Called before a room leave</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2112,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomleave/",title:"OnRoomLeave",section:"ODIN Documentation",description:" Called before a room leave ",content:`<pre><code class="language-C#">public RoomLeaveProxy OnRoomLeave
</code></pre>
<p>Called before a room leave</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomleaveproxy/">RoomLeaveProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2113,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onroomleft/",title:"OnRoomLeft",section:"ODIN Documentation",description:" Called after a room is destroyed ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomLeftProxy OnRoomLeft
</code></pre>
<p>Called after a room is destroyed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2114,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onroomleft/",title:"OnRoomLeft",section:"ODIN Documentation",description:" Called after a room is destroyed ",content:`<pre><code class="language-C#">public RoomLeftProxy OnRoomLeft
</code></pre>
<p>Called after a room is destroyed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2115,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onroomleft/",title:"OnRoomLeft",section:"ODIN Documentation",description:" Called after a room is destroyed ",content:`<pre><code class="language-C#">public RoomLeftProxy OnRoomLeft
</code></pre>
<p>Called after a room is destroyed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2116,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onroomleft/",title:"OnRoomLeft",section:"ODIN Documentation",description:" Called after a room is destroyed ",content:`<pre><code class="language-C#">public RoomLeftProxy OnRoomLeft
</code></pre>
<p>Called after a room is destroyed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2117,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomleft/",title:"OnRoomLeft",section:"ODIN Documentation",description:" Called after a room is destroyed ",content:`<pre><code class="language-C#">public RoomLeftProxy OnRoomLeft
</code></pre>
<p>Called after a room is destroyed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomleftproxy/">RoomLeftProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="discussion">Discussion</h2>

<div><p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) leaves a room, this event is triggered on the local client. You
need to listen to this event and doing some cleanup work as some <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 elements created
in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event might be linked to this room and will stop working once the user left the
room.</p>
<p>You can use the <span class="external-reference">DestroyPlaybackComponents <a href="/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents/"><i class="fas fa-external-link-alt"></i></a></span>
 convenience function to remove all
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 linked to this room.</p>
</div>



<h2 id="example">Example</h2>





<div id="example-f6c963f0990a8d41e95d3a7db7d4a779" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OnRoomLeft Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-f6c963f0990a8d41e95d3a7db7d4a779-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-f6c963f0990a8d41e95d3a7db7d4a779-cs">
      <pre><code class="hljs language-cs">public void OnRoomLeft(RoomLeftEventArgs eventArgs)
{
    // Remove all Playback Components linked to this room
    OdinHandler.Instance.DestroyPlaybackComponents(eventArgs.RoomName);
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2118,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/onroomuserdatachanged/",title:"OnRoomUserDataChanged",section:"ODIN Documentation",description:" Called on the Room that updates his UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomUserDataChangedProxy OnRoomUserDataChanged
</code></pre>
<p>Called on the Room that updates his UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2119,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/onroomuserdatachanged/",title:"OnRoomUserDataChanged",section:"ODIN Documentation",description:" Called on the Room that updates his UserData ",content:`<pre><code class="language-C#">public RoomUserDataChangedProxy OnRoomUserDataChanged
</code></pre>
<p>Called on the Room that updates his UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2120,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/onroomuserdatachanged/",title:"OnRoomUserDataChanged",section:"ODIN Documentation",description:" Called on the Room that updates his UserData ",content:`<pre><code class="language-C#">public RoomUserDataChangedProxy OnRoomUserDataChanged
</code></pre>
<p>Called on the Room that updates his UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2121,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/onroomuserdatachanged/",title:"OnRoomUserDataChanged",section:"ODIN Documentation",description:" Called on the Room that updates his UserData. Changing a Room&apos;s UserData is only possible via request to Odin server API, but not supported inside the client SDK. ",content:`<pre><code class="language-C#">public RoomUserDataChangedProxy OnRoomUserDataChanged
</code></pre>
<p>Called on the Room that updates his UserData. Changing a Room's UserData is only possible via request to Odin
server API, but not supported inside the client SDK.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2122,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/onroomuserdatachanged/",title:"OnRoomUserDataChanged",section:"ODIN Documentation",description:" Called on the Room that updates his UserData. Changing a Room&apos;s UserData is only possible via request to Odin server API, but not supported inside the client SDK. ",content:`<pre><code class="language-C#">public RoomUserDataChangedProxy OnRoomUserDataChanged
</code></pre>
<p>Called on the Room that updates his UserData. Changing a Room's UserData is only possible via request to Odin
server API, but not supported inside the client SDK.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomuserdatachangedproxy/">RoomUserDataChangedProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2123,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnection/onrpc/",title:"OnRpc",section:"ODIN Documentation",description:" Redirect of ",content:`<pre><code class="language-C#">public RpcProxy OnRpc
</code></pre>
<p>Redirect of <a href="/odin/sdk/unity/2.0.0/classes/room/onrpc/">OnRpc</a></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcproxy/">RpcProxy</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2124,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/onuserdatachangeddelegate/",title:"OnUserDataChangedDelegate",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public delegate void OnUserDataChangedDelegate(object sender, ulong peerId, byte[] userData);
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>userData</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2125,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/outchannels/",title:"OutChannels",section:"ODIN Documentation",description:" Gets the current speaker mode. Default is 2 channel stereo. ",content:`<pre><code class="language-C#">public int OutChannels { get; }
</code></pre>
<p>Gets the current speaker mode. Default is 2 channel stereo.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2126,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/outsamplerate/",title:"OutSampleRate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int OutSampleRate { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2127,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/overridesamplerate/",title:"OverrideSampleRate",section:"ODIN Documentation",description:" Use set on true, on false ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool OverrideSampleRate
</code></pre>
<p>Use set <a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2128,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/overridesamplerate/",title:"OverrideSampleRate",section:"ODIN Documentation",description:" Use set on true, on false ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool OverrideSampleRate
</code></pre>
<p>Use set <a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a> on false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2129,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/overridesamplerate/",title:"OverrideSampleRate",section:"ODIN Documentation",description:" Use set on true, on false ",content:`<pre><code class="language-C#">public bool OverrideSampleRate
</code></pre>
<p>Use set <a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2130,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/overridesamplerate/",title:"OverrideSampleRate",section:"ODIN Documentation",description:" Use set on true, on false ",content:`<pre><code class="language-C#">public bool OverrideSampleRate
</code></pre>
<p>Use set <a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2131,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/overridesamplerate/",title:"OverrideSampleRate",section:"ODIN Documentation",description:" Use set on true, on false ",content:`<pre><code class="language-C#">public bool OverrideSampleRate
</code></pre>
<p>Use set OdinEditorConfig on false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2132,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/overridesamplerate/",title:"OverrideSampleRate",section:"ODIN Documentation",description:" Use set on true, on false ",content:`<pre><code class="language-C#">public bool OverrideSampleRate
</code></pre>
<p>Use set <a href="/odin/sdk/unity/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2133,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/ownpeer/",title:"ownPeer",section:"ODIN Documentation",description:"An instance of your own `OdinPeer` in the room.",content:`<pre><code class="language-C#">OdinPeer
</code></pre>
<p>An instance of your own <code>OdinPeer</code> in the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></p>
`}),e.add({id:2134,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/ownpeerid/",title:"ownPeerId",section:"ODIN Documentation",description:"Gets the ID of the local peer joined to the room.",content:`<pre><code class="language-C#">public ownPeerId: number
</code></pre>
<p>Gets the ID of the local peer joined to the room.</p>
`}),e.add({id:2135,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/ownpeerid/",title:"ownPeerId",section:"ODIN Documentation",description:"The ID of the local peer.",content:`<pre><code class="language-C#">public ownPeerId: number
</code></pre>
<p>The ID of the local peer.</p>
`}),e.add({id:2136,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/ownpeerid/",title:"OwnPeerId",section:"ODIN Documentation",description:" PeerId of self ",content:`<pre><code class="language-C#">public ulong OwnPeerId { get; }
</code></pre>
<p>PeerId of self</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2137,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/ownuserid/",title:"ownUserId",section:"ODIN Documentation",description:"The ID of the local user. It is the same as the user id that was passed to join.",content:`<pre><code class="language-C#">public ownUserId: string
</code></pre>
<p>The ID of the local user. It is the same as the user id that was passed to join.</p>
`}),e.add({id:2138,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/packetsavailabledifference/",title:"PacketsAvailableDifference",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AnimationCurve PacketsAvailableDifference
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AnimationCurve</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2139,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/packetsavailabledifference/",title:"PacketsAvailableDifference",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AnimationCurve PacketsAvailableDifference
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AnimationCurve</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2140,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/packetsavailabledifference/",title:"PacketsAvailableDifference",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AnimationCurve PacketsAvailableDifference
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AnimationCurve</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2141,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsavailabledifference/",title:"PacketsAvailableDifference",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AnimationCurve PacketsAvailableDifference
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AnimationCurve</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2142,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/packetsdroppedearly/",title:"PacketsDroppedEarly",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedEarly
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2143,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/packetsdroppedearly/",title:"PacketsDroppedEarly",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedEarly
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2144,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/packetsdroppedearly/",title:"PacketsDroppedEarly",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedEarly
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2145,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsdroppedearly/",title:"PacketsDroppedEarly",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedEarly
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2146,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/packetsdroppedlate/",title:"PacketsDroppedLate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedLate
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2147,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/packetsdroppedlate/",title:"PacketsDroppedLate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedLate
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2148,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/packetsdroppedlate/",title:"PacketsDroppedLate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedLate
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2149,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsdroppedlate/",title:"PacketsDroppedLate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsDroppedLate
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2150,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/packetslost/",title:"PacketsLost",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsLost
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2151,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/packetslost/",title:"PacketsLost",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsLost
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2152,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/packetslost/",title:"PacketsLost",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsLost
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2153,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetslost/",title:"PacketsLost",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsLost
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2154,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/packetsprocessed/",title:"PacketsProcessed",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsProcessed
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2155,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/packetsprocessed/",title:"PacketsProcessed",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsProcessed
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2156,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/packetsprocessed/",title:"PacketsProcessed",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsProcessed
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2157,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/packetsprocessed/",title:"PacketsProcessed",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint PacketsProcessed
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2158,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/notification/paramsindex/",title:"ParamsIndex",section:"ODIN Documentation",description:" params field (params) ",content:`<pre><code class="language-C#">public const int ParamsIndex = 2
</code></pre>
<p><code>params</code> field (params)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2159,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/request/paramsindex/",title:"ParamsIndex",section:"ODIN Documentation",description:" binary field (params) ",content:`<pre><code class="language-C#">public const int ParamsIndex = 3
</code></pre>
<p><code>binary</code> field (params)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2160,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/parent/",title:"Parent",section:"ODIN Documentation",description:" Default value null indicates root or not set ",content:`<pre><code class="language-C#">public IPeer Parent { get; set; }
</code></pre>
<p>Default value <pre><code>null</code></pre> indicates root or not set</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipeer/">IPeer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2161,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/parent/",title:"Parent",section:"ODIN Documentation",description:" Default value null indicates root or not set ",content:`<pre><code class="language-C#">public IPeer Parent { get; set; }
</code></pre>
<p>Default value <pre><code>null</code></pre> indicates root or not set</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipeer/">IPeer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2162,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/parent/",title:"Parent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IPeer Parent { get; set; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/ipeer/">IPeer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2163,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/parent/",title:"Parent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IRoom Parent { get; set; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iroom/">IRoom</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2164,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/parent/",title:"Parent",section:"ODIN Documentation",description:" Default value gameObject parent or Unity root ",content:`<pre><code class="language-C#">public object Parent { get; }
</code></pre>
<p>Default value gameObject parent or Unity root</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2165,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/parent/",title:"Parent",section:"ODIN Documentation",description:" Default value null indicates root or not set ",content:`<pre><code class="language-C#">public IRoom Parent { get; set; }
</code></pre>
<p>Default value <pre><code>null</code></pre> indicates root or not set</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iroom/">IRoom</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2166,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/parent/",title:"Parent",section:"ODIN Documentation",description:" Pipeline handle ",content:`<pre><code class="language-C#">public OdinPipelineHandle Parent { get; }
</code></pre>
<p>Pipeline handle</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinpipelinehandle/">OdinPipelineHandle</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2167,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/parent/",title:"Parent",section:"ODIN Documentation",description:" Default value null indicates root or not set ",content:`<pre><code class="language-C#">public object Parent { get; set; }
</code></pre>
<p>Default value <pre><code>null</code></pre> indicates root or not set</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2168,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/patternat/",title:"PatternAt",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)
</code></pre>
<p>Indicates whether two sequence are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>Byte[]</td>
<td>byte sequence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Int32&gt;</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:2169,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/patternat/",title:"PatternAt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)
</code></pre>
<p>Indicates whether two sequence are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>Byte[]</td>
<td>byte sequence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Int32&gt;</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:2170,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/patternat/",title:"PatternAt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)
</code></pre>
<p>Indicates whether two sequence are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>Byte[]</td>
<td>byte sequence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Int32&gt;</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:2171,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/patternat/",title:"PatternAt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)
</code></pre>
<p>Indicates whether two sequence are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>Byte[]</td>
<td>byte sequence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Int32&gt;</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:2172,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/patternat/",title:"PatternAt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)
</code></pre>
<p>Indicates whether two sequence are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>Byte[]</td>
<td>byte sequence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Int32&gt;</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:2173,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/patternat/",title:"PatternAt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual IEnumerable&lt;int&gt; PatternAt(byte[] pattern)
</code></pre>
<p>Indicates whether two sequence are equal</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pattern</td>
<td>Byte[]</td>
<td>byte sequence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;Int32&gt;</td>
<td>true if contain</td>
</tr>
</tbody>
</table>
`}),e.add({id:2174,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/pause/",title:"pause",section:"ODIN Documentation",description:"Instructs the server to pause the media object, ceasing the reception of data. This operation essentially communicates a server-side mute request from the client, thus indicating a desire to halt packet reception for this media stream.",content:`<pre><code class="language-C#">public pause(): void
</code></pre>
<p>Instructs the server to pause the media object, ceasing the reception of
data. This operation essentially communicates a server-side mute request from the client, thus
indicating a desire to halt packet reception for this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2175,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/pause/",title:"pause",section:"ODIN Documentation",description:"Paused the media stream on the server to stop receiving data on it.",content:`<pre><code class="language-C#">pause(): Promise&lt;void&gt;
</code></pre>
<p>Paused the media stream on the server to stop receiving data on it.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2176,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/pauseanimationcurve/",title:"PauseAnimationCurve",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PauseAnimationCurve
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2177,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/pauseanimationcurve/",title:"PauseAnimationCurve",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PauseAnimationCurve
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2178,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/pauseanimationcurve/",title:"PauseAnimationCurve",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PauseAnimationCurve
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2179,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/pauseanimationcurve/",title:"PauseAnimationCurve",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PauseAnimationCurve
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2180,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/paused/",title:"paused",section:"ODIN Documentation",description:"Indicates wether or not the media is paused.",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Indicates wether or not the media is paused.</p>
`}),e.add({id:2181,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/mediarpc/paused/",title:"Paused",section:"ODIN Documentation",description:" media state ",content:`<pre><code class="language-C#">public bool Paused
</code></pre>
<p>media state</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2182,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/pausemedia/",title:"PauseMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; PauseMedia(MediaDecoder decoder)
public virtual Task&lt;RpcResult&gt; PauseMedia(ushort mediaId)
</code></pre>
<p>Send a <code>&quot;PauseMedia&quot;</code> to the server to stop the decoder for output.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media to stop</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>raw id to stop</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="pausemediadecoder">PauseMedia(decoder)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; PauseMedia(MediaDecoder decoder)
</code></pre>
<p>Send a <code>&quot;PauseMedia&quot;</code> to the server to stop the decoder for output.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media to stop</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="pausemediamediaid">PauseMedia(mediaId)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; PauseMedia(ushort mediaId)
</code></pre>
<p>Send a <code>&quot;PauseMedia&quot;</code> to the server to stop the decoder for output.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>raw id to stop</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2183,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/pauseoutputmedia/",title:"PauseOutputMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool PauseOutputMedia(OdinMedia media)
public virtual bool PauseOutputMedia(MediaDecoder decoder)
</code></pre>
<p>Stop a started remote output decoder</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>media</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>output wrapper</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on stop or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="pauseoutputmediamedia">PauseOutputMedia(media)</h3>
<pre><code class="language-C#">public virtual bool PauseOutputMedia(OdinMedia media)
</code></pre>
<p>Stop a started remote output decoder</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>media</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>output wrapper</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on stop or false</td>
</tr>
</tbody>
</table>
<h3 id="pauseoutputmediadecoder">PauseOutputMedia(decoder)</h3>
<pre><code class="language-C#">public virtual bool PauseOutputMedia(MediaDecoder decoder)
</code></pre>
<p>Stop a started remote output decoder</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on stop or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2184,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/payload/",title:"payload",section:"ODIN Documentation",description:" byte[] ",content:`<pre><code class="language-C#">public IntPtr payload
</code></pre>
<p><code>byte[]</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2185,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramsend/payload/",title:"payload",section:"ODIN Documentation",description:" byte[] ",content:`<pre><code class="language-C#">public IntPtr payload
</code></pre>
<p><code>byte[]</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2186,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinevent/payload/",title:"payload",section:"ODIN Documentation",description:"Custom payload of the event (see `IOdin*Payload` interfaces).",content:`<pre><code class="language-C#">T
</code></pre>
<p>Custom payload of the event (see <code>IOdin*Payload</code> interfaces).</p>
`}),e.add({id:2187,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/datagrameventargs/payload/",title:"Payload",section:"ODIN Documentation",description:" decoder datagram payload ",content:`<pre><code class="language-C#">public byte[] Payload { get; }
</code></pre>
<p>decoder datagram payload</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2188,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/payload_length/",title:"payload_length",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt32 payload_length
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2189,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramsend/payload_length/",title:"payload_length",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt32 payload_length
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2190,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/peer/",title:"peer",section:"ODIN Documentation",description:"The peer that owns the media.",content:`<pre><code class="language-C#">OdinPeer
</code></pre>
<p>The peer that owns the media.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></p>
`}),e.add({id:2191,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/peer/",title:"peer",section:"ODIN Documentation",description:"The peer that owns the media.",content:`<pre><code class="language-C#">OdinPeer
</code></pre>
<p>The peer that owns the media.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></p>
`}),e.add({id:2192,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/peer/",title:"peer",section:"ODIN Documentation",description:"The updated `OdinPeer` instance.",content:`<pre><code class="language-C#">OdinPeer
</code></pre>
<p>The updated <code>OdinPeer</code> instance.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></p>
`}),e.add({id:2193,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/peer/",title:"peer",section:"ODIN Documentation",description:"The peer that joined/left.",content:`<pre><code class="language-C#">OdinPeer
</code></pre>
<p>The peer that joined/left.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinpeer/">OdinPeer</a></p>
`}),e.add({id:2194,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2195,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaremovedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2196,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/",title:"Peer",section:"ODIN Documentation",description:" Client/Remote peer ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class Peer : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/id/">Id</a></td>
<td>UInt64</td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/roomname/">RoomName</a></td>
<td>String</td>
<td>Associated room name of this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/userid/">UserId</a></td>
<td>String</td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/medias/">Medias</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediacollection/">MediaCollection</a></td>
<td>Associated medias of this peer</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/addmedia/">AddMedia</a></td>
<td>Associate a media with the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/removemedia/">RemoveMedia</a></td>
<td>Remove a associated media from the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/getmediastreamids/">GetMediaStreamIds</a></td>
<td>Get a copy of all ids of Media from this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/setmutemedias/">SetMuteMedias</a></td>
<td>Set IsMuted on each current associated Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/dispose/">Dispose</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
`}),e.add({id:2197,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2198,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2199,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2200,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaremovedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2201,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/",title:"Peer",section:"ODIN Documentation",description:" Client/Remote peer ",content:`<pre><code class="language-C#">public class Peer : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/id/">Id</a></td>
<td>UInt64</td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/roomname/">RoomName</a></td>
<td>String</td>
<td>Associated room name of this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/userid/">UserId</a></td>
<td>String</td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/medias/">Medias</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediacollection/">MediaCollection</a></td>
<td>Associated medias of this peer</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/addmedia/">AddMedia</a></td>
<td>Associate a media with the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/removemedia/">RemoveMedia</a></td>
<td>Remove a associated media from the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/getmediastreamids/">GetMediaStreamIds</a></td>
<td>Get a copy of all ids of Media from this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/dispose/">Dispose</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
`}),e.add({id:2202,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2203,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2204,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2205,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaremovedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2206,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/",title:"Peer",section:"ODIN Documentation",description:" Client/Remote peer ",content:`<pre><code class="language-C#">public class Peer : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/id/">Id</a></td>
<td>UInt64</td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/roomname/">RoomName</a></td>
<td>String</td>
<td>Associated room name of this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/userid/">UserId</a></td>
<td>String</td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/medias/">Medias</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediacollection/">MediaCollection</a></td>
<td>Associated medias of this peer</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/addmedia/">AddMedia</a></td>
<td>Associate a media with the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/removemedia/">RemoveMedia</a></td>
<td>Remove a associated media from the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/getmediastreamids/">GetMediaStreamIds</a></td>
<td>Get a copy of all ids of Media from this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/setmutemedias/">SetMuteMedias</a></td>
<td>Set IsMuted on each current associated Media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/dispose/">Dispose</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
`}),e.add({id:2207,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2208,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2209,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2210,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2211,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/",title:"Peer",section:"ODIN Documentation",description:" Client/Remote peer ",content:`<pre><code class="language-C#">public class Peer : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/constructor_0/">Peer(UInt64, String, UserData)</a></td>
<td>Client/Remote peer</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/id/">Id</a></td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/roomname/">RoomName</a></td>
<td>Associated room name of this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/userid/">UserId</a></td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/userdata/">UserData</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/medias/">Medias</a></td>
<td>Associated medias of this peer</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/addmedia/">AddMedia</a></td>
<td>Associate a media with the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/removemedia/">RemoveMedia</a></td>
<td>Remove a associated media from the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/getmediastreamids/">GetMediaStreamIds</a></td>
<td>Get a copy of all ids of Media from this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/dispose/">Dispose</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
`}),e.add({id:2212,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2213,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2214,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public PeerEntity Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/">PeerEntity</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2215,href:"https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2216,href:"https://www.4players.io/odin/sdk/unity/classes/mediaremovedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2217,href:"https://www.4players.io/odin/sdk/unity/classes/peer/",title:"Peer",section:"ODIN Documentation",description:" Client/Remote peer ",content:`<pre><code class="language-C#">public class Peer : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/constructor_0/">Peer(UInt64, String, UserData)</a></td>
<td>Client/Remote peer</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/id/">Id</a></td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/roomname/">RoomName</a></td>
<td>Associated room name of this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/userid/">UserId</a></td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/userdata/">UserData</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/medias/">Medias</a></td>
<td>Associated medias of this peer</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/addmedia/">AddMedia</a></td>
<td>Associate a media with the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/removemedia/">RemoveMedia</a></td>
<td>Remove a associated media from the peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/getmediastreamids/">GetMediaStreamIds</a></td>
<td>Get a copy of all ids of Media from this peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/dispose/">Dispose</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
`}),e.add({id:2218,href:"https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2219,href:"https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/peer/",title:"Peer",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public Peer Peer
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2220,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/peer_mediaadded/",title:"Peer_MediaAdded",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void Peer_MediaAdded(object sender, MediaAddedEventArgs args)
</code></pre>
<p>Event trigger to create a Unity component</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>OdinRoom object</td>
</tr>
<tr>
<td>args</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>started media data</td>
</tr>
</tbody>
</table>
`}),e.add({id:2221,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/peer_mediaremoved/",title:"Peer_MediaRemoved",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void Peer_MediaRemoved(object sender, MediaRemovedEventArgs args)
</code></pre>
<p>Event trigger to remove a Unity component</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>OdinRoom object</td>
</tr>
<tr>
<td>args</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>stopped media data</td>
</tr>
</tbody>
</table>
`}),e.add({id:2222,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/constructor_0/",title:"Peer(UInt64, String, UserData)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Peer(ulong id, string roomName, UserData userData)
</code></pre>
<p>Client/Remote peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>peer id</td>
</tr>
<tr>
<td>roomName</td>
<td>name of the room</td>
</tr>
<tr>
<td>userData</td>
<td>initial userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2223,href:"https://www.4players.io/odin/sdk/unity/classes/peer/constructor_0/",title:"Peer(UInt64, String, UserData)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Peer(ulong id, string roomName, UserData userData)
</code></pre>
<p>Client/Remote peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>peer id</td>
</tr>
<tr>
<td>roomName</td>
<td>name of the room</td>
</tr>
<tr>
<td>userData</td>
<td>initial userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2224,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/",title:"PeerCollection",section:"ODIN Documentation",description:" Intern peer dictionary ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerCollection : IReadOnlyCollection&lt;Peer&gt;, IEqualityComparer&lt;Peer&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern peer dictionary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/this/">Item[UInt64]</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>Try to get Peer by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of peers in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/isreadonly/">IsReadOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/add/">Add</a></td>
<td>Add a peer to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/contains/">Contains</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/copyto/">CopyTo</a></td>
<td>Copies peers of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/equals/">Equals</a></td>
<td>Determines whether the peers are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/remove/">Remove</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
</tbody>
</table>
`}),e.add({id:2225,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/",title:"PeerCollection",section:"ODIN Documentation",description:" Intern peer dictionary ",content:`<pre><code class="language-C#">public class PeerCollection : IReadOnlyCollection&lt;Peer&gt;, IEnumerable&lt;Peer&gt;, IEnumerable, IEqualityComparer&lt;Peer&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern peer dictionary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/this/">Item[UInt64]</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>Try to get Peer by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of peers in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/isreadonly/">IsReadOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/add/">Add</a></td>
<td>Add a peer to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/contains/">Contains</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/copyto/">CopyTo</a></td>
<td>Copies peers of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/equals/">Equals</a></td>
<td>Determines whether the peers are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/remove/">Remove</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2226,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/",title:"PeerCollection",section:"ODIN Documentation",description:" Intern peer dictionary ",content:`<pre><code class="language-C#">public class PeerCollection : IReadOnlyCollection&lt;Peer&gt;, IEqualityComparer&lt;Peer&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern peer dictionary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/this/">Item[UInt64]</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>Try to get Peer by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of peers in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/isreadonly/">IsReadOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/add/">Add</a></td>
<td>Add a peer to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/contains/">Contains</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/copyto/">CopyTo</a></td>
<td>Copies peers of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/equals/">Equals</a></td>
<td>Determines whether the peers are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/remove/">Remove</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
</tbody>
</table>
`}),e.add({id:2227,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/",title:"PeerCollection",section:"ODIN Documentation",description:" Intern peer dictionary ",content:`<pre><code class="language-C#">public class PeerCollection : IReadOnlyCollection&lt;Peer&gt;, IEnumerable&lt;Peer&gt;, IEnumerable, IEqualityComparer&lt;Peer&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern peer dictionary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/constructor_0/">PeerCollection()</a></td>
<td>Intern peer dictionary</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/this/">Item[UInt64]</a></td>
<td>Try to get Peer by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/count/">Count</a></td>
<td>Count of peers in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/isreadonly/">IsReadOnly</a></td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/add/">Add</a></td>
<td>Add a peer to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/contains/">Contains</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/copyto/">CopyTo</a></td>
<td>Copies peers of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/equals/">Equals</a></td>
<td>Determines whether the peers are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/remove/">Remove</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2228,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/",title:"PeerCollection",section:"ODIN Documentation",description:" Intern peer dictionary ",content:`<pre><code class="language-C#">public class PeerCollection : IReadOnlyCollection&lt;Peer&gt;, IEnumerable&lt;Peer&gt;, IEnumerable, IEqualityComparer&lt;Peer&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern peer dictionary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/constructor_0/">PeerCollection()</a></td>
<td>Intern peer dictionary</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/this/">Item[UInt64]</a></td>
<td>Try to get Peer by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/count/">Count</a></td>
<td>Count of peers in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/isreadonly/">IsReadOnly</a></td>
<td>Indicates whether elements can be added or removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/add/">Add</a></td>
<td>Add a peer to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/contains/">Contains</a></td>
<td>Determines whether the peer by id is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/copyto/">CopyTo</a></td>
<td>Copies peers of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/equals/">Equals</a></td>
<td>Determines whether the peers are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/remove/">Remove</a></td>
<td>Remove a peer by id from the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2229,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/constructor_0/",title:"PeerCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PeerCollection()
</code></pre>
<p>Intern peer dictionary</p>
`}),e.add({id:2230,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/constructor_0/",title:"PeerCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PeerCollection()
</code></pre>
<p>Intern peer dictionary</p>
`}),e.add({id:2231,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/",title:"PeerEntity",section:"ODIN Documentation",description:" Client/Remote peer ",content:`<pre><code class="language-C#">public class PeerEntity : IPeer, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/constructor_0/">PeerEntity(UInt64)</a></td>
<td>Client/Remote peer</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/id/">Id</a></td>
<td>Peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/userid/">UserId</a></td>
<td>Peers user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/userdata/">UserData</a></td>
<td>Peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/medias/">Medias</a></td>
<td>Peer output medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/parent/">Parent</a></td>
<td>Default value null indicates root or not set</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/getbasepeer/">GetBasePeer</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/getroomapi/">GetRoomApi</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/getdecoder/">GetDecoder</a></td>
<td>Get a output media by id.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/getorcreatedecoder/">GetOrCreateDecoder</a></td>
<td>Get a output media by id. If the decoder is not found create a new one that will be added PeerEntity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/createdecoder/">CreateDecoder</a></td>
<td>Create a new output media that will be added to PeerEntity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/removedecoder/">RemoveDecoder</a></td>
<td>Remove the output media from PeerEntity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerentity/dispose/">Dispose</a></td>
<td>Free peer with all associated medias</td>
</tr>
</tbody>
</table>
`}),e.add({id:2232,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/constructor_0/",title:"PeerEntity(UInt64)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PeerEntity(ulong id)
</code></pre>
<p>Client/Remote peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2233,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that sent the audio data.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that sent the audio data.</p>
`}),e.add({id:2234,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that changed the media activity.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that changed the media activity.</p>
`}),e.add({id:2235,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that added the media.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that added the media.</p>
`}),e.add({id:2236,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that removed the media.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that removed the media.</p>
`}),e.add({id:2237,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that sent the message.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that sent the message.</p>
`}),e.add({id:2238,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that joined.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that joined.</p>
`}),e.add({id:2239,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that left.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that left.</p>
`}),e.add({id:2240,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that changed the user data.",content:`<pre><code class="language-C#">public peerId: number
</code></pre>
<p>The ID of the peer that changed the user data.</p>
`}),e.add({id:2241,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/peerid/",title:"peerId",section:"ODIN Documentation",description:"The ID of the peer that owns the media.",content:`<pre><code class="language-C#">number
</code></pre>
<p>The ID of the peer that owns the media.</p>
`}),e.add({id:2242,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaactivestatechangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2243,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediaaddedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2244,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/messagereceivedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2245,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer Id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2246,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerlefteventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2247,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2248,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/peerid/",title:"PeerId",section:"ODIN Documentation",description:" Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong PeerId { get; set; }
</code></pre>
<p>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2249,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaactivestatechangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2250,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediaaddedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2251,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/messagereceivedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2252,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer Id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2253,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerlefteventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2254,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2255,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/peerid/",title:"PeerId",section:"ODIN Documentation",description:" Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room. ",content:`<pre><code class="language-C#">public ulong PeerId { get; set; }
</code></pre>
<p>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2256,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaactivestatechangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2257,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediaaddedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2258,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/messagereceivedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2259,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer Id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2260,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerlefteventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2261,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2262,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/peerid/",title:"PeerId",section:"ODIN Documentation",description:" Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room. ",content:`<pre><code class="language-C#">public ulong PeerId { get; set; }
</code></pre>
<p>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2263,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaactivestatechangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2264,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2265,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2266,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer Id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2267,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerlefteventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2268,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2269,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/peerid/",title:"PeerId",section:"ODIN Documentation",description:" Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room. ",content:`<pre><code class="language-C#">public ulong PeerId { get; set; }
</code></pre>
<p>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2270,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2271,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2272,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer object ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2273,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2274,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public ulong PeerId
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2275,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerlefteventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2276,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2277,href:"https://www.4players.io/odin/sdk/unity/classes/mediaactivestatechangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2278,href:"https://www.4players.io/odin/sdk/unity/classes/mediaaddedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2279,href:"https://www.4players.io/odin/sdk/unity/classes/messagereceivedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2280,href:"https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer Id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2281,href:"https://www.4players.io/odin/sdk/unity/classes/peerlefteventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2282,href:"https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/peerid/",title:"PeerId",section:"ODIN Documentation",description:" peer id ",content:`<pre><code class="language-C#">public ulong PeerId { get; }
</code></pre>
<p>peer id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2283,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/peerid/",title:"PeerId",section:"ODIN Documentation",description:" Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room. ",content:`<pre><code class="language-C#">public ulong PeerId { get; set; }
</code></pre>
<p>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2284,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/peerjoined/",title:"PeerJoined",section:"ODIN Documentation",description:"Fired when a remote peer joined the room. This event is fired for all existing peers in the room before the Joined event is fired.",content:`<pre><code class="language-C#">public PeerJoined: OdinPeerJoinedEvent
</code></pre>
<p>Fired when a remote peer joined the room. This event is fired for all existing peers in the room before the Joined event is fired.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinpeerjoinedevent/">OdinPeerJoinedEvent</a></p>
`}),e.add({id:2285,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/peerjoined/",title:"PeerJoined",section:"ODIN Documentation",description:"A new peer entered the room.",content:`<pre><code class="language-C#">OdinPeerJoinedLeftEvent
</code></pre>
<p>A new peer entered the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinpeerjoinedleftevent/">OdinPeerJoinedLeftEvent</a></p>
`}),e.add({id:2286,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/peerjoinedcreatecomponent/",title:"PeerJoinedCreateComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void PeerJoinedCreateComponent(object sender, PeerJoinedEventArgs args)
</code></pre>
<p>Add a new GameObject with a new Unity component</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>OdinRoom object</td>
</tr>
<tr>
<td>args</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>peer join data</td>
</tr>
</tbody>
</table>
`}),e.add({id:2287,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool PeerJoinedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2288,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool PeerJoinedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2289,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerJoinedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2290,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerJoinedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2291,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerJoinedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2292,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerJoinedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2293,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerJoinedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2294,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerJoinedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2295,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerJoinedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2296,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/peerjoinedevent/",title:"PeerJoinedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerJoinedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2297,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/",title:"PeerJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerJoined events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerJoined events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/userid/">UserId</a></td>
<td>String</td>
<td>user Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2298,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/",title:"PeerJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerJoined events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerJoined events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/userid/">UserId</a></td>
<td>String</td>
<td>user Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2299,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/",title:"PeerJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerJoined events in the current room ",content:`<pre><code class="language-C#">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerJoined events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/userid/">UserId</a></td>
<td>String</td>
<td>user Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2300,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/",title:"PeerJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerJoined events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerJoined events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/peerid/">PeerId</a></td>
<td>peer Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/userid/">UserId</a></td>
<td>user Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2301,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/",title:"PeerJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerJoined events in the current room ",content:`<pre><code class="language-C#">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerJoined events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/peerid/">PeerId</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/userid/">UserId</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/userdata/">UserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/mediaids/">MediaIds</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2302,href:"https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/",title:"PeerJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerJoined events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerJoined events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peerjoinedeventargs/peerid/">PeerId</a></td>
<td>peer Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peerjoinedeventargs/userid/">UserId</a></td>
<td>user Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peerjoinedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2303,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2304,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2305,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>




<h2 id="example">Example</h2>






`}),e.add({id:2306,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2307,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2308,href:"https://www.4players.io/odin/sdk/unity/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
<h2 id="discussion">Discussion</h2>

<div><p>Defines the structure of the <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 event. See <span class="external-reference">PeerJoinedEventArgs <a href="/odin/sdk/unity/classes/peerjoinedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 for more info
on the payload sent with this event.</p>
<p><code>sender</code> is typically an instance of the <span class="external-reference">Room <a href="/odin/sdk/unity/classes/room/"><i class="fas fa-external-link-alt"></i></a></span>
 class.</p>
<p>You need to create a function with this prototype and then link the <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 that you can find
in the inspector of the Odin Handler Prefab or use code to attach a listener to that event of your <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>

instance like so:</p>
<pre><code class="language-C#">OdinHandler.Instance.OnPeerJoined.AddListener(OnPeerJoined);
</code></pre>
</div>



<h2 id="example">Example</h2>





<div id="example-20234da48d883f44c169a49fec7a4ab8" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">PeerJoinedProxy Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-20234da48d883f44c169a49fec7a4ab8-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-20234da48d883f44c169a49fec7a4ab8-cs">
      <pre><code class="hljs language-cs">public void OnPeerJoined (object sender, PeerJoinedEventArgs eventArgs)
{
    // Sender is typically a Room instance
    Room room = sender as Room;
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2309,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/peerleft/",title:"PeerLeft",section:"ODIN Documentation",description:"Fired when a remote peer left the room.",content:`<pre><code class="language-C#">public PeerLeft: OdinPeerLeftEvent
</code></pre>
<p>Fired when a remote peer left the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinpeerleftevent/">OdinPeerLeftEvent</a></p>
`}),e.add({id:2310,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/peerleft/",title:"PeerLeft",section:"ODIN Documentation",description:"A peer left the room.",content:`<pre><code class="language-C#">OdinPeerJoinedLeftEvent
</code></pre>
<p>A peer left the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinpeerjoinedleftevent/">OdinPeerJoinedLeftEvent</a></p>
`}),e.add({id:2311,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool PeerLeftEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2312,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool PeerLeftEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2313,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerLeftEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2314,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerLeftEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2315,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerLeftEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2316,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerLeftEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2317,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerLeftEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2318,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerLeftEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2319,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerLeftEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2320,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/peerleftevent/",title:"PeerLeftEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerLeftEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2321,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerlefteventargs/",title:"PeerLeftEventArgs",section:"ODIN Documentation",description:" Arguments for PeerLeft events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerLeft events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peerlefteventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2322,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerlefteventargs/",title:"PeerLeftEventArgs",section:"ODIN Documentation",description:" Arguments for PeerLeft events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerLeft events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peerlefteventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2323,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerlefteventargs/",title:"PeerLeftEventArgs",section:"ODIN Documentation",description:" Arguments for PeerLeft events in the current room ",content:`<pre><code class="language-C#">public class PeerLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerLeft events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peerlefteventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2324,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerlefteventargs/",title:"PeerLeftEventArgs",section:"ODIN Documentation",description:" Arguments for PeerLeft events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerLeft events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerlefteventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2325,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerlefteventargs/",title:"PeerLeftEventArgs",section:"ODIN Documentation",description:" Arguments for PeerLeft events in the current room ",content:`<pre><code class="language-C#">public class PeerLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerLeft events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerlefteventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2326,href:"https://www.4players.io/odin/sdk/unity/classes/peerlefteventargs/",title:"PeerLeftEventArgs",section:"ODIN Documentation",description:" Arguments for PeerLeft events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerLeft events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peerlefteventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2327,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerleftproxy/",title:"PeerLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerLeftProxy : UnityEvent&lt;object, PeerLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2328,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerleftproxy/",title:"PeerLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerLeftProxy : UnityEvent&lt;object, PeerLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2329,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerleftproxy/",title:"PeerLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class PeerLeftProxy : UnityEvent&lt;object, PeerLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2330,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerleftproxy/",title:"PeerLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerLeftProxy : UnityEvent&lt;object, PeerLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2331,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerleftproxy/",title:"PeerLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class PeerLeftProxy : UnityEvent&lt;object, PeerLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2332,href:"https://www.4players.io/odin/sdk/unity/classes/peerleftproxy/",title:"PeerLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerLeftProxy : UnityEvent&lt;object, PeerLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2333,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/peerleftremovecomponent/",title:"PeerLeftRemoveComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void PeerLeftRemoveComponent(object sender, PeerLeftEventArgs args)
</code></pre>
<p>Removes all child components with the same peer id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>OdinRoom object</td>
</tr>
<tr>
<td>args</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>left peer data</td>
</tr>
</tbody>
</table>
`}),e.add({id:2334,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/peerrpc/",title:"PeerRpc",section:"ODIN Documentation",description:" Client/Remote peer ",content:`<pre><code class="language-C#">public struct PeerRpc
</code></pre>
<h1 id="heading"></h1>
<p>Client/Remote peer</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/peerrpc/id/">Id</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/peerrpc/userid/">UserId</a></td>
<td>token user id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/peerrpc/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/peerrpc/medias/">Medias</a></td>
<td>peer decoders</td>
</tr>
</tbody>
</table>
`}),e.add({id:2335,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool PeerUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2336,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool PeerUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2337,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2338,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2339,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2340,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2341,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2342,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2343,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool PeerUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2344,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/peerupdatedevent/",title:"PeerUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PeerUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2345,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/peeruserdatachanged/",title:"PeerUserDataChanged",section:"ODIN Documentation",description:"Fired when the user data of a remote peer changed.",content:`<pre><code class="language-C#">public PeerUserDataChanged: OdinPeerUserDataChangedEvent
</code></pre>
<p>Fired when the user data of a remote peer changed.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinpeeruserdatachangedevent/">OdinPeerUserDataChangedEvent</a></p>
`}),e.add({id:2346,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/peeruserdatachanged/",title:"PeerUserDataChanged",section:"ODIN Documentation",description:"A peer in the room updated its user data.",content:`<pre><code class="language-C#">OdinPeerDataChangedEvent
</code></pre>
<p>A peer in the room updated its user data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinpeerdatachangedevent/">OdinPeerDataChangedEvent</a></p>
`}),e.add({id:2347,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/",title:"PeerUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerUserDataChanged events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2348,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/",title:"PeerUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerUserDataChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2349,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/",title:"PeerUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerUserDataChanged events in the current room ",content:`<pre><code class="language-C#">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/peer/">Peer</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/userdata/">UserData</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2350,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/",title:"PeerUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerUserDataChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2351,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/",title:"PeerUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerUserDataChanged events in the current room ",content:`<pre><code class="language-C#">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2352,href:"https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/",title:"PeerUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for PeerUserDataChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class PeerUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for PeerUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedeventargs/peerid/">PeerId</a></td>
<td>peer id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedeventargs/peer/">Peer</a></td>
<td>peer object</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedeventargs/userdata/">UserData</a></td>
<td>peer userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2353,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peeruserdatachangedproxy/",title:"PeerUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class PeerUserDataChangedProxy : UnityEvent&lt;object, PeerUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2354,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peeruserdatachangedproxy/",title:"PeerUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerUserDataChangedProxy : UnityEvent&lt;object, PeerUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2355,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peeruserdatachangedproxy/",title:"PeerUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class PeerUserDataChangedProxy : UnityEvent&lt;object, PeerUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2356,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peeruserdatachangedproxy/",title:"PeerUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerUserDataChangedProxy : UnityEvent&lt;object, PeerUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2357,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peeruserdatachangedproxy/",title:"PeerUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class PeerUserDataChangedProxy : UnityEvent&lt;object, PeerUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2358,href:"https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedproxy/",title:"PeerUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class PeerUserDataChangedProxy : UnityEvent&lt;object, PeerUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2359,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/pipeline/",title:"Pipeline",section:"ODIN Documentation",description:" Odin effect pipeline ",content:`<pre><code class="language-C#">public MediaPipeline Pipeline { get; set; }
</code></pre>
<p>Odin effect pipeline</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2360,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/pipeline/",title:"Pipeline",section:"ODIN Documentation",description:" Odin effect pipeline ",content:`<pre><code class="language-C#">public MediaPipeline Pipeline { get; set; }
</code></pre>
<p>Odin effect pipeline</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2361,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/",title:"PiplineEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public abstract class PiplineEffect : IPiplineEffect
</code></pre>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/constructor_0/">PiplineEffect(OdinPipelineHandle, UInt32)</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/id/">Id</a></td>
<td>Effect id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/index_property/">Index</a></td>
<td>Effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/parent/">Parent</a></td>
<td>Pipeline handle</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffectindex/">GetEffectIndex</a></td>
<td>Get native effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffecttype/">GetEffectType</a></td>
<td>Get native effect NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/getvadconfig/">GetVadConfig</a></td>
<td>Get native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmconfig/">SetApmConfig</a></td>
<td>Set native audio processing config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmstreamdelay/">SetApmStreamDelay</a></td>
<td>Set native audio processing delay</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setvadconfig/">SetVadConfig</a></td>
<td>Set native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/updateapmplayback/">UpdateApmPlayback</a></td>
<td>Send samples for native audio processing</td>
</tr>
</tbody>
</table>
`}),e.add({id:2362,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/constructor_0/",title:"PiplineEffect(OdinPipelineHandle, UInt32)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public PiplineEffect(OdinPipelineHandle parentHandle, uint effectId)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parentHandle</td>
<td></td>
</tr>
<tr>
<td>effectId</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2363,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibrary/platform/",title:"Platform",section:"ODIN Documentation",description:" Platform the library is running on ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static SupportedPlatform Platform { get; }
</code></pre>
<p>Platform the library is running on</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value is used to determine how the native ODIN runtime library will loaded and unloaded.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2364,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/platform/",title:"Platform",section:"ODIN Documentation",description:" Determines which platform specific code needs to be executed ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public SupportedPlatform Platform { get; set; }
</code></pre>
<p>Determines which platform specific code needs to be executed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2365,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibrary/platform/",title:"Platform",section:"ODIN Documentation",description:" Platform the library is running on ",content:`<pre><code class="language-C#">public static SupportedPlatform Platform { get; }
</code></pre>
<p>Platform the library is running on</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value is used to determine how the native ODIN runtime library will loaded and unloaded.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2366,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/platform/",title:"Platform",section:"ODIN Documentation",description:" Determines which platform specific code needs to be executed ",content:`<pre><code class="language-C#">public SupportedPlatform Platform { get; set; }
</code></pre>
<p>Determines which platform specific code needs to be executed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2367,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibrary/platform/",title:"Platform",section:"ODIN Documentation",description:" Platform the library is running on ",content:`<pre><code class="language-C#">public static SupportedPlatform Platform { get; }
</code></pre>
<p>Platform the library is running on</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value is used to determine how the native ODIN runtime library will loaded and unloaded.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2368,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/platform/",title:"Platform",section:"ODIN Documentation",description:" Determines which platform specific code needs to be executed ",content:`<pre><code class="language-C#">public SupportedPlatform Platform { get; set; }
</code></pre>
<p>Determines which platform specific code needs to be executed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2369,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibrary/platform/",title:"Platform",section:"ODIN Documentation",description:" Platform the library is running on ",content:`<pre><code class="language-C#">public static SupportedPlatform Platform { get; }
</code></pre>
<p>Platform the library is running on</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value is used to determine how the native ODIN runtime library will loaded and unloaded.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2370,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/platform/",title:"Platform",section:"ODIN Documentation",description:" Determines which platform specific code needs to be executed ",content:`<pre><code class="language-C#">public SupportedPlatform Platform { get; set; }
</code></pre>
<p>Determines which platform specific code needs to be executed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2371,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibrary/platform/",title:"Platform",section:"ODIN Documentation",description:" Platform the library is running on ",content:`<pre><code class="language-C#">public static SupportedPlatform Platform { get; }
</code></pre>
<p>Platform the library is running on</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value is used to determine how the native ODIN runtime library will loaded and unloaded.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2372,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/platform/",title:"Platform",section:"ODIN Documentation",description:" Determines which platform specific code needs to be executed ",content:`<pre><code class="language-C#">public SupportedPlatform Platform { get; set; }
</code></pre>
<p>Determines which platform specific code needs to be executed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2373,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibrary/platform/",title:"Platform",section:"ODIN Documentation",description:" Platform the library is running on ",content:`<pre><code class="language-C#">public static SupportedPlatform Platform { get; }
</code></pre>
<p>Platform the library is running on</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value is used to determine how the native ODIN runtime library will loaded and unloaded.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2374,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/platform/",title:"Platform",section:"ODIN Documentation",description:" Determines which platform specific code needs to be executed ",content:`<pre><code class="language-C#">public SupportedPlatform Platform { get; set; }
</code></pre>
<p>Determines which platform specific code needs to be executed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2375,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/playback/",title:"Playback",section:"ODIN Documentation",description:" Actual Unity audio output component ",content:`<pre><code class="language-C#">public AudioSource Playback
</code></pre>
<p>Actual Unity audio output component</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2376,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/playbackaudiomixer/",title:"PlaybackAudioMixer",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public AudioMixer PlaybackAudioMixer
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixer</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2377,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/playbackaudiomixer/",title:"PlaybackAudioMixer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixer PlaybackAudioMixer
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixer</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2378,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/playbackaudiomixer/",title:"PlaybackAudioMixer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixer PlaybackAudioMixer
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixer</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2379,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/playbackaudiomixer/",title:"PlaybackAudioMixer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixer PlaybackAudioMixer
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixer</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2380,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/playbackaudiomixer/",title:"PlaybackAudioMixer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixer PlaybackAudioMixer
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixer</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2381,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/playbackaudiomixergroup/",title:"PlaybackAudioMixerGroup",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public AudioMixerGroup PlaybackAudioMixerGroup
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2382,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/playbackaudiomixergroup/",title:"PlaybackAudioMixerGroup",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixerGroup PlaybackAudioMixerGroup
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2383,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/playbackaudiomixergroup/",title:"PlaybackAudioMixerGroup",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixerGroup PlaybackAudioMixerGroup
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2384,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/playbackaudiomixergroup/",title:"PlaybackAudioMixerGroup",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixerGroup PlaybackAudioMixerGroup
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2385,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/playbackaudiomixergroup/",title:"PlaybackAudioMixerGroup",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public AudioMixerGroup PlaybackAudioMixerGroup
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioMixerGroup</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2386,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/",title:"PlaybackComponent",section:"ODIN Documentation",description:" Handles the Playback for received ODIN audio data. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p><a href='/odin/sdk/unity/manual/playbackcomponent/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class PlaybackComponent : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles the Playback for received ODIN audio data.</p>
<h2 id="discussion">Discussion</h2>




<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/playbacksource/">PlaybackSource</a></td>
<td>AudioSource</td>
<td>The Unity AudioSource component for playback</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/mute/">Mute</a></td>
<td>Boolean</td>
<td>The Unity AudioSource mute property</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/mutestream/">MuteStream</a></td>
<td>Boolean</td>
<td>The Odin PlaybackStream underlying media stream calls</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/roomname/">RoomName</a></td>
<td>String</td>
<td>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/autodestroyaudiosource/">AutoDestroyAudioSource</a></td>
<td>Boolean</td>
<td>On true destroy the <a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> or false for manually manage sources</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/autodestroymediastream/">AutoDestroyMediaStream</a></td>
<td>Boolean</td>
<td>On true destroy the Media in dispose to not leak or false for manually manage stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/overridesamplerate/">OverrideSampleRate</a></td>
<td>Boolean</td>
<td>Use set <a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/remotesamplerate/">RemoteSampleRate</a> on false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The playback Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/hasactivity/">HasActivity</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2387,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/",title:"PlaybackComponent",section:"ODIN Documentation",description:" Handles the Playback for received ODIN audio data. ",content:`<pre><code class="language-C#">public class PlaybackComponent : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles the Playback for received ODIN audio data.</p>
<h2 id="discussion">Discussion</h2>




<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/playbacksource/">PlaybackSource</a></td>
<td>AudioSource</td>
<td>The Unity AudioSource component for playback</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/autodestroyaudiosource/">AutoDestroyAudioSource</a></td>
<td>Boolean</td>
<td>On true destroy the <a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> or false for manually manage sources</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/autodestroymediastream/">AutoDestroyMediaStream</a></td>
<td>Boolean</td>
<td>On true destroy the Media in dispose to not leak or false for manually manage stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The playback Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/mute/">Mute</a></td>
<td>Boolean</td>
<td>The Unity AudioSource mute property</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/roomname/">RoomName</a></td>
<td>String</td>
<td>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/hasactivity/">HasActivity</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackcomponent/getodinaudiostreamstats/">GetOdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2388,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/",title:"PlaybackComponent",section:"ODIN Documentation",description:" Handles the Playback for received ODIN audio data. ",content:`<pre><code class="language-C#">public class PlaybackComponent : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles the Playback for received ODIN audio data.</p>
<h2 id="discussion">Discussion</h2>




<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/playbacksource/">PlaybackSource</a></td>
<td>AudioSource</td>
<td>The Unity AudioSource component for playback</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/autodestroyaudiosource/">AutoDestroyAudioSource</a></td>
<td>Boolean</td>
<td>On true destroy the <a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak <see cref="!:UnityEngine.AudioSource"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html">(AudioSource)</a> or false for manually manage sources</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/autodestroymediastream/">AutoDestroyMediaStream</a></td>
<td>Boolean</td>
<td>On true destroy the Media in dispose to not leak or false for manually manage stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/samplerate/">SampleRate</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>The playback Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/mute/">Mute</a></td>
<td>Boolean</td>
<td>The Unity AudioSource mute property</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/roomname/">RoomName</a></td>
<td>String</td>
<td>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/peerid/">PeerId</a></td>
<td>UInt64</td>
<td>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/mediastreamid/">MediaStreamId</a></td>
<td>Int64</td>
<td>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/hasactivity/">HasActivity</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackcomponent/getodinaudiostreamstats/">GetOdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>






`}),e.add({id:2389,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/",title:"PlaybackComponent",section:"ODIN Documentation",description:" Handles the Playback for received ODIN audio data. ",content:`<pre><code class="language-C#">public class PlaybackComponent : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles the Playback for received ODIN audio data.</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/playbacksource/">PlaybackSource</a></td>
<td>The Unity AudioSource component for playback</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/autodestroyaudiosource/">AutoDestroyAudioSource</a></td>
<td>On true destroy the PlaybackComponent in dispose to not leak (AudioSource) or false for manually manage sources</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/autodestroymediastream/">AutoDestroyMediaStream</a></td>
<td>On true destroy the Media in dispose to not leak or false for manually manage stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/samplerate/">SampleRate</a></td>
<td>The playback Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/mute/">Mute</a></td>
<td>The Unity AudioSource mute property</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/roomname/">RoomName</a></td>
<td>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/peerid/">PeerId</a></td>
<td>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/mediastreamid/">MediaStreamId</a></td>
<td>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/hasactivity/">HasActivity</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/setmediainfo/">SetMediaInfo</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackcomponent/getodinaudiostreamstats/">GetOdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2390,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/",title:"PlaybackComponent",section:"ODIN Documentation",description:" Handles the Playback for received ODIN audio data. ",content:`<p><a href='/odin/sdk/unity/1.6.6/manual/playbackcomponent/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class PlaybackComponent : MonoBehaviour
</code></pre>
<h1 id="heading"></h1>
<p>Handles the Playback for received ODIN audio data.</p>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>PlaybackComponent</code> is the heart of ODIN within Unity. It connects a Unity <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 with an ODIN room which runs on ODIN servers either hosted by 4Players or self-hosted.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Important</strong>: Don&rsquo;t create this component yourself and don&rsquo;t attach it in the Unity editor manually to components.
Use the method <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
from <code>OdinHandler.Instance</code>
to
create this component.</p>
</div>
</div>

<p>The component receives the audio stream of the server and &ldquo;injects&rdquo; it into the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
</div>



<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/playbacksource/">PlaybackSource</a></td>
<td>The Unity AudioSource component for playback</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/autodestroyaudiosource/">AutoDestroyAudioSource</a></td>
<td>On true destroy the <a href="/odin/sdk/unity/classes/playbackcomponent/playbacksource/">PlaybackSource</a> in dispose to not leak (AudioSource) or false for manually manage sources</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/autodestroymediastream/">AutoDestroyMediaStream</a></td>
<td>On true destroy the Media in dispose to not leak or false for manually manage stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/samplerate/">SampleRate</a></td>
<td>The playback Core</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/mute/">Mute</a></td>
<td>The Unity AudioSource mute property</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/roomname/">RoomName</a></td>
<td>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/peerid/">PeerId</a></td>
<td>Peer id for this playback. Change this value to change the PlaybackStream by RemotePeers in the Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/mediastreamid/">MediaStreamId</a></td>
<td>Media id for this playback. Change this value to pick a PlaybackStream by media id from peers Medias.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/hasactivity/">HasActivity</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/setmediainfo/">SetMediaInfo</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackcomponent/getodinaudiostreamstats/">GetOdinAudioStreamStats</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>





<div id="example-87e6045f5f9c35a80c6586f16b8d492e" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">PlaybackComponent Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-87e6045f5f9c35a80c6586f16b8d492e-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-87e6045f5f9c35a80c6586f16b8d492e-cs">
      <pre><code class="hljs language-cs">using OdinNative.Odin;
using OdinNative.Odin.Room;
using OdinNative.Unity;
using OdinNative.Unity.Audio;
using UnityEngine;

public class MyOdinPeerManager : MonoBehaviour
{
    private void AttachOdinPlaybackToPlayer(PlayerScript player, Room room, ulong peerId, int mediaId)
    {
        // Create the PlaybackComponent and AudioSource at the players gameObject
        PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(player.gameObject, room.Config.Name, peerId, mediaId);

        // Setup the Playback Component
        playback.CheckPlayingStatusAsInvoke = true; // set checking status as MonoBehaviour.InvokeRepeating active
        playback.PlayingStatusDelay = 1.0f; // (default 0f)
        playback.PlayingStatusRepeatingTime = 0.3f; // (default 0.2f)

        // Make the AudioSource a 3D source (use 0.0 if the volume should be the same regardless of position to the camera)
        playback.PlaybackSource.spatialBlend = 1.0f; // set AudioSource to full 3D
    }

    public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
    {
        // Called if a peer has started to send audio
        Room room = sender as Room;
        Debug.Log($&#34;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&#34;);

        // Use the User Data to to map the ODIN peer to the player in the network
        CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
        PlayerScript player = GetPlayerForOdinPeer(userData);
        if (player)
        {
            // We have found a player, attach the ODIN audio to that player
            AttachOdinPlaybackToPlayer(player, room, eventArgs.PeerId, eventArgs.Media.Id);
        }
    }
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2391,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/playbackmediaconfig/",title:"PlaybackMediaConfig",section:"ODIN Documentation",description:" Configuration for on new medias ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public OdinMediaConfig PlaybackMediaConfig
</code></pre>
<p>Configuration for Media on new medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2392,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/playbackmediaconfig/",title:"PlaybackMediaConfig",section:"ODIN Documentation",description:" Configuration for on new medias ",content:`<pre><code class="language-C#">public OdinMediaConfig PlaybackMediaConfig
</code></pre>
<p>Configuration for Media on new medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2393,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/playbackmediaconfig/",title:"PlaybackMediaConfig",section:"ODIN Documentation",description:" Configuration for on new medias ",content:`<pre><code class="language-C#">public OdinMediaConfig PlaybackMediaConfig
</code></pre>
<p>Configuration for Media on new medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2394,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/playbackmediaconfig/",title:"PlaybackMediaConfig",section:"ODIN Documentation",description:" Configuration for on new medias ",content:`<pre><code class="language-C#">public OdinMediaConfig PlaybackMediaConfig
</code></pre>
<p>Configuration for Media on new medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2395,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/playbackmediaconfig/",title:"PlaybackMediaConfig",section:"ODIN Documentation",description:" Configuration for on new medias ",content:`<pre><code class="language-C#">public OdinMediaConfig PlaybackMediaConfig
</code></pre>
<p>Configuration for Media on new medias</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2396,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/playbackmedias/",title:"PlaybackMedias",section:"ODIN Documentation",description:" Get all medias of room peers ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IEnumerable&lt;MediaCollection&gt; PlaybackMedias { get; }
</code></pre>
<p>Get all medias of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2397,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/playbackmedias/",title:"PlaybackMedias",section:"ODIN Documentation",description:" Get all medias of room peers ",content:`<pre><code class="language-C#">public IEnumerable&lt;MediaCollection&gt; PlaybackMedias { get; }
</code></pre>
<p>Get all medias of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2398,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/playbackmedias/",title:"PlaybackMedias",section:"ODIN Documentation",description:" Get all medias of room peers ",content:`<pre><code class="language-C#">public IEnumerable&lt;MediaCollection&gt; PlaybackMedias { get; }
</code></pre>
<p>Get all medias of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2399,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/playbackmedias/",title:"PlaybackMedias",section:"ODIN Documentation",description:" Get all medias of room peers ",content:`<pre><code class="language-C#">public IEnumerable&lt;MediaCollection&gt; PlaybackMedias { get; }
</code></pre>
<p>Get all medias of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2400,href:"https://www.4players.io/odin/sdk/unity/classes/room/playbackmedias/",title:"PlaybackMedias",section:"ODIN Documentation",description:" Get all medias of room peers ",content:`<pre><code class="language-C#">public IEnumerable&lt;MediaCollection&gt; PlaybackMedias { get; }
</code></pre>
<p>Get all medias of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2401,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/playbacksource/",title:"PlaybackSource",section:"ODIN Documentation",description:" The Unity AudioSource component for playback ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public AudioSource PlaybackSource
</code></pre>
<p>The Unity AudioSource component for playback</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Unity controls the playback device: no ConfigurationChanged event</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2402,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/playbacksource/",title:"PlaybackSource",section:"ODIN Documentation",description:" The Unity AudioSource component for playback ",content:`<pre><code class="language-C#">public AudioSource PlaybackSource
</code></pre>
<p>The Unity AudioSource component for playback</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Unity controls the playback device: no ConfigurationChanged event</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2403,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/playbacksource/",title:"PlaybackSource",section:"ODIN Documentation",description:" The Unity AudioSource component for playback ",content:`<pre><code class="language-C#">public AudioSource PlaybackSource
</code></pre>
<p>The Unity AudioSource component for playback</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Unity controls the playback device: no ConfigurationChanged event</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2404,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/playbacksource/",title:"PlaybackSource",section:"ODIN Documentation",description:" The Unity AudioSource component for playback ",content:`<pre><code class="language-C#">public AudioSource PlaybackSource
</code></pre>
<p>The Unity AudioSource component for playback</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Unity controls the playback device: no ConfigurationChanged event</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2405,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/playbacksource/",title:"PlaybackSource",section:"ODIN Documentation",description:" The Unity AudioSource component for playback ",content:`<pre><code class="language-C#">public AudioSource PlaybackSource
</code></pre>
<p>The Unity AudioSource component for playback</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Unity controls the playback device: no ConfigurationChanged event</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioSource</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2406,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstats/",title:"PlaybackStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class PlaybackStats : MonoBehaviour
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/log/">Log</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/pauseanimationcurve/">PauseAnimationCurve</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/packetsprocessed/">PacketsProcessed</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/packetsdroppedearly/">PacketsDroppedEarly</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/packetsdroppedlate/">PacketsDroppedLate</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/packetslost/">PacketsLost</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstats/packetsavailabledifference/">PacketsAvailableDifference</a></td>
<td>AnimationCurve</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2407,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstats/",title:"PlaybackStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class PlaybackStats : MonoBehaviour
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/log/">Log</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/pauseanimationcurve/">PauseAnimationCurve</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/packetsprocessed/">PacketsProcessed</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/packetsdroppedearly/">PacketsDroppedEarly</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/packetsdroppedlate/">PacketsDroppedLate</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/packetslost/">PacketsLost</a></td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstats/packetsavailabledifference/">PacketsAvailableDifference</a></td>
<td>AnimationCurve</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2408,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstats/",title:"PlaybackStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class PlaybackStats : MonoBehaviour
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/log/">Log</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/pauseanimationcurve/">PauseAnimationCurve</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/packetsprocessed/">PacketsProcessed</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/packetsdroppedearly/">PacketsDroppedEarly</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/packetsdroppedlate/">PacketsDroppedLate</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/packetslost/">PacketsLost</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstats/packetsavailabledifference/">PacketsAvailableDifference</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2409,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstats/",title:"PlaybackStats",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class PlaybackStats : MonoBehaviour
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/log/">Log</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/pauseanimationcurve/">PauseAnimationCurve</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/packetsprocessed/">PacketsProcessed</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/packetsdroppedearly/">PacketsDroppedEarly</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/packetsdroppedlate/">PacketsDroppedLate</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/packetslost/">PacketsLost</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstats/packetsavailabledifference/">PacketsAvailableDifference</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2410,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackstream/",title:"PlaybackStream",section:"ODIN Documentation",description:" Representation of a read only audio stream ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<p>Inherits from: <a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class PlaybackStream : MediaStream, IVideoStream, IAudioStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a read only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/audiopushdata/">AudioPushData</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/playbackstream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/ispaused/">IsPaused</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is paused</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/ismuted/">IsMuted</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is muted</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/setpause/">SetPause</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/togglepause/">TogglePause</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/setmute/">SetMute</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/togglemute/">ToggleMute</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:2411,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackstream/",title:"PlaybackStream",section:"ODIN Documentation",description:" Representation of a read only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class PlaybackStream : MediaStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a read only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/audiopushdata/">AudioPushData</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/playbackstream/audioreset/">AudioReset</a></td>
<td>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:2412,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackstream/",title:"PlaybackStream",section:"ODIN Documentation",description:" Representation of a read only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class PlaybackStream : MediaStream, IVideoStream, IAudioStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a read only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/audiopushdata/">AudioPushData</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/playbackstream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/id/">Id</a></td>
<td>Int64</td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>CancellationTokenSource</td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/ispaused/">IsPaused</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is paused</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/ismuted/">IsMuted</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is muted</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/isactive/">IsActive</a></td>
<td>Boolean</td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/setpause/">SetPause</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/togglepause/">TogglePause</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/setmute/">SetMute</a></td>
<td>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/togglemute/">ToggleMute</a></td>
<td>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audiodatalength/">AudioDataLength</a></td>
<td>Get the number of samples available in the audio buffer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:2413,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackstream/",title:"PlaybackStream",section:"ODIN Documentation",description:" Representation of a read only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class PlaybackStream : MediaStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a read only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/audiopushdata/">AudioPushData</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/playbackstream/audioreset/">AudioReset</a></td>
<td>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/id/">Id</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/isactive/">IsActive</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:2414,href:"https://www.4players.io/odin/sdk/unity/classes/playbackstream/",title:"PlaybackStream",section:"ODIN Documentation",description:" Representation of a read only audio stream ",content:`<p>Inherits from: <a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></p>
<pre><code class="language-C#">public class PlaybackStream : MediaStream, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Representation of a read only audio stream</p>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/audiopushdata/">AudioPushData</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>AudioPushDataTask and AudioPushDataAsync are not supported!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/playbackstream/audioreset/">AudioReset</a></td>
<td>This operation resets the internal Opus encoder/decoder, ensuring a clean state. Additionally, it clears internal buffers, providing a fresh start.</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/id/">Id</a></td>
<td>Handle ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/mediaconfig/">MediaConfig</a></td>
<td>Audio config of the media stream</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a></td>
<td>Control of async read and write tasks</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/isactive/">IsActive</a></td>
<td>Indicates wether or not the media stream is active and sending/receiving data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/haserrors/">HasErrors</a></td>
<td>Indicates wether or not the last media stream api call result is an error code</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/isinvalid/">IsInvalid</a></td>
<td>Indicates wether or not the media stream handle is invalid or closed</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/getmediaid/">GetMediaId</a></td>
<td>Returns the media stream ID and updates <a href="/odin/sdk/unity/classes/mediastream/id/">Id</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/getpeerid/">GetPeerId</a></td>
<td>Returns the ID of the peer that own this media stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdata/">AudioPushData</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdatatask/">AudioPushDataTask</a></td>
<td>Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiopushdataasync/">AudioPushDataAsync</a></td>
<td>Sends audio data using a custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>. The data has to be interleaved [-1, 1] float data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreset/">AudioReset</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddata/">AudioReadData</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audiostats/">AudioStats</a></td>
<td>Retrieves statistics for the specified Media.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddatatask/">AudioReadDataTask</a></td>
<td>Reads data from the audio stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioreaddataasync/">AudioReadDataAsync</a></td>
<td>Read audio data using a custom custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/audioresample/">AudioResample</a></td>
<td>Set a resampler and resamples a chunk of audio.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/cancel/">Cancel</a></td>
<td>Cancel the custom <a href="/odin/sdk/unity/classes/mediastream/cancellationsource/">CancellationSource</a>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/mediastream/dispose/">Dispose</a></td>
<td>On dispose will free the stream and resampler</td>
</tr>
</tbody>
</table>
`}),e.add({id:2415,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/pop/",title:"Pop",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Pop(OdinMediaData audio)
</code></pre>
<p>Pop output audio from the media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmediadata/">OdinMediaData</a></td>
<td>samples</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2416,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/pop/",title:"Pop",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinError Pop(out NativeBindings.OdinDatagramSend datagram)
</code></pre>
<p>Pop one datagram from the media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>datagram</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramsend/">OdinDatagramSend</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref>/<xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_NO_DATA" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2417,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/popall/",title:"PopAll",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PopAll(ref ConcurrentStack&lt;NativeBindings.OdinDatagramSend&gt; datagrams)
</code></pre>
<p>Pop all audio datagrams into the stack</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>datagrams</td>
<td>ConcurrentStack&lt;OdinDatagramSend&gt;</td>
<td>datagram stack</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2418,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/position/",title:"position",section:"ODIN Documentation",description:"The current three-dimensional position of our own `OdinPeer` in the room.",content:`<pre><code class="language-C#">any
</code></pre>
<p>The current three-dimensional position of our own <code>OdinPeer</code> in the room.</p>
`}),e.add({id:2419,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/positionx/",title:"PositionX",section:"ODIN Documentation",description:" Inital position of self on join ",content:`<pre><code class="language-C#">public float PositionX { get; }
</code></pre>
<p>Inital position of self on join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2420,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/positiony/",title:"PositionY",section:"ODIN Documentation",description:" Inital position of self on join ",content:`<pre><code class="language-C#">public float PositionY { get; }
</code></pre>
<p>Inital position of self on join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2421,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/positionz/",title:"PositionZ",section:"ODIN Documentation",description:" Inital position of self on join ",content:`<pre><code class="language-C#">public float PositionZ { get; }
</code></pre>
<p>Inital position of self on join</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2422,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/possiblenativebinarylocations/",title:"PossibleNativeBinaryLocations",section:"ODIN Documentation",description:" Possible install location of the native ODIN runtime binary ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string[] PossibleNativeBinaryLocations { get; set; }
</code></pre>
<p>Possible install location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2423,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/possiblenativebinarylocations/",title:"PossibleNativeBinaryLocations",section:"ODIN Documentation",description:" Possible install location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public string[] PossibleNativeBinaryLocations { get; set; }
</code></pre>
<p>Possible install location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2424,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/possiblenativebinarylocations/",title:"PossibleNativeBinaryLocations",section:"ODIN Documentation",description:" Possible install location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public string[] PossibleNativeBinaryLocations { get; set; }
</code></pre>
<p>Possible install location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2425,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/possiblenativebinarylocations/",title:"PossibleNativeBinaryLocations",section:"ODIN Documentation",description:" Possible install location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public string[] PossibleNativeBinaryLocations { get; set; }
</code></pre>
<p>Possible install location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2426,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/possiblenativebinarylocations/",title:"PossibleNativeBinaryLocations",section:"ODIN Documentation",description:" Possible install location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public string[] PossibleNativeBinaryLocations { get; set; }
</code></pre>
<p>Possible install location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2427,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/possiblenativebinarylocations/",title:"PossibleNativeBinaryLocations",section:"ODIN Documentation",description:" Possible install location of the native ODIN runtime binary ",content:`<pre><code class="language-C#">public string[] PossibleNativeBinaryLocations { get; set; }
</code></pre>
<p>Possible install location of the native ODIN runtime binary</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2428,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/pre_amplifier/",title:"pre_amplifier",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool pre_amplifier
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2429,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/preamplifier/",title:"preAmplifier",section:"ODIN Documentation",description:"Enable or disable the pre amplifier",content:`<pre><code class="language-C#">public preAmplifier: boolean
</code></pre>
<p>Enable or disable the pre amplifier</p>
`}),e.add({id:2430,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool PreAmplifier
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2431,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Amplifies the audio input ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool PreAmplifier
</code></pre>
<p>Amplifies the audio input</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2432,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Enable or disable the pre amplifier ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool PreAmplifier { get; set; }
</code></pre>
<p>Enable or disable the pre amplifier</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2433,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool PreAmplifier
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2434,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Amplifies the audio input ",content:`<pre><code class="language-C#">public bool PreAmplifier
</code></pre>
<p>Amplifies the audio input</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2435,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Enable or disable the pre amplifier ",content:`<pre><code class="language-C#">public bool PreAmplifier { get; set; }
</code></pre>
<p>Enable or disable the pre amplifier</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2436,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool PreAmplifier
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2437,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Amplifies the audio input ",content:`<pre><code class="language-C#">public bool PreAmplifier
</code></pre>
<p>Amplifies the audio input</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2438,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Enable or disable the pre amplifier ",content:`<pre><code class="language-C#">public bool PreAmplifier { get; set; }
</code></pre>
<p>Enable or disable the pre amplifier</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2439,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool PreAmplifier
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2440,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Amplifies the audio input ",content:`<pre><code class="language-C#">public bool PreAmplifier
</code></pre>
<p>Amplifies the audio input</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2441,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Enable or disable the pre amplifier ",content:`<pre><code class="language-C#">public bool PreAmplifier { get; set; }
</code></pre>
<p>Enable or disable the pre amplifier</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2442,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled ",content:`<pre><code class="language-C#">public bool PreAmplifier { get; set; }
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2443,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool PreAmplifier
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2444,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool PreAmplifier
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2445,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool PreAmplifier
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2446,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Amplifies the audio input ",content:`<pre><code class="language-C#">public bool PreAmplifier
</code></pre>
<p>Amplifies the audio input</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2447,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/preamplifier/",title:"PreAmplifier",section:"ODIN Documentation",description:" Enable or disable the pre amplifier ",content:`<pre><code class="language-C#">public bool PreAmplifier { get; set; }
</code></pre>
<p>Enable or disable the pre amplifier</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2448,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/processrpc/",title:"ProcessRPC",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void ProcessRPC(byte[] bytes)
</code></pre>
<p>Will process all rpc packets.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Client side processing of MsgPackMessageType is not supported and will always response with <code>&quot;MessagePack requests are not supported!&quot;</code> or drop the request on error</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td>raw Msgpack</td>
</tr>
</tbody>
</table>
`}),e.add({id:2449,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/mediarpc/properties/",title:"Properties",section:"ODIN Documentation",description:" arbitrary media data ",content:`<pre><code class="language-C#">public MediaRpcProperties Properties
</code></pre>
<p>arbitrary media data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/">MediaRpcProperties</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2450,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/proxyaudio/",title:"ProxyAudio",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void ProxyAudio(float[] buffer, int position, bool isSilent = false)
</code></pre>
<p>Redirects audio to all media encoders in the corresponding room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>buffer</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>position</td>
<td>Int32</td>
<td></td>
</tr>
<tr>
<td>isSilent</td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2451,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/push/",title:"Push",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Push(NativeBindings.OdinDatagramRecv datagram)
</code></pre>
<p>Push output audio into the media for effect processing</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>datagram</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odindatagramrecv/">OdinDatagramRecv</a></td>
<td>samples</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2452,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/push/",title:"Push",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public OdinError Push(float[] samples, bool isSilent = false)
</code></pre>
<p>Push samples to the media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td>audio samples</td>
</tr>
<tr>
<td>isSilent</td>
<td>Boolean</td>
<td>flag samples as silence</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2453,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/utility/ratetosamples/",title:"RateToSamples",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static int RateToSamples(MediaSampleRate sampleRate = MediaSampleRate.Hz48000, int ms = 20)
</code></pre>
<p>Get sample size by samplerate and time</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>samplerate in hz</td>
</tr>
<tr>
<td>ms</td>
<td>Int32</td>
<td>time in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>sample size</td>
</tr>
</tbody>
</table>
`}),e.add({id:2454,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/utility/ratetosamples/",title:"RateToSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int RateToSamples(MediaSampleRate sampleRate = MediaSampleRate.Hz48000, int ms = 20)
</code></pre>
<p>Get sample size by samplerate and time</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>samplerate in hz</td>
</tr>
<tr>
<td>ms</td>
<td>Int32</td>
<td>time in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>sample size</td>
</tr>
</tbody>
</table>
`}),e.add({id:2455,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/utility/ratetosamples/",title:"RateToSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int RateToSamples(MediaSampleRate sampleRate = MediaSampleRate.Hz48000, int ms = 20)
</code></pre>
<p>Get sample size by samplerate and time</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>samplerate in hz</td>
</tr>
<tr>
<td>ms</td>
<td>Int32</td>
<td>time in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>sample size</td>
</tr>
</tbody>
</table>
`}),e.add({id:2456,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/utility/ratetosamples/",title:"RateToSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int RateToSamples(MediaSampleRate sampleRate = MediaSampleRate.Hz48000, int ms = 20)
</code></pre>
<p>Get sample size by samplerate and time</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>samplerate in hz</td>
</tr>
<tr>
<td>ms</td>
<td>Int32</td>
<td>time in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>sample size</td>
</tr>
</tbody>
</table>
`}),e.add({id:2457,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/ratetosamples/",title:"RateToSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int RateToSamples(uint sampleRate = 48000U, int ms = 20)
</code></pre>
<p>Get sample size by samplerate and time</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td>UInt32</td>
<td>samplerate in hz</td>
</tr>
<tr>
<td>ms</td>
<td>Int32</td>
<td>time in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>sample size</td>
</tr>
</tbody>
</table>
`}),e.add({id:2458,href:"https://www.4players.io/odin/sdk/unity/classes/utility/ratetosamples/",title:"RateToSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int RateToSamples(MediaSampleRate sampleRate = MediaSampleRate.Hz48000, int ms = 20)
</code></pre>
<p>Get sample size by samplerate and time</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sampleRate</td>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td>samplerate in hz</td>
</tr>
<tr>
<td>ms</td>
<td>Int32</td>
<td>time in milliseconds</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>sample size</td>
</tr>
</tbody>
</table>
`}),e.add({id:2459,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/readodinaudiodata/",title:"ReadOdinAudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void ReadOdinAudioData()
</code></pre>
`}),e.add({id:2460,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/reason/",title:"reason",section:"ODIN Documentation",description:"The error code if the connection state is Error.",content:`<pre><code class="language-C#">public reason: OdinConnectionStateChangeReason
</code></pre>
<p>The error code if the connection state is Error.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinconnectionstatechangereason/">OdinConnectionStateChangeReason</a></p>
`}),e.add({id:2461,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/redirectcapturedaudio/",title:"RedirectCapturedAudio",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool RedirectCapturedAudio
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2462,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/redirectcapturedaudio/",title:"RedirectCapturedAudio",section:"ODIN Documentation",description:" Skips registered PushAudio for the OnMicrophoneData event ",content:`<pre><code class="language-C#">public bool RedirectCapturedAudio
</code></pre>
<p>Skips registered PushAudio for the OnMicrophoneData event</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will stop progress of time in the audio pipeline and can result in missing event updates like OnMediaActiveStateChanged. Should only be disabled if handled.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2463,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/redirectcapturedaudio/",title:"RedirectCapturedAudio",section:"ODIN Documentation",description:" Skips registered PushAudio for the OnMicrophoneData event ",content:`<pre><code class="language-C#">public bool RedirectCapturedAudio
</code></pre>
<p>Skips registered PushAudio for the OnMicrophoneData event</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will stop progress of time in the audio pipeline and can result in missing event updates like OnMediaActiveStateChanged. Should only be disabled if handled.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2464,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/redirectcapturedaudio/",title:"RedirectCapturedAudio",section:"ODIN Documentation",description:" Skips registered PushAudio for the OnMicrophoneData event ",content:`<pre><code class="language-C#">public bool RedirectCapturedAudio
</code></pre>
<p>Skips registered PushAudio for the OnMicrophoneData event</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will stop progress of time in the audio pipeline and can result in missing event updates like OnMediaActiveStateChanged. Should only be disabled if handled.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2465,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/redirectcapturedaudio/",title:"RedirectCapturedAudio",section:"ODIN Documentation",description:" Skips registered PushAudio for the OnMicrophoneData event ",content:`<pre><code class="language-C#">public bool RedirectCapturedAudio
</code></pre>
<p>Skips registered PushAudio for the OnMicrophoneData event</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will stop progress of time in the audio pipeline and can result in missing event updates like OnMediaActiveStateChanged. Should only be disabled if handled.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2466,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio/",title:"RedirectCapturedAudio",section:"ODIN Documentation",description:" Skips registered PushAudio for the OnMicrophoneData event ",content:`<pre><code class="language-C#">public bool RedirectCapturedAudio
</code></pre>
<p>Skips registered PushAudio for the OnMicrophoneData event</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will stop progress of time in the audio pipeline and can result in missing event updates like OnMediaActiveStateChanged. Should only be disabled if handled.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2467,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/redirectinputaudio/",title:"RedirectInputAudio",section:"ODIN Documentation",description:" Skips registered PushAudio ",content:`<pre><code class="language-C#">public bool RedirectInputAudio
</code></pre>
<p>Skips registered PushAudio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will stop progress of time in the audio pipeline and can result in missing event updates. Should only be disabled if handled.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2468,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibrary/release/",title:"Release",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static void Release()
</code></pre>
<p>Releases the unmanaged resources used by the Core-Instance</p>
`}),e.add({id:2469,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibrary/release/",title:"Release",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Release()
</code></pre>
<p>Releases the unmanaged resources used by the Core-Instance</p>
`}),e.add({id:2470,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibrary/release/",title:"Release",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Release()
</code></pre>
<p>Releases the unmanaged resources used by the Core-Instance</p>
`}),e.add({id:2471,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibrary/release/",title:"Release",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Release()
</code></pre>
<p>Releases the unmanaged resources used by the Core-Instance</p>
`}),e.add({id:2472,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibrary/release/",title:"Release",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Release()
</code></pre>
<p>Releases the unmanaged resources used by the Core-Instance</p>
`}),e.add({id:2473,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibrary/release/",title:"Release",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void Release()
</code></pre>
<p>Releases the unmanaged resources used by the Core-Instance</p>
`}),e.add({id:2474,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/release_threshold/",title:"release_threshold",section:"ODIN Documentation",description:" when the trigger should disengage ",content:`<pre><code class="language-C#">public float release_threshold
</code></pre>
<p>when the trigger should disengage</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2475,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/remote/",title:"remote",section:"ODIN Documentation",description:"Indicates wether or not the media belongs to a remote peer.",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Indicates wether or not the media belongs to a remote peer.</p>
`}),e.add({id:2476,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/remote/",title:"remote",section:"ODIN Documentation",description:"Indicates, whether the peer is a remote peer or not.",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Indicates, whether the peer is a remote peer or not.</p>
`}),e.add({id:2477,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback default Channel ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static MediaChannels RemoteChannels { get; set; }
</code></pre>
<p>Playback default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2478,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback Channels ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaChannels RemoteChannels
</code></pre>
<p>Playback Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2479,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback default Channel ",content:`<pre><code class="language-C#">public static MediaChannels RemoteChannels { get; set; }
</code></pre>
<p>Playback default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2480,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback Channels ",content:`<pre><code class="language-C#">public MediaChannels RemoteChannels
</code></pre>
<p>Playback Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2481,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback default Channel ",content:`<pre><code class="language-C#">public static MediaChannels RemoteChannels { get; set; }
</code></pre>
<p>Playback default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2482,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback Channels ",content:`<pre><code class="language-C#">public MediaChannels RemoteChannels
</code></pre>
<p>Playback Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2483,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback default Channel ",content:`<pre><code class="language-C#">public static MediaChannels RemoteChannels { get; set; }
</code></pre>
<p>Playback default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2484,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback Channels ",content:`<pre><code class="language-C#">public MediaChannels RemoteChannels
</code></pre>
<p>Playback Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2485,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback default Channel ",content:`<pre><code class="language-C#">public static MediaChannels RemoteChannels { get; set; }
</code></pre>
<p>Playback default Channel</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2486,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/remotechannels/",title:"RemoteChannels",section:"ODIN Documentation",description:" Playback Channels ",content:`<pre><code class="language-C#">public MediaChannels RemoteChannels
</code></pre>
<p>Playback Channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2487,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/remotepeers/",title:"remotePeers",section:"ODIN Documentation",description:"A map of all remote `OdinPeer` instances in the room using the peer ID as index.",content:`<pre><code class="language-C#">Map&lt;number&gt;&lt;OdinPeer&gt;
</code></pre>
<p>A map of all remote <code>OdinPeer</code> instances in the room using the peer ID as index.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinpeer/">Map&lt;number&gt;&lt;OdinPeer&gt;</a></p>
`}),e.add({id:2488,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/remotepeers/",title:"RemotePeers",section:"ODIN Documentation",description:" Conatiner of room peers ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public PeerCollection RemotePeers { get; }
</code></pre>
<p>Conatiner of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/">PeerCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2489,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/remotepeers/",title:"RemotePeers",section:"ODIN Documentation",description:" Conatiner of room peers ",content:`<pre><code class="language-C#">public PeerCollection RemotePeers { get; }
</code></pre>
<p>Conatiner of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/">PeerCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2490,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/remotepeers/",title:"RemotePeers",section:"ODIN Documentation",description:" Conatiner of room peers ",content:`<pre><code class="language-C#">public PeerCollection RemotePeers { get; }
</code></pre>
<p>Conatiner of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/">PeerCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2491,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/remotepeers/",title:"RemotePeers",section:"ODIN Documentation",description:" Conatiner of room peers ",content:`<pre><code class="language-C#">public PeerCollection RemotePeers { get; }
</code></pre>
<p>Conatiner of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peercollection/">PeerCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2492,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/remotepeers/",title:"RemotePeers",section:"ODIN Documentation",description:" Conatiner of room peers ",content:`<pre><code class="language-C#">public ConcurrentDictionary&lt;ulong, PeerEntity&gt; RemotePeers { get; }
</code></pre>
<p>Conatiner of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ConcurrentDictionary&lt;UInt64,PeerEntity&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2493,href:"https://www.4players.io/odin/sdk/unity/classes/room/remotepeers/",title:"RemotePeers",section:"ODIN Documentation",description:" Conatiner of room peers ",content:`<pre><code class="language-C#">public PeerCollection RemotePeers { get; }
</code></pre>
<p>Conatiner of room peers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peercollection/">PeerCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2494,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback default Sample-Rate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static MediaSampleRate RemoteSampleRate { get; set; }
</code></pre>
<p>Playback default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2495,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback Sample-Rate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaSampleRate RemoteSampleRate
</code></pre>
<p>Playback Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2496,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate RemoteSampleRate { get; set; }
</code></pre>
<p>Playback default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2497,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate RemoteSampleRate
</code></pre>
<p>Playback Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2498,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate RemoteSampleRate { get; set; }
</code></pre>
<p>Playback default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2499,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate RemoteSampleRate
</code></pre>
<p>Playback Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2500,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate RemoteSampleRate { get; set; }
</code></pre>
<p>Playback default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2501,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate RemoteSampleRate
</code></pre>
<p>Playback Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2502,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback default Sample-Rate ",content:`<pre><code class="language-C#">public static MediaSampleRate RemoteSampleRate { get; set; }
</code></pre>
<p>Playback default Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2503,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/remotesamplerate/",title:"RemoteSampleRate",section:"ODIN Documentation",description:" Playback Sample-Rate ",content:`<pre><code class="language-C#">public MediaSampleRate RemoteSampleRate
</code></pre>
<p>Playback Sample-Rate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2504,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Remove(long id)
public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(long id)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2505,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peercollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Remove(ulong id)
public bool Remove(Peer item)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(ulong id)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Peer item)
</code></pre>
<p>Remove a peer from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2506,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Remove(string key)
public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removekey">Remove(key)</h3>
<pre><code class="language-C#">public bool Remove(string key)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
`}),e.add({id:2507,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(long id)
public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(long id)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2508,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(ulong id)
public bool Remove(Peer item)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(ulong id)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Peer item)
</code></pre>
<p>Remove a peer from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2509,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(string key)
public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removekey">Remove(key)</h3>
<pre><code class="language-C#">public bool Remove(string key)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
`}),e.add({id:2510,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(long id)
public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(long id)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2511,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peercollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(ulong id)
public bool Remove(Peer item)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(ulong id)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Peer item)
</code></pre>
<p>Remove a peer from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2512,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(string key)
public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removekey">Remove(key)</h3>
<pre><code class="language-C#">public bool Remove(string key)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
`}),e.add({id:2513,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(long id)
public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(long id)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2514,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(ulong id)
public bool Remove(Peer item)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(ulong id)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Peer item)
</code></pre>
<p>Remove a peer from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2515,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(string key)
public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removekey">Remove(key)</h3>
<pre><code class="language-C#">public bool Remove(string key)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
`}),e.add({id:2516,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(ulong id)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
`}),e.add({id:2517,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(long id)
public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(long id)
</code></pre>
<p>Remove a stream by handle id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>Int64</td>
<td>handle id of the stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(MediaStream item)
</code></pre>
<p>Remove a stream from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/mediastream/">MediaStream</a></td>
<td>stream to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2518,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(ulong id)
public bool Remove(Peer item)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removeid">Remove(id)</h3>
<pre><code class="language-C#">public bool Remove(ulong id)
</code></pre>
<p>Remove a peer by id from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>UInt64</td>
<td>peer id of the peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Peer item)
</code></pre>
<p>Remove a peer from the collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if the collection IsReadOnly</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td>peer to remove</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2519,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/remove/",title:"Remove",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool Remove(string key)
public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="removekey">Remove(key)</h3>
<pre><code class="language-C#">public bool Remove(string key)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>key</td>
<td>String</td>
<td>Room name</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
<h3 id="removeitem">Remove(item)</h3>
<pre><code class="language-C#">public bool Remove(Room item)
</code></pre>
<p>Removes the room from this collection</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>does NOT leave or free the room</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>item</td>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td>room</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>is removed</td>
</tr>
</tbody>
</table>
`}),e.add({id:2520,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/removedecoder/",title:"RemoveDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveDecoder(ushort mediaId, out MediaDecoder decoder)
</code></pre>
<p>Remove the output media from PeerEntity</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>decoder id</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media that was removed</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if removed or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2521,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/removedecoder/",title:"RemoveDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveDecoder(ulong peerId, ushort mediaId, out MediaDecoder decoder)
</code></pre>
<p>Removes a output media from a remote peer.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td>id of peer</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a output media</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media that was removed</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on decoder found or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2522,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediapipeline/removeeffect/",title:"RemoveEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveEffect(uint effectId)
</code></pre>
<p>Removes a effect from the native pipeline</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>effectId</td>
<td>UInt32</td>
<td>effect id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on removed or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2523,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/removeencoder/",title:"RemoveEncoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveEncoder(ushort mediaId, out MediaEncoder encoder)
</code></pre>
<p>Removes the input media from Room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of a input media</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media that was removed</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on encoder found or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2524,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/removeeventlistener/",title:"removeEventListener",section:"ODIN Documentation",description:"Removes an event listener from the room for specific events.",content:`<pre><code class="language-C#">public removeEventListener(eventName: Event): void
</code></pre>
<p>Removes an event listener from the room for specific events.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>eventName</td>
<td>Event</td>
<td>The event to remove the listener from (see keys of OdinEvents for possible values)</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2525,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/removemedia/",title:"removeMedia",section:"ODIN Documentation",description:"Removes a media from the list of active medias and stops decoding.",content:`<pre><code class="language-C#">removeMedia(media: OdinMedia): void
</code></pre>
<p>Removes a media from the list of active medias and stops decoding.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>media</td>
<td><a href="/odin/sdk/web/classes/odinmedia/">OdinMedia</a></td>
<td>The media instance to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2526,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/removemedia/",title:"RemoveMedia",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool RemoveMedia(long mediaStreamId)
</code></pre>
<p>Remove a associated media from the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2527,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/removemedia/",title:"RemoveMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveMedia(long mediaStreamId)
</code></pre>
<p>Remove a associated media from the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2528,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/removemedia/",title:"RemoveMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveMedia(long mediaStreamId)
</code></pre>
<p>Remove a associated media from the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2529,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/removemedia/",title:"RemoveMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveMedia(long mediaStreamId)
</code></pre>
<p>Remove a associated media from the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2530,href:"https://www.4players.io/odin/sdk/unity/classes/peer/removemedia/",title:"RemoveMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveMedia(long mediaStreamId)
</code></pre>
<p>Remove a associated media from the peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaStreamId</td>
<td>Int64</td>
<td>stream handle id</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2531,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/removemediabyid/",title:"removeMediaById",section:"ODIN Documentation",description:"Removes a media from the list of active medias by the given ID and stops decoding.",content:`<pre><code class="language-C#">removeMediaById(id: number): void
</code></pre>
<p>Removes a media from the list of active medias by the given ID and stops decoding.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>number</td>
<td>The media ID to remove</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2532,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/removemediacomponent/",title:"RemoveMediaComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RemoveMediaComponent(GameObject containerObject, ushort mediaId, bool componentOnly = false)
</code></pre>
<p>Removes all child components with the same media id</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>containerObject</td>
<td>GameObject</td>
<td>child components</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>decoder id</td>
</tr>
<tr>
<td>componentOnly</td>
<td>Boolean</td>
<td>on false will destroy gameobject</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on removed decoder or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2533,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/removepeercomponent/",title:"RemovePeerComponent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RemovePeerComponent(GameObject containerObject)
</code></pre>
<p>Remove a Unity from a gameobject</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>containerObject</td>
<td>GameObject</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2534,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/request/",title:"Request",section:"ODIN Documentation",description:" Msgpack RPC spec https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md ",content:`<pre><code class="language-C#">public static class Request
</code></pre>
<h1 id="heading"></h1>
<p>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/request/msgidindex/">MsgidIndex</a></td>
<td>uint32 field (msgid)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/request/methodindex/">MethodIndex</a></td>
<td>string field (method)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/request/paramsindex/">ParamsIndex</a></td>
<td>binary field (params)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2535,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/request/",title:"Request",section:"ODIN Documentation",description:" Format: [type, msgid, method, params] ",content:`<pre><code class="language-C#">Request = 0
</code></pre>
<p>Format: [type, msgid, method, params]</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/">MsgPackMessageType</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2536,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/resetbuffer/",title:"ResetBuffer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void ResetBuffer()
</code></pre>
`}),e.add({id:2537,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/reseteffect/",title:"ResetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void ResetEffect()
public void ResetEffect(MediaPipeline pipeline, uint samplerate, bool stereo, OdinApmConfig config)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="reseteffect">ResetEffect()</h3>
<pre><code class="language-C#">public void ResetEffect()
</code></pre>
<h3 id="reseteffectpipeline-samplerate-stereo-config">ResetEffect(pipeline, samplerate, stereo, config)</h3>
<pre><code class="language-C#">public void ResetEffect(MediaPipeline pipeline, uint samplerate, bool stereo, OdinApmConfig config)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
<tr>
<td>samplerate</td>
<td>UInt32</td>
<td></td>
</tr>
<tr>
<td>stereo</td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2538,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincustomeffectunitycomponentbase/reseteffect/",title:"ResetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void ResetEffect()
</code></pre>
<p>Removes an effect from the pipeline and add a new effect with callbacks</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This will affect the location of the effect in the pipeline by index</p>
</div>
</div>

`}),e.add({id:2539,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/reseteffect/",title:"ResetEffect",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void ResetEffect()
public void ResetEffect(MediaPipeline pipeline)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="reseteffect">ResetEffect()</h3>
<pre><code class="language-C#">public void ResetEffect()
</code></pre>
<h3 id="reseteffectpipeline">ResetEffect(pipeline)</h3>
<pre><code class="language-C#">public void ResetEffect(MediaPipeline pipeline)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2540,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/response/",title:"Response",section:"ODIN Documentation",description:" Msgpack RPC spec https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md ",content:`<pre><code class="language-C#">public static class Response
</code></pre>
<h1 id="heading"></h1>
<p>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/response/msgidindex/">MsgidIndex</a></td>
<td>uint32 field (msgid)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/response/errorindex/">ErrorIndex</a></td>
<td>binary</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/response/resultindex/">ResultIndex</a></td>
<td>binary</td>
</tr>
</tbody>
</table>
`}),e.add({id:2541,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/response/",title:"Response",section:"ODIN Documentation",description:" Format: [type, msgid, error, result] ",content:`<pre><code class="language-C#">Response = 1
</code></pre>
<p>Format: [type, msgid, error, result]</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/msgpackmessagetype/">MsgPackMessageType</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2542,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/response/resultindex/",title:"ResultIndex",section:"ODIN Documentation",description:" binary|null field (result) ",content:`<pre><code class="language-C#">public const int ResultIndex = 3
</code></pre>
<p><code>binary|null</code> field (result)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2543,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/resume/",title:"resume",section:"ODIN Documentation",description:"Instructs the server to resume the media object, resuming the reception of data. This operation essentially communicates a server-side unmute request from the client, thus indicating a desire to resume packet reception for this media stream.",content:`<pre><code class="language-C#">public resume(): void
</code></pre>
<p>Instructs the server to resume the media object, resuming the reception of
data. This operation essentially communicates a server-side unmute request from the client, thus
indicating a desire to resume packet reception for this media stream.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2544,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/resume/",title:"resume",section:"ODIN Documentation",description:"Paused the media stream on the server to start receiving data on it.",content:`<pre><code class="language-C#">resume(): Promise&lt;void&gt;
</code></pre>
<p>Paused the media stream on the server to start receiving data on it.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2545,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/resumemedia/",title:"ResumeMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; ResumeMedia(MediaDecoder decoder)
public virtual Task&lt;RpcResult&gt; ResumeMedia(ushort mediaId)
</code></pre>
<p>Send a <code>&quot;ResumeMedia&quot;</code> to the server to start a stopped decoder for output.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media to start</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>raw id to start</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="resumemediadecoder">ResumeMedia(decoder)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; ResumeMedia(MediaDecoder decoder)
</code></pre>
<p>Send a <code>&quot;ResumeMedia&quot;</code> to the server to start a stopped decoder for output.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output media to start</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="resumemediamediaid">ResumeMedia(mediaId)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; ResumeMedia(ushort mediaId)
</code></pre>
<p>Send a <code>&quot;ResumeMedia&quot;</code> to the server to start a stopped decoder for output.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>raw id to start</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2546,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/resumeoutputmedia/",title:"ResumeOutputMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool ResumeOutputMedia(OdinMedia media)
public virtual bool ResumeOutputMedia(MediaDecoder decoder)
</code></pre>
<p>Start a stopped remote output decoder</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>media</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>output wrapper</td>
</tr>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on start or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="resumeoutputmediamedia">ResumeOutputMedia(media)</h3>
<pre><code class="language-C#">public virtual bool ResumeOutputMedia(OdinMedia media)
</code></pre>
<p>Start a stopped remote output decoder</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>media</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/odinmedia/">OdinMedia</a></td>
<td>output wrapper</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on start or false</td>
</tr>
</tbody>
</table>
<h3 id="resumeoutputmediadecoder">ResumeOutputMedia(decoder)</h3>
<pre><code class="language-C#">public virtual bool ResumeOutputMedia(MediaDecoder decoder)
</code></pre>
<p>Start a stopped remote output decoder</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td>output</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on start or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2547,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/connectionstatechangedeventargs/retry/",title:"Retry",section:"ODIN Documentation",description:" Connection retry count ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public int Retry { get; }
</code></pre>
<p>Connection retry count</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2548,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/connectionstatechangedeventargs/retry/",title:"Retry",section:"ODIN Documentation",description:" Connection retry count ",content:`<pre><code class="language-C#">public int Retry { get; }
</code></pre>
<p>Connection retry count</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2549,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/connectionstatechangedeventargs/retry/",title:"Retry",section:"ODIN Documentation",description:" Connection retry count ",content:`<pre><code class="language-C#">public int Retry { get; }
</code></pre>
<p>Connection retry count</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2550,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/retry/",title:"Retry",section:"ODIN Documentation",description:" Connection retry count ",content:`<pre><code class="language-C#">public int Retry { get; }
</code></pre>
<p>Connection retry count</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2551,href:"https://www.4players.io/odin/sdk/unity/classes/connectionstatechangedeventargs/retry/",title:"Retry",section:"ODIN Documentation",description:" Connection retry count ",content:`<pre><code class="language-C#">public int Retry { get; }
</code></pre>
<p>Connection retry count</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2552,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaactivestatechangedeventargs/rmsdbfs/",title:"RmsDbfs",section:"ODIN Documentation",description:" value between the peak and minimum for amplitude levels ",content:`<pre><code class="language-C#">public float RmsDbfs { get; }
</code></pre>
<p>value between the peak and minimum for amplitude levels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2553,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/rolloffmode/",title:"RolloffMode",section:"ODIN Documentation",description:" Property of AudioSource ",content:`<pre><code class="language-C#">public AudioRolloffMode RolloffMode { get; set; }
</code></pre>
<p>Property of AudioSource</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>AudioRolloffMode</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2554,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostatseventpayload/room/",title:"room",section:"ODIN Documentation",description:"The `OdinRoom` instance the stats ere coming from.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The <code>OdinRoom</code> instance the stats ere coming from.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2555,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/room/",title:"room",section:"ODIN Documentation",description:"The room the media is added to.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The room the media is added to.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2556,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/room/",title:"room",section:"ODIN Documentation",description:"The room where the media was added/removed.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The room where the media was added/removed.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2557,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/room/",title:"room",section:"ODIN Documentation",description:"The room where the message was received.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The room where the message was received.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2558,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/room/",title:"room",section:"ODIN Documentation",description:"The room where the peer was updated.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The room where the peer was updated.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2559,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/room/",title:"room",section:"ODIN Documentation",description:"The room the peer joined/left.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The room the peer joined/left.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2560,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomdatachangedeventpayload/room/",title:"room",section:"ODIN Documentation",description:"The updated `OdinRoom` instance.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The updated <code>OdinRoom</code> instance.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2561,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomjoinedlefteventpayload/room/",title:"room",section:"ODIN Documentation",description:"The room that was joined/left.",content:`<pre><code class="language-C#">OdinRoom
</code></pre>
<p>The room that was joined/left.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom</a></p>
`}),e.add({id:2562,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/",title:"Room",section:"ODIN Documentation",description:" Main Room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class Room : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Main Room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/connectionretry/">ConnectionRetry</a></td>
<td>Int32</td>
<td>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/config/">Config</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/">RoomConfig</a></td>
<td>Room configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/isjoined/">IsJoined</a></td>
<td>Boolean</td>
<td>true on successful Join or false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/self/">Self</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td>Client Peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/roomuserdata/">RoomUserData</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/remotepeers/">RemotePeers</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/peercollection/">PeerCollection</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/playbackmedias/">PlaybackMedias</a></td>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td>Get all medias of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/microphonemedia/">MicrophoneMedia</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/microphonestream/">MicrophoneStream</a></td>
<td>Current room microphone data route</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/connectionstate/">ConnectionState</a></td>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td>ConnectionState of the Room that is set by ODIN</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/getroomid/">GetRoomId</a></td>
<td>Retrieves the room ID (e.g. the name of the room)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/getroomcustomer/">GetRoomCustomer</a></td>
<td>Retrieves the identifier of the customer the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/getroompeerid/">GetRoomPeerId</a></td>
<td>Retrieves your own peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/setapmconfig/">SetApmConfig</a></td>
<td>Set rooms new Apm config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/join/">Join</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/createmicrophonemedia/">CreateMicrophoneMedia</a></td>
<td>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/updatepeeruserdata/">UpdatePeerUserData</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/updatepeeruserdataasync/">UpdatePeerUserDataAsync</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/updateroomuserdata/">UpdateRoomUserData</a></td>
<td>Updates the user data for the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/updateroomuserdataasync/">UpdateRoomUserDataAsync</a></td>
<td>Updates the user data for the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/sendmessage/">SendMessage</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/sendmessageasync/">SendMessageAsync</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/broadcastmessageasync/">BroadcastMessageAsync</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/getremotepeersids/">GetRemotePeersIds</a></td>
<td>Get a copy of all PeerIds in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/getremotepeersmediastreamids/">GetRemotePeersMediaStreamIds</a></td>
<td>All ids of Media from remote peers in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/setmicrophonemute/">SetMicrophoneMute</a></td>
<td>Will set the room <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> to mute</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/setpositionscale/">SetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/updateposition/">UpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/leave/">Leave</a></td>
<td>Leave a room and free all remote peers and associated medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/dispose/">Dispose</a></td>
<td>On dispose will free the room and token generator</td>
</tr>
</tbody>
</table>
`}),e.add({id:2563,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomjoinedeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2564,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomjoineventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2565,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomleaveeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2566,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/",title:"Room",section:"ODIN Documentation",description:" Main Room ",content:`<pre><code class="language-C#">public class Room : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Main Room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/connectionretry/">ConnectionRetry</a></td>
<td>Int32</td>
<td>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/config/">Config</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/">RoomConfig</a></td>
<td>Room configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/isjoined/">IsJoined</a></td>
<td>Boolean</td>
<td>true on successful Join or false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/self/">Self</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td>Client Peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/roomuserdata/">RoomUserData</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>Odin UserData helper for marshal byte arrays on Room level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/remotepeers/">RemotePeers</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/peercollection/">PeerCollection</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/playbackmedias/">PlaybackMedias</a></td>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td>Get all medias of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/microphonemedia/">MicrophoneMedia</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/microphonestream/">MicrophoneStream</a></td>
<td>Current room microphone data route</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/connectionstate/">ConnectionState</a></td>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td>ConnectionState of the Room that is set by ODIN</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/getroomid/">GetRoomId</a></td>
<td>Retrieves the room ID (e.g. the name of the room)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/getroomcustomer/">GetRoomCustomer</a></td>
<td>Retrieves the identifier of the customer the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/getroompeerid/">GetRoomPeerId</a></td>
<td>Retrieves your own peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/getroomconnectionstats/">GetRoomConnectionStats</a></td>
<td>Retrieves statistics for the underlying connection of this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/setapmconfig/">SetApmConfig</a></td>
<td>Set rooms new Apm config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/join/">Join</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/createmicrophonemedia/">CreateMicrophoneMedia</a></td>
<td>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/updatepeeruserdata/">UpdatePeerUserData</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/updatepeeruserdataasync/">UpdatePeerUserDataAsync</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/updateroomuserdata/">UpdateRoomUserData</a></td>
<td>Updates the user data for the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/updateroomuserdataasync/">UpdateRoomUserDataAsync</a></td>
<td>Updates the user data for the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/sendmessage/">SendMessage</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/sendmessageasync/">SendMessageAsync</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/broadcastmessageasync/">BroadcastMessageAsync</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/getremotepeersids/">GetRemotePeersIds</a></td>
<td>Get a copy of all PeerIds in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/getremotepeersmediastreamids/">GetRemotePeersMediaStreamIds</a></td>
<td>All ids of Media from remote peers in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/setpositionscale/">SetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/updateposition/">UpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/audioprocessreverse/">AudioProcessReverse</a></td>
<td>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/leave/">Leave</a></td>
<td>Leave a room and free all remote peers and associated medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/dispose/">Dispose</a></td>
<td>On dispose will free the room and token generator</td>
</tr>
</tbody>
</table>
`}),e.add({id:2567,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomjoinedeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2568,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomjoineventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2569,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomleaveeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2570,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/",title:"Room",section:"ODIN Documentation",description:" Main Room ",content:`<pre><code class="language-C#">public class Room : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Main Room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/connectionretry/">ConnectionRetry</a></td>
<td>Int32</td>
<td>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/config/">Config</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/">RoomConfig</a></td>
<td>Room configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/isjoined/">IsJoined</a></td>
<td>Boolean</td>
<td>true on successful Join or false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/self/">Self</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td>Client Peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/roomuserdata/">RoomUserData</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/remotepeers/">RemotePeers</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/peercollection/">PeerCollection</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/playbackmedias/">PlaybackMedias</a></td>
<td>IEnumerable&lt;MediaCollection&gt;</td>
<td>Get all medias of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/microphonemedia/">MicrophoneMedia</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/microphonestream/">MicrophoneStream</a></td>
<td>Current room microphone data route</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/connectionstate/">ConnectionState</a></td>
<td>KeyValuePair&lt;OdinRoomConnectionState,OdinRoomConnectionStateChangeReason&gt;</td>
<td>ConnectionState of the Room that is set by ODIN</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/getroomid/">GetRoomId</a></td>
<td>Retrieves the room ID (e.g. the name of the room)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/getroomcustomer/">GetRoomCustomer</a></td>
<td>Retrieves the identifier of the customer the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/getroompeerid/">GetRoomPeerId</a></td>
<td>Retrieves your own peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/setapmconfig/">SetApmConfig</a></td>
<td>Set rooms new Apm config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/join/">Join</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/createmicrophonemedia/">CreateMicrophoneMedia</a></td>
<td>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/updatepeeruserdata/">UpdatePeerUserData</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/updatepeeruserdataasync/">UpdatePeerUserDataAsync</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/updateroomuserdata/">UpdateRoomUserData</a></td>
<td>Updates the user data for the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/updateroomuserdataasync/">UpdateRoomUserDataAsync</a></td>
<td>Updates the user data for the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/sendmessage/">SendMessage</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/sendmessageasync/">SendMessageAsync</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/broadcastmessageasync/">BroadcastMessageAsync</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/getremotepeersids/">GetRemotePeersIds</a></td>
<td>Get a copy of all PeerIds in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/getremotepeersmediastreamids/">GetRemotePeersMediaStreamIds</a></td>
<td>All ids of Media from remote peers in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/setmicrophonemute/">SetMicrophoneMute</a></td>
<td>Will set the room <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> to mute</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/setpositionscale/">SetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/updateposition/">UpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/leave/">Leave</a></td>
<td>Leave a room and free all remote peers and associated medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/dispose/">Dispose</a></td>
<td>On dispose will free the room and token generator</td>
</tr>
</tbody>
</table>
`}),e.add({id:2571,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomjoinedeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2572,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomjoineventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2573,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomleaveeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2574,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/",title:"Room",section:"ODIN Documentation",description:" Main Room ",content:`<pre><code class="language-C#">public class Room : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Main Room</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/constructor_0/">Room(String, String, String, String, OdinMediaConfig, OdinRoomConfig, Boolean)</a></td>
<td>Create a ODIN ffi room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/constructor_1/">Room(RoomConfig)</a></td>
<td>Create a ODIN ffi room</td>
</tr>
</tbody>
</table>
<h2 id="events">Events</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onpeerjoined/">OnPeerJoined</a></td>
<td>Passthrough event that identified a new PeerJoined event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onpeerleft/">OnPeerLeft</a></td>
<td>Passthrough event that identified a new PeerLeft event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td>Passthrough event that identified a new PeerUpdated event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onmediaadded/">OnMediaAdded</a></td>
<td>Passthrough event that identified a new MediaAdded event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onmediaremoved/">OnMediaRemoved</a></td>
<td>Passthrough event that identified a new MediaRemoved event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td>Passthrough event that identified a new MediaActiveStateChanged event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td>Passthrough event that identified a new RoomUserDataChanged event by Event-Tag. Changing a Room's UserData is only possible via request to Odin server API, but not supported inside the client SDK.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onmessagereceived/">OnMessageReceived</a></td>
<td>Passthrough event that identified a new MessageReceived event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td>Passthrough event that identified a new ConnectionStateChanged event by Event-Tag.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/connectionretry/">ConnectionRetry</a></td>
<td>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/config/">Config</a></td>
<td>Room configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/isjoined/">IsJoined</a></td>
<td>true on successful Join or false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/self/">Self</a></td>
<td>Client Peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/roomuserdata/">RoomUserData</a></td>
<td>Odin UserData helper for marshal byte arrays on Room level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/remotepeers/">RemotePeers</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/playbackmedias/">PlaybackMedias</a></td>
<td>Get all medias of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/microphonemedia/">MicrophoneMedia</a></td>
<td>Current room microphone data route</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/connectionstate/">ConnectionState</a></td>
<td>ConnectionState of the Room that is set by ODIN</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/getroomid/">GetRoomId</a></td>
<td>Retrieves the room ID (e.g. the name of the room)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/getroomcustomer/">GetRoomCustomer</a></td>
<td>Retrieves the identifier of the customer the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/getroompeerid/">GetRoomPeerId</a></td>
<td>Retrieves your own peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/getroomconnectionstats/">GetRoomConnectionStats</a></td>
<td>Retrieves statistics for the underlying connection of this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/setapmconfig/">SetApmConfig</a></td>
<td>Set rooms new Apm config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/join/">Join</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/createmicrophonemedia/">CreateMicrophoneMedia</a></td>
<td>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/updatepeeruserdata/">UpdatePeerUserData</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/updatepeeruserdataasync/">UpdatePeerUserDataAsync</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/sendmessage/">SendMessage</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/sendmessageasync/">SendMessageAsync</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/broadcastmessageasync/">BroadcastMessageAsync</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/getremotepeersids/">GetRemotePeersIds</a></td>
<td>Get a copy of all PeerIds in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/getremotepeersmediastreamids/">GetRemotePeersMediaStreamIds</a></td>
<td>All ids of Media from remote peers in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/setpositionscale/">SetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/updateposition/">UpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/audioprocessreverse/">AudioProcessReverse</a></td>
<td>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/leave/">Leave</a></td>
<td>Leave a room and free all remote peers and associated medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/dispose/">Dispose</a></td>
<td>On dispose will free the room and token generator</td>
</tr>
</tbody>
</table>
`}),e.add({id:2575,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomjoinedeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2576,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomjoineventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2577,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomleaveeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2578,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/",title:"Room",section:"ODIN Documentation",description:" Main Room ",content:`<p><a href='/odin/sdk/unity/2.0.0/manual/room/' class="btn btn-primary">Switch to manual</a></p>
<pre><code class="language-C#">public class Room : IRoom, IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Main Room</p>
<h2 id="discussion">Discussion</h2>

<div><p>The <code>Room</code> class is the entry point of the low-level API of the ODIN SDK. It provides methods to join and leave a room,
send and receive messages, and manage media streams. The 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 class is also responsible for managing the connection
state and the room configuration.</p>
<p>If don&rsquo;t want to develop everything yourself, it is recommended to use 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 instead which is a higher level API
and is easier to use.</p>
<p>The basic flow is to use 













<span class="external-reference">Room.Create <a href="/odin/sdk/unity/2.0.0/classes/room/create"><i class="fas fa-external-link-alt"></i></a></span>


 to create a 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 object, configure it with event handlers, and
then join the room. Once joined, you can attach a media stream to the room and start sending and receiving media (i.e.
microphone). You need to listen on the 













<span class="external-reference">Room.OnMediaStarted <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted"><i class="fas fa-external-link-alt"></i></a></span>


 event to receive media streams from other peers in the room and to
create playback components for them.</p>
<p>See the <a href="#example">example</a> below for a basic usage of the 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 class.</p>
</div>



<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/constructor_0/">Room(OdinConnectionPoolHandle, String, UInt32, Boolean)</a></td>
<td>Initialise dangling room</td>
</tr>
</tbody>
</table>
<h2 id="events">Events</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/ondatagram/">OnDatagram</a></td>
<td>Call on audio data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onrpc/">OnRpc</a></td>
<td>Call on rpc data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onsendrpcresponse/">OnSendRpcResponse</a></td>
<td>Call on response to a rpc request</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onconnectionstatuschanged/">OnConnectionStatusChanged</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onroomjoined/">OnRoomJoined</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onpeerjoined/">OnPeerJoined</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onpeerleft/">OnPeerLeft</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted/">OnMediaStarted</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onmediastopped/">OnMediaStopped</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onuserdatachanged/">OnUserDataChanged</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/onmessagereceived/">OnMessageReceived</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/create/">Create</a></td>
<td>Initialise independent room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/join/">Join</a></td>
<td>Create and join a Room</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/samplerate/">Samplerate</a></td>
<td>Room default samplerate</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/stereo/">Stereo</a></td>
<td>Room default stereo flag</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/endpoint/">EndPoint</a></td>
<td>Room server gateway endpoint</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/id/">Id</a></td>
<td>RoomId</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/ownpeerid/">OwnPeerId</a></td>
<td>PeerId of self</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/name/">Name</a></td>
<td>Room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/connectionstatus/">ConnectionStatus</a></td>
<td>RoomStatus</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/isconnected/">IsConnected</a></td>
<td>IsJoined</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/isclosed/">IsClosed</a></td>
<td>IsClosed</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/positionx/">PositionX</a></td>
<td>Inital position of self on join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/positiony/">PositionY</a></td>
<td>Inital position of self on join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/positionz/">PositionZ</a></td>
<td>Inital position of self on join</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/rpcwriter/">RpcWriter</a></td>
<td>Msgpack writer for RPC</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/rpcackactive/">RpcAckActive</a></td>
<td>Toggle message type for Room.SendRpc true is request and false is notification. Currently calls to &quot;UpdatePeer&quot; and &quot;SetPeerPosition&quot; needs to be requests!</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/rpctablethunk/">RpcTableThunk</a></td>
<td>Msgpack results to RPC requests</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/roomuserdata/">RoomUserData</a></td>
<td>Odin UserData helper for marshal byte arrays on Room level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/remotepeers/">RemotePeers</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/encoders/">Encoders</a></td>
<td>Container of room input medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/decoders/">Decoders</a></td>
<td>Elements of room output medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/token/">Token</a></td>
<td>Room joining token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/parent/">Parent</a></td>
<td>Default value null indicates root or not set</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/availableencoderids/">AvailableEncoderIds</a></td>
<td>Available media ids that are reserved for the room</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/getbaseroom/">GetBaseRoom</a></td>
<td>This will always return itself</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/room_ondatagram/">Room_OnDatagram</a></td>
<td>Default impl will push a datagram to all Room of the same mediaId in the current room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/room_onrpc/">Room_OnRPC</a></td>
<td>Default impl will process all rpc packets.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/processrpc/">ProcessRPC</a></td>
<td>Will process all rpc packets.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/join/">Join</a></td>
<td>Join a room with token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/getroomid/">GetRoomId</a></td>
<td>Retrieves the room id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/getencoder/">GetEncoder</a></td>
<td>Get a encoder from Room by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/getorcreateencoder/">GetOrCreateEncoder</a></td>
<td>Get a encoder from Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/createencoder/">CreateEncoder</a></td>
<td>Create a new input media that will be added toRoom</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/removeencoder/">RemoveEncoder</a></td>
<td>Removes the input media from Room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/getdecoder/">GetDecoder</a></td>
<td>Get a decoder from <a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a> by id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/getorcreatedecoder/">GetOrCreateDecoder</a></td>
<td>Get a decoder from <a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a> by id. If the decoder is not found create a new one that will be added to the Peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/createdecoder/">CreateDecoder</a></td>
<td>Create a new output media that will be added to PeerEntity</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/removedecoder/">RemoveDecoder</a></td>
<td>Removes a output media from a remote peer.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/startmedia/">StartMedia</a></td>
<td>Send a &quot;StartMedia&quot; RPC to the server to start the encoder for input.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/stopmedia/">StopMedia</a></td>
<td>Send a &quot;StopMedia&quot; to the server to stop the encoder.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/pausemedia/">PauseMedia</a></td>
<td>Send a &quot;PauseMedia&quot; to the server to stop the decoder for output.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/resumemedia/">ResumeMedia</a></td>
<td>Send a &quot;ResumeMedia&quot; to the server to start a stopped decoder for output.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/updateuserdata/">UpdateUserData</a></td>
<td>Update arbitrary userdata of self (note: Odin)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/setposition/">SetPosition</a></td>
<td>Set the spatial position for server side culling. Other remote peers outside the boundary will appear as not in the room or leaving the room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/sendmessage/">SendMessage</a></td>
<td>Send &quot;SendMessage&quot; to the server to broadcast the message with default UTF8 encoding.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/sendrpc/">SendRpc</a></td>
<td>Send registered RPCs to the server. (set by Room)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/sendaudio/">SendAudio</a></td>
<td>Push the samples to all Room for pipeline processing and pop the result as datagrams to the server</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/sendencoderaudio/">SendEncoderAudio</a></td>
<td>Pop all samples from the input media by id and send them to the server</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/close/">Close</a></td>
<td>Close the native room. (native dispose)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/dispose/">Dispose</a></td>
<td>On dispose will free the room and all associated data</td>
</tr>
</tbody>
</table>
<h2 id="example">Example</h2>





<div id="example-31c1577c3f5ba7d5292f0d1972c625d6" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">Room Example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-31c1577c3f5ba7d5292f0d1972c625d6-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-31c1577c3f5ba7d5292f0d1972c625d6-cs">
      <pre><code class="hljs language-cs">using OdinNative.Odin;
using OdinNative.Odin.Media;
using OdinNative.Odin.Peer;
using OdinNative.Odin.Room;
using OdinNative.Unity;
using OdinNative.Unity.Audio;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using UnityEngine;

/// &lt;summary&gt;
/// This sample is to showcase a basic version of the wrapper
/// &lt;/summary&gt;
/// &lt;remarks&gt;For a GameObject/Component sample checkout the 2D or 3D versions&lt;/remarks&gt;
public class SampleManagerBasic : MonoBehaviour
{
    public Room _Room;
    public string Gateway;
    public string AccessKey;
    public string RoomName;
    public string UserId;

    public MicrophoneReader _AudioInput;
    public static readonly ConcurrentQueue&lt;Action&gt; UnityQueue = new ConcurrentQueue&lt;Action&gt;();

    void Reset()
    {
        Gateway = &#34;https://gateway.odin.4players.de&#34;;
        RoomName = &#34;Test&#34;;
        UserId = &#34;DummyUsername&#34;;
    }

    // Start is called before the first frame update
    void Start()
    {
        // For persistent room with scene switches
        //DontDestroyOnLoad(this.gameObject);

        if (_Room == null)
        {
            _Room = Room.Create(Gateway, 48000, false);

            // Do NOT use in any circumstances Unity functions in base event callbacks use a dispatch instead
            // or use MonoBehaviour versions like OdinRoom that passthrough invokes to UnityEvents
            // but this sample is to showcase a basic version; For a GameObject/Component sample checkout InstanceSample2D
            _Room.OnRoomJoined &#43;= Example_OnRoomJoined;
            _Room.OnMediaStarted &#43;= Example_OnMediaStarted;
            _Room.OnMediaStopped &#43;= Example_OnMediaStopped;
            _Room.OnMessageReceived &#43;= Example_OnMessageLog;

            // most likely use some kind of remote token request like UnityWebRequest
            // Create token local for showcase purpose only =&gt; ACCESSKEY SHOULD NOT BE CLIENT SIDE!
            DateTime utc = DateTime.UtcNow;
            _Room.Join(ExampleKey(new ExampleTokenBody()
            {
                rid = RoomName,
                uid = UserId,
                nbf = ((DateTimeOffset)utc).ToUnixTimeSeconds(),
                exp = ((DateTimeOffset)utc.AddMinutes(5)).ToUnixTimeSeconds() // 5min valid
            }.ToString(), AccessKey));
        }
    }

    private void Example_OnRoomJoined(object sender, ulong ownPeerId, string name, byte[] roomUserData, ushort[] mediaIds, ReadOnlyCollection&lt;PeerRpc&gt; peers)
    {
        Debug.Log($&#34;Joined room \\&#34;{name}\\&#34; with {peers.Count} peers&#34;);

        if (_Room == null)
        {
            Debug.LogError($&#34;Can not create encoder without a room&#34;);
            return;
        }

        // each room has a limited number of ids reserved for encoders i.e audio input / capture
        if (_Room.AvailableEncoderIds.TryDequeue(out ushort mediaId))
            CreateCapture(mediaId);
        else
            Debug.LogError($&#34;Can not create encoder without a encoder id that is free to use&#34;);

        // add already existing medias
        foreach (var peer in _Room.RemotePeers.Values)
            foreach(var decoder in peer.Medias.Values)
                CreatePlayback(decoder, peer);
    }

    private void Example_OnMediaStarted(object sender, ulong peerId, MediaRpc media)
    {
        Debug.Log($&#34;Peer {peerId} started media {media.Id}&#34;);

        if (_Room == null)
        {
            Debug.LogError($&#34;Can not add media effects to pipeline without a room in {nameof(Example_OnMediaStarted)}&#34;);
            return;
        }

        // in default setup the room creates decoders intern automatically on the event
        // get the decoder corresponding to a peer
        if (_Room.RemotePeers.TryGetValue(peerId, out PeerEntity peer))
            if (peer.Medias.TryGetValue(media.Id, out MediaDecoder decoder))
                CreatePlayback(decoder, peer);
    }

    private void Example_OnMediaStopped(object sender, ulong peerId, ushort mediaId)
    {
        Debug.Log($&#34;Peer {peerId} removed media {mediaId}&#34;);

        DispatchDestroyAudioSource($&#34;OdinDecoder {mediaId}&#34;);
    }

    private void Example_OnMessageLog(object sender, ulong peerId, byte[] message)
    {
        Debug.Log($&#34;Room \\&#34;{(sender as Room).Name}\\&#34; got message ({message.Length} bytes) from peer {peerId}: \\&#34;{Encoding.UTF8.GetString(message)}\\&#34;&#34;);
    }

    private void ProxyAudio(float[] buffer, int _, bool isSilent)
    {
        if (_Room == null) return;
        // send audio to all encoders in the current room
        // or pop/push audio directly on the encoder/decoder
        foreach (var kvp in _Room.Encoders)
            _Room.SendAudio(buffer, kvp.Value, isSilent);
    }

    public void CreateCapture(ushort mediaId)
    {
        if( _Room == null) return;

        // create a encoder where to send audio data to
        if (_Room.GetOrCreateEncoder(mediaId, out MediaEncoder encoder))
        {
            // created encoders have to be started with a customizable rpc call
            _Room.StartMedia(encoder);
            // set a callback for the MicrophoneReader and add sample effects to the pipeline
            LinkEncoderToMicrophone(encoder);
        }
    }

    private void LinkEncoderToMicrophone(MediaEncoder encoder)
    {
        UnityQueue.Enqueue(() =&gt;
        {
            // this sample does not set PersistentListener direct or by prefab
            if (_AudioInput &amp;&amp; _AudioInput.OnAudioData?.GetPersistentEventCount() &lt;= 0 &amp;&amp; _Room != null)
                _AudioInput.OnAudioData.AddListener(ProxyAudio);

            MicrophoneReader microphone = GetComponent&lt;MicrophoneReader&gt;();
            if (microphone != null)
            {
                // optionally add effects to the encoder (Input/Capture)

                // add voice activity detection
                OdinVadComponent vadComponent = microphone.gameObject.AddComponent&lt;OdinVadComponent&gt;();
                vadComponent.Media = encoder;
                // add a microphone boost
                OdinVolumeBoostComponent volumeBoostComponent = microphone.gameObject.AddComponent&lt;OdinVolumeBoostComponent&gt;();
                volumeBoostComponent.Media = encoder;
            }
        });
    }

    /// &lt;summary&gt;
    /// Add show how
    /// &lt;/summary&gt;
    public void CreatePlayback(MediaDecoder decoder, PeerEntity peer)
    {
        // EXAMPLE optionally add INTERNAL effects to the decoder (Output/Playback)
        MediaPipeline pipeline = decoder.GetPipeline();
        if (pipeline.AddVadEffect(out _))
            Debug.Log($&#34;added {nameof(VadEffect)} to \\&#34;OdinDecoder {decoder.Id}\\&#34; of peer {peer.Id}&#34;);

        // Odin uses Unity to play the audio
        DispatchCreateAudioSource(decoder, peer);
    }

    /// &lt;summary&gt;
    /// Add OdinMedia that handles &lt;see cref=&#34;AudioSource&#34;/&gt; and copy data from Odin to &lt;see cref=&#34;AudioClip&#34;/&gt;
    /// &lt;/summary&gt;
    /// &lt;remarks&gt;optionally &lt;see cref=&#34;MediaDecoder.Pop&#34;/&gt; samples can be used with &lt;see cref=&#34;AudioClip.SetData&#34;/&gt;&lt;/remarks&gt;
    private void DispatchCreateAudioSource(MediaDecoder decoder, PeerEntity peer)
    {
        UnityQueue.Enqueue(() =&gt;
        {
            GameObject container = new GameObject($&#34;OdinDecoder {decoder.Id}&#34;);
            container.transform.parent = transform;
            OdinMedia mediaComponent = container.AddComponent&lt;OdinMedia&gt;();
            mediaComponent.MediaDecoder = decoder; // set the decoder to copy data from
            mediaComponent.Parent = peer; // the use of OdinMedia requires a parent else it is optional
            mediaComponent.enabled = true;

            // optionally add interal effects wrapped with Unity to the decoder (Output/Playback)
            // for audio pipeline manipulation

            // add a playback volume boost
            OdinVolumeBoostComponent volumeBoostComponent = container.AddComponent&lt;OdinVolumeBoostComponent&gt;();
            volumeBoostComponent.Media = mediaComponent;
            // add a playback mute
            OdinMuteAudioComponent muteComponent = container.AddComponent&lt;OdinMuteAudioComponent&gt;();
            muteComponent.Media = mediaComponent;
            // see other Effects or build one
            // with CustomEffect (PipelineEffect)
            // or with Unity helper class OdinCustomEffectUnityComponentBase
        });
    }

    /// &lt;summary&gt;
    /// Disposing objects is necessary to prevent memory leaks
    /// &lt;/summary&gt;
    /// &lt;remarks&gt;To cleaup Unity versions of Odin components just destroy on gameObject to automatically dispose them &lt;see cref=&#34;OnDestroy&#34;/&gt;&lt;/remarks&gt;
    private void DispatchDestroyAudioSource(string gameObjectName)
    {
        UnityQueue.Enqueue(() =&gt;
        {
            OdinMedia mediaComponent = this.gameObject
                .GetComponentsInChildren&lt;OdinMedia&gt;()
                .FirstOrDefault(component =&gt; component.name == gameObjectName);

            if (mediaComponent != null)
                Destroy(mediaComponent.gameObject);
        });
    }

    private void Update()
    {
        if (UnityQueue.IsEmpty == false)
            while (UnityQueue.TryDequeue(out var action))
                action?.Invoke();
    }

    private void OnDestroy()
    {
        if( _Room != null )
        {
            _Room.Dispose();
            _Room = null;
        }
    }

    #region ExampleToken
    [Serializable]
    class ExampleTokenBody
    {
        public string rid;
        public string uid;
        public long nbf;
        public long exp;

        public override string ToString() =&gt; JsonUtility.ToJson(this);
    }

    private string ExampleKey(string body, string accesskey = &#34;&#34;)
    {
        Debug.LogAssertion(&#34;The access key should never be used client side and is for showcase purpose only!&#34;);

        if (string.IsNullOrEmpty(accesskey))
        {
            string currentKey = OdinClient.CreateAccessKey();
            Debug.LogWarning($&#34;Generated example key: \\&#34;{currentKey}\\&#34;&#34;);
            return OdinClient.CreateToken(currentKey, body);
        }
        else
        {
            Debug.LogWarning($&#34;Using example key: \\&#34;{accesskey}\\&#34;&#34;);
            return OdinClient.CreateToken(accesskey, body);
        }
    }
    #endregion ExampleToken
}
</code></pre>
    </div></div>
</div>


`}),e.add({id:2579,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomjoinedeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2580,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomjoineventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2581,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomleaveeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2582,href:"https://www.4players.io/odin/sdk/unity/classes/room/",title:"Room",section:"ODIN Documentation",description:" Main Room ",content:`<pre><code class="language-C#">public class Room : IDisposable
</code></pre>
<h1 id="heading"></h1>
<p>Main Room</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/constructor_0/">Room(String, String, String, String, OdinMediaConfig, OdinRoomConfig, Boolean)</a></td>
<td>Create a ODIN ffi room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/constructor_1/">Room(RoomConfig)</a></td>
<td>Create a ODIN ffi room</td>
</tr>
</tbody>
</table>
<h2 id="events">Events</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onpeerjoined/">OnPeerJoined</a></td>
<td>Passthrough event that identified a new PeerJoined event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onpeerleft/">OnPeerLeft</a></td>
<td>Passthrough event that identified a new PeerLeft event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onpeeruserdatachanged/">OnPeerUserDataChanged</a></td>
<td>Passthrough event that identified a new PeerUpdated event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onmediaadded/">OnMediaAdded</a></td>
<td>Passthrough event that identified a new MediaAdded event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onmediaremoved/">OnMediaRemoved</a></td>
<td>Passthrough event that identified a new MediaRemoved event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onmediaactivestatechanged/">OnMediaActiveStateChanged</a></td>
<td>Passthrough event that identified a new MediaActiveStateChanged event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onroomuserdatachanged/">OnRoomUserDataChanged</a></td>
<td>Passthrough event that identified a new RoomUserDataChanged event by Event-Tag. Changing a Room's UserData is only possible via request to Odin server API, but not supported inside the client SDK.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onmessagereceived/">OnMessageReceived</a></td>
<td>Passthrough event that identified a new MessageReceived event by Event-Tag.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/onconnectionstatechanged/">OnConnectionStateChanged</a></td>
<td>Passthrough event that identified a new ConnectionStateChanged event by Event-Tag.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/connectionretry/">ConnectionRetry</a></td>
<td>The count of ConnectionState OdinRoomConnectionState retry for reconnects. Reset on Connected</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/config/">Config</a></td>
<td>Room configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/isjoined/">IsJoined</a></td>
<td>true on successful Join or false</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/self/">Self</a></td>
<td>Client Peer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/roomuserdata/">RoomUserData</a></td>
<td>Odin UserData helper for marshal byte arrays on Room level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/remotepeers/">RemotePeers</a></td>
<td>Conatiner of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/playbackmedias/">PlaybackMedias</a></td>
<td>Get all medias of room peers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
<td>Current room microphone data route</td>
</tr>
</tbody>
</table>
<h2 id="static-properties">Static Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/connectionstate/">ConnectionState</a></td>
<td>ConnectionState of the Room that is set by ODIN</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/getroomid/">GetRoomId</a></td>
<td>Retrieves the room ID (e.g. the name of the room)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/getroomcustomer/">GetRoomCustomer</a></td>
<td>Retrieves the identifier of the customer the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/getroompeerid/">GetRoomPeerId</a></td>
<td>Retrieves your own peer ID</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/getroomconnectionstats/">GetRoomConnectionStats</a></td>
<td>Retrieves statistics for the underlying connection of this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/setapmconfig/">SetApmConfig</a></td>
<td>Set rooms new Apm config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/join/">Join</a></td>
<td>Join the room via Odin gateway</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/createmicrophonemedia/">CreateMicrophoneMedia</a></td>
<td>Try to add a <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/updatepeeruserdata/">UpdatePeerUserData</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/updatepeeruserdataasync/">UpdatePeerUserDataAsync</a></td>
<td>Updates the user data for our own peer. The server will populate this data to all other visible peers in the same room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/sendmessage/">SendMessage</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/sendmessageasync/">SendMessageAsync</a></td>
<td>Sends arbitrary data to a array of target peerIds.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/broadcastmessage/">BroadcastMessage</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/broadcastmessageasync/">BroadcastMessageAsync</a></td>
<td>Sends arbitrary data to a all remote peers in this room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/getremotepeersids/">GetRemotePeersIds</a></td>
<td>Get a copy of all PeerIds in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/getremotepeersmediastreamids/">GetRemotePeersMediaStreamIds</a></td>
<td>All ids of Media from remote peers in this room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/setpositionscale/">SetPositionScale</a></td>
<td>Configures the allowed 'view' distance for proximity calculation of peers in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/updateposition/">UpdatePosition</a></td>
<td>Updates the two-dimensional position of our own peer in the room</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/audioprocessreverse/">AudioProcessReverse</a></td>
<td>Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo canceller.This should only be done if you are <em>NOT</em> using AudioMixStreams(RoomHandle%2cStreamHandle%5b%5d%2cSystem.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/leave/">Leave</a></td>
<td>Leave a room and free all remote peers and associated medias</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/room/dispose/">Dispose</a></td>
<td>On dispose will free the room and token generator</td>
</tr>
</tbody>
</table>
`}),e.add({id:2583,href:"https://www.4players.io/odin/sdk/unity/classes/roomjoinedeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2584,href:"https://www.4players.io/odin/sdk/unity/classes/roomjoineventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2585,href:"https://www.4players.io/odin/sdk/unity/classes/roomleaveeventargs/room/",title:"Room",section:"ODIN Documentation",description:" room object ",content:`<pre><code class="language-C#">public Room Room
</code></pre>
<p>room object</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/room/">Room</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2586,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/room_ondatagram/",title:"Room_OnDatagram",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void Room_OnDatagram(object sender, DatagramEventArgs e)
</code></pre>
<p>Default impl will push a datagram to all Room of the same mediaId in the current room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The room will drop a datagram if there is no decoder to push</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/datagrameventargs/">DatagramEventArgs</a></td>
<td>Datagram payload</td>
</tr>
</tbody>
</table>
`}),e.add({id:2587,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/room_onrpc/",title:"Room_OnRPC",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void Room_OnRPC(object sender, RpcEventArgs e)
</code></pre>
<p>Default impl will process all rpc packets.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Client side processing of MsgPackMessageType is not supported and will always response with <code>&quot;MessagePack requests are not supported!&quot;</code> or drop the request on error</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>Room object</td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpceventargs/">RpcEventArgs</a></td>
<td>RPC payload</td>
</tr>
</tbody>
</table>
`}),e.add({id:2588,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/constructor_0/",title:"Room(OdinConnectionPoolHandle, String, UInt32, Boolean)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room(OdinConnectionPoolHandle connectionPoolHandle, string endPoint, uint samplerate, bool stereo)
</code></pre>
<p>Initialise dangling room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>For creating an independent room use UInt32%2cSystem</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>connectionPoolHandle</td>
<td>Rooms connection handle</td>
</tr>
<tr>
<td>endPoint</td>
<td>Gateway server</td>
</tr>
<tr>
<td>samplerate</td>
<td>sets default samplerate</td>
</tr>
<tr>
<td>stereo</td>
<td>sets default stereo flag</td>
</tr>
</tbody>
</table>
`}),e.add({id:2589,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/constructor_1/",title:"Room(RoomConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room(RoomConfig config)
</code></pre>
<p>Create a ODIN ffi room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><xref href="OdinNative.Odin.Room.RoomConfig" data-throw-if-not-resolved="false"></xref> to use for this room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2590,href:"https://www.4players.io/odin/sdk/unity/classes/room/constructor_1/",title:"Room(RoomConfig)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room(RoomConfig config)
</code></pre>
<p>Create a ODIN ffi room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><xref href="OdinNative.Odin.Room.RoomConfig" data-throw-if-not-resolved="false"></xref> to use for this room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2591,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/constructor_0/",title:"Room(String, String, String, String, OdinMediaConfig, OdinRoomConfig, Boolean)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room(string server, string accessKey, string token, string name, OdinMediaConfig playbackMediaConfig, OdinRoomConfig apmConfig, bool registerEventCallback)
</code></pre>
<p>Create a ODIN ffi room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td>Endpoint</td>
</tr>
<tr>
<td>accessKey</td>
<td>Access Key</td>
</tr>
<tr>
<td>token</td>
<td>Room token</td>
</tr>
<tr>
<td>name</td>
<td>Room name</td>
</tr>
<tr>
<td>playbackMediaConfig</td>
<td>Config to use for <xref href="OdinNative.Odin.Media.MediaStream" data-throw-if-not-resolved="false"></xref> on new medias</td>
</tr>
<tr>
<td>apmConfig</td>
<td>Config to use for <xref href="OdinNative.Core.OdinRoomConfig" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>registerEventCallback</td>
<td>true for <xref href="OdinNative.Odin.Room.Room.RegisterEventCallback(OdinEventCallback)" data-throw-if-not-resolved="false"></xref> or false for no room events</td>
</tr>
</tbody>
</table>
`}),e.add({id:2592,href:"https://www.4players.io/odin/sdk/unity/classes/room/constructor_0/",title:"Room(String, String, String, String, OdinMediaConfig, OdinRoomConfig, Boolean)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Room(string server, string accessKey, string token, string name, OdinMediaConfig playbackMediaConfig, OdinRoomConfig apmConfig, bool registerEventCallback)
</code></pre>
<p>Create a ODIN ffi room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>server</td>
<td>Endpoint</td>
</tr>
<tr>
<td>accessKey</td>
<td>Access Key</td>
</tr>
<tr>
<td>token</td>
<td>Room token</td>
</tr>
<tr>
<td>name</td>
<td>Room name</td>
</tr>
<tr>
<td>playbackMediaConfig</td>
<td>Config to use for <xref href="OdinNative.Odin.Media.MediaStream" data-throw-if-not-resolved="false"></xref> on new medias</td>
</tr>
<tr>
<td>apmConfig</td>
<td>Config to use for <xref href="OdinNative.Core.OdinRoomConfig" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>registerEventCallback</td>
<td>true for <xref href="OdinNative.Odin.Room.Room.RegisterEventCallback(OdinEventCallback)" data-throw-if-not-resolved="false"></xref> or false for no room events</td>
</tr>
</tbody>
</table>
`}),e.add({id:2593,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomcollection/",title:"RoomCollection",section:"ODIN Documentation",description:" Intern room dictionary ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomCollection : IReadOnlyCollection&lt;Room&gt;, IEqualityComparer&lt;Room&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern room dictionary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/this/">Item[String]</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/isremoveonly/">IsRemoveOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/add/">Add</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/contains/">Contains</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/copyto/">CopyTo</a></td>
<td>Copies rooms of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/equals/">Equals</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/remove/">Remove</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/leave/">Leave</a></td>
<td>Get the room and leave</td>
</tr>
</tbody>
</table>
`}),e.add({id:2594,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/",title:"RoomCollection",section:"ODIN Documentation",description:" Intern room dictionary ",content:`<pre><code class="language-C#">public class RoomCollection : IReadOnlyCollection&lt;Room&gt;, IEnumerable&lt;Room&gt;, IEnumerable, IEqualityComparer&lt;Room&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern room dictionary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/this/">Item[String]</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/isremoveonly/">IsRemoveOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/add/">Add</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/contains/">Contains</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/copyto/">CopyTo</a></td>
<td>Copies rooms of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/equals/">Equals</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/remove/">Remove</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/leave/">Leave</a></td>
<td>Get the room and leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2595,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomcollection/",title:"RoomCollection",section:"ODIN Documentation",description:" Intern room dictionary ",content:`<pre><code class="language-C#">public class RoomCollection : IReadOnlyCollection&lt;Room&gt;, IEqualityComparer&lt;Room&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern room dictionary</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/this/">Item[String]</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/count/">Count</a></td>
<td>Int32</td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/isremoveonly/">IsRemoveOnly</a></td>
<td>Boolean</td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/add/">Add</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/contains/">Contains</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/copyto/">CopyTo</a></td>
<td>Copies rooms of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/equals/">Equals</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/remove/">Remove</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/leave/">Leave</a></td>
<td>Get the room and leave</td>
</tr>
</tbody>
</table>
`}),e.add({id:2596,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/",title:"RoomCollection",section:"ODIN Documentation",description:" Intern room dictionary ",content:`<pre><code class="language-C#">public class RoomCollection : IReadOnlyCollection&lt;Room&gt;, IEnumerable&lt;Room&gt;, IEnumerable, IEqualityComparer&lt;Room&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern room dictionary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/constructor_0/">RoomCollection()</a></td>
<td>Intern room dictionary</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/this/">Item[String]</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/count/">Count</a></td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/isremoveonly/">IsRemoveOnly</a></td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/add/">Add</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/contains/">Contains</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/copyto/">CopyTo</a></td>
<td>Copies rooms of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/equals/">Equals</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/remove/">Remove</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/leave/">Leave</a></td>
<td>Get the room and leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2597,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/",title:"RoomCollection",section:"ODIN Documentation",description:" Intern room dictionary ",content:`<pre><code class="language-C#">public class RoomCollection : IReadOnlyCollection&lt;Room&gt;, IEqualityComparer&lt;Room&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern room dictionary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/constructor_0/">RoomCollection()</a></td>
<td>Intern room dictionary</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/this/">Item[String]</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/this/">Item[UInt64]</a></td>
<td>Get room by Id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/count/">Count</a></td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/isremoveonly/">IsRemoveOnly</a></td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/add/">Add</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/contains/">Contains</a></td>
<td>Determines whether the room is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/equals/">Equals</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/remove/">Remove</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/close/">Close</a></td>
<td>Close a room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2598,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/",title:"RoomCollection",section:"ODIN Documentation",description:" Intern room dictionary ",content:`<pre><code class="language-C#">public class RoomCollection : IReadOnlyCollection&lt;Room&gt;, IEnumerable&lt;Room&gt;, IEnumerable, IEqualityComparer&lt;Room&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Intern room dictionary</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/constructor_0/">RoomCollection()</a></td>
<td>Intern room dictionary</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/this/">Item[String]</a></td>
<td>Try to get room by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/count/">Count</a></td>
<td>Count of rooms in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/isremoveonly/">IsRemoveOnly</a></td>
<td>Indicates whether elements can be removed from the collection</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/add/">Add</a></td>
<td>Add a room to the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/clear/">Clear</a></td>
<td>Free and empty the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/contains/">Contains</a></td>
<td>Determines whether the room by name/token is in the collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/copyto/">CopyTo</a></td>
<td>Copies rooms of the collection to an array</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/equals/">Equals</a></td>
<td>Compares two rooms by name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/getenumerator/">GetEnumerator</a></td>
<td>Get enumerator for iteration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/gethashcode/">GetHashCode</a></td>
<td>Default GetHashCode</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/remove/">Remove</a></td>
<td>Removes the room from this collection</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/leave/">Leave</a></td>
<td>Get the room and leave</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/system.collections.ienumerable.getenumerator/">System.Collections.IEnumerable.GetEnumerator</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2599,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/constructor_0/",title:"RoomCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection()
</code></pre>
<p>Intern room dictionary</p>
`}),e.add({id:2600,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomcollection/constructor_0/",title:"RoomCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection()
</code></pre>
<p>Intern room dictionary</p>
`}),e.add({id:2601,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/constructor_0/",title:"RoomCollection()",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection()
</code></pre>
<p>Intern room dictionary</p>
`}),e.add({id:2602,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/",title:"RoomConfig",section:"ODIN Documentation",description:" A set of values that are used when creating Rooms ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomConfig
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when creating Rooms</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Room associated AccessKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>Room associated Token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/name/">Name</a></td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/token/">Token</a></td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/server/">Server</a></td>
<td>String</td>
<td>Room associated endpoint</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/haseventcallbacks/">HasEventCallbacks</a></td>
<td>Boolean</td>
<td>true if Room where set and registered in ODIN ffi</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/apmconfig/">ApmConfig</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Configuration for NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/playbackmediaconfig/">PlaybackMediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Configuration for Media on new medias</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:2603,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/",title:"RoomConfig",section:"ODIN Documentation",description:" A set of values that are used when creating Rooms ",content:`<pre><code class="language-C#">public class RoomConfig
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when creating Rooms</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Room associated AccessKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>Room associated Token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/name/">Name</a></td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/token/">Token</a></td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/server/">Server</a></td>
<td>String</td>
<td>Room associated endpoint</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/haseventcallbacks/">HasEventCallbacks</a></td>
<td>Boolean</td>
<td>true if Room where set and registered in ODIN ffi</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/apmconfig/">ApmConfig</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Configuration for NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/playbackmediaconfig/">PlaybackMediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Configuration for Media on new medias</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:2604,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/",title:"RoomConfig",section:"ODIN Documentation",description:" A set of values that are used when creating Rooms ",content:`<pre><code class="language-C#">public class RoomConfig
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when creating Rooms</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/accesskey/">AccessKey</a></td>
<td>String</td>
<td>Room associated AccessKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/tokenlifetime/">TokenLifetime</a></td>
<td>UInt64</td>
<td>Room associated Token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/name/">Name</a></td>
<td>String</td>
<td>Room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/token/">Token</a></td>
<td>String</td>
<td>Room token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/server/">Server</a></td>
<td>String</td>
<td>Room associated endpoint</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/haseventcallbacks/">HasEventCallbacks</a></td>
<td>Boolean</td>
<td>true if Room where set and registered in ODIN ffi</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/apmconfig/">ApmConfig</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>Configuration for NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/playbackmediaconfig/">PlaybackMediaConfig</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinmediaconfig/">OdinMediaConfig</a></td>
<td>Configuration for Media on new medias</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:2605,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/",title:"RoomConfig",section:"ODIN Documentation",description:" A set of values that are used when creating Rooms ",content:`<pre><code class="language-C#">public class RoomConfig
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when creating Rooms</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/accesskey/">AccessKey</a></td>
<td>Room associated AccessKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/tokenlifetime/">TokenLifetime</a></td>
<td>Room associated Token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/name/">Name</a></td>
<td>Room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/token/">Token</a></td>
<td>Room token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/server/">Server</a></td>
<td>Room associated endpoint</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/haseventcallbacks/">HasEventCallbacks</a></td>
<td>true if Room where set and registered in ODIN ffi</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/apmconfig/">ApmConfig</a></td>
<td>Configuration for NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/playbackmediaconfig/">PlaybackMediaConfig</a></td>
<td>Configuration for Media on new medias</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:2606,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/",title:"RoomConfig",section:"ODIN Documentation",description:" A set of values that are used when creating Rooms ",content:`<pre><code class="language-C#">public class RoomConfig
</code></pre>
<h1 id="heading"></h1>
<p>A set of values that are used when creating Rooms</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/accesskey/">AccessKey</a></td>
<td>Room associated AccessKey</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/tokenlifetime/">TokenLifetime</a></td>
<td>Room associated Token lifetime</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/name/">Name</a></td>
<td>Room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/token/">Token</a></td>
<td>Room token</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/server/">Server</a></td>
<td>Room associated endpoint</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/haseventcallbacks/">HasEventCallbacks</a></td>
<td>true if Room where set and registered in ODIN ffi</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/apmconfig/">ApmConfig</a></td>
<td>Configuration for NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/playbackmediaconfig/">PlaybackMediaConfig</a></td>
<td>Configuration for Media on new medias</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomconfig/tostring/">ToString</a></td>
<td>Debug</td>
</tr>
</tbody>
</table>
`}),e.add({id:2607,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roomconnectionstatechangedeventhandler/",title:"RoomConnectionStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2608,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roomconnectionstatechangedeventhandler/",title:"RoomConnectionStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2609,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roomconnectionstatechangedeventhandler/",title:"RoomConnectionStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2610,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roomconnectionstatechangedeventhandler/",title:"RoomConnectionStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2611,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roomconnectionstatechangedeventhandler/",title:"RoomConnectionStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2612,href:"https://www.4players.io/odin/sdk/unity/delegates/roomconnectionstatechangedeventhandler/",title:"RoomConnectionStateChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomConnectionStateChangedEventHandler(object sender, ConnectionStateChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/connectionstatechangedeventargs/">ConnectionStateChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2613,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/roomid/",title:"roomId",section:"ODIN Documentation",description:"The ID of the room that was joined. It's the same as the room id that was passed to join.",content:`<pre><code class="language-C#">public roomId: string
</code></pre>
<p>The ID of the room that was joined. It&rsquo;s the same as the room id that was passed to join.</p>
`}),e.add({id:2614,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinlefteventpayload/roomid/",title:"roomId",section:"ODIN Documentation",description:"The ID of the room that was left. It's the same as the room id that was passed to join.",content:`<pre><code class="language-C#">public roomId: string
</code></pre>
<p>The ID of the room that was left. It&rsquo;s the same as the room id that was passed to join.</p>
`}),e.add({id:2615,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/datagrameventargs/roomid/",title:"RoomId",section:"ODIN Documentation",description:" room id ",content:`<pre><code class="language-C#">public ulong RoomId { get; }
</code></pre>
<p>room id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2616,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/roomid/",title:"RoomId",section:"ODIN Documentation",description:" room id ",content:`<pre><code class="language-C#">public ulong RoomId { get; }
</code></pre>
<p>room id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2617,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomlefteventargs/roomid/",title:"RoomId",section:"ODIN Documentation",description:" room id ",content:`<pre><code class="language-C#">public ulong RoomId
</code></pre>
<p>room id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2618,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpceventargs/roomid/",title:"RoomId",section:"ODIN Documentation",description:" room id ",content:`<pre><code class="language-C#">public ulong RoomId { get; }
</code></pre>
<p>room id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2619,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomjoinedeventargs/",title:"RoomJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoined events when the room was joined successfully ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoinedeventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2620,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomjoinedeventargs/",title:"RoomJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoined events when the room was joined successfully ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoinedeventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2621,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomjoinedeventargs/",title:"RoomJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoined events when the room was joined successfully ",content:`<pre><code class="language-C#">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoinedeventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2622,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomjoinedeventargs/",title:"RoomJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoined events when the room was joined successfully ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoinedeventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2623,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomjoinedeventargs/",title:"RoomJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoined events when the room was joined successfully ",content:`<pre><code class="language-C#">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoinedeventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2624,href:"https://www.4players.io/odin/sdk/unity/classes/roomjoinedeventargs/",title:"RoomJoinedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoined events when the room was joined successfully ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomJoinedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoined events when the room was joined successfully</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoinedeventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2625,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomjoinedproxy/",title:"RoomJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomJoinedProxy : UnityEvent&lt;RoomJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2626,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomjoinedproxy/",title:"RoomJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomJoinedProxy : UnityEvent&lt;RoomJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2627,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomjoinedproxy/",title:"RoomJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomJoinedProxy : UnityEvent&lt;RoomJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2628,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomjoinedproxy/",title:"RoomJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomJoinedProxy : UnityEvent&lt;RoomJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2629,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomjoinedproxy/",title:"RoomJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomJoinedProxy : UnityEvent&lt;object, RoomJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2630,href:"https://www.4players.io/odin/sdk/unity/classes/roomjoinedproxy/",title:"RoomJoinedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomJoinedProxy : UnityEvent&lt;RoomJoinedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2631,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomjoineventargs/",title:"RoomJoinEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoin events right before the room is joined ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomJoinEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomjoineventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2632,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomjoineventargs/",title:"RoomJoinEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoin events right before the room is joined ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomJoinEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomjoineventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2633,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomjoineventargs/",title:"RoomJoinEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoin events right before the room is joined ",content:`<pre><code class="language-C#">public class RoomJoinEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomjoineventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2634,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomjoineventargs/",title:"RoomJoinEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoin events right before the room is joined ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomJoinEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomjoineventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2635,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomjoineventargs/",title:"RoomJoinEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoin events right before the room is joined ",content:`<pre><code class="language-C#">public class RoomJoinEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomjoineventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2636,href:"https://www.4players.io/odin/sdk/unity/classes/roomjoineventargs/",title:"RoomJoinEventArgs",section:"ODIN Documentation",description:" Arguments for RoomJoin events right before the room is joined ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomJoinEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomJoin events right before the room is joined</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomjoineventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2637,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomjoinproxy/",title:"RoomJoinProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomJoinProxy : UnityEvent&lt;RoomJoinEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2638,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomjoinproxy/",title:"RoomJoinProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomJoinProxy : UnityEvent&lt;RoomJoinEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2639,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomjoinproxy/",title:"RoomJoinProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomJoinProxy : UnityEvent&lt;RoomJoinEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2640,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomjoinproxy/",title:"RoomJoinProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomJoinProxy : UnityEvent&lt;RoomJoinEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2641,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomjoinproxy/",title:"RoomJoinProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomJoinProxy : UnityEvent&lt;RoomJoinEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2642,href:"https://www.4players.io/odin/sdk/unity/classes/roomjoinproxy/",title:"RoomJoinProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomJoinProxy : UnityEvent&lt;RoomJoinEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2643,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomleaveeventargs/",title:"RoomLeaveEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeave events right before the room handle is destroyed ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomleaveeventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2644,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomleaveeventargs/",title:"RoomLeaveEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeave events right before the room handle is destroyed ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomleaveeventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2645,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomleaveeventargs/",title:"RoomLeaveEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeave events right before the room handle is destroyed ",content:`<pre><code class="language-C#">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomleaveeventargs/room/">Room</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2646,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomleaveeventargs/",title:"RoomLeaveEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeave events right before the room handle is destroyed ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomleaveeventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2647,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomleaveeventargs/",title:"RoomLeaveEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeave events right before the room handle is destroyed ",content:`<pre><code class="language-C#">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomleaveeventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2648,href:"https://www.4players.io/odin/sdk/unity/classes/roomleaveeventargs/",title:"RoomLeaveEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeave events right before the room handle is destroyed ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomLeaveEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeave events right before the room handle is destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomleaveeventargs/room/">Room</a></td>
<td>room object</td>
</tr>
</tbody>
</table>
`}),e.add({id:2649,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomleaveproxy/",title:"RoomLeaveProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomLeaveProxy : UnityEvent&lt;RoomLeaveEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2650,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomleaveproxy/",title:"RoomLeaveProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomLeaveProxy : UnityEvent&lt;RoomLeaveEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2651,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomleaveproxy/",title:"RoomLeaveProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomLeaveProxy : UnityEvent&lt;RoomLeaveEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2652,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomleaveproxy/",title:"RoomLeaveProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomLeaveProxy : UnityEvent&lt;RoomLeaveEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2653,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomleaveproxy/",title:"RoomLeaveProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomLeaveProxy : UnityEvent&lt;RoomLeaveEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2654,href:"https://www.4players.io/odin/sdk/unity/classes/roomleaveproxy/",title:"RoomLeaveProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomLeaveProxy : UnityEvent&lt;RoomLeaveEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2655,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomlefteventargs/",title:"RoomLeftEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeft events when the room handle was destroyed ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomlefteventargs/roomname/">RoomName</a></td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:2656,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomlefteventargs/",title:"RoomLeftEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeft events when the room handle was destroyed ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomlefteventargs/roomname/">RoomName</a></td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:2657,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomlefteventargs/",title:"RoomLeftEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeft events when the room handle was destroyed ",content:`<pre><code class="language-C#">public class RoomLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomlefteventargs/roomname/">RoomName</a></td>
<td>String</td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:2658,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomlefteventargs/",title:"RoomLeftEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeft events when the room handle was destroyed ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomlefteventargs/roomname/">RoomName</a></td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:2659,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomlefteventargs/",title:"RoomLeftEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeft events when the room handle was destroyed ",content:`<pre><code class="language-C#">public class RoomLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomlefteventargs/roomid/">RoomId</a></td>
<td>room id</td>
</tr>
</tbody>
</table>
`}),e.add({id:2660,href:"https://www.4players.io/odin/sdk/unity/classes/roomlefteventargs/",title:"RoomLeftEventArgs",section:"ODIN Documentation",description:" Arguments for RoomLeft events when the room handle was destroyed ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomLeftEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomLeft events when the room handle was destroyed</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomlefteventargs/roomname/">RoomName</a></td>
<td>room name</td>
</tr>
</tbody>
</table>
`}),e.add({id:2661,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomleftproxy/",title:"RoomLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomLeftProxy : UnityEvent&lt;RoomLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2662,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomleftproxy/",title:"RoomLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomLeftProxy : UnityEvent&lt;RoomLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2663,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomleftproxy/",title:"RoomLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomLeftProxy : UnityEvent&lt;RoomLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2664,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomleftproxy/",title:"RoomLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomLeftProxy : UnityEvent&lt;RoomLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2665,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomleftproxy/",title:"RoomLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">public class RoomLeftProxy : UnityEvent&lt;RoomLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2666,href:"https://www.4players.io/odin/sdk/unity/classes/roomleftproxy/",title:"RoomLeftProxy",section:"ODIN Documentation",description:" This class provides the base functionality for ODIN SDK UnityEvents. A persistent callback that can be saved with the Scene. ",content:`<pre><code class="language-C#">[Serializable]
public class RoomLeftProxy : UnityEvent&lt;RoomLeftEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for ODIN SDK UnityEvents.
A persistent callback that can be saved with the Scene.</p>
`}),e.add({id:2667,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roommediaaddedeventhandler/",title:"RoomMediaAddedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2668,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roommediaaddedeventhandler/",title:"RoomMediaAddedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2669,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roommediaaddedeventhandler/",title:"RoomMediaAddedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2670,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roommediaaddedeventhandler/",title:"RoomMediaAddedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2671,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roommediaaddedeventhandler/",title:"RoomMediaAddedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2672,href:"https://www.4players.io/odin/sdk/unity/delegates/roommediaaddedeventhandler/",title:"RoomMediaAddedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaAddedEventHandler(object sender, MediaAddedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/mediaaddedeventargs/">MediaAddedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2673,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roommediaremovedeventhandler/",title:"RoomMediaRemovedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2674,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roommediaremovedeventhandler/",title:"RoomMediaRemovedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2675,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roommediaremovedeventhandler/",title:"RoomMediaRemovedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2676,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roommediaremovedeventhandler/",title:"RoomMediaRemovedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2677,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roommediaremovedeventhandler/",title:"RoomMediaRemovedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2678,href:"https://www.4players.io/odin/sdk/unity/delegates/roommediaremovedeventhandler/",title:"RoomMediaRemovedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMediaRemovedEventHandler(object sender, MediaRemovedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/mediaremovedeventargs/">MediaRemovedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2679,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roommessagereceivedeventhandler/",title:"RoomMessageReceivedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2680,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roommessagereceivedeventhandler/",title:"RoomMessageReceivedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2681,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roommessagereceivedeventhandler/",title:"RoomMessageReceivedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2682,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roommessagereceivedeventhandler/",title:"RoomMessageReceivedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2683,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roommessagereceivedeventhandler/",title:"RoomMessageReceivedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2684,href:"https://www.4players.io/odin/sdk/unity/delegates/roommessagereceivedeventhandler/",title:"RoomMessageReceivedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomMessageReceivedEventHandler(object sender, MessageReceivedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/messagereceivedeventargs/">MessageReceivedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2685,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Associated room name of this peer ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>Associated room name of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2686,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string RoomName { get; set; }
</code></pre>
<p>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2687,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomlefteventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string RoomName
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2688,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomuserdatachangedeventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2689,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Associated room name of this peer ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>Associated room name of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2690,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client. ",content:`<pre><code class="language-C#">public string RoomName { get; set; }
</code></pre>
<p>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2691,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomlefteventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2692,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomuserdatachangedeventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2693,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Associated room name of this peer ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>Associated room name of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2694,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client. ",content:`<pre><code class="language-C#">public string RoomName { get; set; }
</code></pre>
<p>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2695,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomlefteventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2696,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomuserdatachangedeventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2697,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Associated room name of this peer ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>Associated room name of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2698,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client. ",content:`<pre><code class="language-C#">public string RoomName { get; set; }
</code></pre>
<p>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2699,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomlefteventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2700,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2701,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2702,href:"https://www.4players.io/odin/sdk/unity/classes/peer/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Associated room name of this peer ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>Associated room name of this peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2703,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/roomname/",title:"RoomName",section:"ODIN Documentation",description:" Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client. ",content:`<pre><code class="language-C#">public string RoomName { get; set; }
</code></pre>
<p>Room name for this playback. Change this value to change the PlaybackStream by Rooms from the Client.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invalid values will cause errors.</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2704,href:"https://www.4players.io/odin/sdk/unity/classes/roomlefteventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2705,href:"https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs/roomname/",title:"RoomName",section:"ODIN Documentation",description:" room name ",content:`<pre><code class="language-C#">public string RoomName { get; }
</code></pre>
<p>room name</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2706,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roompeerjoinedeventhandler/",title:"RoomPeerJoinedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2707,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roompeerjoinedeventhandler/",title:"RoomPeerJoinedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2708,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roompeerjoinedeventhandler/",title:"RoomPeerJoinedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2709,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roompeerjoinedeventhandler/",title:"RoomPeerJoinedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2710,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roompeerjoinedeventhandler/",title:"RoomPeerJoinedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2711,href:"https://www.4players.io/odin/sdk/unity/delegates/roompeerjoinedeventhandler/",title:"RoomPeerJoinedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerJoinedEventHandler(object sender, PeerJoinedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/peerjoinedeventargs/">PeerJoinedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2712,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roompeerlefteventhandler/",title:"RoomPeerLeftEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2713,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roompeerlefteventhandler/",title:"RoomPeerLeftEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2714,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roompeerlefteventhandler/",title:"RoomPeerLeftEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2715,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roompeerlefteventhandler/",title:"RoomPeerLeftEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2716,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roompeerlefteventhandler/",title:"RoomPeerLeftEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2717,href:"https://www.4players.io/odin/sdk/unity/delegates/roompeerlefteventhandler/",title:"RoomPeerLeftEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerLeftEventHandler(object sender, PeerLeftEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/peerlefteventargs/">PeerLeftEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2718,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roompeeruserdatachangedeventhandler/",title:"RoomPeerUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2719,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roompeeruserdatachangedeventhandler/",title:"RoomPeerUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2720,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roompeeruserdatachangedeventhandler/",title:"RoomPeerUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2721,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roompeeruserdatachangedeventhandler/",title:"RoomPeerUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2722,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roompeeruserdatachangedeventhandler/",title:"RoomPeerUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2723,href:"https://www.4players.io/odin/sdk/unity/delegates/roompeeruserdatachangedeventhandler/",title:"RoomPeerUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomPeerUserDataChangedEventHandler(object sender, PeerUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/peeruserdatachangedeventargs/">PeerUserDataChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2724,href:"https://www.4players.io/odin/sdk/web/classes/odinclient/rooms/",title:"rooms",section:"ODIN Documentation",description:"An array of available `OdinRoom` instances.",content:`<pre><code class="language-C#">OdinRoom[]
</code></pre>
<p>An array of available <code>OdinRoom</code> instances.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/classes/odinroom/">OdinRoom[]</a></p>
`}),e.add({id:2725,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/rooms/",title:"Rooms",section:"ODIN Documentation",description:" A collection of all ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<p>A collection of all Room</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2726,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/rooms/",title:"Rooms",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2727,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/rooms/",title:"Rooms",section:"ODIN Documentation",description:" A collection of all ",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<p>A collection of all Room</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2728,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/rooms/",title:"Rooms",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2729,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/rooms/",title:"Rooms",section:"ODIN Documentation",description:" A collection of all ",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<p>A collection of all Room</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2730,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/rooms/",title:"Rooms",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2731,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/rooms/",title:"Rooms",section:"ODIN Documentation",description:" A collection of all ",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<p>A collection of all Room</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2732,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/rooms/",title:"Rooms",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2733,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/rooms/",title:"Rooms",section:"ODIN Documentation",description:" A collection of all ",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<p>A collection of all Room</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2734,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/rooms/",title:"Rooms",section:"ODIN Documentation",description:" A collection of all ",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<p>A collection of all Room</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2735,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/rooms/",title:"Rooms",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public RoomCollection Rooms { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomcollection/">RoomCollection</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2736,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/roomssetpositionscale/",title:"RoomsSetPositionScale",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void RoomsSetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2737,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/roomssetpositionscale/",title:"RoomsSetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsSetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2738,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/roomssetpositionscale/",title:"RoomsSetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsSetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2739,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/roomssetpositionscale/",title:"RoomsSetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsSetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2740,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/roomssetpositionscale/",title:"RoomsSetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsSetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2741,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/roomsupdateposition/",title:"RoomsUpdatePosition",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void RoomsUpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:2742,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/roomsupdateposition/",title:"RoomsUpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsUpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:2743,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/roomsupdateposition/",title:"RoomsUpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsUpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:2744,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/roomsupdateposition/",title:"RoomsUpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsUpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:2745,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/roomsupdateposition/",title:"RoomsUpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void RoomsUpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in each room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:2746,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool RoomUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2747,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool RoomUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2748,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool RoomUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2749,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RoomUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2750,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool RoomUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2751,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RoomUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2752,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool RoomUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2753,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RoomUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2754,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:" Idicates whether the event is enabled by default ",content:`<pre><code class="language-C#">public static bool RoomUpdatedEvent
</code></pre>
<p>Idicates whether the event is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2755,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/roomupdatedevent/",title:"RoomUpdatedEvent",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool RoomUpdatedEvent
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2756,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/roomuserdata/",title:"roomUserData",section:"ODIN Documentation",description:"The current user data of the room",content:`<pre><code class="language-C#">public roomUserData: undefined | Uint8Array
</code></pre>
<p>The current user data of the room</p>
`}),e.add({id:2757,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/roomuserdata/",title:"RoomUserData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public UserData RoomUserData { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2758,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/roomuserdata/",title:"RoomUserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays on Room level ",content:`<pre><code class="language-C#">public UserData RoomUserData { get; }
</code></pre>
<p>Odin UserData helper for marshal byte arrays on Room level</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2759,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/roomuserdata/",title:"RoomUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData RoomUserData { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2760,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/roomuserdata/",title:"RoomUserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays on Room level ",content:`<pre><code class="language-C#">public UserData RoomUserData { get; }
</code></pre>
<p>Odin UserData helper for marshal byte arrays on Room level</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2761,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/roomuserdata/",title:"RoomUserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays on Room level ",content:`<pre><code class="language-C#">public IUserData RoomUserData { get; }
</code></pre>
<p>Odin UserData helper for marshal byte arrays on Room level</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2762,href:"https://www.4players.io/odin/sdk/unity/classes/room/roomuserdata/",title:"RoomUserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays on Room level ",content:`<pre><code class="language-C#">public UserData RoomUserData { get; }
</code></pre>
<p>Odin UserData helper for marshal byte arrays on Room level</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2763,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/roomuserdatachanged/",title:"RoomUserDataChanged",section:"ODIN Documentation",description:"Fired when the user data of the room changed.",content:`<pre><code class="language-C#">public RoomUserDataChanged: OdinRoomUserDataChangedEvent
</code></pre>
<p>Fired when the user data of the room changed.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinroomuserdatachangedevent/">OdinRoomUserDataChangedEvent</a></p>
`}),e.add({id:2764,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomuserdatachangedeventargs/",title:"RoomUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomUserDataChanged events in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomuserdatachangedeventargs/roomname/">RoomName</a></td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/roomuserdatachangedeventargs/data/">Data</a></td>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2765,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomuserdatachangedeventargs/",title:"RoomUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomUserDataChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomuserdatachangedeventargs/roomname/">RoomName</a></td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/roomuserdatachangedeventargs/data/">Data</a></td>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2766,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomuserdatachangedeventargs/",title:"RoomUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomUserDataChanged events in the current room ",content:`<pre><code class="language-C#">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomuserdatachangedeventargs/roomname/">RoomName</a></td>
<td>String</td>
<td>room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/roomuserdatachangedeventargs/data/">Data</a></td>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2767,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/",title:"RoomUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomUserDataChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/roomname/">RoomName</a></td>
<td>room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/data/">Data</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2768,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/",title:"RoomUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomUserDataChanged events in the current room ",content:`<pre><code class="language-C#">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/roomname/">RoomName</a></td>
<td>room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/data/">Data</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2769,href:"https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedeventargs/",title:"RoomUserDataChangedEventArgs",section:"ODIN Documentation",description:" Arguments for RoomUserDataChanged events in the current room ",content:`<p>Inherits from:</p>
<pre><code class="language-C#">public class RoomUserDataChangedEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for RoomUserDataChanged events in the current room</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/roomuserdatachangedeventargs/roomname/">RoomName</a></td>
<td>room name</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/roomuserdatachangedeventargs/data/">Data</a></td>
<td>room userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:2770,href:"https://www.4players.io/odin/sdk/unity/1.1.0/delegates/roomuserdatachangedeventhandler/",title:"RoomUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2771,href:"https://www.4players.io/odin/sdk/unity/1.5.8/delegates/roomuserdatachangedeventhandler/",title:"RoomUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2772,href:"https://www.4players.io/odin/sdk/unity/1.6.0/delegates/roomuserdatachangedeventhandler/",title:"RoomUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
`}),e.add({id:2773,href:"https://www.4players.io/odin/sdk/unity/1.6.6/delegates/roomuserdatachangedeventhandler/",title:"RoomUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room. Changing a Room&apos;s UserData is only possible via request to Odin server API, but not supported inside the client SDK. ",content:`<pre><code class="language-C#">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room. Changing a Room's UserData is only possible via request to Odin server API,
but not supported inside the client SDK.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2774,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/roomuserdatachangedeventhandler/",title:"RoomUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2775,href:"https://www.4players.io/odin/sdk/unity/delegates/roomuserdatachangedeventhandler/",title:"RoomUserDataChangedEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room. Changing a Room&apos;s UserData is only possible via request to Odin server API, but not supported inside the client SDK. ",content:`<pre><code class="language-C#">public delegate void RoomUserDataChangedEventHandler(object sender, RoomUserDataChangedEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room. Changing a Room's UserData is only possible via request to Odin server API,
but not supported inside the client SDK.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/classes/roomuserdatachangedeventargs/">RoomUserDataChangedEventArgs</a></td>
<td>Arguments events in the current room</td>
</tr>
</tbody>
</table>
`}),e.add({id:2776,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomuserdatachangedproxy/",title:"RoomUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class RoomUserDataChangedProxy : UnityEvent&lt;object, RoomUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2777,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomuserdatachangedproxy/",title:"RoomUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class RoomUserDataChangedProxy : UnityEvent&lt;object, RoomUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2778,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomuserdatachangedproxy/",title:"RoomUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class RoomUserDataChangedProxy : UnityEvent&lt;object, RoomUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2779,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomuserdatachangedproxy/",title:"RoomUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class RoomUserDataChangedProxy : UnityEvent&lt;object, RoomUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2780,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/roomuserdatachangedproxy/",title:"RoomUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class RoomUserDataChangedProxy : UnityEvent&lt;object, RoomUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2781,href:"https://www.4players.io/odin/sdk/unity/classes/roomuserdatachangedproxy/",title:"RoomUserDataChangedProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class RoomUserDataChangedProxy : UnityEvent&lt;object, RoomUserDataChangedEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2782,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpceventargs/rpc/",title:"Rpc",section:"ODIN Documentation",description:" raw Msgpack rpc data ",content:`<pre><code class="language-C#">public byte[] Rpc { get; }
</code></pre>
<p>raw Msgpack rpc data</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2783,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/rpcackactive/",title:"RpcAckActive",section:"ODIN Documentation",description:" Toggle message type for Room.SendRpc true is request and false is notification. Currently calls to &quot;UpdatePeer&quot; and &quot;SetPeerPosition&quot; needs to be requests! ",content:`<pre><code class="language-C#">public bool RpcAckActive { get; set; }
</code></pre>
<p>Toggle message type for <code>Room.SendRpc</code>
true is request and false is notification.
<remarks>Currently calls to &quot;UpdatePeer&quot; and &quot;SetPeerPosition&quot; needs to be requests!</remarks></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2784,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpceventargs/",title:"RpcEventArgs",section:"ODIN Documentation",description:" Arguments for rpc events ",content:`<pre><code class="language-C#">public class RpcEventArgs : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Arguments for rpc events</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpceventargs/roomid/">RoomId</a></td>
<td>room id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpceventargs/rpc/">Rpc</a></td>
<td>raw Msgpack rpc data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpceventargs/userdata/">Userdata</a></td>
<td>unused</td>
</tr>
</tbody>
</table>
`}),e.add({id:2785,href:"https://www.4players.io/odin/sdk/unity/2.0.0/delegates/rpceventhandler/",title:"RpcEventHandler",section:"ODIN Documentation",description:" EventHandler in the current room ",content:`<pre><code class="language-C#">public delegate void RpcEventHandler(object sender, RpcEventArgs e);
</code></pre>
<h1 id="heading"></h1>
<p>EventHandler in the current room</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>sender</td>
<td>Object</td>
<td>sender of type <xref href="OdinNative.Odin.Room.Room" data-throw-if-not-resolved="false"></xref></td>
</tr>
<tr>
<td>e</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpceventargs/">RpcEventArgs</a></td>
<td>Arguments events</td>
</tr>
</tbody>
</table>
`}),e.add({id:2786,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcformat/",title:"RpcFormat",section:"ODIN Documentation",description:" Msgpack RPC spec https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md ",content:`<pre><code class="language-C#">public static class RpcFormat
</code></pre>
<h1 id="heading"></h1>
<p>Msgpack RPC spec <a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md"><a href="https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md">https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md</a></a></p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcformat/typeindex/">TypeIndex</a></td>
<td>PositiveFixInt field (type)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2787,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcproxy/",title:"RpcProxy",section:"ODIN Documentation",description:" This class provides the base functionality for UnityEvents based . A persistent callback that can be saved with the Scene. Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class RpcProxy : UnityEvent&lt;object, RpcEventArgs&gt;
</code></pre>
<h1 id="heading"></h1>
<p>This class provides the base functionality for UnityEvents based Room.
A persistent callback that can be saved with the Scene.
Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:2788,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcresult/",title:"RpcResult",section:"ODIN Documentation",description:" Result of send rpc responses msgid, (method, params, error, result) ",content:`<pre><code class="language-C#">public class RpcResult : EventArgs
</code></pre>
<h1 id="heading"></h1>
<p>Result of send rpc responses</p>
<pre><code>msgid, (method, params, error, result)</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcresult/id/">Id</a></td>
<td>msgid</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcresult/name/">Name</a></td>
<td>method</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcresult/error/">Error</a></td>
<td>error</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/rpcresult/value/">Value</a></td>
<td>result</td>
</tr>
</tbody>
</table>
`}),e.add({id:2789,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/rpctablethunk/",title:"RpcTableThunk",section:"ODIN Documentation",description:" Msgpack results to RPC requests ",content:`<pre><code class="language-C#">public ConcurrentDictionary&lt;uint, TaskCompletionSource&lt;RpcResult&gt;&gt; RpcTableThunk { get; }
</code></pre>
<p>Msgpack results to RPC requests</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ConcurrentDictionary&lt;UInt32,TaskCompletionSource&lt;RpcResult&gt;&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2790,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/rpcwriter/",title:"RpcWriter",section:"ODIN Documentation",description:" Msgpack writer for RPC ",content:`<pre><code class="language-C#">public IMsgPackWriter RpcWriter { get; set; }
</code></pre>
<p>Msgpack writer for RPC</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/">IMsgPackWriter</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2791,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/rtt/",title:"rtt",section:"ODIN Documentation",description:" Current best estimate of the connection latency (round-trip-time) in milliseconds ",content:`<pre><code class="language-C#">public float rtt
</code></pre>
<p>Current best estimate of the connection latency (round-trip-time) in milliseconds</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2792,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/rtt/",title:"rtt",section:"ODIN Documentation",description:" Current best estimate of the connection latency (round-trip-time) in milliseconds ",content:`<pre><code class="language-C#">public float rtt
</code></pre>
<p>Current best estimate of the connection latency (round-trip-time) in milliseconds</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2793,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/rtt/",title:"rtt",section:"ODIN Documentation",description:" Current best estimate of the connection latency (round-trip-time) in milliseconds ",content:`<pre><code class="language-C#">public float rtt
</code></pre>
<p>Current best estimate of the connection latency (round-trip-time) in milliseconds</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2794,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/rtt_milliseconds/",title:"rtt_milliseconds",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt32 rtt_milliseconds
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2795,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/samplerate/",title:"Samplerate",section:"ODIN Documentation",description:" Output decoder samplerate ",content:`<pre><code class="language-C#">public uint Samplerate { get; }
</code></pre>
<p>Output decoder samplerate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2796,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/samplerate/",title:"Samplerate",section:"ODIN Documentation",description:" Output samplerate ",content:`<pre><code class="language-C#">public uint Samplerate { get; }
</code></pre>
<p>Output samplerate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2797,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/samplerate/",title:"Samplerate",section:"ODIN Documentation",description:" Input samplerate ",content:`<pre><code class="language-C#">public uint Samplerate { get; }
</code></pre>
<p>Input samplerate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2798,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/samplerate/",title:"Samplerate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int Samplerate
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2799,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/samplerate/",title:"Samplerate",section:"ODIN Documentation",description:" Unity samplerate ",content:`<pre><code class="language-C#">public uint Samplerate { get; set; }
</code></pre>
<p>Unity samplerate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2800,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/samplerate/",title:"Samplerate",section:"ODIN Documentation",description:" Room default samplerate ",content:`<pre><code class="language-C#">public readonly uint Samplerate
</code></pre>
<p>Room default samplerate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2801,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The recording ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The recording Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value by <a href="/odin/sdk/unity/1.1.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false.
For <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a>
creation of <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> if <a href="/odin/sdk/unity/1.1.0/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2802,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinmediaconfig/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The number audio samples carried per second in Hz ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaSampleRate SampleRate { get; set; }
</code></pre>
<p>The number audio samples carried per second in Hz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2803,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/playbackcomponent/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The playback ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The playback Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value is ignored on
<see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a>
creation if <a href="/odin/sdk/unity/1.1.0/classes/playbackcomponent/overridesamplerate/">OverrideSampleRate</a> is false</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2804,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The recording ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The recording Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value by <a href="/odin/sdk/unity/1.5.8/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false.
For <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a>
creation of <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> if <a href="/odin/sdk/unity/1.5.8/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2805,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinmediaconfig/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The number audio samples carried per second in Hz ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate { get; set; }
</code></pre>
<p>The number audio samples carried per second in Hz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2806,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/playbackcomponent/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The playback ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The playback Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value is ignored on
<see cref="!:UnityEngine.AudioClip"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a>
creation if OverrideSampleRate is false</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2807,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The recording ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The recording Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value by <a href="/odin/sdk/unity/1.6.0/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false.
For <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a>
creation of <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> if <a href="/odin/sdk/unity/1.6.0/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2808,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinmediaconfig/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The number audio samples carried per second in Hz ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate { get; set; }
</code></pre>
<p>The number audio samples carried per second in Hz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2809,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/playbackcomponent/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The playback ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The playback Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value is ignored on
<see cref="!:UnityEngine.AudioClip"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a>
creation if OverrideSampleRate is false</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2810,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The recording ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The recording Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value by OdinEditorConfig on false.
For <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a>
creation of <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> if MicrophoneReader</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2811,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinmediaconfig/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The number audio samples carried per second in Hz ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate { get; set; }
</code></pre>
<p>The number audio samples carried per second in Hz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2812,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The playback ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The playback Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value is ignored on
<see cref="!:UnityEngine.AudioClip"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a>
creation if OverrideSampleRate is false</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2813,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The recording ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The recording Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value by <a href="/odin/sdk/unity/classes/odineditorconfig/devicesamplerate/">DeviceSampleRate</a> on false.
For <see cref="!:UnityEngine.Microphone.Start"></see> <a href="https://docs.unity3d.com/ScriptReference/Microphone.Start.html">(Microphone.Start)</a>
creation of <see cref="!:UnityEngine.AudioClip"></see> <a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a> if <a href="/odin/sdk/unity/classes/microphonereader/overridesamplerate/">OverrideSampleRate</a></p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2814,href:"https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The number audio samples carried per second in Hz ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate { get; set; }
</code></pre>
<p>The number audio samples carried per second in Hz</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2815,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/samplerate/",title:"SampleRate",section:"ODIN Documentation",description:" The playback ",content:`<pre><code class="language-C#">public MediaSampleRate SampleRate
</code></pre>
<p>The playback Core</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Set value is ignored on
<see cref="!:UnityEngine.AudioClip"></see>
<a href="https://docs.unity3d.com/ScriptReference/AudioClip.html">(AudioClip)</a>
creation if OverrideSampleRate is false</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediasamplerate/">MediaSampleRate</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2816,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiodata/samples/",title:"samples",section:"ODIN Documentation",description:" float[] ",content:`<pre><code class="language-C#">public IntPtr samples
</code></pre>
<p><code>float[]</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2817,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/samples/",title:"samples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public readonly IntPtr samples
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2818,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/samples/",title:"samples",section:"ODIN Documentation",description:" float[] ",content:`<pre><code class="language-C#">public IntPtr samples
</code></pre>
<p><code>float[]</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2819,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiodata/samples_count/",title:"samples_count",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt32 samples_count
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2820,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincallbackaudiodata/samples_count/",title:"samples_count",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public readonly UInt32 samples_count
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2821,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/samples_count/",title:"samples_count",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UInt32 samples_count
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2822,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/samples16/",title:"samples16",section:"ODIN Documentation",description:"The audio data received from the peer as 16-bit PCM samples ranging from -32768 to 32767 as a byte array. Use `const samplesArray = new Int16Array(samples16.buffer)` to get an actual array",content:`<pre><code class="language-C#">public samples16: Uint8Array
</code></pre>
<p>The audio data received from the peer as 16-bit PCM samples ranging from -32768 to 32767 as a byte array.
Use <code>const samplesArray = new Int16Array(samples16.buffer)</code> to get an actual array</p>
`}),e.add({id:2823,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinaudiodatareceivedeventpayload/samples32/",title:"samples32",section:"ODIN Documentation",description:"The audio data received from the peer as 32-bit PCM samples ranging from -1 to 1. Use `const floats = new Float32Array(samples32.buffer)` to get an actual array",content:`<pre><code class="language-C#">public samples32: Uint8Array
</code></pre>
<p>The audio data received from the peer as 32-bit PCM samples ranging from -1 to 1.
Use <code>const floats = new Float32Array(samples32.buffer)</code> to get an actual array</p>
`}),e.add({id:2824,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/samplescount/",title:"SamplesCount",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public uint SamplesCount { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2825,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumeboostcomponent/scale/",title:"Scale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float Scale
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2826,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/self/",title:"Self",section:"ODIN Documentation",description:" Client Peer ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public Peer Self { get; }
</code></pre>
<p>Client Peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2827,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/self/",title:"Self",section:"ODIN Documentation",description:" Client Peer ",content:`<pre><code class="language-C#">public Peer Self { get; }
</code></pre>
<p>Client Peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2828,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/self/",title:"Self",section:"ODIN Documentation",description:" Client Peer ",content:`<pre><code class="language-C#">public Peer Self { get; }
</code></pre>
<p>Client Peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2829,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/self/",title:"Self",section:"ODIN Documentation",description:" Client Peer ",content:`<pre><code class="language-C#">public Peer Self { get; }
</code></pre>
<p>Client Peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2830,href:"https://www.4players.io/odin/sdk/unity/classes/room/self/",title:"Self",section:"ODIN Documentation",description:" Client Peer ",content:`<pre><code class="language-C#">public Peer Self { get; }
</code></pre>
<p>Client Peer</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/peer/">Peer</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2831,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/sendaudio/",title:"SendAudio",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void SendAudio(float[] samples, bool isSilent = false)
public virtual bool SendAudio(float[] samples, ushort mediaId, bool isSilent = false)
public virtual bool SendAudio(float[] samples, MediaEncoder encoder, bool isSilent = false)
</code></pre>
<p>Push the samples to all Room for pipeline processing and pop the result as datagrams to the server</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td>Audio data</td>
</tr>
<tr>
<td>isSilent</td>
<td>Boolean</td>
<td>flag these samples as silence</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>input media id</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="sendaudiosamples-issilent">SendAudio(samples, isSilent)</h3>
<pre><code class="language-C#">public virtual void SendAudio(float[] samples, bool isSilent = false)
</code></pre>
<p>Push the samples to all Room for pipeline processing and pop the result as datagrams to the server</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td>Audio data</td>
</tr>
<tr>
<td>isSilent</td>
<td>Boolean</td>
<td>flag these samples as silence</td>
</tr>
</tbody>
</table>
<h3 id="sendaudiosamples-mediaid-issilent">SendAudio(samples, mediaId, isSilent)</h3>
<pre><code class="language-C#">public virtual bool SendAudio(float[] samples, ushort mediaId, bool isSilent = false)
</code></pre>
<p>Push the samples to the input media for pipeline processing and pop the result as datagram to the server</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td>Audio data</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>input media id</td>
</tr>
<tr>
<td>isSilent</td>
<td>Boolean</td>
<td>flag these samples as silence</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="sendaudiosamples-encoder-issilent">SendAudio(samples, encoder, isSilent)</h3>
<pre><code class="language-C#">public virtual bool SendAudio(float[] samples, MediaEncoder encoder, bool isSilent = false)
</code></pre>
<p>Push the samples to the input media for pipeline processing and pop the result as datagram to the server</p>
<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td>Audio data</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
<tr>
<td>isSilent</td>
<td>Boolean</td>
<td>flag these samples as silence</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2832,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinmedia/sendaudiodata/",title:"sendAudioData",section:"ODIN Documentation",description:"Sends audio data to the room. The data must be in the format specified when creating the media as a 32-bit float array. Samples need to be between -1 and 1. Audio data needs to be sent in regular intervals, otherwise the audio will be sound interrupted. See the example for more details.",content:`<pre><code class="language-C#">public sendAudioData(data: Float32Array): void
</code></pre>
<p>Sends audio data to the room. The data must be in the format specified when creating the media as a 32-bit float array.
Samples need to be between -1 and 1. Audio data needs to be sent in regular intervals, otherwise the audio will be sound
interrupted. See the example for more details.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Float32Array</td>
<td>A 32-bit float array containing the audio data.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2833,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/sendencoderaudio/",title:"SendEncoderAudio",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool SendEncoderAudio(ushort mediaId)
public virtual bool SendEncoderAudio(MediaEncoder encoder)
</code></pre>
<p>Pop all samples from the input media by id and send them to the server</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>input media id</td>
</tr>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="sendencoderaudiomediaid">SendEncoderAudio(mediaId)</h3>
<pre><code class="language-C#">public virtual bool SendEncoderAudio(ushort mediaId)
</code></pre>
<p>Pop all samples from the input media by id and send them to the server</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>input media id</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
<h3 id="sendencoderaudioencoder">SendEncoderAudio(encoder)</h3>
<pre><code class="language-C#">public virtual bool SendEncoderAudio(MediaEncoder encoder)
</code></pre>
<p>Pop all samples from the input media and send them to the server</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2834,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/senderid/",title:"senderId",section:"ODIN Documentation",description:"The ID of the peer that sent the message (might not be in proximity).",content:`<pre><code class="language-C#">number
</code></pre>
<p>The ID of the peer that sent the message (might not be in proximity).</p>
`}),e.add({id:2835,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/sendmessage/",title:"sendMessage",section:"ODIN Documentation",description:"Sends a message to the room.",content:`<pre><code class="language-C#">public sendMessage(message: Uint8Array, peerIdList?: number[]): void
</code></pre>
<p>Sends a message to the room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>Uint8Array</td>
<td>The message to send as a byte array.</td>
</tr>
<tr>
<td>peerIdList</td>
<td>number[]</td>
<td>The list of peer IDs to send the message to. If this is undefined, the message will be sent to all peers. If the list is defined and empty an error will be thrown.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2836,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/sendmessage/",title:"sendMessage",section:"ODIN Documentation",description:"Sends a message with arbitrary data to this peer.",content:`<pre><code class="language-C#">sendMessage(message: Uint8Array): Promise&lt;void&gt;
</code></pre>
<p>Sends a message with arbitrary data to this peer.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>Uint8Array</td>
<td>Byte array of arbitrary data to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2837,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/sendmessage/",title:"sendMessage",section:"ODIN Documentation",description:"Sends a message with arbitrary data to all peers in the room or optionally to a list of specified peers.",content:`<pre><code class="language-C#">sendMessage(message: Uint8Array, targetPeerIds?: number[]): Promise&lt;void&gt;
</code></pre>
<p>Sends a message with arbitrary data to all peers in the room or optionally to a list of specified peers.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>Uint8Array</td>
<td>Byte array of arbitrary data to send</td>
</tr>
<tr>
<td>targetPeerIds</td>
<td>number[]</td>
<td>Optional list of target peer IDs</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2838,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/sendmessage/",title:"SendMessage",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool SendMessage(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2839,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/sendmessage/",title:"SendMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SendMessage(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2840,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/sendmessage/",title:"SendMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SendMessage(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2841,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/sendmessage/",title:"SendMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SendMessage(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2842,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/sendmessage/",title:"SendMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; SendMessage(string message)
public virtual Task&lt;RpcResult&gt; SendMessage(string message, Encoding encoding)
public virtual Task&lt;RpcResult&gt; SendMessage(byte[] message)
</code></pre>
<p>Send <code>&quot;SendMessage&quot;</code> to the server to broadcast the message with default UTF8 encoding.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>String</td>
<td>UTF8 string</td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td>custom encoding</td>
</tr>
<tr>
<td>message</td>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="sendmessagemessage">SendMessage(message)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; SendMessage(string message)
</code></pre>
<p>Send <code>&quot;SendMessage&quot;</code> to the server to broadcast the message with default UTF8 encoding.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>String</td>
<td>UTF8 string</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="sendmessagemessage-encoding">SendMessage(message, encoding)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; SendMessage(string message, Encoding encoding)
</code></pre>
<p>Send <code>&quot;SendMessage&quot;</code> to the server to broadcast the message.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>String</td>
<td>string</td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="sendmessagemessage-1">SendMessage(message)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; SendMessage(byte[] message)
</code></pre>
<p>Send <code>&quot;SendMessage&quot;</code> to the server to broadcast an arbitrary message.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-3">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>message</td>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
<h4 id="returns-3">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2843,href:"https://www.4players.io/odin/sdk/unity/classes/room/sendmessage/",title:"SendMessage",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SendMessage(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2844,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/sendmessageasync/",title:"SendMessageAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;bool&gt; SendMessageAsync(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2845,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/sendmessageasync/",title:"SendMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; SendMessageAsync(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2846,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/sendmessageasync/",title:"SendMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; SendMessageAsync(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2847,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/sendmessageasync/",title:"SendMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; SendMessageAsync(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2848,href:"https://www.4players.io/odin/sdk/unity/classes/room/sendmessageasync/",title:"SendMessageAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; SendMessageAsync(ulong[] peerIdList, byte[] data)
</code></pre>
<p>Sends arbitrary data to a array of target peerIds.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>associated ids of peers must be in the same room and should not be empty</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>peerIdList</td>
<td>UInt64[]</td>
<td>array of ids(<xref href="OdinNative.Odin.Peer.Peer.Id" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
<tr>
<td>data</td>
<td>Byte[]</td>
<td>arbitrary byte array</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if data was send or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2849,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/sendrpc/",title:"SendRpc",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; SendRpc(string method, Action&lt;IMsgPackWriter&gt; builder)
</code></pre>
<p>Send registered RPCs to the server. (set by Room)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>method</td>
<td>String</td>
<td>RPC method</td>
</tr>
<tr>
<td>builder</td>
<td>Action&lt;IMsgPackWriter&gt;</td>
<td>Msgpack builder</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2850,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/sequence_number/",title:"sequence_number",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Int32 sequence_number
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2851,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramsend/sequence_number/",title:"sequence_number",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Int32 sequence_number
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2852,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/serialize/",title:"Serialize",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static byte[] Serialize(T value)
public static IntPtr Serialize(T value, bool destroy = true)
</code></pre>
<p>Serialize structure to pointer for arbitary data T</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>copy data for Marshal.StructureToPtr</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>&lt;T&gt;</td>
<td>data <see cref="!:T"></see> structure</td>
</tr>
<tr>
<td>destroy</td>
<td>Boolean</td>
<td>free value</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>byte array representation of data structure</td>
</tr>
<tr>
<td>IntPtr</td>
<td>pointer of data structure</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="serializevalue">Serialize(value)</h3>
<pre><code class="language-C#">public static byte[] Serialize(T value)
</code></pre>
<p>Serialize structure to pointer for arbitary data T</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>copy data for Marshal.StructureToPtr</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>&lt;T&gt;</td>
<td>data <see cref="!:T"></see> structure</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>byte array representation of data structure</td>
</tr>
</tbody>
</table>
<h3 id="serializevalue-destroy">Serialize(value, destroy)</h3>
<pre><code class="language-C#">public static IntPtr Serialize(T value, bool destroy = true)
</code></pre>
<p>Serialize structure to pointer for arbitary data T</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>&lt;T&gt;</td>
<td>data <see cref="!:T"></see> structure</td>
</tr>
<tr>
<td>destroy</td>
<td>Boolean</td>
<td>free value</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td>pointer of data structure</td>
</tr>
</tbody>
</table>
`}),e.add({id:2853,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/customeffect/serializeuserdata/",title:"SerializeUserdata",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual byte[] SerializeUserdata(T value)
public virtual IntPtr SerializeUserdata(T value, bool destroy = true)
</code></pre>
<p>Serialize arbitary userdata</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>&lt;T&gt;</td>
<td>byte array data of value <see cref="!:T"></see></td>
</tr>
<tr>
<td>destroy</td>
<td>Boolean</td>
<td>true to call the DestroyStructure(IntPtr, Type) method.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>byte array representation of userdata value</td>
</tr>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="serializeuserdatavalue">SerializeUserdata(value)</h3>
<pre><code class="language-C#">public virtual byte[] SerializeUserdata(T value)
</code></pre>
<p>Serialize arbitary userdata</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>&lt;T&gt;</td>
<td>byte array data of value <see cref="!:T"></see></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>byte array representation of userdata value</td>
</tr>
</tbody>
</table>
<h3 id="serializeuserdatavalue-destroy">SerializeUserdata(value, destroy)</h3>
<pre><code class="language-C#">public virtual IntPtr SerializeUserdata(T value, bool destroy = true)
</code></pre>
<p>Serialize arbitary userdata</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>When the memory block already contains data and <code data-dev-comment-type="paramref" class="paramref">destroy</code> is <code>false</code> can lead to a memory leak</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>&lt;T&gt;</td>
<td>object data of value <see cref="!:T"></see></td>
</tr>
<tr>
<td>destroy</td>
<td>Boolean</td>
<td>true to call the DestroyStructure(IntPtr, Type) method.</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IntPtr</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2854,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/server/",title:"Server",section:"ODIN Documentation",description:" Default server url ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static string Server { get; set; }
</code></pre>
<p>Default server url</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2855,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/server/",title:"Server",section:"ODIN Documentation",description:" Gateway ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string Server
</code></pre>
<p>Gateway</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2856,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/server/",title:"Server",section:"ODIN Documentation",description:" Room associated endpoint ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string Server
</code></pre>
<p>Room associated endpoint</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2857,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/server/",title:"Server",section:"ODIN Documentation",description:" Default server url ",content:`<pre><code class="language-C#">public static string Server { get; set; }
</code></pre>
<p>Default server url</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2858,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/server/",title:"Server",section:"ODIN Documentation",description:" Gateway ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Gateway</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2859,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/server/",title:"Server",section:"ODIN Documentation",description:" Room associated endpoint ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Room associated endpoint</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2860,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/server/",title:"Server",section:"ODIN Documentation",description:" Default server url ",content:`<pre><code class="language-C#">public static string Server { get; set; }
</code></pre>
<p>Default server url</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2861,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/server/",title:"Server",section:"ODIN Documentation",description:" Gateway ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Gateway</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2862,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/server/",title:"Server",section:"ODIN Documentation",description:" Room associated endpoint ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Room associated endpoint</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2863,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/server/",title:"Server",section:"ODIN Documentation",description:" Default server url ",content:`<pre><code class="language-C#">public static string Server { get; set; }
</code></pre>
<p>Default server url</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2864,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/server/",title:"Server",section:"ODIN Documentation",description:" Gateway ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Gateway</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2865,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/server/",title:"Server",section:"ODIN Documentation",description:" Room associated endpoint ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Room associated endpoint</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2866,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/server/",title:"Server",section:"ODIN Documentation",description:" Default server url ",content:`<pre><code class="language-C#">public static string Server { get; set; }
</code></pre>
<p>Default server url</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2867,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/server/",title:"Server",section:"ODIN Documentation",description:" Default server url ",content:`<pre><code class="language-C#">public static string Server { get; set; }
</code></pre>
<p>Default server url</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2868,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/server/",title:"Server",section:"ODIN Documentation",description:" Gateway ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Gateway</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2869,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/server/",title:"Server",section:"ODIN Documentation",description:" Room associated endpoint ",content:`<pre><code class="language-C#">public string Server
</code></pre>
<p>Room associated endpoint</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2870,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/serveraddress/",title:"serverAddress",section:"ODIN Documentation",description:"The address of the voice server this room is living on.",content:`<pre><code class="language-C#">string
</code></pre>
<p>The address of the voice server this room is living on.</p>
`}),e.add({id:2871,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/serverrequested/",title:"ServerRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the server (e.g. peer was kicked) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">ServerRequested = 1
</code></pre>
<p>Connection state change was initiated by the server (e.g. peer was kicked)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2872,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/serverrequested/",title:"ServerRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the server (e.g. peer was kicked) ",content:`<pre><code class="language-C#">ServerRequested = 1
</code></pre>
<p>Connection state change was initiated by the server (e.g. peer was kicked)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2873,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/serverrequested/",title:"ServerRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the server (e.g. peer was kicked) ",content:`<pre><code class="language-C#">ServerRequested = 1
</code></pre>
<p>Connection state change was initiated by the server (e.g. peer was kicked)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2874,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/serverrequested/",title:"ServerRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the server (e.g. peer was kicked) ",content:`<pre><code class="language-C#">ServerRequested = 1
</code></pre>
<p>Connection state change was initiated by the server (e.g. peer was kicked)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2875,href:"https://www.4players.io/odin/sdk/unity/enums/odinroomconnectionstatechangereason/serverrequested/",title:"ServerRequested",section:"ODIN Documentation",description:" Connection state change was initiated by the server (e.g. peer was kicked) ",content:`<pre><code class="language-C#">ServerRequested = 1
</code></pre>
<p>Connection state change was initiated by the server (e.g. peer was kicked)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinroomconnectionstatechangereason/">OdinRoomConnectionStateChangeReason</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2876,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool SetApmConfig(OdinRoomConfig config)
</code></pre>
<p>Set rooms new Apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.1.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>new Apm configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2877,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetApmConfig(OdinRoomConfig config)
</code></pre>
<p>Set rooms new Apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.5.8/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>new Apm configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2878,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetApmConfig(OdinRoomConfig config)
</code></pre>
<p>Set rooms new Apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.6.0/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>new Apm configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2879,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetApmConfig(OdinRoomConfig config)
</code></pre>
<p>Set rooms new Apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/1.6.6/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>new Apm configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2880,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError SetApmConfig(OdinApmConfig config)
</code></pre>
<p>Set managed audio processing configuration</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td>new config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td>updated config</td>
</tr>
</tbody>
</table>
`}),e.add({id:2881,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError SetApmConfig(NativeBindings.OdinApmConfig config)
</code></pre>
<p>Set native audio processing config</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td>native config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2882,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError SetApmConfig(OdinApmConfig config)
</code></pre>
<p>Not supported</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2883,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError SetApmConfig(NativeBindings.OdinApmConfig config)
</code></pre>
<p>Set native audio processing config</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinapmconfig/">OdinApmConfig</a></td>
<td>native config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2884,href:"https://www.4players.io/odin/sdk/unity/classes/room/setapmconfig/",title:"SetApmConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetApmConfig(OdinRoomConfig config)
</code></pre>
<p>Set rooms new Apm config</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/classes/odinroomconfig/">OdinRoomConfig</a></td>
<td>new Apm configuration</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on successful set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2885,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmstreamdelay/",title:"SetApmStreamDelay",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError SetApmStreamDelay(ulong ms)
</code></pre>
<p>Set native audio processing delay</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ms</td>
<td>UInt64</td>
<td>delay</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2886,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/setapmstreamdelay/",title:"SetApmStreamDelay",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError SetApmStreamDelay(ulong ms)
</code></pre>
<p>Not supported</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ms</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2887,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/setapmstreamdelay/",title:"SetApmStreamDelay",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError SetApmStreamDelay(ulong ms)
</code></pre>
<p>Set native audio processing delay</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>ms</td>
<td>UInt64</td>
<td>delay</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2888,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/setaudioclipdata/",title:"SetAudioClipData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void SetAudioClipData()
</code></pre>
`}),e.add({id:2889,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/setaudiosourceptich/",title:"SetAudioSourcePtich",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void SetAudioSourcePtich(float audioBufferSize)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audioBufferSize</td>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2890,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/setdecoder/",title:"SetDecoder",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetDecoder(MediaDecoder decoder)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>decoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediadecoder/">MediaDecoder</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2891,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/seteventlistener/",title:"setEventListener",section:"ODIN Documentation",description:"Sets a global event listener that received all events, this can be helpful for debugging. Please use addEventListener instead for production code.",content:`<pre><code class="language-C#">public setEventListener(callback: (data: OdinEventPayload)=&gt; void)}): void
</code></pre>
<p>Sets a global event listener that received all events, this can be helpful for debugging. Please use addEventListener instead for production code.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>callback</td>
<td>(data: OdinEventPayload)=&gt; void)}</td>
<td>The callback to call when the event is fired.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2892,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudiodata/setframe/",title:"SetFrame",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetFrame(float[] data, int index, int count)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Single[]</td>
<td></td>
</tr>
<tr>
<td>index</td>
<td>Int32</td>
<td></td>
</tr>
<tr>
<td>count</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2893,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/playbackcomponent/setmediainfo/",title:"SetMediaInfo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMediaInfo(string roomName, ulong peerId, long mediaId)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>mediaId</td>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2894,href:"https://www.4players.io/odin/sdk/unity/classes/playbackcomponent/setmediainfo/",title:"SetMediaInfo",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMediaInfo(string roomName, ulong peerId, long mediaId)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>roomName</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>peerId</td>
<td>UInt64</td>
<td></td>
</tr>
<tr>
<td>mediaId</td>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2895,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/setmicrophonemute/",title:"SetMicrophoneMute",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool SetMicrophoneMute(bool mute)
</code></pre>
<p>Will set the room <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> to mute</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if there is no <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> or the room was not joined</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mute</td>
<td>Boolean</td>
<td>true to mute and false to unmute</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2896,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/setmicrophonemute/",title:"SetMicrophoneMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetMicrophoneMute(bool mute)
</code></pre>
<p>Will set the room <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> to mute</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if there is no <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> or the room was not joined</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mute</td>
<td>Boolean</td>
<td>true to mute and false to unmute</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2897,href:"https://www.4players.io/odin/sdk/unity/classes/room/setmicrophonemute/",title:"SetMicrophoneMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetMicrophoneMute(bool mute)
</code></pre>
<p>Will set the room <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> to mute</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Always false if there is no <a href="/odin/sdk/unity/classes/room/microphonemedia/">MicrophoneMedia</a> or the room was not joined</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mute</td>
<td>Boolean</td>
<td>true to mute and false to unmute</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2898,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediacollection/setmute/",title:"SetMute",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void SetMute(bool value)
</code></pre>
<p>Set IsMuted on each Media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>If true, no data will be read/pushed for the media handle</td>
</tr>
</tbody>
</table>
`}),e.add({id:2899,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/setmute/",title:"SetMute",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void SetMute(bool value)
</code></pre>
<p>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true for empty data or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2900,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediacollection/setmute/",title:"SetMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMute(bool value)
</code></pre>
<p>Set IsMuted on each Media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>If true, no data will be read/pushed for the media handle</td>
</tr>
</tbody>
</table>
`}),e.add({id:2901,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/setmute/",title:"SetMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMute(bool value)
</code></pre>
<p>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true for empty data or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2902,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/setmute/",title:"SetMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMute(bool value)
</code></pre>
<p>Set IsMuted on each Media</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>If true, no data will be read/pushed for the media handle</td>
</tr>
</tbody>
</table>
`}),e.add({id:2903,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/setmute/",title:"SetMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMute(bool value)
</code></pre>
<p>Sets <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true for empty data or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2904,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/setmutemedias/",title:"SetMuteMedias",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void SetMuteMedias(bool value)
</code></pre>
<p>Set IsMuted on each current associated Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, on the stream no data will be read or pushed even if AudioPushData/AudioReadData is called</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true is mute or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2905,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/setmutemedias/",title:"SetMuteMedias",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMuteMedias(bool value)
</code></pre>
<p>Set IsMuted on each current associated Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, on the stream no data will be read or pushed even if AudioPushData/AudioReadData is called</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true is mute or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2906,href:"https://www.4players.io/odin/sdk/unity/classes/peer/setmutemedias/",title:"SetMuteMedias",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetMuteMedias(bool value)
</code></pre>
<p>Set IsMuted on each current associated Media</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If true, on the stream no data will be read or pushed even if AudioPushData/AudioReadData is called</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true is mute or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2907,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/setpause/",title:"SetPause",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void SetPause(bool value)
</code></pre>
<p>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true for NOP or false to call ffi on read/write</td>
</tr>
</tbody>
</table>
`}),e.add({id:2908,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/setpause/",title:"SetPause",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetPause(bool value)
</code></pre>
<p>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true for NOP or false to call ffi on read/write</td>
</tr>
</tbody>
</table>
`}),e.add({id:2909,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/setpause/",title:"SetPause",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetPause(bool value)
</code></pre>
<p>Sets <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td>true for NOP or false to call ffi on read/write</td>
</tr>
</tbody>
</table>
`}),e.add({id:2910,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/setposition/",title:"setPosition",section:"ODIN Documentation",description:"Updates the three-dimensional position of our own `OdinPeer` in the room to apply server-side culling.",content:`<pre><code class="language-C#">setPosition(offsetX: number, offsetY: number, offsetZ: number): void
</code></pre>
<p>Updates the three-dimensional position of our own <code>OdinPeer</code> in the room to apply server-side culling.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>offsetX</td>
<td>number</td>
<td>The new X coordinate for the peers position in the room</td>
</tr>
<tr>
<td>offsetY</td>
<td>number</td>
<td>The new Y coordinate for the peers position in the room</td>
</tr>
<tr>
<td>offsetZ</td>
<td>number</td>
<td>The new Z coordinate for the peers position in the room</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2911,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/setposition/",title:"SetPosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; SetPosition(float x = 0F, float y = 0F)
</code></pre>
<p>Set the spatial position for server side culling. Other remote peers outside the boundary will appear as not in the room or leaving the room.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>X of vector</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>Y of vector</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2912,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/setpositionscale/",title:"setPositionScale",section:"ODIN Documentation",description:"Sets the scaling factor for coordinates supplied to `updatePosition`, facilitating adaptation to your game's unique coordinate system requirements. Peers are visible to each other only within a unit circle of radius `1.0`. When altering a peer's position, ensure the position is scaled such that the maximum distance remains one or less. This scaling can be performed manually or by specifying the multiplicative scale here. Note: It's crucial to maintain consistent scaling across all client applications.",content:`<pre><code class="language-C#">public setPositionScale(scale: number): void
</code></pre>
<p>Sets the scaling factor for coordinates supplied to <code>updatePosition</code>, facilitating
adaptation to your game&rsquo;s unique coordinate system requirements. Peers are visible to each other
only within a unit circle of radius <code>1.0</code>. When altering a peer&rsquo;s position, ensure the position
is scaled such that the maximum distance remains one or less. This scaling can be performed
manually or by specifying the multiplicative scale here.</p>
<p>Note: It&rsquo;s crucial to maintain consistent scaling across all client applications.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>number</td>
<td>The new scaling factor to use.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2913,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async void SetPositionScale(float scale)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2914,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool SetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2915,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void SetPositionScale(float scale)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2916,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2917,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void SetPositionScale(float scale)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2918,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2919,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void SetPositionScale(float scale)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2920,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2921,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void SetPositionScale(float scale)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
`}),e.add({id:2922,href:"https://www.4players.io/odin/sdk/unity/classes/room/setpositionscale/",title:"SetPositionScale",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SetPositionScale(float scale)
</code></pre>
<p>Configures the allowed 'view' distance for proximity calculation of peers in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Make sure that all of your ODIN clients configure the same <code>distance</code> value.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>scale</td>
<td>Single</td>
<td>Per default, the room will use a distance of <code>1.0</code> fo proximity calculation</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:2923,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmediadata/setsamples/",title:"SetSamples",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void SetSamples(float[] samples)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>samples</td>
<td>Single[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2924,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinconnection/settings/",title:"Settings",section:"ODIN Documentation",description:" Native connection settings ",content:`<pre><code class="language-C#">public OdinConnectionPoolSettings Settings
</code></pre>
<p>Native connection settings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinconnectionpoolsettings/">OdinConnectionPoolSettings</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2925,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odincolliderfiltercomponent/settriggercount/",title:"SetTriggerCount",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void SetTriggerCount(Collider obj, bool isEnter)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>obj</td>
<td>Collider</td>
<td></td>
</tr>
<tr>
<td>isEnter</td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2926,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinterrainfiltercomponent/setuserdata/",title:"SetUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual void SetUserData(Vector3 objectPosition, Vector3 terrainPosition, TerrainData terrainData)
</code></pre>
<p>Set delegate userdata for effect callback</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>objectPosition</td>
<td>Vector3</td>
<td></td>
</tr>
<tr>
<td>terrainPosition</td>
<td>Vector3</td>
<td></td>
</tr>
<tr>
<td>terrainData</td>
<td>TerrainData</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2927,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/setvadconfig/",title:"SetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError SetVadConfig(OdinVadConfig config)
</code></pre>
<p>Not supported</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2928,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/setvadconfig/",title:"SetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError SetVadConfig(NativeBindings.OdinVadConfig config)
</code></pre>
<p>Set native voice activity config</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>new config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2929,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/setvadconfig/",title:"SetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError SetVadConfig(OdinVadConfig config)
</code></pre>
<p>Set managed voice activity configuration</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>new config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td>updated config</td>
</tr>
</tbody>
</table>
`}),e.add({id:2930,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/setvadconfig/",title:"SetVadConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError SetVadConfig(NativeBindings.OdinVadConfig config)
</code></pre>
<p>Set native voice activity config</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>config</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinvadconfig/">OdinVadConfig</a></td>
<td>new config</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:2931,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/silencecapturedaudio/",title:"SilenceCapturedAudio",section:"ODIN Documentation",description:" Zero out the event audio buffer for PushAudio. ",content:`<pre><code class="language-C#">public bool SilenceCapturedAudio
</code></pre>
<p>Zero out the event audio buffer for PushAudio.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2932,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/silencecapturedaudio/",title:"SilenceCapturedAudio",section:"ODIN Documentation",description:" Zero out the event audio buffer for PushAudio. ",content:`<pre><code class="language-C#">public bool SilenceCapturedAudio
</code></pre>
<p>Zero out the event audio buffer for PushAudio.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2933,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/silencecapturedaudio/",title:"SilenceCapturedAudio",section:"ODIN Documentation",description:" Zero out the event audio buffer for PushAudio. ",content:`<pre><code class="language-C#">public bool SilenceCapturedAudio
</code></pre>
<p>Zero out the event audio buffer for PushAudio.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2934,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/silencecapturedaudio/",title:"SilenceCapturedAudio",section:"ODIN Documentation",description:" Zero out the event audio buffer for PushAudio. ",content:`<pre><code class="language-C#">public bool SilenceCapturedAudio
</code></pre>
<p>Zero out the event audio buffer for PushAudio.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2935,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/silencecapturedaudio/",title:"SilenceCapturedAudio",section:"ODIN Documentation",description:" Zero out the event audio buffer for PushAudio. ",content:`<pre><code class="language-C#">public bool SilenceCapturedAudio
</code></pre>
<p>Zero out the event audio buffer for PushAudio.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2936,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinaudioreader/silenceinputaudio/",title:"SilenceInputAudio",section:"ODIN Documentation",description:" Zero out the event audio buffer. ",content:`<pre><code class="language-C#">public bool SilenceInputAudio
</code></pre>
<p>Zero out the event audio buffer.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2937,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmuteaudiocomponent/silencetoggle/",title:"SilenceToggle",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool SilenceToggle
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2938,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmedia/spatialblend/",title:"SpatialBlend",section:"ODIN Documentation",description:" Property of AudioSource ",content:`<pre><code class="language-C#">public float SpatialBlend { get; set; }
</code></pre>
<p>Property of AudioSource</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2939,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/start/",title:"start",section:"ODIN Documentation",description:"Starts the media stream by initiating the encoder/decoder and adding it to the room if it belongs to the local peer.",content:`<pre><code class="language-C#">start(): Promise&lt;void&gt;
</code></pre>
<p>Starts the media stream by initiating the encoder/decoder and adding it to the room if it belongs to the local peer.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2940,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/started/",title:"started",section:"ODIN Documentation",description:"Indicates whether or not the media is registered in the audio service instance (e.g. started).",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Indicates whether or not the media is registered in the audio service instance (e.g. started).</p>
`}),e.add({id:2941,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/startlisten/",title:"StartListen",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool StartListen()
</code></pre>
<p>Start Unity microphone capture</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if &quot;Autostart Listen&quot; in Editor component is true, the capture will be called in Unity-Start(void).</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2942,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/startlisten/",title:"StartListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool StartListen()
</code></pre>
<p>Start Unity microphone capture</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if &quot;Autostart Listen&quot; in Editor component is true, the capture will be called in Unity-Start(void).</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2943,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/startlisten/",title:"StartListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool StartListen()
</code></pre>
<p>Start Unity microphone capture</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if &quot;Autostart Listen&quot; in Editor component is true, the capture will be called in Unity-Start(void).</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2944,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/startlisten/",title:"StartListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool StartListen()
</code></pre>
<p>Start Unity microphone capture</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if &quot;Autostart Listen&quot; in Editor component is true, the capture will be called in Unity-Start(void).</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2945,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/startlisten/",title:"StartListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool StartListen()
</code></pre>
<p>Start Unity microphone capture</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if &quot;Autostart Listen&quot; in Editor component is true, the capture will be called in Unity-Start(void).</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2946,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/startlisten/",title:"StartListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool StartListen()
</code></pre>
<p>Start Unity microphone capture</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>if &quot;Autostart Listen&quot; in Editor component is true, the capture will be called in Unity-Start(void).</p>
</div>
</div>

<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2947,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/startmedia/",title:"StartMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; StartMedia(MediaEncoder encoder)
public virtual Task&lt;RpcResult&gt; StartMedia(ushort mediaId, MediaRpcProperties properties)
</code></pre>
<p>Send a <code>&quot;StartMedia&quot;</code> RPC to the server to start the encoder for input.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of input media</td>
</tr>
<tr>
<td>properties</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/">MediaRpcProperties</a></td>
<td>arbitrary media data usually to identify the media on lost connections</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="startmediaencoder">StartMedia(encoder)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; StartMedia(MediaEncoder encoder)
</code></pre>
<p>Send a <code>&quot;StartMedia&quot;</code> RPC to the server to start the encoder for input.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="startmediamediaid-properties">StartMedia(mediaId, properties)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; StartMedia(ushort mediaId, MediaRpcProperties properties)
</code></pre>
<p>Send a <code>&quot;StartMedia&quot;</code> RPC with custom media-data to the server to start the encoder for input.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>id of input media</td>
</tr>
<tr>
<td>properties</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediarpcproperties/">MediaRpcProperties</a></td>
<td>arbitrary media data usually to identify the media on lost connections</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2948,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/startmedias/",title:"startMedias",section:"ODIN Documentation",description:"Starts all active medias or a list of specific active medias.",content:`<pre><code class="language-C#">startMedias(mediaIds?: number[]): Promise&lt;void&gt;
</code></pre>
<p>Starts all active medias or a list of specific active medias.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaIds</td>
<td>number[]</td>
<td>Optional list of media IDs to start</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2949,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/startvadmeter/",title:"startVADMeter",section:"ODIN Documentation",description:"Enables emitting of RNN-based voice activity detection statistics.",content:`<pre><code class="language-C#">startVADMeter(): void
</code></pre>
<p>Enables emitting of RNN-based voice activity detection statistics.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2950,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/state/",title:"state",section:"ODIN Documentation",description:"The new connection state of the room.",content:`<pre><code class="language-C#">public state: OdinConnectionState
</code></pre>
<p>The new connection state of the room.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/nodejs/types/odinconnectionstate/">OdinConnectionState</a></p>
`}),e.add({id:2951,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/state/",title:"state",section:"ODIN Documentation",description:"Indicates if the media is currently active or not (i.e. user talking or not).",content:`<pre><code class="language-C#">public state: boolean
</code></pre>
<p>Indicates if the media is currently active or not (i.e. user talking or not).</p>
`}),e.add({id:2952,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiostatseventpayload/stats/",title:"stats",section:"ODIN Documentation",description:"The internal Opus encoder/decoder stats.",content:`<pre><code class="language-C#">IOdinAudioStats
</code></pre>
<p>The internal Opus encoder/decoder stats.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/interfaces/iodinaudiostats/">IOdinAudioStats</a></p>
`}),e.add({id:2953,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/mediachannels/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Defines two (stereo) channels ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Stereo = 2
</code></pre>
<p>Defines two (stereo) channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2954,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/mediachannels/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Defines two (stereo) channels ",content:`<pre><code class="language-C#">Stereo = 2
</code></pre>
<p>Defines two (stereo) channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2955,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/mediachannels/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Defines two (stereo) channels ",content:`<pre><code class="language-C#">Stereo = 2
</code></pre>
<p>Defines two (stereo) channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2956,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/mediachannels/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Defines two (stereo) channels ",content:`<pre><code class="language-C#">Stereo = 2
</code></pre>
<p>Defines two (stereo) channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2957,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediadecoder/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Output channel flag ",content:`<pre><code class="language-C#">public bool Stereo { get; }
</code></pre>
<p>Output channel flag</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2958,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediaencoder/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Input channel flag ",content:`<pre><code class="language-C#">public bool Stereo { get; }
</code></pre>
<p>Input channel flag</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2959,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Room default stereo flag ",content:`<pre><code class="language-C#">public readonly bool Stereo
</code></pre>
<p>Room default stereo flag</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2960,href:"https://www.4players.io/odin/sdk/unity/enums/mediachannels/stereo/",title:"Stereo",section:"ODIN Documentation",description:" Defines two (stereo) channels ",content:`<pre><code class="language-C#">Stereo = 2
</code></pre>
<p>Defines two (stereo) channels</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/mediachannels/">MediaChannels</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2961,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/stop/",title:"stop",section:"ODIN Documentation",description:"Stops the media stream by terminating the encoder/decoder and removing it from the room if it belongs to the local peer.",content:`<pre><code class="language-C#">stop(): Promise&lt;void&gt;
</code></pre>
<p>Stops the media stream by terminating the encoder/decoder and removing it from the room if it belongs to the local peer.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2962,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/microphonereader/stoplisten/",title:"StopListen",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void StopListen()
</code></pre>
<p>Stop Unity Microphone capture if this AudioSender created the recording</p>
`}),e.add({id:2963,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/microphonereader/stoplisten/",title:"StopListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void StopListen()
</code></pre>
<p>Stop Unity Microphone capture if this AudioSender created the recording</p>
`}),e.add({id:2964,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/microphonereader/stoplisten/",title:"StopListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void StopListen()
</code></pre>
<p>Stop Unity Microphone capture if this AudioSender created the recording</p>
`}),e.add({id:2965,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/microphonereader/stoplisten/",title:"StopListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void StopListen()
</code></pre>
<p>Stop Unity Microphone capture if this AudioSender created the recording</p>
`}),e.add({id:2966,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinmicrophonereader/stoplisten/",title:"StopListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void StopListen()
</code></pre>
<p>Stop Unity Microphone capture if this AudioSender created the recording</p>
`}),e.add({id:2967,href:"https://www.4players.io/odin/sdk/unity/classes/microphonereader/stoplisten/",title:"StopListen",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void StopListen()
</code></pre>
<p>Stop Unity Microphone capture if this AudioSender created the recording</p>
`}),e.add({id:2968,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/stopmedia/",title:"StopMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; StopMedia(MediaEncoder encoder)
public virtual Task&lt;RpcResult&gt; StopMedia(ushort mediaId)
</code></pre>
<p>Send a <code>&quot;StopMedia&quot;</code> to the server to stop the encoder.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media to stop</td>
</tr>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>raw id to stop</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="stopmediaencoder">StopMedia(encoder)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; StopMedia(MediaEncoder encoder)
</code></pre>
<p>Send a <code>&quot;StopMedia&quot;</code> to the server to stop the encoder.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media to stop</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="stopmediamediaid">StopMedia(mediaId)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; StopMedia(ushort mediaId)
</code></pre>
<p>Send a <code>&quot;StopMedia&quot;</code> to the server to stop the encoder.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaId</td>
<td>UInt16</td>
<td>raw id to stop</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:2969,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/stopmedias/",title:"stopMedias",section:"ODIN Documentation",description:"Stops all active medias or a list of specific active medias.",content:`<pre><code class="language-C#">stopMedias(mediaIds?: number[]): Promise&lt;void&gt;
</code></pre>
<p>Stops all active medias or a list of specific active medias.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>mediaIds</td>
<td>number[]</td>
<td>Optional list of media IDs to stop</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2970,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/stopvadmeter/",title:"stopVADMeter",section:"ODIN Documentation",description:"Disables emitting of RNN-based voice activity detection statistics.",content:`<pre><code class="language-C#">stopVADMeter(): void
</code></pre>
<p>Disables emitting of RNN-based voice activity detection statistics.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2971,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/str16/",title:"Str16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Str16 = 218
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2972,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/str32/",title:"Str32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Str32 = 219
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2973,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/str8/",title:"Str8",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Str8 = 217
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2974,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/supportedplatform/",title:"SupportedPlatform",section:"ODIN Documentation",description:" Platforms supported by the native ODIN runtime ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public enum SupportedPlatform
</code></pre>
<h1 id="heading"></h1>
<p>Platforms supported by the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/android/">Android</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/macosx/">MacOSX</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/linux/">Linux</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/windows/">Windows</a></td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2975,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/",title:"SupportedPlatform",section:"ODIN Documentation",description:" Platforms supported by the native ODIN runtime ",content:`<pre><code class="language-C#">public enum SupportedPlatform
</code></pre>
<h1 id="heading"></h1>
<p>Platforms supported by the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/android/">Android</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/ios/">iOS</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/macosx/">MacOSX</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/linux/">Linux</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/windows/">Windows</a></td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2976,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/supportedplatform/",title:"SupportedPlatform",section:"ODIN Documentation",description:" Platforms supported by the native ODIN runtime ",content:`<pre><code class="language-C#">public enum SupportedPlatform
</code></pre>
<h1 id="heading"></h1>
<p>Platforms supported by the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/android/">Android</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/macosx/">MacOSX</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/linux/">Linux</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/windows/">Windows</a></td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2977,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/",title:"SupportedPlatform",section:"ODIN Documentation",description:" Platforms supported by the native ODIN runtime ",content:`<pre><code class="language-C#">public enum SupportedPlatform
</code></pre>
<h1 id="heading"></h1>
<p>Platforms supported by the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/android/">Android</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/ios/">iOS</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/macosx/">MacOSX</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/linux/">Linux</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/windows/">Windows</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2978,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/",title:"SupportedPlatform",section:"ODIN Documentation",description:" Platforms supported by the native ODIN runtime ",content:`<pre><code class="language-C#">public enum SupportedPlatform
</code></pre>
<h1 id="heading"></h1>
<p>Platforms supported by the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/android/">Android</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/ios/">iOS</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/macosx/">MacOSX</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/linux/">Linux</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/windows/">Windows</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2979,href:"https://www.4players.io/odin/sdk/unity/enums/supportedplatform/",title:"SupportedPlatform",section:"ODIN Documentation",description:" Platforms supported by the native ODIN runtime ",content:`<pre><code class="language-C#">public enum SupportedPlatform
</code></pre>
<h1 id="heading"></h1>
<p>Platforms supported by the native ODIN runtime</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/android/">Android</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/ios/">iOS</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/macosx/">MacOSX</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/linux/">Linux</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/windows/">Windows</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2980,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediacollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2981,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peercollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2982,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomcollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2983,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediacollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2984,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peercollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2985,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomcollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2986,href:"https://www.4players.io/odin/sdk/unity/classes/mediacollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2987,href:"https://www.4players.io/odin/sdk/unity/classes/peercollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2988,href:"https://www.4players.io/odin/sdk/unity/classes/roomcollection/system.collections.ienumerable.getenumerator/",title:"System.Collections.IEnumerable.GetEnumerator",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">IEnumerator IEnumerable.GetEnumerator()
</code></pre>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:2989,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinconnectionstatechangedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2990,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odineventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2991,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinjoinedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2992,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinlefteventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2993,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaactivityeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2994,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaaddedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2995,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmediaremovedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2996,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinmessagereceivedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2997,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2998,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerlefteventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:2999,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:3e3,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/tag/",title:"tag",section:"ODIN Documentation",description:"An internal integer representing the type of the event. This is mainly used internally for testing purposes.",content:`<pre><code class="language-C#">public tag: number
</code></pre>
<p>An internal integer representing the type of the event. This is mainly used internally for testing purposes.</p>
`}),e.add({id:3001,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/",title:"TerrainFilterUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public struct TerrainFilterUserData
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/objectposition/">ObjectPosition</a></td>
<td>Original source</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/terrainposition/">TerrainPosition</a></td>
<td>Original terrain</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/mapposition/">MapPosition</a></td>
<td>Relative position</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/x/">X</a></td>
<td>relative position to alphamap width</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/y/">Y</a></td>
<td>relative position to alphamap layers</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/z/">Z</a></td>
<td>relative position to alphamap height</td>
</tr>
</tbody>
</table>
`}),e.add({id:3002,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/terrainposition/",title:"TerrainPosition",section:"ODIN Documentation",description:" Original terrain ",content:`<pre><code class="language-C#">public Vector3 TerrainPosition
</code></pre>
<p>Original terrain</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vector3</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3003,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/test/",title:"Test",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool Test(bool condition, string message)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>condition</td>
<td>Boolean</td>
<td></td>
</tr>
<tr>
<td>message</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3004,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/timestamp/",title:"timestamp",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Int32 timestamp
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3005,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramsend/timestamp/",title:"timestamp",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public Int32 timestamp
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3006,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public virtual byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3007,href:"https://www.4players.io/odin/sdk/unity/1.1.0/interfaces/iuserdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3008,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3009,href:"https://www.4players.io/odin/sdk/unity/1.5.8/interfaces/iuserdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3010,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3011,href:"https://www.4players.io/odin/sdk/unity/1.6.0/interfaces/iuserdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3012,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3013,href:"https://www.4players.io/odin/sdk/unity/1.6.6/interfaces/iuserdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3014,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3015,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/iuserdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3016,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3017,href:"https://www.4players.io/odin/sdk/unity/interfaces/iuserdata/tobytes/",title:"ToBytes",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">byte[] ToBytes()
</code></pre>
<p>Used for converting Data on network level</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3018,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/togglemute/",title:"ToggleMute",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void ToggleMute()
</code></pre>
<p>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</p>
`}),e.add({id:3019,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/togglemute/",title:"ToggleMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void ToggleMute()
</code></pre>
<p>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</p>
`}),e.add({id:3020,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/togglemute/",title:"ToggleMute",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void ToggleMute()
</code></pre>
<p>Toggles <a href="/odin/sdk/unity/classes/mediastream/ismuted/">IsMuted</a>.</p>
`}),e.add({id:3021,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/togglepause/",title:"TogglePause",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void TogglePause()
</code></pre>
<p>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</p>
`}),e.add({id:3022,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/togglepause/",title:"TogglePause",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void TogglePause()
</code></pre>
<p>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</p>
`}),e.add({id:3023,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/togglepause/",title:"TogglePause",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void TogglePause()
</code></pre>
<p>Toggles <a href="/odin/sdk/unity/classes/mediastream/ispaused/">IsPaused</a>.</p>
`}),e.add({id:3024,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/tohex/",title:"ToHex",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string ToHex()
</code></pre>
<p>String representation of the stream in hex</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>hex string of stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:3025,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/token/",title:"Token",section:"ODIN Documentation",description:" Room token ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string Token
</code></pre>
<p>Room token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3026,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/token/",title:"Token",section:"ODIN Documentation",description:" Room token ",content:`<pre><code class="language-C#">public string Token
</code></pre>
<p>Room token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3027,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/token/",title:"Token",section:"ODIN Documentation",description:" Room token ",content:`<pre><code class="language-C#">public string Token
</code></pre>
<p>Room token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3028,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/token/",title:"Token",section:"ODIN Documentation",description:" Room token ",content:`<pre><code class="language-C#">public string Token
</code></pre>
<p>Room token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3029,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/token/",title:"Token",section:"ODIN Documentation",description:" Odin room token ",content:`<pre><code class="language-C#">public string Token
</code></pre>
<p>Odin room token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3030,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/token/",title:"Token",section:"ODIN Documentation",description:" Room joining token ",content:`<pre><code class="language-C#">public string Token { get; }
</code></pre>
<p>Room joining token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3031,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/token/",title:"Token",section:"ODIN Documentation",description:" Room token ",content:`<pre><code class="language-C#">public string Token
</code></pre>
<p>Room token</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3032,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" JWT room token lifetime ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static ulong TokenLifetime { get; set; }
</code></pre>
<p>JWT room token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3033,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Time untill the token expires ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Time untill the token expires</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3034,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Room associated Token lifetime ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Room associated Token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3035,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" JWT room token lifetime ",content:`<pre><code class="language-C#">public static ulong TokenLifetime { get; set; }
</code></pre>
<p>JWT room token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3036,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Time untill the token expires ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Time untill the token expires</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3037,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Room associated Token lifetime ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Room associated Token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3038,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" JWT room token lifetime ",content:`<pre><code class="language-C#">public static ulong TokenLifetime { get; set; }
</code></pre>
<p>JWT room token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3039,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Time untill the token expires ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Time untill the token expires</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3040,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Room associated Token lifetime ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Room associated Token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3041,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" JWT room token lifetime ",content:`<pre><code class="language-C#">public static ulong TokenLifetime { get; set; }
</code></pre>
<p>JWT room token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3042,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Time untill the token expires ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Time untill the token expires</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3043,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Room associated Token lifetime ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Room associated Token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3044,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" JWT room token lifetime ",content:`<pre><code class="language-C#">public static ulong TokenLifetime { get; set; }
</code></pre>
<p>JWT room token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3045,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" JWT room token lifetime ",content:`<pre><code class="language-C#">public static ulong TokenLifetime { get; set; }
</code></pre>
<p>JWT room token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3046,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Time untill the token expires ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Time untill the token expires</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3047,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/tokenlifetime/",title:"TokenLifetime",section:"ODIN Documentation",description:" Room associated Token lifetime ",content:`<pre><code class="language-C#">public ulong TokenLifetime
</code></pre>
<p>Room associated Token lifetime</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3048,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/mediastream/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3049,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinmediaconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3050,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3051,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3052,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3053,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/roomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3054,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of Buffer based on the specified encoding</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3055,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/mediastream/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3056,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinmediaconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3057,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3058,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3059,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3060,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/roomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3061,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of Buffer based on the specified encoding</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3062,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/mediastream/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3063,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinmediaconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3064,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3065,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3066,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3067,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/roomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3068,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of Buffer based on the specified encoding</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3069,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/mediastream/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3070,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinmediaconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3071,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3072,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3073,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3074,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/roomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3075,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of Buffer based on the specified encoding</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3076,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of the stream based on encoding (default UTF8)</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string of stream</td>
</tr>
</tbody>
</table>
`}),e.add({id:3077,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3078,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of Buffer based on the specified encoding</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3079,href:"https://www.4players.io/odin/sdk/unity/classes/mediastream/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3080,href:"https://www.4players.io/odin/sdk/unity/classes/odinmediaconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3081,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3082,href:"https://www.4players.io/odin/sdk/unity/classes/peer/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3083,href:"https://www.4players.io/odin/sdk/unity/classes/room/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3084,href:"https://www.4players.io/odin/sdk/unity/classes/roomconfig/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>Debug</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>info</td>
</tr>
</tbody>
</table>
`}),e.add({id:3085,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/tostring/",title:"ToString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override string ToString()
</code></pre>
<p>String representation of Buffer based on the specified encoding</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td>string representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3086,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinapmconfig/transient_suppressor/",title:"transient_suppressor",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool transient_suppressor
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3087,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/transientsuppressor/",title:"transientSuppressor",section:"ODIN Documentation",description:"Enable or disable the transient suppressor",content:`<pre><code class="language-C#">public transientSuppressor: boolean
</code></pre>
<p>Enable or disable the transient suppressor</p>
`}),e.add({id:3088,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool TransientSuppressor
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3089,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Filters high amplitude noices ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool TransientSuppressor
</code></pre>
<p>Filters high amplitude noices</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3090,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Enable or disable the transient suppressor ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool TransientSuppressor { get; set; }
</code></pre>
<p>Enable or disable the transient suppressor</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3091,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool TransientSuppressor
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3092,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Filters high amplitude noices ",content:`<pre><code class="language-C#">public bool TransientSuppressor
</code></pre>
<p>Filters high amplitude noices</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3093,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Enable or disable the transient suppressor ",content:`<pre><code class="language-C#">public bool TransientSuppressor { get; set; }
</code></pre>
<p>Enable or disable the transient suppressor</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3094,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool TransientSuppressor
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3095,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Filters high amplitude noices ",content:`<pre><code class="language-C#">public bool TransientSuppressor
</code></pre>
<p>Filters high amplitude noices</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3096,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Enable or disable the transient suppressor ",content:`<pre><code class="language-C#">public bool TransientSuppressor { get; set; }
</code></pre>
<p>Enable or disable the transient suppressor</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3097,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool TransientSuppressor
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3098,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Filters high amplitude noices ",content:`<pre><code class="language-C#">public bool TransientSuppressor
</code></pre>
<p>Filters high amplitude noices</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3099,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Enable or disable the transient suppressor ",content:`<pre><code class="language-C#">public bool TransientSuppressor { get; set; }
</code></pre>
<p>Enable or disable the transient suppressor</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3100,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled ",content:`<pre><code class="language-C#">public bool TransientSuppressor { get; set; }
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3101,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool TransientSuppressor
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3102,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool TransientSuppressor
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3103,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool TransientSuppressor
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3104,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Filters high amplitude noices ",content:`<pre><code class="language-C#">public bool TransientSuppressor
</code></pre>
<p>Filters high amplitude noices</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3105,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/transientsuppressor/",title:"TransientSuppressor",section:"ODIN Documentation",description:" Enable or disable the transient suppressor ",content:`<pre><code class="language-C#">public bool TransientSuppressor { get; set; }
</code></pre>
<p>Enable or disable the transient suppressor</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3106,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/true/",title:"True",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte True = 195
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3107,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinlibraryparameters/trygetnativebinaryname/",title:"TryGetNativeBinaryName",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)
</code></pre>
<p>Returns the name of the native ODIN runtime binary that fits the current environment</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>names</td>
<td>String[]</td>
<td>possible names of the native sdk binary</td>
</tr>
<tr>
<td>platform</td>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>detected platform</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if a matching binary exists</td>
</tr>
</tbody>
</table>
`}),e.add({id:3108,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinlibraryparameters/trygetnativebinaryname/",title:"TryGetNativeBinaryName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)
</code></pre>
<p>Returns the name of the native ODIN runtime binary that fits the current environment</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>names</td>
<td>String[]</td>
<td>possible names of the native sdk binary</td>
</tr>
<tr>
<td>platform</td>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td>detected platform</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if a matching binary exists</td>
</tr>
</tbody>
</table>
`}),e.add({id:3109,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinlibraryparameters/trygetnativebinaryname/",title:"TryGetNativeBinaryName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)
</code></pre>
<p>Returns the name of the native ODIN runtime binary that fits the current environment</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>names</td>
<td>String[]</td>
<td>possible names of the native sdk binary</td>
</tr>
<tr>
<td>platform</td>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>detected platform</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if a matching binary exists</td>
</tr>
</tbody>
</table>
`}),e.add({id:3110,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinlibraryparameters/trygetnativebinaryname/",title:"TryGetNativeBinaryName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)
</code></pre>
<p>Returns the name of the native ODIN runtime binary that fits the current environment</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>names</td>
<td>String[]</td>
<td>possible names of the native sdk binary</td>
</tr>
<tr>
<td>platform</td>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td>detected platform</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if a matching binary exists</td>
</tr>
</tbody>
</table>
`}),e.add({id:3111,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinlibraryparameters/trygetnativebinaryname/",title:"TryGetNativeBinaryName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)
</code></pre>
<p>Returns the name of the native ODIN runtime binary that fits the current environment</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>names</td>
<td>String[]</td>
<td>possible names of the native sdk binary</td>
</tr>
<tr>
<td>platform</td>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td>detected platform</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if a matching binary exists</td>
</tr>
</tbody>
</table>
`}),e.add({id:3112,href:"https://www.4players.io/odin/sdk/unity/classes/odinlibraryparameters/trygetnativebinaryname/",title:"TryGetNativeBinaryName",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static bool TryGetNativeBinaryName(out string[] names, out SupportedPlatform platform)
</code></pre>
<p>Returns the name of the native ODIN runtime binary that fits the current environment</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>names</td>
<td>String[]</td>
<td>possible names of the native sdk binary</td>
</tr>
<tr>
<td>platform</td>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td>detected platform</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if a matching binary exists</td>
</tr>
</tbody>
</table>
`}),e.add({id:3113,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_array/",title:"Type_Array",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Array = 7
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3114,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_binary/",title:"Type_Binary",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Binary = 6
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3115,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_boolean/",title:"Type_Boolean",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Boolean = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3116,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_extension/",title:"Type_Extension",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Extension = 9
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3117,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_float/",title:"Type_Float",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Float = 4
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3118,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_integer/",title:"Type_Integer",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Integer = 1
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3119,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_map/",title:"Type_Map",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Map = 8
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3120,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_nil/",title:"Type_Nil",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Nil = 2
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3121,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_string/",title:"Type_String",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_String = 5
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3122,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/type_unknown/",title:"Type_Unknown",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Type_Unknown = 0
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3123,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/messagepackextension/typecode/",title:"TypeCode",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public sbyte TypeCode
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>SByte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3124,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcformat/typeindex/",title:"TypeIndex",section:"ODIN Documentation",description:" PositiveFixInt field (type) ",content:`<pre><code class="language-C#">public const int TypeIndex = 0
</code></pre>
<p><code>PositiveFixInt</code> field (type)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3125,href:"https://www.4players.io/odin/sdk/nodejs/types/",title:"Types",section:"ODIN Documentation",description:"An index of all Types available in the ODIN Unity SDK",content:`<p>The ODIN JavaScript SDK has defined these Types:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinaudiodatareceivedevent/">OdinAudioDataReceivedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinconnectionstate/">OdinConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinconnectionstatechangereason/">OdinConnectionStateChangeReason</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinjoinedevent/">OdinJoinedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinleftevent/">OdinLeftEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinmediaactivityevent/">OdinMediaActivityEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinmediaaddedevent/">OdinMediaAddedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinmediaremovedevent/">OdinMediaRemovedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinpeerjoinedevent/">OdinPeerJoinedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinpeerleftevent/">OdinPeerLeftEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinpeeruserdatachangedevent/">OdinPeerUserDataChangedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/types/odinroomuserdatachangedevent/">OdinRoomUserDataChangedEvent</a></li>
</span>
</ul>
`}),e.add({id:3126,href:"https://www.4players.io/odin/sdk/web/types/",title:"Types",section:"ODIN Documentation",description:"An index of all Types available in the ODIN Unity SDK",content:`<p>The ODIN JavaScript SDK has defined these Types:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinaudiostatsevent/">OdinAudioStatsEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinconnectionstate/">OdinConnectionState</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinconnectionstatechangedevent/">OdinConnectionStateChangedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinmediaactivitychangedevent/">OdinMediaActivityChangedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinmediastartedstoppedevent/">OdinMediaStartedStoppedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinmessagereceivedevent/">OdinMessageReceivedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinpeerdatachangedevent/">OdinPeerDataChangedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinpeerjoinedleftevent/">OdinPeerJoinedLeftEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinroomdatachangedevent/">OdinRoomDataChangedEvent</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/web/types/odinroomjoinedleftevent/">OdinRoomJoinedLeftEvent</a></li>
</span>
</ul>
`}),e.add({id:3127,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_rx_acks/",title:"udp_rx_acks",section:"ODIN Documentation",description:" The amount of incoming acknowledgement frames observed ",content:`<pre><code class="language-C#">public ulong udp_rx_acks
</code></pre>
<p>The amount of incoming acknowledgement frames observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3128,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_rx_acks/",title:"udp_rx_acks",section:"ODIN Documentation",description:" The amount of incoming acknowledgement frames observed ",content:`<pre><code class="language-C#">public ulong udp_rx_acks
</code></pre>
<p>The amount of incoming acknowledgement frames observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3129,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_rx_acks/",title:"udp_rx_acks",section:"ODIN Documentation",description:" The amount of incoming acknowledgement frames observed ",content:`<pre><code class="language-C#">public ulong udp_rx_acks
</code></pre>
<p>The amount of incoming acknowledgement frames observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3130,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_rx_bytes/",title:"udp_rx_bytes",section:"ODIN Documentation",description:" The total amount of bytes which have been transferred inside incoming UDP datagrams ",content:`<pre><code class="language-C#">public ulong udp_rx_bytes
</code></pre>
<p>The total amount of bytes which have been transferred inside incoming UDP datagrams</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3131,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_rx_bytes/",title:"udp_rx_bytes",section:"ODIN Documentation",description:" The total amount of bytes which have been transferred inside incoming UDP datagrams ",content:`<pre><code class="language-C#">public ulong udp_rx_bytes
</code></pre>
<p>The total amount of bytes which have been transferred inside incoming UDP datagrams</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3132,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_rx_bytes/",title:"udp_rx_bytes",section:"ODIN Documentation",description:" The total amount of bytes which have been transferred inside incoming UDP datagrams ",content:`<pre><code class="language-C#">public ulong udp_rx_bytes
</code></pre>
<p>The total amount of bytes which have been transferred inside incoming UDP datagrams</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3133,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_rx_datagrams/",title:"udp_rx_datagrams",section:"ODIN Documentation",description:" The amount of incoming UDP datagrams observed ",content:`<pre><code class="language-C#">public ulong udp_rx_datagrams
</code></pre>
<p>The amount of incoming UDP datagrams observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3134,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_rx_datagrams/",title:"udp_rx_datagrams",section:"ODIN Documentation",description:" The amount of incoming UDP datagrams observed ",content:`<pre><code class="language-C#">public ulong udp_rx_datagrams
</code></pre>
<p>The amount of incoming UDP datagrams observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3135,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_rx_datagrams/",title:"udp_rx_datagrams",section:"ODIN Documentation",description:" The amount of incoming UDP datagrams observed ",content:`<pre><code class="language-C#">public ulong udp_rx_datagrams
</code></pre>
<p>The amount of incoming UDP datagrams observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3136,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_tx_acks/",title:"udp_tx_acks",section:"ODIN Documentation",description:" The amount of outgoing acknowledgement frames observed ",content:`<pre><code class="language-C#">public ulong udp_tx_acks
</code></pre>
<p>The amount of outgoing acknowledgement frames observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3137,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_tx_acks/",title:"udp_tx_acks",section:"ODIN Documentation",description:" The amount of outgoing acknowledgement frames observed ",content:`<pre><code class="language-C#">public ulong udp_tx_acks
</code></pre>
<p>The amount of outgoing acknowledgement frames observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3138,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_tx_acks/",title:"udp_tx_acks",section:"ODIN Documentation",description:" The amount of outgoing acknowledgement frames observed ",content:`<pre><code class="language-C#">public ulong udp_tx_acks
</code></pre>
<p>The amount of outgoing acknowledgement frames observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3139,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_tx_bytes/",title:"udp_tx_bytes",section:"ODIN Documentation",description:" The total amount of bytes which have been transferred inside outgoing UDP datagrams ",content:`<pre><code class="language-C#">public ulong udp_tx_bytes
</code></pre>
<p>The total amount of bytes which have been transferred inside outgoing UDP datagrams</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3140,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_tx_bytes/",title:"udp_tx_bytes",section:"ODIN Documentation",description:" The total amount of bytes which have been transferred inside outgoing UDP datagrams ",content:`<pre><code class="language-C#">public ulong udp_tx_bytes
</code></pre>
<p>The total amount of bytes which have been transferred inside outgoing UDP datagrams</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3141,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_tx_bytes/",title:"udp_tx_bytes",section:"ODIN Documentation",description:" The total amount of bytes which have been transferred inside outgoing UDP datagrams ",content:`<pre><code class="language-C#">public ulong udp_tx_bytes
</code></pre>
<p>The total amount of bytes which have been transferred inside outgoing UDP datagrams</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3142,href:"https://www.4players.io/odin/sdk/unity/1.5.8/structs/odinconnectionstats/udp_tx_datagrams/",title:"udp_tx_datagrams",section:"ODIN Documentation",description:" The amount of outgoing UDP datagrams observed ",content:`<pre><code class="language-C#">public ulong udp_tx_datagrams
</code></pre>
<p>The amount of outgoing UDP datagrams observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3143,href:"https://www.4players.io/odin/sdk/unity/1.6.6/structs/odinconnectionstats/udp_tx_datagrams/",title:"udp_tx_datagrams",section:"ODIN Documentation",description:" The amount of outgoing UDP datagrams observed ",content:`<pre><code class="language-C#">public ulong udp_tx_datagrams
</code></pre>
<p>The amount of outgoing UDP datagrams observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3144,href:"https://www.4players.io/odin/sdk/unity/structs/odinconnectionstats/udp_tx_datagrams/",title:"udp_tx_datagrams",section:"ODIN Documentation",description:" The amount of outgoing UDP datagrams observed ",content:`<pre><code class="language-C#">public ulong udp_tx_datagrams
</code></pre>
<p>The amount of outgoing UDP datagrams observed</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3145,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/mediarpcproperties/uid/",title:"uId",section:"ODIN Documentation",description:" preset field of an unique id ",content:`<pre><code class="language-C#">public string uId
</code></pre>
<p>preset field of an unique id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3146,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint16/",title:"Uint16",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Uint16 = 205
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3147,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint32/",title:"Uint32",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Uint32 = 206
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3148,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint64/",title:"Uint64",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Uint64 = 207
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3149,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpacktoken/uint8/",title:"Uint8",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public const byte Uint8 = 204
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3150,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/unityaudiodata/",title:"UnityAudioData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class UnityAudioData : UnityEvent&lt;float[], int, bool&gt;
</code></pre>
`}),e.add({id:3151,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/unityaudiosourcetag/",title:"UnityAudioSourceTag",section:"ODIN Documentation",description:" Identify by Unity-Tag to attach a ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public readonly string UnityAudioSourceTag
</code></pre>
<p>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3152,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/unityaudiosourcetag/",title:"UnityAudioSourceTag",section:"ODIN Documentation",description:" Identify by Unity-Tag to attach a ",content:`<pre><code class="language-C#">public readonly string UnityAudioSourceTag
</code></pre>
<p>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3153,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/unityaudiosourcetag/",title:"UnityAudioSourceTag",section:"ODIN Documentation",description:" Identify by Unity-Tag to attach a ",content:`<pre><code class="language-C#">public readonly string UnityAudioSourceTag
</code></pre>
<p>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3154,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/unityaudiosourcetag/",title:"UnityAudioSourceTag",section:"ODIN Documentation",description:" Identify by Unity-Tag to attach a ",content:`<pre><code class="language-C#">public readonly string UnityAudioSourceTag
</code></pre>
<p>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3155,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/unityaudiosourcetag/",title:"UnityAudioSourceTag",section:"ODIN Documentation",description:" Identify by Unity-Tag to attach a ",content:`<pre><code class="language-C#">public readonly string UnityAudioSourceTag
</code></pre>
<p>Identify <see cref="!:UnityEngine.GameObject"></see> by Unity-Tag to attach a Audio</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3156,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/unitycreatedmediaobject/",title:"UnityCreatedMediaObject",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, long&gt;
</code></pre>
`}),e.add({id:3157,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/unitycreatedmediaobject/",title:"UnityCreatedMediaObject",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">[Serializable]
public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, long&gt;
</code></pre>
`}),e.add({id:3158,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/unitycreatedmediaobject/",title:"UnityCreatedMediaObject",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, long&gt;
</code></pre>
`}),e.add({id:3159,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/unitycreatedmediaobject/",title:"UnityCreatedMediaObject",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">[Serializable]
public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, long&gt;
</code></pre>
`}),e.add({id:3160,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/unitycreatedmediaobject/",title:"UnityCreatedMediaObject",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public class UnityCreatedMediaObject : UnityEvent&lt;ulong, ulong, ushort&gt;
</code></pre>
`}),e.add({id:3161,href:"https://www.4players.io/odin/sdk/unity/classes/unitycreatedmediaobject/",title:"UnityCreatedMediaObject",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">[Serializable]
public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, long&gt;
</code></pre>
`}),e.add({id:3162,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/unitydeletemediaobject/",title:"UnityDeleteMediaObject",section:"ODIN Documentation",description:" Unity Inspector event wrapper (UnityEvent) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class UnityDeleteMediaObject : UnityEvent&lt;long&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:3163,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/unitydeletemediaobject/",title:"UnityDeleteMediaObject",section:"ODIN Documentation",description:" Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class UnityDeleteMediaObject : UnityEvent&lt;long&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:3164,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/unitydeletemediaobject/",title:"UnityDeleteMediaObject",section:"ODIN Documentation",description:" Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class UnityDeleteMediaObject : UnityEvent&lt;long&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:3165,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/unitydeletemediaobject/",title:"UnityDeleteMediaObject",section:"ODIN Documentation",description:" Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class UnityDeleteMediaObject : UnityEvent&lt;long&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:3166,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/unitydeletemediaobject/",title:"UnityDeleteMediaObject",section:"ODIN Documentation",description:" Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">public class UnityDeleteMediaObject : UnityEvent&lt;ushort&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:3167,href:"https://www.4players.io/odin/sdk/unity/classes/unitydeletemediaobject/",title:"UnityDeleteMediaObject",section:"ODIN Documentation",description:" Unity Inspector event wrapper (UnityEvent) ",content:`<pre><code class="language-C#">[Serializable]
public class UnityDeleteMediaObject : UnityEvent&lt;long&gt;
</code></pre>
<h1 id="heading"></h1>
<p>Unity Inspector event wrapper <a href="https://docs.unity3d.com/ScriptReference/Events.UnityEvent.html">(UnityEvent)</a></p>
`}),e.add({id:3168,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/unlinkinputmedia/",title:"UnlinkInputMedia",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual bool UnlinkInputMedia(MediaEncoder encoder, bool free = true)
</code></pre>
<p>Remove a input media encoder from the corresponding room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>encoder</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediaencoder/">MediaEncoder</a></td>
<td>input media</td>
</tr>
<tr>
<td>free</td>
<td>Boolean</td>
<td>flag if the freed up encoder id will be available for the room again</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on stop or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3169,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/update/",title:"update",section:"ODIN Documentation",description:"Sends user data of the peer to the server.",content:`<pre><code class="language-C#">update(): Promise&lt;void&gt;
</code></pre>
<p>Sends user data of the peer to the server.</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Promise&lt;void&gt;</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3170,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/piplineeffect/updateapmplayback/",title:"UpdateApmPlayback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual OdinError UpdateApmPlayback(NativeBindings.OdinAudioReadOnlyData audio)
</code></pre>
<p>Send samples for native audio processing</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/">OdinAudioReadOnlyData</a></td>
<td>samples</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:3171,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/updateapmplayback/",title:"UpdateApmPlayback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public override OdinError UpdateApmPlayback(OdinAudioReadOnlyData audio)
</code></pre>
<p>Not supported</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/">OdinAudioReadOnlyData</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3172,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/ipiplineeffect/updateapmplayback/",title:"UpdateApmPlayback",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">NativeBindings.OdinError UpdateApmPlayback(NativeBindings.OdinAudioReadOnlyData audio)
</code></pre>
<p>Send samples for native audio processing</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Only successful on OdinEffectType</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>audio</td>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinaudioreadonlydata/">OdinAudioReadOnlyData</a></td>
<td>samples</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/odinerror/">OdinError</a></td>
<td><xref href="OdinNative.Core.Imports.NativeBindings.OdinError.ODIN_ERROR_SUCCESS" data-throw-if-not-resolved="false"></xref> or error</td>
</tr>
</tbody>
</table>
`}),e.add({id:3173,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinapmcomponent/updateconfig/",title:"UpdateConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void UpdateConfig()
public void UpdateConfig(MediaPipeline pipeline)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="updateconfig">UpdateConfig()</h3>
<pre><code class="language-C#">public void UpdateConfig()
</code></pre>
<h3 id="updateconfigpipeline">UpdateConfig(pipeline)</h3>
<pre><code class="language-C#">public void UpdateConfig(MediaPipeline pipeline)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3174,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/updateconfig/",title:"UpdateConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void UpdateConfig()
public void UpdateConfig(MediaPipeline pipeline)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="updateconfig">UpdateConfig()</h3>
<pre><code class="language-C#">public void UpdateConfig()
</code></pre>
<h3 id="updateconfigpipeline">UpdateConfig(pipeline)</h3>
<pre><code class="language-C#">public void UpdateConfig(MediaPipeline pipeline)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3175,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/apmeffect/updateeffectconfig/",title:"UpdateEffectConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdateEffectConfig(MediaPipeline pipeline)
</code></pre>
<p>Set audio processing configuration</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>pipeline</td>
<td><a href="/odin/sdk/unity/2.0.0/classes/mediapipeline/">MediaPipeline</a></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3176,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/updateeffectconfig/",title:"UpdateEffectConfig",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdateEffectConfig()
</code></pre>
<p>Set voice activity configuration</p>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true on success or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3177,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/updateownuserdata/",title:"updateOwnUserData",section:"ODIN Documentation",description:"Updates the peer user data of the local peer",content:`<pre><code class="language-C#">public updateOwnUserData(userData: Uint8Array): void
</code></pre>
<p>Updates the peer user data of the local peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td>Uint8Array</td>
<td>The new user data to set.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3178,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/updatepeeruserdata/",title:"UpdatePeerUserData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool UpdatePeerUserData(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3179,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/updatepeeruserdata/",title:"UpdatePeerUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePeerUserData(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3180,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/updatepeeruserdata/",title:"UpdatePeerUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePeerUserData(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3181,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/updatepeeruserdata/",title:"UpdatePeerUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePeerUserData(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3182,href:"https://www.4players.io/odin/sdk/unity/classes/room/updatepeeruserdata/",title:"UpdatePeerUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePeerUserData(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3183,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/updatepeeruserdataasync/",title:"UpdatePeerUserDataAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;bool&gt; UpdatePeerUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3184,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/updatepeeruserdataasync/",title:"UpdatePeerUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdatePeerUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3185,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/updatepeeruserdataasync/",title:"UpdatePeerUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdatePeerUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3186,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/updatepeeruserdataasync/",title:"UpdatePeerUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdatePeerUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3187,href:"https://www.4players.io/odin/sdk/unity/classes/room/updatepeeruserdataasync/",title:"UpdatePeerUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdatePeerUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for our own peer.
The server will populate this data to all other visible peers in the same room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the peer or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3188,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odindatagramrecv/updatepinnedpayload/",title:"UpdatePinnedPayload",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public GCHandle UpdatePinnedPayload(byte[] data)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>GCHandle</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3189,href:"https://www.4players.io/odin/sdk/nodejs/classes/odinroom/updateposition/",title:"updatePosition",section:"ODIN Documentation",description:"Updates the three-dimensional position of the current peer in this room. The server utilizes the provided coordinates to perform automatic culling among peers in the same room, based on unit circles with a radius of `1.0`. This feature is particularly beneficial in scenarios involving a large number of peers within the same room, enabling peers to interact or 'see' each other only when in close proximity. To modify the distance sensitivity for position updates, use `setPositionScale`. Note: Use this before calling `join` to set the initial peer position upon connect.",content:`<pre><code class="language-C#">public updatePosition(x: number, y: number, z: number): void
</code></pre>
<p>Updates the three-dimensional position of the current peer in this room.
The server utilizes the provided coordinates to perform automatic culling among peers in the same
room, based on unit circles with a radius of <code>1.0</code>. This feature is particularly beneficial in
scenarios involving a large number of peers within the same room, enabling peers to interact or
&lsquo;see&rsquo; each other only when in close proximity. To modify the distance sensitivity for position
updates, use <code>setPositionScale</code>.</p>
<p>Note: Use this before calling <code>join</code> to set the initial peer position upon connect.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>number</td>
<td>The new x position of the peer.</td>
</tr>
<tr>
<td>y</td>
<td>number</td>
<td>The new y position of the peer.</td>
</tr>
<tr>
<td>z</td>
<td>number</td>
<td>The new z position of the peer.</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3190,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async void UpdatePosition(float x, float y)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with SetPositionScale(System.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:3191,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool UpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3192,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdatePosition(float x, float y)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with SetPositionScale(System.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:3193,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3194,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdatePosition(float x, float y)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with SetPositionScale(System.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:3195,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3196,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdatePosition(float x, float y)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with SetPositionScale(System.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:3197,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/room/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3198,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdatePosition(float x, float y)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a></p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with SetPositionScale(System.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
`}),e.add({id:3199,href:"https://www.4players.io/odin/sdk/unity/classes/room/updateposition/",title:"UpdatePosition",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdatePosition(float x, float y)
</code></pre>
<p>Updates the two-dimensional position of our own peer in the room</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This should <em>only</em> be used after configuring the room with RoomSetPositionScale(RoomHandle%2cSystem.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>x</td>
<td>Single</td>
<td>x postition</td>
</tr>
<tr>
<td>y</td>
<td>Single</td>
<td>y postition</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if set or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3200,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/updateroomuserdata/",title:"UpdateRoomUserData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool UpdateRoomUserData(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3201,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/updateroomuserdata/",title:"UpdateRoomUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdateRoomUserData(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3202,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/updateroomuserdata/",title:"UpdateRoomUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdateRoomUserData(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3203,href:"https://www.4players.io/odin/sdk/unity/classes/room/updateroomuserdata/",title:"UpdateRoomUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool UpdateRoomUserData(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3204,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/room/updateroomuserdataasync/",title:"UpdateRoomUserDataAsync",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async Task&lt;bool&gt; UpdateRoomUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3205,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/room/updateroomuserdataasync/",title:"UpdateRoomUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdateRoomUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3206,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/room/updateroomuserdataasync/",title:"UpdateRoomUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdateRoomUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3207,href:"https://www.4players.io/odin/sdk/unity/classes/room/updateroomuserdataasync/",title:"UpdateRoomUserDataAsync",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async Task&lt;bool&gt; UpdateRoomUserDataAsync(IUserData userData)
</code></pre>
<p>Updates the user data for the current room.</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td>Userdata to send</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;Boolean&gt;</td>
<td>true if userdata was set for the room or false</td>
</tr>
</tbody>
</table>
`}),e.add({id:3208,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public async void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.UserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3209,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the UserData for all <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.IUserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3210,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.UserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3211,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.IUserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3212,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.UserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3213,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.IUserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3214,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.UserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3215,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.IUserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3216,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/room/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; UpdateUserData(IUserData userData)
public virtual Task&lt;RpcResult&gt; UpdateUserData(byte[] bytes)
</code></pre>
<p>Update arbitrary userdata of self (note: Odin)</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></td>
<td>arbitrary data</td>
</tr>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td>raw binary data</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="updateuserdatauserdata">UpdateUserData(userData)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; UpdateUserData(IUserData userData)
</code></pre>
<p>Update arbitrary userdata of self (note: Odin)</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></td>
<td>arbitrary data</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
<h3 id="updateuserdatabytes">UpdateUserData(bytes)</h3>
<pre><code class="language-C#">public virtual Task&lt;RpcResult&gt; UpdateUserData(byte[] bytes)
</code></pre>
<p>Update binary userdata of self (note: Odin)</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Be aware that the task is created for resolving Msgpack request/response result as Room. Unless handled correctly <strong>should not be awaited by the corresponding context</strong>.</p>
</div>
</div>

<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>Byte[]</td>
<td>raw binary data</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Task&lt;RpcResult&gt;</td>
<td>Thunk task that will not run (see <xref href="OdinNative.Odin.Room.Room.RpcTableThunk" data-throw-if-not-resolved="false"></xref>)</td>
</tr>
</tbody>
</table>
`}),e.add({id:3217,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public async void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinclient/rooms/">Rooms</a> for the current peer</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.UserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3218,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/updateuserdata/",title:"UpdateUserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public void UpdateUserData(IUserData userData)
</code></pre>
<p>Updates the <a href="/odin/sdk/unity/classes/odinhandler/rooms/">Rooms</a></p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>userData</td>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td><xref href="OdinNative.Odin.IUserData" data-throw-if-not-resolved="false"></xref></td>
</tr>
</tbody>
</table>
`}),e.add({id:3219,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/updatevadthresholds/",title:"updateVADThresholds",section:"ODIN Documentation",description:"Updates thresholds for vice activity detection (between 0 and 1).",content:`<pre><code class="language-C#">updateVADThresholds(attackProbability: number, releaseProbability?: number): void
</code></pre>
<p>Updates thresholds for vice activity detection (between 0 and 1).</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>attackProbability</td>
<td>number</td>
<td>Voice probability value when the VAD should engage</td>
</tr>
<tr>
<td>releaseProbability</td>
<td>number</td>
<td>Voice probability value when the VAD should disengage</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3220,href:"https://www.4players.io/odin/sdk/web/classes/odinroom/updatevolumegatethresholds/",title:"updateVolumeGateThresholds",section:"ODIN Documentation",description:"Updates thresholds for the input volume gate (between -90 and 0).",content:`<pre><code class="language-C#">updateVolumeGateThresholds(attackLoudness: number, releaseLoudness?: number): void
</code></pre>
<p>Updates thresholds for the input volume gate (between -90 and 0).</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>attackLoudness</td>
<td>number</td>
<td>Root mean square power (dBFS) when the volume gate should engage</td>
</tr>
<tr>
<td>releaseLoudness</td>
<td>number</td>
<td>Root mean square power (dBFS) when the volume gate should disengage</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>void</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3221,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinhandler/use3daudio/",title:"Use3DAudio",section:"ODIN Documentation",description:" Enable 3D Audio via preset ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Use3DAudio
</code></pre>
<p>Enable 3D Audio via preset Odin</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3222,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinhandler/use3daudio/",title:"Use3DAudio",section:"ODIN Documentation",description:" Enable 3D Audio via preset ",content:`<pre><code class="language-C#">public bool Use3DAudio
</code></pre>
<p>Enable 3D Audio via preset Odin</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3223,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinhandler/use3daudio/",title:"Use3DAudio",section:"ODIN Documentation",description:" Enable 3D Audio via preset ",content:`<pre><code class="language-C#">public bool Use3DAudio
</code></pre>
<p>Enable 3D Audio via preset Odin</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3224,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinhandler/use3daudio/",title:"Use3DAudio",section:"ODIN Documentation",description:" Enable 3D Audio via preset ",content:`<pre><code class="language-C#">public bool Use3DAudio
</code></pre>
<p>Enable 3D Audio via preset Odin</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3225,href:"https://www.4players.io/odin/sdk/unity/classes/odinhandler/use3daudio/",title:"Use3DAudio",section:"ODIN Documentation",description:" Enable 3D Audio via preset ",content:`<pre><code class="language-C#">public bool Use3DAudio
</code></pre>
<p>Enable 3D Audio via preset Odin</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Currently no effect</p>
</div>
</div>

<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3226,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinconnectionpoolsettings/user_data/",title:"user_data",section:"ODIN Documentation",description:" IntPtr ",content:`<pre><code class="language-C#">public MarshalByRefObject user_data
</code></pre>
<p><code>IntPtr</code></p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>MarshalByRefObject</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3227,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/userdata/",title:"userData",section:"ODIN Documentation",description:"The user data of the peer that joined.",content:`<pre><code class="language-C#">public userData: undefined | Uint8Array
</code></pre>
<p>The user data of the peer that joined.</p>
`}),e.add({id:3228,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeeruserdatachangedeventpayload/userdata/",title:"userData",section:"ODIN Documentation",description:"The new user data of the peer.",content:`<pre><code class="language-C#">public userData: undefined | Uint8Array
</code></pre>
<p>The new user data of the peer.</p>
`}),e.add({id:3229,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinroomuserdatachangedeventpayload/userdata/",title:"userData",section:"ODIN Documentation",description:"The new user data of the room.",content:`<pre><code class="language-C#">public userData: undefined | Uint8Array
</code></pre>
<p>The new user data of the room.</p>
`}),e.add({id:3230,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/datagrameventargs/userdata/",title:"Userdata",section:"ODIN Documentation",description:" unused ",content:`<pre><code class="language-C#">public MarshalByRefObject Userdata { get; }
</code></pre>
<p>unused</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>MarshalByRefObject</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3231,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpceventargs/userdata/",title:"Userdata",section:"ODIN Documentation",description:" unused ",content:`<pre><code class="language-C#">public MarshalByRefObject Userdata { get; }
</code></pre>
<p>unused</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>MarshalByRefObject</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3232,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinclient/userdata/",title:"UserData",section:"ODIN Documentation",description:" Client custom UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public IUserData UserData { get; set; }
</code></pre>
<p>Client custom UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3233,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/userdata/",title:"UserData",section:"ODIN Documentation",description:" Peer userdata ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public UserData UserData { get; }
</code></pre>
<p>Peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3234,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peeruserdatachangedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public UserData UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3235,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/userdata/",title:"UserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public class UserData : IUserData
</code></pre>
<h1 id="heading"></h1>
<p>Odin UserData helper for marshal byte arrays</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/encoding/">Encoding</a></td>
<td>Encoding</td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/buffer/">Buffer</a></td>
<td>Byte[]</td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/copyfrom/">CopyFrom</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/contains/">Contains</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/patternat/">PatternAt</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/clone/">Clone</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/userdata/tostring/">ToString</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3236,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinclient/userdata/",title:"UserData",section:"ODIN Documentation",description:" Client custom UserData ",content:`<pre><code class="language-C#">public IUserData UserData { get; set; }
</code></pre>
<p>Client custom UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3237,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/userdata/",title:"UserData",section:"ODIN Documentation",description:" Peer userdata ",content:`<pre><code class="language-C#">public UserData UserData { get; }
</code></pre>
<p>Peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3238,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peeruserdatachangedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`<pre><code class="language-C#">public UserData UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3239,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/userdata/",title:"UserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays ",content:`<pre><code class="language-C#">public class UserData : IUserData
</code></pre>
<h1 id="heading"></h1>
<p>Odin UserData helper for marshal byte arrays</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/encoding/">Encoding</a></td>
<td>Encoding</td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/buffer/">Buffer</a></td>
<td>Byte[]</td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/copyfrom/">CopyFrom</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/contains/">Contains</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/patternat/">PatternAt</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/clone/">Clone</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/userdata/tostring/">ToString</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3240,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinclient/userdata/",title:"UserData",section:"ODIN Documentation",description:" Client custom UserData ",content:`<pre><code class="language-C#">public IUserData UserData { get; set; }
</code></pre>
<p>Client custom UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3241,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/userdata/",title:"UserData",section:"ODIN Documentation",description:" Peer userdata ",content:`<pre><code class="language-C#">public UserData UserData { get; }
</code></pre>
<p>Peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3242,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peeruserdatachangedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`<pre><code class="language-C#">public UserData UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3243,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/userdata/",title:"UserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays ",content:`<pre><code class="language-C#">public class UserData : IUserData
</code></pre>
<h1 id="heading"></h1>
<p>Odin UserData helper for marshal byte arrays</p>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/encoding/">Encoding</a></td>
<td>Encoding</td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/buffer/">Buffer</a></td>
<td>Byte[]</td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/copyfrom/">CopyFrom</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/contains/">Contains</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/patternat/">PatternAt</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/clone/">Clone</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/userdata/tostring/">ToString</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3244,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinclient/userdata/",title:"UserData",section:"ODIN Documentation",description:" Client custom UserData ",content:`<pre><code class="language-C#">public IUserData UserData { get; set; }
</code></pre>
<p>Client custom UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3245,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/userdata/",title:"UserData",section:"ODIN Documentation",description:" Peer userdata ",content:`<pre><code class="language-C#">public UserData UserData { get; }
</code></pre>
<p>Peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3246,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peeruserdatachangedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`<pre><code class="language-C#">public UserData UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3247,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/",title:"UserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays ",content:`<pre><code class="language-C#">public class UserData : IUserData
</code></pre>
<h1 id="heading"></h1>
<p>Odin UserData helper for marshal byte arrays</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/constructor_0/">UserData(String)</a></td>
<td>Odin UserData with default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/constructor_1/">UserData(String, Encoding)</a></td>
<td>Odin UserData with custom encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/constructor_2/">UserData(Byte[])</a></td>
<td>Odin UserData with default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/constructor_3/">UserData(Byte[], Encoding)</a></td>
<td>Odin UserData with custom encoding</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/encoding/">Encoding</a></td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/buffer/">Buffer</a></td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/copyfrom/">CopyFrom</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/contains/">Contains</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/patternat/">PatternAt</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/clone/">Clone</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/userdata/tostring/">ToString</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3248,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinclient/userdata/",title:"UserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IUserData UserData { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3249,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/userdata/",title:"UserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IUserData UserData { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3250,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/userdata/",title:"UserData",section:"ODIN Documentation",description:" Peer userdata ",content:`<pre><code class="language-C#">public IUserData UserData { get; }
</code></pre>
<p>Peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3251,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData UserData
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3252,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peeruserdatachangedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`<pre><code class="language-C#">public UserData UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3253,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/",title:"UserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays ",content:`<pre><code class="language-C#">public class UserData : IUserData
</code></pre>
<h1 id="heading"></h1>
<p>Odin UserData helper for marshal byte arrays</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/constructor_0/">UserData(String)</a></td>
<td>Odin UserData with default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/constructor_1/">UserData(String, Encoding)</a></td>
<td>Odin UserData with custom encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/constructor_2/">UserData(Byte[])</a></td>
<td>Odin UserData with default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/constructor_3/">UserData(Byte[], Encoding)</a></td>
<td>Odin UserData with custom encoding</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/encoding/">Encoding</a></td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/buffer/">Buffer</a></td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/copyfrom/">CopyFrom</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/contains/">Contains</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/patternat/">PatternAt</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/clone/">Clone</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/userdata/tostring/">ToString</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3254,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/peerrpc/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`<pre><code class="language-C#">public byte[] UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3255,href:"https://www.4players.io/odin/sdk/unity/classes/odinclient/userdata/",title:"UserData",section:"ODIN Documentation",description:" Client custom UserData ",content:`<pre><code class="language-C#">public IUserData UserData { get; set; }
</code></pre>
<p>Client custom UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/interfaces/iuserdata/">IUserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3256,href:"https://www.4players.io/odin/sdk/unity/classes/peer/userdata/",title:"UserData",section:"ODIN Documentation",description:" Peer userdata ",content:`<pre><code class="language-C#">public UserData UserData { get; }
</code></pre>
<p>Peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3257,href:"https://www.4players.io/odin/sdk/unity/classes/peeruserdatachangedeventargs/userdata/",title:"UserData",section:"ODIN Documentation",description:" peer userdata ",content:`<pre><code class="language-C#">public UserData UserData
</code></pre>
<p>peer userdata</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/">UserData</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3258,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/",title:"UserData",section:"ODIN Documentation",description:" Odin UserData helper for marshal byte arrays ",content:`<pre><code class="language-C#">public class UserData : IUserData
</code></pre>
<h1 id="heading"></h1>
<p>Odin UserData helper for marshal byte arrays</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/constructor_0/">UserData(String)</a></td>
<td>Odin UserData with default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/constructor_1/">UserData(String, Encoding)</a></td>
<td>Odin UserData with custom encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/constructor_2/">UserData(Byte[])</a></td>
<td>Odin UserData with default encoding UTF8</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/constructor_3/">UserData(Byte[], Encoding)</a></td>
<td>Odin UserData with custom encoding</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/encoding/">Encoding</a></td>
<td>Default Encoding</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/buffer/">Buffer</a></td>
<td>Raw UserData</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/copyfrom/">CopyFrom</a></td>
<td>Copies data from memory to Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/isempty/">IsEmpty</a></td>
<td>Indicates whether data is null or empty</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/contains/">Contains</a></td>
<td>Indicates whether substring occurs</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/patternat/">PatternAt</a></td>
<td>Indicates whether two sequence are equal</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/clone/">Clone</a></td>
<td>Creates a shallow copy of the Buffer</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/tobytes/">ToBytes</a></td>
<td>Used for converting Data on network level</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/userdata/tostring/">ToString</a></td>
<td>String representation of Buffer based on the specified encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3259,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/constructor_3/",title:"UserData(Byte[], Encoding)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(byte[] data, Encoding encoding)
</code></pre>
<p>Odin UserData with custom encoding</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>raw representation</td>
</tr>
<tr>
<td>encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3260,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/constructor_3/",title:"UserData(Byte[], Encoding)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(byte[] data, Encoding encoding)
</code></pre>
<p>Odin UserData with custom encoding</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>raw representation</td>
</tr>
<tr>
<td>encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3261,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/constructor_3/",title:"UserData(Byte[], Encoding)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(byte[] data, Encoding encoding)
</code></pre>
<p>Odin UserData with custom encoding</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>raw representation</td>
</tr>
<tr>
<td>encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3262,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/constructor_2/",title:"UserData(Byte[])",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(byte[] data)
</code></pre>
<p>Odin UserData with default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>raw representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3263,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/constructor_2/",title:"UserData(Byte[])",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(byte[] data)
</code></pre>
<p>Odin UserData with default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>raw representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3264,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/constructor_2/",title:"UserData(Byte[])",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(byte[] data)
</code></pre>
<p>Odin UserData with default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>data</td>
<td>raw representation</td>
</tr>
</tbody>
</table>
`}),e.add({id:3265,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/constructor_1/",title:"UserData(String, Encoding)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(string text, Encoding encoding)
</code></pre>
<p>Odin UserData with custom encoding</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>text</td>
<td>string representation of userdata</td>
</tr>
<tr>
<td>encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3266,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/constructor_1/",title:"UserData(String, Encoding)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(string text, Encoding encoding)
</code></pre>
<p>Odin UserData with custom encoding</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>text</td>
<td>string representation of userdata</td>
</tr>
<tr>
<td>encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3267,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/constructor_1/",title:"UserData(String, Encoding)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(string text, Encoding encoding)
</code></pre>
<p>Odin UserData with custom encoding</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>text</td>
<td>string representation of userdata</td>
</tr>
<tr>
<td>encoding</td>
<td>custom encoding</td>
</tr>
</tbody>
</table>
`}),e.add({id:3268,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/userdata/constructor_0/",title:"UserData(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(string text)
</code></pre>
<p>Odin UserData with default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>text</td>
<td>string representation of userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:3269,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/userdata/constructor_0/",title:"UserData(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(string text)
</code></pre>
<p>Odin UserData with default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>text</td>
<td>string representation of userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:3270,href:"https://www.4players.io/odin/sdk/unity/classes/userdata/constructor_0/",title:"UserData(String)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public UserData(string text)
</code></pre>
<p>Odin UserData with default encoding UTF8</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>text</td>
<td>string representation of userdata</td>
</tr>
</tbody>
</table>
`}),e.add({id:3271,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinpeerevents/userdatachanged/",title:"UserDataChanged",section:"ODIN Documentation",description:"Peer updated its user data.",content:`<pre><code class="language-C#">OdinPeerDataChangedEvent
</code></pre>
<p>Peer updated its user data.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinpeerdatachangedevent/">OdinPeerDataChangedEvent</a></p>
`}),e.add({id:3272,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/userdatachanged/",title:"UserDataChanged",section:"ODIN Documentation",description:"The global room user data was updated.",content:`<pre><code class="language-C#">OdinRoomDataChangedEvent
</code></pre>
<p>The global room user data was updated.</p>
<h2 id="see-also">See also</h2>
<p><a href="/odin/sdk/web/types/odinroomdatachangedevent/">OdinRoomDataChangedEvent</a></p>
`}),e.add({id:3273,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default text representation of UserData ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static string UserDataText { get; set; }
</code></pre>
<p>Default text representation of UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3274,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default UserData content ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string UserDataText
</code></pre>
<p>Default UserData content</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3275,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default text representation of UserData ",content:`<pre><code class="language-C#">public static string UserDataText { get; set; }
</code></pre>
<p>Default text representation of UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3276,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default UserData content ",content:`<pre><code class="language-C#">public string UserDataText
</code></pre>
<p>Default UserData content</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3277,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default text representation of UserData ",content:`<pre><code class="language-C#">public static string UserDataText { get; set; }
</code></pre>
<p>Default text representation of UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3278,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default UserData content ",content:`<pre><code class="language-C#">public string UserDataText
</code></pre>
<p>Default UserData content</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3279,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default text representation of UserData ",content:`<pre><code class="language-C#">public static string UserDataText { get; set; }
</code></pre>
<p>Default text representation of UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3280,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default UserData content ",content:`<pre><code class="language-C#">public string UserDataText
</code></pre>
<p>Default UserData content</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3281,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default text representation of UserData ",content:`<pre><code class="language-C#">public static string UserDataText { get; set; }
</code></pre>
<p>Default text representation of UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3282,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default text representation of UserData ",content:`<pre><code class="language-C#">public static string UserDataText { get; set; }
</code></pre>
<p>Default text representation of UserData</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3283,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/userdatatext/",title:"UserDataText",section:"ODIN Documentation",description:" Default UserData content ",content:`<pre><code class="language-C#">public string UserDataText
</code></pre>
<p>Default UserData content</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3284,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinpeerjoinedeventpayload/userid/",title:"userId",section:"ODIN Documentation",description:"The ID of the user that joined.",content:`<pre><code class="language-C#">public userId: string
</code></pre>
<p>The ID of the user that joined.</p>
`}),e.add({id:3285,href:"https://www.4players.io/odin/sdk/web/classes/odinpeer/userid/",title:"userId",section:"ODIN Documentation",description:"The identifier of the peer.",content:`<pre><code class="language-C#">string
</code></pre>
<p>The identifier of the peer.</p>
`}),e.add({id:3286,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peer/userid/",title:"UserId",section:"ODIN Documentation",description:" Peers user id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>Peers user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3287,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/peerjoinedeventargs/userid/",title:"UserId",section:"ODIN Documentation",description:" user Id ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>user Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3288,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peer/userid/",title:"UserId",section:"ODIN Documentation",description:" Peers user id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>Peers user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3289,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/peerjoinedeventargs/userid/",title:"UserId",section:"ODIN Documentation",description:" user Id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>user Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3290,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peer/userid/",title:"UserId",section:"ODIN Documentation",description:" Peers user id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>Peers user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3291,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/peerjoinedeventargs/userid/",title:"UserId",section:"ODIN Documentation",description:" user Id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>user Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3292,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peer/userid/",title:"UserId",section:"ODIN Documentation",description:" Peers user id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>Peers user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3293,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/peerjoinedeventargs/userid/",title:"UserId",section:"ODIN Documentation",description:" user Id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>user Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3294,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinpeer/userid/",title:"UserId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3295,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerentity/userid/",title:"UserId",section:"ODIN Documentation",description:" Peers user id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>Peers user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3296,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/peerjoinedeventargs/userid/",title:"UserId",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public string UserId
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3297,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/peerrpc/userid/",title:"UserId",section:"ODIN Documentation",description:" token user id ",content:`<pre><code class="language-C#">public string UserId
</code></pre>
<p>token user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3298,href:"https://www.4players.io/odin/sdk/unity/classes/peer/userid/",title:"UserId",section:"ODIN Documentation",description:" Peers user id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>Peers user id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3299,href:"https://www.4players.io/odin/sdk/unity/classes/peerjoinedeventargs/userid/",title:"UserId",section:"ODIN Documentation",description:" user Id ",content:`<pre><code class="language-C#">public string UserId { get; }
</code></pre>
<p>user Id</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3300,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/utility/",title:"Utility",section:"ODIN Documentation",description:" ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static class Utility
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/utility/ok/">OK</a></td>
<td>UInt32</td>
<td>Representative ErrorCode for Ok.</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/utility/ratetosamples/">RateToSamples</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/classes/utility/iserror/">IsError</a></td>
<td>Determines if the specified error code identifies an actual error.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3301,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/utility/",title:"Utility",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public static class Utility
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/utility/ok/">OK</a></td>
<td>UInt32</td>
<td>Representative ErrorCode for Ok.</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/utility/ratetosamples/">RateToSamples</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/classes/utility/iserror/">IsError</a></td>
<td>Determines if the specified error code identifies an actual error.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3302,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/utility/",title:"Utility",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public static class Utility
</code></pre>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/utility/ok/">OK</a></td>
<td>UInt32</td>
<td>Representative ErrorCode for Ok.</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/utility/ratetosamples/">RateToSamples</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/classes/utility/iserror/">IsError</a></td>
<td>Determines if the specified error code identifies an actual error.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3303,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/utility/",title:"Utility",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public static class Utility
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/utility/ratetosamples/">RateToSamples</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/utility/iserror/">IsError</a></td>
<td>Determines if the specified error code identifies an actual error.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/classes/utility/ok/">OK</a></td>
<td>Representative ErrorCode for Ok.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3304,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/utility/",title:"Utility",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public static class Utility
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/getnativebuffer/">GetNativeBuffer</a></td>
<td>Get Odin native buffer IntPtr data</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/test/">Test</a></td>
<td></td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/isok/">IsOk</a></td>
<td>Checks the return code for errors</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/odinerrortostring/">OdinErrorToString</a></td>
<td>Retrieves the name of the constant in the specified NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/ratetosamples/">RateToSamples</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/utility/min_dbfs/">MIN_DBFS</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3305,href:"https://www.4players.io/odin/sdk/unity/classes/utility/",title:"Utility",section:"ODIN Documentation",description:" ",content:`<pre><code class="language-C#">public static class Utility
</code></pre>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/utility/ratetosamples/">RateToSamples</a></td>
<td>Get sample size by samplerate and time</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/classes/utility/iserror/">IsError</a></td>
<td>Determines if the specified error code identifies an actual error.</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/classes/utility/ok/">OK</a></td>
<td>Representative ErrorCode for Ok.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3306,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/",title:"VadEffect",section:"ODIN Documentation",description:" VoiceActivity effect for ",content:`<p>Inherits from: <a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/">PiplineEffect</a></p>
<pre><code class="language-C#">public class VadEffect : PiplineEffect, IPiplineEffect
</code></pre>
<h1 id="heading"></h1>
<p>VoiceActivity effect for Odin</p>
<h2 id="constructors">Constructors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/constructor_0/">VadEffect(OdinPipelineHandle, UInt32)</a></td>
<td>Internal effect constructor, use Odin</td>
</tr>
</tbody>
</table>
<h2 id="static-methods">Static Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/create/">Create</a></td>
<td>Insert a vad effect in the specified pipline</td>
</tr>
</tbody>
</table>
<h2 id="properties">Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/config/">Config</a></td>
<td>Intern voice activity configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/voiceactivityenabled/">VoiceActivityEnabled</a></td>
<td>Idicates whether the vad setting in NativeBindings is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/voiceactivityattackthreshold/">VoiceActivityAttackThreshold</a></td>
<td>Idicates the vad attack probability setting in NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/voiceactivityreleasethreshold/">VoiceActivityReleaseThreshold</a></td>
<td>Idicates the vad release probability setting in NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/volumegateenabled/">VolumeGateEnabled</a></td>
<td>Idicates whether the gate setting in NativeBindings is enabled</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/volumegateattackthreshold/">VolumeGateAttackThreshold</a></td>
<td>Idicates the gate attack loudness setting in NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/volumegatereleasethreshold/">VolumeGateReleaseThreshold</a></td>
<td>Idicates the gate release loudness setting in NativeBindings</td>
</tr>
</tbody>
</table>
<h2 id="public-methods">Public Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/updateeffectconfig/">UpdateEffectConfig</a></td>
<td>Set voice activity configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/setvadconfig/">SetVadConfig</a></td>
<td>Set managed voice activity configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/getvadconfig/">GetVadConfig</a></td>
<td>Get native voice activity configuration</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/setapmconfig/">SetApmConfig</a></td>
<td>Not supported</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/setapmstreamdelay/">SetApmStreamDelay</a></td>
<td>Not supported</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/vadeffect/updateapmplayback/">UpdateApmPlayback</a></td>
<td>Not supported</td>
</tr>
</tbody>
</table>
<h2 id="inherited-properties">Inherited Properties</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/id/">Id</a></td>
<td>Effect id</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/index_property/">Index</a></td>
<td>Effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/parent/">Parent</a></td>
<td>Pipeline handle</td>
</tr>
</tbody>
</table>
<h2 id="inherited-methods">Inherited Methods</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffectindex/">GetEffectIndex</a></td>
<td>Get native effect index</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/geteffecttype/">GetEffectType</a></td>
<td>Get native effect NativeBindings</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/getvadconfig/">GetVadConfig</a></td>
<td>Get native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmconfig/">SetApmConfig</a></td>
<td>Set native audio processing config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setapmstreamdelay/">SetApmStreamDelay</a></td>
<td>Set native audio processing delay</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/setvadconfig/">SetVadConfig</a></td>
<td>Set native voice activity config</td>
</tr>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/classes/piplineeffect/updateapmplayback/">UpdateApmPlayback</a></td>
<td>Send samples for native audio processing</td>
</tr>
</tbody>
</table>
`}),e.add({id:3307,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/constructor_0/",title:"VadEffect(OdinPipelineHandle, UInt32)",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">protected VadEffect(OdinPipelineHandle parentHandle, uint effectId)
</code></pre>
<p>Internal effect constructor, use Odin</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>parentHandle</td>
<td>pipeline handle</td>
</tr>
<tr>
<td>effectId</td>
<td>effect id</td>
</tr>
</tbody>
</table>
`}),e.add({id:3308,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/rpcresult/value/",title:"Value",section:"ODIN Documentation",description:" result ",content:`<pre><code class="language-C#">public object Value { get; }
</code></pre>
<p>result</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Object</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3309,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional logs ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool Verbose
</code></pre>
<p>Enable additional logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3310,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional Logs ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool Verbose
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3311,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional logs ",content:`<pre><code class="language-C#">public static bool Verbose
</code></pre>
<p>Enable additional logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3312,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool Verbose
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3313,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional logs ",content:`<pre><code class="language-C#">public static bool Verbose
</code></pre>
<p>Enable additional logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3314,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool Verbose
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3315,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional logs ",content:`<pre><code class="language-C#">public static bool Verbose
</code></pre>
<p>Enable additional logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3316,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool Verbose
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3317,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional logs ",content:`<pre><code class="language-C#">public static bool Verbose
</code></pre>
<p>Enable additional logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3318,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional logs ",content:`<pre><code class="language-C#">public static bool Verbose
</code></pre>
<p>Enable additional logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3319,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/verbose/",title:"Verbose",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool Verbose
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3320,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/verbosedebug/",title:"VerboseDebug",section:"ODIN Documentation",description:" Enable additional Logs ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool VerboseDebug
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3321,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/verbosedebug/",title:"VerboseDebug",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool VerboseDebug
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3322,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/verbosedebug/",title:"VerboseDebug",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool VerboseDebug
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3323,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/verbosedebug/",title:"VerboseDebug",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool VerboseDebug
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3324,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/verbosedebug/",title:"VerboseDebug",section:"ODIN Documentation",description:" Enable additional Logs ",content:`<pre><code class="language-C#">public bool VerboseDebug
</code></pre>
<p>Enable additional Logs</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3325,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/veryhigh/",title:"VeryHigh",section:"ODIN Documentation",description:" 21 dB ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">VeryHigh = 4
</code></pre>
<p>21 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3326,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/veryhigh/",title:"VeryHigh",section:"ODIN Documentation",description:" 21 dB ",content:`<pre><code class="language-C#">VeryHigh = 4
</code></pre>
<p>21 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3327,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/veryhigh/",title:"VeryHigh",section:"ODIN Documentation",description:" 21 dB ",content:`<pre><code class="language-C#">VeryHigh = 4
</code></pre>
<p>21 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3328,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/veryhigh/",title:"VeryHigh",section:"ODIN Documentation",description:" 21 dB ",content:`<pre><code class="language-C#">VeryHigh = 4
</code></pre>
<p>21 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3329,href:"https://www.4players.io/odin/sdk/unity/enums/odinnoisesuppressionlevel/veryhigh/",title:"VeryHigh",section:"ODIN Documentation",description:" 21 dB ",content:`<pre><code class="language-C#">VeryHigh = 4
</code></pre>
<p>21 dB</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/odinnoisesuppressionlevel/">OdinNoiseSuppressionLevel</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3330,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinvadconfig/voice_activity/",title:"voice_activity",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinSensitivityConfig voice_activity
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/">OdinSensitivityConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3331,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/voiceactivityattackthreshold/",title:"VoiceActivityAttackThreshold",section:"ODIN Documentation",description:" Idicates the vad attack probability setting in ",content:`<pre><code class="language-C#">public float VoiceActivityAttackThreshold
</code></pre>
<p>Idicates the vad attack probability setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3332,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/voiceactivityattackthreshold/",title:"VoiceActivityAttackThreshold",section:"ODIN Documentation",description:" Idicates the vad attack probability setting in ",content:`<pre><code class="language-C#">public float VoiceActivityAttackThreshold { get; set; }
</code></pre>
<p>Idicates the vad attack probability setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3333,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/voiceactivitydetection/",title:"voiceActivityDetection",section:"ODIN Documentation",description:"Enables or disables voice activity detection (VAD)",content:`<pre><code class="language-C#">public voiceActivityDetection: boolean
</code></pre>
<p>Enables or disables voice activity detection (VAD)</p>
`}),e.add({id:3334,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/voiceactivitydetection/",title:"voiceActivityDetection",section:"ODIN Documentation",description:"Enable or disable RNN-based voice activity detection.",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Enable or disable RNN-based voice activity detection.</p>
`}),e.add({id:3335,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool VoiceActivityDetection
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3336,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Turns VAD on and off ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool VoiceActivityDetection
</code></pre>
<p>Turns VAD on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3337,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Enables or disables voice activity detection (VAD) ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool VoiceActivityDetection { get; set; }
</code></pre>
<p>Enables or disables voice activity detection (VAD)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3338,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VoiceActivityDetection
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3339,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Turns VAD on and off ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection
</code></pre>
<p>Turns VAD on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3340,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Enables or disables voice activity detection (VAD) ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection { get; set; }
</code></pre>
<p>Enables or disables voice activity detection (VAD)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3341,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VoiceActivityDetection
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3342,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Turns VAD on and off ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection
</code></pre>
<p>Turns VAD on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3343,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Enables or disables voice activity detection (VAD) ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection { get; set; }
</code></pre>
<p>Enables or disables voice activity detection (VAD)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3344,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VoiceActivityDetection
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3345,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Turns VAD on and off ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection
</code></pre>
<p>Turns VAD on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3346,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Enables or disables voice activity detection (VAD) ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection { get; set; }
</code></pre>
<p>Enables or disables voice activity detection (VAD)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3347,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VoiceActivityDetection
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3348,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VoiceActivityDetection
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3349,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Turns VAD on and off ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection
</code></pre>
<p>Turns VAD on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3350,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetection/",title:"VoiceActivityDetection",section:"ODIN Documentation",description:" Enables or disables voice activity detection (VAD) ",content:`<pre><code class="language-C#">public bool VoiceActivityDetection { get; set; }
</code></pre>
<p>Enables or disables voice activity detection (VAD)</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3351,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/voiceactivitydetectionattackprobability/",title:"voiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:"Voice probability value when the VAD should engage",content:`<pre><code class="language-C#">public voiceActivityDetectionAttackProbability: number
</code></pre>
<p>Voice probability value when the VAD should engage</p>
`}),e.add({id:3352,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/voiceactivitydetectionattackprobability/",title:"voiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:"Voice probability value when the VAD should engage",content:`<pre><code class="language-C#">number
</code></pre>
<p>Voice probability value when the VAD should engage</p>
`}),e.add({id:3353,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Idicates the vad attack probability ApmConfig setting by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Idicates the vad attack probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3354,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Setup engage of VAD ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Setup engage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3355,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should engage. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3356,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Idicates the vad attack probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Idicates the vad attack probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3357,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Setup engage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Setup engage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3358,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should engage. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3359,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Idicates the vad attack probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Idicates the vad attack probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3360,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Setup engage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Setup engage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3361,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should engage. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3362,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Idicates the vad attack probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Idicates the vad attack probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3363,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Setup engage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Setup engage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3364,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should engage. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3365,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Idicates the vad attack probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Idicates the vad attack probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3366,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Idicates the vad attack probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Idicates the vad attack probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3367,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Setup engage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability
</code></pre>
<p>Setup engage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3368,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetectionattackprobability/",title:"VoiceActivityDetectionAttackProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should engage. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionAttackProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3369,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/voiceactivitydetectionreleaseprobability/",title:"voiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:"Voice probability value when the VAD should disengage",content:`<pre><code class="language-C#">public voiceActivityDetectionReleaseProbability: number
</code></pre>
<p>Voice probability value when the VAD should disengage</p>
`}),e.add({id:3370,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/voiceactivitydetectionreleaseprobability/",title:"voiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:"Voice probability value when the VAD should disengage",content:`<pre><code class="language-C#">number
</code></pre>
<p>Voice probability value when the VAD should disengage</p>
`}),e.add({id:3371,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Idicates the vad release probability ApmConfig setting by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Idicates the vad release probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3372,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Setup disengage of VAD ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Setup disengage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3373,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should disengage after previously being engaged. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3374,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Idicates the vad release probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Idicates the vad release probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3375,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Setup disengage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Setup disengage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3376,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3377,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Idicates the vad release probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Idicates the vad release probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3378,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Setup disengage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Setup disengage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3379,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3380,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Idicates the vad release probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Idicates the vad release probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3381,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Setup disengage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Setup disengage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3382,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3383,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Idicates the vad release probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Idicates the vad release probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3384,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Idicates the vad release probability ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Idicates the vad release probability ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3385,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Setup disengage of VAD ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability
</code></pre>
<p>Setup disengage of VAD</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3386,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/voiceactivitydetectionreleaseprobability/",title:"VoiceActivityDetectionReleaseProbability",section:"ODIN Documentation",description:" Voice probability value when the VAD should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VoiceActivityDetectionReleaseProbability { get; set; }
</code></pre>
<p>Voice probability value when the VAD should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3387,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/voiceactivityenabled/",title:"VoiceActivityEnabled",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool VoiceActivityEnabled
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3388,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/voiceactivityenabled/",title:"VoiceActivityEnabled",section:"ODIN Documentation",description:" Idicates whether the vad setting in is enabled ",content:`<pre><code class="language-C#">public bool VoiceActivityEnabled { get; set; }
</code></pre>
<p>Idicates whether the vad setting in NativeBindings is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3389,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/voiceactivityreleasethreshold/",title:"VoiceActivityReleaseThreshold",section:"ODIN Documentation",description:" Idicates the vad release probability setting in ",content:`<pre><code class="language-C#">public float VoiceActivityReleaseThreshold
</code></pre>
<p>Idicates the vad release probability setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3390,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/voiceactivityreleasethreshold/",title:"VoiceActivityReleaseThreshold",section:"ODIN Documentation",description:" Idicates the vad release probability setting in ",content:`<pre><code class="language-C#">public float VoiceActivityReleaseThreshold { get; set; }
</code></pre>
<p>Idicates the vad release probability setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3391,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinroomevents/voiceprocessingstats/",title:"VoiceProcessingStats",section:"ODIN Documentation",description:"Internal RNN VAD stats updates.",content:`<pre><code class="language-C#">OdinVoiceProcessingStatsEvent
</code></pre>
<p>Internal RNN VAD stats updates.</p>
`}),e.add({id:3392,href:"https://www.4players.io/odin/sdk/web/classes/odinmedia/volume/",title:"volume",section:"ODIN Documentation",description:"The individual playback volume of the media stream.",content:`<pre><code class="language-C#">number
</code></pre>
<p>The individual playback volume of the media stream.</p>
`}),e.add({id:3393,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvolumecomponent/volume/",title:"Volume",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public float Volume
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3394,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/odinvadconfig/volume_gate/",title:"volume_gate",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public NativeBindings.OdinSensitivityConfig volume_gate
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/structs/odinsensitivityconfig/">OdinSensitivityConfig</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3395,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/volumegate/",title:"volumeGate",section:"ODIN Documentation",description:"Enables or disables the input volume gate",content:`<pre><code class="language-C#">public volumeGate: boolean
</code></pre>
<p>Enables or disables the input volume gate</p>
`}),e.add({id:3396,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/volumegate/",title:"volumeGate",section:"ODIN Documentation",description:"Enables or disables the input volume gate",content:`<pre><code class="language-C#">boolean
</code></pre>
<p>Enables or disables the input volume gate</p>
`}),e.add({id:3397,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static bool VolumeGate
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3398,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Turns volume gate on and off ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool VolumeGate
</code></pre>
<p>Turns volume gate on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3399,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Enables or disables volume gate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public bool VolumeGate { get; set; }
</code></pre>
<p>Enables or disables volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3400,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VolumeGate
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3401,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Turns volume gate on and off ",content:`<pre><code class="language-C#">public bool VolumeGate
</code></pre>
<p>Turns volume gate on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3402,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Enables or disables volume gate ",content:`<pre><code class="language-C#">public bool VolumeGate { get; set; }
</code></pre>
<p>Enables or disables volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3403,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VolumeGate
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3404,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Turns volume gate on and off ",content:`<pre><code class="language-C#">public bool VolumeGate
</code></pre>
<p>Turns volume gate on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3405,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Enables or disables volume gate ",content:`<pre><code class="language-C#">public bool VolumeGate { get; set; }
</code></pre>
<p>Enables or disables volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3406,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VolumeGate
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3407,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Turns volume gate on and off ",content:`<pre><code class="language-C#">public bool VolumeGate
</code></pre>
<p>Turns volume gate on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3408,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Enables or disables volume gate ",content:`<pre><code class="language-C#">public bool VolumeGate { get; set; }
</code></pre>
<p>Enables or disables volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3409,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VolumeGate
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3410,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Idicates whether the ApmConfig setting is enabled by default ",content:`<pre><code class="language-C#">public static bool VolumeGate
</code></pre>
<p>Idicates whether the ApmConfig setting is enabled by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3411,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Turns volume gate on and off ",content:`<pre><code class="language-C#">public bool VolumeGate
</code></pre>
<p>Turns volume gate on and off</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3412,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/volumegate/",title:"VolumeGate",section:"ODIN Documentation",description:" Enables or disables volume gate ",content:`<pre><code class="language-C#">public bool VolumeGate { get; set; }
</code></pre>
<p>Enables or disables volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3413,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/volumegateattackloudness/",title:"volumeGateAttackLoudness",section:"ODIN Documentation",description:"Root-mean-square power (dBFS) when the volume gate should engage",content:`<pre><code class="language-C#">public volumeGateAttackLoudness: number
</code></pre>
<p>Root-mean-square power (dBFS) when the volume gate should engage</p>
`}),e.add({id:3414,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/volumegateattackloudness/",title:"volumeGateAttackLoudness",section:"ODIN Documentation",description:"Root mean square power (dBFS) when the volume gate should engage",content:`<pre><code class="language-C#">number
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should engage</p>
`}),e.add({id:3415,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Idicates the gate attack loudness ApmConfig setting by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static float VolumeGateAttackLoudness
</code></pre>
<p>Idicates the gate attack loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3416,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Setup engage of volume gate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VolumeGateAttackLoudness
</code></pre>
<p>Setup engage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3417,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should engage. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VolumeGateAttackLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3418,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Idicates the gate attack loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateAttackLoudness
</code></pre>
<p>Idicates the gate attack loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3419,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Setup engage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness
</code></pre>
<p>Setup engage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3420,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should engage. ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3421,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Idicates the gate attack loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateAttackLoudness
</code></pre>
<p>Idicates the gate attack loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3422,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Setup engage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness
</code></pre>
<p>Setup engage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3423,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should engage. ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3424,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Idicates the gate attack loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateAttackLoudness
</code></pre>
<p>Idicates the gate attack loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3425,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Setup engage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness
</code></pre>
<p>Setup engage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3426,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should engage. ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3427,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Idicates the gate attack loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateAttackLoudness
</code></pre>
<p>Idicates the gate attack loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3428,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Idicates the gate attack loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateAttackLoudness
</code></pre>
<p>Idicates the gate attack loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3429,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Setup engage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness
</code></pre>
<p>Setup engage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3430,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/volumegateattackloudness/",title:"VolumeGateAttackLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should engage. ",content:`<pre><code class="language-C#">public float VolumeGateAttackLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should engage.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3431,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/volumegateattackthreshold/",title:"VolumeGateAttackThreshold",section:"ODIN Documentation",description:" Idicates the gate attack loudness setting in ",content:`<pre><code class="language-C#">public float VolumeGateAttackThreshold
</code></pre>
<p>Idicates the gate attack loudness setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3432,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/volumegateattackthreshold/",title:"VolumeGateAttackThreshold",section:"ODIN Documentation",description:" Idicates the gate attack loudness setting in ",content:`<pre><code class="language-C#">public float VolumeGateAttackThreshold { get; set; }
</code></pre>
<p>Idicates the gate attack loudness setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3433,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/volumegateenabled/",title:"VolumeGateEnabled",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public bool VolumeGateEnabled
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3434,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/volumegateenabled/",title:"VolumeGateEnabled",section:"ODIN Documentation",description:" Idicates whether the gate setting in is enabled ",content:`<pre><code class="language-C#">public bool VolumeGateEnabled { get; set; }
</code></pre>
<p>Idicates whether the gate setting in NativeBindings is enabled</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3435,href:"https://www.4players.io/odin/sdk/nodejs/interfaces/odinapmsettings/volumegatereleaseloudness/",title:"volumeGateReleaseLoudness",section:"ODIN Documentation",description:"Root-mean-square power (dBFS) when the volume gate should disengage",content:`<pre><code class="language-C#">public volumeGateReleaseLoudness: number
</code></pre>
<p>Root-mean-square power (dBFS) when the volume gate should disengage</p>
`}),e.add({id:3436,href:"https://www.4players.io/odin/sdk/web/interfaces/iodinaudiosettings/volumegatereleaseloudness/",title:"volumeGateReleaseLoudness",section:"ODIN Documentation",description:"Root mean square power (dBFS) when the volume gate should disengage",content:`<pre><code class="language-C#">number
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should disengage</p>
`}),e.add({id:3437,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odindefaults/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Idicates the gate release loudness ApmConfig setting by default ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public static float VolumeGateReleaseLoudness
</code></pre>
<p>Idicates the gate release loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3438,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odineditorconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Setup disengage of volume gate ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VolumeGateReleaseLoudness
</code></pre>
<p>Setup disengage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3439,href:"https://www.4players.io/odin/sdk/unity/1.1.0/classes/odinroomconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should disengage after previously being engaged. ",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">public float VolumeGateReleaseLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3440,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odindefaults/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Idicates the gate release loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateReleaseLoudness
</code></pre>
<p>Idicates the gate release loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3441,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odineditorconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Setup disengage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness
</code></pre>
<p>Setup disengage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3442,href:"https://www.4players.io/odin/sdk/unity/1.5.8/classes/odinroomconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3443,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odindefaults/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Idicates the gate release loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateReleaseLoudness
</code></pre>
<p>Idicates the gate release loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3444,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odineditorconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Setup disengage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness
</code></pre>
<p>Setup disengage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3445,href:"https://www.4players.io/odin/sdk/unity/1.6.0/classes/odinroomconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3446,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odindefaults/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Idicates the gate release loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateReleaseLoudness
</code></pre>
<p>Idicates the gate release loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3447,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odineditorconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Setup disengage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness
</code></pre>
<p>Setup disengage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3448,href:"https://www.4players.io/odin/sdk/unity/1.6.6/classes/odinroomconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3449,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odindefaults/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Idicates the gate release loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateReleaseLoudness
</code></pre>
<p>Idicates the gate release loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3450,href:"https://www.4players.io/odin/sdk/unity/classes/odindefaults/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Idicates the gate release loudness ApmConfig setting by default ",content:`<pre><code class="language-C#">public static float VolumeGateReleaseLoudness
</code></pre>
<p>Idicates the gate release loudness ApmConfig setting by default</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3451,href:"https://www.4players.io/odin/sdk/unity/classes/odineditorconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Setup disengage of volume gate ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness
</code></pre>
<p>Setup disengage of volume gate</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3452,href:"https://www.4players.io/odin/sdk/unity/classes/odinroomconfig/volumegatereleaseloudness/",title:"VolumeGateReleaseLoudness",section:"ODIN Documentation",description:" Root mean square power (dBFS) when the volume gate should disengage after previously being engaged. ",content:`<pre><code class="language-C#">public float VolumeGateReleaseLoudness { get; set; }
</code></pre>
<p>Root mean square power (dBFS) when the volume gate should disengage after previously being engaged.</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3453,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinvadcomponent/volumegatereleasethreshold/",title:"VolumeGateReleaseThreshold",section:"ODIN Documentation",description:" Idicates the gate release loudness setting in ",content:`<pre><code class="language-C#">public float VolumeGateReleaseThreshold
</code></pre>
<p>Idicates the gate release loudness setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3454,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/vadeffect/volumegatereleasethreshold/",title:"VolumeGateReleaseThreshold",section:"ODIN Documentation",description:" Idicates the gate release loudness setting in ",content:`<pre><code class="language-C#">public float VolumeGateReleaseThreshold { get; set; }
</code></pre>
<p>Idicates the gate release loudness setting in NativeBindings</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3455,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/odinroom/webrequesttoken/",title:"WebRequestToken",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public IEnumerator WebRequestToken(string url, string jsonPayload)
public IEnumerator WebRequestToken(string url, string jsonPayload, UnityAction&lt;DownloadHandler&gt; response)
</code></pre>
<p>Uses UnityWebRequest with POST data as json to get a response from a token-server</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Default callback will set OdinRoom with the response plain text</p>
</div>
</div>

<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td>String</td>
<td>Token-Server endpoint</td>
</tr>
<tr>
<td>jsonPayload</td>
<td>String</td>
<td>Request data</td>
</tr>
<tr>
<td>response</td>
<td>UnityAction&lt;DownloadHandler&gt;</td>
<td>Response callback</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td>IEnumerator for Coroutine</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="webrequesttokenurl-jsonpayload">WebRequestToken(url, jsonPayload)</h3>
<pre><code class="language-C#">public IEnumerator WebRequestToken(string url, string jsonPayload)
</code></pre>
<p>Uses UnityWebRequest with POST data as json to get a response from a token-server</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Default callback will set OdinRoom with the response plain text</p>
</div>
</div>

<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td>String</td>
<td>Token-Server endpoint</td>
</tr>
<tr>
<td>jsonPayload</td>
<td>String</td>
<td>Request data</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td>IEnumerator for Coroutine</td>
</tr>
</tbody>
</table>
<h3 id="webrequesttokenurl-jsonpayload-response">WebRequestToken(url, jsonPayload, response)</h3>
<pre><code class="language-C#">public IEnumerator WebRequestToken(string url, string jsonPayload, UnityAction&lt;DownloadHandler&gt; response)
</code></pre>
<p>Uses UnityWebRequest with POST data as json to get a response from a token-server</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>url</td>
<td>String</td>
<td>Token-Server endpoint</td>
</tr>
<tr>
<td>jsonPayload</td>
<td>String</td>
<td>Request data</td>
</tr>
<tr>
<td>response</td>
<td>UnityAction&lt;DownloadHandler&gt;</td>
<td>Response callback</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>IEnumerator</td>
<td>IEnumerator for Coroutine</td>
</tr>
</tbody>
</table>
`}),e.add({id:3456,href:"https://www.4players.io/odin/sdk/unity/1.1.0/enums/supportedplatform/windows/",title:"Windows",section:"ODIN Documentation",description:"",content:`



<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Version 1.1.0 is <strong>deprecated</strong> and will be removed in the future and is not being supported for new users.
Please update to the <a href="/odin/sdk/unity/">latest version</a> as soon as possible.</p>
</div>
</div>

<pre><code class="language-C#">Windows = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.1.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3457,href:"https://www.4players.io/odin/sdk/unity/1.5.8/enums/supportedplatform/windows/",title:"Windows",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Windows = 4
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.5.8/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3458,href:"https://www.4players.io/odin/sdk/unity/1.6.0/enums/supportedplatform/windows/",title:"Windows",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Windows = 3
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3459,href:"https://www.4players.io/odin/sdk/unity/1.6.6/enums/supportedplatform/windows/",title:"Windows",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Windows = 4
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/1.6.6/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3460,href:"https://www.4players.io/odin/sdk/unity/2.0.0/enums/supportedplatform/windows/",title:"Windows",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Windows = 4
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/2.0.0/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3461,href:"https://www.4players.io/odin/sdk/unity/enums/supportedplatform/windows/",title:"Windows",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">Windows = 4
</code></pre>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unity/enums/supportedplatform/">SupportedPlatform</a></td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3462,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/write/",title:"Write",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int Write(uint value)
public int Write(int value)
</code></pre>
<p>Set MsgPackToken based on the unsigend value size</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>UInt32</td>
<td>value to write and identify size</td>
</tr>
<tr>
<td>value</td>
<td>Int32</td>
<td>value to write and identify size</td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>size written</td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="writevalue">Write(value)</h3>
<pre><code class="language-C#">public int Write(uint value)
</code></pre>
<p>Set MsgPackToken based on the unsigend value size</p>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>UInt32</td>
<td>value to write and identify size</td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>size written</td>
</tr>
</tbody>
</table>
<h3 id="writevalue-1">Write(value)</h3>
<pre><code class="language-C#">public int Write(int value)
</code></pre>
<p>Set MsgPackToken based on the sigend value size</p>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Int32</td>
<td>value to write and identify size</td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>size written</td>
</tr>
</tbody>
</table>
`}),e.add({id:3463,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/write/",title:"Write",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">int Write(int value)
int Write(uint value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Int32</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="writevalue">Write(value)</h3>
<pre><code class="language-C#">int Write(int value)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="writevalue-1">Write(value)</h3>
<pre><code class="language-C#">int Write(uint value)
</code></pre>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3464,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writearrayheader/",title:"WriteArrayHeader",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int WriteArrayHeader(uint count)
</code></pre>
<p>MessagePack header is big-endian, value binarywriter default little-endian</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>count</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3465,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writearrayheader/",title:"WriteArrayHeader",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">int WriteArrayHeader(uint count)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>count</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3466,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebinary/",title:"WriteBinary",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int WriteBinary(ref List&lt;byte&gt; bytes, byte[] value)
</code></pre>
<p>Append values with size based token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3467,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writebinary/",title:"WriteBinary",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">int WriteBinary(byte[] value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte[]</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3468,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebool/",title:"WriteBool",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteBool(ref List&lt;byte&gt; bytes, bool value)
</code></pre>
<p>Append fixedbool with either MsgPackToken to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3469,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writebool/",title:"WriteBool",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteBool(bool value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Boolean</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3470,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writebyte/",title:"WriteByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteByte(ref List&lt;byte&gt; bytes, byte value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3471,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writebyte/",title:"WriteByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteByte(byte value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Byte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3472,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writedouble/",title:"WriteDouble",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteDouble(ref List&lt;byte&gt; bytes, double value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Double</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3473,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writedouble/",title:"WriteDouble",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteDouble(double value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Double</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3474,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writefloat/",title:"WriteFloat",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteFloat(ref List&lt;byte&gt; bytes, float value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3475,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writefloat/",title:"WriteFloat",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteFloat(float value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3476,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeint/",title:"WriteInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteInt(ref List&lt;byte&gt; bytes, int value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3477,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeint/",title:"WriteInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteInt(int value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3478,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writelong/",title:"WriteLong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteLong(ref List&lt;byte&gt; bytes, long value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3479,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writelong/",title:"WriteLong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteLong(long value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Int64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3480,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writemapheader/",title:"WriteMapHeader",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public int WriteMapHeader(uint count)
</code></pre>
<p>MessagePack header is big-endian value binarywriter default little-endian</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>count</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3481,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writemapheader/",title:"WriteMapHeader",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">int WriteMapHeader(uint count)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>count</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3482,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writesbyte/",title:"WriteSByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteSByte(ref List&lt;byte&gt; bytes, sbyte value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>SByte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3483,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writesbyte/",title:"WriteSByte",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteSByte(sbyte value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>SByte</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3484,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeshort/",title:"WriteShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteShort(ref List&lt;byte&gt; bytes, short value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>Int16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3485,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeshort/",title:"WriteShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteShort(short value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>Int16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3486,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writestring/",title:"WriteString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static int WriteString(ref List&lt;byte&gt; bytes, string value, Encoding encoding)
</code></pre>
<p>Append string value with size based token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td>size written</td>
</tr>
</tbody>
</table>
`}),e.add({id:3487,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writestring/",title:"WriteString",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">int WriteString(string value)
int WriteString(string value, Encoding encoding)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="returns">Returns</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="variants">Variants</h2>
<h3 id="writestringvalue">WriteString(value)</h3>
<pre><code class="language-C#">int WriteString(string value)
</code></pre>
<h4 id="parameters-1">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-1">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
<h3 id="writestringvalue-encoding">WriteString(value, encoding)</h3>
<pre><code class="language-C#">int WriteString(string value, Encoding encoding)
</code></pre>
<h4 id="parameters-2">Parameters</h4>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>String</td>
<td></td>
</tr>
<tr>
<td>encoding</td>
<td>Encoding</td>
<td></td>
</tr>
</tbody>
</table>
<h4 id="returns-2">Returns</h4>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Int32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3488,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeuint/",title:"WriteUInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteUInt(ref List&lt;byte&gt; bytes, uint value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3489,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeuint/",title:"WriteUInt",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteUInt(uint value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>UInt32</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3490,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeulong/",title:"WriteULong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteULong(ref List&lt;byte&gt; bytes, ulong value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3491,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeulong/",title:"WriteULong",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteULong(ulong value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>UInt64</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3492,href:"https://www.4players.io/odin/sdk/unity/2.0.0/classes/msgpackwriter/writeushort/",title:"WriteUShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">public static void WriteUShort(ref List&lt;byte&gt; bytes, ushort value)
</code></pre>
<p>Append value with MsgPackToken token to bytes</p>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>bytes</td>
<td>List&lt;Byte&gt;</td>
<td></td>
</tr>
<tr>
<td>value</td>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3493,href:"https://www.4players.io/odin/sdk/unity/2.0.0/interfaces/imsgpackwriter/writeushort/",title:"WriteUShort",section:"ODIN Documentation",description:"",content:`<pre><code class="language-C#">void WriteUShort(ushort value)
</code></pre>
<h2 id="parameters">Parameters</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>UInt16</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3494,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/x/",title:"X",section:"ODIN Documentation",description:" relative position to alphamap width ",content:`<pre><code class="language-C#">public float X
</code></pre>
<p>relative position to alphamap width</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3495,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/y/",title:"Y",section:"ODIN Documentation",description:" relative position to alphamap layers ",content:`<pre><code class="language-C#">public float Y
</code></pre>
<p>relative position to alphamap layers</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3496,href:"https://www.4players.io/odin/sdk/unity/2.0.0/structs/terrainfilteruserdata/z/",title:"Z",section:"ODIN Documentation",description:" relative position to alphamap height ",content:`<pre><code class="language-C#">public float Z
</code></pre>
<p>relative position to alphamap height</p>
<h2 id="value-type">Value Type</h2>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Single</td>
<td></td>
</tr>
</tbody>
</table>
`}),e.add({id:3497,href:"https://www.4players.io/odin/sdk/unity/1.1.0/manual/odineditorconfig/",title:"Odin Editor Config",section:"ODIN Documentation",description:"This Unity Component handles ODIN setup within the Unity editor.",content:`<p><a href='/odin/sdk/unity/1.1.0/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <code>OdinEditorConfig</code>
 component class allows you to setup various aspects of ODIN within your game.
If you follow our <a href="/odin/sdk/unity/1.1.0/manual/">guide</a> on settings up ODIN within your game, you should see
this in your Unity inspector if the <em>Odin Manager Game Object</em> is selected. <strong>Odin Editor Config</strong> is one of three parts
of the <em>Odin Manager Game Object</em>.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="328"/></a>
</figure>
<h2 id="client-authentication">Client Authentication</h2>
<p>Use the first section <strong>Client Authentication</strong> to set up your access key and user data. This is for development purposes
only as you should not expose your access key in the production version of your game. You should rather request the
access key from a secure server backend. We have compiled a document explaining access keys and how to generate and
use/store them: <a href="/odin/introduction/access-keys/">Access Keys in ODIN</a>.</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Access Key</td>
<td>The access key that shall be used to generate access tokens for individual users. Read <a href="/odin/introduction/access-keys/">here</a> on how to generate it.</td>
</tr>
<tr>
<td>Gateway URL</td>
<td>The base URL of the gateway. If you are using our hosted solution, leave it as is, otherwise if you are hosting yourself you need to adjust the URL</td>
</tr>
<tr>
<td>Manage Access</td>
<td>You can generate an access token for testing purposes right in the Unity editor for up to 25 users by pressing this button. <a href="#create-access-token">See below</a> for more details.</td>
</tr>
<tr>
<td>Client ID</td>
<td>The client id of your application. Use the Player Settings of Unity to set this value</td>
</tr>
<tr>
<td>User Data</td>
<td>This is the default user data that will be used for each player (if nothing is provided by you when <a href="/odin/sdk/unity/1.1.0/classes/odinhandler/joinroom/">joining the room</a>)</td>
</tr>
</tbody>
</table>
<p>More info on the user data can be found in the <a href="/odin/guides/unity/user-data/">user data guide</a>. A sample of
what you can do with user data can be found in one of our <a href="/odin/guides/unity/unity-mirror/">integration guides</a>.</p>
<h3 id="create-access-token">Create access token</h3>
<p>You don&rsquo;t need to talk to anyone at 4Players or subscribe to our tiers to test ODIN. After clicking on the <code>Manage Access</code>
button, this window will popup. Click on the &ldquo;Generate Access Key&rdquo; button to create an access key that allows you to test
ODIN for up to 25 players.</p>
<figure style="max-width: 376px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg" width="376"/></a>
</figure>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You don&rsquo;t need a (paid) tier for testing and development purposes. But you may not go into production with access keys
generated this way. There is no guarantee that they will work for a longer period of time and there is also not any support.</p>
</div>
</div>

<h2 id="capture--playback">Capture &amp; Playback</h2>
<p>Use this section to setup your audio settings.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" width="328"/></a>
</figure>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Capture Sample Rate</td>
<td>The sample rate that will be captured from the players <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Capture Channels</td>
<td>Choose if <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 should capture <code>Mono</code> or <code>Stereo</code> channels. In most cases, <code>Mono</code> is enough.</td>
</tr>
<tr>
<td>Playback Sample Rate</td>
<td>The sample rate that the server will use. If it does not match to the players sample rate the server will downgrade accordingly</td>
</tr>
<tr>
<td>Playback Channels</td>
<td>Choose if the server handles <code>Mono</code> or <code>Stereo</code> samples</td>
</tr>
</tbody>
</table>
<h2 id="room-settings">Room Settings</h2>
<p>ODIN provides latest audio technology based on machine learning and other advanced techniques to make sure, that audio
quality is excellent for your players. It&rsquo;s important, that the game experience and immersion is not destroyed by noise
like cars, airplanes, kids screaming or just the noise produced by cheap microphones.</p>
<p>Our mission is to provide the best audio experience for each of your players. Some of these features can be enabled or
disabled or adjusted directly in the Unity editor. You&rsquo;ll find these settings in this section.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" width="326"/></a>
</figure>
<h2 id="event-listeners">Event Listeners</h2>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>From Unity SDK version 0.5.0 the event handler settings have been moved to the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
class.</p>
</div>
</div>

<h2 id="odin-handler">ODIN Handler</h2>
<p>Let&rsquo;s have a look at the settings exposed by the next component of a typical <em>ODIN Manager Game Object</em>: <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3498,href:"https://www.4players.io/odin/sdk/unity/1.6.6/manual/odineditorconfig/",title:"Odin Editor Config",section:"ODIN Documentation",description:"This Unity Component handles ODIN setup within the Unity editor.",content:`<p><a href='/odin/sdk/unity/1.6.6/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <code>OdinEditorConfig</code>
 component class allows you to setup various aspects of ODIN within your game.
If you follow our <a href="/odin/sdk/unity/1.6.6/manual/">guide</a> on settings up ODIN within your game, you should see
this in your Unity inspector if the <em>Odin Manager Game Object</em> is selected. <strong>Odin Editor Config</strong> is one of three parts
of the <em>Odin Manager Game Object</em>.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="328"/></a>
</figure>
<h2 id="client-authentication">Client Authentication</h2>
<p>Use the first section <strong>Client Authentication</strong> to set up your access key and user data. This is for development purposes
only as you should not expose your access key in the production version of your game. You should rather request the
access key from a secure server backend. We have compiled a document explaining access keys and how to generate and
use/store them: <a href="/odin/introduction/access-keys/">Access Keys in ODIN</a>.</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Access Key</td>
<td>The access key that shall be used to generate access tokens for individual users. Read <a href="/odin/introduction/access-keys/">here</a> on how to generate it.</td>
</tr>
<tr>
<td>Gateway URL</td>
<td>The base URL of the gateway. If you are using our hosted solution, leave it as is, otherwise if you are hosting yourself you need to adjust the URL</td>
</tr>
<tr>
<td>Manage Access</td>
<td>You can generate an access token for testing purposes right in the Unity editor for up to 25 users by pressing this button. <a href="#create-access-token">See below</a> for more details.</td>
</tr>
<tr>
<td>Client ID</td>
<td>The client id of your application. Use the Player Settings of Unity to set this value</td>
</tr>
<tr>
<td>User Data</td>
<td>This is the default user data that will be used for each player (if nothing is provided by you when <a href="/odin/sdk/unity/1.6.6/classes/odinhandler/joinroom/">joining the room</a>)</td>
</tr>
</tbody>
</table>
<p>More info on the user data can be found in the <a href="/odin/guides/unity/user-data/">user data guide</a>. A sample of
what you can do with user data can be found in one of our <a href="/odin/guides/unity/unity-mirror/">integration guides</a>.</p>
<h3 id="create-access-token">Create access token</h3>
<p>You don&rsquo;t need to talk to anyone at 4Players or subscribe to our tiers to test ODIN. After clicking on the <code>Manage Access</code>
button, this window will popup. Click on the &ldquo;Generate Access Key&rdquo; button to create an access key that allows you to test
ODIN for up to 25 players.</p>
<figure style="max-width: 376px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg" width="376"/></a>
</figure>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You don&rsquo;t need a (paid) tier for testing and development purposes. But you may not go into production with access keys
generated this way. There is no guarantee that they will work for a longer period of time and there is also not any support.</p>
</div>
</div>

<h2 id="capture--playback">Capture &amp; Playback</h2>
<p>Use this section to setup your audio settings.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" width="328"/></a>
</figure>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Capture Sample Rate</td>
<td>The sample rate that will be captured from the players <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Capture Channels</td>
<td>Choose if <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 should capture <code>Mono</code> or <code>Stereo</code> channels. In most cases, <code>Mono</code> is enough.</td>
</tr>
<tr>
<td>Playback Sample Rate</td>
<td>The sample rate that the server will use. If it does not match to the players sample rate the server will downgrade accordingly</td>
</tr>
<tr>
<td>Playback Channels</td>
<td>Choose if the server handles <code>Mono</code> or <code>Stereo</code> samples</td>
</tr>
</tbody>
</table>
<h2 id="room-settings">Room Settings</h2>
<p>ODIN provides latest audio technology based on machine learning and other advanced techniques to make sure, that audio
quality is excellent for your players. It&rsquo;s important, that the game experience and immersion is not destroyed by noise
like cars, airplanes, kids screaming or just the noise produced by cheap microphones.</p>
<p>Our mission is to provide the best audio experience for each of your players. Some of these features can be enabled or
disabled or adjusted directly in the Unity editor. You&rsquo;ll find these settings in this section.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" width="326"/></a>
</figure>
<h2 id="event-listeners">Event Listeners</h2>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>From Unity SDK version 0.5.0 the event handler settings have been moved to the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
class.</p>
</div>
</div>

<h2 id="odin-handler">ODIN Handler</h2>
<p>Let&rsquo;s have a look at the settings exposed by the next component of a typical <em>ODIN Manager Game Object</em>: <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3499,href:"https://www.4players.io/odin/sdk/unity/manual/odineditorconfig/",title:"Odin Editor Config",section:"ODIN Documentation",description:"This Unity Component handles ODIN setup within the Unity editor.",content:`<p><a href='/odin/sdk/unity/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <code>OdinEditorConfig</code>
 component class allows you to setup various aspects of ODIN within your game.
If you follow our <a href="/odin/sdk/unity/1.6.6/manual/">guide</a> on settings up ODIN within your game, you should see
this in your Unity inspector if the <em>Odin Manager Game Object</em> is selected. <strong>Odin Editor Config</strong> is one of three parts
of the <em>Odin Manager Game Object</em>.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="328"/></a>
</figure>
<h2 id="client-authentication">Client Authentication</h2>
<p>Use the first section <strong>Client Authentication</strong> to set up your access key and user data. This is for development purposes
only as you should not expose your access key in the production version of your game. You should rather request the
access key from a secure server backend. We have compiled a document explaining access keys and how to generate and
use/store them: <a href="/odin/introduction/access-keys/">Access Keys in ODIN</a>.</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_client_settings.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Access Key</td>
<td>The access key that shall be used to generate access tokens for individual users. Read <a href="/odin/introduction/access-keys/">here</a> on how to generate it.</td>
</tr>
<tr>
<td>Gateway URL</td>
<td>The base URL of the gateway. If you are using our hosted solution, leave it as is, otherwise if you are hosting yourself you need to adjust the URL</td>
</tr>
<tr>
<td>Manage Access</td>
<td>You can generate an access token for testing purposes right in the Unity editor for up to 25 users by pressing this button. <a href="#create-access-token">See below</a> for more details.</td>
</tr>
<tr>
<td>Client ID</td>
<td>The client id of your application. Use the Player Settings of Unity to set this value</td>
</tr>
<tr>
<td>User Data</td>
<td>This is the default user data that will be used for each player (if nothing is provided by you when <a href="/odin/sdk/unity/1.6.6/classes/odinhandler/joinroom/">joining the room</a>)</td>
</tr>
</tbody>
</table>
<p>More info on the user data can be found in the <a href="/odin/guides/unity/user-data/">user data guide</a>. A sample of
what you can do with user data can be found in one of our <a href="/odin/guides/unity/unity-mirror/">integration guides</a>.</p>
<h3 id="create-access-token">Create access token</h3>
<p>You don&rsquo;t need to talk to anyone at 4Players or subscribe to our tiers to test ODIN. After clicking on the <code>Manage Access</code>
button, this window will popup. Click on the &ldquo;Generate Access Key&rdquo; button to create an access key that allows you to test
ODIN for up to 25 players.</p>
<figure style="max-width: 376px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg" width="376"/></a>
</figure>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You don&rsquo;t need a (paid) tier for testing and development purposes. But you may not go into production with access keys
generated this way. There is no guarantee that they will work for a longer period of time and there is also not any support.</p>
</div>
</div>

<h2 id="capture--playback">Capture &amp; Playback</h2>
<p>Use this section to setup your audio settings.</p>
<figure style="max-width: 328px"><a href="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_audio_settings.jpg" width="328"/></a>
</figure>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Capture Sample Rate</td>
<td>The sample rate that will be captured from the players <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Capture Channels</td>
<td>Choose if <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 should capture <code>Mono</code> or <code>Stereo</code> channels. In most cases, <code>Mono</code> is enough.</td>
</tr>
<tr>
<td>Playback Sample Rate</td>
<td>The sample rate that the server will use. If it does not match to the players sample rate the server will downgrade accordingly</td>
</tr>
<tr>
<td>Playback Channels</td>
<td>Choose if the server handles <code>Mono</code> or <code>Stereo</code> samples</td>
</tr>
</tbody>
</table>
<h2 id="room-settings">Room Settings</h2>
<p>ODIN provides latest audio technology based on machine learning and other advanced techniques to make sure, that audio
quality is excellent for your players. It&rsquo;s important, that the game experience and immersion is not destroyed by noise
like cars, airplanes, kids screaming or just the noise produced by cheap microphones.</p>
<p>Our mission is to provide the best audio experience for each of your players. Some of these features can be enabled or
disabled or adjusted directly in the Unity editor. You&rsquo;ll find these settings in this section.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_room_settings.jpg" width="326"/></a>
</figure>
<h2 id="event-listeners">Event Listeners</h2>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>From Unity SDK version 0.5.0 the event handler settings have been moved to the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
class.</p>
</div>
</div>

<h2 id="odin-handler">ODIN Handler</h2>
<p>Let&rsquo;s have a look at the settings exposed by the next component of a typical <em>ODIN Manager Game Object</em>: <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3500,href:"https://www.4players.io/odin/sdk/unity/1.1.0/manual/odinhandler/",title:"Odin Handler",section:"ODIN Documentation",description:"This Unity Component handles ODIN events and other core parts",content:`<p><a href='/odin/sdk/unity/1.1.0/classes/odinhandler/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component class is the global manager (singleton) for Odin inside your game. You can
use it to connect your own callbacks.</p>
<figure style="max-width: 325px"><a href="/images/odin/odin_unity_inspector_odin_handler.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler.jpg" width="325"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses <code>DontDestroyOnLoad</code> in this class to make sure that this component and game object survives scene changes.</p>
</div>
</div>

<h2 id="microphone">Microphone</h2>
<p>The first option provided in the Odin Handler Inspector is the microphone setting:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" width="322"/></a>
</figure>
<p>Drag &amp; Drop the <em>Game Object</em> within your scene that has the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.1.0/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component attached. If
you have created a standard <em>ODIN Manager Game Object</em> by following our <a href="/odin/sdk/unity/1.1.0/manual/">manual</a>
then this will be the same game object that the Odin Handler is attached to.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you put the <code>Microphone Reader</code> component on a different game object than the <code>Odin Handler</code> you need to make sure that
the other game object also uses <code>DontDestroyOnLoad</code> to survice scene changes. Otherwise, your players will not be able
to talk to other players as their microphone game object got removed. Of course, you can also use that as a feature to
disable microphone input in specific scenes. But you need to be careful with lifecycle management of your game objects
if you separate <code>Odin Handler</code> and <code>Microphone Reader</code> into different game objects.</p>
</div>
</div>

<h2 id="mixer-settings">Mixer Settings</h2>
<p>Another set of options is playback mixer settings.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" width="326"/></a>
</figure>
<p>Sometimes you want to apply some audio effects to voice, like cell broadcast interferences or noise. Create a Unity
<span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 or <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and assign it to one of these options.</p>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Playback Mixer</td>
<td>Create a Unity <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
<tr>
<td>Playback Mixer Group</td>
<td>Create a Unity <span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
</tbody>
</table>
<h2 id="playback-creation">Playback Creation</h2>
<p>In this section, you can activate some SDK automations, that make your life easier. In some special cases you might
take control of various aspects yourself, but for most use-cases you can make use of these automations.</p>
<figure style="max-width: 278px"><a href="/images/odin/odin_unity_inspector_playback_creation.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_playback_creation.jpg" width="278"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: You should only select one of these checkboxes. We&rsquo;ll change that to a drop down field in the next
version of the SDK.</p>
</div>
</div>

<p>If both settings are unchecked you&rsquo;ll need to handle the events like <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 yourself and
you&rsquo;ll also need to create audio pipeline elements yourself. See the source-code of the SDK on how to do that.</p>
<h3 id="playback-auto-creation">Playback auto creation</h3>
<p>If you check this box, the ODIN SDK will automatically create an <code>AudioSource</code> and link that to the ODIN server for
you and will handle the lifetime for you.</p>
<p>In addition to that, and that distinguishes this setting to <code>Manual Positional Audio</code> is that the
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 will be automatically attached to the GameObject with the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>

attached.</p>
<p>This is the easiest way to implement a simple &ldquo;video conferencing&rdquo; like use case where you don&rsquo;t have positional
audio or specific teams.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As all users voice is attached to one GameObject automatically you cannot implement any form of 3D audio this way. If
you want to have 3D audio, you need to deactivate this setting and activate <code>Manual Positional Audio</code> instead (see
description below).</p>
</div>
</div>

<h3 id="manual-positional-audio">Manual Positional Audio</h3>
<p>If you check this box (and uncheck the other setting) ODIN will automatically create an <code>AudioSource</code> for you and
link that to the ODIN server and handles the lifetime of it.</p>
<p>However, you are responsible to attach the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to a GameObject representing the
player (in space) and thus allowing you to implement 3D audio with ease.</p>
<p>Check out these guides on how to get notified of the SDK once an audio stream has been prepared and how to handle
the event:</p>
<ul>
<li><a href="/odin/guides/unity/getting-started-unity/">Getting Started with Unity</a>: Create a simple Unity
project and add ODIN to it. Shows the basic workflow and basic event handling.</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>: Shows how to implement ODIN into
a multiplayer game built with mirror networking. Create a simple multi-player game and add ODIN to it in under 20
minutes.</li>
</ul>
<p>What you basically have to do is to listen on the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>

events of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 instance like this:</p>
<pre><code class="language-C#">void Start()
{
    OdinHandler.Instance.OnCreatedMediaObject.AddListener(OnCreatedMediaObject);
    OdinHandler.Instance.OnDeleteMediaObject.AddListener(OnDeleteMediaObject);
}
</code></pre>
<p>ODIN will call these events once a user joined the room and added a media object or removed it (i.e. muted their
audio). Please note, that users can join a room without adding their own media stream (i.e. spectators).</p>
<p>You&rsquo;ll need to call <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 method which will create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

and attach it to the Game Object that you provide. Of course, you&rsquo;ll need to have some logic to find the correct
player GameObject for the ODIN. Every ODIN user (peer) has it&rsquo;s own user data which you can use to link your
GameObjects to ODIN. The best place to learn how to do that is our guide
<a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>.</p>
<p>Here is a simple example on how to handle the event. More examples can be found in the reference documentation of
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
, the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and the guides linked above.</p>
<pre><code class="language-C#">private void OnCreatedMediaObject(string roomName, ulong peerId, int mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    // Create or find a player object in the scene
    var peerContainer = CreateOrFindGameObject(peerId, roomName);

    // Create PlaybackComponent and add to the players GameObject
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    // Set spatialBlend to 1.0f to activate fill 3D audio and adjust some 3D audio settings
    // This is basic Unity stuff. PlaybackSource is an AudioSource object. See Unity documentation for more info 
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;
}
</code></pre>
<h2 id="events">Events</h2>
<p>ODIN has a couple of events that allows you to react on things that happen within the ODIN runtime. Use these settings
to connect your own game objects and scripts to ODIN. You can also do that in code if you like. Have a look at the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class
for more infos about that.</p>
<figure style="max-width: 329px"><a href="/images/odin/odin_unity_inspector_odin_handler_events.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_events.jpg" width="329"/></a>
</figure>
<p>These are standard Unity events. Click on the <code>+</code> button to add a listener and than drag &amp; drop the game object that
has your handler script attached exposing public callbacks for the events you want to listen to.</p>
<p>Read more about the events available in our Scripting documentation:</p>
<h3 id="room-events">Room events</h3>
<p>These events are sent if anything happens with the rooms the player has joined. Use the <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 method
of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class to connect the player to one or more rooms. These events will then trigger and
allow you to react on these in your own scripts by attaching callbacks.</p>
<table>
<thead>
<tr>
<th>Event Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Room Join</td>
<td>Called before a player joins a room: <span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Joined</td>
<td>Called after a player joined a room: <span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Leave</td>
<td>Called before a player leaves a room: <span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Left</td>
<td>Called after a player left a room: <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h3 id="peer-events">Peer events</h3>
<p>Whenever something happens in the room the player is connected to, i.e. another player joins the room or updates his
user data, these events are triggered and allow you to react on those in your own scripts.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Peer Joined</td>
<td>Called when another player joined the room: <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Left</td>
<td>Called when another player left the room: <span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Updated</td>
<td>When the user data of a peer changes, this callback is called: <span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to understand the difference between a peer and a media stream. In ODIN it&rsquo;s possible to join a room as
a listener but not sending media into the room. A typical use case for this is a spectator or in a podcast, only the podcaster
is able to say something while the others are just listening.</p>
<p>It&rsquo;s the same in ODIN: If a player connects a room, the <code>Peer Joined</code> event is triggered. Now, the player listens to
the audio streams in this room. If the <code>Odin Handler</code> of the other player has a <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.1.0/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span></p>
<p>attached and is active and recording, a <code>Media Added</code> event will be triggered once the audio stream of the other player
notifying all other peers, that there is an additional audio stream they need to listen to now.</p>
<p>If the other player disables his microphone, a <code>Media Removed</code> event is triggered and all other peers will stop listening
on this audio source.</p>
</div>
</div>

<h3 id="media-events">Media events</h3>
<p>When media streams are added or removed, you&rsquo;ll receive these events.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Media Added</td>
<td>Called when the microphone stream of another user is joining the room: <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Media State Changed</td>
<td>Called when the medias state changed: <code>OnMediaActiveStateChanged</code>
</td>
</tr>
<tr>
<td>Media Removed</td>
<td>When one of the peers removes his microphone stream of the room, this callback is triggered: <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h2 id="microphone-reader-settings">Microphone Reader settings</h2>
<p>In a typical <em>ODIN Manager Game Object</em> a <em>Microphone Reader</em> component is attached which handles the
players microphone and audio input. Let&rsquo;s dig through these settings here: <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.1.0/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3501,href:"https://www.4players.io/odin/sdk/unity/1.6.6/manual/odinhandler/",title:"Odin Handler",section:"ODIN Documentation",description:"This Unity Component handles ODIN events and other core parts",content:`<p><a href='/odin/sdk/unity/1.6.6/classes/odinhandler/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component class is the global manager (singleton) for Odin inside your game. You can
use it to connect your own callbacks.</p>
<figure style="max-width: 325px"><a href="/images/odin/odin_unity_inspector_odin_handler.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler.jpg" width="325"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses <code>DontDestroyOnLoad</code> in this class to make sure that this component and game object survives scene changes.</p>
</div>
</div>

<h2 id="microphone">Microphone</h2>
<p>The first option provided in the Odin Handler Inspector is the microphone setting:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" width="322"/></a>
</figure>
<p>Drag &amp; Drop the <em>Game Object</em> within your scene that has the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component attached. If
you have created a standard <em>ODIN Manager Game Object</em> by following our <a href="/odin/sdk/unity/1.6.6/manual/">manual</a>
then this will be the same game object that the Odin Handler is attached to.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you put the <code>Microphone Reader</code> component on a different game object than the <code>Odin Handler</code> you need to make sure that
the other game object also uses <code>DontDestroyOnLoad</code> to survice scene changes. Otherwise, your players will not be able
to talk to other players as their microphone game object got removed. Of course, you can also use that as a feature to
disable microphone input in specific scenes. But you need to be careful with lifecycle management of your game objects
if you separate <code>Odin Handler</code> and <code>Microphone Reader</code> into different game objects.</p>
</div>
</div>

<h2 id="mixer-settings">Mixer Settings</h2>
<p>Another set of options is playback mixer settings.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" width="326"/></a>
</figure>
<p>Sometimes you want to apply some audio effects to voice, like cell broadcast interferences or noise. Create a Unity
<span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 or <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and assign it to one of these options.</p>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Playback Mixer</td>
<td>Create a Unity <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
<tr>
<td>Playback Mixer Group</td>
<td>Create a Unity <span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
</tbody>
</table>
<h2 id="playback-creation">Playback Creation</h2>
<p>In this section, you can activate some SDK automations, that make your life easier. In some special cases you might
take control of various aspects yourself, but for most use-cases you can make use of these automations.</p>
<figure style="max-width: 278px"><a href="/images/odin/odin_unity_inspector_playback_creation.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_playback_creation.jpg" width="278"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: You should only select one of these checkboxes. We&rsquo;ll change that to a drop down field in the next
version of the SDK.</p>
</div>
</div>

<p>If both settings are unchecked you&rsquo;ll need to handle the events like <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 yourself and
you&rsquo;ll also need to create audio pipeline elements yourself. See the source-code of the SDK on how to do that.</p>
<h3 id="playback-auto-creation">Playback auto creation</h3>
<p>If you check this box, the ODIN SDK will automatically create an <code>AudioSource</code> and link that to the ODIN server for
you and will handle the lifetime for you.</p>
<p>In addition to that, and that distinguishes this setting to <code>Manual Positional Audio</code> is that the
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 will be automatically attached to the GameObject with the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>

attached.</p>
<p>This is the easiest way to implement a simple &ldquo;video conferencing&rdquo; like use case where you don&rsquo;t have positional
audio or specific teams.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As all users voice is attached to one GameObject automatically you cannot implement any form of 3D audio this way. If
you want to have 3D audio, you need to deactivate this setting and activate <code>Manual Positional Audio</code> instead (see
description below).</p>
</div>
</div>

<h3 id="manual-positional-audio">Manual Positional Audio</h3>
<p>If you check this box (and uncheck the other setting) ODIN will automatically create an <code>AudioSource</code> for you and
link that to the ODIN server and handles the lifetime of it.</p>
<p>However, you are responsible to attach the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to a GameObject representing the
player (in space) and thus allowing you to implement 3D audio with ease.</p>
<p>Check out these guides on how to get notified of the SDK once an audio stream has been prepared and how to handle
the event:</p>
<ul>
<li><a href="/odin/guides/unity/getting-started-unity/">Getting Started with Unity</a>: Create a simple Unity
project and add ODIN to it. Shows the basic workflow and basic event handling.</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>: Shows how to implement ODIN into
a multiplayer game built with mirror networking. Create a simple multi-player game and add ODIN to it in under 20
minutes.</li>
</ul>
<p>What you basically have to do is to listen on the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>

events of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 instance like this:</p>
<pre><code class="language-C#">void Start()
{
    OdinHandler.Instance.OnCreatedMediaObject.AddListener(OnCreatedMediaObject);
    OdinHandler.Instance.OnDeleteMediaObject.AddListener(OnDeleteMediaObject);
}
</code></pre>
<p>ODIN will call these events once a user joined the room and added a media object or removed it (i.e. muted their
audio). Please note, that users can join a room without adding their own media stream (i.e. spectators).</p>
<p>You&rsquo;ll need to call <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 method which will create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

and attach it to the Game Object that you provide. Of course, you&rsquo;ll need to have some logic to find the correct
player GameObject for the ODIN. Every ODIN user (peer) has it&rsquo;s own user data which you can use to link your
GameObjects to ODIN. The best place to learn how to do that is our guide
<a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>.</p>
<p>Here is a simple example on how to handle the event. More examples can be found in the reference documentation of
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
, the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and the guides linked above.</p>
<pre><code class="language-C#">private void OnCreatedMediaObject(string roomName, ulong peerId, int mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    // Create or find a player object in the scene
    var peerContainer = CreateOrFindGameObject(peerId, roomName);

    // Create PlaybackComponent and add to the players GameObject
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    // Set spatialBlend to 1.0f to activate fill 3D audio and adjust some 3D audio settings
    // This is basic Unity stuff. PlaybackSource is an AudioSource object. See Unity documentation for more info 
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;
}
</code></pre>
<h2 id="events">Events</h2>
<p>ODIN has a couple of events that allows you to react on things that happen within the ODIN runtime. Use these settings
to connect your own game objects and scripts to ODIN. You can also do that in code if you like. Have a look at the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class
for more infos about that.</p>
<figure style="max-width: 329px"><a href="/images/odin/odin_unity_inspector_odin_handler_events.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_events.jpg" width="329"/></a>
</figure>
<p>These are standard Unity events. Click on the <code>+</code> button to add a listener and than drag &amp; drop the game object that
has your handler script attached exposing public callbacks for the events you want to listen to.</p>
<p>Read more about the events available in our Scripting documentation:</p>
<h3 id="room-events">Room events</h3>
<p>These events are sent if anything happens with the rooms the player has joined. Use the <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 method
of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class to connect the player to one or more rooms. These events will then trigger and
allow you to react on these in your own scripts by attaching callbacks.</p>
<table>
<thead>
<tr>
<th>Event Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Room Join</td>
<td>Called before a player joins a room: <span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Joined</td>
<td>Called after a player joined a room: <span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Leave</td>
<td>Called before a player leaves a room: <span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Left</td>
<td>Called after a player left a room: <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h3 id="peer-events">Peer events</h3>
<p>Whenever something happens in the room the player is connected to, i.e. another player joins the room or updates his
user data, these events are triggered and allow you to react on those in your own scripts.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Peer Joined</td>
<td>Called when another player joined the room: <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Left</td>
<td>Called when another player left the room: <span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Updated</td>
<td>When the user data of a peer changes, this callback is called: <span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to understand the difference between a peer and a media stream. In ODIN it&rsquo;s possible to join a room as
a listener but not sending media into the room. A typical use case for this is a spectator or in a podcast, only the podcaster
is able to say something while the others are just listening.</p>
<p>It&rsquo;s the same in ODIN: If a player connects a room, the <code>Peer Joined</code> event is triggered. Now, the player listens to
the audio streams in this room. If the <code>Odin Handler</code> of the other player has a <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span></p>
<p>attached and is active and recording, a <code>Media Added</code> event will be triggered once the audio stream of the other player
notifying all other peers, that there is an additional audio stream they need to listen to now.</p>
<p>If the other player disables his microphone, a <code>Media Removed</code> event is triggered and all other peers will stop listening
on this audio source.</p>
</div>
</div>

<h3 id="media-events">Media events</h3>
<p>When media streams are added or removed, you&rsquo;ll receive these events.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Media Added</td>
<td>Called when the microphone stream of another user is joining the room: <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Media State Changed</td>
<td>Called when the medias state changed: <code>OnMediaActiveStateChanged</code>
</td>
</tr>
<tr>
<td>Media Removed</td>
<td>When one of the peers removes his microphone stream of the room, this callback is triggered: <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h2 id="microphone-reader-settings">Microphone Reader settings</h2>
<p>In a typical <em>ODIN Manager Game Object</em> a <em>Microphone Reader</em> component is attached which handles the
players microphone and audio input. Let&rsquo;s dig through these settings here: <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3502,href:"https://www.4players.io/odin/sdk/unity/manual/odinhandler/",title:"Odin Handler",section:"ODIN Documentation",description:"This Unity Component handles ODIN events and other core parts",content:`<p><a href='/odin/sdk/unity/classes/odinhandler/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component class is the global manager (singleton) for Odin inside your game. You can
use it to connect your own callbacks.</p>
<figure style="max-width: 325px"><a href="/images/odin/odin_unity_inspector_odin_handler.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler.jpg" width="325"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses <code>DontDestroyOnLoad</code> in this class to make sure that this component and game object survives scene changes.</p>
</div>
</div>

<h2 id="microphone">Microphone</h2>
<p>The first option provided in the Odin Handler Inspector is the microphone setting:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_microphone.jpg" width="322"/></a>
</figure>
<p>Drag &amp; Drop the <em>Game Object</em> within your scene that has the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component attached. If
you have created a standard <em>ODIN Manager Game Object</em> by following our <a href="/odin/sdk/unity/1.6.6/manual/">manual</a>
then this will be the same game object that the Odin Handler is attached to.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you put the <code>Microphone Reader</code> component on a different game object than the <code>Odin Handler</code> you need to make sure that
the other game object also uses <code>DontDestroyOnLoad</code> to survice scene changes. Otherwise, your players will not be able
to talk to other players as their microphone game object got removed. Of course, you can also use that as a feature to
disable microphone input in specific scenes. But you need to be careful with lifecycle management of your game objects
if you separate <code>Odin Handler</code> and <code>Microphone Reader</code> into different game objects.</p>
</div>
</div>

<h2 id="mixer-settings">Mixer Settings</h2>
<p>Another set of options is playback mixer settings.</p>
<figure style="max-width: 326px"><a href="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_mixer.jpg" width="326"/></a>
</figure>
<p>Sometimes you want to apply some audio effects to voice, like cell broadcast interferences or noise. Create a Unity
<span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 or <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and assign it to one of these options.</p>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Playback Mixer</td>
<td>Create a Unity <span class="external-reference">AudioMixer <a href="https://docs.unity3d.com/Manual/AudioMixer.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
<tr>
<td>Playback Mixer Group</td>
<td>Create a Unity <span class="external-reference">AudioMixerGroup <a href="https://docs.unity3d.com/ScriptReference/Audio.AudioMixerGroup.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 asset and drag it into this field.</td>
</tr>
</tbody>
</table>
<h2 id="playback-creation">Playback Creation</h2>
<p>In this section, you can activate some SDK automations, that make your life easier. In some special cases you might
take control of various aspects yourself, but for most use-cases you can make use of these automations.</p>
<figure style="max-width: 278px"><a href="/images/odin/odin_unity_inspector_playback_creation.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_playback_creation.jpg" width="278"/></a>
</figure>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: You should only select one of these checkboxes. We&rsquo;ll change that to a drop down field in the next
version of the SDK.</p>
</div>
</div>

<p>If both settings are unchecked you&rsquo;ll need to handle the events like <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 yourself and
you&rsquo;ll also need to create audio pipeline elements yourself. See the source-code of the SDK on how to do that.</p>
<h3 id="playback-auto-creation">Playback auto creation</h3>
<p>If you check this box, the ODIN SDK will automatically create an <code>AudioSource</code> and link that to the ODIN server for
you and will handle the lifetime for you.</p>
<p>In addition to that, and that distinguishes this setting to <code>Manual Positional Audio</code> is that the
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 will be automatically attached to the GameObject with the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>

attached.</p>
<p>This is the easiest way to implement a simple &ldquo;video conferencing&rdquo; like use case where you don&rsquo;t have positional
audio or specific teams.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As all users voice is attached to one GameObject automatically you cannot implement any form of 3D audio this way. If
you want to have 3D audio, you need to deactivate this setting and activate <code>Manual Positional Audio</code> instead (see
description below).</p>
</div>
</div>

<h3 id="manual-positional-audio">Manual Positional Audio</h3>
<p>If you check this box (and uncheck the other setting) ODIN will automatically create an <code>AudioSource</code> for you and
link that to the ODIN server and handles the lifetime of it.</p>
<p>However, you are responsible to attach the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to a GameObject representing the
player (in space) and thus allowing you to implement 3D audio with ease.</p>
<p>Check out these guides on how to get notified of the SDK once an audio stream has been prepared and how to handle
the event:</p>
<ul>
<li><a href="/odin/guides/unity/getting-started-unity/">Getting Started with Unity</a>: Create a simple Unity
project and add ODIN to it. Shows the basic workflow and basic event handling.</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>: Shows how to implement ODIN into
a multiplayer game built with mirror networking. Create a simple multi-player game and add ODIN to it in under 20
minutes.</li>
</ul>
<p>What you basically have to do is to listen on the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>

events of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 instance like this:</p>
<pre><code class="language-C#">void Start()
{
    OdinHandler.Instance.OnCreatedMediaObject.AddListener(OnCreatedMediaObject);
    OdinHandler.Instance.OnDeleteMediaObject.AddListener(OnDeleteMediaObject);
}
</code></pre>
<p>ODIN will call these events once a user joined the room and added a media object or removed it (i.e. muted their
audio). Please note, that users can join a room without adding their own media stream (i.e. spectators).</p>
<p>You&rsquo;ll need to call <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 method which will create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

and attach it to the Game Object that you provide. Of course, you&rsquo;ll need to have some logic to find the correct
player GameObject for the ODIN. Every ODIN user (peer) has it&rsquo;s own user data which you can use to link your
GameObjects to ODIN. The best place to learn how to do that is our guide
<a href="/odin/guides/unity/unity-mirror/">Unity with Mirror Networking</a>.</p>
<p>Here is a simple example on how to handle the event. More examples can be found in the reference documentation of
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
, the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and the guides linked above.</p>
<pre><code class="language-C#">private void OnCreatedMediaObject(string roomName, ulong peerId, int mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    // Create or find a player object in the scene
    var peerContainer = CreateOrFindGameObject(peerId, roomName);

    // Create PlaybackComponent and add to the players GameObject
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    // Set spatialBlend to 1.0f to activate fill 3D audio and adjust some 3D audio settings
    // This is basic Unity stuff. PlaybackSource is an AudioSource object. See Unity documentation for more info 
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;
}
</code></pre>
<h2 id="events">Events</h2>
<p>ODIN has a couple of events that allows you to react on things that happen within the ODIN runtime. Use these settings
to connect your own game objects and scripts to ODIN. You can also do that in code if you like. Have a look at the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class
for more infos about that.</p>
<figure style="max-width: 329px"><a href="/images/odin/odin_unity_inspector_odin_handler_events.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_events.jpg" width="329"/></a>
</figure>
<p>These are standard Unity events. Click on the <code>+</code> button to add a listener and than drag &amp; drop the game object that
has your handler script attached exposing public callbacks for the events you want to listen to.</p>
<p>Read more about the events available in our Scripting documentation:</p>
<h3 id="room-events">Room events</h3>
<p>These events are sent if anything happens with the rooms the player has joined. Use the <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 method
of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 class to connect the player to one or more rooms. These events will then trigger and
allow you to react on these in your own scripts by attaching callbacks.</p>
<table>
<thead>
<tr>
<th>Event Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Room Join</td>
<td>Called before a player joins a room: <span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Joined</td>
<td>Called after a player joined a room: <span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Leave</td>
<td>Called before a player leaves a room: <span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Room Left</td>
<td>Called after a player left a room: <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h3 id="peer-events">Peer events</h3>
<p>Whenever something happens in the room the player is connected to, i.e. another player joins the room or updates his
user data, these events are triggered and allow you to react on those in your own scripts.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Peer Joined</td>
<td>Called when another player joined the room: <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Left</td>
<td>Called when another player left the room: <span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Peer Updated</td>
<td>When the user data of a peer changes, this callback is called: <span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to understand the difference between a peer and a media stream. In ODIN it&rsquo;s possible to join a room as
a listener but not sending media into the room. A typical use case for this is a spectator or in a podcast, only the podcaster
is able to say something while the others are just listening.</p>
<p>It&rsquo;s the same in ODIN: If a player connects a room, the <code>Peer Joined</code> event is triggered. Now, the player listens to
the audio streams in this room. If the <code>Odin Handler</code> of the other player has a <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span></p>
<p>attached and is active and recording, a <code>Media Added</code> event will be triggered once the audio stream of the other player
notifying all other peers, that there is an additional audio stream they need to listen to now.</p>
<p>If the other player disables his microphone, a <code>Media Removed</code> event is triggered and all other peers will stop listening
on this audio source.</p>
</div>
</div>

<h3 id="media-events">Media events</h3>
<p>When media streams are added or removed, you&rsquo;ll receive these events.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Media Added</td>
<td>Called when the microphone stream of another user is joining the room: <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Media State Changed</td>
<td>Called when the medias state changed: <code>OnMediaActiveStateChanged</code>
</td>
</tr>
<tr>
<td>Media Removed</td>
<td>When one of the peers removes his microphone stream of the room, this callback is triggered: <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
</tbody>
</table>
<h2 id="microphone-reader-settings">Microphone Reader settings</h2>
<p>In a typical <em>ODIN Manager Game Object</em> a <em>Microphone Reader</em> component is attached which handles the
players microphone and audio input. Let&rsquo;s step through these settings here: <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3503,href:"https://www.4players.io/odin/sdk/unity/1.1.0/manual/microphonereader/",title:"Microphone Reader",section:"ODIN Documentation",description:"Captures audio input from connected microphone(s) and forwards them to the ODIN runtime",content:`<p><a href='/odin/sdk/unity/1.1.0/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component class starts capturing audio input from attached microphones and sends
audio packets to the ODIN runtime which distributes them to the other peers joined to the same room.</p>
<p>This component is typically attached to the same game object as the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
. If you put this object
on a different game object, make sure you attach it to the <span class="external-reference">Microphone <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/#microphone"><i class="fas fa-external-link-alt"></i></a></span>
 setting of the
<span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component.</p>
<h2 id="basic-settings">Basic Settings</h2>
<p>These are the settings exposed in the Unity Inspector for this component:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_microphone_reader.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_microphone_reader.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Redirect captured audio</td>
<td>Automatically send all captured audio data to all rooms this player joined. If you want more control, disable this setting.</td>
</tr>
<tr>
<td>Continue Recording</td>
<td>Indicates whether the recording should continue recording if AudioClipLength is reached, and wrap around and record from the beginning of the AudioClip.</td>
</tr>
</tbody>
</table>
<h2 id="mic-audio-clip-settings">Mic Audio-Clip Settings</h2>
<p>In this section you can adjust various settings relevant for Audio Clip Management. In Unity all audio is stored in an
<code>AudioClip</code>
. As Unity does not support real-time audio streams, ODIN just modifies an Audio Clip and
overwrites it over and over again once it came to an end.</p>
<p>Use these settings to adjust these behaviors.</p>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Audio Clip Length</td>
<td>The length of the audio clip. If <code>Continue Recording</code> is enabled, this will be overwritten everytime it&rsquo;s full.</td>
</tr>
<tr>
<td>Override Sample Rate</td>
<td>Activate this setting to specify a different sample rate than globally set in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.1.0/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Sample Rate</td>
<td>Only visible of Override Sample Rate is active. Set the sample rate that you want to have for this microphone. &gt;}}</td>
</tr>
<tr>
<td>Autostart Microphone</td>
<td>If enabled, the microphone will immediately start listening and sending audio data to ODIN. If disabled, you need to call <span class="external-reference">StartListen <a href="/odin/sdk/unity/1.1.0/classes/microphonereader/startlisten/"><i class="fas fa-external-link-alt"></i></a></span>
 manually.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3504,href:"https://www.4players.io/odin/sdk/unity/1.6.6/manual/microphonereader/",title:"Microphone Reader",section:"ODIN Documentation",description:"Captures audio input from connected microphone(s) and forwards them to the ODIN runtime",content:`<p><a href='/odin/sdk/unity/1.6.6/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component class starts capturing audio input from attached microphones and sends
audio packets to the ODIN runtime which distributes them to the other peers joined to the same room.</p>
<p>This component is typically attached to the same game object as the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
. If you put this object
on a different game object, make sure you attach it to the <span class="external-reference">Microphone <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/#microphone"><i class="fas fa-external-link-alt"></i></a></span>
 setting of the
<span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component.</p>
<h2 id="basic-settings">Basic Settings</h2>
<p>These are the settings exposed in the Unity Inspector for this component:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_microphone_reader.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_microphone_reader.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Redirect captured audio</td>
<td>Automatically send all captured audio data to all rooms this player joined. If you want more control, disable this setting.</td>
</tr>
<tr>
<td>Continue Recording</td>
<td>Indicates whether the recording should continue recording if AudioClipLength is reached, and wrap around and record from the beginning of the AudioClip.</td>
</tr>
</tbody>
</table>
<h2 id="mic-audio-clip-settings">Mic Audio-Clip Settings</h2>
<p>In this section you can adjust various settings relevant for Audio Clip Management. In Unity all audio is stored in an
<code>AudioClip</code>
. As Unity does not support real-time audio streams, ODIN just modifies an Audio Clip and
overwrites it over and over again once it came to an end.</p>
<p>Use these settings to adjust these behaviors.</p>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Audio Clip Length</td>
<td>The length of the audio clip. If <code>Continue Recording</code> is enabled, this will be overwritten everytime it&rsquo;s full.</td>
</tr>
<tr>
<td>Override Sample Rate</td>
<td>Activate this setting to specify a different sample rate than globally set in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Sample Rate</td>
<td>Only visible of Override Sample Rate is active. Set the sample rate that you want to have for this microphone. &gt;}}</td>
</tr>
<tr>
<td>Autostart Microphone</td>
<td>If enabled, the microphone will immediately start listening and sending audio data to ODIN. If disabled, you need to call <span class="external-reference">StartListen <a href="/odin/sdk/unity/1.6.6/classes/microphonereader/startlisten/"><i class="fas fa-external-link-alt"></i></a></span>
 manually.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3505,href:"https://www.4players.io/odin/sdk/unity/manual/microphonereader/",title:"Microphone Reader",section:"ODIN Documentation",description:"Captures audio input from connected microphone(s) and forwards them to the ODIN runtime",content:`<p><a href='/odin/sdk/unity/classes/odineditorconfig/' class="btn btn-primary">Switch to scripting</a></p>
<p>The <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component class starts capturing audio input from attached microphones and sends
audio packets to the ODIN runtime which distributes them to the other peers joined to the same room.</p>
<p>This component is typically attached to the same game object as the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
. If you put this object
on a different game object, make sure you attach it to the <span class="external-reference">Microphone <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/#microphone"><i class="fas fa-external-link-alt"></i></a></span>
 setting of the
<span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component.</p>
<h2 id="basic-settings">Basic Settings</h2>
<p>These are the settings exposed in the Unity Inspector for this component:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_microphone_reader.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_microphone_reader.jpg" width="322"/></a>
</figure>
<h3 id="properties">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Redirect captured audio</td>
<td>Automatically send all captured audio data to all rooms this player joined. If you want more control, disable this setting.</td>
</tr>
<tr>
<td>Continue Recording</td>
<td>Indicates whether the recording should continue recording if AudioClipLength is reached, and wrap around and record from the beginning of the AudioClip.</td>
</tr>
</tbody>
</table>
<h2 id="mic-audio-clip-settings">Mic Audio-Clip Settings</h2>
<p>In this section you can adjust various settings relevant for Audio Clip Management. In Unity all audio is stored in an
<code>AudioClip</code>
. As Unity does not support real-time audio streams, ODIN just modifies an Audio Clip and
overwrites it over and over again once it came to an end.</p>
<p>Use these settings to adjust these behaviors.</p>
<h3 id="properties-1">Properties</h3>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>Audio Clip Length</td>
<td>The length of the audio clip. If <code>Continue Recording</code> is enabled, this will be overwritten everytime it&rsquo;s full.</td>
</tr>
<tr>
<td>Override Sample Rate</td>
<td>Activate this setting to specify a different sample rate than globally set in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
</tr>
<tr>
<td>Sample Rate</td>
<td>Only visible of Override Sample Rate is active. Set the sample rate that you want to have for this microphone. &gt;}}</td>
</tr>
<tr>
<td>Autostart Microphone</td>
<td>If enabled, the microphone will immediately start listening and sending audio data to ODIN. If disabled, you need to call <span class="external-reference">StartListen <a href="/odin/sdk/unity/1.6.6/classes/microphonereader/startlisten/"><i class="fas fa-external-link-alt"></i></a></span>
 manually.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3506,href:"https://www.4players.io/fleet/cli/usage/filters/",title:"Filters",section:"ODIN Fleet Documentation",description:"Learn how to filter list resources in ODIN CLI commands.",content:`<p>The ODIN CLI allows users to filter data using a flexible and powerful filter syntax. This is especially useful
when working with large datasets, allowing you to extract exactly the information you need.</p>
<h2 id="basics">Basics</h2>
<p>You can set a filter using the <code>--filter</code> flag followed by the filter expression. If omitted, the command will return
all resources. Resources are filtered on the server side, but depending on command it may also be filtered on the client
side or even a combination of both.</p>
<p>The filter expression follows a straightforward structure of <code>&lt;field&gt; &lt;operator&gt; &lt;value&gt;</code>. The field can be any property
in the dataset, and operators include basic comparison operators such as <code>=</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, and <code>&lt;=</code>. Filters
can also be combined using logical operators <code>AND</code>, <code>OR</code>, and negated with <code>NOT</code>.</p>
<p>You can access nested fields using dot notation, and strings should be enclosed in quotes. Here’s an example using a
basic filter:</p>
<pre><code class="language-bash">--filter=&quot;serverConfig.name = 'Minecraft Production 2''
</code></pre>
<p>This filter will return all servers where the <code>serverConfig.name</code> is <code>&quot;Minecraft Production 2&quot;</code>.</p>
<h2 id="supported-operators">Supported Operators</h2>
<ul>
<li><code>=</code>: Equal to</li>
<li><code>!=</code>: Not equal to</li>
<li><code>&gt;</code>: Greater than</li>
<li><code>&lt;</code>: Less than</li>
<li><code>&gt;=</code>: Greater than or equal to</li>
<li><code>&lt;=</code>: Less than or equal to</li>
<li><code>~</code> : Contains (for strings)</li>
</ul>
<p>The <code>~</code> also allows usage of wildcards (<code>*</code>) for partial matches. For example:</p>
<pre><code class="language-bash">--filter=&quot;serverConfig.name ~ 'Minecraft*'&quot;
</code></pre>
<p>This filter will return all servers where the <code>serverConfig.name</code> starts with <code>&quot;Minecraft&quot;</code>.</p>
<h2 id="combining-filters">Combining Filters</h2>
<p>You can combine multiple conditions using <code>AND</code> and <code>OR</code> operators:</p>
<ul>
<li><code>AND</code>: Both conditions must be true.</li>
<li><code>OR</code>: At least one condition must be true.</li>
</ul>
<pre><code class="language-bash">--filter=&quot;serverConfig.name = 'Minecraft Production 2' AND id &gt; 100&quot;
</code></pre>
<p>This filter will return all servers where the <code>serverConfig.name</code> is <code>&quot;Minecraft Production 2&quot;</code> and the <code>id</code> is greater
than 100.</p>
<h2 id="negation-with-not">Negation with <code>NOT</code></h2>
<p>You can negate conditions using the <code>NOT</code> operator. For example:</p>
<pre><code class="language-bash">--filter=&quot;NOT (serverConfig.name = 'Minecraft Production 2')&quot;
</code></pre>
<p>This will return all servers where the <code>serverConfig.name</code> is <strong>not</strong> <code>&quot;Minecraft Production 2&quot;</code>.</p>
<h2 id="accessing-nested-properties">Accessing Nested Properties</h2>
<p>You can filter based on nested properties using dot notation. For example, if you want to filter servers based on a
nested property like <code>serverConfig.name</code>, you can do:</p>
<pre><code class="language-bash">--filter=&quot;serverConfig.name = 'Minecraft Production 2'&quot;
</code></pre>
<p>Here’s an example using the <code>serverConfig</code> object from a typical server JSON structure (just the interesting part is
shown here):</p>
<pre><code class="language-json">{
  &quot;id&quot;: 134,
  &quot;serverConfig&quot;: {
    &quot;name&quot;: &quot;Minecraft Production 2&quot;,
    &quot;status&quot;: &quot;ready&quot;
  }
}
</code></pre>
<p>This filter will return all servers with the <code>serverConfig.name</code> set to <code>&quot;Minecraft Production 2&quot;</code>.</p>
<h2 id="examples">Examples</h2>
<h3 id="filtering-servers-by-config">Filtering Servers by Config</h3>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;serverConfig.status = 'ready' AND serverConfig.name = 'Minecraft Production 2'&quot;
</code></pre>
<p>This filter will return servers that are <code>ready</code> and have the name <code>&quot;Minecraft Production 2&quot;</code>.</p>
<h3 id="combining-logical-conditions">Combining Logical Conditions</h3>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;(serverConfig.status = 'ready' AND serverConfig.name = 'Minecraft Production 2') OR id = 211&quot;
</code></pre>
<p>This will return servers that either:</p>
<ul>
<li>Have a <code>serverConfig.status</code> of <code>&quot;ready&quot;</code> <strong>and</strong> a <code>serverConfig.name</code> of <code>&quot;Minecraft Production 2&quot;</code>, <strong>or</strong></li>
<li>Have an <code>id</code> of <code>211</code>.</li>
</ul>
<h3 id="negating-conditions">Negating Conditions</h3>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;NOT (serverConfig.status = 'ready')&quot;
</code></pre>
<p>This filter will return all servers where the <code>serverConfig.status</code> is <strong>not</strong> <code>&quot;ready&quot;</code>.</p>
<h3 id="filtering-by-ports">Filtering by Ports</h3>
<p>If you need to filter based on the <code>ports</code> object in the server JSON, you can do so using nested access. For example, to
filter by the <code>publishedPort</code> in <code>Game Port</code>:</p>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;ports['Game Port'].publishedPort = 30097&quot;
</code></pre>
<p>This will return servers where the published game port is <code>30097</code>.</p>
<h2 id="practical-use-cases">Practical Use Cases</h2>
<h3 id="filtering-for-inactive-servers">Filtering for Inactive Servers</h3>
<p>You can quickly filter for servers that are not running:</p>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;status.state != 'running'&quot;
</code></pre>
<p>This returns all servers whose <code>status.state</code> is not <code>running</code>.</p>
<h3 id="filtering-by-location">Filtering by Location</h3>
<p>If you need to filter servers based on their location, you can access the <code>location</code> object:</p>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;location.country = 'de' AND location.city = 'limburg'&quot;
</code></pre>
<p>This will return all servers located in the city of Limburg, Germany.</p>
<h2 id="advanced-filters">Advanced Filters</h2>
<p>You can also create more complex filter expressions that combine multiple conditions:</p>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;(serverConfig.name = 'Minecraft Production 2' OR serverConfig.name = 'ODIN Fleet') 
AND location.country = 'de'&quot;
</code></pre>
<p>This filter will return servers with either the name <code>&quot;Minecraft Production 2&quot;</code> or <code>&quot;ODIN Fleet&quot;</code> that are located in
Germany.</p>
`}),e.add({id:3507,href:"https://www.4players.io/fleet/cli/usage/global-flags/",title:"Global Flags",section:"ODIN Fleet Documentation",description:"Learn about the global flags available for the ODIN CLI.",content:`<p>The ODIN CLI supports a number of global flags that can be used with any command. These flags are used to control the
behavior of the CLI and can be used to set options like the output format, verbosity, and more.</p>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3508,href:"https://www.4players.io/fleet/cli/usage/output-formatting/",title:"Output Formatting",section:"ODIN Fleet Documentation",description:"Learn how to format the output of ODIN CLI commands.",content:`<p>The ODIN CLI supports various output formats to accommodate different needs, such as human-readable formats for direct
interaction and machine-readable formats for scripts and automation.</p>
<h2 id="basics">Basics</h2>
<p>The output format can be set using the <code>--format</code> flag. If omitted, the default format is used that is specific to each
command. If values to be printed in tables or as a value are objects or arrays, they are automatically converted to JSON
format.</p>
<p>I.e. the Servers object has a hash map of ports. If you want to print the published ports of your server, you can use
the following command:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;table(id,addr,ports)&quot;
</code></pre>
<p>This will output a table with the server ID, IP address, and the ports object in JSON format. You can also access nested
properties by using the dot syntax. If you want to print the published game port of your server, you can use the
following
command:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;table(id,addr,ports['Game Port'].publishedPort)&quot;
</code></pre>
<p>The <code>Game Port</code> is the name of the port configuration you created in the server configuration. The <code>publishedPort</code> is
the
port that is actually used by the server.</p>
<h2 id="default-output">Default Output</h2>
<p>The default format is human-readable and designed to be intuitive for each command.</p>
<h2 id="json-output">JSON Output</h2>
<p>The <code>json</code> format outputs the command results in JSON format, conforming to the API specifications. This is useful for
processing data programmatically.</p>
<pre><code class="language-bash">odin &lt;command&gt; --format=json
</code></pre>
<h2 id="table-output">Table Output</h2>
<p>The <code>table(propertyList)</code> format prints the result in a table format. The <code>propertyList</code> is a comma-separated list of
properties you want to display as table columns. Nested properties can be accessed using the dot syntax (e.g.,
<code>serverConfig.id</code>).</p>
<pre><code class="language-bash">odin &lt;command&gt; --format=&quot;table(id,name)&quot;
</code></pre>
<p><strong>Example</strong>:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;table(id,addr,ports['Game Port'].publishedPort)&quot;
</code></pre>
<p>This would display a table with columns with the <code>id</code>, the servers IP address and the published game port.</p>
<h2 id="flattened-output">Flattened Output</h2>
<p>The <code>flattened[noPad,separator='-&gt;'](propertyList)</code> format prints a simple key value pair output, where each property is
displayed on a new line. The <code>separator</code> attribute allows you to define a custom separator between the key and value.</p>
<pre><code class="language-bash">odin &lt;command&gt; --format=&quot;flattened(id,name)&quot;
</code></pre>
<p><strong>Optional Attributes</strong>:</p>
<ul>
<li><strong>noPad</strong>: Disables padding, resulting in a more compact output.</li>
<li><strong>separator</strong>: Changes the default separator (<code>:</code>) to any other character(s).</li>
</ul>
<p><strong>Example</strong>:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;flattened[separator='-&gt;'](id,name)&quot;
</code></pre>
<p>This would output:</p>
<pre><code>id-&gt;12345
name-&gt;MyServer
</code></pre>
<h2 id="value-output">Value Output</h2>
<p>The <code>value[separator='-&gt;'](propertyList)</code> format prints only the values of the specified properties in a single line,
separated by the chosen separator (default is tab).</p>
<pre><code class="language-bash">odin &lt;command&gt; --format=&quot;value[separator=':'](id,name)&quot;
</code></pre>
<p><strong>Optional Attributes</strong>:</p>
<ul>
<li><strong>separator</strong>: An optional attribute that lets you define a custom separator for the values.</li>
</ul>
<p><strong>Examples</strong>:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;value[separator=':'](id,name)&quot;
</code></pre>
<p>This would output:</p>
<pre><code>12345:MyServer
</code></pre>
<p>It&rsquo;s a powerful tool for extracting specific information from the output of a command. I.e. it&rsquo;s super useful in scripts
or automation tasks. For example when creating an item you can use the <code>value</code> format to just get the ID of the created
item. That can easily be used in the next command.</p>
<pre><code class="language-bash">IMAGE_ID=$(
  odin fleet images create \\
  --name=&quot;Example Image&quot; \\
  --type=&quot;dockerImage&quot; \\
  --docker-image=&quot;example/example-image:latest&quot; \\    
  --registry-id=1 \\
  --force \\
  --format=&quot;value(id)&quot;)
  
echo &quot;Created image with ID: $IMAGE_ID&quot;
</code></pre>
<p>This would store the ID of the created image in the <code>IMAGE_ID</code> variable.</p>
<h2 id="advanced-property-lists">Advanced Property Lists</h2>
<p>Property lists can be very flexible and powerful, especially when dealing with nested data or arrays. Here are some
advanced examples:</p>
<h3 id="accessing-nested-properties">Accessing Nested Properties</h3>
<pre><code class="language-bash">odin fleet servers list --format=&quot;value[separator=':'](id,serverConfig.id)&quot;
</code></pre>
<p>Output:</p>
<pre><code>12345:67890
</code></pre>
<h3 id="indexing-arrays">Indexing Arrays</h3>
<pre><code class="language-bash">odin fleet configs list --format=&quot;value[separator=':'](id,name,env[0].key,env[0].value)&quot;
</code></pre>
<p>This would output the first key-value pair in the <code>env</code> array.</p>
<h2 id="functions">Functions</h2>
<p>Functions can be used in the property list to manipulate the data before it is printed. Functions have this format:
<code>functionName(parameter)</code>.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>While parameters in the property list are acting on individual items in the data, functions are acting on the entire
dataset. Example: You have a list with 5 items. <code>value(id)</code> will return the ID of each item, while <code>value(count(id))</code>
will
iterate over each item in the dataset and return the number of items that have an ID (so all of them).</p>
</div>
</div>

<p>You can combine functions with parameters, but that might not always make sense. For example, <code>value(count(id),id)</code>
would return something like this:</p>
<pre><code class="language-bash">5,1234
5,5678
5,9101
5,1121
5,3141
</code></pre>
<h3 id="counting-items">Counting Items</h3>
<p>Parameters in the property list can also be functions. This can be useful for counting items. For example, to count the
number of configs. You can also combine that with <a href="/fleet/cli/usage/filters/">filters</a> to count specific
items.</p>
<p>Return the number of running servers:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;value(count(id))&quot; --filter=&quot;status.state='running'&quot;
</code></pre>
`}),e.add({id:3509,href:"https://www.4players.io/odin/sdk/unity/1.1.0/manual/playbackcomponent/",title:"Playback Component",section:"ODIN Documentation",description:"This component handles ODIN audio playback",content:`<p><a href='/odin/sdk/unity/1.1.0/classes/playbackcomponent/' class="btn btn-primary">Switch to scripting</a></p>
<p>This component is automatically created and attached during runtime when you call the method <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

on the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 singleton in your scene.</p>
<p><strong>Do not add this component manually in the editor.</strong></p>
<p>More info on this topic can be found here:</p>
<ul>
<li><span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 reference documentation</li>
<li><span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and how to use it</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity Multiplayer Game Integration Guide</a></li>
</ul>
`}),e.add({id:3510,href:"https://www.4players.io/odin/sdk/unity/1.6.6/manual/playbackcomponent/",title:"Playback Component",section:"ODIN Documentation",description:"This component handles ODIN audio playback",content:`<p><a href='/odin/sdk/unity/1.6.6/classes/playbackcomponent/' class="btn btn-primary">Switch to scripting</a></p>
<p>This component is automatically created and attached during runtime when you call the method <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

on the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 singleton in your scene.</p>
<p><strong>Do not add this component manually in the editor.</strong></p>
<p>More info on this topic can be found here:</p>
<ul>
<li><span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 reference documentation</li>
<li><span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and how to use it</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity Multiplayer Game Integration Guide</a></li>
</ul>
`}),e.add({id:3511,href:"https://www.4players.io/odin/sdk/unity/manual/playbackcomponent/",title:"Playback Component",section:"ODIN Documentation",description:"This component handles ODIN audio playback",content:`<p><a href='/odin/sdk/unity/classes/playbackcomponent/' class="btn btn-primary">Switch to scripting</a></p>
<p>This component is automatically created and attached during runtime when you call the method <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

on the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 singleton in your scene.</p>
<p><strong>Do not add this component manually in the editor.</strong></p>
<p>More info on this topic can be found here:</p>
<ul>
<li><span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 reference documentation</li>
<li><span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and how to use it</li>
<li><a href="/odin/guides/unity/unity-mirror/">Unity Multiplayer Game Integration Guide</a></li>
</ul>
`}),e.add({id:3512,href:"https://www.4players.io/fleet/cli/usage/",title:"Usage",section:"ODIN Fleet Documentation",description:"Get started with ODIN Fleet CLI",content:`<p>The ODIN CLI is a comprehensive command-line tool for managing and interacting with the game server hosting services
provided by 4Players. With this tool, you can manage apps, configure fleets, deploy servers, and perform various other
operations directly from your terminal.</p>
<h2 id="key-features">Key Features</h2>
<ul>
<li><strong>Error Handling</strong>: In case of an error, the CLI sends an error message to <code>stderr</code> and exits with code 1.</li>
<li><strong>Successful Execution</strong>: If everything works as expected, the CLI exits with code 0 and prints the result to
<code>stdout</code>.</li>
<li><strong>Output Formatting</strong>: Customize the output format using the <code>--format</code> flag.</li>
<li><strong>Force Execution</strong>: The <code>--force</code> flag allows bypassing confirmation prompts.</li>
<li><strong>Quiet Mode</strong>: The <code>--quiet</code> flag suppresses informational messages, providing a cleaner output.</li>
</ul>
<p>You can use the internal help command to get a list of available commands and their descriptions:</p>
<pre><code class="language-bash">odin --help
</code></pre>
<p>You can get help for a specific command by running the following command:</p>
<pre><code class="language-bash">odin &lt;command&gt; --help
</code></pre>
<h2 id="authentication">Authentication</h2>
<p>Before using the CLI, users must authenticate by providing their API key. The API key can be obtained from
the <a href="https://console.4players.io/settings/api-keys">4Players Console</a>. The API key can be provided either during the
initial setup or via the <code>--api-key</code> parameter, which is particularly useful in CI/CD environments.</p>
<p>To log in:</p>
<pre><code class="language-bash">odin login --api-key=&lt;YOUR_API_KEY&gt;
</code></pre>
<p>If you omit the <code>--api-key</code> parameter, the CLI will prompt you to enter the API key interactively.</p>
<h2 id="app-selection">App Selection</h2>
<p>Users must select an app before executing certain commands. This can be done interactively or by providing the app ID
directly with the <code>--app-id</code> parameter, which is especially useful in automated scripts.</p>
<p>To select an app interactively:</p>
<pre><code class="language-bash">odin apps select
</code></pre>
<p>To use a specific app via the command line in any command just add the <code>--app-id</code> parameter overriding the selected app:</p>
<pre><code class="language-bash">odin &lt;command&gt; --app-id=&lt;APP_ID&gt;
</code></pre>
`}),e.add({id:3513,href:"https://www.4players.io/odin/guides/unity/getting-started-unity/",title:"Getting Started with Unity",section:"ODIN Documentation",description:"Discover how to set up realtime 3D positional voice chat using ODIN in Unity in just 20 minutes. Enhance your game's immersion and communication with this step-by-step guide.",content:`<p>At the end of this guide, you&rsquo;ll be able to chat with friends and colleagues with realtime voice positioned in 3D. It
will take around 20 minutes of your time to finish this guide.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Please note</strong>: Although it&rsquo;s not required to understand the basic concepts of ODIN to follow this guide, it&rsquo;s definitely
helpful. We try our best to give some explanation in this guide, however, if you are not in a hurry, we recommend reading
through the <a href="/odin/introduction/">introduction</a> first.</p>
</div>
</div>

<h2 id="requirements">Requirements</h2>
<h3 id="supported-platforms">Supported platforms</h3>
<ul>
<li>Windows (x64)</li>
<li>MacOS (Universal)</li>
<li>iOS (Universal)</li>
<li>Android (ARM64)</li>
</ul>
<p>For additional platform support, please contact us!</p>
<h2 id="create-an-empty-unity-project">Create an empty Unity project</h2>
<p>First, you&rsquo;ll need to create an empty Unity project. Please note that ODIN requires <strong>Unity version 2019.4 and
later</strong>. In this guide we used version 2020.3.17f1, but feel free to use what you have installed. We also used the
Unity Hub version 3.0.0 - if you are using an earlier version of the hub your screen might look a bit different, but
the steps are basically the same.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_create_project.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_create_project.jpg"
         alt="Creating a new 3D project in Unity with the Unity Hub." width="100%"/></a><figcaption>
            <p>Creating a new 3D project in Unity with the Unity Hub.</p>
        </figcaption>
</figure>
<p>Please choose the 3D template, choose a folder on your hard disk and click on <strong>Create Project</strong>. After a few
moments the Unity Editor will start, presenting an empty scene in a new project.</p>
<h2 id="install-odin-sdk">Install ODIN SDK</h2>
<p>Next step is to install the ODIN Unity SDK in the new project.</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="install-the-samples">Install the samples</h2>
<p>In the next step, we need to install the samples, so we can use them directly in the Unity editor. Open the Package
Manager. Click on the menu <strong>Window</strong> and then <strong>Package Manager</strong>. A new window will pop up:</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_package_manager.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_package_manager.jpg"
         alt="The Package Manager" width="100%"/></a><figcaption>
            <p>The Package Manager</p>
        </figcaption>
</figure>
<p>Make sure that <code>Packages: In Project</code> is selected in the dropdown (see highlighted box in screenshot above),
otherwise click on it and choose <code>Packages: In Project</code> to show all packages installed in this project. In the list,
you should see <strong>4Players ODIN</strong>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_package_manager_samples.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_package_manager_samples.jpg"
         alt="Importing the samples" width="100%"/></a><figcaption>
            <p>Importing the samples</p>
        </figcaption>
</figure>
<p>Click on the <strong>4Players ODIN</strong> item in the list on the left side. You&rsquo;ll see some package details. Expand the
<strong>Samples</strong> collapsible section to reveal available examples and click on the <strong>Import</strong> button to install the samples.</p>
<h2 id="loading-the-sample-scene">Loading the sample scene</h2>
<p>After a couple of seconds, the samples will be installed in your <strong>Assets</strong> folder as you can see in this
screenshot:</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_example.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_example.jpg"
         alt="ODIN sample" width="100%"/></a><figcaption>
            <p>ODIN sample</p>
        </figcaption>
</figure>
<p>Navigate to the <strong>Assets/Samples/4Players ODIN/__VERSION__/Examples/Positional Audio</strong> folder in your asset browser.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note, <em>__VERSION__</em> stands for the current version number of the ODIN SDK. As you can see in the screenshot
above, the latest version number was <em>0.4.3</em> when this guide has been written.</p>
</div>
</div>

<p>Double-click on the sample scene <strong>Sample3dScene</strong> to load the scene (highlighted in the screenshot) in the Unity
editor.</p>
<h2 id="understanding-the-scene">Understanding the scene</h2>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_sample_scene.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_scene.jpg"
         alt="The sample scene loaded in the editor" width="100%"/></a><figcaption>
            <p>The sample scene loaded in the editor</p>
        </figcaption>
</figure>
<p>The scene has a couple of Game Objects. Let&rsquo;s explore them one after the other:</p>
<dl>
<dt>Main Camera</dt>
<dd>This is the main camera of the scene.</dd>
<dt>Event System</dt>
<dd>This sample requires an EventSystem (you can create it in your own project in the menu <strong>GameObject -&gt; UI -&gt; Event
System</strong>)</dd>
<dt>Directional Light</dt>
<dd>A light, otherwise it&rsquo;s kind of dark</dd>
<dt>Player</dt>
<dd>An instance of the <em>Player</em> prefab. You can find the prefab in the <em>Assets/Samples/4Players
ODIN/__VERSION__/Examples/Positional Audio/Player.prefab</em> file. This object represents the player in this scene,
i.e. the person sitting in front of the device. We&rsquo;ll have a closer look at this object later in this guide.</dd>
<dt>ODIN Manager 3D Variant</dt>
<dd>This object manages communication with ODIN servers and allows you to set up various settings. If you are curious,
you can find a manual of all those settings <a href="/odin/sdk/unity/manual/">here</a></dd>
<dt>Plane</dt>
<dd>The plane that acts as a simple &ldquo;floor&rdquo; in this scene.</dd>
</dl>
<h2 id="setting-an-odin-access-key">Setting an ODIN access key</h2>
<p>Select the <em>ODIN Manager 3D Variant</em> GameObject in the hierarchy. The inspector on the right side will reveal all
ODIN settings. We now need to set an access key that will allow the client (in this case the Unity Editor) to
connect to ODIN servers.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is an important topic, that we don&rsquo;t want to dive in deeper right now, but you&rsquo;ll have to take a minute to
understand that later. Check out our guide on this topic here: <a href="/odin/introduction/access-keys/">Understanding Access Keys</a>.</p>
</div>
</div>

<p>As we want to keep things simple, you can generate an access key right from Unity. Expand the <strong>Client
Authorization</strong> collapsible to reveal the authorization settings:</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/odin_unity_sample_client_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_client_settings.jpg"
         alt="The client authentication settings" width="50%"/></a><figcaption>
            <p>The client authentication settings</p>
        </figcaption>
</figure>
</center>
<p>Click on the <span class="external-reference">Manage Access <a href="/odin/sdk/unity/manual/odineditorconfig/#client-settings"><i class="fas fa-external-link-alt"></i></a></span>
. You&rsquo;ll see a dialog like this:</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg"
         alt="Generate an access token within Unity" width="50%"/></a><figcaption>
            <p>Generate an access token within Unity</p>
        </figcaption>
</figure>
</center>
<p>Click on the <code>Generate Access Key</code> to generate an access key for free. This will allow you to connect with up
to <strong>25 users</strong>. Don&rsquo;t use this access key in production!</p>
<p>Close the Access Key Manager window. Now you should see the access key set in the <em>Client Authorization</em> inspector.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Some users reported that the generated access key is deleted by the Unity editor after navigating around. This
seems to be a Unity bug. As a work-around, after pressing the &ldquo;Generate Access Key&rdquo;, copy the Access key from the
inspector field, empty it with DELETE and copy it in again. This way the access key is stored by the inspector.</p>
</div>
</div>

<h2 id="running-the-sample">Running the sample</h2>
<p>Congratulations. Let&rsquo;s test the sample scene. Press the Play button in the Unity Editor.
You should see something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_sample_play_1.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_play_1.jpg"
         alt="The example scene in Play mode" width="100%"/></a><figcaption>
            <p>The example scene in Play mode</p>
        </figcaption>
</figure>
<p>You&rsquo;ll see the Player GameObject from a top-down view. You&rsquo;ll notice that the microphone is active and recording. On platforms like macOS, iOS, or Android, you may need to grant Unity permission to access your microphone beforehand.</p>
<p>You can drag &amp; drop the <em>Player</em> cube with your mouse to position it somewhere else on the scene. That will become
important later to experience 3D audio.</p>
<p>As always with voice chat, it&rsquo;s boring if you are alone. So let&rsquo;s get some other guys in the room.</p>
<h2 id="building-the-project">Building the project</h2>
<p>To get in more users, we&rsquo;ll need to build the project, so we can share the binary with friends or colleagues. Open the
build settings window by navigation to the menu <strong>File -&gt; Build Settings</strong>.</p>
<figure style="max-width: 70%px"><a href="/images/odin/odin_unity_build_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_build_settings.jpg"
         alt="Unity Build Settings" width="70%"/></a><figcaption>
            <p>Unity Build Settings</p>
        </figcaption>
</figure>
<p>Click on the <strong>Add Open Scenes</strong> button to add the current scene to the list.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Very important for Mac users</strong>: If you want to build for macOS or iOS, you need to set a string for microphone
usage in the player settings. Otherwise, Unity editor will fail to build the target with obscure error messages. We
have compiled a guide how to set that, and you can find it <a href="/odin/faq/unity/building-does-not-work-anymore-after-odin-integration/">here</a>.</p>
</div>
</div>

<p>Click on the <strong>Build and Run</strong> button to build the current scene and running it on your own machine. You&rsquo;ll need to
provide a folder on your hard disk where the binary will be created.</p>
<p>After some time, you should see the application running fullscreen on your machine. Unity typically defaults to running
things in fullscreen. It&rsquo;s a bit easier to test with multiple instances of the app if they run in windowed mode.
Let&rsquo;s change that setting.</p>
<p>Navigate to the menu <strong>Edit -&gt; Project Settings</strong>. The Project Settings Window will appear. Choose <strong>Player
Settings</strong> on the left side and expand the <strong>Resolution and Presentation</strong> collapsible.</p>
<center>
<figure style="max-width: 70%px"><a href="/images/odin/odin_unity_player_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_player_settings.jpg"
         alt="Setting windowed mode" width="70%"/></a><figcaption>
            <p>Setting windowed mode</p>
        </figcaption>
</figure>
</center>
<h2 id="testing-odin">Testing ODIN</h2>
<p>Ok, now that we optimized our app settings, let&rsquo;s build and run the app again. Choose <strong>File -&gt; Build and Run</strong>. The
app should run in windowed mode now.</p>
<p>Now, get back into the Unity Editor and click on <strong>Play</strong>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_sample_running.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_running.jpg"
         alt="Sample app running as app and in the editor" width="100%"/></a><figcaption>
            <p>Sample app running as app and in the editor</p>
        </figcaption>
</figure>
<p>Now, finally, something interesting happens: You see another cube in the scene. If your volume is too high, or your
mic is too sensitive, you might hear an echo: That is, because both peers are running on the same machine with the
same input - which does not make much sense but for testing it is ok.</p>
<p>If you say something, you&rsquo;ll hear your own voice. Now, begin to drag &amp; drop the cubes around and notice how the
direction changes depending on the relative position each cube has to each other.</p>
<p>You can send the binary to your friend or colleague to test ODIN in a more realistic scenario.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: The position of the cubes is not synced over the network, as we want to keep things as simple as
possible in this example. So, every peer can drag &amp; drop the boxes around and will hear the voices from a direction
that he has set up on screen! Please keep that in mind when testing, e.g. if you ask your colleague: &ldquo;Do you hear me
from the right&rdquo;, they might hear you from the front or from the left, as they might have different cube positions on their screen.
That shows, that ODIN is a pure client side and deep engine integration - and thus very flexible and easy to use.</p>
</div>
</div>

<h2 id="how-does-it-work">How does it work?</h2>
<p>Congratulations, you now have a working example of ODIN integrated with 3D audio. Let&rsquo;s have a deeper look at it to
understand how everything works.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border">
ODIN is a client-server solution, which means that ODIN clients, i.e. applications built with Unity
or the Unity Editor itself, are connecting to ODIN servers and joining rooms. Every client connected to the same room
can listen to all audio streams of the other clients connected to a room. Every client may send audio in the room,
but does not have to. They may be muted or may just listen to the audio streams (e.g. spectators).
</div>
</div>

<p>These days, everyone is talking about 3D spatial audio (for example Apple Airpods use this technology). What that
means is, that the audio solutions tries to replicate how things work in the real world. Humans know from which
direction sound comes from, and they can even estimate the distance because sound is louder if closer and more quiet if
far away.</p>
<p>The opposite would be a phone call with headphones on your ears. It does not make any difference how far the other
person on the line (i.e. in the same room in ODIN terminology) is, it&rsquo;s always coming from the same &ldquo;direction&rdquo; it
sounds like right in front of you and the volume is the same.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border">
With ODIN, you can replicate both variants, or even mix them. There is only one setting in Unity that makes the 
whole difference: <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 available in <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
. 
</div>
</div>

<p>ODIN is deeply integrated into the game engine instead of being a layer above. ODIN therefore uses core Unity
technology:</p>
<ul>
<li><span class="external-reference">AudioListener <a href="https://docs.unity3d.com/ScriptReference/AudioListener.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
: This is the players ear within the scene. The position of the GameObject is
important if you are using 3D spatial (positional) audio. Typically, this is attached to the player GameObject or
the camera if you are not using 3D audio for voice.</li>
<li><span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
: An <code>AudioSource</code> in Unity acts as the &lsquo;speaker&rsquo; that generates sound within the scene. The <code>AudioSource</code> component has a setting called <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
, which determines whether the sound is spatial (3D) or non-spatial (2D). If you want the sound to be part of the 3D environment (i.e., affected by the object&rsquo;s position relative to the listener), set <code>spatialBlend</code> to <code>1.0</code>. On the other hand, if you want the sound to be heard at a constant volume regardless of the object&rsquo;s position (e.g., for sounds like collecting a coin), set it to <code>0.0</code>.</li>
</ul>
<p>Every peer and attached media on ODIN servers need to be replicated within Unity at runtime as shown in the diagram
below. Every peer in ODIN is typically replicated (depending on the use case) in Unity as a GameObject, this can be just
a player name in a list in a chat application or a Player object in a multiplayer game. Every media (i.e. microphone)
attached to a peer within an ODIN room is replicated in Unity with a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 which is typically
a child of the player object being the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 of the microphone linked to that peer.</p>
<pre><code class="language-mermaid">graph LR;
    subgraph Unity Scene
        subgraph Player1 [Player 1]
            PBC1[PlaybackComponent]--&gt;GO1[GameObject]                   
        end
        subgraph Player2 [Player 2]
            PBC2[PlaybackComponent]--&gt;GO2[GameObject]
        end
        
    end
    subgraph ODIN Server
        subgraph ODIN Room
            Peer1[Peer 1] --&gt; Media11[Media 1]--&gt; PBC1
            Peer2[Peer 2] --&gt; Media21[Media 2]--&gt; PBC2
        end    
    end    
    classDef blue fill:#DDFAFF
    class Player1,Player2 blue
</code></pre>
<p>To build this hierarchy we need to listen to certain events and handle them. Don&rsquo;t worry, it&rsquo;s super easy and just
requires a couple lines of code.</p>
<p>In the next section we&rsquo;ll have a closer look at how this is done:</p>
<h3 id="the-odin-manager-object">The ODIN Manager Object</h3>
<p>The first object that we&rsquo;ll have a closer look is the <code>OdinManager 3D Variant</code> object. You already know this Game Object
as you used it to set up your access key.</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/odin_unity_odin_manager_scripts.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_odin_manager_scripts.jpg"
         alt="The scripts attached to the Player object" width="50%"/></a><figcaption>
            <p>The scripts attached to the Player object</p>
        </figcaption>
</figure>
</center>
<p>If you look closer, you&rsquo;ll notice there are a couple of scripts attached to this GameObject:</p>
<dl>
<dt>Odin Editor Config</dt>
<dd>The <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 script allows you to set up ODIN within your game and handles client
authorization and is part of the ODIN SDK.</dd>
<dt>Odin Handler</dt>
<dd>This script does all the event handling and exposes various settings for the microphone and audio effects. See the
manual of <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 for a documentation of all the settings available and how to use the API.
This class is also part of the ODIN SDK.</dd>
<dt>Microphone Reader</dt>
<dd>This class is part of the ODIN SDK and captures the audio input from the microphone connected to the players PC and
sends it to ODIN servers once the client joined an ODIN room. See the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 for more
info on this component.</dd>
<dt>Simple Push To Talk</dt>
<dd>This script is part of the sample code and uses the ODIN SDK to implements joining a room and &ldquo;Push to Talk&rdquo; (i.e.
the microphone is always muted, and you need to press a button to unmute while talking). We&rsquo;ll have a closer look at
this script in the next paragraph.</dd>
</dl>
<h4 id="simple-push-to-talk">Simple Push To Talk</h4>
<p>Let&rsquo;s have a look at the <code>SimplePushToTalk.cs</code> script provided with the sample. It uses various APIs provided by the
ODIN SDK to join a room and to implement push to talk logic.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Basic Push to Talk
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using OdinNative.Unity.Audio;

namespace OdinNative.Unity.Samples
{
    public class SimplePushToTalk : MonoBehaviour
    {
        public string RoomName;
        [SerializeField]
        public KeyCode PushToTalkHotkey;
        public bool UsePushToTalk = true;
        public MicrophoneReader AudioSender;

        private void Reset()
        {
            RoomName = &quot;default&quot;;
            PushToTalkHotkey = KeyCode.C;
            UsePushToTalk = true;
        }

        // Start is called before the first frame update
        void Start()
        {
            if (AudioSender == null)
                AudioSender = FindObjectOfType&lt;MicrophoneReader&gt;();

            OdinHandler.Instance.JoinRoom(RoomName);
        }

        // Update is called once per frame
        void Update()
        {
            if (AudioSender)
                AudioSender.RedirectCapturedAudio = UsePushToTalk ? Input.GetKey(PushToTalkHotkey) : true;
        }
    }
}
</code></pre>
</div>
</div>

<p>We need to join a room so that we can chat with other peers in that same room. To do this, the
<code>SimplePushToTalk</code> script takes the <code>RoomName</code> parameter given in the Inspector and connects to that room with the
<span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the instance of the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
<p>The <code>OdinManager 3d Variant</code> also has a <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 script attached. This script handles microphone
input and sends it to all ODIN rooms that the player has joined. But, as we only want to send audio input when a
specific button is pressed, we&rsquo;ll get a reference to the <code>MicrophoneReader</code> instance in the <code>Start</code> function and
set the <span class="external-reference">RedirectCapturedAudio <a href="/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio/"><i class="fas fa-external-link-alt"></i></a></span>
 to <code>true</code> if audio should be sent (i.e. if Push to Talk is activated
and selected button is pressed) or <code>false</code> if no audio should be sent to the server.</p>
<p>So, that&rsquo;s it. As you can see, the ODIN 3D Manager handles a couple of settings like client authorization (access
key), handles microphone input and sends data to the server if the user has pressed a button.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: Per default, ODIN has <span class="external-reference">RedirectCapturedAudio <a href="/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio/"><i class="fas fa-external-link-alt"></i></a></span>
set to <code>true</code> which means that microphone
input is always sent to ODIN servers. You need to change the setting in the inspector of use a script like shown
above to customize that to your needs. Push to talk is just one example.</p>
</div>
</div>

<h3 id="the-player-object">The Player Object</h3>
<p>The second Game Object, that we want to take a close look at is the <code>Player</code> object in the scene. Select it, and you&rsquo;ll notice a
couple of scripts attached to this object:</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/odin_unity_sample_player_scripts.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_player_scripts.jpg"
         alt="The scripts attached to the Player object" width="50%"/></a><figcaption>
            <p>The scripts attached to the Player object</p>
        </figcaption>
</figure>
</center>
<dl>
<dt>Audio Listener</dt>
<dd>In many games, the audio listener is attached to the camera. In this case, we want the player&rsquo;s &ldquo;ears&rdquo; to be positioned at the player&rsquo;s location, which is important because we want Unity to calculate audio from other sources relative to the player&rsquo;s position, not the stationary camera above the scene. Please note that the <span class="external-reference">AudioListener <a href="https://docs.unity3d.com/ScriptReference/AudioListener.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 is a standard Unity component.</dd>
<dt>Drag Object</dt>
<dd>This is just a simple script that allows you to drag &amp; drop the cube. We won&rsquo;t go into detail on how this is
implemented, but feel free to have a look at the script in your preferred IDE.</dd>
<dt>Odin 3d Trigger</dt>
<dd>This script handles some ODIN events and creates the peer cubes. We&rsquo;ll dive into this script in a minute.</dd>
</dl>
<h4 id="odin-3d-trigger">Odin 3d Trigger</h4>
<p>The <code>Odin3dTrigger.cs</code> script is handling a couple of ODIN events and creates the peers whenever a peer connects.
It&rsquo;s a bit longer, so we go through it step, by step.</p>
<p>In the <code>Start</code> function, we&rsquo;ll listen to some ODIN events. In this example we do it by code, but please feel free to
connect them via the Unity Inspector (see <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 manual for more info on that).</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Handling events
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">void Start()
{
    OdinHandler.Instance.OnCreatedMediaObject.AddListener(Instance_OnCreatedMediaObject);
    OdinHandler.Instance.OnDeleteMediaObject.AddListener(Instance_OnDeleteMediaObject);
    OdinHandler.Instance.OnRoomLeft.AddListener(Instance_OnRoomLeft);

    var SelfData = OdinHandler.Instance.GetUserData();
    //Set Player
    GameObject player = GameObject.FindGameObjectsWithTag(&quot;Player&quot;).FirstOrDefault();
    if (player != null)
    {
        TextMesh label = player.GetComponentInChildren&lt;TextMesh&gt;();
        label.text = CustomUserDataJsonFormat.FromUserData(SelfData)?.name ?? player.name;
    }
}
</code></pre>
</div>
</div>

<p>So, we listen to the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
, <span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>

events:</p>
<ul>
<li><strong>OnCreatedMediaObject</strong>: Triggered whenever a peer started sending audio data</li>
<li><strong>OnDeleteMediaObject</strong>: Triggered whenever a peer stopped sending audio data</li>
<li><strong>OnRoomLeft</strong>: Triggered when a peer left a room.</li>
</ul>
<p>We also get the <span class="external-reference">User Data <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 of the user and set the text label of the player object to the player
name (if available).</p>
<p>Now, as you can see, we need to have some callback methods for these events, let&rsquo;s have a look step by step:</p>
<h4 id="handling-on-media-created-events">Handling On Media Created Events</h4>
<p>This event is triggered whenever a peer joined a room and started to send audio data. There is a difference between
a peer joining a room and media added to that room for that peer, because peers may only join a room without sending
their own data (i.e. spectators). So, to simplify things we just handle the case when a player joined to the room
starts sending audio (which is the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 event):</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                The OnMediaAdded implementation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">GameObject CreateObject()
{
    return Instantiate(prefab, new Vector3(0, 0.5f, 6), Quaternion.identity);
}

private void Instance_OnCreatedMediaObject(string roomName, ulong peerId, int mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    var peerContainer = CreateObject();

    //Add PlaybackComponent to new dummy PeerCube
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    //Some AudioSource test settings
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;

    //set dummy PeerCube label
    var data = CustomUserDataJsonFormat.FromUserData(room.RemotePeers[peerId]?.UserData);
    playback.gameObject.GetComponentInChildren&lt;TextMesh&gt;().text = data == null ?
        $&quot;Peer {peerId} (Media {mediaId})&quot; :
        $&quot;{data.name} (Peer {peerId} Media {mediaId})&quot;;

    PeersObjects.Add(playback.gameObject);
}
</code></pre>
</div>
</div>

<p>This callback does four things:</p>
<ul>
<li>Instantiate a peer cube (from the peer prefab) which represents the peer in the scene as a cube with the
<code>CreateObject</code> function.</li>
<li>Attach the audio source for that peer to the instantiated peer GameObject. ODIN SDK provides a function <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

for that. It creates a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 and attached it to the peer cube GameObject. The
function also returns the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 instance so that we can customize it in the next step.</li>
<li>The <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 uses a Unity <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 for &ldquo;sending&rdquo; audio into
the scene. You can get your hands to that audio source using the <code>PlaybackSource</code> property. In this sample,
the <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 value is set to <code>1.0</code> to activate 3D spatial audio for peers and a couple of
other settings like the volume attenuation is set.</li>
<li>Use the <span class="external-reference">User Data <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 of the peer to get its name and set the label of that peer to that name. This
allows us to identify the peers in the scene.</li>
</ul>
<h2 id="some-experiments">Some experiments</h2>
<p>Let&rsquo;s do some experiments with the sample that we have right now to showcase the power of ODIN and to give you an
idea what you can do with it in your game.</p>
<p>In the <code>Odin3dTrigger.cs</code> script, in the <code>Instance_OnCreatedMediaObject</code> function adjust some settings made to the
<code>PlaybackComponent.PlaybackSource</code>. As this is a standard Unity <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 object, you&rsquo;ll find the
component in the Unity documentation. Here are a couple of things you can try:</p>
<h3 id="switching-to-gods-voice">Switching to &ldquo;gods voice&rdquo;</h3>
<p>Change the line where <code>spatialBlend</code> is set into this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Disabling 3D audio
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">playback.PlaybackSource.spatialBlend = 0.0f; //Disable 3D audio
</code></pre>
</div>
</div>

<p>This just disables 3D audio and every ODIN <code>AudioSource</code> in the scene will always have the same volume. That is
basically the same experience as if all players would use an external voice chat solution like TeamSpeak or Discord.
The voice is &ldquo;decoupled&rdquo; completely from the Gameplay. It may be useful if you want to replicate phone calls or CB
communication between team members.</p>
<p>Please note, that <code>spatialBlend</code> is a float value. You can also set it to <code>0.5f</code> to have something in between.</p>
<h3 id="adjusting-voice-attenuation">Adjusting voice attenuation</h3>
<p>Right now, peers can only be heard up to 10 units. Reduce that to 2 and you&rsquo;ll only hear peers that are very close
to you. You can use these properties to implement &ldquo;sound damping&rdquo; dependent on the current location of the peer
relative to the player.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Setting voice attenuation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">playback.PlaybackSource.minDistance = 1;
playback.PlaybackSource.maxDistance = 2;
</code></pre>
</div>
</div>

<h2 id="summary">Summary</h2>

<table class="features">
    <tr>
    <td class="index"><span class="index">1</span></td>
    <td class="name">ODIN SDK</td>
    <td><p><a href="/odin/sdk/unity/">Install</a> the ODIN SDK into your project.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">2</span></td>
    <td class="name">Add ODIN Manager</td>
    <td><p><a href="/odin/sdk/unity/manual/">Drag &amp; Drop</a> the ODIN Manager Prefab into your scene.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">3</span></td>
    <td class="name">Access Key</td>
    <td><p><a href="/odin/introduction/access-keys/">Create and set an access key</a> in the Unity inspector.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">4</span></td>
    <td class="name">Handle ODIN events</td>
    <td><p>Handle some ODIN events like shown above or described in the <a href="/odin/guides/unity/event-handling/">Event Handling guide</a>
and use <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
to create the other players audio sources and attaching them to
player objects in your scene.</p>
</td>
</tr>

</table>

<p>That&rsquo;s it! There&rsquo;s not much more to do to integrate ODIN into your project. Of course, there are plenty of APIs available to customize the experience to suit your needs. Keep in mind that ODIN integration is fully native to Unity—you&rsquo;re working with Unity as usual, without the need for unfamiliar APIs or sending additional data to external servers.</p>
<p>Of course, if you are working on a multiplayer game, things are a little bit more complex, but just a little bit. <a href="/odin/guides/unity/unity-mirror/">We
have created a guide</a> where you create a complete multiplayer game with Mirror Networking and add ODIN to it. After a couple of minutes you&rsquo;ll have the same example as this one, but player positions will be synced between all peers.</p>
<h2 id="next-steps">Next steps</h2>
<p>Now that you have a working example find out more about the components ODIN has to offer.</p>
<ul>
<li>Read our <a href="/odin/guides/unity/event-handling/">Event Handling guide</a> to learn which events you need
to implement. It shows an example of basic walkie-talkie like voice combined with 3D positional audio.</li>
<li>Check out the <a href="/odin/sdk/unity/manual/">Unity manual</a> with more info on the components and what
the various settings are for.</li>
<li>Check out the <a href="/odin/sdk/unity/classes/">API Reference</a> with a comprehensive documentation on all
classes and
interfaces exposed by the ODIN SDK.</li>
<li>Follow our <a href="/odin/guides/unity/unity-mirror/">guide on how to add Unity to a Mirror Networking based multiplayer game</a>. After 20 minutes you&rsquo;ll have a fully working multiplayer game with 3D positional
voice chat and synced player positions</li>
<li>In our <a href="/odin/guides/unity/pun-sample/">Photon open-source sample</a> you can download and play around with a working example based on Photon Pun.</li>
</ul>
`}),e.add({id:3514,href:"https://www.4players.io/fleet/cli/fleet/images/",title:"Images",section:"ODIN Fleet Documentation",description:"Learn how to work with ODIN Fleet images using the CLI.",content:`<p>Images are the base building blocks of your deployments. They contain the software and configuration needed to run your
game servers and services. This guide will show you how to manage images in your ODIN Fleet account using the CLI.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In code, we sometimes refer to images as <code>Binary</code>. This is the same thing as an Image. In some data structures (like in
<code>ServerConfig</code>) we refer to deployments in a <code>binaryId</code>. We plan to deprecate this terminology in the future.</p>
</div>
</div>

<h2 id="overview">Overview</h2>
<p>The <code>images</code> commands allow you to manage images in your account. You can create new images, list existing images, and
delete images that are no longer needed.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet images &lt;command&gt;</code></p>
<h2 id="commands">Commands</h2>
<ul>
<li><a href="./list">List</a>: List all images in your account.</li>
<li><a href="./get">Get</a>: Display detailed information about an image.</li>
<li><a href="./create">Create</a>: Create a new image.</li>
<li><a href="./delete">Delete</a>: Delete an image.</li>
<li>~Update~: Update an image (not yet implemented).</li>
</ul>
`}),e.add({id:3515,href:"https://www.4players.io/odin/introduction/",title:"Introduction",section:"ODIN Documentation",description:"An introduction to 4Players ODIN",content:`<p>Real-time communication is essential for a fun, immersive gaming experience. This is why our dedicated development team
is creating a powerful set of tools that make games more immersive, social and interactive.</p>
<p>With ODIN, 4Players provides a complete, out-of-the-box solution that has been designed and built from the ground up for
gamers, developers and publishers so you don&rsquo;t need to spend valuable resources designing a comms solution on your own.</p>
<h2 id="how-does-it-work">How does it work?</h2>

<div><p>ODIN is a standalone client server architecture. 4Players hosts the servers, handles the network and all the audio
processing that is required for great voice communication. From your perspective, ODIN is a pur client integration, you
don&rsquo;t need to do any server side processing or maintenance.</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    OR2[Odin Room]
    OR[Odin Room]    
  end
  subgraph Gameserver
    GS[Game Server]
  end
  subgraph Game
    ClientA[Player A] --&gt; OR[ODIN Room]
    ClientB[Player B] --&gt; OR[ODIN Room] 
    ClientB[Player B] --&gt; GS[Game Server]   
    ClientC[Player C] --&gt; GS[Game Server]
    ClientC[Player C] --&gt; OR[ODIN Room] 
    ClientD[Player D] --&gt; GS[Game Server]
  end
  subgraph Lobby
    ClientE[Players E] --&gt; OR2[ODIN Room]
    ClientF[Players F] --&gt; OR2[ODIN Room]
  end      
</code></pre>
<p>This graph outlines how ODIN works in a multiplayer environment. You build the client application (i.e. the game)
and the server component (game server) as usual. Once ODIN is integrated into your game, the players device will
connect to the game server as usual, but in addition to that to ODIN servers that route all voice packets to all
other players joined to the same ODIN room. Players may choose not to use voice chat. Those players will not connect
to ODIN and will not be able to listen or talk to other players (like Player D). On the other side, other players
might only join the voice server, without playing - for example if they are in the lobby, or the angry mum yelling
that the player should stop playing and doing his homework (player A).</p>
<p>You can integrate ODIN in single player games with a community element, virtual or augmented reality based video
conferencing solutions, the meta verse, virtual homeschooling and training applications and of course multiplayer
games (peer to peer or dedicated servers) from simple shooters to massive multiplayer online games with thousands of
players in the same room.</p>
<p>As ODIN supports cross play you can even connect a mobile application or website directly
with players in the game. A battle net like launcher application based on Electron where players can meet and chat
and directly start a shared game with automatic hand-over.</p>
<p>The possibilities are endless, and you don&rsquo;t need to be an audio or server expert! <a href="/odin/introduction/concepts/">We have compiled a couple of
use-cases</a> if you are still unsure if ODIN fits for needs.</p>
</div>







<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border"><p>Install the SDK, add a couple
lines of code to join a room and handle three callbacks. That&rsquo;s it! <a href="/odin/guides/">Follow our step-by-step guides</a> and have a running example you can share with your collegues in less that 20 minutes! No
registration required, all within Unity or Unreal!</p>
</div>
</div>

<h2 id="odin-dashboard">ODIN Dashboard</h2>
<p>While you can create access keys on the go directly in the SDK or here in the documentation, those access keys are
only valid for up to 25 users. If you have subscribed to a paid tier, you can create access keys that handle
unlimited users in our dashboard. You can also set limits to manage your budget.</p>
<p>If you have subscribed to a paid tier, we already have created a project for you. You can create multiple access
keys for different apps or projects or even external developers - so that you can revoke them once they are finished.</p>
<p>In the dashboard you&rsquo;ll also find latest stats on your usage and peak number of users.</p>
<figure style="max-width: 400px"><a href="/images/odin/dashboard.jpg" title="Click to enlarge" data-lity><img src="/images/odin/dashboard.jpg"
         alt="ODIN Dashboard" width="400"/></a><figcaption>
            <p>ODIN Dashboard</p>
        </figcaption>
</figure>
<p><a href='https://app.netplay-config.4players.de/odin/en' target='' class="btn btn-primary">Go to ODIN Dashboard</a></p>
<h2 id="key-benefits">Key Benefits</h2>
<p>By integrating ODIN technology into your game, you can enjoy several benefits including:</p>
<h3 id="cutting-edge-technology">Cutting Edge Technology</h3>
<p>ODIN is the result from years of expertise and experience. 4Players combines business and industry insight with a very
modern technology stack to drive growth for your business.</p>
<h3 id="easy-to-get-started">Easy to Get Started</h3>
<p>Our <a href="../sdk">SDKs</a> include extensive documentation as well as numerous code samples allowing you to get the integration
done in just a few days. Shorten time to market by using our best-in-class technology to deliver seamless in-game
communication and improve your retention.</p>
<h3 id="highly-optimized">Highly Optimized</h3>
<p>We took a lot of effort to make sure you can focus your time and resources on building the game you envisioned. ODIN is
highly optimized, so developers can allocate more resources to other features of their game.</p>
<h3 id="truly-cross-platform">Truly Cross-Platform</h3>
<p>ODIN knows no boundaries or limitations and interoperates across platforms ensuring seamless communication and
collaboration for users on any device. Our native SDK libraries are available for various desktop operating systems
including Microsoft Windows, macOS and Linux as well as mobile devices running iOS or Android. Additionally, we provide
integrations for major game engines such as Unity and Unreal Engine All major web browsers are also supported.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">🚧 </div>
  
    <div class="w-100">Support for gaming consoles is planned for early 2022 and will cover Microsoft Xbox, Sony PlayStation 4/5 and Nintendo Switch. </div>
  
</div>

<h3 id="seemless-integration">Seemless Integration</h3>
<p>Our technology can be fully integrated into any game so players don’t need to interrupt the game experience to switch to
a third-party app like TeamSpeak or Discord.</p>
<h3 id="immersive-gaming-without-limits">Immersive Gaming without Limits</h3>
<p>In contrast to relying on external apps, integrating comms right into the game allows creating unique, ultra-realistic
and immersive gaming experiences. Using features like spatial audio and custom filters, there are no limits to
creativity. Plus, there is absolutely no interference with existing technology you might be using.</p>
<h3 id="no-data-mining">No Data Mining</h3>
<p>Privacy and security is very important to us. ODIN is completely user agnostic and we don’t harvest any data or tell you
how things should work or look. You are in complete control.</p>
<h3 id="massively-scalable">Massively Scalable</h3>
<p>Built with flexibility in mind, ODIN scales as your project requirements increase. Chat rooms are created on demand.
Whether your game has 10 or 10 million concurrent users, the service just works.</p>
<h3 id="cloud-or-on-premise-hosting">Cloud or On-Premise Hosting</h3>
<p>Choose between a managed cloud and a self-hosted solution. Let us deal with the setup, administration and bandwidth
costs or run our server software on your own infrastructure allowing you complete control and customization of your
deployment environment. The choice is yours.</p>
<h3 id="flexible-and-cost-effective">Flexible and Cost Effective</h3>
<p>User interaction is vital to building thriving communities within games. As a game developer, you can just download and use the SDK for free for up to 25 concurrently connected users (CCU). Or you can order the Starter package
today to be among the first studios to integrate ODIN. For the first 12 months we offer the full toolset with unlimited CCUs for a very small price and a little branding.</p>
<h2 id="basic-concepts">Basic Concepts</h2>
<p>Next, we recommend learning more about the basic concepts of ODIN. The basic flow of joining a room and adding media
like a microphone to it. Handling events being triggered as other players are joining the same room.</p>
<p><a href='/odin/introduction/structure/' class="btn btn-primary">Next: Basic Concepts</a></p>
<h2 id="getting-started">Getting started</h2>
<p>Can&rsquo;t wait to get started and experiencing ODIN? Then stop reading and start digging by following our getting started
guide. Choose your platform and you&rsquo;ll have ODIN up and running withing the next 20 minutes!</p>
<p>You might want to watch this <a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Unreal video tutorial series</a>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/7ZtC0WvX0c8?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>
</p>
<p>or watch this <a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V">Unity video tutorial series</a>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/S3DFxkWut9c?list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>
</p>
<div class="row gx-4">
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/sdk/unity">
<img class="teaser-image" src="/images/unity_sdk.jpg">
</a>
<h4 class="teaser-title">Unity</h4>
<div class="teaser-content">
 <p>Use our deep Unity integration to add the most immersive in-game voice chat to your product with minimal development overhead.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unity">Learn more</a>
</div>
</div>
</div>
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/sdk/unreal">
<img class="teaser-image" src="/images/unreal_sdk.jpg">
</a>
<h4 class="teaser-title">Unreal Engine</h4>
<div class="teaser-content">
 <p>Our upcoming Unreal Engine plugin will feature full support for all available platforms and come with Blueprint and C++ support.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal">Learn more</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/sdk/web">
<img class="teaser-image" src="/images/web_sdk.jpg">
</a>
<h4 class="teaser-title">Web Browser</h4>
<div class="teaser-content">
 <p>Our NPM package will feature full real-time communication support for all major web browsers including voice activity dectection.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/web">Learn more</a>
</div>
</div>
</div>
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/sdk/swift">
<img class="teaser-image" src="/images/odin/odin_swift_sdk.jpg">
</a>
<h4 class="teaser-title">Swift</h4>
<div class="teaser-content">
 <p>Integrate OdinKit into your iOS and macOS apps and add real-time voice communication in a couple of minutes and with
zero maintenance or operations.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/swift">Learn more</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3516,href:"https://www.4players.io/fleet/cli/login/",title:"Login",section:"ODIN Fleet Documentation",description:"Learn how to authenticate the ODIN CLI with your API key.",content:`<p>The <code>login</code> command is used to authenticate the CLI with your API key. It only needs to be run once, as the CLI will
store the API key in a configuration file on your system.</p>
<h2 id="login">Login</h2>
<h3 id="usage">Usage</h3>
<p><code>odin login</code> [<code>--api-key</code>=<code>YOUR_API_KEY</code>]</p>
<h3 id="flags">Flags</h3>
<ul>
<li><strong><code>--api-key=YOUR_API_KEY</code></strong>:<br>
The API key to authenticate with. If you omit the <code>--api-key</code> parameter, the CLI will prompt you to enter the API key
interactively.</li>
</ul>
<p>After logging in, the CLI will store the API key in a configuration file on your system. Next, you can select an app to
work with using the <a href="../apps">odin apps select</a> command.</p>
`}),e.add({id:3517,href:"https://www.4players.io/odin/offline-doc-getting-started-unity/",title:"ODIN Offline Documentation | Getting Started with Unity",section:"ODIN Documentation",description:"Discover how to set up realtime 3D positional voice chat using ODIN in Unity in just 20 minutes. Enhance your game's immersion and communication with this step-by-step guide.",content:`<p>At the end of this guide, you&rsquo;ll be able to chat with friends and colleagues with realtime voice positioned in 3D. It
will take around 20 minutes of your time to finish this guide.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Please note</strong>: Although it&rsquo;s not required to understand the basic concepts of ODIN to follow this guide, it&rsquo;s definitely
helpful. We try our best to give some explanation in this guide, however, if you are not in a hurry, we recommend reading
through the <a href="/odin/introduction/">introduction</a> first.</p>
</div>
</div>

<h2 id="requirements">Requirements</h2>
<h3 id="supported-platforms">Supported platforms</h3>
<ul>
<li>Windows (x64)</li>
<li>MacOS (Universal)</li>
<li>iOS (Universal)</li>
<li>Android (ARM64)</li>
</ul>
<p>For additional platform support, please contact us!</p>
<h2 id="create-an-empty-unity-project">Create an empty Unity project</h2>
<p>First, you&rsquo;ll need to create an empty Unity project. Please note that ODIN requires <strong>Unity version 2019.4 and
later</strong>. In this guide we used version 2020.3.17f1, but feel free to use what you have installed. We also used the
Unity Hub version 3.0.0 - if you are using an earlier version of the hub your screen might look a bit different, but
the steps are basically the same.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_create_project.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_create_project.jpg"
         alt="Creating a new 3D project in Unity with the Unity Hub." width="100%"/></a><figcaption>
            <p>Creating a new 3D project in Unity with the Unity Hub.</p>
        </figcaption>
</figure>
<p>Please choose the 3D template, choose a folder on your hard disk and click on <strong>Create Project</strong>. After a few
moments the Unity Editor will start, presenting an empty scene in a new project.</p>
<h2 id="install-odin-sdk">Install ODIN SDK</h2>
<p>Next step is to install the ODIN Unity SDK in the new project.</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="install-the-samples">Install the samples</h2>
<p>In the next step, we need to install the samples, so we can use them directly in the Unity editor. Open the Package
Manager. Click on the menu <strong>Window</strong> and then <strong>Package Manager</strong>. A new window will pop up:</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_package_manager.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_package_manager.jpg"
         alt="The Package Manager" width="100%"/></a><figcaption>
            <p>The Package Manager</p>
        </figcaption>
</figure>
<p>Make sure that <code>Packages: In Project</code> is selected in the dropdown (see highlighted box in screenshot above),
otherwise click on it and choose <code>Packages: In Project</code> to show all packages installed in this project. In the list,
you should see <strong>4Players ODIN</strong>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_package_manager_samples.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_package_manager_samples.jpg"
         alt="Importing the samples" width="100%"/></a><figcaption>
            <p>Importing the samples</p>
        </figcaption>
</figure>
<p>Click on the <strong>4Players ODIN</strong> item in the list on the left side. You&rsquo;ll see some package details. Expand the
<strong>Samples</strong> collapsible section to reveal available examples and click on the <strong>Import</strong> button to install the samples.</p>
<h2 id="loading-the-sample-scene">Loading the sample scene</h2>
<p>After a couple of seconds, the samples will be installed in your <strong>Assets</strong> folder as you can see in this
screenshot:</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_example.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_example.jpg"
         alt="ODIN sample" width="100%"/></a><figcaption>
            <p>ODIN sample</p>
        </figcaption>
</figure>
<p>Navigate to the <strong>Assets/Samples/4Players ODIN/__VERSION__/Examples/Positional Audio</strong> folder in your asset browser.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note, <em>__VERSION__</em> stands for the current version number of the ODIN SDK. As you can see in the screenshot
above, the latest version number was <em>0.4.3</em> when this guide has been written.</p>
</div>
</div>

<p>Double-click on the sample scene <strong>Sample3dScene</strong> to load the scene (highlighted in the screenshot) in the Unity
editor.</p>
<h2 id="understanding-the-scene">Understanding the scene</h2>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_sample_scene.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_scene.jpg"
         alt="The sample scene loaded in the editor" width="100%"/></a><figcaption>
            <p>The sample scene loaded in the editor</p>
        </figcaption>
</figure>
<p>The scene has a couple of Game Objects. Let&rsquo;s explore them one after the other:</p>
<dl>
<dt>Main Camera</dt>
<dd>This is the main camera of the scene.</dd>
<dt>Event System</dt>
<dd>This sample requires an EventSystem (you can create it in your own project in the menu <strong>GameObject -&gt; UI -&gt; Event
System</strong>)</dd>
<dt>Directional Light</dt>
<dd>A light, otherwise it&rsquo;s kind of dark</dd>
<dt>Player</dt>
<dd>An instance of the <em>Player</em> prefab. You can find the prefab in the <em>Assets/Samples/4Players
ODIN/__VERSION__/Examples/Positional Audio/Player.prefab</em> file. This object represents the player in this scene,
i.e. the person sitting in front of the device. We&rsquo;ll have a closer look at this object later in this guide.</dd>
<dt>ODIN Manager 3D Variant</dt>
<dd>This object manages communication with ODIN servers and allows you to set up various settings. If you are curious,
you can find a manual of all those settings <a href="/odin/sdk/unity/manual/">here</a></dd>
<dt>Plane</dt>
<dd>The plane that acts as a simple &ldquo;floor&rdquo; in this scene.</dd>
</dl>
<h2 id="setting-an-odin-access-key">Setting an ODIN access key</h2>
<p>Select the <em>ODIN Manager 3D Variant</em> GameObject in the hierarchy. The inspector on the right side will reveal all
ODIN settings. We now need to set an access key that will allow the client (in this case the Unity Editor) to
connect to ODIN servers.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This is an important topic, that we don&rsquo;t want to dive in deeper right now, but you&rsquo;ll have to take a minute to
understand that later. Check out our guide on this topic here: <a href="/odin/introduction/access-keys/">Understanding Access Keys</a>.</p>
</div>
</div>

<p>As we want to keep things simple, you can generate an access key right from Unity. Expand the <strong>Client
Authorization</strong> collapsible to reveal the authorization settings:</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/odin_unity_sample_client_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_client_settings.jpg"
         alt="The client authentication settings" width="50%"/></a><figcaption>
            <p>The client authentication settings</p>
        </figcaption>
</figure>
</center>
<p>Click on the <span class="external-reference">Manage Access <a href="/odin/sdk/unity/manual/odineditorconfig/#client-settings"><i class="fas fa-external-link-alt"></i></a></span>
. You&rsquo;ll see a dialog like this:</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg"
         alt="Generate an access token within Unity" width="50%"/></a><figcaption>
            <p>Generate an access token within Unity</p>
        </figcaption>
</figure>
</center>
<p>Click on the <code>Generate Access Key</code> to generate an access key for free. This will allow you to connect with up
to <strong>25 users</strong>. Don&rsquo;t use this access key in production!</p>
<p>Close the Access Key Manager window. Now you should see the access key set in the <em>Client Authorization</em> inspector.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Some users reported that the generated access key is deleted by the Unity editor after navigating around. This
seems to be a Unity bug. As a work-around, after pressing the &ldquo;Generate Access Key&rdquo;, copy the Access key from the
inspector field, empty it with DELETE and copy it in again. This way the access key is stored by the inspector.</p>
</div>
</div>

<h2 id="running-the-sample">Running the sample</h2>
<p>Congratulations. Let&rsquo;s test the sample scene. Press the Play button in the Unity Editor.
You should see something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_sample_play_1.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_play_1.jpg"
         alt="The example scene in Play mode" width="100%"/></a><figcaption>
            <p>The example scene in Play mode</p>
        </figcaption>
</figure>
<p>You&rsquo;ll see the Player GameObject from a top-down view. You&rsquo;ll notice that the microphone is active and recording. On platforms like macOS, iOS, or Android, you may need to grant Unity permission to access your microphone beforehand.</p>
<p>You can drag &amp; drop the <em>Player</em> cube with your mouse to position it somewhere else on the scene. That will become
important later to experience 3D audio.</p>
<p>As always with voice chat, it&rsquo;s boring if you are alone. So let&rsquo;s get some other guys in the room.</p>
<h2 id="building-the-project">Building the project</h2>
<p>To get in more users, we&rsquo;ll need to build the project, so we can share the binary with friends or colleagues. Open the
build settings window by navigation to the menu <strong>File -&gt; Build Settings</strong>.</p>
<figure style="max-width: 70%px"><a href="/images/odin/odin_unity_build_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_build_settings.jpg"
         alt="Unity Build Settings" width="70%"/></a><figcaption>
            <p>Unity Build Settings</p>
        </figcaption>
</figure>
<p>Click on the <strong>Add Open Scenes</strong> button to add the current scene to the list.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Very important for Mac users</strong>: If you want to build for macOS or iOS, you need to set a string for microphone
usage in the player settings. Otherwise, Unity editor will fail to build the target with obscure error messages. We
have compiled a guide how to set that, and you can find it <a href="/odin/faq/unity/building-does-not-work-anymore-after-odin-integration/">here</a>.</p>
</div>
</div>

<p>Click on the <strong>Build and Run</strong> button to build the current scene and running it on your own machine. You&rsquo;ll need to
provide a folder on your hard disk where the binary will be created.</p>
<p>After some time, you should see the application running fullscreen on your machine. Unity typically defaults to running
things in fullscreen. It&rsquo;s a bit easier to test with multiple instances of the app if they run in windowed mode.
Let&rsquo;s change that setting.</p>
<p>Navigate to the menu <strong>Edit -&gt; Project Settings</strong>. The Project Settings Window will appear. Choose <strong>Player
Settings</strong> on the left side and expand the <strong>Resolution and Presentation</strong> collapsible.</p>
<center>
<figure style="max-width: 70%px"><a href="/images/odin/odin_unity_player_settings.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_player_settings.jpg"
         alt="Setting windowed mode" width="70%"/></a><figcaption>
            <p>Setting windowed mode</p>
        </figcaption>
</figure>
</center>
<h2 id="testing-odin">Testing ODIN</h2>
<p>Ok, now that we optimized our app settings, let&rsquo;s build and run the app again. Choose <strong>File -&gt; Build and Run</strong>. The
app should run in windowed mode now.</p>
<p>Now, get back into the Unity Editor and click on <strong>Play</strong>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_unity_sample_running.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_running.jpg"
         alt="Sample app running as app and in the editor" width="100%"/></a><figcaption>
            <p>Sample app running as app and in the editor</p>
        </figcaption>
</figure>
<p>Now, finally, something interesting happens: You see another cube in the scene. If your volume is too high, or your
mic is too sensitive, you might hear an echo: That is, because both peers are running on the same machine with the
same input - which does not make much sense but for testing it is ok.</p>
<p>If you say something, you&rsquo;ll hear your own voice. Now, begin to drag &amp; drop the cubes around and notice how the
direction changes depending on the relative position each cube has to each other.</p>
<p>You can send the binary to your friend or colleague to test ODIN in a more realistic scenario.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: The position of the cubes is not synced over the network, as we want to keep things as simple as
possible in this example. So, every peer can drag &amp; drop the boxes around and will hear the voices from a direction
that he has set up on screen! Please keep that in mind when testing, e.g. if you ask your colleague: &ldquo;Do you hear me
from the right&rdquo;, they might hear you from the front or from the left, as they might have different cube positions on their screen.
That shows, that ODIN is a pure client side and deep engine integration - and thus very flexible and easy to use.</p>
</div>
</div>

<h2 id="how-does-it-work">How does it work?</h2>
<p>Congratulations, you now have a working example of ODIN integrated with 3D audio. Let&rsquo;s have a deeper look at it to
understand how everything works.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border">
ODIN is a client-server solution, which means that ODIN clients, i.e. applications built with Unity
or the Unity Editor itself, are connecting to ODIN servers and joining rooms. Every client connected to the same room
can listen to all audio streams of the other clients connected to a room. Every client may send audio in the room,
but does not have to. They may be muted or may just listen to the audio streams (e.g. spectators).
</div>
</div>

<p>These days, everyone is talking about 3D spatial audio (for example Apple Airpods use this technology). What that
means is, that the audio solutions tries to replicate how things work in the real world. Humans know from which
direction sound comes from, and they can even estimate the distance because sound is louder if closer and more quiet if
far away.</p>
<p>The opposite would be a phone call with headphones on your ears. It does not make any difference how far the other
person on the line (i.e. in the same room in ODIN terminology) is, it&rsquo;s always coming from the same &ldquo;direction&rdquo; it
sounds like right in front of you and the volume is the same.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border">
With ODIN, you can replicate both variants, or even mix them. There is only one setting in Unity that makes the
whole difference: <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 available in <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
.
</div>
</div>

<p>ODIN is deeply integrated into the game engine instead of being a layer above. ODIN therefore uses core Unity
technology:</p>
<ul>
<li><span class="external-reference">AudioListener <a href="https://docs.unity3d.com/ScriptReference/AudioListener.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
: This is the players ear within the scene. The position of the GameObject is
important if you are using 3D spatial (positional) audio. Typically, this is attached to the player GameObject or
the camera if you are not using 3D audio for voice.</li>
<li><span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
: An <code>AudioSource</code> in Unity acts as the &lsquo;speaker&rsquo; that generates sound within the scene. The <code>AudioSource</code> component has a setting called <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
, which determines whether the sound is spatial (3D) or non-spatial (2D). If you want the sound to be part of the 3D environment (i.e., affected by the object&rsquo;s position relative to the listener), set <code>spatialBlend</code> to <code>1.0</code>. On the other hand, if you want the sound to be heard at a constant volume regardless of the object&rsquo;s position (e.g., for sounds like collecting a coin), set it to <code>0.0</code>.</li>
</ul>
<p>Every peer and attached media on ODIN servers need to be replicated within Unity at runtime as shown in the diagram
below. Every peer in ODIN is typically replicated (depending on the use case) in Unity as a GameObject, this can be just
a player name in a list in a chat application or a Player object in a multiplayer game. Every media (i.e. microphone)
attached to a peer within an ODIN room is replicated in Unity with a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 which is typically
a child of the player object being the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 of the microphone linked to that peer.</p>
<pre><code class="language-mermaid">graph LR;
    subgraph Unity Scene
        subgraph Player1 [Player 1]
            PBC1[PlaybackComponent]--&gt;GO1[GameObject]                   
        end
        subgraph Player2 [Player 2]
            PBC2[PlaybackComponent]--&gt;GO2[GameObject]
        end
        
    end
    subgraph ODIN Server
        subgraph ODIN Room
            Peer1[Peer 1] --&gt; Media11[Media 1]--&gt; PBC1
            Peer2[Peer 2] --&gt; Media21[Media 2]--&gt; PBC2
        end    
    end    
    classDef blue fill:#DDFAFF
    class Player1,Player2 blue
</code></pre>
<p>To build this hierarchy we need to listen to certain events and handle them. Don&rsquo;t worry, it&rsquo;s super easy and just
requires a couple lines of code.</p>
<p>In the next section we&rsquo;ll have a closer look at how this is done:</p>
<h3 id="the-odin-manager-object">The ODIN Manager Object</h3>
<p>The first object that we&rsquo;ll have a closer look is the <code>OdinManager 3D Variant</code> object. You already know this Game Object
as you used it to set up your access key.</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/odin_unity_odin_manager_scripts.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_odin_manager_scripts.jpg"
         alt="The scripts attached to the Player object" width="50%"/></a><figcaption>
            <p>The scripts attached to the Player object</p>
        </figcaption>
</figure>
</center>
<p>If you look closer, you&rsquo;ll notice there are a couple of scripts attached to this GameObject:</p>
<dl>
<dt>Odin Editor Config</dt>
<dd>The <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 script allows you to set up ODIN within your game and handles client
authorization and is part of the ODIN SDK.</dd>
<dt>Odin Handler</dt>
<dd>This script does all the event handling and exposes various settings for the microphone and audio effects. See the
manual of <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 for a documentation of all the settings available and how to use the API.
This class is also part of the ODIN SDK.</dd>
<dt>Microphone Reader</dt>
<dd>This class is part of the ODIN SDK and captures the audio input from the microphone connected to the players PC and
sends it to ODIN servers once the client joined an ODIN room. See the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 for more
info on this component.</dd>
<dt>Simple Push To Talk</dt>
<dd>This script is part of the sample code and uses the ODIN SDK to implements joining a room and &ldquo;Push to Talk&rdquo; (i.e.
the microphone is always muted, and you need to press a button to unmute while talking). We&rsquo;ll have a closer look at
this script in the next paragraph.</dd>
</dl>
<h4 id="simple-push-to-talk">Simple Push To Talk</h4>
<p>Let&rsquo;s have a look at the <code>SimplePushToTalk.cs</code> script provided with the sample. It uses various APIs provided by the
ODIN SDK to join a room and to implement push to talk logic.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Basic Push to Talk
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using OdinNative.Unity.Audio;

namespace OdinNative.Unity.Samples
{
    public class SimplePushToTalk : MonoBehaviour
    {
        public string RoomName;
        [SerializeField]
        public KeyCode PushToTalkHotkey;
        public bool UsePushToTalk = true;
        public MicrophoneReader AudioSender;

        private void Reset()
        {
            RoomName = &quot;default&quot;;
            PushToTalkHotkey = KeyCode.C;
            UsePushToTalk = true;
        }

        // Start is called before the first frame update
        void Start()
        {
            if (AudioSender == null)
                AudioSender = FindObjectOfType&lt;MicrophoneReader&gt;();

            OdinHandler.Instance.JoinRoom(RoomName);
        }

        // Update is called once per frame
        void Update()
        {
            if (AudioSender)
                AudioSender.RedirectCapturedAudio = UsePushToTalk ? Input.GetKey(PushToTalkHotkey) : true;
        }
    }
}
</code></pre>
</div>
</div>

<p>We need to join a room so that we can chat with other peers in that same room. To do this, the
<code>SimplePushToTalk</code> script takes the <code>RoomName</code> parameter given in the Inspector and connects to that room with the
<span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the instance of the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
<p>The <code>OdinManager 3d Variant</code> also has a <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 script attached. This script handles microphone
input and sends it to all ODIN rooms that the player has joined. But, as we only want to send audio input when a
specific button is pressed, we&rsquo;ll get a reference to the <code>MicrophoneReader</code> instance in the <code>Start</code> function and
set the <span class="external-reference">RedirectCapturedAudio <a href="/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio/"><i class="fas fa-external-link-alt"></i></a></span>
 to <code>true</code> if audio should be sent (i.e. if Push to Talk is activated
and selected button is pressed) or <code>false</code> if no audio should be sent to the server.</p>
<p>So, that&rsquo;s it. As you can see, the ODIN 3D Manager handles a couple of settings like client authorization (access
key), handles microphone input and sends data to the server if the user has pressed a button.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: Per default, ODIN has <span class="external-reference">RedirectCapturedAudio <a href="/odin/sdk/unity/classes/microphonereader/redirectcapturedaudio/"><i class="fas fa-external-link-alt"></i></a></span>
set to <code>true</code> which means that microphone
input is always sent to ODIN servers. You need to change the setting in the inspector of use a script like shown
above to customize that to your needs. Push to talk is just one example.</p>
</div>
</div>

<h3 id="the-player-object">The Player Object</h3>
<p>The second Game Object, that we want to take a close look at is the <code>Player</code> object in the scene. Select it, and you&rsquo;ll notice a
couple of scripts attached to this object:</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/odin_unity_sample_player_scripts.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_sample_player_scripts.jpg"
         alt="The scripts attached to the Player object" width="50%"/></a><figcaption>
            <p>The scripts attached to the Player object</p>
        </figcaption>
</figure>
</center>
<dl>
<dt>Audio Listener</dt>
<dd>In many games, the audio listener is attached to the camera. In this case, we want the player&rsquo;s &ldquo;ears&rdquo; to be positioned at the player&rsquo;s location, which is important because we want Unity to calculate audio from other sources relative to the player&rsquo;s position, not the stationary camera above the scene. Please note that the <span class="external-reference">AudioListener <a href="https://docs.unity3d.com/ScriptReference/AudioListener.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 is a standard Unity component.</dd>
<dt>Drag Object</dt>
<dd>This is just a simple script that allows you to drag &amp; drop the cube. We won&rsquo;t go into detail on how this is
implemented, but feel free to have a look at the script in your preferred IDE.</dd>
<dt>Odin 3d Trigger</dt>
<dd>This script handles some ODIN events and creates the peer cubes. We&rsquo;ll dive into this script in a minute.</dd>
</dl>
<h4 id="odin-3d-trigger">Odin 3d Trigger</h4>
<p>The <code>Odin3dTrigger.cs</code> script is handling a couple of ODIN events and creates the peers whenever a peer connects.
It&rsquo;s a bit longer, so we go through it step, by step.</p>
<p>In the <code>Start</code> function, we&rsquo;ll listen to some ODIN events. In this example we do it by code, but please feel free to
connect them via the Unity Inspector (see <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 manual for more info on that).</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Handling events
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">void Start()
{
    OdinHandler.Instance.OnCreatedMediaObject.AddListener(Instance_OnCreatedMediaObject);
    OdinHandler.Instance.OnDeleteMediaObject.AddListener(Instance_OnDeleteMediaObject);
    OdinHandler.Instance.OnRoomLeft.AddListener(Instance_OnRoomLeft);

    var SelfData = OdinHandler.Instance.GetUserData();
    //Set Player
    GameObject player = GameObject.FindGameObjectsWithTag(&quot;Player&quot;).FirstOrDefault();
    if (player != null)
    {
        TextMesh label = player.GetComponentInChildren&lt;TextMesh&gt;();
        label.text = CustomUserDataJsonFormat.FromUserData(SelfData)?.name ?? player.name;
    }
}
</code></pre>
</div>
</div>

<p>So, we listen to the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
, <span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>

events:</p>
<ul>
<li><strong>OnCreatedMediaObject</strong>: Triggered whenever a peer started sending audio data</li>
<li><strong>OnDeleteMediaObject</strong>: Triggered whenever a peer stopped sending audio data</li>
<li><strong>OnRoomLeft</strong>: Triggered when a peer left a room.</li>
</ul>
<p>We also get the <span class="external-reference">User Data <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 of the user and set the text label of the player object to the player
name (if available).</p>
<p>Now, as you can see, we need to have some callback methods for these events, let&rsquo;s have a look step by step:</p>
<h4 id="handling-on-media-created-events">Handling On Media Created Events</h4>
<p>This event is triggered whenever a peer joined a room and started to send audio data. There is a difference between
a peer joining a room and media added to that room for that peer, because peers may only join a room without sending
their own data (i.e. spectators). So, to simplify things we just handle the case when a player joined to the room
starts sending audio (which is the <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 event):</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                The OnMediaAdded implementation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">GameObject CreateObject()
{
    return Instantiate(prefab, new Vector3(0, 0.5f, 6), Quaternion.identity);
}

private void Instance_OnCreatedMediaObject(string roomName, ulong peerId, int mediaId)
{
    Room room = OdinHandler.Instance.Rooms[roomName];
    if (room == null || room.Self == null || room.Self.Id == peerId) return;

    var peerContainer = CreateObject();

    //Add PlaybackComponent to new dummy PeerCube
    PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(peerContainer, room.Config.Name, peerId, mediaId);

    //Some AudioSource test settings
    playback.PlaybackSource.spatialBlend = 1.0f;
    playback.PlaybackSource.rolloffMode = AudioRolloffMode.Linear;
    playback.PlaybackSource.minDistance = 1;
    playback.PlaybackSource.maxDistance = 10;

    //set dummy PeerCube label
    var data = CustomUserDataJsonFormat.FromUserData(room.RemotePeers[peerId]?.UserData);
    playback.gameObject.GetComponentInChildren&lt;TextMesh&gt;().text = data == null ?
        $&quot;Peer {peerId} (Media {mediaId})&quot; :
        $&quot;{data.name} (Peer {peerId} Media {mediaId})&quot;;

    PeersObjects.Add(playback.gameObject);
}
</code></pre>
</div>
</div>

<p>This callback does four things:</p>
<ul>
<li>Instantiate a peer cube (from the peer prefab) which represents the peer in the scene as a cube with the
<code>CreateObject</code> function.</li>
<li>Attach the audio source for that peer to the instantiated peer GameObject. ODIN SDK provides a function <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

for that. It creates a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 and attached it to the peer cube GameObject. The
function also returns the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 instance so that we can customize it in the next step.</li>
<li>The <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 uses a Unity <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 for &ldquo;sending&rdquo; audio into
the scene. You can get your hands to that audio source using the <code>PlaybackSource</code> property. In this sample,
the <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 value is set to <code>1.0</code> to activate 3D spatial audio for peers and a couple of
other settings like the volume attenuation is set.</li>
<li>Use the <span class="external-reference">User Data <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 of the peer to get its name and set the label of that peer to that name. This
allows us to identify the peers in the scene.</li>
</ul>
<h2 id="some-experiments">Some experiments</h2>
<p>Let&rsquo;s do some experiments with the sample that we have right now to showcase the power of ODIN and to give you an
idea what you can do with it in your game.</p>
<p>In the <code>Odin3dTrigger.cs</code> script, in the <code>Instance_OnCreatedMediaObject</code> function adjust some settings made to the
<code>PlaybackComponent.PlaybackSource</code>. As this is a standard Unity <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 object, you&rsquo;ll find the
component in the Unity documentation. Here are a couple of things you can try:</p>
<h3 id="switching-to-gods-voice">Switching to &ldquo;gods voice&rdquo;</h3>
<p>Change the line where <code>spatialBlend</code> is set into this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Disabling 3D audio
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">playback.PlaybackSource.spatialBlend = 0.0f; //Disable 3D audio
</code></pre>
</div>
</div>

<p>This just disables 3D audio and every ODIN <code>AudioSource</code> in the scene will always have the same volume. That is
basically the same experience as if all players would use an external voice chat solution like TeamSpeak or Discord.
The voice is &ldquo;decoupled&rdquo; completely from the Gameplay. It may be useful if you want to replicate phone calls or CB
communication between team members.</p>
<p>Please note, that <code>spatialBlend</code> is a float value. You can also set it to <code>0.5f</code> to have something in between.</p>
<h3 id="adjusting-voice-attenuation">Adjusting voice attenuation</h3>
<p>Right now, peers can only be heard up to 10 units. Reduce that to 2 and you&rsquo;ll only hear peers that are very close
to you. You can use these properties to implement &ldquo;sound damping&rdquo; dependent on the current location of the peer
relative to the player.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Setting voice attenuation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">playback.PlaybackSource.minDistance = 1;
playback.PlaybackSource.maxDistance = 2;
</code></pre>
</div>
</div>

<h2 id="summary">Summary</h2>

<table class="features">
    <tr>
    <td class="index"><span class="index">1</span></td>
    <td class="name">ODIN SDK</td>
    <td><p><a href="/odin/sdk/unity/">Install</a> the ODIN SDK into your project.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">2</span></td>
    <td class="name">Add ODIN Manager</td>
    <td><p><a href="/odin/sdk/unity/manual/">Drag &amp; Drop</a> the ODIN Manager Prefab into your scene.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">3</span></td>
    <td class="name">Access Key</td>
    <td><p><a href="/odin/introduction/access-keys/">Create and set an access key</a> in the Unity inspector.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">4</span></td>
    <td class="name">Handle ODIN events</td>
    <td><p>Handle some ODIN events like shown above or described in the <a href="/odin/guides/unity/event-handling/">Event Handling guide</a>
and use <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
to create the other players audio sources and attaching them to
player objects in your scene.</p>
</td>
</tr>

</table>

<p>That&rsquo;s it! There&rsquo;s not much more to do to integrate ODIN into your project. Of course, there are plenty of APIs available to customize the experience to suit your needs. Keep in mind that ODIN integration is fully native to Unity—you&rsquo;re working with Unity as usual, without the need for unfamiliar APIs or sending additional data to external servers.</p>
<p>Of course, if you are working on a multiplayer game, things are a little bit more complex, but just a little bit. <a href="/odin/guides/unity/unity-mirror/">We
have created a guide</a> where you create a complete multiplayer game with Mirror Networking and add ODIN to it. After a couple of minutes you&rsquo;ll have the same example as this one, but player positions will be synced between all peers.</p>
<h2 id="next-steps">Next steps</h2>
<p>Now that you have a working example find out more about the components ODIN has to offer.</p>
<ul>
<li>Read our <a href="/odin/guides/unity/event-handling/">Event Handling guide</a> to learn which events you need
to implement. It shows an example of basic walkie-talkie like voice combined with 3D positional audio.</li>
<li>Check out the <a href="/odin/sdk/unity/manual/">Unity manual</a> with more info on the components and what
the various settings are for.</li>
<li>Check out the <a href="/odin/sdk/unity/classes/">API Reference</a> with a comprehensive documentation on all
classes and
interfaces exposed by the ODIN SDK.</li>
<li>Follow our <a href="/odin/guides/unity/unity-mirror/">guide on how to add Unity to a Mirror Networking based multiplayer game</a>. After 20 minutes you&rsquo;ll have a fully working multiplayer game with 3D positional
voice chat and synced player positions</li>
<li>In our <a href="/odin/guides/unity/pun-sample/">Photon open-source sample</a> you can download and play around with a working example based on Photon Pun.</li>
</ul>
`}),e.add({id:3518,href:"https://www.4players.io/4netplayers/requirements/",title:"Prerequisites",section:"Free Server Hosting",description:"A list of prerequisites that your dedicated server software must meet to be added to our library",content:`<p>4Netplayers is a very flexible platform. Today, more than 300 games are available in our library. However, while our
operations team can add most server software, there are some no-gos that prevent servers to be added.</p>
<p>In this documentation we guide you through those requirements and give some hints how to achieve that in favorite game
engines.</p>
<h2 id="must-haves">Must haves</h2>
<p>Your dedicated server software must meet these requirements:</p>
<ul>
<li><a href="#windows-or-linux-binary">Windows or Linux binary</a></li>
<li><a href="#headless">Must run headless (i.e. no GUI or any form of human input required)</a></li>
<li><a href="#ip-and-port-settings">Command line option to set the port and IP address of the game server.</a></li>
<li><a href="#server-queries">Server queries to retrieve status information</a></li>
</ul>
<p>The requirements in detail:</p>
<h3 id="windows-or-linux-binary">Windows or Linux binary</h3>
<p>The binary should run on Window Server or on Linux (Ubuntu). It can be a x86 or x64 binary. However, as of today,
we do not support ARM builds.</p>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-dedicated-server-export-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-dedicated-server-export-unity" type="button" role="tab" aria-controls="pills-dedicated-server-export-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link " id="pills-dedicated-server-export-unreal-tab" data-framework="unreal" data-bs-toggle="pill" data-bs-target="#pills-dedicated-server-export-unreal" type="button" role="tab" aria-controls="pills-dedicated-server-export-unreal" aria-selected="true"><img src="/images/unreal.svg" class="tab-icon"> Unreal</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-dedicated-server-export-tab-content">
<div class="tab-pane fade show active" id="pills-dedicated-server-export-unity" role="tabpanel" aria-labelledby="pills-dedicated-server-export-unity-tab"><p>If you are building a server using Mirror Networking or Photon or MLAPI, you can export a headless dedicated server
via the Build Settings in Unity. If possible, always choose Linux binary, as we prefer Linux binaries.</p>
<p>In Unity 2021.1 and later, the Build Settings look a bit different and you can choose <code>Dedicated Server</code> as a build
target on the left side. In earlier versions, you need to choose Linux or Windows build and then activate the
checkbox &ldquo;Headless&rdquo; in the options on the right side to activate a headless server build.</p>
</div>
<div class="tab-pane fade" id="pills-dedicated-server-export-unreal" role="tabpanel" aria-labelledby="pills-dedicated-server-export-unreal-tab"><p>In Unreal you need to package your dedicated server in the Menu <strong>File &gt; Package Project &gt; Build Target</strong>. Follow
this <a href="https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/Networking/HowTo/DedicatedServers/">guide</a> on
how to build a dedicated server for your game.</p>
</div></div>
<h3 id="headless">Headless</h3>
<p>It&rsquo;s important that your binary does not require opens any form of GUI. If you follow the official guides for Unity and
Unreal on how to build a dedicated server that is not an issue. But in the past we noticed some developers that added
crazy things on their dedicated servers.</p>
<p>Always remember, that server starting and stopping is a fully automated process. If your dedicated server requires mouse
or key input, we will not be able to add it. Also remember, that the game servers are running in data centers on server
hardware that does not have a graphics card installed. Your dedicated server may not need any form of graphical output!</p>
<h3 id="ip-and-port-settings">IP and Port settings</h3>
<p>Most dedicated servers are binding <code>0.0.0.0</code> or <code>INADDR_ANY</code>. That means, that the software will pick the first IP
available on a machine. In our platform, gameservers might be running on the same physical hardware which
might have many different IP addresses linked. We need to make sure, that the gameserver is binding on the IP address
and port that we need. As the gameserver is linked to a customer account, and our customers may choose to have a
dedicated IP address we need to be able to set that IP address when launching the server. We also need to make sure that
there are no port collisions and therefore need to be able to set port and ip address via command line.</p>
<p>Please provide these command line options (or something similar):</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Example</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>-port <em>P</em></td>
<td>-port 27015</td>
<td>The option to set the port of the server</td>
</tr>
<tr>
<td>-ip <em>IP</em></td>
<td>-port 162.162.162.162</td>
<td>An option to assign the ip address the server is binding</td>
</tr>
<tr>
<td>-numslots <em>S</em></td>
<td>-numslots 16</td>
<td>The maximum number of users that may connect to the server</td>
</tr>
</tbody>
</table>
<p>Your server should bind on the port and the IP address given via command line parameter. If no IP is given, bind on
<code>0.0.0.0</code> or <code>INADDR_ANY</code>.</p>
<h3 id="server-queries">Server queries</h3>
<p>Sometimes, gameservers crash. Or more users connect to the server as allowed. To prevent these cases, the server must
deliver at least a heart beat query that we can use to figure out, if the server is running and everything is fine. If
the query does not ping back, the server is restarted automatically.</p>
<p>You can use Steam to build server queries that are used by many games and make it very easy for us to implement these
games into our library: <a href="https://developer.valvesoftware.com/wiki/Server_queries">Steam Server Queries</a>.</p>
<p>There should be at least one server query returning these info on request:</p>
<ul>
<li>Number of players currently connected</li>
<li>Number of maximum players that may connect</li>
<li>Name of the server</li>
</ul>
<h2 id="general-guidelines">General Guidelines</h2>
<p>These are general guidelines that we have compiled over the years.</p>
<h3 id="configuration-files">Configuration Files</h3>
<p>Remember that dedicated servers should run without any input from users. Therefore, many dedicated servers allow
customization of the gaming experience with one or more config files.</p>
<p>4Netplayers customers can customize and setup their server with a simple to use web interface. There, we offer two
modes: <strong>Basic Mode</strong> and <strong>Advanced Mode</strong>.</p>
<h4 id="basic-mode">Basic Mode</h4>
<p>In this mode, customers get a nice list of options and easy to understand controls like a &ldquo;switch&rdquo; to enable or
disable features.</p>
<figure style="max-width: 500px"><a href="/images/4netplayers/netplay_config_basic_mode.jpg" title="Click to enlarge" data-lity><img src="/images/4netplayers/netplay_config_basic_mode.jpg"
         alt="4Netplayers Basic Mode to customize server" width="500"/></a><figcaption>
            <p>4Netplayers Basic Mode to customize server</p>
        </figcaption>
</figure>
<p>Our operations team reverse builds a structure from the config file and our parsers and generators automatically
generate a config file when the server is about to be started.</p>
<h4 id="advanced-mode">Advanced Mode</h4>
<p>In advanced mode, customers are allowed to edit the config files directly in an editor provided in the web interface.
Therefore it&rsquo;s important that the config files are easy to understand. Use variables that make sense and allow
external users to easily understand what this setting does. Add comments to the template (that we also add to the
config files) so that it&rsquo;s even easier to understand.</p>
<h4 id="config-file-formats">Config file formats</h4>
<p>The config files that you use for your dedicated server should follow these simple rules. Then it&rsquo;s easy for our
operation team to create great basic config options, and the community can create great gameservers in advanced
mode without requiring external documentation.</p>
<ul>
<li>Must be text format (binary formats are a no-go, because they are nearly impossible to parse by other services)</li>
<li>Use XML, JSON, plain text or INI files.</li>
<li>YAML files should not be used as the syntax is not easy to understand and very error-prone.</li>
<li>Use good naming of variables</li>
<li>Provide a config file with all default values</li>
<li>Add comments for each option and provide information about minimum and maximum values and what they do</li>
</ul>
<h3 id="admins">Admins</h3>
<p>Provide a config file (i.e. <code>admins.ini</code>) where customers can setup admins for the server that have the authority to
kick users. That is an important part for owners of a server. Owning a server also means they can control every
aspect of the server - especially who is playing on the server.</p>
<h3 id="databases">Databases</h3>
<p>Use file based databases like SQLLite instead of server based databases like MySQL or MariaDB. SQLLite does not require
any config or setup, which makes it easy for your users and our operations team to handle them.</p>
<p>If you want multiple servers to connect to one database then you may offer both options (SQLLite and a server based)
and let users decide in a config option which one to use. <strong>Default should be file based database as most customers
only rent one server.</strong></p>
<h2 id="next-steps">Next steps</h2>
<p>Ready to go? Does your server meet the requirements?</p>
<p><a href='/4netplayers/getting-started/' class="btn btn-primary">Add your game to our library</a></p>
`}),e.add({id:3519,href:"https://www.4players.io/odin/guides/unity/",title:"Unity",section:"ODIN Documentation",description:"Discover how to integrate 4Players ODIN into your Unity projects with our step-by-step guides and tutorials. Learn the basics of event handling, and explore integration with Mirror Networking and Photon PUN 2 for multiplayer gaming with 3D positional audio. Get started today and unlock the power of ODIN for your Unity games.",content:`<p>4Players ODIN is deeply integrated into Unity and supports all major platforms. A couple of components are enough to
add real-time voice communication to your game in no time. <strong>Please note, that ODIN requires Unity 2019.4 or any later
version</strong>. We also support Apple Silicon, however right now this only works with the latest Unity version with native
Apple Silicon support.</p>
<h2 id="getting-started">Getting Started</h2>
<p>We have compiled a couple of Getting Started Guides to get you started quickly.</p>
<h3 id="unity-video-tutorial-series">Unity video tutorial series</h3>
<p>Watch our <a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V">Unity video tutorial series</a></p>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/S3DFxkWut9c?list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>

<h3 id="written-guides">Written guides</h3>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/getting-started-unity">
<img class="teaser-image" src="/images/odin/odin_getting_started_unity_header.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN</h4>
<div class="teaser-content">
 <p>Follow this guide to install ODIN in an empty Unity project. We&rsquo;ll try out one of the samples that come with ODIN and
explain how it works and which steps are required to implement ODIN into your own game.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/getting-started-unity">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/event-handling">
<img class="teaser-image" src="/images/odin/odin_event_handling.jpg">
</a>
<h4 class="teaser-title">Event Handling</h4>
<div class="teaser-content">
 <p>Implementing ODIN is simple, but you need to handle three events for most implementations. Check out our Event
handling guide to learn more about basic event handling based on a real-world use-case complete with example code.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/event-handling">Let&#39;s start</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/unity-mirror">
<img class="teaser-image" src="/images/odin/getting_started_unity_mirror_header.jpg">
</a>
<h4 class="teaser-title">ODIN and Mirror Networking</h4>
<div class="teaser-content">
 <p>ODIN is best suited to be added to a multiplayer game. In this guide, we&rsquo;ll create a basic multiplayer with 3D positional
audio based on Mirror Networking. You&rsquo;ll also learn how to leverage ODIN APIs like user data.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/unity-mirror">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/pun-sample">
<img class="teaser-image" src="/images/odin/getting_started_unity_pun.jpg">
</a>
<h4 class="teaser-title">ODIN and Photon PUN 2</h4>
<div class="teaser-content">
 <p>In this guide, you&rsquo;ll learn how we integrated ODIN into our multiplayer Tech-Demo, utilizing Photon PUN 2 for multiplayer synchronization. The Tech-Demo demonstrates the full range of capabilities offered by the ODIN Unity SDK, providing a comprehensive example for developers looking to implement real-time multiplayer functionality.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/pun-sample">Let&#39;s start</a>
</div>
</div>
</div>
</div>
<h2 id="general-guides">General Guides</h2>
<p>A couple of concepts apply to all game engines and platforms and it&rsquo;s important to understand those, especially when
going into production.</p>
<ul>
<li>Understanding Access Keys is an important part later when moving your game to production. <a href="/odin/introduction/access-keys/">Read this guide to understand
how we use access keys and how they work in detail</a>.</li>
</ul>
`}),e.add({id:3520,href:"https://www.4players.io/fleet/manual/registries/aws/",title:"Adding an AWS Elastic Container Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect an AWS Elastic Container Registry (ECR) to ODIN Fleet, supporting both private and public repositories.",content:`<p>To link your AWS Elastic Container Registry (ECR) with ODIN Fleet, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;AWS&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-aws-registry.png"
         alt="Add AWS ECR"/><figcaption>
            <p>Add AWS ECR</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your AWS ECR:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Registry URL</strong>: Depending on whether you&rsquo;re connecting to a private or public repository, use the following formats:
<ul>
<li><strong>Private Repositories</strong>: <code>https://&lt;aws_account_id&gt;.dkr.ecr.&lt;region&gt;.amazonaws.com</code>
<ul>
<li>Example: <code>https://802596915135.dkr.ecr.eu-central-1.amazonaws.com</code></li>
</ul>
</li>
<li><strong>Public Repositories</strong>: <code>https://public.ecr.aws/&lt;registry_alias&gt;</code>
<ul>
<li>Example: <code>https://public.ecr.aws/r7e4l4q2</code></li>
</ul>
</li>
</ul>
</li>
<li><strong>Access Key</strong>: Your AWS Access Key associated with the IAM user who has the required permissions.</li>
<li><strong>Secret Access Key</strong>: The Secret Access Key corresponding to the above Access Key.</li>
</ul>
<h3 id="authentication-and-access-permissions">Authentication and Access Permissions</h3>
<p>For authenticating with AWS ECR, you&rsquo;ll need an IAM user with the appropriate permissions. Here&rsquo;s how to set up access:</p>
<ol>
<li>
<p><strong>Create an IAM User with ECR Permissions</strong>:</p>
<ul>
<li>In AWS IAM, create a user group named &ldquo;ECR&rdquo; and assign the following policies:
<ul>
<li><code>AmazonEC2ContainerRegistryFullAccess</code></li>
<li><code>AmazonElasticContainerRegistryPublicFullAccess</code></li>
</ul>
</li>
<li>Add your IAM user (e.g., <code>b2b</code>) to this group.</li>
<li>Generate an Access Key and Secret Access Key for this user.</li>
</ul>
</li>
<li>
<p><strong>Use the Access Keys</strong>:</p>
<ul>
<li>The Access Key and Secret Access Key will be required in the ODIN Fleet setup to authenticate and access your repositories.</li>
</ul>
</li>
</ol>
<h3 id="automatic-detection">Automatic Detection</h3>
<p>ODIN Fleet automatically detects whether the registry is public or private based on the URL format you provide. The URL is validated upon entry, and an exception is thrown if it doesn&rsquo;t match the expected format.</p>
<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>You can now pull images from your AWS ECR directly within ODIN Fleet.</p>
<h3 id="additional-resources">Additional Resources</h3>
<ul>
<li><a href="https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html">AWS ECR Private Repositories Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/AmazonECR/latest/public/public-registries.html">AWS ECR Public Repositories Documentation</a></li>
</ul>
`}),e.add({id:3521,href:"https://www.4players.io/fleet/manual/registries/",title:"Adding Registries",section:"ODIN Fleet Documentation",description:"Learn how to connect docker registries to ODIN fleet.",content:`<p>ODIN Fleet allows you to seamlessly integrate various Docker registries into your deployment workflow. By linking your
preferred registries, you can efficiently manage container images, automate deployments, and streamline the process of
scaling your applications. This section will guide you through the steps required to add different types of Docker
registries to ODIN Fleet, including well-known providers like Docker Hub, GitLab, GitHub, Azure, AWS, and custom
self-hosted registries.</p>
<p>Each registry type has specific configuration requirements, so make sure to follow the relevant instructions for the
registry you wish to add. The links below will take you to detailed guides for each supported registry.</p>
<h2 id="supported-registries">Supported Registries</h2>
<ul>
<li><strong>Docker Hub</strong>: Connect private repositories on Docker Hub, the world&rsquo;s most popular container
registry. <a href="./docker-hub">Learn how to integrate Docker Hub with ODIN Fleet</a>.</li>
<li><strong>GitLab</strong>: Integrate your GitLab container registry, supporting both GitLab.com (cloud version) and self-hosted
GitLab instances, for managing and deploying container images. <a href="./gitlab">Learn how to set up GitLab integration</a>.</li>
<li><strong>GitHub</strong>: Link ODIN Fleet with GitHub Container Registry, enabling the use of private repositories,
organization-level repositories, and public images hosted on
GitHub. <a href="./github">Learn how to configure GitHub with ODIN Fleet</a>.</li>
<li><strong>Google Cloud</strong>: Connect to your Google Cloud Container Registry. [Learn how to add a self-hosted registry]
(/google-cloud).</li>
<li><strong>Azure</strong>: Utilize Azure Container Registry (ACR) to manage container images within the Microsoft Azure ecosystem,
perfect for cloud-native applications on Azure. <a href="./azure">Learn how to add Azure Container Registry</a>.</li>
<li><strong>AWS</strong>: Integrate AWS Elastic Container Registry (ECR) to leverage secure, scalable container image management within
your AWS infrastructure. <a href="./aws">Learn how to connect AWS ECR to ODIN Fleet</a>.</li>
<li><strong>Self-Hosted Registries</strong>: Connect to custom or self-hosted Docker registries, providing flexibility for private,
on-premises, or specialized environments. <a href="./self-hosted">Learn how to add a self-hosted registry</a>.</li>
<li><strong>Custom</strong>: For registries not explicitly supported by ODIN Fleet, you can use the Custom option to manually configure
the connection. <a href="./custom">Learn how to add a custom registry</a>.</li>
</ul>
`}),e.add({id:3522,href:"https://www.4players.io/fleet/cli/apps/",title:"Apps",section:"ODIN Fleet Documentation",description:"Learn how to work with ODIN Fleet apps using the CLI.",content:`<p>Apps are the primary building blocks of ODIN. They represent a project or application that you are working on. Each app
contains a set of resources, such as devices, users, and data streams, that you can interact with using the ODIN CLI.</p>
<p>You may create up to 100 apps in your account. Each app has a unique ID that is used to identify it in the ODIN
system.</p>
<h2 id="overview">Overview</h2>
<p>The <code>apps</code> commands allow you to manage apps in your account. Before executing any other commands, you must select an
app to work with using the <a href="./select">odin apps select</a> command.</p>
<p>The selected app is stored in the configuration file on your system and is used for subsequent commands. The
configuration file also stores your API key, which you can set using the <a href="../login">odin login</a> command.</p>
<h2 id="usage">Usage</h2>
<p><code>odin apps &lt;command&gt;</code></p>
<h2 id="commands">Commands</h2>
<ul>
<li><a href="./list">List</a>: List all apps in your account.</li>
<li><a href="./select">Select</a>: Select an app to use for subsequent commands.</li>
<li><a href="./get">Get</a>: Display detailed information about an app.</li>
<li><a href="./create">Create</a>: Create a new app.</li>
<li><a href="./delete">Delete</a>: Delete an app.</li>
</ul>
`}),e.add({id:3523,href:"https://www.4players.io/fleet/cli/fleet/servers/backups/",title:"Backup persistent server data",section:"ODIN Fleet Documentation",description:"Create a backup of a server to protect your data.",content:`<p>If you have defined persistent data for your server, you can create a backup of the data to protect it from accidental
loss. Backups are stored securely and can be restored at any time. You can also download a backup to your local machine
for safekeeping or to run a local copy of your server for testing.</p>
<h2 id="overview">Overview</h2>
<p>The <code>backup</code> command allows you to create a backup of a server in your account. Backups are created from all folders
defined as persistent data in the server configuration. You can create a backup of a server at any time.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Please note    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>When you create a backup, the server will be paused for a short time while the backup is created. This will cause a
brief
interruption in service for your players. The same is true when you restore a backup. At the moment only one backup can
be
created at a time. The latest backup will overwrite the previous one.</p>
</div>
</div>

<h2 id="creating-a-backup">Creating a backup</h2>
<p>To create a backup of a server, use the following command:</p>
<pre><code class="language-bash">odin fleet servers backup create [--server-id=&lt;server-id&gt;] [--name=&lt;name&gt;]
</code></pre>
<h3 id="flags">Flags</h3>
<ul>
<li><code>--server-id</code>: The ID of the server to create a backup for. If not provided, you will be prompted to select a server.</li>
<li><code>--name</code>: The name of the backup. If not provided, you will be prompted to enter a name.</li>
</ul>
<h2 id="restoring-a-backup">Restoring a backup</h2>
<p>To restore a backup of a server, use the following command:</p>
<pre><code class="language-bash">odin fleet servers backup restore [--server-id=&lt;server-id&gt;]
</code></pre>
<h3 id="flags-1">Flags</h3>
<ul>
<li><code>--server-id</code>: The ID of the server to restore a backup for. If not provided, you will be prompted to select a server.</li>
</ul>
<h2 id="downloading-a-backup">Downloading a backup</h2>
<p>To download a backup of a server, use the following command to receive a download link:</p>
<pre><code class="language-bash">odin fleet servers backup download-url [--server-id=&lt;server-id&gt;]
</code></pre>
<p>You will receive a download link as a text that you can use to download the backup to your local machine.</p>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3524,href:"https://www.4players.io/odin/introduction/structure/",title:"Basic Concepts",section:"ODIN Documentation",description:"Learn about ODINs basic concepts",content:`<p>ODIN is a client server platform. Servers are hosted by 4Players, but can also be hosted by clients. The whole
system is stateless and scalable. There are no databases keeping track of everything, instead everything just relies
on stateless connections and some tokens that are used during authentication.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In the following diagrams we use these words frequently.</p>
<dl>
<dt>Local</dt>
<dd>For the local client (i.e. you as a developer testing your current build)</dd>
<dt>Server</dt>
<dd>The ODIN server hosted by 4Players or hosted by yourself on your own infrastructure or the cloud</dd>
<dt>Remote</dt>
<dd>All other clients connected to the same server/room, i.e. your colleagues.</dd>
</dl>
</div>
</div>

<h2 id="topology">Topology</h2>
<p>This diagram outlines the basic structure of two clients connected to an ODIN server. Client 1 has joined two rooms
listening and talking and Client 2 has also joined room 2 but is just listening there.</p>
<pre><code class="language-mermaid">graph TB;
    subgraph ODIN Server
        Connection1[Connection 1]
        Connection2[Connection 2]
    end
    Client1[Client 1] -- Authenticate --&gt; Connection1
    Client2[Client 2] -- Authenticate --&gt; Connection2
    subgraph Room1[Room 1]
        Peer11[Peer 1] -- StartMedia --&gt; MediaStream111[Media Stream 1]
    end
    subgraph Room2[Room 2]
        Peer21[Peer 1] -- StartMedia --&gt; MediaStream211[Media Stream 1]
        Peer21[Peer 1] -- StartMedia --&gt; MediaStream212[Media Stream 2]
        Peer22[Peer 2]
    end    
    Connection1 -- JoinRoom --&gt; Peer11
    Connection1 -- JoinRoom --&gt; Peer21
    Connection2 -- JoinRoom --&gt; Peer22    
</code></pre>
<p>Every <strong>client</strong> connects an ODIN server and authenticates with an access token and <strong>joins a room</strong>. Once the
<strong>client</strong> has joined a room, he is a <strong>peer</strong> inside the ODIN room. Every <strong>peer</strong> can add <strong>media</strong> to that room,
linked to a physical device like a microphone. Clients can join multiple rooms at the same time and can add multiple
media streams at the same time.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN rooms work independently of each other. This means that each client is a different peer in every room,
having a different peer id. Also, you cannot use the same media stream for multiple rooms at once,
but you have to create a new one for each room.</p>
</div>
</div>





<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Every peer receives the media streams of the other peers connected to the same room, but <strong>are not required</strong> to add
their own media. Spectators will want to listen but not talking themselves. A muted peer for example also does not
have a media.</p>
</div>
</div>

<h2 id="connecting-to-server">Connecting to Server</h2>
<p>The first step is to connect to a server and a room. If you are using one of our high level SDKs like <a href="/odin/sdk/unity/">Unity</a> or <a href="/odin/sdk/unreal/">Unreal</a> joining a room is all you have to do. The
SDK handles authentication and server connection for you.</p>
<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

Local -&gt;&gt;+ Server: Authenticate
Server --&gt;&gt;- Local: Success

Local -&gt;&gt;+ Server: JoinRoom
Server -&gt;&gt; Remote: PeerJoined
Server --&gt;&gt;- Local: Success

Local --&gt; Server: Opening Room Stream
Server -&gt;&gt; Local: Joined
</code></pre>
<p>Once the connection is established and the room has joined an event is sent to all other peers in the same room:
<code>PeerJoined</code>. This allows you to update your UI for example like showing a list of peers that are
within a room.</p>
<p>The client who joined the room will receive a <code>RoomJoin</code> and <code>RoomJoined</code> event. If a user clicks a button to join a
room, you can use the <code>RoomJoin</code> event to start showing a loading indicator and hiding it once <code>RoomJoined</code> has been triggered.</p>
<h4 id="event-summary">Event summary</h4>


<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-connection-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-connection-event-summary-unity" type="button" role="tab" aria-controls="pills-connection-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link " id="pills-connection-event-summary-unreal-tab" data-framework="unreal" data-bs-toggle="pill" data-bs-target="#pills-connection-event-summary-unreal" type="button" role="tab" aria-controls="pills-connection-event-summary-unreal" aria-selected="true"><img src="/images/unreal.svg" class="tab-icon"> Unreal</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-connection-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-connection-event-summary-unity" role="tabpanel" aria-labelledby="pills-connection-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td></td>
<td>Triggered if user started to join a room</td>
</tr>
<tr>
<td><span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user joined a room</td>
</tr>
</tbody>
</table>
<p>ODIN does not require any bookkeeping. A room is created automatically for the first connection and will be removed
whenever the last user left the room. You join a room by calling the <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 method of the
<span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 instance in your scene.</p>
<pre><code class="language-C#">class MyVoiceHandler: MonoBehaviour
{
  public string RoomName = &quot;default&quot;;
  
  // Start is called before the first frame update
  void Start()
  {
    OdinHandler.Instance.JoinRoom(RoomName);
  }
}
</code></pre>
</div>
<div class="tab-pane fade" id="pills-connection-event-summary-unreal" role="tabpanel" aria-labelledby="pills-connection-event-summary-unreal-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">On Room Joined <a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">On Peer Joined <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-joined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user joined a room</td>
</tr>
</tbody>
</table>
<p>ODIN does not require any bookkeeping. A room is created automatically for the first connection and will be removed
whenever the last user left the room. You join a room by calling the <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>
 function in your
blueprint.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: To join a room you need to create an access token. The whole process is described in the
<a href="/odin/sdk/unreal/">Unreal Engine Manual</a>.</p>
</div>
</div>

<p>Joining a room looks like this:</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_join_room.jpg"
         alt="Joining a room"/><figcaption>
            <p>Joining a room</p>
        </figcaption>

    
    
</figure>

<p>Event handling looks like this:</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_on_peer_joined_example.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_on_peer_joined_example.jpg"
         alt="The wired up peer joined event handler" width="600"/></a><figcaption>
            <p>The wired up peer joined event handler</p>
        </figcaption>
</figure>

</div></div>

<h2 id="starting-a-media">Starting a media</h2>
<p>As defined above, every peer connected to a room can (but does not have to) add a media, i.e. a stream connected to the
peers&rsquo; input device, e.g. a microphone. Please note: Every peer can add multiple media to the same room (i.e. audio and video).
In Contrary, you can not use the same media twice, e.g. for 2 different rooms.</p>
<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

Local -&gt;&gt;+ Server: AddMedia
Server -&gt;&gt; Remote: MediaAdded
Server --&gt;&gt;- Local: Success
</code></pre>
<p>The local <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 will trigger <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 once the request media has been
added to the server. <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 is triggered for media added by other peers to the room.</p>
<h4 id="event-summary-1">Event summary</h4>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-start-media-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-start-media-event-summary-unity" type="button" role="tab" aria-controls="pills-start-media-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link " id="pills-start-media-event-summary-unreal-tab" data-framework="unreal" data-bs-toggle="pill" data-bs-target="#pills-start-media-event-summary-unreal" type="button" role="tab" aria-controls="pills-start-media-event-summary-unreal" aria-selected="true"><img src="/images/unreal.svg" class="tab-icon"> Unreal</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-start-media-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-start-media-event-summary-unity" role="tabpanel" aria-labelledby="pills-start-media-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once the media has been added to the room on the server</td>
</tr>
</tbody>
</table>
<div class="box dark info">
<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>
<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to handle the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
callbacks. Whenever you receive this event, you need to call
the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
method on your <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
instance which will create a
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
and assign to a GameObject that corresponds to this peer in Odin.</p>
</div>
</div>
</div>
<div class="tab-pane fade" id="pills-start-media-event-summary-unreal" role="tabpanel" aria-labelledby="pills-start-media-event-summary-unreal-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">On Add Media To Room Success <a href="/odin/sdk/unreal/blueprint-reference/events/on-add-media-to-room-success/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">On Media Added <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once the media has been added to the room on the server</td>
</tr>
</tbody>
</table>
<div class="box dark info">
<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>
<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to handle the <span class="external-reference">On Media Added <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/"><i class="fas fa-external-link-alt"></i></a></span>
event. Whenever you receive this event, you need to
assign the media to an <code>Odin Synth Component</code> that is either part of the asset (added at design time) or you can
also create that component with <span class="external-reference">Add Odin Synth Component <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/"><i class="fas fa-external-link-alt"></i></a></span>
in your blueprint. The
<code>Odin Synth Component</code> generates audio output from the incoming media stream.</p>
</div>
</div>
<p>Adding a media looks like this:</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_event_setup.jpg"
         alt="Handling On Media Added events"/><figcaption>
            <p>Handling On Media Added events</p>
        </figcaption>
</figure>
</div></div>
<h2 id="stopping-a-media">Stopping a media</h2>
<p>Users can mute their audio streams, in this case, the media stream should be stopped, so that no data is captured and
to ODIN servers. Of course, also leaving a room can lead to stopped media.</p>
<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

Local -&gt;&gt;+ Server: StopMedia
Server -&gt;&gt; Remote: MediaStopped
Server --&gt;&gt;- Local: Success
</code></pre>
<p>The <code>MediaStopped</code> event will be triggered once the request media has been deleted on the server.</p>
<h4 id="event-summary-2">Event summary</h4>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-stop-media-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-stop-media-event-summary-unity" type="button" role="tab" aria-controls="pills-stop-media-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-stop-media-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-stop-media-event-summary-unity" role="tabpanel" aria-labelledby="pills-stop-media-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once the media has been added to the room on the server</td>
</tr>
</tbody>
</table>
<div class="box dark info">
<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>
<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to handle the <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
callbacks as it&rsquo;s up to you to remove the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
from the corresponding GameObject that you used initially when adding the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
callback.</p>
</div>
</div>
</div></div>
<h2 id="updating-peer-user-data">Updating Peer User Data</h2>
<p>Every peer in Unity can store arbitrary information as <a href="/odin/guides/unity/user-data/">user data</a>. When
local user data is updated, the server updates user data at all clients and sends this message. Read more about user
data in our guide: <a href="/odin/guides/unity/user-data/">Understanding User Data</a>.</p>
<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

Local -&gt;&gt;+ Server: UpdateUserData
Server -&gt;&gt; Remote: PeerUpdated
Server --&gt;&gt;- Local: Success
</code></pre>
<p>Whenever a peer updates his data, all other peers receive the <code>PeerUpdated</code> event to handle the new data.</p>
<h4 id="event-summary-3">Event summary</h4>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-update-user-data-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-update-user-data-event-summary-unity" type="button" role="tab" aria-controls="pills-update-user-data-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-update-user-data-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-update-user-data-event-summary-unity" role="tabpanel" aria-labelledby="pills-update-user-data-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once for every updated peer user data</td>
</tr>
</tbody>
</table>
</div></div>
<h2 id="sending-arbitrary-data">Sending Arbitrary Data</h2>
<p>You can use ODIN to send arbitrary data to other clients. You can use this method to build simple multiplayer games that
don&rsquo;t require complex, real-time movement. For many casual games or board games, this message is enough to sync the
players positions and other information of the game state with all clients.</p>
<p>The data you can send is basically just an array of bytes. You can use any data serialization that makes sense to you.
Many game engines already provide data serialization features.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Note:</strong> You will only receive the <code>MessageReceived</code> event if your own peer ID was in the list of recipients.</p>
</div>
</div>

<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

Local -&gt;&gt;+ Server: SendMessage
Server -&gt;&gt; Remote: MessageReceived
Server --&gt;&gt;- Local: Success
</code></pre>
<h4 id="event-summary-4">Event Summary</h4>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-send-message-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-send-message-event-summary-unity" type="button" role="tab" aria-controls="pills-send-message-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-send-message-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-send-message-event-summary-unity" role="tabpanel" aria-labelledby="pills-send-message-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnMessageReceived <a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnMessageReceived <a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered after receiving a message</td>
</tr>
</tbody>
</table>
</div></div>
<h2 id="disconnecting">Disconnecting</h2>
<p>If peers disconnect other peers will be notified with the <code>PeerLeft</code> events.</p>
<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

Local --&gt;+ Server: Closing Connection
Server -&gt;&gt; Remote: PeerLeft
deactivate Server
</code></pre>
<h4 id="event-summary-5">Event Summary</h4>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-disconnect-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-disconnect-event-summary-unity" type="button" role="tab" aria-controls="pills-disconnect-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-disconnect-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-disconnect-event-summary-unity" role="tabpanel" aria-labelledby="pills-disconnect-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td></td>
<td>Triggered if user started to leave a room</td>
</tr>
<tr>
<td><span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user left a room</td>
</tr>
</tbody>
</table>
</div></div>
<h2 id="getting-kicked">Getting Kicked</h2>
<p>If a peer is kicked from the server, this message flow will take place:</p>
<pre><code class="language-mermaid">sequenceDiagram

participant Local
participant Server
participant Remote

activate Server
Server -&gt;&gt; Local: Left
Server -&gt;&gt; Remote: PeerLeft
Server --&gt; Local: Closing Connection
deactivate Server
</code></pre>
<h4 id="event-summary-6">Event Summary</h4>
<ul class="nav nav-tabs framework-tabs border-bottom border-elevation-24dp" role="tablist"><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link active" id="pills-kicked-event-summary-unity-tab" data-framework="unity" data-bs-toggle="pill" data-bs-target="#pills-kicked-event-summary-unity" type="button" role="tab" aria-controls="pills-kicked-event-summary-unity" aria-selected="true"><img src="/images/unity.svg" class="tab-icon"> Unity</button>
  </li><li class="nav-item" role="presentation">
    <button class="pb-2 mb-0 btn-grey border elevation-02dp border-elevation-08dp nav-link " id="pills-kicked-event-summary-unreal-tab" data-framework="unreal" data-bs-toggle="pill" data-bs-target="#pills-kicked-event-summary-unreal" type="button" role="tab" aria-controls="pills-kicked-event-summary-unreal" aria-selected="true"><img src="/images/unreal.svg" class="tab-icon"> Unreal</button>
  </li></ul>
<div class="tab-content elevation-01dp" id="pills-kicked-event-summary-tab-content">
<div class="tab-pane fade show active" id="pills-kicked-event-summary-unity" role="tabpanel" aria-labelledby="pills-kicked-event-summary-unity-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user has been kicked from a room</td>
</tr>
</tbody>
</table>
</div>
<div class="tab-pane fade" id="pills-kicked-event-summary-unreal" role="tabpanel" aria-labelledby="pills-kicked-event-summary-unreal-tab"><table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td><span class="external-reference">On Peer Left <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-left/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user left a room</td>
</tr>
</tbody>
</table>
</div></div>
<h2 id="next-steps">Next Steps</h2>
<p>Curious enough? Then get started with our Getting Started Guides. Choose your platform and start coding. It&rsquo;ll only take
20 minutes to play around with ODIN right in your game engines editor: <a href="/odin/guides/">Getting Started</a>.</p>
<p><a href='/odin/guides/' class="btn btn-primary">Getting Started with ODIN</a></p>
<p>Still not convinced or wanting to learn more? We have compiled a couple of use cases and how ODIN is best suited to handle
them perfectely, being it a First Person Shooter or a MMO Battle Royal Game.</p>
<p><a href='/odin/introduction/concepts/' class="btn btn-primary">Next: Use Cases</a></p>
`}),e.add({id:3525,href:"https://www.4players.io/fleet/cli/fleet/configs/",title:"Configs",section:"ODIN Fleet Documentation",description:"Manage configuration files in your account.",content:`<p>Configs in Fleet define how your images are configured when they are deployed. There are many options available to
customize your deployments, such as environment variables, volumes, and ports. It&rsquo;s easier to manage these
configurations
using our <a href="/fleet/manual/configs/">dashboard</a>, but you can also manage them using the CLI.</p>
<h2 id="overview">Overview</h2>
<p>The <code>configs</code> commands allow you to manage configurations in your account. You can create new configurations, list
existing configurations, and delete configurations that are no longer needed.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet configs &lt;command&gt;</code></p>
<h2 id="commands">Commands</h2>
<ul>
<li><a href="./list">List</a>: List all configurations in your account.</li>
<li><a href="./get">Get</a>: Display detailed information about a configuration.</li>
<li><a href="./create">Create</a>: Create a new configuration.</li>
<li><a href="./delete">Delete</a>: Delete a configuration.</li>
<li><a href="./update">Update</a>: Update a configuration</li>
</ul>
`}),e.add({id:3526,href:"https://www.4players.io/fleet/cli/fleet/configs/create/",title:"Create a configuration",section:"ODIN Fleet Documentation",description:"Create a new configuration.",content:`<p>Creates a new configuration for a specified app. A configuration defines the settings for a deployment, such as the
image to use, environment variables, persistent folders and the ports to expose.</p>
<p>Configs are quite complex objects, so we recommend using the <a href="/fleet/manual/configs/">dashboard</a> to
create and manage them. However, you can also create and manage them using the CLI.</p>
<p>This command can be used in two ways:</p>
<ol>
<li><strong>Interactive mode</strong>: Run the command without any flags to be prompted for the required information. Use the
<code>--dry-run</code> flag to see the JSON payload that would be sent to the API without actually
creating the configuration.</li>
<li><strong>Non-interactive mode</strong>: Use the <code>--payload</code> flag to specify a JSON payload to create the configuration.</li>
</ol>
<h2 id="usage">Usage</h2>
<p><code>odin fleet configs create</code> [<code>--payload</code>=<code>JSON_PAYLOAD</code>] [<code>--dry-run</code>]</p>
<h2 id="examples">Examples</h2>
<p>Create a new configuration interactively and see the JSON payload that would be sent to the API:</p>
<pre><code class="language-bash">odin fleet configs create --dry-run
</code></pre>
<p>This will output the JSON payload that would be sent to the API. You can use this payload to create the configuration
with the <code>--payload</code> flag:</p>
<pre><code class="language-bash">odin fleet configs create --payload='{&quot;name&quot;:&quot;My Config....&quot;}' --force
</code></pre>
<p>This is useful for automation of server configuration creation. You can interactively create a configuration or
create a configuration in the dashboard and use the <a href="./get">Get command</a> to get the JSON payload using the
<code>--format=json</code> flag. Then use a tool like <code>jq</code> to modify the payload and create a new configuration using the
<code>--payload</code> flag.</p>
<h2 id="flags">Flags</h2>
<p>If you want to create a configuration interactively, you can run the command without any flags. The CLI will prompt you
for the required information.</p>
<ul>
<li><strong><code>--dry-run</code></strong>:<br>
An optional flag that shows the JSON payload that would be sent to the API without actually creating the
configuration.
You can use that payload to create the configuration with the <code>--payload</code> flag.</li>
<li><strong><code>--payload=&lt;string&gt;</code></strong>:<br>
An optional flag that allows you to specify a JSON payload to create the configuration. This is useful for
non-interactive
mode and if you want to create a configuration with a specific configuration.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3527,href:"https://www.4players.io/fleet/cli/fleet/deployments/create/",title:"Create a deployment",section:"ODIN Fleet Documentation",description:"Create a new deployment.",content:`<p>Creates a new deployment for a specified app. A deployment defines which server configurations (and therefore which
images) are being deployed at which location and with how many instances.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Please note    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We have a flexible system of selecting locations. In your deployment you provide a country and a city. The system will
automatically select the best location for you based on the available locations in the selected country and city.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet deployments create</code> [<code>--name</code>=<code>IMAGE_NAME</code>] [<code>--deployment-id</code>=<code>DEPLOYMENT_ID</code>][<code>--num-instances</code>=
<code>NUM_INSTANCES</code>] [<code>--country</code>=<code>COUNTRY</code>] [<code>--city</code>=<code>CITY</code>] [<code>payload</code>=<code>JSON_PAYLOAD</code>] [<code>--dry-run</code>]</p>
<h2 id="examples">Examples</h2>
<p>Create a new deployment interactively:</p>
<pre><code class="language-bash">odin fleet deployments create
</code></pre>
<p>Create a new deployment with a specific configuration:</p>
<pre><code class="language-bash">odin fleet deployments create --name=&quot;US-NYC-Community-Servers&quot; --config-id=123456 --num-instances=5 --country=us 
--city=newyork
</code></pre>
<h2 id="flags">Flags</h2>
<p>If you want to create a deployment interactively, you can run the command without any flags. The CLI will prompt you
for the required information.</p>
<ul>
<li>
<p><strong><code>--dry-run</code></strong>:<br>
An optional flag that shows the JSON payload that would be sent to the API without actually creating the image.
You can use that payload to create the image with the <code>--payload</code> flag.</p>
</li>
<li>
<p><strong><code>--payload=&lt;string&gt;</code></strong>:<br>
An optional flag that allows you to specify a JSON payload to create the image. This is useful for non-interactive
mode and if you want to create an image with a specific configuration.</p>
</li>
</ul>
<p>Instead of providing a JSON payload, you can use the following options to create an image:</p>
<ul>
<li><strong><code>--name=&lt;string&gt;</code></strong>:<br>
The name of the image. This is a required option to identify the image.</li>
<li><strong><code>--config-id=&lt;number&gt;</code></strong>:<br>
The ID of the configuration that should be used for the deployment.</li>
<li><strong><code>--num-instances=&lt;number&gt;</code></strong>:<br>
The number of instances that should be deployed.</li>
<li><strong><code>--country=&lt;string&gt;</code></strong>:<br>
The country where the deployment should be created.</li>
<li><strong><code>--city=&lt;string&gt;</code></strong>:<br>
The city where the deployment should be created.</li>
</ul>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Use the <a href="/fleet/cli/fleet/locations/">odin fleet locations</a> command to get a list of available
locations.</p>
</div>
</div>

<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3528,href:"https://www.4players.io/fleet/cli/apps/create/",title:"Create an App",section:"ODIN Fleet Documentation",description:"Create a new app.",content:`<p>Creates a new app with the specified name and options. If you don&rsquo;t provide a name, the CLI will prompt you to enter
one.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There are no costs involved in creating an app. You only pay for the resources you use (like servers, images, etc.).</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin apps create</code> [<code>--name</code>=<code>APP_NAME</code>]</p>
<h2 id="examples">Examples</h2>
<p>Create a new app with the name <code>my-app</code>:</p>
<pre><code class="language-bash">odin apps create --name=&quot;my-app&quot;
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--name=&lt;string&gt;</code></strong>:<br>
The name of the app to create.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3529,href:"https://www.4players.io/fleet/cli/fleet/images/create/",title:"Create an Image",section:"ODIN Fleet Documentation",description:"Create a new server image.",content:`<p>Creates a new image for use in deployments. There are many options available for creating an image, allowing you to
customize settings such as the Docker image, registry, and Steamworks integration.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you provide your own docker images you need to register a registry within ODIN Fleet. You can do this in the
console. More info can be found in our <a href="/fleet/manual/registries/">Adding Registries Guide in the Manual</a>.
You will need the ID of the
registry to register a
docker image with ODIN Fleet. If you want to use Steamworks images, you need to provide the Steam App ID of the game or
tool you want to use.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet images create</code> [<code>--name</code>=<code>IMAGE_NAME</code>] [<code>--version</code>=<code>IMAGE_VERSION</code>] [<code>--os</code>=<code>IMAGE_OS</code>]
[<code>--type</code>=<code>IMAGE_TYPE</code>]
[<code>--docker-image</code>=<code>DOCKER_IMAGE</code>] [<code>--registry-id</code>=<code>REGISTRY_ID</code>] [<code>--steam-app-id</code>=<code>STEAM_APP_ID</code>]
[<code>--branch</code>=<code>STEAM_BRANCH</code>]
[<code>--password</code>=<code>STEAM_PASSWORD</code>] [<code>--command</code>=<code>STEAM_COMMAND</code>] [<code>--steamcmd-username</code>=<code>STEAMCMD_USERNAME</code>]
[<code>--steamcmd-password</code>=<code>STEAMCMD_PASSWORD</code>] [<code>--runtime</code>=<code>STEAM_RUNTIME</code>] [<code>--headful</code>] [<code>--request-license</code>]
[<code>--unpublished</code>] [<code>payload</code>=<code>JSON_PAYLOAD</code>] [<code>--dry-run</code>]</p>
<h2 id="flags">Flags</h2>
<p>If you want to create an image interactively, you can run the command without any flags. The CLI will prompt you for the
required information.</p>
<ul>
<li>
<p><strong><code>--dry-run</code></strong>:<br>
An optional flag that shows the JSON payload that would be sent to the API without actually creating the image.
You can use that payload to create the image with the <code>--payload</code> flag.</p>
</li>
<li>
<p><strong><code>--payload=&lt;string&gt;</code></strong>:<br>
An optional flag that allows you to specify a JSON payload to create the image. This is useful for non-interactive
mode and if you want to create an image with a specific configuration.</p>
</li>
</ul>
<p>Instead of providing a JSON payload, you can use the following options to create an image:</p>
<ul>
<li>
<p><strong><code>--name=&lt;string&gt;</code></strong>:<br>
The name of the image. This is a required option to identify the image.</p>
</li>
<li>
<p><strong><code>--version=&lt;string&gt;</code></strong>:<br>
Specifies the version of the image. This can be useful for managing different iterations of the same image.</p>
</li>
<li>
<p><strong><code>--os=&lt;string&gt;</code></strong>:<br>
Defines the operating system that the image is based on. For example, it could be <code>linux</code>, <code>windows</code>, etc.</p>
</li>
<li>
<p><strong><code>--type=&lt;string&gt;</code></strong>:<br>
Specifies the type of the image. This is either <code>dockerImage</code> or <code>steam</code>.</p>
</li>
</ul>
<p>These options need to be provided to create a docker image (i.e. <code>--type=dockerImage</code>):</p>
<ul>
<li>
<p><strong><code>--docker-image=&lt;string&gt;</code></strong>:<br>
The name of the Docker image to use. This should be the full path to the Docker image in the registry.</p>
</li>
<li>
<p><strong><code>--registry-id=&lt;number&gt;</code></strong>:<br>
The ID of the Docker registry where the image is stored. This is useful if you have multiple Docker registries
configured.
You can get the registry ID in the console <a href="https://console.4players.io/settings/docker-registries">https://console.4players.io/settings/docker-registries</a></p>
</li>
</ul>
<p>Provide these options to create a Steam image (i.e. <code>--type=steam</code>):</p>
<ul>
<li>
<p><strong><code>--steam-app-id=&lt;number&gt;</code></strong>:<br>
The Steam App ID associated with the image. This is required if the image is related to a Steam application.</p>
</li>
<li>
<p><strong><code>--branch=&lt;string&gt;</code></strong>:<br>
Specifies the Steam branch to use. This allows you to choose between different branches (e.g., <code>beta</code>, <code>stable</code>) of a
Steam game or application.</p>
</li>
<li>
<p><strong><code>--password=&lt;string&gt;</code></strong>:<br>
The password associated with the Steam branch, if required. This is typically used for private or protected branches.</p>
</li>
<li>
<p><strong><code>--command=&lt;string&gt;</code></strong>:<br>
Specifies a command to be run by Steam, useful for custom deployment scripts or specific launch commands.</p>
</li>
<li>
<p><strong><code>--steamcmd-username=&lt;string&gt;</code></strong>:<br>
The username for SteamCMD. Required for downloading and managing Steam games or tools via the command line.</p>
</li>
<li>
<p><strong><code>--steamcmd-password=&lt;string&gt;</code></strong>:<br>
The password for SteamCMD. This is used in conjunction with the SteamCMD username to authenticate and perform
operations.</p>
</li>
<li>
<p><strong><code>--runtime=&lt;string&gt;</code></strong>:<br>
Specifies the Steam runtime environment. This might be necessary for games or applications that require a specific
runtime version.</p>
</li>
<li>
<p><strong><code>--headful</code></strong>:<br>
An optional flag that enables Steam in headful mode, where a graphical interface might be needed for certain
operations.</p>
</li>
<li>
<p><strong><code>--request-license</code></strong>:<br>
An optional flag to request a Steam license, usually needed for restricted or license-protected games.</p>
</li>
<li>
<p><strong><code>--unpublished</code></strong>:<br>
If your Steam app is not published, you need to set this flag, otherwise leave it out.</p>
</li>
</ul>
<h2 id="examples">Examples</h2>
<p>You can use the <code>--format</code> flag to customize the output format. For example, to just display/get the image ID you can
use the <code>--format=&quot;value(id)&quot;</code> flag.</p>
<pre><code class="language-bash">odin fleet images create --name=&lt;image_name&gt; --type=dockerImage --docker-image=&lt;docker_image&gt; --registry-id=&lt;registry_id&gt; --format=&quot;value(id)&quot;
</code></pre>
<p>This is useful for bash scripts or other automation tasks, where you want to use the ID of the created image in the next
command. A full example could look like this:</p>
<pre><code class="language-bash">IMAGE_ID=$(
  odin fleet images create \\
  --name=&quot;Example Image&quot; \\
  --type=&quot;dockerImage&quot; \\
  --docker-image=&quot;example/example-image:latest&quot; \\    
  --registry-id=1 \\
  --force \\
  --format=&quot;value(id)&quot;)
  
echo &quot;Created image with ID: $IMAGE_ID&quot;
</code></pre>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3530,href:"https://www.4players.io/fleet/cli/fleet/configs/delete/",title:"Delete a Config",section:"ODIN Fleet Documentation",description:"Delete a config by ID.",content:`<p>Deletes the specified config.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Deleting a config is irreversible and will remove all associated resources like deployments and servers.
Without using the <code>--force</code> flag, the CLI will prompt you to confirm the deletion.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet configs delete</code> [<code>--config-id</code>=<code>CONFIG_ID</code>]</p>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--config-id=&lt;number&gt;</code></strong>:<br>
The ID of the config to delete. If omitted, the CLI will prompt you to enter the config ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>
<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>
`}),e.add({id:3531,href:"https://www.4players.io/fleet/cli/fleet/deployments/delete/",title:"Delete a Deployment",section:"ODIN Fleet Documentation",description:"Delete a deployment by ID.",content:`<p>Deletes the specified deployment.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Deleting a deployment is irreversible and will remove all associated servers.
Without using the <code>--force</code> flag, the CLI will prompt you to confirm the deletion.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet deployments delete</code> [<code>--deployment-id</code>=<code>DEPLOYMENT_ID</code>]</p>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--deployment-id=&lt;number&gt;</code></strong>:<br>
The ID of the deployment to delete. If omitted, the CLI will prompt you to enter the config ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>
<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>
`}),e.add({id:3532,href:"https://www.4players.io/fleet/cli/apps/delete/",title:"Delete an App",section:"ODIN Fleet Documentation",description:"Delete an app by ID.",content:`<p>Deletes the specified app.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Deleting an app is irreversible and will remove all associated resources like images, configs, deployments and servers.
Without using the <code>--force</code> flag, the CLI will prompt you to confirm the deletion.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin apps delete</code> [<code>-app-id</code>=<code>APP_ID</code>]</p>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--app-id=&lt;number&gt;</code></strong>:<br>
The ID of the app to delete. If omitted, the CLI will prompt you to enter the app ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3533,href:"https://www.4players.io/fleet/cli/fleet/images/delete/",title:"Delete an Image",section:"ODIN Fleet Documentation",description:"Delete an image by ID.",content:`<p>Deletes the specified image.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Deleting an image is irreversible and will remove all associated resources like deployments and servers.
Without using the <code>--force</code> flag, the CLI will prompt you to confirm the deletion.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet images delete</code> [<code>--image-id</code>=<code>IMAGE_ID</code>]</p>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--image-id=&lt;number&gt;</code></strong>:<br>
The ID of the image to delete. If omitted, the CLI will prompt you to enter the image ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>
<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>
`}),e.add({id:3534,href:"https://www.4players.io/fleet/cli/apps/get/",title:"Get App Details",section:"ODIN Fleet Documentation",description:"Retrieve an app by ID.",content:`<p>Fetch details for a specific app by ID.</p>
<h2 id="usage">Usage</h2>
<p><code>odin apps get</code> [<code>--app-id</code>=<code>APP_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Retrieve details for an app by ID as a JSON object:</p>
<pre><code class="language-bash">odin apps get --app-id=app-123456 --format=json
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--app-id=&lt;string&gt;</code></strong>:<br>
The ID of the app to retrieve details for. If omitted, the CLI will prompt you to enter the app ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3535,href:"https://www.4players.io/fleet/cli/fleet/configs/get/",title:"Get Config Details",section:"ODIN Fleet Documentation",description:"Display detailed information about a configuration.",content:`<p>Retrieves details of a specific configuration.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet configs get</code> [<code>--config-id</code>=<code>CONFIG_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Retrieve details for a configuration by ID as a JSON object:</p>
<pre><code class="language-bash">odin fleet configs get --config-id=123456 --format=json
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--config-id=&lt;number&gt;</code></strong>:<br>
The ID of the configuration to retrieve details for. If omitted, the CLI will prompt you to enter the configuration ID
interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3536,href:"https://www.4players.io/fleet/cli/fleet/deployments/get/",title:"Get Deployment Details",section:"ODIN Fleet Documentation",description:"Display detailed information about a deployment.",content:`<p>Retrieves details of a specific deployment.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet deployments get</code> [<code>--deployment-id</code>=<code>DELPOYMENT_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Retrieve details for a deployment by ID as a JSON object:</p>
<pre><code class="language-bash">odin fleet deployments get --deployment-id=123456 --format=json
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--deployment-id=&lt;number&gt;</code></strong>:<br>
The ID of the deployment to retrieve details for. If omitted, the CLI will prompt you to select the deployment
interactively from a list of deployments.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3537,href:"https://www.4players.io/fleet/cli/fleet/images/get/",title:"Get Image Details",section:"ODIN Fleet Documentation",description:"Display detailed information about an image.",content:`<p>Retrieves details of a specific image.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet images get</code> [<code>--image-id</code>=<code>IMAGE_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Retrieve details for an image by ID as a JSON object:</p>
<pre><code class="language-bash">odin fleet images get --image-id=123456 --format=json
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--image-id=&lt;number&gt;</code></strong>:<br>
The ID of the image to retrieve details for. If omitted, the CLI will prompt you to enter the image ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3538,href:"https://www.4players.io/fleet/cli/fleet/servers/get/",title:"Get Server Details",section:"ODIN Fleet Documentation",description:"Display detailed information about a server.",content:`<p>Retrieves details of a specific server.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet servers get</code> [<code>--server-id</code>=<code>SERVER_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Retrieve details for an image by ID as a JSON object:</p>
<pre><code class="language-bash">odin fleet servers get --server-id=123456 --format=json
</code></pre>
<p>Get IP address and published Game Port of the server. In this example we have defined a port named <code>Game Port</code> in the
configuration:</p>
<pre><code class="language-bash">odin fleet servers get --server-id=123456 --format=&quot;value[separator=':'](addr,ports['Game Port'].publishedPort)&quot;
</code></pre>
<p>We use the <code>separator</code> attribute here to separate the IP address and the port with a colon instead of the default tab.
This can be useful for creating a list of servers to use in a script or for monitoring.</p>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--server-id=&lt;number&gt;</code></strong>:<br>
The ID of the image to retrieve details for. If omitted, the CLI will prompt you to enter the image ID interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3539,href:"https://www.4players.io/4netplayers/getting-started/",title:"Getting Started",section:"Free Server Hosting",description:"A quick guide on how to add your game to our library",content:`<p>This document will guide you through the onboarding of your game into our library. Our operations team will be there
to help, of course.</p>
<h2 id="1-join-discord-server">1. Join Discord Server</h2>
<p>The best place to communicate with our operations team and sales is our discord channel. Please join us here:</p>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
<h2 id="2-confirm-prerequisites">2. Confirm prerequisites</h2>
<p>There are a couple of prerequisites that must be met before we can add the dedicated server of your game into our
library. If you use typical multiplayer frameworks like Photon, Mirror Networking, MLAPI for Unity or Unreal Engine
then you typically already meet these requirements. However, please check out our documentation on that topic and
make sure your dedicated server software meets those requirements:</p>
<p><a href='/4netplayers/requirements/' class="btn btn-primary">Validate Prerequisites</a></p>
<h2 id="3-upload-binaries">3. Upload binaries</h2>
<p>You need to upload the server software somewhere that we have access to. Best way to do that is to leverage CI/CD with
Github actions, Unity cloud build or Gitlab that will automatically test, compile, build and deploy your latest
server build on this folder. This way, you don&rsquo;t need to worry about us getting the latest build. Just commit to
<code>master</code> or set a <code>tag</code> (depending on your CI/CD rules) and the new server build will be available at the URL you
provide.</p>
<h2 id="4-provide-information">4. Provide information</h2>
<p>Compile a document (PDF, Google Docs, website or something similar) and provide this information:</p>
<ul>
<li>URL of the binaries and access information if held private</li>
<li>Available command line options (<a href="/4netplayers/requirements/#ip-and-port-settings">please note that a few are a requirement on our side</a>)</li>
<li>Example of a command line with all arguments</li>
<li>Explanation of config file locations</li>
<li>Description of config file options and minimum and maximum values (if not available as comments in the config file
template itself)</li>
<li>Files or folders that need to be backed up as they store persistent data of the server</li>
<li>Artwork and/or packshot of your game for our landing pages and web interface (can also be a URL where we can
download them)</li>
</ul>
<h2 id="thats-it">That&rsquo;s it</h2>
<p>Once you have joined our Discord server and provided the information above, our operations team will add your game
to our library and will provide you with access to our web interface where you can setup and launch your gameservers
to validate and verify that everything works as intended.</p>
<p>We&rsquo;ll also create a store page at <a href="https://www.4netplayers.com">4Netplayers.com</a> where your community will be able
to purchase their own server with ease.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Our backend regularly checks the URL for new binaries and if available will automatically update the software in our
library and will trigger restarts of all running servers (as long as users have not disabled automatic restarts).</p>
</div>
</div>

<p>Read on if you want to learn more about hosting official servers or getting revenue shares selling servers directly
in your game. This is optionally and if you just want to have your servers made available to the 4Netplayers
community and your customers for quickly getting full-service gameservers then that&rsquo;s ok for us!</p>
<h2 id="official-servers">Official Servers</h2>
<p>If you want or need official servers for your game, we got you covered. You can either rent a fleet of game
servers from us (contact <a href="/4netplayers/contact/">sales</a>) or 4Players will provide the fleet for free
if you sign a contract that guarantees exclusivity (contact <a href="/4netplayers/contact/">sales</a>).</p>
<h2 id="revenue-share">Revenue Share</h2>
<p>We provide revenue shares if customers purchase a server coming directly from your game. Just add a button to
your main menu or server list &ldquo;Get your own server&rdquo; and route users to the landing page of your game on our store
page (i.e. <a href="https://www.4netplayers.com/en/server-hosting/valheim-server-rental/">Valheim</a> or [Minecraft]
(<a href="https://www.4netplayers.com/en/server-hosting/minecraft-server-rental/?ckq=true">https://www.4netplayers.com/en/server-hosting/minecraft-server-rental/?ckq=true</a>) with a special partner id added to
the URL. This way we can track sales through your game and you&rsquo;ll receive <strong>0,18€ per slot/month</strong> running on servers
that
you have advertised in your game.</p>
<p>(Contact <a href="/4netplayers/contact/">sales</a>) if your are interested in this type of business model. We
strongly recommend doing it:</p>
<ul>
<li>Gamers will have official servers to play on to get started playing your game</li>
<li>Once they want to have their own server they can just rent them for fair prices from us</li>
<li>You may provide the server to your community without any hosting services but it&rsquo;s ok for us if they host servers
on their own root servers or VMs.</li>
<li>Instead of getting charged for your game servers, you&rsquo;ll get paid from us for letting us hosting them with <strong>0,18€
per slot and month</strong>.</li>
</ul>
`}),e.add({id:3540,href:"https://www.4players.io/fleet/cli/apps/list/",title:"List available Apps",section:"ODIN Fleet Documentation",description:"List all apps in your account.",content:`<p>Displays a list of all available apps. The currently selected app is highlighted (if output formatting supports it).</p>
<h2 id="usage">Usage</h2>
<p><code>odin apps list</code></p>
<h2 id="examples">Examples</h2>
<p>List all apps in a table format:</p>
<pre><code class="language-bash">odin apps list
</code></pre>
<p>List all apps and display the output in JSON format:</p>
<pre><code class="language-bash">odin apps list --format=json
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--filter</code></strong>:<br>
An optional flag that filters the list of deployments. The filter expression follows a straightforward structure of
<code>&lt;field&gt; &lt;operator&gt; &lt;value&gt;</code>. The field can be any property in the dataset, and operators include basic comparison
operators such as <code>=</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, and <code>&lt;=</code>. Filters can also be combined using logical operators <code>AND</code>,
<code>OR</code>, and negated with <code>NOT</code>. You can access nested fields using dot notation, and strings should be enclosed in
quotes. Learn more about filters <a href="/fleet/cli/usage/filters/">in our filters documentation</a>.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3541,href:"https://www.4players.io/fleet/cli/fleet/configs/list/",title:"List available Configs",section:"ODIN Fleet Documentation",description:"List all configurations in your account.",content:`<p>Lists all configurations in your account. Configurations define how your images are configured when they are deployed.
There are many options available to customize your deployments, such as environment variables, volumes, and ports. It&rsquo;s
easier to manage these configurations using our <a href="/fleet/manual/configs/">dashboard</a>, but you can also
manage them using the CLI.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet configs list</code> [<code>--unused</code>]</p>
<h2 id="examples">Examples</h2>
<p>List all configs in a table format:</p>
<pre><code class="language-bash">odin fleet configs list
</code></pre>
<p>List the ids of unused configs (useful for cleanup):</p>
<pre><code class="language-bash">odin fleet configs --format=&quot;value(id)&quot; --unused
</code></pre>
<p>List the configs that match a specific name pattern:</p>
<pre><code class="language-bash">odin fleet configs --format=&quot;table(id,name)&quot; --filter=&quot;name ~ 'Minecraft*'&quot; 
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li>
<p><strong><code>--unused</code></strong>:<br>
An optional flag that filters the list to show only images that are not currently in use by any deployments.</p>
</li>
<li>
<p><strong><code>--filter</code></strong>:<br>
An optional flag that filters the list of configurations. The filter expression follows a straightforward structure of
<code>&lt;field&gt; &lt;operator&gt; &lt;value&gt;</code>. The field can be any property in the dataset, and operators include basic comparison
operators such as <code>=</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, and <code>&lt;=</code>. Filters can also be combined using logical operators <code>AND</code>,
<code>OR</code>, and negated with <code>NOT</code>. You can access nested fields using dot notation, and strings should be enclosed in
quotes. Learn more about filters <a href="/fleet/cli/usage/filters/">in our filters documentation</a>.</p>
</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3542,href:"https://www.4players.io/fleet/cli/fleet/deployments/list/",title:"List available Deployments",section:"ODIN Fleet Documentation",description:"List all deployments in your account.",content:`<p>Lists all deployments in your account. Deployments define which server configurations (and therefore which images) are
being deployed at which location and with how many instances.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet deployments list</code></p>
<h2 id="examples">Examples</h2>
<p>List all deployments in a table format:</p>
<pre><code class="language-bash">odin fleet deployments list
</code></pre>
<p>Create a JSON file with the list of deployments:</p>
<pre><code class="language-bash">odin fleet deployments list --format=json &gt; deployments.json
</code></pre>
<p>List the deployments running in a specific location:</p>
<pre><code class="language-bash">odin fleet deployments list --filter=&quot;placement.constraints.country = 'us'&quot;
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--filter</code></strong>:<br>
An optional flag that filters the list of deployments. The filter expression follows a straightforward structure of
<code>&lt;field&gt; &lt;operator&gt; &lt;value&gt;</code>. The field can be any property in the dataset, and operators include basic comparison
operators such as <code>=</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, and <code>&lt;=</code>. Filters can also be combined using logical operators <code>AND</code>,
<code>OR</code>, and negated with <code>NOT</code>. You can access nested fields using dot notation, and strings should be enclosed in
quotes. Learn more about filters <a href="/fleet/cli/usage/filters/">in our filters documentation</a>.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3543,href:"https://www.4players.io/fleet/cli/fleet/images/list/",title:"List available Images",section:"ODIN Fleet Documentation",description:"List all images of the selected or specified app.",content:`<p>Lists all server images available in the selected or specified app. Images can either be docker images provided by you
or you can also link to a Steam App ID.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet images list</code> [<code>--unused</code>]</p>
<h2 id="examples">Examples</h2>
<p>List all images in a table format:</p>
<pre><code class="language-bash">odin fleet images list --format=&quot;table(id,name,type)&quot;
</code></pre>
<p>List the ids of unused images (useful for cleanup):</p>
<pre><code class="language-bash">odin fleet images list --format=&quot;value(id)&quot; --unused
</code></pre>
<p>List images that are being processed or have failed:</p>
<pre><code class="language-bash">odin fleet images list --filter=&quot;status != 'ready'&quot;
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li>
<p><strong><code>--unused</code></strong>:<br>
An optional flag that filters the list to show only images that are not currently in use by any deployments.</p>
</li>
<li>
<p><strong><code>--filter</code></strong>:<br>
An optional flag that filters the list of deployments. The filter expression follows a straightforward structure of
<code>&lt;field&gt; &lt;operator&gt; &lt;value&gt;</code>. The field can be any property in the dataset, and operators include basic comparison
operators such as <code>=</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, and <code>&lt;=</code>. Filters can also be combined using logical operators <code>AND</code>,
<code>OR</code>, and negated with <code>NOT</code>. You can access nested fields using dot notation, and strings should be enclosed in
quotes. Learn more about filters <a href="/fleet/cli/usage/filters/">in our filters documentation</a>.</p>
</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3544,href:"https://www.4players.io/fleet/cli/fleet/servers/list/",title:"List running servers",section:"ODIN Fleet Documentation",description:"List all deployed servers in your account.",content:`<p>Lists all servers that are running for your app. You cannot modify servers directly using the CLI, but you can view
information about them. To modify servers, you need to change the underlying deployment or configuration.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet servers list</code></p>
<h2 id="examples">Examples</h2>
<p>List all servers in a table format:</p>
<pre><code class="language-bash">odin fleet servers list
</code></pre>
<p>If you have defined an environment variable in the underlying configuration named <code>SERVER_NAME</code> you can use this command
show a table of servers with the <code>SERVER_NAME</code> column:</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;table(id,addr,env['SERVER_NAME'].value)&quot;
</code></pre>
<p>Return a list of servers that are either ready and have a specific name, or have a specific ID:</p>
<pre><code class="language-bash">odin fleet servers list --filter=&quot;(serverConfig.status = 'ready' AND serverConfig.name = 'Minecraft Production 2') OR id = 211&quot;
</code></pre>
<p>Let&rsquo;s create a CSV list with IP addresses, published game port (defined in the configuration with name <code>Game Port</code>), and
the server name (defined in the configuration with name <code>SERVER_NAME</code>):</p>
<pre><code class="language-bash">odin fleet servers list --format=&quot;value[separator=';'](addr,ports['Game Port'].publishedPort,env['SERVER_NAME'].value)&quot;
</code></pre>
<p>This can be useful for creating a list of servers to use in a script or for monitoring.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you find this confusing please read the <a href="/fleet/manual/configs/">manual page on server configurations</a>. There we go into detail about how to setup environment variables and ports.</p>
</div>
</div>

<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--filter</code></strong>:<br>
An optional flag that filters the list of deployments. The filter expression follows a straightforward structure of
<code>&lt;field&gt; &lt;operator&gt; &lt;value&gt;</code>. The field can be any property in the dataset, and operators include basic comparison
operators such as <code>=</code>, <code>!=</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, and <code>&lt;=</code>. Filters can also be combined using logical operators <code>AND</code>,
<code>OR</code>, and negated with <code>NOT</code>. You can access nested fields using dot notation, and strings should be enclosed in
quotes. Learn more about filters <a href="/fleet/cli/usage/filters/">in our filters documentation</a>.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3545,href:"https://www.4players.io/fleet/cli/fleet/servers/restart/",title:"Restart a Server",section:"ODIN Fleet Documentation",description:"Restart a server.",content:`<p>You can restart servers at any time. If the underlying server configuration has persistent data, the data will be
preserved across restarts. If the server is part of a deployment, the server will be restarted with the same
configuration as the deployment.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet servers restart</code> [<code>--server-id</code>=<code>SERVER_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Restart a server by ID:</p>
<pre><code class="language-bash">odin fleet servers restart --server-id=123456
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--server-id=&lt;number&gt;</code></strong>:<br>
The ID of the server to restart. If omitted, the CLI will prompt you to select a server from a list</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3546,href:"https://www.4players.io/fleet/cli/apps/select/",title:"Select an App",section:"ODIN Fleet Documentation",description:"Select an app to use for subsequent commands.",content:`<p>Select an app to use for subsequent commands. This is required before executing certain commands (if not provided via
the <code>--app-id</code> parameter).</p>
<h2 id="usage">Usage</h2>
<p><code>odin apps select</code> [<code>--app-id</code>=<code>APP_ID</code>]</p>
<h2 id="examples">Examples</h2>
<p>Select an app interactively:</p>
<pre><code class="language-bash">odin apps select
</code></pre>
<p>Select a specific app via the command line:</p>
<pre><code class="language-bash">odin apps select --app-id=app-123456
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--app-id=&lt;string&gt;</code></strong>:<br>
The ID of the app to select. If omitted, the CLI will prompt you to select an app interactively.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3547,href:"https://www.4players.io/fleet/cli/fleet/servers/logs/",title:"Show Server Logs",section:"ODIN Fleet Documentation",description:"Display detailed server logs",content:`<p>Retrieves logs of the server which can be useful for debugging and monitoring.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet servers logs</code> [<code>--server-id</code>=<code>SERVER_ID</code>] [<code>--details=DETAILS</code>] [<code>--follow=FOLLOW</code>] [<code>--stdout=STDOUT</code>]
[<code>--stderr=STDERR</code>] [<code>--since</code>=<code>SINCE</code>] [<code>--timestamps</code>] [<code>--tail</code>=<code>TAIL</code>]</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This command does not support the <code>--format</code> flag. Output is always in text format.</p>
</div>
</div>

<h2 id="examples">Examples</h2>
<p>Retrieve details for an image by ID as a JSON object:</p>
<pre><code class="language-bash">odin fleet servers logs --server-id=123456 
</code></pre>
<p>Show logs of the last hour with timestamps and only error messages:</p>
<pre><code class="language-bash">odin fleet servers logs --server-id=123456 --since=60 --timestamps=true --stderr=true --stdout=false
</code></pre>
<h2 id="flags">Flags</h2>
<ul>
<li><strong><code>--server-id=&lt;number&gt;</code></strong>:<br>
The ID of the image to retrieve details for. If omitted, the CLI will prompt you to enter the image ID interactively.</li>
<li><strong><code>--details</code></strong>:<br>
Show detailed logs if <code>true</code>, otherwise show only the log message.</li>
<li><strong><code>--follow</code></strong>:<br>
Follow logs if <code>true</code>.</li>
<li><strong><code>--stdout</code></strong>:<br>
Show stdout logs. Default is <code>true</code>.</li>
<li><strong><code>--stderr</code></strong>:<br>
Show stderr logs. Default is <code>true</code>.</li>
<li><strong><code>--since=&lt;string&gt;</code></strong>:<br>
Only return logs newer than a relative duration like 30, 180. Default is all logs.</li>
<li><strong><code>--timestamps</code></strong>:<br>
Show timestamps</li>
<li><strong><code>--tail=&lt;string&gt;</code></strong>:<br>
Number of lines to show from the end of the logs. Use <code>all</code> to show all logs.</li>
</ul>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3548,href:"https://www.4players.io/rooms/getting-started/sign-up/",title:"Sign Up",section:"Rooms Documentation",description:"Learn how to create an account with ODIN Rooms and get started with secure, decentralized video conferencing.",content:`<p>Signing up for ODIN Rooms is quick and easy and is a two or three-step process, depending on whether you are want to use
the free version or a paid version.</p>
<h2 id="configure-your-tier">Configure Your Tier</h2>
<p>The first step is to configure your account. After choosing a tier on our <a href="/products/rooms/">landing page</a>, you will be prompted to enter the following information:</p>
<figure><img src="/images/rooms/sign-up.jpg"
         alt="Rooms Sign Up"/><figcaption>
            <p>Rooms Configuration</p>
        </figcaption>
</figure>
<h3 id="subdomain">Subdomain</h3>
<p>You will be prompted to enter a <strong>subdomain</strong>. This subdomain is the unique web address where your
video conferencing service will be accessible. For example, if you choose “talk” as your subdomain, your ODIN Room will
be available at <code>talk.rooms.chat</code>.</p>
<ul>
<li>Your subdomain must be a combination of letters and numbers (starting with a letter).</li>
<li>This is how participants will access your meetings, so choose a name that reflects your use.</li>
</ul>
<h3 id="number-of-slots">Number of Slots</h3>
<p>By default, you can host up to 20 participants simultaneously in as many rooms as you like. This option is perfect for
small businesses and personal use. You can scale up by adjusting the number of slots as needed.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Free for Small Businesses and Personal Use  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>For up to <strong>20 participants</strong>, Rooms is completely <strong>free of charge</strong>. This plan is ideal for small businesses,
NGOs, educational institutions, and personal use.</p>
</div>
</div>

<h3 id="rental-duration">Rental Duration</h3>
<p>Choose the rental duration that best fits your needs. The default option is <strong>1 month</strong>, but you can save <strong>10%</strong> by
selecting a <strong>12-month</strong> plan.</p>
<p>Once you have completed these steps, proceed to checkout to finalize your account and start using Rooms!</p>
<h2 id="create-your-account">Create Your Account</h2>
<p>Pressing Next will take you to the account creation page. Here, you will be prompted to enter your email address and
create a password. You will also need to enter your address and payment information if you have chosen a paid plan.</p>
<h2 id="setting-up-your-rooms">Setting Up Your Rooms</h2>
<p>It may take a couple of minutes for your account and Rooms instance to be set up. Once it is ready, you will receive an
email with a link to your Rooms instance. Click the link to access your Rooms and start collaborating securely!</p>
<p>If you entered <code>talk</code> as the subdomain during sign-up your Rooms instance will be available at <code>talk.rooms.chat</code>. Once
you received the email that your Rooms instance is ready, enter your domain into your browsers address
bar. In our example it would be <code>https://talk.rooms.chat</code>.</p>
<p>If you open your Rooms instance for the first time, you will be prompted to setup some basic settings. Pressing the
(i) icon in the middle of the screen will reveal some details about Rooms, including the version number and the
terms. You&rsquo;ll also notice a sun (or moon) icon. This is the light/dark mode switch. You can toggle between light and
dark mode by clicking on it.</p>
<p>The first step is to setup your Rooms Title and the Server Location.</p>
<h3 id="app-title-and-server-location">App Title and Server Location</h3>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-setup-1.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-setup-1.jpg"
         alt="Rooms Basic Setup" width="800"/></a><figcaption>
            <p>Rooms Initial Setup</p>
        </figcaption>
</figure>
<dl>
<dt>App Title</dt>
<dd>This is the name of your Rooms instance. It will be displayed in the browser tab and will be the name if
someone bookmarks your Rooms instance.</dd>
<dt>Server Region</dt>
<dd>Choose the region where your Rooms instance is hosted. This will ensure the best performance for your participants.</dd>
</dl>
<p>Click &ldquo;Continue&rdquo; to proceed to the next step.</p>
<h3 id="branding">Branding</h3>
<p>In this step, you can setup logos and backgrounds for your Rooms instance. You can also setup colors. You will need
to setup for both light and dark mode.</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-setup-2.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-setup-2.jpg"
         alt="Rooms Branding" width="800"/></a><figcaption>
            <p>Rooms Branding</p>
        </figcaption>
</figure>
<dl>
<dt>Primary Color</dt>
<dd>This is the main color of your Rooms instance. It will be used for buttons and other elements.</dd>
<dt>Secondary Color</dt>
<dd>This color will be used for secondary elements.</dd>
<dt>Logo</dt>
<dd>Provide a URL to your logo. It will be displayed in the top left corner of your Rooms instance.</dd>
<dt>Background</dt>
<dd>Provide a URL to a background image. It will be displayed in the background of your Rooms instance.</dd>
<dt>Use as default</dt>
<dd>Activate this button to set the light or dark mode as default. I.e. if you activate this toggle when in the light
mode settings, the light mode will be the default mode.</dd>
</dl>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Logo and Background    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The logo and background image must be hosted on a server that supports HTTPS. The image URLs must start with <code>https://</code>.
We are working on allowing uploads of logos and backgrounds directly in the Rooms instance. This feature will be
available in one of the next updates this fall (2024).</p>
</div>
</div>

<p>Click &ldquo;Continue&rdquo; to proceed to the next step.</p>
<h3 id="guest-permissions">Guest Permissions</h3>
<p>In this step, you can setup permissions of guests for your Rooms instance. You can choose to allow or disallow certain
features for guests.</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-setup-3.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-setup-3.jpg"
         alt="Rooms Permissions" width="800"/></a><figcaption>
            <p>Rooms Permissions</p>
        </figcaption>
</figure>
<dl>
<dt>Modify App Settings</dt>
<dd>Allow guests to modify the app settings (like changing the logo or background).</dd>
<dt>Mute Participants</dt>
<dd>Allow guests to mute other participants.</dd>
<dt>Poke Participants</dt>
<dd>Allow guests to poke other participants. Poking means that the participant will receive a notification which is
useful if they are not paying attention or have muted their audio.</dd>
<dt>Enable Audio</dt>
<dd>Allow guests to enable or disable their microphone. Disabling that feature will mute the microphone of the guest.</dd>
<dt>Enable Video</dt>
<dd>Allow guests to enable or disable their camera. Disabling that feature will turn off the camera of the guest.</dd>
<dt>Clear Drawings</dt>
<dd>Allows guests to clear the whiteboard.</dd>
<dt>Clear Text Chat</dt>
<dd>Allows guests to clear the text chat.</dd>
</dl>
<p>You can change these settings at any time in the settings of your Rooms instance (if you have the necessary
permissions).</p>
<p>Click &ldquo;Continue&rdquo; to proceed to the next step.</p>
<h3 id="owners-password">Owners Password</h3>
<p>In the last step, you can setup a password for the owner of the Rooms instance. This password is needed to access the
settings of the Rooms instance.</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-setup-4.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-setup-4.jpg"
         alt="Rooms Owner Password" width="800"/></a><figcaption>
            <p>Rooms Owner Password</p>
        </figcaption>
</figure>
<dl>
<dt>Owner Team Password</dt>
<dd>Enter a password for the owner of the Rooms instance. This password is needed to access the settings of the Rooms
instance.</dd>
<dt>Owner Team Password (Repeat)</dt>
<dd>Repeat the password to ensure it is correct.</dd>
</dl>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Owner Password    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As we want to have full GDPR compliance, we do not store any user data. As such, we don&rsquo;t want to and cannot store user
accounts and assign permissions to them. The owner password is the only way to access the settings of the Rooms
instance and must be kept safe. If you lose the password, you need to reach out to our support team to reset your
instance.</p>
</div>
</div>

<p>Click &ldquo;Finish Setup&rdquo; to complete the setup of your Rooms instance.</p>
<h2 id="next-steps">Next Steps</h2>
<p>Now that you have set up your Rooms instance, you can start inviting participants to your meetings. Before that, we
recommend
checking out our <a href="/rooms/getting-started/concepts/">Basic Concepts</a> guide to learn more about the unique
features of Rooms and how to use them effectively.</p>
<ul>
<li><a href="/rooms/getting-started/concepts/">Basic Concepts</a></li>
<li><a href="/rooms/getting-started/first-call/">Your first call</a></li>
</ul>
`}),e.add({id:3549,href:"https://www.4players.io/odin/guides/unreal/",title:"Unreal",section:"ODIN Documentation",description:"Explore our comprehensive guides to integrate ODIN's voice chat SDK with Unreal Engine 4 and 5. Get started quickly with our step-by-step tutorials and detailed blueprint references for a smoother gaming experience.",content:`<p>The SDK (UnrealEngine 4 and 5) is based on our <a href="/odin/sdk/c/">C Api</a> and can be downloaded from our
Github repository:</p>


<a href='https://github.com/4Players/odin-sdk-unreal' target='' class="btn btn-primary">Download Unreal Engine SDK</a>



<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Unreal Engine 4.26 or any later version (including 5.x)</li>
</ul>
<p>Internally, the plugin is automatically built for compatibility starting from Unreal Engine 4.26 and is thoroughly tested with each new official release of Unreal Engine.</p>
<h2 id="getting-started">Getting Started</h2>
<p>We have compiled a couple of Getting Started Guides to get you started quickly.</p>
<h3 id="unreal-video-tutorial-series">Unreal video tutorial series</h3>
<p>Watch our <a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Unreal video tutorial series</a></p>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/7ZtC0WvX0c8?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>

<h3 id="written-guides">Written guides</h3>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN</h4>
<div class="teaser-content">
 <p>Follow this guide to learn how to install and setup ODIN in your Unreal Project using Blueprint.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal/blueprint-reference">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal_bp_reference.jpg">
</a>
<h4 class="teaser-title">Blueprint Reference</h4>
<div class="teaser-content">
 <p>Check out our extensive Blueprint reference to learn more about the nodes our SDK provides and how to connect them
into your game.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal/blueprint-reference">Let&#39;s start</a>
</div>
</div>
</div>
</div>
<h2 id="general-guides">General Guides</h2>
<p>A couple of concepts apply to all game engines and platforms, and it&rsquo;s important to understand those, especially when
going into production.</p>
<ul>
<li>Understanding Access Keys is an important part later when moving your game to production. <a href="/odin/introduction/access-keys/">Read this guide to understand
how we use access keys and how they work in detail</a>.</li>
</ul>
`}),e.add({id:3550,href:"https://www.4players.io/fleet/cli/fleet/configs/update/",title:"Update a Config",section:"ODIN Fleet Documentation",description:"Update a config by ID.",content:`<p>Updating a configuration allows you to change the settings of an existing configuration. This can be useful if you want
to
modify the configuration of a deployment without creating a new configuration.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Updating a configuration that is used in a deployment will affect all deployments that use this configuration. This is
a powerful tool as it allows you to update all running servers with a new image or configuration with one command.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet configs update</code> [<code>--name</code>=<code>IMAGE_NAME</code>] [<code>--command</code>=<code>COMMAND</code>] [<code>--args</code>=<code>ARGS</code>] [<code>--binary-id</code>=
<code>BINARY_ID</code>]
[<code>--restart-policy</code>=<code>RESTART_POLICY</code>] [<code>--memory</code>=<code>MEMORY</code>] [<code>--cpu</code>=<code>CPU</code>] [<code>--payload</code>=<code>JSON_PAYLOAD</code>] [<code>--dry-run</code>]</p>
<h2 id="flags">Flags</h2>
<p>The command will only update the fields that are provided. If you want to update multiple fields, you can provide them
all in one command. You can also provide a JSON payload to update the configuration using the usual <code>--payload</code> flag.
This command also support the <code>--dry-run</code> flag to see the JSON payload that would be sent to the API without actually
updating the configuration.</p>
<ul>
<li><strong><code>--name=&lt;string&gt;</code></strong>:<br>
The name of the configuration.</li>
<li><strong><code>--command=&lt;string&gt;</code></strong>:<br>
The command that should be executed when the server starts. It overwrites the command that is defined in the image.</li>
<li><strong><code>--args=&lt;string&gt;</code></strong>:<br>
The arguments that should be passed to the command when the server starts. It overwrites the arguments that are
defined in the image.</li>
<li><strong><code>--binary-id=&lt;number&gt;</code></strong>:<br>
The ID of the binary that should be used for the server. By changing the binary, you can update all running servers of
deployments linked to this configuration file.</li>
<li><strong><code>--restart-policy=&lt;string&gt;</code></strong>:<br>
The restart policy of the server. This can be <code>always</code>, <code>on-failure</code>, or <code>any</code></li>
<li><strong><code>--memory=&lt;number&gt;</code></strong>:<br>
The amount of memory that should be allocated to the server in GB.</li>
<li><strong><code>--cpu=&lt;number&gt;</code></strong>:<br>
The amount of CPU that should be allocated to the server in cores.</li>
</ul>
<h2 id="examples">Examples</h2>
<p>Update the memory requirement of a configuration:</p>
<pre><code class="language-bash">odin fleet configs update --config-id=123456 --memory=4
</code></pre>
<p>You can also update multiple fields at once:</p>
<pre><code class="language-bash">odin fleet configs update --config-id=123456 --memory=4 --cpu=2
</code></pre>
<p>A usual use case is to update the underlying image of a configuration. This can be done by changing the binary ID of the
configuration. In this more complex example, we create a new image, wait until the image is ready to be deployed and
then update the configuration to use the new image which will restart all servers with the new image.</p>
<p>It can be used in CI/CD pipelines to update the image of a configuration and restart all servers with the new image.</p>
<pre><code class="language-bash">#!/bin/bash

# Define the variables
IMAGE_NAME=&quot;Minecraft Java 21&quot;
IMAGE_VERSION=&quot;1.0.1&quot;
OS_TYPE=&quot;linux&quot;
DOCKER_IMAGE=&quot;itzg/minecraft-server:java21&quot;
REGISTRY_ID=1
CONFIG_ID=16

# Create a new image and get its ID
IMAGE_ID=$(./odin fleet images create \\
    --name=&quot;$IMAGE_NAME&quot; \\
    --version=&quot;$IMAGE_VERSION&quot; \\
    --os=&quot;$OS_TYPE&quot; \\
    --type=&quot;steam&quot; \\
    --docker-image=&quot;$DOCKER_IMAGE&quot; \\
    --registry-id=$REGISTRY_ID \\
    --format=&quot;value(id)&quot; \\
    --force)

echo &quot;Created image with ID: $IMAGE_ID&quot;

# Monitor the image status until it's ready
STATUS=&quot;processing&quot;
while [[ &quot;$STATUS&quot; != &quot;ready&quot; ]]; do
    STATUS=$(./odin fleet images get --image-id=$IMAGE_ID --format=&quot;value(status)&quot;)
    echo &quot;Current status of image $IMAGE_ID: $STATUS&quot;

    # Check if the status is 'error', in which case we should exit with a failure
    if [[ &quot;$STATUS&quot; == &quot;error&quot; ]]; then
        echo &quot;Error: Image creation failed. Exiting.&quot;
        exit 1
    fi

    # Wait for a few seconds before polling again
    sleep 5
done

echo &quot;Image $IMAGE_ID is ready.&quot;

# Update the config with the new image ID
./odin fleet configs update --config-id=$CONFIG_ID --binary-id=$IMAGE_ID --force

echo &quot;Config $CONFIG_ID has been updated to use image $IMAGE_ID.&quot;
</code></pre>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3551,href:"https://www.4players.io/fleet/cli/fleet/deployments/update/",title:"Update a Deployment",section:"ODIN Fleet Documentation",description:"Update a deployment by ID.",content:`<p>A deployment defines which server configuration runs with how many instances at a specific location. You can update a
deployment to change the number of instances or the configuration that is used thus updating all running server
instances with just one command.</p>
<p>This is also how you start and stop servers - you don&rsquo;t babysit individual servers, you update the deployment and the
system takes care of the rest.</p>
<p>For example, if you have a deployment with 10 instances and you update the configuration, all 10 instances will be
restarted with the new configuration. Reducing the number of instances to 8 will stop 2 instances and reduce the number
of running servers to 8. Increasing the number of instances to 12 will start 4 new instances with the selected
configuration.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You have two options to update servers: In either case you need to create a new image of your updated server
binaries. Then you can either create a new configuration with the new image and update the deployment to use the new
configuration or you can update the configuration directly with the new image. The latter will update all deployments
that use this configuration.</p>
</div>
</div>

<h2 id="usage">Usage</h2>
<p><code>odin fleet deployments update</code> [<code>--name</code>=<code>IMAGE_NAME</code>] [<code>--num-instances</code>=<code>NUM_INSTANCES</code>]
[<code>--deployment-id</code>=<code>DEPLOYMENT_ID</code>] [<code>--payload</code>=<code>JSON_PAYLOAD</code>] [<code>--dry-run</code>]</p>
<h2 id="flags">Flags</h2>
<p>The command will only update the fields that are provided. If you want to update multiple fields, you can provide them
all in one command. You can also provide a JSON payload to update the configuration using the usual <code>--payload</code> flag.
This command also support the <code>--dry-run</code> flag to see the JSON payload that would be sent to the API without actually
updating the configuration.</p>
<ul>
<li><strong><code>--name=&lt;string&gt;</code></strong>:<br>
The name of the configuration.</li>
<li><strong><code>--num-instances=&lt;number&gt;</code></strong>:<br>
The number of instances that should be running with this configuration.</li>
<li><strong><code>--deployment-id=&lt;number&gt;</code></strong>:<br>
The ID of the deployment that should be updated. Omitd if you want to choose deployment interactively.</li>
<li><strong><code>--payload=&lt;string&gt;</code></strong>:<br>
An optional flag that allows you to specify a JSON payload to update the deployment. This is useful for
non-interactive
mode and if you want to update a deployment with a specific configuration.</li>
<li><strong><code>--dry-run</code></strong>:<br>
An optional flag that shows the JSON payload that would be sent to the API without actually updating the deployment.
You can use that payload to update the deployment with the <code>--payload</code> flag.</li>
</ul>
<h2 id="examples">Examples</h2>
<p>Increase the number of deployments by 4:</p>
<pre><code class="language-bash">DEPLOYMENT_ID=123456
NUM_INSTANCES=$(odin fleet deployments get --deployment-id=$DEPLOYMENT_ID --format=&quot;value(numInstances)&quot;)
NUM_INSTANCES=$((NUM_INSTANCES + 4))
odin fleet deployments update --deployment-id=123456 --num-instances=$NUM_INSTANCES --force
</code></pre>
<h2 id="global-flags">Global Flags</h2>

<div><p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
</div>



`}),e.add({id:3552,href:"https://www.4players.io/rooms/manual/user-interface/",title:"User Interface",section:"Rooms Documentation",description:"Explore the ODIN Rooms user interface and learn how to navigate the platform.",content:`<p>In this guide we&rsquo;ll explore the user interface of ODIN Rooms. We&rsquo;ll show you how to navigate the platform and how to
use the different elements that are part of the user interface.</p>
<p>After joining a room (see <a href="/rooms/getting-started/first-call/">Your first Call</a>), you will see the
following user interface:</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-ui-overview.png" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview.png"
         alt="Room" width="800"/></a><figcaption>
            <p>Rooms UI after joining an empty room</p>
        </figcaption>
</figure>
<p>Let&rsquo;s navigate through the UI:</p>
<dl>
<dt>(1) Main Area</dt>
<dd>This is the main area of the room. Here you see the video of the other participants, the chat, the whiteboard and
other elements that are part of the room.</dd>
<dt>(2) User Info</dt>
<dd>Your user info is displayed in the top right corner including your name and your avatar. Pressing on the three dots
will open a menu where you can change your name, your avatar, your status and toggle light/dark mode.</dd>
<dt>(3) Participant</dt>
<dd>Each user connected to the room is displayed in the participant list (5) on the right side. You can see their name,
their
status and their avatar. You can also see if they have audio or video enabled. By pressing on the three dots, additional
options are available.</dd>
<dt>(4) Area Controls</dt>
<dd>These controls are used to control what is displayed in the area (see below for more details on this)</dd>
<dt>(5) Participants</dt>
<dd>On the sideboard on the right side you see the participants that are currently in the room. You can see their name,
their status and their avatar. You can also see if they have audio or video enabled.</dd>
<dt>(6) Dock</dt>
<dd>The dock allows you to mute, activate or disable video, share your screen, view notifications and open the settings.</dd>
<dt>(7) Sidebar (Left)</dt>
<dd>The sidebar allows you to dock additional modules like the text chat. The sidebar can be opened and closed by the
Area Controls (3). More on this later.</dd>
<dt>(8) Switch</dt>
<dd>This button switches the content of the main area with the sidebar. This way, you can have the main area for video
and the sidebar for chat or whiteboard - or the other way around.</dd>
</dl>
<h2 id="area-controls">Area Controls</h2>
<p>The area controls (3) allow you to control what is displayed in the main area. You can switch between the video, the
chat, the whiteboard and other modules that are part of the room. From top to bottom, these buttons are available:</p>
<figure class="image-right" style="max-width: 50px"><a href="/images/rooms/rooms-ui-overview-area-controls.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-area-controls.jpg"
         alt="Area Controls" width="50"/></a>
</figure>
<ul>
<li><strong>Maximize Sidebar</strong>: The first button maximizes the sidebar. This is useful if you want to focus on the chat or the
whiteboard that is typically pinned on the left side. Pressing the button again will minimize the sidebar.</li>
<li><strong>Minimize Participant List</strong>: The next button makes space for the sidebar and main area by minimizing the participant
list. Instead of the full list of participants, you will only see the avatars of the participants. Pressing the button
again will bring back the usual participant list.</li>
<li><strong>Video Chat/Text Chat</strong>: In the main area, show the video of the participants or the text chat. Depending on
what is displayed in the sidebar (see above), you can switch between the video and the chat.</li>
<li><strong>Whiteboard</strong>: In the main area, show the whiteboard. The whiteboard is a shared canvas where you can draw, write or
add images. You can use the whiteboard for brainstorming, presentations or just for fun.</li>
</ul>
<h2 id="switching-the-area">Switching the Area</h2>
<p>The typical layout is to have the text chat on the left side in the sidebar and the video in the main area. You can
switch this by clicking on the &ldquo;Switch&rdquo; button (7). This will move the sidebar to the main area and the video to the
sidebar. This is useful if you want to focus on the chat or the whiteboard.</p>
<h2 id="dock">Dock</h2>
<p>In the dock (5) you have the following controls:</p>
<figure style="max-width: 250px"><a href="/images/rooms/rooms-ui-overview-dock.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-dock.jpg"
         alt="Rooms Dock" width="250"/></a><figcaption>
            <p>Rooms Dock</p>
        </figcaption>
</figure>
<ul>
<li><strong>Mute</strong>: This button mutes your microphone. If you are muted, the button has a red cross over it.</li>
<li><strong>Output</strong>: This button mutes your speakers, i.e. after clicking that button you can&rsquo;t hear the other participants
anymore.</li>
<li><strong>Video</strong>: This button activates or deactivates your camera. If your camera is deactivated, the button has a red cross
over it.</li>
<li><strong>Screen</strong>: This button allows you to share your screen. If you are sharing your screen, the button has a green
checkmark
over it.</li>
<li><strong>Notifications</strong>: This button shows you the notifications that you have received. This can be a message in the chat,
a
poke or a notification from the system.</li>
<li><strong>Settings</strong>: This button opens the settings dialog where you can change your audio and video settings.</li>
</ul>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Button States    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>All app designers face the same issue: How to make it clear to the user what a button does and what the state is.
One way of doing it is to show an icon that reflects what will happen if you click that button. But this requires to
think about what the current state, i.e. of the microphone is.
We do it differently: <strong>Buttons always reflect the current state</strong>, i.e. if the microhone button is crossed, your
microphone is muted, clicking the button will activate it. If the button is not crossed, your microphone is active.</p>
</div>
</div>

<h2 id="participant-list">Participant List</h2>
<p>In the participant list (5) you see the participants that are currently in the room. You can see their name, their
status and their avatar. You can also see if they have audio or video enabled. By pressing on the three dots, additional
options are available:</p>
<figure style="max-width: 250px"><a href="/images/rooms/rooms-ui-overview-participant-options.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-participant-options.jpg"
         alt="Participant List" width="250"/></a><figcaption>
            <p>Participant Options</p>
        </figcaption>
</figure>
<dl>
<dt>Volume</dt>
<dd>You can adjust the volume of the participant. This is useful if the participant is too loud or too quiet.</dd>
<dt>Poke</dt>
<dd>Sometimes you want to get the attention of a participant. You can poke them. This will send a notification to the
participant.</dd>
<dt>Add to favorites</dt>
<dd>If you have a lot of participants in the room, you can add them to your favorites. Favorite users will be displayed at
the top of the participant list and will always be visible in the video area.</dd>
<dt>Mute Microphone</dt>
<dd>You can mute the microphone of the participant. This is useful if the participant has a lot of background noise or if
they are not aware that their microphone is active. You need to have the necessary permissions to mute other
participants. See <a href="/rooms/manual/permissions/">permissions</a> for more details.</dd>
</dl>
<h2 id="user-info">User Info</h2>
<p>In the top right corner you see your user info. This includes your name and your avatar. Pressing on the three dots will
open a menu where you can change your name, your avatar, your status and toggle light/dark mode.</p>
<figure style="max-width: 300px"><a href="/images/rooms/rooms-ui-overview-user-info.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-user-info.jpg"
         alt="User Info" width="300"/></a><figcaption>
            <p>User Info</p>
        </figcaption>
</figure>
<dl>
<dt>Display Name</dt>
<dd>You can change your display name. This is the name that is displayed to other participants in the room.</dd>
<dt>Custom Status</dt>
<dd>You can set a custom status. This is useful if you want to show others what you are currently doing or if you want to
give them a hint on what you are interested in.</dd>
<dt>Use Dark Mode</dt>
<dd>You can toggle between light and dark mode. This is useful if you are in a dark environment and want to reduce the
brightness of the screen.</dd>
</dl>
<p>The icon at the outermost right corner of the user info is the &ldquo;Leave Room&rdquo; Button. Pressing this button will leave the
room and close the connection to the server. You can rejoin using the same URL or by entering the room name anytime.</p>
<h2 id="video-area">Video Area</h2>
<p>In the video module, you see the video of the participants or cards of participants with their initials. The bottom
of each video cards has two buttons:</p>
<figure style="max-width: 400px"><a href="/images/rooms/rooms-ui-overview-video-card.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-video-card.jpg"
         alt="Video Area" width="400"/></a><figcaption>
            <p>Video Area</p>
        </figcaption>
</figure>
<ul>
<li><strong>Fullscreen</strong>: This button allows you to switch the video to fullscreen mode. This is useful if you want to focus on
the video of a specific participant (i.e. especially if they share the screen).</li>
<li><strong>Options</strong>: This button opens a menu with additional options. You can mute the participant, poke them, add them to
your favorites or adjust the volume.</li>
</ul>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Video Only    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note, that the fullscreen button is only available if the participant has video enabled. It does not make sense
to switch to fullscreen if the participant has no video enabled.</p>
</div>
</div>

<p>Clicking on the options button will open a menu with the following options:</p>
<figure style="max-width: 400px"><a href="/images/rooms/rooms-ui-overview-video-card-options.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-video-card-options.jpg"
         alt="Video Area" width="400"/></a><figcaption>
            <p>Video Area</p>
        </figcaption>
</figure>
<p>These options are the same as in the right side participant list:</p>
<dl>
<dt>Volume</dt>
<dd>You can adjust the volume of the participant. This is useful if the participant is too loud or too quiet.</dd>
<dt>Poke</dt>
<dd>Sometimes you want to get the attention of a participant. You can poke them. This will send a notification to the
participant.</dd>
<dt>Add to favorites</dt>
<dd>If you have a lot of participants in the room, you can add them to your favorites. Favorite users will be displayed at
the top of the participant list and will always be visible in the video area.</dd>
<dt>Mute Microphone</dt>
<dd>You can mute the microphone of the participant. This is useful if the participant has a lot of background noise or if
they are not aware that their microphone is active. You need to have the necessary permissions to mute other
participants. See <a href="/rooms/manual/permissions/">permissions</a> for more details.</dd>
</dl>
<p>Clicking the options button again will close the options dialog for this participant.</p>
<h2 id="next-steps">Next Steps</h2>
<p>You should now be familiar with the user interface of ODIN Rooms. Learn more about additional features in our manual:</p>
<ul>
<li><a href="/rooms/manual/permissions/">Permissions</a>: Learn how to manage permissions in your room.</li>
<li><a href="/rooms/manual/whiteboard/">Whiteboard</a>: Discover how to use the whiteboard for brainstorming and
presentations.</li>
<li><a href="/rooms/manual/text-chat/">Text-Chat</a>: Explore the text-chat module and learn how to communicate with
other</li>
</ul>
`}),e.add({id:3553,href:"https://www.4players.io/rooms/getting-started/concepts/",title:"Basic Concepts",section:"Rooms Documentation",description:"Rooms is different from other video conferencing platforms. Learn what makes it unique and how to use it.",content:`<p>Teams, Zoom and many other video conferencing solutions are centralized and require you to create an account, download
software, and trust a third party with your data. ODIN Rooms is different. It is a fully decentralized, browser-based
video conferencing solution that offers robust end-to-end encryption, no need for accounts or downloads, and full
control over your data.</p>
<h2 id="how-odin-rooms-works">How ODIN Rooms Works</h2>
<p>During the pandemic, many people used video conferencing solutions to stay connected with friends, family, and
colleagues.
However, the basic model that has evolved over the years is that you setup a meeting for a specific time and invite
people to join. With external partners and customers this is the best to do it. But with your team, your friends and
family the concept is outdated and does not make much sense.</p>
<p>Many people got exhausted by the constant stream of meetings and the need to be available at a specific time. Even if
you
just wanted to clarify a small question, you had to setup a meeting, invite people and wait for them to join. This is
where ODIN Rooms comes in.</p>
<p>The basic ODIN Rooms concept is that you have a room that is always open. You can join the room whenever you want and
you can invite people to join you. You can use the room for a quick chat, a brainstorming session, a meeting or just to
hang out. You can use the room for a few minutes or for a few hours. You can use the room for a one-on-one conversation
or for a group meeting. You can use the room for a video call, a voice call or just for chatting. You can use the room
for a presentation, a whiteboard session or just to share your screen. You can use the room for a game, a quiz or just
to have fun.</p>
<p>This concept is more flexible and more natural than the traditional video conferencing model. It is more like a virtual
office with rooms for different purposes. You can use the rooms for work, for learning, for socializing or just for fun.
If you want to reach out to a specific team, just join their room. If you want to have a private conversation, just
create a new room. If you want to have a meeting with a customer, just invite them to your room. If you want to have a
party, just open a room and invite your friends.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Technical Details    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Rooms is powered by ODIN Voice, our real-time voice chat SDK renowned for its low latency and crystal-clear audio, and
powered by ODIN Fleet, our server hosting solution that provides global scalability and high availability. If you
are interested in learning more about ODIN Voice and ODIN Fleet, check out the <a href="/odin/">ODIN Voice</a>
and <a href="/fleet/">ODIN Fleet</a> documentation.</p>
</div>
</div>

<h2 id="how-to-use-odin-rooms">How to Use ODIN Rooms</h2>
<p>You just enter the name of a room, this can be something like <code>coffee-break</code>, <code>we-hate-to-eat-alone</code>, <code>lets-play-a-game</code>
or <code>devs</code>, <code>marketing</code> or whatever comes into your mind. If you want to have a private conversation, just use
a name that is hard to guess, like <code>FE12-GH23-AB45</code>.</p>
<p>If the room does not exist, it will be created and you will be the first person in the room. If the room already exists,
you will join the room and see the other people that are in the room. You can invite people to join you by sharing the
room name with them. You can also create a link to the room and share this link with others. The link is basically just
this format: <code>https://{subdomain}.rooms.chat/{room-name}</code>, so if your instance is <code>talk.rooms.chat</code> and your room is
<code>coffee-break</code>, the link would be <code>https://talk.rooms.chat/coffee-break</code>. That&rsquo;s all you need to give to others to join
your room. They just open the link in their Browser, optionally enter their name and join the room.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  No Account Required    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You don&rsquo;t need to create an account to use ODIN Rooms. You don&rsquo;t need to download any software. You don&rsquo;t need to trust
a third party with your data. You just open a link in your Browser and you are in the room. You can use ODIN Rooms
completely anonymously. You can use ODIN Rooms without giving away any personal information.</p>
</div>
</div>

<h2 id="next-steps">Next Steps</h2>
<p>Now that we have covered the basic concepts of ODIN Rooms, you are ready to start using the platform. Follow the next
guide to learn how to <a href="/rooms/getting-started/first-call/">do your first call</a> with ODIN Rooms.</p>
`}),e.add({id:3554,href:"https://www.4players.io/fleet/manual/images/",title:"Creating Images",section:"ODIN Fleet Documentation",description:"Learn more about creating and managing images in ODIN Fleet.",content:`<p>Docker images are ideal for running applications in containers. They are a lightweight, standalone, executable package that includes everything needed to run a piece of software, including the code, a runtime, libraries, environment variables, and config files.</p>
<p>When you want to run a server in our system, you need to provide a Docker image that contains the server software and all the necessary files. With server configs you configure the image for your server. You can also use environment variables and config files to pass configuration data to the server.</p>
<h2 id="creating-an-image">Creating an Image</h2>
<p><img src="/images/fleet/getting-started-create-image-step-1.png" alt="4Players Fleet"></p>
<p>When you create an image, you need to go through our image creating wizard where you need to provide the following information:</p>
<ul>
<li><strong>Name</strong>: The name of the image. This is the name that you will use to reference the image in your server configuration.</li>
<li><strong>Version</strong>: The version of the image. This can any string and is only used to differentiate between different versions of the same image within our Dashboard.</li>
<li><strong>OS</strong>: The operating system that the image is based on. This can be <code>Linux</code> or <code>Windows</code>.</li>
</ul>
<p>In the next step you need to decide what image type you want to use. These options are available:</p>
<ul>
<li><strong>Image from Registry</strong>: Use an image from a public or private registry. You need to provide the image name and the registry.</li>
<li><strong>Steamworks</strong>: Let us create an image from files stored in your Steamworks account.</li>
</ul>
<p>Depending on the image type you choose, you need to provide different information.</p>
<h3 id="image-from-registry">Image from Registry</h3>
<p>When you already have a docker image available in a registry, you can use this option to create an image. You need to provide the following information:</p>
<ul>
<li><strong>Image</strong>: The path and name of the image within the registry. For example on the public Docker Hub registry, the image <code>mygame/myserver</code> would be <code>mygame/myserver:latest</code>.</li>
<li><strong>Registry</strong>: The registry where the image is located. This can be Docker Hub, GitHub Container Registry, Gitlab Container Registry, or a custom registry.</li>
</ul>
<p>The default option for <code>Registry</code> is public <code>Docker Hub</code>. This is not always what you want, especially if your server is not public (yet). You can register your own private registry directly in this editor by clicking on the (+) icon
or you can go into the <code>Settings</code> and add a new registry there.</p>
<p><strong>Please note</strong>: If your specific registry provider is not yet available please <a href="https://www.4players.io/odin/support/">reach out</a> to us and we will add it for you.</p>
<h3 id="steamworks">Steamworks</h3>
<p>When you have your server files stored in your Steamworks account, you can use this option to create an image. You need to provide the following information:</p>
<ul>
<li><strong>Steam App ID</strong>: The Steam App ID of your game.</li>
</ul>
<p>If you entered a correct Steam App ID the following fields will be available:</p>
<ul>
<li><strong>Branch</strong>: The Steam branch that you want to use. This can be <code>public</code> or a custom branch.</li>
<li><strong>Executable Command</strong>: We need to know the command to start your server. This can be a simple command like <code>/gameserver/server.exe</code> or a more complex command with parameters like <code>/gameserver/server.exe --port 7777 --debug=false --maps=/gameserver/maps</code>. If you have created Launchers within Steam you can choose that from a list.</li>
</ul>
<p>You need to provide your Steamworks credentials to download the files from Steamworks. You need to provide the following information:</p>
<ul>
<li><strong>Steamworks Username</strong>: The username of your Steamworks account.</li>
<li><strong>Steamworks Password</strong>: The password of your Steamworks account.</li>
</ul>
<p><strong>Please note</strong>: Steam guard needs to be disabled for this account. If you have Steam Guard enabled, you need to disable it for the time of the image creation. We are working on a solution to support Steam Guard.</p>
<p>Additional options can be provided:</p>
<ul>
<li><strong>Headful</strong>: If you want to run the server in headful mode, i.e. a GUI window will be opened. For production servers, this should be disabled.</li>
<li><strong>Request License</strong>: If you want to request a license for the image.</li>
</ul>
<h4 id="file-paths">File Paths</h4>
<p>What we do under the hood is that we download the files from Steamworks and create a Docker image from them. All files from Steamworks are stored in the <code>/gameserver</code> path within the container, so you need to make sure that if you refer to any files that you prefix the <code>/gameserver</code> path.</p>
<p>More background information on how Steamworks works under the hood can be found here: <a href="../steamworks">Steamworks image creation explained</a>.</p>
`}),e.add({id:3555,href:"https://www.4players.io/rooms/getting-started/",title:"Getting Started",section:"Rooms Documentation",description:"Explore our comprehensive Rooms guides for getting started and advanced usage.",content:`<p>Welcome to ODIN Rooms! Follow these steps to set up your video conferencing platform and start collaborating securely.</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">1. Sign Up for ODIN Rooms</h4>
<div class="teaser-content">
 <p>Follow this guide to sign up your Rooms account and setting up your Rooms instance.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/getting-started/sign-up">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">2. Basic Concepts</h4>
<div class="teaser-content">
 <p>Rooms is different from other video conferencing platforms. Learn what makes it unique and how to use it.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/getting-started/concepts">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">3. Your first Call</h4>
<div class="teaser-content">
 <p>Create a room and send an invite link to initiate your first call.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/getting-started/first-call">Let&#39;s start</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3556,href:"https://www.4players.io/fleet/guides/",title:"Guides",section:"ODIN Fleet Documentation",description:"Explore our comprehensive ODIN Fleet guides for getting started and advanced usage.",content:`<p>With Project ODIN Fleet, 4Players provides a complete, out-of-the-box solution that has been designed and built from the
ground up for gamers, developers and publishers so they don&rsquo;t need to spend valuable resources designing a comms solution
or gameserver hosting on their own.</p>
<p>Check out these guides to get started with ODIN Fleet:</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/fleet/guides/getting-started">
<img class="teaser-image" src="/images/fleet/odin_getting_started_fleet_header.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN Fleet</h4>
<div class="teaser-content">
 <p>Follow this guide to deploy a Minecraft Server via ODIN Fleet to learn more about the basic concepts and how to deploy
your own game servers.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/fleet/guides/getting-started">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/fleet/guides/cli">
<img class="teaser-image" src="/images/fleet/fleet_cli_guide_header.jpg">
</a>
<h4 class="teaser-title">ODIN Fleet CLI</h4>
<div class="teaser-content">
 <p>Follow this guide to install our CLI tool to interact with ODIN Fleet from your command line.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/fleet/guides/cli">Install CLI</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3557,href:"https://www.4players.io/odin/guides/",title:"Guides",section:"ODIN Documentation",description:"Explore our comprehensive ODIN guides for seamless game engine integration and advanced tutorials. Learn to integrate ODIN into Unity, Unreal Engine, or native client libraries with our step-by-step instructions. Dive into advanced topics like understanding access keys to ensure a smooth transition to production for your game.",content:`<p>With Project ODIN, 4Players provides a complete, out-of-the-box solution that has been designed and built from the
ground up for gamers, developers and publishers so they don&rsquo;t need to spend valuable resources designing a comms solution
on their own.</p>
<p>We offer deep game engine integration. It works with any multiplayer framework and also works for single player
games (i.e. users can play for themselves but chat with other players).</p>
<h2 id="video-tutorials">Video tutorials</h2>
<p>Would you rather watch a video than stepping though our written guides?
Watch this <a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Unreal video tutorial series</a>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/7ZtC0WvX0c8?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>
</p>
<p>or watch this <a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V">Unity video tutorial series</a>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/S3DFxkWut9c?list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>
</p>
<p><em>Want more?</em> The next chapters will come soon!</p>
<h2 id="choose-your-platform">Choose your platform</h2>
<p>In the next steps you&rsquo;ll integrate ODIN into an empty project to learn more about the integration and general concepts.
Please choose your plattform to continue:</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/getting-started-unity">
<img class="teaser-image" src="/images/unity_sdk.jpg">
</a>
<h4 class="teaser-title">Unity</h4>
<div class="teaser-content">
 <p>We&rsquo;ll create a simple multiplayer game with 3D voice</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/getting-started-unity">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unreal">
<img class="teaser-image" src="/images/unreal_sdk.jpg">
</a>
<h4 class="teaser-title">Unreal Engine</h4>
<div class="teaser-content">
 <p>We integrate ODIN into the FPS demo provided by Epic</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unreal">Learn more</a>
</div>
</div>
</div>
</div>
<p>We also offer native client libraries that even work on the command line. We don&rsquo;t have extensive documentation for
that yet, but for those people still reading, a <a href="/odin/sdk/c/">header file</a> should be enough.</p>
<h2 id="advanced-guides">Advanced Guides</h2>
<ul>
<li>Understanding Access Keys is an important part later when moving your game to production. <a href="/odin/introduction/access-keys/">Read this guide to understand
how we use access keys and how they work in detail</a>.</li>
</ul>
`}),e.add({id:3558,href:"https://www.4players.io/fleet/manual/",title:"Manual",section:"ODIN Fleet Documentation",description:"Explore the ODIN Fleet manual to understand the concepts and features of the platform.",content:`<p>Welcome to the ODIN Fleet manual! Here you will find detailed information about the concepts and features of the ODIN
Fleet platform. Whether you are a game developer, publisher, or server operator, this manual will help you understand
how to use ODIN Fleet to deploy and manage your game servers.</p>
<h2 id="basic-flow">Basic Flow</h2>
<p>The basic flow of using ODIN Fleet involves the following steps:</p>

<table class="features">
    <tr>
    <td class="index"><span class="index">1</span></td>
    <td class="name">Create Image</td>
    <td><p>The first thing you need to do is to provide your server to the ODIN Fleet platform. This is done by creating a Docker
image that contains your server software and all the necessary files. You can create an image from a public or private
registry or use Steamworks to create an image from files stored in your Steamworks account and we will create the image
automatically for you.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">2</span></td>
    <td class="name">Create Configuration</td>
    <td><p>Once you have created an image, you need to create a server configuration that defines how your server should run. This
includes setting up ports, environment variables, and persistent folders, among other things. You can create multiple
server configurations for the same image to run different types of servers. This is useful if you want to run multiple
game modes or different versions of your game.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">3</span></td>
    <td class="name">Create Deployment</td>
    <td><p>After creating a server configuration, you need to create a deployment that specifies which server configuration to use
and how many instances of the server to run. You can also set up auto-scaling rules to automatically scale the number of
server instances based on the load.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">4</span></td>
    <td class="name">Monitor &amp; Manage</td>
    <td><p>Once your deployment is up and running, you can monitor and manage your servers using the ODIN Fleet dashboard. You can
view server logs, metrics, and events, as well as perform actions like restarting, stopping, or scaling your servers.</p>
</td>
</tr>

</table>

<p>The manual is divided into the following sections:</p>
<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/">Adding Registries</a></li>
</span>
<ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/aws/">Adding an AWS Elastic Container Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/azure/">Adding an Azure Container Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/docker-hub/">Adding a Docker Hub Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/github/">Adding a GitHub Container Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/gitlab/">Adding a GitLab Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/google-cloud/">Adding a Google Cloud Container Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/self-hosted/">Adding a Self-Hosted Docker Registry</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/fleet/manual/registries/custom/">Adding a Custom Docker Registry</a></li>
</span>
</ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/images/">Creating Images</a></li>
</span>
<ul>
</ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/configs/">Create Configs</a></li>
</span>
<ul>
</ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/deployments/">Setup Deployments</a></li>
</span>
<ul>
</ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/servers/">Managing Servers</a></li>
</span>
<ul>
</ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/ports/">Port Configurations</a></li>
</span>
<ul>
</ul>
<span><li>
		<a href="https://www.4players.io/fleet/manual/steamworks/">Steamworks Integration</a></li>
</span>
<ul>
</ul>
</ul>
`}),e.add({id:3559,href:"https://www.4players.io/rooms/manual/text-chat/",title:"Text Chat",section:"Rooms Documentation",description:"Learn how to use the text chat in ODIN Rooms.",content:`<p>Rooms features an easy to use text-chat that also supports markdown. This allows you to communicate with your team
members in a more structured way. You can also send images and use emojis in the chat.</p>
<p>Once you have joined a room, make sure that the text-chat is visible (per default that&rsquo;s the case). If it is not
visible, make sure to disable the maximum sidebar (use <a href="/rooms/manual/user-interface/#area-controls">Area Controls</a> to reveal the chat).</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-ui-overview-text-chat.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-text-chat.jpg"
         alt="Text Chat in ODIN Rooms" width="800"/></a><figcaption>
            <p>Text Chat in ODIN Rooms</p>
        </figcaption>
</figure>
<p>By clicking on the <a href="/rooms/manual/user-interface/#switching-the-area">Switch Toggle</a> you can toggle
between the sidebar text-chat and the text-chat in the main area.</p>
<p>This looks like this:</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-ui-overview-text-chat-main.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-text-chat-main.jpg"
         alt="Text Chat in ODIN Rooms" width="800"/></a><figcaption>
            <p>Text Chat in main area</p>
        </figcaption>
</figure>
<h2 id="sending-a-message">Sending a message</h2>
<p>To send a message, just enter your message into the text field and press the Enter key or click on the send button. The
text-message may also contain emojis and markdown. You can use the following markdown elements:</p>
<ul>
<li><strong>Bold</strong>: <code>**bold**</code> or <code>__bold__</code></li>
<li><em>Italic</em>: <code>*italic*</code> or <code>_italic_</code></li>
<li>Strikethrough: <code>~~strikethrough~~</code></li>
<li><code>Code</code>: <code>\`code\`</code></li>
<li><code>Inline Code</code>: <code>\`inline code\`</code></li>
</ul>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Multiline Messages    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>To send a multiline message, press <code>Shift + Enter</code> to create a new line.</p>
</div>
</div>

<h2 id="sending-an-image">Sending an image</h2>
<p>Click on the image icon in the text field to upload an image. The image will hover above the send message text entry
field
and you can add additional text to the message if needed. Click on the send button or press Enter to send the message.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Image Upload    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The image upload is limited to 10MB per image.</p>
</div>
</div>

<h2 id="persistant-chat">Persistant Chat</h2>
<p>Messages are sent in real-time to all current participants but are not stored on the server! This means that if you
reload the page, you will not see the chat history. This is a security feature to ensure that no sensitive information
is stored on the server and to comply with GDPR and other data protection regulations.</p>
<p>There are ways to persist the chat history, but this is not enabled by default. If you want to have a chat history, you
need to setup a chat history server. This is a separate service that stores the chat history and can be used to display
the chat history in the chat. If you are interested in this feature, please reach out to our <a href="/company/contact_us/">sales team</a>.</p>
<h2 id="next-steps">Next Steps</h2>
<p>Learn more about the integrated whiteboard in ODIN Rooms in the <a href="/rooms/manual/whiteboard/">Whiteboard Guide</a>.</p>
`}),e.add({id:3560,href:"https://www.4players.io/odin/guides/unreal/android-permissions/",title:"Android Permissions",section:"ODIN Documentation",description:"Learn how to set up Android permissions required for the ODIN plugin in Unreal Engine. Follow this step-by-step guide to configure microphone permissions on Android and Meta Quest VR platforms for seamless voice chat.",content:`<p>In this guide we&rsquo;ll show you how to set up Android permissions required to fully use the Odin Plugin in Unreal. These settings will also work for your Meta Quest VR projects.</p>
<p>By David Liebemann at <a href="https://scico.dev">SciCode Studio</a>.</p>
<h2 id="check-and-request-permissions">Check and request permissions</h2>
<p>We&rsquo;ll make sure to check our permissions before we actually initialize Odin. The implementation gets called right after <code>BeginPlay</code> in the Custom Event <code>ConnectToRoom</code> that only replicates on the owning client. This ensures that we don&rsquo;t accidentally request permissions or try to initialize Odin on our server.</p>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/unreal/android-permissions/ConnectToRoom.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/android-permissions/ConnectToRoom.webp"
         alt="Custom event that only replicates on the owning client." width="50%"/></a><figcaption>
            <p>Custom event that only replicates on the owning client.</p>
        </figcaption>
</figure>
</center>
<p>The steps for checking and requesting permissions now are:</p>
<ol>
<li>We&rsquo;ll use <code>Get Platform Name</code> to check our current platform - if we&rsquo;re not on the <code>Android</code> platform, we can instantly go to <code>Init Odin</code>, which contains our logic for joining an Odin room. Otherwise we&rsquo;ll continue with step 2.</li>
</ol>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The platform name will also be <code>Android</code> on the Meta Quest.</p>
</div>
</div>

<ol start="2">
<li>
<p>A call to <code>Check Android Permission</code> with the input <code>android.permission.RECORD_AUDIO</code> will tell us if the user already supplied the microphone permission. If yes, we can jump to <code>Init Odin</code> again, otherwise we&rsquo;ll need to request the permission.</p>
</li>
<li>
<p>Before requesting, we&rsquo;ll need to add a <code>Delay</code> node with an arbitrary duration. This is due to an Unreal issue, that crashes the application if permissions are requested too early. After the delay, we&rsquo;ll call <code>Request Android Permission</code> with an array that has an <code>android.permission.RECORD_AUDIO</code> entry. The function returns a delegate that allows us to connect to a callback event once the permission was granted or declined.</p>
</li>
<li>
<p>In the callback, we&rsquo;ll simply iterate over the result arrays and check for our <code>android.permission.RECORD_AUDIO</code> permission. If the permission was granted successfully, we&rsquo;ll continue to <code>Init Odin</code>.</p>
</li>
</ol>
<p>The complete blueprint should now look something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/android-permissions/CheckAndRequestWithCallback.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/android-permissions/CheckAndRequestWithCallback.webp"
         alt="Complete permissions blueprint." width="100%"/></a><figcaption>
            <p>Complete permissions blueprint.</p>
        </figcaption>
</figure>
<h2 id="add-permissions-to-manifest">Add permissions to manifest</h2>
<p>In addition to setting up the request in blueprint, we&rsquo;ll also need to add the record audio permission in the Android Manifest file. We&rsquo;ll do this by opening up the project settings, navigating to <code>Android &gt; Advanced APK Packaging</code> and adding the value <code>android.permission.RECORD_AUDIO</code> to the <code>Extra Permissions</code> array.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/android-permissions/AndroidManifest.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/android-permissions/AndroidManifest.webp"
         alt="Android permissions in the project settings." width="100%"/></a><figcaption>
            <p>Android permissions in the project settings.</p>
        </figcaption>
</figure>
<h2 id="whats-next">What&rsquo;s next?</h2>
<p>We&rsquo;ve shown you the minimal version for checking and requesting microphone permissions for the Android and Meta Quest platform in Unreal.</p>
<p>If a player refuses to give the microphone permission, we currently simply refuse to initialize Odin. In a more sophisticated app we could still allow the player to listen in to the Voice Chat, while not being able to transmit. If the player changes their mind, we could provide a UI element, which reruns the request permissions logic and initializes microphone capturing, if the permission is then granted.</p>
<p>You could take a look at our Sample Project, which includes a minimal multiplayer setup and a detailed demonstration of the Android Permission setup. For an overview of what these samples offer, visit our <a href="/odin/examples/unreal-minimal-samples/">introduction to the Odin Minimal Samples projects</a>. Ready to dive in? Access the full source code on our GitHub page:</p>
<center>
<p><a href='https://github.com/4Players/odin-unreal-minimal-samples' target='' class="btn btn-primary">Odin Minimal Samples on Github</a></p>
</center>
<p>For even more information on Unreal with Odin Voice Chat, check out our Discord and take a look at the following guides we&rsquo;ve prepared for you:</p>
<center>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
</center>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN</h4>
<div class="teaser-content">
 <p>Follow this guide to learn how to install and setup ODIN in your Unreal Project using Blueprint.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal/blueprint-reference">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal_bp_reference.jpg">
</a>
<h4 class="teaser-title">Blueprint Reference</h4>
<div class="teaser-content">
 <p>Check out our extensive Blueprint reference to learn more about the nodes our SDK provides and how to connect them
into your game.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal/blueprint-reference">Let&#39;s start</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3561,href:"https://www.4players.io/fleet/manual/configs/",title:"Create Configs",section:"ODIN Fleet Documentation",description:"Learn more about creating and managing server configs in ODIN Fleet.",content:`<p>A server configuration configures your image. Many Docker images are flexible and can be configured with environment
variables, externally mounted configuration files, or both. This guide will show you how to create a server
configuration for your game or application.</p>
<p>You can have many configuration, for example for different game modes, maps, or other settings like debug and
production.</p>
<h2 id="basic-configuration">Basic Configuration</h2>
<p><img src="/images/fleet/getting-started-create-config-step-1.png" alt="Create Config in ODIN Fleet"></p>
<p>In the first have of the editor you&rsquo;ll find the basic configuration settings:</p>
<ul>
<li><strong>Name</strong>: The name of the configuration. This is used to identify the configuration in the list of configurations.</li>
<li><strong>Image</strong>: The Docker image to use for the server. Select the image that will be used to start the server and that
you registered before in the <strong>Images</strong> section. Learn more about <a href="../images">images</a>.</li>
<li><strong>Restart Policy</strong>: The restart policy for the server. This policy determines what happens when the server stops.
You can choose between <code>Never</code>, <code>On Failure</code>, <code>Always</code>. Learn more about <a href="#restart-policy">restart policies</a>.</li>
<li><strong>Command</strong>: Using this setting you can override the default command (<code>CMD</code>) of the image. This is useful if you want
to
start the server with different parameters or if you want to use a different entry point. More information about
<a href="#commands">command</a>.</li>
<li><strong>Entrypoint</strong>: Using this setting you can override the default entrypoint (<code>ENTRYPOINT</code>) of the image. This is useful
if you want to start the server with different parameters or if you want to use a different entry point. More
information about <a href="#entrypoint">entrypoint</a>.</li>
</ul>
<h2 id="advanced-configuration">Advanced Configuration</h2>
<p>This section provides a lot of flexibility to configure your server. You can use environment variables, mount volumes,
and configure the network settings.</p>
<h3 id="port-settings">Port Settings</h3>
<p><img src="/images/fleet/getting-started-create-config-step-2.png" alt="Create Config in ODIN Fleet"></p>
<p>This is a very important setting. Most servers need to expose ports to the outside world so that clients can connect
to the server. In this section you can configure the ports that should be exposed by the server.</p>
<p>Click on the <strong>Add Port</strong> button to add a new port that your server exposes and that should be connected to the hosts
network from our backend when the server is started. You can configure the following settings for each port:</p>
<ul>
<li><strong>Name</strong>: The name of the port. This is used to identify the port in the list of ports</li>
<li><strong>Port</strong>: This is the port number that the server exposes within the container, i.e. if you run a web server in the
container and it listens on port 3000, you would enter <code>3000</code> here.</li>
<li><strong>Protocol</strong>: The protocol of the port. You can choose between <code>TCP</code> and <code>UDP</code> and both.</li>
</ul>
<p><strong>Note</strong>: It&rsquo;s important to know is that the port number that you enter here is not necessarily the port number that the
server will be accessible from the outside. This is the port number that the server listens on within the container. Our
backend finds a free port on the host and maps the container port to the host port. If you need to know the port number
that the server is accessible from the outside you can use a Dynamic Environment Variable in the <strong>Environment
Variables</strong> section.</p>
<p>If you are not familiar with ports and the basic concept of exposing ports and dyn, you can learn more about
<a href="../ports">ports here</a>.</p>
<h3 id="resources">Resources</h3>
<p><img src="/images/fleet/getting-started-create-config-step-3.png" alt="Create Config in ODIN Fleet"></p>
<p>In this section you can configure the resources that the server needs to run and can use as a limit. The settings
available are subject to your subscription plan. You can configure the following settings:</p>
<ul>
<li><strong>CPU</strong>: The amount of CPU cores that the server at least requires to run and that it can use at most.</li>
<li><strong>Memory</strong>: Set the memory reservation and limit for the server. A limit is useful to prevent the server from
using too much memory and to prevent the server from being killed by the system.</li>
</ul>
<h3 id="environment-variables">Environment Variables</h3>
<p><img src="/images/fleet/getting-started-create-config-step-4.png" alt="Create Config in ODIN Fleet"></p>
<p>Environment variables are a powerful way to configure your server. We support three types of environment variables:</p>
<ul>
<li><strong>Static</strong>: These are static environment variables that are always set with the value you set in this configuration<br>
when the server is started. You can use these to set configuration values that are always the same, for example the
server&rsquo;s name, the game mode, or the map.</li>
<li><strong>System</strong>: These are environment variables that are set by the system. The actual value is dynamically set by the
system when the server is started.</li>
<li><strong>Port</strong>: These are environment variables that are set by the system at runtime and contain the actual port number
that
the server is accessible from the outside.</li>
</ul>
<h4 id="static-environment-variables">Static Environment Variables</h4>
<p>Click on the <strong>Add Variable</strong> button to add a new static environment variable. You set the name/key of the variable and
the value.</p>
<h4 id="system-environment-variables">System Environment Variables</h4>
<p>Click on the <strong>Add Dynamic Variable</strong> button to add a new dynamic environment variable. Give it a name/key and select
<code>System</code> as the type. Under <code>Value</code> you can select from a list of system environment variables that are available, for
example the actual ip address of the host.</p>
<p><strong>Available System Environment Variables</strong>:</p>
<ul>
<li><strong><code>IP-Address</code></strong>: The actual IP address of the host that the server is running on.</li>
<li><strong><code>Instance-ID</code></strong>: The index as a number of the instance of the server. This is useful if you run multiple instances
of the same server configuration and allows you to differentiate between the instances. I.e. in your Entrypoint script
you could adjust the server name based on the instance id.</li>
</ul>
<h4 id="port-environment-variables">Port Environment Variables</h4>
<p>Click on the <strong>Add Dynamic Variable</strong> button to add a new dynamic environment variable. Give it a name/key and select
<code>Port Mapping</code> as the type. Under <code>Value</code> you can select from a list of ports that are available and that you have
configured previously in the <strong>Port Settings</strong> section.</p>
<p>What happens is that when the server starts our backend iterates over all the ports that you have configured, finds a
free port on the host, and maps the container port to the host port. Then this port is set as an environment variable
with the name that you have configured here.</p>
<h3 id="config-files">Config Files</h3>
<p>In this section you can mount configuration files into the server. This is another way to configure your server along
with environment variables.</p>
<p>Click on the <strong>Add Config File</strong> button to add a new configuration file. You can configure the following settings for
each configuration file:</p>
<ul>
<li><strong>Name</strong>: The name of the configuration file. This is used to identify the configuration file in the list of
configuration files.</li>
<li><strong>Path in Container</strong>: The file path and name of the configuration file within the container. This is the path that
the server expects the configuration file to be at. For example, if you want to mount a configuration file into the
container at <code>/etc/mygame/config.ini</code> you would enter <code>/etc/mygame/config.ini</code> here.</li>
<li><strong>Content</strong>: The content of the configuration file. You can enter the content of the configuration file here.</li>
</ul>
<h3 id="persistent-folders">Persistent Folders</h3>
<p><img src="/images/fleet/getting-started-create-config-step-5.png" alt="Create Config in ODIN Fleet"></p>
<p>Files written by the server are lost when the server stops. If you want to persist files between server restarts you
can setup folders that will be backed up and restored when the server restarts. Examples for this are databases or log
files.</p>
<p>Click on the <strong>Add Folder</strong> button to add a new folder that should be persisted. You can configure the following
settings
for each folder:</p>
<ul>
<li><strong>Path in Container</strong>: The path of the folder within the container. This is the path that the server expects the
folder
to be at. For example, if you want to persist the folder <code>/var/log/mygame</code> you would enter <code>/var/log/mygame</code> here.</li>
</ul>
<h2 id="misc-settings">Misc Settings</h2>
<p>In this section you can configure the following settings:</p>
<ul>
<li><strong>Notes</strong>: You can enter notes for the configuration here. This is useful to document the configuration and to give
other users of the configuration an idea of what the configuration is for and how to use it.</li>
</ul>
<h2 id="commands">Commands</h2>
<p>In a Dockerfile, the <code>CMD</code> instruction specifies the default command that should be executed when a container starts.
However, you may want to override this default command for various reasons, such as customizing the behavior of the
container or specifying different start-up parameters. This can be done using the Command setting.</p>
<h3 id="using-the-command-setting">Using the Command Setting</h3>
<p>The Command setting allows you to override the default command (<code>CMD</code>) specified in the Dockerfile when you run the
container. This is useful if you need to run a different command or use different arguments than those specified in the
Dockerfile.</p>
<h4 id="example-usage">Example Usage</h4>
<p>For example, you may have a Docker image designed to run a web server with a default command of <code>gameserver.exe</code>.
However, in some cases, you might want to start the server in a different mode or run a different script altogether. You
can specify this alternative command using the Command setting.</p>
<h3 id="configuring-the-command">Configuring the Command</h3>
<p>To set the Command for your server, follow these steps:</p>
<ol>
<li>
<p><strong>Navigate to the Basic Configuration section</strong>: In the server configuration editor, locate the Command setting in
the Basic Configuration section.</p>
</li>
<li>
<p><strong>Specify the Desired Command</strong>: Enter the command you want to run when the container starts. This command will
override the default <code>CMD</code> specified in the Dockerfile.</p>
</li>
<li>
<p><strong>Save Your Configuration</strong>: After specifying the command, ensure you save your configuration to apply the changes.</p>
</li>
</ol>
<h4 id="example-scenarios">Example Scenarios</h4>
<ul>
<li>
<p><strong>Running in Development Mode</strong>: If you need to start your server in development mode, you might override the default
command with something like <code>gameserver.exe --debug=false</code>.</p>
</li>
<li>
<p><strong>Running a Different Script</strong>: If you need to run a different script for a specific task, you might
specify <code>sh run-server.sh</code> to execute a test script instead of the main application.</p>
</li>
</ul>
<h4 id="notes">Notes</h4>
<ul>
<li>
<p><strong>Combination with Entrypoint</strong>: If your Dockerfile also specifies an <code>ENTRYPOINT</code>, the command you specify here will
be passed as arguments to the <code>ENTRYPOINT</code> command. For example, if the <code>ENTRYPOINT</code> is set to <code>[&quot;gameserver&quot;]</code> and
you
set the command to <code>--debug=false</code>, the container will execute <code>gameserver.exe --debug=false</code>.</p>
</li>
<li>
<p><strong>Flexibility</strong>: Using the Command setting provides flexibility without the need to modify the Dockerfile, allowing
you to adjust the container behavior based on the environment or specific requirements.</p>
</li>
</ul>
<p>By configuring the Command setting appropriately, you can tailor the behavior of your server containers to meet your
specific needs and operational requirements.</p>
<h2 id="entrypoint">Entrypoint</h2>
<p>In a Dockerfile, you use the <code>ENTRYPOINT</code> instruction to specify the command that should be executed when the container
is
started. The <code>ENTRYPOINT</code> instruction can be specified with or without an array. If you specify the <code>ENTRYPOINT</code>
instruction
with an array, the first element of the array is the command and the rest of the elements are the arguments to the
command.</p>
<p>With this setting you can override the <code>ENTRYPOINT</code> instruction when you run the container. This allows you to customize
the behavior of the container without modifying the Dockerfile depending on the environment.</p>
<h3 id="example-usage-1">Example usage</h3>
<p>For example, you could have two shell scripts that do upfront work before running the main command. One script could be
used for development and the other for production. You can then use the <code>ENTRYPOINT</code> instruction to specify which
script to run.</p>
<h2 id="restart-policy">Restart Policy</h2>
<p>The Restart Policy option allows you to define the behavior of your server when it stops or crashes. This setting is
crucial for maintaining high availability and reliability of your services. You can choose from the following policies:</p>
<ul>
<li>
<p><strong>Never</strong>: The server will not restart automatically when it stops or crashes. This policy is useful if you want to
manually manage server restarts or if you are performing debugging and need to control when the server restarts.</p>
</li>
<li>
<p><strong>On Failure</strong>: The server will restart only if it exits with a non-zero exit code, which typically indicates an
error. This policy is useful for ensuring that your server attempts to recover from unexpected crashes while not
continuously restarting if the server is intentionally stopped.</p>
</li>
<li>
<p><strong>Always</strong>: The server will always restart regardless of the exit status. This policy is ideal for production
environments where continuous operation is critical, ensuring that your server attempts to restart even after
intentional stops or failures.</p>
</li>
</ul>
<h3 id="configuring-restart-policy">Configuring Restart Policy</h3>
<p>To set the Restart Policy for your server, follow these steps:</p>
<ol>
<li>
<p><strong>Navigate to the Basic Configuration section</strong>: In the server configuration editor, locate the Restart Policy
setting in the Basic Configuration section.</p>
</li>
<li>
<p><strong>Select the Desired Policy</strong>: Choose between <code>Never</code>, <code>On Failure</code>, or <code>Always</code> based on your needs. Each option
will ensure the server behaves according to the selected policy when it stops.</p>
</li>
<li>
<p><strong>Save Your Configuration</strong>: After selecting the appropriate restart policy, ensure you save your configuration to
apply the changes.</p>
</li>
</ol>
<h3 id="example-scenarios-1">Example Scenarios</h3>
<ul>
<li>
<p><strong>Development Environment</strong>: If you are in a development environment and need to control server restarts manually for
testing purposes, select the <code>Never</code> policy.</p>
</li>
<li>
<p><strong>Production Environment</strong>: For production servers where uptime is critical, the <code>Always</code> policy ensures your server
remains operational by automatically restarting after any stop.</p>
</li>
<li>
<p><strong>Error Recovery</strong>: If your server should only restart after encountering errors and not after a graceful stop, select
the <code>On Failure</code> policy.</p>
</li>
</ul>
<p>Understanding and configuring the Restart Policy appropriately can significantly impact the reliability and management
of your server fleet. Make sure to choose a policy that aligns with your operational requirements and environment.</p>
`}),e.add({id:3562,href:"https://www.4players.io/odin/guides/unity/event-handling/",title:"Event Handling",section:"ODIN Documentation",description:"Learn how to use ODIN events to customize voice implementation in your games or applications. Dive into the basic application flow, explore event handling, and discover best practices for notification management. Get inspired with example implementations and improve your user experience with ODIN's powerful features.",content:`<p>Events in ODIN allow you to quickly customize the implementation of voice in your game or application.</p>
<h2 id="basic-application-flow">Basic application flow</h2>
<p>Have a look at this application flow of a very basic lobby application.</p>

<table class="features">
    <tr>
    <td class="index"><span class="index">1</span></td>
    <td class="name">Join Room</td>
    <td><p>The user navigates to the multiplayer lobby. Here, all players currently playing the game are connected to the same
ODIN room so that they can figure out what to play. The application uses <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
function of the
<span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
instance to join the room. <strong>Please note:</strong> The server automatically creates the room
if it does not exist. There is no need for bookkeeping on your side.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">2</span></td>
    <td class="name">RoomJoin</td>
    <td><p>The <span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
event is triggered. It allows you to handle logic before the user actually joins the
room. <strong>Please note</strong>: All upcoming <code>PeerJoined</code> and <code>MediaAdded</code> events are for users that were already connected
to the room.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">3</span></td>
    <td class="name">PeerJoined</td>
    <td><p><strong>For each user</strong> connected to the same ODIN room you&rsquo;ll receive an <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
event that allows
you to
handle logic once a peer joined the room.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index important">4</span></td>
    <td class="name">MediaAdded</td>
    <td><p><strong>For each user</strong> connected to the same ODIN room which has a microphone stream enabled (some of them might only be
spectators just listening) an <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
event is triggered. <strong>This event needs to be handled by
your application</strong>. In this callback, you basically use the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
member function of
the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
singleton instance to create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
that is attached
to a GameObject in your scene, depending on your use case. Navigate to the event to learn more and to see some
example code.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">5</span></td>
    <td class="name">RoomJoined</td>
    <td><p>The <span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
event is triggered. This event allows you to handle logic after the user joined the room.
All <code>PeerJoined</code> and <code>MediaAdded</code> events that come <strong>before</strong> <code>RoomJoined</code> event are for users that were already
connected to the room. Events <strong>after</strong> <code>RoomJoined</code> event indicated changes to the room after the user connected.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index important">6</span></td>
    <td class="name">MediaRemoved</td>
    <td><p>Whenever a user disconnects from the room or closes their microphone stream, an <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
event is triggered. It is your responsibility to clean up the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
components that were created earlier in the MediaAdded callback function.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">7</span></td>
    <td class="name">PeerLeft</td>
    <td><p>Whenever a user disconnects from a room, this event is triggered. For example, you can show a push notification that a
player has left the room. More info here: <span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
. <strong>Important notice:</strong>. Whenever a peer leaves
a room, the media gets removed as well. So, aligned with this event, for each media of this peer, a <code>MediaRemoved</code>
event will be triggered as well.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">8</span></td>
    <td class="name">Leave Room</td>
    <td><p>You can use the member function <span class="external-reference">LeaveRoom <a href="/odin/sdk/unity/classes/odinhandler/leaveroom/"><i class="fas fa-external-link-alt"></i></a></span>
of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
singleton instance to
leave a room.</p>
<p><strong>Important Notice:</strong> Due to the asynchronous nature of leaving a room operation, the current recommendation is to avoid invoking this function within <code>OnDestroy</code> if the scene is being unloaded. Scene unloading could occur when transitioning between scenes or shutting down an application.</p>
<p>Instead, the best practice is to call the  <span class="external-reference">LeaveRoom <a href="/odin/sdk/unity/classes/odinhandler/leaveroom/"><i class="fas fa-external-link-alt"></i></a></span>
function and subsequently wait for the <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
event to be triggered. Once this event has been triggered, it is then safe to perform further actions, such as calling <code>LoadScene</code> or <code>Application.Quit</code>.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index">9</span></td>
    <td class="name">RoomLeave</td>
    <td><p>The event <span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
is triggered to notify you, that the current user started to leave the room.
You can use it to clean up your scene. You can either do that in this event or the next.</p>
</td>
</tr>
<tr>
    <td class="index"><span class="index important">10</span></td>
    <td class="name">RoomLeft</td>
    <td><p>The event <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
is triggered to notify you, that the current user has left the room. <strong>You
need to listen to this event to do some cleanup work:</strong> You might have some <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
components
in your scene that you have created earlier. Some (or all of them) are linked to the room that the user just left.
Use <span class="external-reference">DestroyPlaybackComponents <a href="/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents/"><i class="fas fa-external-link-alt"></i></a></span>
member function of the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
singleton
instance to remove all <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
elements linked to the left room.</p>
</td>
</tr>

</table>

<h2 id="handling-notifications-to-users">Handling Notifications to users</h2>
<p>Many applications notify users that other users have left or joined the room. If you show these notifications
whenever a <code>PeerJoined</code> event is incoming, you&rsquo;ll show a notification for every user that is already connected to
the user. If you just want to notify users of changes after they have connected the room you have two options:</p>
<ul>
<li>The property <span class="external-reference">Self <a href="/odin/sdk/unity/classes/room/self/"><i class="fas fa-external-link-alt"></i></a></span>
 of the <span class="external-reference">Room <a href="/odin/sdk/unity/classes/room/"><i class="fas fa-external-link-alt"></i></a></span>
 is set in the <code>RoomJoined</code> event. If this property
is not <code>null</code> then you can be sure, that the event indicates a change after the user connected</li>
<li>You can set a local <code>Boolean</code> property in your class that is <code>false</code> per default and is set to <code>true</code> in the
<code>RoomJoined</code>
 event. In your <code>PeerJoined</code>
 event you can check if this property is
true or not. Only show notifications if this property is set to <code>true</code></li>
</ul>
<h2 id="example-implementation">Example Implementation</h2>
<p>We have created <a href="/odin/examples/showcase/">a simple showcase demo in Unity</a>. The idea is, that you need to find other players in a foggy
environment just by listening to the direction their voice is coming from. We leverage Unitys built-in 3D positional audio by attaching the Voice playback to
player game objects so that their voice represents their location in 3D space - they are louder if close, and you
might not hear them if they are far away. If they don&rsquo;t find each other they can use a walkie-talkie like functionality
to talk to other players independently of their 3D location.</p>
<p>In the first step, we create this basic walkie-talkie functionality by listening to the following events:
<span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
, <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
<h3 id="walkie-talkie">Walkie-Talkie</h3>
<p>This simple example works as follows:</p>
<ul>
<li>All users are connected to the same ODIN room named &ldquo;WalkieTalkie1&rdquo;</li>
<li>We provide an AudioMixerGroup with some audio effects added to the voice of other users, so they sound a bit distorted</li>
<li>In our example, the local player object is controlled by a <code>PlayerController</code> script that has a
<code>walkieTalkie</code> member variable that references a walkie-talkie mesh of the player character (see image below).</li>
<li>A singleton <code>GameManager</code> instance handles creation of player objects and manages them. We use this class instance
to get hold of our local player object to get a reference to the walkie-talkie game object that we need in the
next step.</li>
<li>Whenever another user connects a room, we handle the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event and attach a
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to this walkie talkie mesh. Therefore, all audio sent by other players voice is
coming out of this walkie talkie mesh.</li>
</ul>
<p>The simplest way to achieve this is by creating a new script in Unity (in this example, we&rsquo;ll call it <code>OdinPeerManager</code>) and implementing the callback functions within it. After that, you can either create an empty GameObject in your scene and attach the <code>OdinPeerManager</code> component to it, or directly attach the <code>OdinPeerManager</code> to the ODIN Manager prefab that’s already in your scene. Finally, use the <a href="/odin/sdk/unity/manual/odinhandler/#events">inspector of the Odin Manager prefab</a> to link the ODIN SDK events to your custom implementation.</p>
<figure><img src="/images/odin/odin_unity_example_odin_peer_manager.jpg"
         alt="Our OdinPeerManager added to our scene."/><figcaption>
            <p>Our OdinPeerManager added to our scene.</p>
        </figcaption>
</figure>
<p>This is the player mesh we used in our ODIN example showcase. It&rsquo;s <a href="https://assetstore.unity.com/packages/3d/characters/humanoids/humans/soldier-model-01-customizable-character-pack-elena-182415">Elena from the Unity Asset Store</a>
that looks stunning and is very easy to use. Highlighted is the walkie-talkie game object that is used to
realistically attach all other players voice to this object. Therefore, other players will hear
walkie-talkie sound coming out of this players walkie-talkie as you would in real life.</p>
<figure><img src="/images/odin/elena_walkie_talkie.jpg"
         alt="This is the Elena Soldier Model from the Unity Asset Store that we used in our demo"/><figcaption>
            <p>This is the Elena Soldier Model from the Unity Asset Store that we used in our demo</p>
        </figcaption>
</figure>
<p>The final version of our <code>OdinPeerManager</code> implementing what we have defined above looks like this:</p>





<div id="example-b732ef53397b8791e232ecc1e2a4c557" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">OdinPeerManager example</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-b732ef53397b8791e232ecc1e2a4c557-cs">
        C#
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-b732ef53397b8791e232ecc1e2a4c557-cs">
      <pre><code class="hljs language-cs">using OdinNative.Odin.Room;
using OdinNative.Unity.Audio;
using UnityEngine;
using UnityEngine.Audio;

public class OdinPeerManager : MonoBehaviour
{
    [ToolTip(&#34;Set to an audio mixer for radio effects&#34;)]
    public AudioMixerGroup walkieTalkieAudioMixerGroup;

    private void AttachWalkieTalkiePlayback(GameObject gameObject, Room room, ulong peerId, ushort mediaId)
    {
        // Attach the playback component from the other player to our local walkie talkie game object
        PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(gameObject, room.Config.Name, peerId, mediaId);

        // Set the spatialBlend to 1 for full 3D audio. Set it to 0 if you want to have a steady volume independent of 3D position
        playback.PlaybackSource.spatialBlend = 0.5f; // set AudioSource to half 3D
        playback.PlaybackSource.outputAudioMixerGroup = walkieTalkieAudioMixerGroup;
    }

    public void OnRoomLeft(RoomLeftEventArgs eventArgs)
    {
        Debug.Log($&#34;Room {eventArgs.RoomName} left, remove all playback components&#34;);

        // Remove all Playback Components linked to this room
        OdinHandler.Instance.DestroyPlaybackComponents(eventArgs.RoomName);
    }

    public void OnMediaRemoved(object sender, MediaRemovedEventArgs eventArgs)
    {
        Room room = sender as Room;
        Debug.Log($&#34;ODIN MEDIA REMOVED. Room: {room.Config.Name}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&#34;);

        // Remove all playback components linked to this media id
        OdinHandler.Instance.DestroyPlaybackComponents(eventArgs.Media.Id);
    }

    public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
    {
        Room room = sender as Room;
        Debug.Log($&#34;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&#34;);

        // Another player connected the room. Find the local player object and add a PlaybackComponent to it.
        // In multiplayer games, player objects are often not available at runtime. The GameManager instance handles
        // that for us. You need to replace this code with your own
        var localPlayerController = GameManager.Instance.GetLocalPlayerController();
        if (localPlayerController &amp;&amp; localPlayerController.walkieTalkie)
        {
            AttachWalkieTalkiePlayback(localPlayerController.walkieTalkie, room, eventArgs.PeerId, eventArgs.Media.Id);
        }
    }
}
</code></pre>
    </div></div>
</div>


<p>What&rsquo;s left is that we need to join the room once the game starts. We do that in our <code>PlayerController</code> script.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Joining a room
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class PlayerController : MonoBehaviour
{    
    // Join the room when the script starts (i.e. the player is instantiated)
    void Start() 
    {
        OdinHandler.Instance.JoinRoom(&quot;WalkieTalkie1&quot;);
    }
    
    // Leave the room once the player object gets destroyed
    void OnDestroy()
    {
        OdinHandler.Instance.LeaveRoom(&quot;WalkieTalkie1&quot;);
    }
}
</code></pre>
</div>
</div>

<h3 id="switching-channels">Switching channels</h3>
<p>Walkie-talkies allow users to choose a channel so not everyone is talking on the same channel. We can add this
functionality with a couple lines of code. The only thing we need to do is to leave the current room representing a
channel and to join another room. That&rsquo;s it.</p>
<p>ODIN rooms are represented by its name. Nothing more. There is no bookkeeping required. Choose a name that makes
sense for your application and join that room.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Switching channels
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class PlayerController : MonoBehaviour
{
    // The current walkie-talkie channel
    public int channelId = 1;
    
    // Create a room name of a channel
    string GetOdinRoomNameForChannel(int channel)
    {
        return $&quot;WalkieTalkie{channel}&quot;;
    }
    
    // Join the room when the script starts (i.e. the player is instantiated)
    void Start() 
    {
        UpdateOdinChannel(channelId);
    }
    
    // Leave the room once the player object gets destroyed
    void OnDestroy()
    {
        OdinHandler.Instance.LeaveRoom(GetOdinRoomNameForChannel(channelId));
    }
    
    // Leave and join the corresponding channel
    private void UpdateOdinChannel(int newChannel, int oldChannel = 0)
    {
        if (oldChannel != 0)
        {
            OdinHandler.Instance.LeaveRoom(GetOdinRoomNameForChannel(oldChannel));            
        }
        
        OdinHandler.Instance.JoinRoom(GetOdinRoomNameForChannel(newChannel));
    }
    
    // Check for key presses and change the channel
    void Update() 
    {
        if (Input.GetKeyUp(KeyCode.R))
        {
            int newChannel = channelId + 1;
            if (newChannel &gt; 9) newChannel = 1;
            UpdateOdinChannel(newChannel, channelId);
        }
        
        if (Input.GetKeyUp(KeyCode.F))
        {
            int newChannel = channelId - 1;
            if (newChannel &lt; 1) newChannel = 9;
            UpdateOdinChannel(newChannel, channelId);
        }
    }
}
</code></pre>
</div>
</div>

<p>That&rsquo;s it. You don&rsquo;t need to change anything in the <code>OdinPeerManager</code> as we already handle everything. If we switch
the room, we first leave the current room, which triggers the <span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
 event. As we implemented
that event callback we just remove all <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 objects linked to this room - i.e. there
will be no <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 objects anymore linked to our walkie-talkie game object.</p>
<p>Next, we join the other room. For every player that is sending audio in this channel. we&rsquo;ll receive the
<span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event which will again create <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 objects to our
walkie-talkie game object.</p>
<h2 id="3d-positional-audio">3D Positional Audio</h2>
<p>As described above, in our example we have two layers of voice: walkie-talkie that we have just implemented and 3D
positional audio for each player.</p>
<p>Adding the second layer requires two things:</p>
<ul>
<li>Joining another room when the game starts. Yes, with ODIN you can join multiple rooms at once and our SDK and
servers handle everything automatically for you.</li>
<li>Changing the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 callback to handle 3D rooms differently than Walkie-Talkie rooms.</li>
</ul>
<h3 id="joining-the-world-room">Joining the world room</h3>
<p>All players running around in our scene join the same room, we simply call it &ldquo;World&rdquo;. So, we adjust our current
<code>Start</code> implementation in <code>PlayerController</code>:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Joining the world room
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class PlayerController : MonoBehaviour
{
    // ...
        
    // Join the room when the script starts (i.e. the player is instantiated)
    void Start() 
    {
        UpdateOdinChannel(channelId);
        
        // Join the world room for positional audio
        OdinHandler.Instance.JoinRoom(&quot;World&quot;);
    }
    
    // Leave the room once the player object gets destroyed
    void OnDestroy()
    {
        OdinHandler.Instance.LeaveRoom(GetOdinRoomNameForChannel(channelId));
        
        // Leave the world room
        OdinHandler.Instance.LeaveRoom(&quot;World&quot;);
    }
    
    // ...
}
</code></pre>
</div>
</div>

<h3 id="adjusting-onmediaadded">Adjusting OnMediaAdded</h3>
<p>That&rsquo;s it! We&rsquo;ve successfully joined the world room. However, at this point, all player voices are being routed to our walkie-talkie, which isn&rsquo;t what we want. Instead, we want the other players&rsquo; walkie-talkies connected to ours, while their &ldquo;world voice&rdquo; should be attached to their corresponding avatars in the scene. This way, their voice positions will match their in-game positions, ensuring accurate spatial audio.</p>
<p>Our current implementation on <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 looks like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Current OnMediaAdded implementation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class OdinPeerManager : MonoBehaviour
{
    // ...
    
    public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
    {
        Room room = sender as Room;
        Debug.Log($&quot;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&quot;);

        // Another player connected the room. Find the local player object and add a PlaybackComponent to it.
        // In multiplayer games, player objects are often not available at runtime. The GameManager instance handles
        // that for us. You need to replace this code with your own
        var localPlayerController = GameManager.Instance.GetLocalPlayerController();
        if (localPlayerController &amp;&amp; localPlayerController.walkieTalkie)
        {
            AttachWalkieTalkiePlayback(localPlayerController.walkieTalkie, room, eventArgs.PeerId, eventArgs.Media.Id);
        }
    }
    
    // ...
}
</code></pre>
</div>
</div>

<p>Depending on the room where the media is added we need to handle things differently. If it&rsquo;s a walkie-talkie room,
we add the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 representing the other players voice to the local players
walkie-talkie. This is what we have implemented already. But if it&rsquo;s the world room, we need to attach the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to the game object representing the player in the scene.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                OdinPeerManager with positional audio
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class OdinPeerManager : MonoBehaviour
{
    // ...
    
    // Create and add a PlaybackComponent to the other player game object
    private void AttachOdinPlaybackToPlayer(PlayerController player, Room room, ulong peerId, ushort mediaId)
    {
        PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(player.gameObject, room.Config.Name, peerId, mediaId);

        // Set the spatialBlend to 1 for full 3D audio. Set it to 0 if you want to have a steady volume independent of 3D position
        playback.PlaybackSource.spatialBlend = 1.0f; // set AudioSource to full 3D
    }
    
    // Our new OnMediaAdded callback handling rooms differently
    public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
    {
        Room room = sender as Room;
        Debug.Log($&quot;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&quot;);

        // Check if this is 3D sound or Walkie Talkie
        if (room.Config.Name.StartsWith(&quot;WalkieTalkie&quot;))
        {
            // A player connected Walkie Talkie. Attach to the local players Walkie Talkie
            var localPlayerController = GameManager.Instance.GetLocalPlayerController();
            if (localPlayerController &amp;&amp; localPlayerController.walkieTalkie)
            {
                AttachWalkieTalkiePlayback(localPlayerController, room, eventArgs.PeerId, eventArgs.Media.Id);
            }
        }
        else if (room.Config.Name == &quot;World&quot;)
        {
            // This is 3D sound, find the local player object for this stream and attach the Audio Source to this player
            PlayerUserDataJsonFormat userData = PlayerUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
            PlayerController player = GameManager.Instance.GetPlayerForOdinPeer(userData);
            if (player)
            {
                AttachOdinPlaybackToPlayer(player, room, eventArgs.PeerId, eventArgs.Media.Id);
            }   
        }
    }
    
    // ...
}
</code></pre>
</div>
</div>

<p>If the room where the media was created is a &ldquo;WalkieTalkie&rdquo; room, we use the same implementation as before. However, if it&rsquo;s the world room, we need to find the corresponding player game object in the scene and attach the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to it. We also set <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 to <code>1.0</code> to activate 3D positional audio, meaning Unity will automatically handle the 3D audio processing for us.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This guide covered the basic and essential event handling. We didn&rsquo;t dive into the specifics of integrating your multiplayer framework with ODIN, as the approach may vary depending on the framework you&rsquo;re using. We provide a typical solution in our <a href="/odin/guides/unity/unity-mirror/">Mirror Networking</a> guide and also have an open-source example available for <a href="/odin/guides/unity/pun-sample/">Photon</a>.</p>
<p>We also demonstrate how to integrate ODIN into an existing multiplayer game in our <a href="/odin/guides/unity/existing-projects/">&ldquo;ODIN for existing projects&rdquo; guide</a>.</p>
</div>
</div>

`}),e.add({id:3563,href:"https://www.4players.io/odin/guides/unreal/device-selection/",title:"Input Device Selection",section:"ODIN Documentation",description:"Discover how to switch microphone input devices in Unreal Engine using the ODIN plugin. This guide walks you through creating an extended audio capture object and implementing a UI for seamless device selection in your game's voice chat.",content:`<p>Unreal does not provide an easy method to switch input devices (like a microphone) when using the default Audio Capture, even though most players would expect this feature in a game with Voice Chat. Let&rsquo;s take a look at how we handle this in the ODIN plugin.</p>
<p>By David Liebemann at <a href="https://scico.dev">SciCode Studio</a>.</p>
<h2 id="creating-an-odin-audio-capture">Creating an Odin Audio Capture</h2>
<p>To change input devices, instead of using the default <code>Create Audio Capture</code> method, we&rsquo;ll use the <code>Create Odin Audio Capture</code> function call. This will create an extended Audio Capture object, that allows us to change the audio capture device using either Blueprints or C++.</p>
<p>Your logic for joining an Odin room should now look something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/CreateOdinAudioCapture.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/CreateOdinAudioCapture.webp"
         alt="Blueprint for joining the Odin room" width="100%"/></a><figcaption>
            <p>Blueprint for joining the Odin room</p>
        </figcaption>
</figure>
<p>Please note, that we store a reference to the <code>Odin Audio Capture</code> object as a variable - we&rsquo;re going to use it in the next sections to display the available devices in the UI.</p>
<h2 id="ui-creation">UI Creation</h2>
<p>You&rsquo;ll probably have to adjust the next steps to fit your UI implementation, but in general it&rsquo;s easy to adapt the necessary UI elements.</p>
<p>We&rsquo;ll create a new Blueprint Widget that gets displayed when the player presses \`tab. This Widget should show the available capture devices in a drop-down box and change the active device on selection.</p>
<ol>
<li>Create a new Widget Blueprint in your project - we&rsquo;ll call it <code>BPW_SelectInputDevice</code>.</li>
<li>In the widget&rsquo;s event graph, create a new Custom Event called <code>UpdateAudioCapture</code> with an input parameter of type <code>Odin Audio Capture</code>. We&rsquo;ll use this event in the next section, so simply leave it unconnected for now.</li>
</ol>
<center>
<figure style="max-width: 70%px"><a href="/images/odin/unreal/device-selection/UpdateAudioCaptureEvent.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/UpdateAudioCaptureEvent.webp"
         alt="The Custom Event UpdateAudioCapture in the Widget Blueprint" width="70%"/></a><figcaption>
            <p>The Custom Event <code>UpdateAudioCapture</code> in the Widget Blueprint</p>
        </figcaption>
</figure>
</center>
<ol start="3">
<li>
<p>In your player controller&rsquo;s <code>Begin Play</code>, add a <code>Create Widget</code> call, select the class <code>BP_SelectInputDevice</code>, connect the <code>Self</code> property to the <code>Owning Player</code> input and save the resulting widget object in a variable.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/InitDeviceSelectionWidget.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/InitDeviceSelectionWidget.webp"
         alt="Initializing the device selection widget in the player controller." width="100%"/></a><figcaption>
            <p>Initializing the device selection widget in the player controller.</p>
        </figcaption>
</figure>
</li>
<li>
<p>The final step in the player controller is to add logic for toggling the &ldquo;Select Input Device&rdquo; UI, as shown below. Please note the call to <code>Update Audio Capture</code> when making the UI visible. This will supply the <code>Audio Capture</code> object to the widget blueprint, which we&rsquo;ll use to request the available capture devices.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/ToggleUI.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/ToggleUI.webp"
         alt="Toggle the &amp;ldquo;Select Input Device&amp;rdquo; UI based on Input mapping." width="100%"/></a><figcaption>
            <p>Toggle the &ldquo;Select Input Device&rdquo; UI based on Input mapping.</p>
        </figcaption>
</figure>
</li>
</ol>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you can&rsquo;t create the <code>InputAction ToggleDeviceSelection</code> event, make sure to add an Action in <code>Project Settings &gt; Input &gt; Action Mappings</code> and bind it to a keyboard input - we&rsquo;re using Tab for testing.</p>
</div>
</div>

<h2 id="widget-implementation">Widget implementation</h2>
<p>Currently the widget does not contain any visible UI elements, so let&rsquo;s change this. We&rsquo;ll add a simple see-through background and a dropdown box, in which we&rsquo;ll list all available capture devices. Changing the selection in the dropdown box will change the capture device used for Odin. Additionally we&rsquo;ll preselect the currently active capture device in the dropdown box.</p>
<ol>
<li>
<p>In the widget&rsquo;s <code>Designer</code> mode, add a <code>Canvas Panel</code> as the root element and a <code>Border</code> and <code>ComboBox (String)</code> as direct children. Set the <code>Border</code> element&rsquo;s <code>Brush Color</code> to <code>(0,0,0,0.5)</code> to make it darken the gameplay, but still keep it see-through. Additionally, let&rsquo;s give the <code>ComboBox</code> a meaningful name - e.g. &ldquo;SelectionDropBox&rdquo;.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/WidgetHierarchy.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/WidgetHierarchy.webp"
         alt="The widget&amp;rsquo;s hierarchy and display after adding all elements." width="100%"/></a><figcaption>
            <p>The widget&rsquo;s hierarchy and display after adding all elements.</p>
        </figcaption>
</figure>
</li>
<li>
<p>Let&rsquo;s now switch to the <code>Graph</code> mode and start extending our Custom Event <code>UpdateAudioCapture</code>. We&rsquo;ll store the <code>Odin Audio Capture</code> object as a variable and call <code>Async Get Capture Devices Available</code>. This will return the available capture devices and the current device as outputs in the connected event.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/GetCaptureDevices.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/GetCaptureDevices.webp"
         alt="Request the available capture devices." width="100%"/></a><figcaption>
            <p>Request the available capture devices.</p>
        </figcaption>
</figure>
</li>
</ol>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The <code>Odin Audio Capture</code> object also contains synchronous function calls to access and change capture device data. During testing we&rsquo;ve noticed that these synchronous calls can take quite a while to run: more than 100ms on average, in some cases more than a second. This lag is due to Unreal&rsquo;s internal implementation for changing capture devices. We therefore strongly recommend using the async function calls.</p>
</div>
</div>

<ol start="3">
<li>
<p>Let&rsquo;s name the connected event <code>OnReceivedDevices</code>. We&rsquo;ll store a reference to the available devices, as well as retrieve and store the current device name from the <code>Current Device</code> Info structures.</p>
</li>
<li>
<p>Because <code>OnReceivedDevices</code> will be called each time we open up the UI, we&rsquo;ll need to reset the current options by calling <code>Clear Options</code> on the <code>Selection Drop Box</code>.</p>
</li>
<li>
<p>Now we need to add the available capture device names as options in the dropdown box. We iterate over our <code>Available Devices</code> array, retrieve the <code>Device Name</code> from the device info structures and add that as an option to the <code>Selection Drop Box</code>.</p>
</li>
<li>
<p>Afterwards we&rsquo;ll preselect the currently active device by calling <code>Set Selected Option</code> with our <code>Current Option</code>. Your blueprint logic should look something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/AddDeviceOptions.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/AddDeviceOptions.webp"
         alt="Filling the dropdown box with available capture device options." width="100%"/></a><figcaption>
            <p>Filling the dropdown box with available capture device options.</p>
        </figcaption>
</figure>
</li>
<li>
<p>Finally we&rsquo;ll change the capture device, when the user selects an item from the dropdown box. Add the event <code>On Selection Changed (SelectionDropBox)</code> to your Event Graph. The <code>Selected Item</code> will contain the name of the input device that should become the active capture device. Let&rsquo;s do a quick check for whether the <code>Selected Item</code> is empty or equal to the currently selected option. If the item passes the checks, we call <code>Async Change Capture Device by Name</code> with the <code>Selected Item</code> as input. The <code>On Change Completed</code> callback will let us know, whether the given device was activated successfully. Your blueprint should look something like this:F</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/ChangeDevices.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/ChangeDevices.webp"
         alt="Change the capture device on selection." width="100%"/></a><figcaption>
            <p>Change the capture device on selection.</p>
        </figcaption>
</figure>
</li>
</ol>
<p>Now anytime a user chooses a new option, the <code>Odin Audio Capture</code> object will change the capture device and restart the input stream automatically.</p>
<h2 id="whats-next">What&rsquo;s next?</h2>
<p>This is a very simple implementation with minimal UI, which you&rsquo;ll be able to easily adapt to your project&rsquo;s needs. For more information on Unreal with Odin Voice Chat, check out our Discord and take a look at the following guides we&rsquo;ve prepared for you:</p>
<center>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
</center>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN</h4>
<div class="teaser-content">
 <p>Follow this guide to learn how to install and setup ODIN in your Unreal Project using Blueprint.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal/blueprint-reference">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal_bp_reference.jpg">
</a>
<h4 class="teaser-title">Blueprint Reference</h4>
<div class="teaser-content">
 <p>Check out our extensive Blueprint reference to learn more about the nodes our SDK provides and how to connect them
into your game.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal/blueprint-reference">Let&#39;s start</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3564,href:"https://www.4players.io/odin/guides/unity/unity-mirror/",title:"Multiplayer with Mirror",section:"ODIN Documentation",description:"Learn how to add ODIN voice chat to a simple multiplayer game using Mirror Networking. Follow this step-by-step guide for seamless integration and enhanced in-game communication.",content:`<p>In this guide we add ODIN to a very simple multiplayer game built with <a href="https://mirror-networking.gitbook.io/docs/">Mirror Networking</a>.</p>
<h2 id="basic-multiplayer-topology">Basic Multiplayer Topology</h2>
<p>You might remember this graphic which is provided in the mirror documentation. It&rsquo;s a good starting point to show how
ODIN fits into your multiplayer topology:</p>
<figure style="max-width: 500px"><a href="/images/odin/mirror_client_server.png" title="Click to enlarge" data-lity><img src="/images/odin/mirror_client_server.png" width="500"/></a>
</figure>
<p>This diagram basically outlines the general topology of your multiplayer application.</p>
<ul>
<li>Clients connect to the server and send input to the server which handles the games state
and the objects</li>
<li>Depending on the authority input sent to the server is just controller input (server authority) or a combination of
controller input and game object positions and spawn requests (client authority)</li>
<li>The server sends events to the client to keep the clients game state in sync with the master game state on the server</li>
</ul>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Every client has an exact copy of the scene and its game objects kept on the server. Of course, there is always a slight
delay depending on the latency (i.e. connection speed) but overall every client has the exact same state.</p>
</div>
</div>

<h2 id="basic-multiplayer-topology-with-odin">Basic Multiplayer Topology with ODIN</h2>
<p>Of course, you could build voice into your client server application yourself. Instead of sending packets with controller
input or positions, you could also send audio packets. Good luck with that. Audio is extremely hard to get right and
there are many different input devices (microphone, headsets, etc). So, it&rsquo;s easer to just use our technology to add
voice communication to your application.</p>
<figure style="max-width: 500px"><a href="/images/odin/mirror_client_server_odin.png" title="Click to enlarge" data-lity><img src="/images/odin/mirror_client_server_odin.png" width="500"/></a>
</figure>
<p>This is the same graphic as above, just with ODIN added to the topology. Let&rsquo;s dive into it:</p>
<ul>
<li>Your client/server structure and code is mostly untouched. You can add ODIN without changing anything on your core game</li>
<li>ODIN can also be removed very easily without touching your game logic and topology!</li>
<li>ODIN integration is a pure client side implementation, that is, you don&rsquo;t need to add anything to the server at all!</li>
<li>Once your player has been connected to the server and the games state is mirrored to the client, ODIN comes into play.</li>
<li>The client joins a room by name and starts sending audio data captured from the input device.</li>
<li>The ODIN server sends events to the client (as your game server does).</li>
<li>Whenever a client is connected to the ODIN server an <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 event is sent to the server. An <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event is sent
directly after that if the client is sending audio data (someone might be connected to ODIN but without sending any audio - i.e. just a listener)</li>
<li>The client attaches the audio source to the corresponding players game object and removes it once the client disconnects from ODIN</li>
<li>That&rsquo;s it. The players running around the scene will act as a audio source and it&rsquo;s up to you how to handle that voice stream in the game</li>
</ul>
<p>Let&rsquo;s dive into the actual integration.</p>
<h2 id="creating-a-simple-multiplayer-game">Creating a simple multiplayer game</h2>
<p>Mirror networking has a very good guide on how to get started. We don&rsquo;t want to replicate that excellent document
here, so <a href="https://mirror-networking.gitbook.io/docs/community-guides/quick-start-guide#part-1">head over to Mirror networking and follow the steps</a>.
We stopped at <strong>Part 11</strong> (as subsequent steps like weapons and switching is not relevant for this guide).</p>
<p>After you have followed the steps, you have created these things:</p>
<ul>
<li>A new Unity project with a scene that has the <span class="external-reference">NetworkManager <a href="https://mirror-networking.gitbook.io/docs/components/network-manager" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 script attached to a game object</li>
<li>A player prefab which is a basic capsule with a <span class="external-reference">PlayerScript <a href="https://mirror-networking.gitbook.io/docs/community-guides/quick-start-guide#part-9" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 added and some basic movement.</li>
<li>You can start a <code>Client + Host</code> and run around the scene with WASD on your keyboard and connecting another client
will show both clients in the scene</li>
</ul>
<figure><img src="/images/odin/mirror_example.jpg"
         alt="Image from Mirror Getting Started Guide"/><figcaption>
            <p>Image from Mirror Getting Started Guide</p>
        </figcaption>
</figure>
<h2 id="adding-odin">Adding ODIN</h2>
<p>In this section, we&rsquo;ll add ODIN to our simple multiplayer example. Every user connected to the server will join the same
ODIN room once connected to the multiplayer server. Each player will act as an <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and will play
the voice of the corresponding player in real-time. Audio will use a <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 of <code>1.0</code> and as such
the 3D position will be taken into account by Unity automatically.</p>
<p>Players voice will come out of the direction they are on screen (or even behind you) and the volume will increase or
decrease depending on how close these players are.</p>
<p>Let&rsquo;s get started!</p>
<p>First, we need to add the Unity ODIN SDK to our project.</p>
<h3 id="download-sdk-and-install">Download SDK and install</h3>
<p>Follow these steps to install the ODIN SDK into the project. For this guide, we recommend using the Unity Package as
it&rsquo;s the simplest way of installing it.</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h3 id="add-odin-handler-prefab">Add ODIN Handler Prefab</h3>
<p>After installation, you&rsquo;ll find <code>4Players ODIN</code> in <code>Packages</code> in your asset browser of Unity. Navigate to <code>Samples/Audio3D</code>
and drag &amp; drop the <code>OdinManager 3D Variant</code> prefab into your scene. Click on the prefab and in the inspector you&rsquo;ll see
something like this:</p>
<figure><img src="/images/odin/mirror_odin_inspector.jpg"
         alt="The ODIN Manager in Unity Inspector"/><figcaption>
            <p>The ODIN Manager in Unity Inspector</p>
        </figcaption>
</figure>
<p>The ODIN Manager Game Object will do the following for you:</p>
<ul>
<li>Activate the default microphone and capture its input (if &ldquo;Auto-Start Microphone Listener&rdquo; is enabled in the Mic-AudioClip Settings section, which is the default setting).</li>
<li>Handles all ODIN events and exposes delegates for these events in the Inspector</li>
</ul>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please check out the <span class="external-reference">ODIN Unity SDK Manual <a href="/odin/sdk/unity/manual/"><i class="fas fa-external-link-alt"></i></a></span>
. You&rsquo;ll find everything you need to know about using ODIN within the Unity editor, including detailed descriptions of all properties for various ODIN components that can be adjusted in the Unity Inspector.</p>
</div>
</div>

<h3 id="set-access-token">Set Access Token</h3>
<p>Now, that we have added ODIN manager to our scene, we need to set an access key. This is an important topic, that we
don&rsquo;t want to dive in deeper right now, but you&rsquo;ll have to take a minute to understand that later. Check out our guide
on this topic here: <a href="/odin/introduction/access-keys/">Understanding Access Keys</a>. As we want to keep things simple, you
can generate an access key right from Unity. Click on the <span class="external-reference">Manage Access <a href="/odin/sdk/unity/manual/odineditorconfig/#client-settings"><i class="fas fa-external-link-alt"></i></a></span>
 in the inspector in the <code>Client Settings</code>
section in the ODIN Inspector. You&rsquo;ll see a dialog like this:</p>
<figure style="max-width: 300px"><a href="/images/odin/mirror_odin_access_key_inspector.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_access_key_inspector.jpg"
         alt="Generate an access token within Unity" width="300"/></a><figcaption>
            <p>Generate an access token within Unity</p>
        </figcaption>
</figure>
<p>You can click on the <code>Generate Access Key</code> to generate an access key for free. This will allow you to connect with up
to <strong>25 users</strong>. However, there is no support from us.</p>
<h3 id="mapping-odin-users-to-players">Mapping ODIN users to players</h3>
<p>As you can see in the diagram above it&rsquo;s important to match ODIN users to the players in the game, so that you can attach
the audio output to the correct player. If you are just using &ldquo;God Voice&rdquo; mode, i.e. all players have the same volume
and direction (like in radio or video conferencing) then this is not required, but it&rsquo;s recommend.</p>
<p>In Mirror, every networked object has a <code>NetworkIdentity</code>
. And every <code>NetworkIdentity</code>
 has a <span class="external-reference">netId <a href="https://mirror-networking.com/docs/api/Mirror.NetworkIdentity.html#Mirror_NetworkIdentity_netId" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 which is an integer
value that is unique for every object being part of the network. Every player with a <code>PlayerScript</code> attached to it also
has a <span class="external-reference">netId <a href="https://mirror-networking.com/docs/api/Mirror.NetworkIdentity.html#Mirror_NetworkIdentity_netId" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
. We just use that <span class="external-reference">netId <a href="https://mirror-networking.com/docs/api/Mirror.NetworkIdentity.html#Mirror_NetworkIdentity_netId" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 to match ODIN users with networked player objects.</p>
<p>Every Odin peer has <span class="external-reference">UserData <a href="/odin/sdk/unity/classes/userdata/"><i class="fas fa-external-link-alt"></i></a></span>
 for these use-cases. You can use it to store arbitrary data linked to a user. When the player
has been connected to the server, a local instance of the player is created and the <code>OnStartLocalPlayer</code>
 function is called.</p>
<p>With ODIN integrated, the <code>PlayerScript.OnStartLocalPlayer</code> function looks like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                OnStartLocalPlayer implementation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public override void OnStartLocalPlayer()
{
    sceneScript.playerScript = this;
    
    Camera.main.transform.SetParent(transform);
    Camera.main.transform.localPosition = new Vector3(0, 0, 0);
    Camera.main.transform.localRotation = Quaternion.identity;
    
    floatingInfo.transform.localPosition = new Vector3(0, -0.3f, 0.6f);
    floatingInfo.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);

    string name = &quot;Player&quot; + Random.Range(100, 999);
    Color color = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f));
    
    // Generate a JSON User Data object with the players netId and name in the network
    CustomUserDataJsonFormat userData = new CustomUserDataJsonFormat(name, &quot;online&quot;);
    userData.seed = netId.ToString();
    
    // Join ODIN Room ShooterSample and send user data
    OdinHandler.Instance.JoinRoom(&quot;ShooterSample&quot;, userData.ToUserData());
    
    // Send users data to the server
    CmdSetupPlayer(name, color, netId.ToString());
}
</code></pre>
</div>
</div>

<p>As you can see, we generate a simple <code>UserData</code> JSON object with <code>name</code> and <code>seed</code>. <code>seed</code> is an &ldquo;external&rdquo; identifier
that can be used to link the games identifiers to ODIN.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Please note</strong>: <span class="external-reference">UserData <a href="/odin/sdk/unity/classes/userdata/"><i class="fas fa-external-link-alt"></i></a></span>
in ODIN is just a byte array and can be used for anything. It can be updated with the <code>UpdateUserData</code>
method provided in the <span class="external-reference">Room <a href="/odin/sdk/unity/classes/room/#updateuserdata"><i class="fas fa-external-link-alt"></i></a></span>
class of the ODIN SDK. You can use the class <span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
which provides a standard
interface that is also used in our Web SDK (so both can work seamlessly together). <span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
serialized its data
to a JSON (<span class="external-reference">ToUserData <a href="/odin/guides/unity/user-data/#touserdata"><i class="fas fa-external-link-alt"></i></a></span>
and <span class="external-reference">FromUserData <a href="/odin/guides/unity/user-data/#fromuserdata"><i class="fas fa-external-link-alt"></i></a></span>
) representation.</p>
</div>
</div>

<p>Once that is done, we join the ODIN room <code>ShooterSample</code>. We have also extended
the <code>CmdSetupPlayer</code> function and added another parameter to send the users <span class="external-reference">netId <a href="https://mirror-networking.com/docs/api/Mirror.NetworkIdentity.html#Mirror_NetworkIdentity_netId" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 to the server and to keep it in
sync with the other clients:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Adding sync var for odin seed
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">[SyncVar(hook = nameof(OnNameChanged))]
public string playerName;

[SyncVar(hook = nameof(OnColorChanged))]
public Color playerColor = Color.white;

// The new SyncVar to store the users netId as an ODIN seed
[SyncVar]
public string odinSeed;
</code></pre>
</div>
</div>

<p>This is the new version of <code>CmdSetupPlayer</code> after integrating ODIN:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Updating CmdSetupPlayer
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">[Command]
public void CmdSetupPlayer(string _name, Color _col, string netId)
{
    // player info sent to server, then server updates sync vars which handles it on all clients
    playerName = _name;
    playerColor = _col;
    odinSeed = netId;
    sceneScript.statusText = $&quot;{playerName} joined.&quot;;
}
</code></pre>
</div>
</div>

<p>That&rsquo;s it. Now every user will expose their ODIN identifier to the network and will also send that identifier to ODIN.
Of course, many other things can be used as the identifier, being it the user id from authentication or a random id.</p>
<h3 id="understanding-odin-rooms">Understanding ODIN rooms</h3>
<p>ODIN follows a couple of very simple rules:</p>
<ul>
<li>All users connected to the same room can hear everyone else (except when they are muted)</li>
<li>A room is created once the first users is connected and is deleted once the last user disconnects from it</li>
<li>One user can join multiple rooms simultaneously</li>
</ul>
<p>So, it&rsquo;s up to us to decide how we leverage that. You can have one large room for all players or you can have a room
for each team. And you can also have multiple rooms at the same time. Think about a game like CounterStrike. There
could be three rooms:</p>
<ul>
<li>In one room, every player is connected and this room uses positional 3D audio</li>
<li>One room for Terrorists (i.e. all players in the Terrorist Team are connected via virtual radio) which uses layered audio</li>
<li>One room for Counter Terrorists (i.e. all players in the CT Team are connected via virtual radio) which uses layered audio</li>
</ul>
<p>In this scenario players can talk to everyone else crystal clear as they would in real life via radio or phone.
But players would also expose their voice inside the game at their 3D position. So, if you talk to others, an opponent which
is close to you can listen to what you are talking about. This exposes your position and it also gives opponent a chance
to learn about your strategy.</p>
<p>In our example, we&rsquo;ll stick to one room using 3D audio. Every <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 in Unity
has a property called <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
. Here is an excerpt of the Unity documentation:</p>

<blockquote><p>Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D.</p>
</blockquote>

<p>What we do with ODIN is attach a special ODIN-powered <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 to the player object (head) and set <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 to <code>1.0</code> to enable full 3D audio. If you want to use &ldquo;God voice&rdquo; mode, i.e., no 3D positioning, you would set that value to <code>0.0</code>. That&rsquo;s it! With ODIN, this is all you need to do to achieve either standard, equal volume radio-type voice or 3D positional audio.</p>
<h3 id="attach-odin-voice-to-player-objects">Attach ODIN voice to player objects</h3>
<p>Let&rsquo;s recap what we have now:</p>
<ul>
<li>We have a simple multiplayer &ldquo;game&rdquo; that allows multiple players to connect and run around the scene</li>
<li>Every player connects to the <code>ShooterSample</code> room in ODIN and exposes a unique ID (in this case the <code>NetworkIdentity.netId</code>) to the network and ODIN</li>
</ul>
<p>Once connected to ODIN, the ODIN server will send events whenever something of interest happens. Right after connecting, ODIN
will send a couple of <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 events to inform about all players already in that room.</p>
<p>You can hook up those events via code or by linking them in the inspector in Unity. In this example, we do it via Inspector.</p>
<p>So, we create a new Game Object in the scene called <code>Odin Peer Manager</code> and create a new script <code>OdinPeerManager</code> which
is linked to the <code>Odin Peer Manager</code> game object. This is the complete <code>OdinPeerManager</code> script:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                OdinPeerManager example
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">using System.Collections;
using System.Collections.Generic;
using Mirror.Examples.Chat;
using OdinNative.Odin;
using OdinNative.Odin.Room;
using OdinNative.Unity;
using OdinNative.Unity.Audio;
using QuickStart;
using UnityEngine;

public class OdinPeerManager : MonoBehaviour
{
    private bool muted = false;

    private void AttachOdinPlaybackToPlayer(PlayerScript player, Room room, ulong peerId, int mediaId)
    {
        PlaybackComponent playback = OdinHandler.Instance.AddPlaybackComponent(player.gameObject, room.Config.Name, peerId, mediaId);

        // Set the spatialBlend to 1 for full 3D audio. Set it to 0 if you want to have a steady volume independent of 3D position
        playback.PlaybackSource.spatialBlend = 1.0f; // set AudioSource to full 3D
    }

    public PlayerScript GetPlayerForOdinPeer(CustomUserDataJsonFormat userData)
    {
        if (userData.seed != null)
        {
            Debug.Log(&quot;Player has network Id: &quot; + userData.seed);
            PlayerScript[] players = FindObjectsOfType&lt;PlayerScript&gt;();
            foreach (var player in players)
            {
                if (player.odinSeed == userData.seed)
                {
                    Debug.Log(&quot;Found PlayerScript with seed &quot; + userData.seed);
                    if (player.isLocalPlayer)
                    {
                        Debug.Log(&quot;Is local player, no need to do anything&quot;);   
                    }
                    else
                    {
                        // We have matched the OdinPeer with our local player instance
                        return player;
                    }
                }   
            }
        }

        return null;
    }

    public void RemoveOdinPlaybackFromPlayer(PlayerScript player)
    {
        PlaybackComponent playback = player.GetComponent&lt;PlaybackComponent&gt;();
        Destroy(playback);

        AudioSource audioSource = player.GetComponent&lt;AudioSource&gt;();
        Destroy(audioSource);
    }

    public void OnMediaRemoved(object sender, MediaRemovedEventArgs eventArgs)
    {
        Room room = sender as Room;
        Debug.Log($&quot;ODIN MEDIA REMOVED. Room: {room.Config.Name}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&quot;);
        
        CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
        PlayerScript player = GetPlayerForOdinPeer(userData);
        if (player)
        {
            RemoveOdinPlaybackFromPlayer(player);
        }
    }

    public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
    {
        Room room = sender as Room;
        Debug.Log($&quot;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&quot;);
        
        CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
        PlayerScript player = GetPlayerForOdinPeer(userData);
        if (player)
        {
            AttachOdinPlaybackToPlayer(player, room, eventArgs.PeerId, eventArgs.Media.Id);
        }
    }

    public void ToggleMute()
    {
        muted = !muted;
        
        foreach (var room in OdinHandler.Instance.Rooms)
        {
            OdinHandler.Instance.Microphone.MuteRoomMicrophone(room, muted);
        }
    }
}
</code></pre>
</div>
</div>

<p>We are only interested in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 and <code>MediaRemoved</code> events. Those events are
sent whenever a user has joined a room and started to send audio. Or if that player stopped sending audio.</p>
<p>So, we created two functions <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 and <code>OnMediaRemoved</code> and linked those two events in the Odin Manager:</p>
<figure style="max-width: 400px"><a href="/images/odin/mirror_odin_events.jpg" title="Click to enlarge" data-lity><img src="/images/odin/mirror_odin_events.jpg"
         alt="ODIN events linked to our new OdinPeerManager object" width="400"/></a><figcaption>
            <p>ODIN events linked to our new OdinPeerManager object</p>
        </figcaption>
</figure>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please make sure that the events <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
and <code>OnMediaRemoved</code> are activated in the <code>Event Listeners</code> section.</p>
</div>
</div>

<p>Let&rsquo;s dive into that a bit. <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 is triggered for each player connected to ODIN when the current player connects, and it will also be triggered if another player joins later.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                OnMediaAdded example code
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
{
    Room room = sender as Room;
    Debug.Log($&quot;ODIN MEDIA ADDED. Room: {room.Config.Name}, PeerId: {eventArgs.PeerId}, MediaId: {eventArgs.Media.Id}, UserData: {eventArgs.Peer.UserData.ToString()}&quot;);
    
    CustomUserDataJsonFormat userData = CustomUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
    PlayerScript player = GetPlayerForOdinPeer(userData);
    if (player)
    {
        AttachOdinPlaybackToPlayer(player, room, eventArgs.PeerId, eventArgs.Media.Id);
    }
}
</code></pre>
</div>
</div>

<p>The <code>sender</code> is of type <code>Room</code>, which lets us cast it to a <code>Room</code> object. The <code>MediaAddedEventArgs</code> object contains information that is sent from the server to the client. We are mostly interested in the <code>UserData</code> object. We can convert
the generic object using the <code>CustomUserDataJsonFormat.FromUserData</code> method to a <code>CustomUserDataJsonFormat</code> object that has this structure :</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                CustomUserDataJsonFormat Properties
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class CustomUserDataJsonFormat
{
    public string name;
    public string seed;
    public string status;
    public int muted;
    public string user;
    public string renderer;
    public string platform;
    public string revision;
    public string version;
    public string buildno;        
    
    ...
}    
</code></pre>
</div>
</div>

<p>Perhaps you remember that when connecting to the ODIN room (see above) we created a <code>UserData</code> object in <code>OnStartLocalPlayer</code>:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Mapping ODIN peers to users
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">  // Generate a JSON User Data object with the players netId and name in the network
  CustomUserDataJsonFormat userData = new CustomUserDataJsonFormat(name, &quot;online&quot;);
  userData.seed = netId.ToString();
  
  // Join ODIN Room ShooterSample and send user data
  OdinHandler.Instance.JoinRoom(&quot;ShooterSample&quot;, userData.ToUserData());
</code></pre>
</div>
</div>

<p>As you can see, we used the <code>seed</code> property to set a unique ID within the ODIN ecosystem (which is the <code>netId</code>).</p>
<p>The <code>seed</code> in this <code>CustomUserDataJsonFormat</code> is a network identifier that should be available within the current scene. Our task is to find all <code>PlayerScript</code> objects in the scene and locate the one with the corresponding <code>netId</code> — this will match the player to the ODIN user. This is handled in the <code>GetPlayerForOdinPeer</code> function.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Please note</strong>: The <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
event is sent for all players in the room, including the local player. We don&rsquo;t want
to attach the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
to the local player, as we would then have an echo. So we check out if the found player is
the local player with <code>isLocalPlayer</code> and if that&rsquo;s the case, we just return <code>null</code>.</p>
</div>
</div>

<p>Now that we matched the player to the ODIN peer, we just need to attach the special ODIN powered <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 which will
basically just output the users microphone input to the corresponding player object. We do that in the <code>AttachOdinPlaybackToPlayer</code>
function which in turn uses the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the ODIN SDK.</p>
<p>We get back a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 that we can use to adjust the <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
. In this case, we set it to 1.0 to enable
full 3D audio. You can also change that to 0.0 to have radio like voice communication.</p>
<p><strong>That&rsquo;s it!</strong></p>
<p>Congratulations! You have successfully integrated ODIN into a multiplayer game with 3D spatial audio. Multiple players can now connect to the server, and their voices will be played from their avatar&rsquo;s position, with the volume adjusting based on distance.</p>
`}),e.add({id:3565,href:"https://www.4players.io/odin/guides/unity/pun-sample/",title:"Multiplayer with Photon",section:"ODIN Documentation",description:"Explore David Liebemann's open-source Unity & Photon PUN 2 sample game showcasing ODIN's features, including 3D positional voice chat. Download and learn how to integrate ODIN into your game.",content:`<p>David Liebemann at <a href="https://scico.dev">SciCode Studio</a> created a sample game with Unity and
Photon PUN 2 that showcases all features of ODIN in a simple example.</p>
<p>It&rsquo;s open source and available in our Github repository. You can download the binaries to test it here:</p>
<p><a href='https://github.com/4Players/odin-unity-demo/releases/latest' target='' class="btn btn-primary">Download Sample now</a></p>
<p>In this guide we’ll walk you through the basic concepts of integrating ODIN into a multiplayer game. This demo will use
the Photon PUN 2 multiplayer framework, but ODIN can be integrated into your game using any multiplayer solution or
even without multiplayer. The ODIN-Demo itself also allows us to easily switch out Photon for another framework.</p>
<p>If you are unsure why you should use ODIN for that, learn more about our features and what makes us special in our <a href="/odin/introduction/">introduction</a>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_sample_unity_pun_screenshot1.webp" title="Click to enlarge" data-lity><img src="/images/odin/odin_sample_unity_pun_screenshot1.webp"
         alt="Screenshot from the sample project" width="100%"/></a><figcaption>
            <p>Screenshot from the sample project</p>
        </figcaption>
</figure>
<h2 id="how-does-it-work">How does it work?</h2>
<p>The basic network topology looks like this:</p>
<pre><code class="language-mermaid">graph LR
  subgraph ODIN Server
    OR[Odin Room]    
  end
  subgraph Photon Cloud
    GS[Gameserver]
  end
  subgraph Game
    GS[Game Server] --&gt; ClientA[Player A] --&gt; OR[ODIN Room]
    GS[Game Server] --&gt; ClientB[Player B] --&gt; OR[ODIN Room]     
    GS[Game Server] --&gt; ClientC[Player C] --&gt; OR[ODIN Room]     
  end
</code></pre>
<p>Players connect to the Photon PUN 2 cloud and use that to sync the players position, name and colors. Every
player is also connected to the same ODIN room - therefore all players that see each other also hear each other - of course only if they are close enough to each other and there is no wall between them.</p>
<p>In other voice SDKs you would need to transfer a lot of information to the voice cloud or you would need to process
the game world to set the volume and balance of players. We can improve a lot on this process.</p>
<p>In ODIN, nothing like that is required. There is one place where all information comes together: Within the player&rsquo;s
Unity game client. Therefore, ODIN just uses the game engines audio features.
You only need to map the corresponding player media stream coming from the ODIN server to the correct GameObject
representing the player and use <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to attach it. That&rsquo;s it.</p>
<p>The sample comes with the <span class="external-reference">AOdinMultiplayerAdapter <a href="https://github.com/4Players/odin-unity-demo/blob/master/ODIN-SampleProject/Assets/ODIN-Sample/Scripts/Runtime/ODIN/AOdinMultiplayerAdapter.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 class - it&rsquo;s an
abstract base class that you can use to implement a mapping solution for any multiplayer framework. If you are
using Photon PUN2, you can just use our implementation for that adapter for PUN 2: <span class="external-reference">PhotonToOdinAdapter <a href="https://github.com/4Players/odin-unity-demo/blob/master/ODIN-SampleProject/Assets/ODIN-Sample/Scripts/Runtime/Photon/PhotonToOdinAdapter.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
<h2 id="cloning-the-repository">Cloning the repository</h2>
<p><strong>Please note</strong>: The repository uses LFS. You need to clone this repo with LFS enabled. <strong>Downloading the ZIP file via Githubs Download ZIP functionality does not work!</strong></p>
<p>To enable git lfs, enter <code>git lfs install</code> in your git bash in your local repository.</p>
<h2 id="project-structure">Project Structure</h2>
<p>The ODIN-Demo project&rsquo;s scripts are split up into the categories:</p>
<ul>
<li><strong>Audio</strong>: Scripts in here handle the custom Audio System behaviour like directional audio and occlusion effects.</li>
<li><strong>ODIN:</strong> Handles anything related to core ODIN-features, without external dependencies. If you&rsquo;d like to use a multiplayer framework other than Photon, you can safely reuse the files contained in this assembly.</li>
<li><strong>Photon:</strong> Anything Photon specific is contained in here, like joining Photon Rooms or synchronizing Player Position.</li>
<li><strong>GameLogic:</strong> Anything else required for the demo, like the player&rsquo;s movement or view state (1st-person or 3rd-person).</li>
</ul>
<p>You can find demo settings in the <code>Assets &gt; ODIN-Demo &gt; Settings</code> directory, e.g. settings for the occlusion effects, ODIN room names, Push-To-Talk settings and Input definitions. Any prefabs used in the demo can be found in the <code>Assets &gt; ODIN-Demo &gt; Prefabs</code> directory, with the player prefab being located in the <code>Resources</code>.</p>
<p>The demo scene&rsquo;s hierarchy contains three root game objects used for categorizing behaviours:</p>
<ul>
<li><strong>Environment:</strong> Contains all visible objects or lights that contain the scene&rsquo;s visuals.</li>
<li><strong>Gamelogic:</strong> Behaviours like the <code>PhotonPlayerSpawner</code> or the ODIN room join logic are placed here.</li>
<li><strong>UI:</strong> The root object for in-game UI, like the settings menu or the radio room&rsquo;s active user display.</li>
</ul>
<h2 id="odin-terms-and-behaviours">ODIN terms and behaviours</h2>
<p>This is a short introduction into the most important ODIN terms - for more in-depth information <a href="https://developers.4players.io/odin/introduction/">please take a look at the ODIN documentation</a>.</p>
<h3 id="rooms-peers-and-media">Rooms, Peers and Media</h3>
<p>Every client connects to an ODIN server, authenticates with an access token and joins a room. Once the client has joined a room, they are a peer inside the ODIN room. Every peer can add media to that room, linked to a physical device like a microphone. Clients can join multiple rooms at the same time and can add multiple media streams at the same time.</p>
<p>To find more information on the basic ODIN topology, <a href="https://developers.4players.io/odin/introduction/structure/">please take a look at the Basic Concepts documentation</a>.</p>
<h3 id="odinhandler">OdinHandler</h3>
<p>The OdinHandler script is a singleton behaviour, wrapping the functionality of the native ODIN SDK for use in Unity. You can access the script via <code>OdinHandler.Instance</code>.</p>
<p>The most important use-cases are the <code>OdinHandler.Instance.JoinRoom</code> method for joining ODIN rooms and the events for listening for ODIN events, like <code>OnRoomJoin</code>, <code>OnPeerJoined</code> and <code>OnMediaAdded</code>. To use the <code>OdinHandler</code>, make sure to add a variant of the <code>OdinManager</code> prefab into your project. The prefab also contains the <code>OdinEditorConfig</code> script, which allows us to set the Access Key and Room Audio Processing settings in the inspector.</p>
<p>If you don&rsquo;t yet have an ODIN subscription and just want to test out ODIN&rsquo;s functionality, you can use a generated key by pressing the <strong>Manage Access</strong> Button and then selecting <strong>Generate Access Key</strong>. The resulting access keys can be used to access the ODIN network with up to 25 concurrently connected users free of charge.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-OdinManager.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-OdinManager.webp"
         alt="The OdinManager prefab in the inspector view." width="100%"/></a><figcaption>
            <p>The OdinManager prefab in the inspector view.</p>
        </figcaption>
</figure>
<h3 id="playbackcomponent">PlaybackComponent</h3>
<p>The ODIN SDK provides the <code>PlaybackComponent</code> script to easily play back audio data received from
the ODIN server. Each <code>PlaybackComponent</code> represents one media stream and is identified by a media id, a
peer id and a room name.</p>
<h3 id="user-data">User Data</h3>
<p>Every peer in Unity can store arbitrary information as user data. When local user data is updated, the server updates user data on all clients. Read more about user data in the guide: <a href="https://developers.4players.io/odin/guides/unity/user-data/">Understanding User Data</a>.</p>
<h2 id="multiplayer">Multiplayer</h2>
<h3 id="lobby">Lobby</h3>
<p>Because ODIN works framework independent, we won&rsquo;t go too much into detail on how to set up Photon - for an in-depth explanation, <a href="https://doc.photonengine.com/en-us/pun/current/getting-started/pun-intro">please take a look at Photon&rsquo;s starter guide</a>.</p>
<p><strong>Note:</strong> When first entering the Unity project, Photon will require you to add an App Id - simply follow the instructions to add or create your own App Id.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-Lobby.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-Lobby.webp"
         alt="The Lobby Scene." width="100%"/></a><figcaption>
            <p>The Lobby Scene.</p>
        </figcaption>
</figure>
<p>We wait for a connection to the photon network, before allowing users to join a Photon room. In the demo we&rsquo;ll simply add all players to the same room. We also use the <code>PhotonNetwork.AutomaticallySyncScene = true</code> option to automatically load the correct scene for each player joining.</p>
<p>After pressing the <code>Join</code> Button, the player will either connect to an existing Photon room or create a new Photon room as a Master Client. As a master client, we&rsquo;ll use the call:</p>
<pre><code class="language-c#">    PhotonNetwork.LoadLevel(sceneToLoad);
</code></pre>
<p>Otherwise Photon will automatically load the correct scene.</p>
<h3 id="demo-level">Demo Level</h3>
<p>When entering the Demo Level scene, two things happen:</p>
<ol>
<li>
<p>We instantiate the player over the Photon network using <code>PhotonNetwork.Instantiate</code> and the <code>ODINPlayer</code> prefab. This is kicked off by the <code>PhotonPlayerSpawner</code> script on Start. <strong>Note:</strong> The player prefab needs to be located in a <code>Resources</code> subdirectory, in order for Photon to be able to instantiate the player correctly.</p>
</li>
<li>
<p>We automatically connect to two ODIN rooms (Voice and Radio) with</p>
</li>
</ol>
<pre><code class="language-c#">OdinSampleUserData userData = new OdinSampleUserData(refPlayerName.Value);
OdinHandler.Instance.JoinRoom(refRoomName.Value, userData);
</code></pre>
<p>We don&rsquo;t have to send user data when joining an ODIN room, but in this case we already have access to the player name from the value entered in the Lobby scene, so it makes sense to supply it while joining.</p>
<p><code>OdinSampleUserData</code> is a serializable C# class which implements the <code>IUserData</code> interface. This is a requirement for any userdata transmitted using ODIN. The interface member function <code>ToBytes()</code> simply provides an UTF8 encoding of a JSON representation of the class. The class contains app specific properties like the player&rsquo;s name, his capsule color and a unique user id. The unique user id is used to connect an ODIN media stream to a Photon View - specifically the unique user id is equal to the photon view id - and therefore required for the proximity chat.</p>
<h2 id="odin">ODIN</h2>
<h3 id="global-voice-chat---radio-transmissions">Global Voice Chat - Radio transmissions</h3>
<p>In the demo project, users automatically join the ODIN room named <em>Radio</em>, in
which players can communicate as if using radio transmitters - when pressing down the <code>V</code> key, the microphone input
can be heard by all players in the room independent of their position.</p>
<p>For this scenario, the demo project provides the <code>OdinDefaultUser</code> script, which uses the
<code>OdinHandler.Instance.OnMediaAdded</code> Event to spawn an instance of a prefab with a <code>PlaybackComponent</code> for
each media stream in the ODIN room. The event provides the room name, peer id and media id required
for the <code>PlaybackComponent</code> to work.</p>
<p>We added the <code>OdinDefaultUser</code> script as a local-player-only behaviour - so it will only spawn Playbacks as children of the Player.
This doesn&rsquo;t matter for our radio transmissions, because they can be heard globally and shouldn&rsquo;t react to the distance between the
local Player and remote Players. It also ensures, that each radio stream will only be spawned once for the player. But it also
entails that the <code>OdinDefaultUser</code> script should only be used for ODIN rooms which do not make use of proximity voice chat.</p>
<p>In the next paragraph we&rsquo;ll take a look at how the Tech Demo implements a Proximity Chat which reacts to the distance between local Player and remote Players. We&rsquo;ll also take a look at how to create the &ldquo;Radio Crackling&rdquo; Effect in paragraph <a href="#playback-settings---distance-and-radio-effects">Playback Settings</a>.</p>
<h3 id="proximity-chat---connecting-odin-to-the-multiplayer-framework">Proximity Chat - connecting ODIN to the multiplayer framework</h3>
<p>In a multiplayer scenario, we encounter the issue of connecting a user&rsquo;s ODIN media stream to the user&rsquo;s avatar
in the game, e.g. in our demo project we&rsquo;d want a player&rsquo;s voice in the proximity chat to come
from the player&rsquo;s capsule. But because ODIN and the multiplayer framework don&rsquo;t know of each other&rsquo;s existence, we first have to logically connect the two concepts.</p>
<p>The abstract <code>AOdinMultiplayerAdapter</code> script gives access to the methods <code>string GetUniqueUserId()</code> and
<code>bool IsLocalUser()</code>. This adapter is used to connect the player&rsquo;s representation in the multiplayer
framework (using the framework&rsquo;s equivalent of an unique user id) to an ODIN peer. On ODIN&rsquo;s side we use
custom user data to keep track of that id. When joining an ODIN room, the <code>AOdinMultiplayerAdapter</code>
automatically sets the <code>uniqueUserId</code> of our custom ODIN user data for the current peer and sends an
update to the other peers in the room. On receiving the update, those clients then use a reference to <code>AOdinMultiplayerAdapter</code>
to compare the remote peer&rsquo;s <code>uniqueUserId</code> to the id supplied by the remote adapter&rsquo;s <code>GetUniqueUserId()</code>.
If both ids are equal,we know that an ODIN peer is represented by the referenced <code>AOdinMultiplayerAdapter</code>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-AdapterDiagram.svg" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-AdapterDiagram.svg"
         alt="Diagram showcasing the adapter pattern for connecting ODIN to a multiplayer framework." width="100%"/></a><figcaption>
            <p>Diagram showcasing the adapter pattern for connecting ODIN to a multiplayer framework.</p>
        </figcaption>
</figure>
<p>In the demo project
we use this information to correctly play black the proximity chat audio at a player&rsquo;s location -
specifically using the <code>Odin3dAudioVoiceUser</code>, which automatically creates a <code>PlaybackComponent</code> for each remote user.</p>
<p>The demo project utilizes Photon as a multiplayer framework, so we add the
<code>PhotonToOdinAdapter</code> to our player. The adapter uses <code>PhotonView.ViewID</code> as a unique user id and
<code>PhotonView.IsMine</code>
to determine whether the adapter represents a local or a remote player. To switch out Photon for another
multiplayer framework, simply provide your own class extending <code>AOdinMultiplayerAdapter</code>.</p>
<h3 id="playback-settings---distance-and-radio-effects">Playback Settings - Distance and Radio Effects</h3>
<p>ODIN relies on Unity&rsquo;s <code>AudioSource</code> Components to play Media Streams. We can therefore just use the built in functionality of Audio Sources to adjust the distance at which players can hear each other. For any <code>AOdinUser</code> implementation (i.e. <code>OdinDefaultUser</code> for Radio transmissions and <code>Odin3dAudioVoiceUser</code> for Proximity Voice Chat) we can reference a prefab that will be spawned for each
Media Stream. These Prefabs not only have a <code>PlaybackComponent</code> on them, but also contain an <code>AudioSource</code>. So, to change the Playback Behaviour of Media Streams in-game, we have to change the <code>AudioSource</code> Settings on the prefab. The Tech Demo uses the prefabs <code>OdinRadioAudioSource</code> and <code>OdinVoiceAudioSource</code> in the <code>ODIN-Sample &gt; Prefabs</code> folder.</p>
<p>The <code>OdinRadioAudioSource</code> prefab simply has a full 2D <code>Spatial Blend</code> setting and the <code>Bypass Reverb Zone</code> enabled. The latter lets us avoid Unity&rsquo;s Reverb Zones, e.g. Echo effects in large rooms. The most interesting setting can be found in the <code>Output</code> option - here we reference an Audio Mixer Group Controller. The Radio Group Controller defines the list of effects that the incoming Radio room Media Streams go through, before being output to the User. The combination of these effects creates the Radio&rsquo;s crackling effect, giving Players a more immersive experience.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-RadioEffects.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-RadioEffects.webp"
         alt="The Radio Mixer Settings for creating the crackling effect." width="100%"/></a><figcaption>
            <p>The Radio Mixer Settings for creating the crackling effect.</p>
        </figcaption>
</figure>
<p>The <code>OdinVoiceAudioSource</code> prefab on the other hand has a full 3D <code>Spatial Blend</code> setting and does not bypass reverb zones - we want this <code>AudioSource</code> to simulate a human voice in the real world, which is naturally affected by the environment. The prefab uses the 3D Sound Settings of the <code>AudioSource</code> component to further specify this effect - the <code>Min Distance</code> value defines the distance at which the voice will be heared at full volume and the <code>Max Distance</code> defines the distance at which we won&rsquo;t hear the voice anymore.
Additionally we can see the <code>Volume Rolloff</code> set to <code>Logarithmic Rolloff</code> - this best approximates a real world setting. If required, the rolloff can easily be customized by choosing a linear or custom setting.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-ProximitySettings.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-ProximitySettings.webp"
         alt="The AudioSource component&amp;rsquo;s 3D sound settings." width="100%"/></a><figcaption>
            <p>The AudioSource component&rsquo;s 3D sound settings.</p>
        </figcaption>
</figure>
<p>These three options majorly define the fading behaviour of a player&rsquo;s voice in the distance - at least when there aren&rsquo;t any objects between the audio source and listener. Occlusion effects are not part of Unity&rsquo;s Audio System, but we&rsquo;ve included our own, custom solution for this in the Tech Demo, which is explained in-depth in the <a href="#audio-occlusion">Audio Occlusion paragraph</a>.</p>
<h3 id="proximity-chat---room-optimization">Proximity Chat - Room Optimization</h3>
<p>Another feature of ODIN is, that the ODIN servers can automatically stop the transmission of Media Streams based on the spatial distance between the local player and other players in the ODIN room. This allows us to optimize the bandwidth required for each player, avoiding unnecessary downstreams for voice transmissions that can&rsquo;t be heard by the player due to distance anyway! Of course, we only want to use this for proximity-based ODIN rooms, not for global rooms like the Radio Chat.</p>
<p>To enable this feature, we use the methods</p>
<pre><code class="language-c#">room.SetPositionScale(scale);
</code></pre>
<p>and</p>
<pre><code class="language-c#">room.UpdatePosition(position.x, position.y);
</code></pre>
<p>As ODIN is not aware of the scale your game is operating at, it initially uses a Unit Circle as the cutoff radius. If we use the <a href="#playback-settings---distance-and-radio-effects">previously mentioned</a> <code>Max Distance</code> to calculate <code>scale</code> as</p>
<pre><code class="language-c#">float scale = 1.0f / MaxVoiceDistance;
</code></pre>
<p>we can automatically disable streams that wouldn&rsquo;t be transmitted by the <code>Audio Source</code> due to distance anyway.</p>
<p><strong>Note:</strong> 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&rsquo;s optimization feature.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Invoking <code>room.UpdatePosition</code> too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling <code>room.UpdatePosition</code> to a maximum of 10 times per second. This equates to one update every 100 milliseconds. We recommend using a Unity <code>Coroutine</code> to update the position in Odin rooms.</p>
</div>
</div>

<p>For ODIN to be able to use the distance values for optimization, we have to transmit player positions at regular intervals. The function <code>room.UpdatePosition</code> lets us define the client&rsquo;s current position in the room. If we define the correct room scale, we can simply use the player&rsquo;s <code>transform.position</code> x and z values.</p>
<p><strong>Note:</strong> For now, we can only transmit 2D positions with this method. But as most games have a wide horizon and aren&rsquo;t scaled vertically, this is not a real drawback.</p>
<p>In the Tech Demo, the <code>OdinPositionUpdate</code> component regularly updates the player&rsquo;s position. Using entries to the Room Settings array on the <code>OdinPositionUpdateSettings</code> scriptable object, we can define the activation status and the cutoff radius for each ODIN room individually.</p>
 <figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-RoomOptimization.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-RoomOptimization.webp"
          alt="The ODIN room optimization and position update settings." width="100%"/></a><figcaption>
             <p>The ODIN room optimization and position update settings.</p>
         </figcaption>
 </figure>
<h3 id="push-to-talk">Push-To-Talk</h3>
<p>Push-To-Talk is handled by the <code>OdinPushToTalk</code> script using settings defined in a <code>OdinPushToTalkSettings</code> scriptable object. If the push-to-talk button for a specific room is pressed, the script will access the user&rsquo;s mediastream and set a user&rsquo;s mute status using <code>targetRoom.MicrophoneMedia.SetMute()</code>.</p>
<p>The <code>OdinPushToTalkSettings</code> scriptable object allows rooms to be either be voice-activated or require a button press to talk - if you&rsquo;d like to make this available as a user-setting, you can use the <code>OdinPushToTalkSettingsController</code>, which automatically sets the room&rsquo;s activation method based on a Unity Toggle. Take a look at the Tech Demo&rsquo;s <code>Settings</code> prefab (found in <code>ODIN-Sample &gt; Prefabs &gt; UI</code>) for more information.</p>
<h3 id="audio-filter-settings">Audio Filter Settings</h3>
<p>The ODIN SDK provides quite a few Room Audio Processing settings, like Voice Activity Detection, Echo Cancellation, Noise Suppression levels and more. If you&rsquo;re content with using the same settings for all users, you can simply adjust the values on the <code>OdinManager</code> prefab (<a href="#odinhandler">as shown here</a>).</p>
<p>The Tech Demo has a sample implementation on how to allow users to adjust these settings in the game. The <code>Settings</code> prefab (found in  <code>ODIN-Sample &gt; Prefabs &gt; UI</code>) uses Unity&rsquo;s <code>Toggle</code>, <code>Slider</code> and <code>Dropdown</code> UI components to adjust the Audio Settings. The <code>OdinAudioFilterSetingsController</code> script contains entries that map the UI component&rsquo;s input to ODIN&rsquo;s filter values and even stores the changes to file. For a fast integration into your game, you can use the Tech Demo implementation and adjust the UI graphics to your liking.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-AudioFilterSettings.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-AudioFilterSettings.webp"
         alt="The UI for adjusting the Audio Filter Settings." width="100%"/></a><figcaption>
            <p>The UI for adjusting the Audio Filter Settings.</p>
        </figcaption>
</figure>
<h3 id="choosing-an-input-device">Choosing an Input Device</h3>
<p>The previously mentioned <code>Settings</code> prefab also allows players to choose their input device. The options that are available are based on Unity&rsquo;s <code>Microphone.devices</code> ouput and displayed in the dropdown component. Updating the input device used by ODIN is then as simple as calling</p>
<pre><code class="language-c#">MicrophoneReader microphoneReader = OdinHandler.Instance.Microphone;
microphoneReader.StopListen();
microphoneReader.CustomInputDevice = true;
microphoneReader.InputDevice = selectedDevice;
microphoneReader.StartListen();
</code></pre>
<p>where the <code>selectedDevice</code> is one of the string options listed in the <code>Microphone.devices</code> array. The Tech Demo uses the implementation in the <code>OdinMicrophoneController</code> script, which also handles saving and loading the users selection in previous game sessions.</p>
<h2 id="audio">Audio</h2>
<p>To better showcase the capabilities of ODIN in apps and games, we&rsquo;ve implemented some audio
features that are often used in games, but not included in Unity&rsquo;s Audio System: Audio Occlusion and Directional Audio. Because we want to keep things simple and performant, we&rsquo;re going to approximate those effects, using Unity&rsquo;s <code>AudioLowPassFilter</code> component
and by adjusting the volume of individual audio sources.</p>
<h3 id="audio-occlusion">Audio Occlusion</h3>
<p>Audio Occlusion should occur when an object is placed between the audio listener (our player) and audio sources in the scene - e.g.
hearing the muffled sounds of an enemy approaching from behind a wall.
Unity does not have any kind of built-in audio occlusion, so we need to implement our own system.
The <code>OcclusionAudioListener</code> script contains most of the occlusion logic and is placed, together with the <code>AudioListener</code> script,
on our local player object. The <code>OcclusionAudioListener</code> registers objects with colliders, that enter the detection range and have at least one <code>AudioSource</code> script attached in the transform hierarchy. By default the detection range
is set to 100 meters - Audio Sources that are farther away than that are usually
not loud enough to be affected meaningfully by our occlusion system.
We then apply the occlusion effects to each of the registered Audio Sources in every frame.</p>
<p>Our occlusion effects have the parameters
<code>Volume</code>, <code>Cutoff Frequency</code> and <code>Lowpass Resonance Q</code>:</p>
<ul>
<li><strong>Volume:</strong> Multiplier for the audio source&rsquo;s volume.</li>
<li><strong>Cutoff Frequency:</strong> Removes all frequencies above this value from the output of the Audio Source. This value is probably
the most important for our occlusion effect, as is makes the audio sound muffled. The cutoff frequency can range
from 0 to 22.000 Hz.</li>
<li><strong>Lowpass Resonance Q:</strong> This value determines how much the filter dampens self-resonance. This basically means, the
higher the value, the better sound is transmitted through the material the filter is representing. E.g. for imitating an iron
door, the <code>Lowpass Resonance Q</code> value should be higher than for imitating a wooden door.</li>
</ul>
<p>The occlusion effect is based on the thickness of objects between our
<code>AudioListener</code> and the <code>AudioSource</code>. For each audio source we check for colliders placed between the listener and the source using raycasts and
determine the thickness of the collider. This thickness value is then used to look
up the final effect values from an <code>AudioEffectDefinition</code> ScriptableObject. For each of
the three parameters <code>Volume</code>, <code>Cutoff Frequency</code> and <code>Lowpass Resonance Q</code> the ScriptableObject
contains a curve, which maps from the collider&rsquo;s thickness on the x-Axis to the parameter value
on the y-Axis.</p>
<p>The image below shows an Audio Effect Definition Scriptable Object for the Concrete material. When selecting the <code>Cutoff Frequency Curve</code>, Unity&rsquo;s Curve Editor window shows up to allow finetuning the settings. The x-axis displays the thickness of an occluding object in meters. The curve then maps to the cutoff frequency displayed on the y-axis.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-OcclusionEffectSettings.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-OcclusionEffectSettings.webp"
         alt="The Audio Effect Definition Scriptable Object." width="100%"/></a><figcaption>
            <p>The Audio Effect Definition Scriptable Object.</p>
        </figcaption>
</figure>
<p>The <code>AudioEffectDefinition</code> is retrieved using one of two options:</p>
<ul>
<li>By placing an <code>AudioObstacle</code> script on the collider&rsquo;s gameobject. This can be
used to customize a collider&rsquo;s occlusion effect and give it a certain material&rsquo;s damping
behaviour. The demo uses the <code>AudioObstacle</code> to define the occlusion effect of a brick wall,
a wooden door, a glass pane or even a 100% soundproof barrier.</li>
<li>By falling back to the default <code>AudioEffectDefinition</code> - this option is used, if no <code>AudioObstacle</code>
is attached to the collider.</li>
</ul>
<p>You can create your own <code>AudioEffectDefinition</code> by using the <code>Create &gt; Odin-Sample &gt; AudioEffectDefinition</code>
menu in your project hierarchy.</p>
<h3 id="directional-audio">Directional Audio</h3>
<p>Unity&rsquo;s built in audio system allows us to hear differences between sounds coming from left
or right, but not whether the object is in front or behind us. The <code>DirectionalAudioListener</code> script will take care
of this using basically the same effects as the audio occlusion system.</p>
<p>Similar to the <code>OcclusionAudioListener</code>, we apply an effect to each Audio Source in
the detection range - but instead of using the thickness of objects between source and listener,
we interpolate the effect based on the angle between the listener&rsquo;s forward vector and a vector
pointing from the listener to the audio source.</p>
<p>Note: The implementation currently won&rsquo;t let us differentiate between sound coming from above or below. To implement this behaviour,
please take a look at the implementation of <a href="https://en.wikipedia.org/wiki/Head-related_transfer_function">Head Related Transfer Functions (HRTF)</a>.</p>
<h3 id="environmental-effects">Environmental Effects</h3>
<p>The Tech Demo Level contains a few rooms, that highlight the Audio Occlusion effect for different materials. Additionally, we&rsquo;ve used Unity&rsquo;s <code>AudioReverbZone</code> components to add environmental effects to these rooms, to further increase the players immersion. Unity provides a few presets which simulate different environments - e.g. the Demo Level&rsquo;s &ldquo;Brick Room&rdquo; uses the <code>Stone Corridor</code> preset - but also allows to be set to a custom arrangement. The effect will start to be heared at <code>MaxDistance</code> and is at full force inside of the <code>MinDistance</code> radius.</p>
<p>While the Voice transmissions are affected by the reverb zones, the Radio transmissions are not, due to the <code>Bypass Reverb Zone</code> setting on the Playback Prefab - as described <a href="#playback-settings---distance-and-radio-effects">here</a>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-EnvironmentalEffects.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-EnvironmentalEffects.webp"
         alt="The Brick Room with the highlighted Audio Reverb Zone." width="100%"/></a><figcaption>
            <p>The Brick Room with the highlighted Audio Reverb Zone.</p>
        </figcaption>
</figure>
<h2 id="game-logic">Game Logic</h2>
<h3 id="player-name-and-color-synchronization">Player Name and Color Synchronization</h3>
<p>The <code>OdinNameDisplay</code> and <code>OdinSyncedColor</code> scripts use the ODIN&rsquo;s custom User Data to synchronize the player&rsquo;s name and avatar color. With <code>OdinHandler.Instance.OnPeerUserDataChanged.AddListener()</code> we listen to any changes on a remote peers User Data - if the peer&rsquo;s <code>UniqueUserId</code> equals the Multiplayer Adapter&rsquo;s <code>GetUniqueUserId()</code>, we read the name and display it above the peer&rsquo;s avatar using a world-space canvas and display the color on the avatar&rsquo;s mesh.</p>
<h3 id="mobile-controls">Mobile Controls</h3>
<p>Because ODIN works on mobile platforms, we&rsquo;ve added mobile controls to the Tech Demo. The implementation is based on Unity&rsquo;s new Input System and allows players to move, rotate, use Push-To-Talk and switch from 3rd to 1st-person view with On-Screen controls. Take a look at the <code>UI &gt; MobileControlsCanvas</code> in the DemoLevel scene&rsquo;s hierarchy for implementation details. The mobile controls can be simulated in Editor by selecting the <code>Enable in Editor</code> option on the <code>ActivateIfMobile</code> script.</p>
<figure style="max-width: 100%px"><a href="/images/odin/ODIN-TechDemo-MobileControls.webp" title="Click to enlarge" data-lity><img src="/images/odin/ODIN-TechDemo-MobileControls.webp"
         alt="Activated mobile controls in the Tech Demo." width="100%"/></a><figcaption>
            <p>Activated mobile controls in the Tech Demo.</p>
        </figcaption>
</figure>
<h3 id="toggling-the-in-game-radio-objects">Toggling the in-game radio objects</h3>
<p>The <code>ToggleRadioBehaviour</code> script implements the basic behaviour for turning the in-game radio sources on and off - if an  avatar enters the detection radio, the controlling player will be able to toggle the radio status with a button press. The status then gets synchronized with the <code>PhotonRadioSynchronization</code> behaviour, which listens to the toggle&rsquo;s <code>onRadioToggled</code> UnityEvent.</p>
<p>If you&rsquo;d like to implement another multiplayer framework, simply replace the <code>PhotonRadioSynchronization</code> with your own synchronization behaviour.</p>
<h3 id="switching-player-views">Switching Player Views</h3>
<p>Users can switch from 3rd-person to 1st-person view on button press - this is implemented in the <code>ToggleViews</code> script by toggling game objects found in the <code>ODINPlayer &gt; LocalPlayerBehaviours &gt; ControllerState</code> hierarchy of the <code>ODINPlayer</code> prefab. The <code>FirstPersonBehavior</code> object contains the camera and behaviours for 1st-person controls, the <code>ThirdPersonBehavior</code> contains everything for 3rd-person controls.</p>
`}),e.add({id:3566,href:"https://www.4players.io/odin/guides/unity/existing-projects/",title:"ODIN for existing projects",section:"ODIN Documentation",description:"Learn how to integrate ODIN proximity voice chat into your Unity multiplayer game using the open-source Tanknarok Photon Fusion project. Enhance your gaming experience with voice chat, even after release!",content:`<p>David Liebemann at <a href="https://scico.dev">SciCode Studio</a> added ODIN to an existing multiplayer game - the Photon Fusion Tanknarok sample - to showcase the steps you need to take to integrate ODIN&rsquo;s proximity voice chat to your own multiplayer application. Using these tips you can easily add voice chat to your game even after release!</p>
<p>The Unity project is open source and available <a href="https://github.com/scicode-studio/OdinTanknarok">as a Github repository</a>. You can download the binaries to test it here:</p>
<p><a href='https://github.com/scicode-studio/OdinTanknarok/releases/latest' target='' class="btn btn-primary">Download Sample now</a></p>
<h2 id="integrating-odin-into-an-existing-multiplayer-project">Integrating ODIN into an existing multiplayer project</h2>
<p>In this guide we&rsquo;ll show you how to integrate ODIN into an existing multiplayer project. We&rsquo;ll use the Photon Fusion Tanknarok project as a base multiplayer project without any Voice Chat. In just a few steps you&rsquo;ll learn how to take your project to the next level by integrating ODIN and adding proximity voice chat.</p>
<p>Photon Fusion is a multiplayer framework used in many Unity games. We use it and the Tanknarok Sample Project to give you an idea of how you can integrate ODIN into an existing, fully functional project. The same principles will of course also work for projets developed with Mirror or Unity Netcode. We&rsquo;ve even created a guide showing you how to <a href="/odin/guides/unity/unity-mirror/">set up a simple Mirror multiplayer game with ODIN integration</a>.</p>
<p>If you&rsquo;re completely new to ODIN and would like to learn more about our features and what makes us special, take a look at our <a href="/odin/introduction/">introduction</a>.</p>
<h2 id="project-setup">Project Setup</h2>
<p>First, we&rsquo;ll download the base project <a href="https://doc.photonengine.com/en-us/fusion/current/samples/game-samples/fusion-tanknarok#download">from the project website</a>. Choose the most up to date version - we&rsquo;ve used Version 1.1.1 - download and then unzip the project files. We can then open the project using the Unity Hub. Just select <strong>Open</strong> and navigate to the folder that contains the project files.</p>
<p><strong>Important:</strong> You need to select the directory that contains the <strong>Assets</strong>, <strong>Packages</strong> and <strong>ProjectSettings</strong> directories, otherwise the Unity Hub won&rsquo;t recognize it as a valid project.</p>
<p>Select the Editor version you&rsquo;d like to use and confirm the <strong>Change Editor version?</strong> prompt. Please note that ODIN requires Unity version 2019.4 or later, but the Tanknarok project was created in 2020.3.35f1 - so we&rsquo;ll need to use that or any later version. In this guide we used version 2021.3.9f1.</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/OpenTanknarok.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/OpenTanknarok.webp"
         alt="Create a new project with the Unity Hub." width="100%"/></a><figcaption>
            <p>Create a new project with the Unity Hub.</p>
        </figcaption>
</figure>
<p>If you see another prompt <strong>Opening Project in Non-Matching Editor Installation</strong>, click the <strong>Continue</strong> button to convert your project.</p>
<p>After opening up, you&rsquo;ll be greeted by the <strong>Welcome to Photon Fusion</strong> prompt, asking you to supply your Fusion App Id. This is required for Photon multiplayer to work. Don&rsquo;t worry, Photon allows a small contingent of 20CCU for test projects, so you won&rsquo;t be billed anything during development. Open up the Dashboard and select the <strong>Create a new app</strong> button. When prompted for a <strong>Photon Type</strong>, select <strong>Fusion</strong>. Finally, copy the App ID of your newly created Application into the field in the Unity Editor and press enter. You should see a small, green check mark, confirming your successful Fusion setup.</p>
<p>If you&rsquo;ve accidentally closed the Photon Fusion Hub you can open it up again by selecting <code>Fusion &gt; Fusion Hub</code> from the Unity Editor menus or press <strong>Alt+F</strong>.</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/FusionId.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/FusionId.webp"
         alt="The Photon Hub with a valid Fusion Id." width="100%"/></a><figcaption>
            <p>The Photon Hub with a valid Fusion Id.</p>
        </figcaption>
</figure>
<p>Great - now we&rsquo;ve got the base project set up, let&rsquo;s take a look at the interesting stuff: Getting Voice Chat into a game.</p>
<h2 id="odin-installation">ODIN installation</h2>
<p>First, let&rsquo;s install ODIN into our project. ODIN can be imported using either a <code>.unitypackage</code> or by using Unity&rsquo;s Package Manager and Git. We recommend  the package manager, because it is easier to keep ODIN up to date. If you don&rsquo;t have Git set up, you can still fall back to the Unity package.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Select <code>Window &gt; PackageManager</code> to open up Unity&rsquo;s Package Manager. In the top left, select the <strong>+</strong> symbol to add a new package and select <strong>Add package from git URL</strong>. Use the URL</p>
<p><code>https://github.com/4Players/odin-sdk-unity.git</code></p>
<p>and select <strong>Add</strong>. The Package Manager will now download the newest release and resolve any dependencies.</p>
<h3 id="unity-package">Unity Package</h3>
<p>Download the latest ODIN version as a <code>.unitypackage</code> from <a href="https://github.com/4Players/odin-sdk-unity/releases">https://github.com/4Players/odin-sdk-unity/releases</a>. Use the <code>Assets &gt; Import Package &gt; Custom Package...</code> option and navigate to the downloaded file. Make sure that all Assets are selected and press <strong>Import</strong>.</p>
<h2 id="quick-setup">Quick Setup</h2>
<p>Next, we&rsquo;ll perform the basic setup for ODIN. Let&rsquo;s open the <strong>MainScene</strong> in the directory <code>Assets &gt; Scenes</code>. This is the startup scene in which Fusion lets you choose the Network Modes. This scene will also persist in all other scenes - any lobby or gameplay scenes will be loaded in addition to the main scene.</p>
<p>In this scene we will now add the <strong>OdinManager</strong> prefab. This prefab contains scripts which handle communication with ODIN servers and allow you to adjust settings. You can find all ODIN files under <code>Packages &gt; 4Players ODIN</code> in the Project Window. Navigate to <code>Packages &gt; 4Players ODIN &gt; Runtime</code> and drag the <strong>OdinManager</strong> into the scene. Your Scene should now look something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/QuickSetup.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/QuickSetup.webp"
         alt="The OdinManager in the Main Scene." width="100%"/></a><figcaption>
            <p>The OdinManager in the Main Scene.</p>
        </figcaption>
</figure>
<p>For ODIN to work, we need an Access Key. Select the <strong>OdinManager</strong> object in the scene and open the <strong>Client Authentication</strong> drop-down in the Inspector window. ODIN is free to use for up to 25 concurrent users, without requiring an account. Simply press the <strong>Manage Access</strong> button, click on <strong>Generate Access Key</strong> and we&rsquo;re good to go.</p>
<p>We&rsquo;ll do a quick test to see if everything was set up correctly. Let&rsquo;s create a new folder <code>ODIN</code> in the <code>Assets</code> directory and then add the new script <code>OdinConnectionTest</code>. This script will contain the following:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Testing the ODIN Connection
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">public class OdinConnectionTest : MonoBehaviour
{
    [SerializeField] public string roomName;
    void Start()
    {
        OdinHandler.Instance.JoinRoom(roomName);    
    }
}
</code></pre>
</div>
</div>

<p>We use the <code>OdinHandler.Instance</code> singleton to join an ODIN room with the name given by the field <code>roomName</code>. The <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 script is the main entry point for interacting with the ODIN Api, persists through scene changes and can be accessed anywhere in your code by using <code>OdinHandler.Instance</code>.</p>
<p>Every client connects to an ODIN server, authenticates with an access token and joins a room. Once the client has joined a room, they are a peer inside the ODIN room. Every peer can add a media stream to that room to transmit their microphone input. Clients can join multiple rooms at the same time and can add multiple media streams at the same time.</p>
<p>Only clients in the same room can actually hear each other, so you can implement features like a global voice chat for all players and sepearte team voice chats, in which only members of the same team can communicate which each other.</p>
<p>To find more information on the basic ODIN topology, <a href="/odin/introduction/structure/">take a look at the Basic Concepts documentation</a>.</p>
<p>For now, we only want to join a room, so the <strong>OdinConnectionTest</strong> script is enough for our purposes. Let&rsquo;s create a new empty GameObject in the scene hierarchy and add the <strong>OdinConnectionTest</strong> component to it. Finally, enter a creative room name (like &ldquo;Test&rdquo;) and our test setup is complete. Your project should now look something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/ConnectionTest.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/ConnectionTest.webp"
         alt="Our test scene." width="100%"/></a><figcaption>
            <p>Our test scene.</p>
        </figcaption>
</figure>
<p>To test the project, we&rsquo;ll need create a Build and run it in parallel to the editor. This way we can test everything on the same computer. Press <code>Ctrl+Shift+B</code> or use the <code>File &gt; Build Settings...</code> menu to show the Build Settings window. Make sure that the <strong>MainScene</strong>, <strong>Lobby</strong>, <strong>Level1</strong> and <strong>Level2</strong> scenes are shown and selected in the build list. Click on <strong>Build And Run</strong>, select a directory in which your binaries will be created and wait until the Build was started. Switch to the Editor, press play and you should now be able to hear your own voice transmitted via ODIN.</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/BuildSettings.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/BuildSettings.webp"
         alt="The Build Settings for testing our voice chat locally." width="100%"/></a><figcaption>
            <p>The Build Settings for testing our voice chat locally.</p>
        </figcaption>
</figure>
<p>Congratulations, you&rsquo;ve officially added Voice Chat to a Multiplayer Game! But right now it doesn&rsquo;t matter where the players are positioned - in fact, we can hear all players in the Start Screen, without having to enter the game. In a real game this would probably become quite chaotic quite fast, so let&rsquo;s improve that and switch to a Proximity Voice Chat.</p>
<h2 id="proximity-voice-chat">Proximity Voice Chat</h2>
<h3 id="joining-and-leaving">Joining and leaving</h3>
<p>First, let&rsquo;s remove the TestConnection object from the MainScene, we won&rsquo;t need it anymore. Instead, we&rsquo;ll use the Player object itself to control when to join or leave a room. Because the Player object is automatically instantiated in the scenes that should allow Voice Chat - i.e. in the lobby and the gameplay levels - it&rsquo;s the perfect fit for us.</p>
<p>You can find the Player prefab in <code>Assets &gt; Prefabs &gt; Game &gt; PlayerTank</code>. Let&rsquo;s create a new script called <code>OdinLocal</code> and add it to the <strong>PlayerTank</strong> prefab root. This script will from now on handle joining and leaving the room.</p>
<p>Just as before we&rsquo;ll create a string field to allow us to define the room name and join the ODIN room in <code>Start()</code>, but we&rsquo;ll also leave the room in <code>OnDestroy()</code>. Now the voice chat will only be active in the lobby and gameplay levels. But because the <code>PlayerTank</code> is instantiated for each player in the scene - both the remote and local players - the <code>JoinRoom</code> function will be called for each player that enters a lobby. We need a way to differentiate between our local player and the remote clients.</p>
<p>We&rsquo;ll use Fusion&rsquo;s <code>NetworkObject</code> for this. This behaviour assigns a network identity to a <code>GameObject</code> and allows us to identify players in our game. We get a reference to the <code>NetworkObject</code> and store wether the player is local in our new <code>_isLocal</code> variable by requesting <code>networkObject.HasStateAuthority</code>. This will only be <code>true</code> on the local player. Before joining or leaving a room, we add a check for <code>_isLocal</code>. Your script should look something like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Joining as the local player.
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">using Fusion;
using UnityEngine;

public class OdinLocal : MonoBehaviour
{
    [SerializeField] private string roomName = &quot;Proximity&quot;;
    private bool _isLocal;

    private void Start()
    {
        NetworkObject networkObject = GetComponent&lt;NetworkObject&gt;();
        _isLocal = networkObject.HasStateAuthority;
        if(_isLocal)
            OdinHandler.Instance.JoinRoom(roomName);
    }

    private void OnDestroy()
    {
        if(_isLocal)
            OdinHandler.Instance.LeaveRoom(roomName);
    }
}
</code></pre>
</div>
</div>

<h3 id="playback-prefab">Playback Prefab</h3>
<p>ODIN uses the default <code>AudioSource</code> behaviours to play back incoming voice streams. It seemlessly integrates into the Audio system and allows us to adjust all settings just as we&rsquo;re used to from Unity. The connection between these so called <strong>Media Streams</strong> and the <code>AudioSource</code> behaviours is handled by the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
. Until now ODIN has automatically created and destroyed the components. But now we need more control over the <code>AudioSource</code> settings, especially the 3D sound options, which means we have to handle spawning of these behaviours ourselves.</p>
<p>Let&rsquo;s setup a custom Playback Prefab. Create a new gameobject in your scene hierarchy, call it <strong>CustomPlayback</strong> and add a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 in the Inspector - an <code>AudioSource</code> will automatically be added. To change the spatial mode of the audio source from 2D to 3D, set the <code>Spatial Blend</code> slider to a value of <strong>1</strong>. We can also adjust the 3D Sound Settings - for the <strong>Tanknarok</strong> we&rsquo;ve chosen a <code>Min Distance</code> of <strong>2</strong> and a <code>Max Distance</code> <strong>100</strong>, but you can of course adjust this and any other settings to your preferred values. Finally, convert the object to a prefab and remove the object from the scene.</p>
<p>Next we need to implement a behaviour that handles the spawning of our Playback objects. We create a new script <code>OdinRemote</code> and add it to the <code>PlayerTank</code> prefab. We set up a reference to our <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 prefab and - in the Inspector - drag the previously created prefab into the field. Your <code>PlayerTank</code> prefab should look like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/PlayerTankSetup.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/PlayerTankSetup.webp"
         alt="The PlayerTank prefab." width="100%"/></a><figcaption>
            <p>The PlayerTank prefab.</p>
        </figcaption>
</figure>
<p>Then we start listening to our first Odin event - the <code>OdinHandler.Instance.OnMediaAdded</code> event. <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 gets invoked everytime a new Media Stream is added to an ODIN room our player is connected to. In order for the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 to work, it needs a room name, peer id and media id. These three values uniquely identify a Media Stream.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Spawning a playback component.
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">using Fusion;
using OdinNative.Odin.Peer;
using OdinNative.Odin.Room;
using OdinNative.Unity.Audio;
using UnityEngine;

public class OdinRemote : MonoBehaviour
{
    // Don't forget to set this value
    [SerializeField] private PlaybackComponent playbackPrefab;
    private PlaybackComponent _spawnedPlayback;

    private void Start()
    {
        OdinHandler.Instance.OnMediaAdded.AddListener(MediaAdded);
    }

    private void MediaAdded(object roomObject, MediaAddedEventArgs eventArgs)
    {
        ulong peerId = eventArgs.PeerId;
        long mediaId = eventArgs.Media.Id;
        
        if (roomObject is Room room)
        {
            NetworkObject networkObject = GetComponent&lt;NetworkObject&gt;();
            bool isLocalPlayer = networkObject.HasStateAuthority;

            if(!isLocalPlayer){
                _spawnedPlayback = Instantiate(playbackPrefab, transform);
                _spawnedPlayback.transform.localPosition = Vector3.zero;
                _spawnedPlayback.RoomName = room.Config.Name;
                _spawnedPlayback.PeerId = peerId;
                _spawnedPlayback.MediaStreamId = mediaId;
            }
            
        }
    }
    
    private void OnDisable()
    {
        if (null != _spawnedPlayback)
            Destroy(_spawnedPlayback.gameObject);
    }
}
</code></pre>
</div>
</div>

<p>We retrieve the peer id and the media id from the <code>MediaAddedEventArgs</code> and the room name from the <code>Room</code> object, after casting. It&rsquo;s important to instantiate the Playback Prefab as a child of the Player object and to reset the local position, to ensure that the <code>AudioSource</code> emits sound from the correct position. We also make sure, that we only spawn Playback components for remote players, we don&rsquo;t want to listen to the local player&rsquo;s voice.</p>
<p>Finally, we need disable the automatic playback spawning of the <code>OdinHandler</code>. We have to activate the <code>Manual positional audio</code> setting on our <strong>OdinManager</strong> object in the scene.</p>
<figure style="max-width: 100%px"><a href="/images/odin/fusion-sample/ManualPositionalAudio.webp" title="Click to enlarge" data-lity><img src="/images/odin/fusion-sample/ManualPositionalAudio.webp"
         alt="We activate Manual positional audio in our OdinHandler script." width="100%"/></a><figcaption>
            <p>We activate Manual positional audio in our <code>OdinHandler</code> script.</p>
        </figcaption>
</figure>
<p><strong>Please Note:</strong> Some implementation choices in the <code>OdinRemote</code> script are due to the way the <strong>Tanknarok</strong> project is set up and to keep the code as short and simple as possible. The sample project does not destroy remote player objects, but instead chooses to reuse them when a remote player rejoins a lobby or game. Therefore we keep track of the spawned playback object and destroy it manually in <code>OnDisable</code>.</p>
<h3 id="identifying-players-with-custom-user-data">Identifying players with custom User Data</h3>
<p>If we now test this with two players in a room, everything will seem to work. Other player&rsquo;s voices lower in volume when driving away and we can hear whether a player is on our right or our left. But as soon as a third player enters the room, there&rsquo;s an issue: because <code>OnMediaAdded</code> gets called for each remote player, our code will instantiate a Playback prefab for each remote player on all remote player objects. We need some way to connect a Media Stream to a Network Object.</p>
<p>ODIN&rsquo;s custom User Data feature is ideal for handling this situation. Every peer connected to a room has its own user data, which is synchronized over the ODIN servers. We can define our own Data class and use the <code>NetworkObject</code>&rsquo;s Id to uniquely connect an ODIN peer to an in-game player object. Let&rsquo;s add our User Data implementation:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Custom User Data implementation.
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">using OdinNative.Odin;

public class CustomUserData : IUserData
{
    public uint NetworkId;
    
    public override string ToString()
    {
        return JsonUtility.ToJson(this);
    }

    public bool IsEmpty()
    {
        return string.IsNullOrEmpty(this.ToString());
    }

    public byte[] ToBytes()
    {
        return Encoding.UTF8.GetBytes(ToString());
    }
}
</code></pre>
</div>
</div>

<p>The <code>IUserData</code> interface and <code>IsEmpty()</code> and <code>ToBytes()</code> implementations are required for ODIN to be able to transmit our custom data. When the data needs to be transmitted, we simply convert the object to a JSON representation using Unity&rsquo;s built-in <code>JsonUtility.TJson</code>. For more information on User Data, <a href="/odin/guides/unity/user-data/">take a look at our &ldquo;Understanding User Data&rdquo; guide</a>.</p>
<p>The important part here is the addition of a <code>NetworkId</code> field. We can now create a new <code>CustomUserData</code> object in our <code>Start</code>method, set the <code>NetworkId</code> and supply the user data in our <code>JoinRoom</code> call. The new <code>Start</code> method in the <code>OdinLocal</code> script will now look like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Sending custom user data during join.
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">...
private void Start()
{
    OdinHandler.Instance.OnMediaAdded.AddListener(OnMediaAddedCallback);

    NetworkObject networkObject = GetComponent&lt;NetworkObject&gt;();
    _isLocal = networkObject.HasStateAuthority;
    if (_isLocal)
    {
        CustomUserData roomData = new CustomUserData
        {
            NetworkId = networkObject.Id.Raw
        };
        OdinHandler.Instance.JoinRoom(roomName, roomData);
    }
}
...
</code></pre>
</div>
</div>

<p>The <code>networkObject.Id.Raw</code> uniquely identifies our local player on the network. ODIN will transfer the custom user data and synchronize it to all peers in the same room. This means, we can now read this value in the <code>OdinRemote</code> script. We do this in the <code>MediaAdded</code> callback:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Connecting media streams to players.
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">...
private void MediaAdded(object roomObject, MediaAddedEventArgs eventArgs)
    {
        ulong peerId = eventArgs.PeerId;
        long mediaId = eventArgs.Media.Id;
        if (roomObject is Room room)
        {
            ulong peerId = eventArgs.PeerId;
            long mediaId = eventArgs.Media.Id;
            if (roomObject is Room room)
            {
                Peer peer = room.RemotePeers[peerId];
                CustomUserData userData = JsonUtility.FromJson&lt;CustomUserData&gt;(peer.UserData.ToString());
                NetworkObject networkObject = GetComponent&lt;NetworkObject&gt;();
                bool isLocalPlayer = networkObject.HasStateAuthority;
                if (!isLocalPlayer &amp;&amp; userData.NetworkId == networkObject.Id.Raw)
                {
                    _spawnedPlayback = Instantiate(playbackPrefab, transform);
                    _spawnedPlayback.transform.localPosition = Vector3.zero;
                    _spawnedPlayback.RoomName = room.Config.Name;
                    _spawnedPlayback.PeerId = peerId;
                    _spawnedPlayback.MediaStreamId = mediaId;
                }
            }
        }
...
</code></pre>
</div>
</div>

<p>We first retrieve the <code>Peer</code> object from the rooms <code>RemotePeers</code> array with the peer id. The array contains a list of all remote peers connected to the ODIN room. The peer allows us to access the user data as a generic <code>UserData</code> object, so we need ot convert it into our <code>CustomUserData</code> format, before we can use it. The <code>JsonUtility</code> reads the string representation of the generic object and converts it into our custom format. Finally, we get a reference to the <code>NetworkObject</code> script and compare the Id to the <code>NetworkId</code> stored in the user data object. If it&rsquo;s equal, we know that the newly added Media Stream belongs to the player object.</p>
<h2 id="what-now">What Now?</h2>
<p>You&rsquo;re basically done! After building and opening multiple instances of our game, you can now experience the proximity voice chat you&rsquo;ve added to the <strong>Tanknarok</strong> project.</p>
<p>Of course there are a lot of ways we can improve the project. Currently all players will enter the same ODIN room - even if they don&rsquo;t join the same Multiplayer room! We can fix this by combining the name of the multiplayer room with the ODIN room name we&rsquo;ve chosen and use the result when joining the room:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Unique room names.
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">...
string combinedName = networkObject.Runner.SessionInfo.Name + &quot;_&quot; + roomName;
OdinHandler.Instance.JoinRoom(combinedName, roomData);
...
</code></pre>
</div>
</div>

<p>You might also have noticed, that the game&rsquo;s music and sound effects are kind of loud. We can easily fix this, by navigating to <code>Assets &gt; Audio &gt; Mixer</code> and adjusting the volume settings of the <code>Master</code>, <code>Music</code> or <code>SFX</code> mixers. You could also create a new Audio Group for the in game voice, link it to the Playback Prefab&rsquo;s <code>AudioSource</code> we created and fine tune the voice chat volume. This way you can also easily implement UI controls to allow players to adjust the volume in-game.</p>
<p>There are also issues that go beyond the scope of this tutorial. You might have noticed, that the direction a voice comes from sometimes does not exactly match what you&rsquo;d expect. Unity&rsquo;s Audio system assumes the listener to always be at the location of the <code>AudioListener</code> script. In the <strong>Tanknarok</strong> sample project, this script is positioned on the <code>CameraParent</code> game object, which represents the position the camera should look at. The position of this object does not always match the player location. To improve this, we&rsquo;d have to add an <code>AudioListener</code> script to the local players gameobject and deactivate the existing behaviour (Unity requires you to always have only one active <code>AudioListener</code>). If you&rsquo;d like us to add the solution to this tutorial or have other feedback, <a href="https://4np.de/discord">let us know on the discord server</a>!</p>
`}),e.add({id:3567,href:"https://www.4players.io/odin/guides/unity/unity-mirror-transport/",title:"ODIN Transport for Mirror Networking",section:"ODIN Documentation",description:"Learn how to use ODIN in combination with Mirror to setup Networking for a P2P Multiplayer game.",content:`<p>This guide shows how to use the <a href="https://github.com/4Players/odin-unity-mirror-transport">ODIN Transport for Mirror Networking package</a> to provide P2P networking in your Unity games. The ODIN Transport package includes a Transport implementation, allowing Mirror to send and receive data over the 4Players ODIN servers.</p>
<p>ODIN Transport is designed to work in combination with the ODIN Voice Chat service,
but can be used without utilizing voice.</p>
<h2 id="what-is-mirror">What is Mirror?</h2>
<blockquote>
<p>&ldquo;Mirror is a system for building multiplayer capabilities for Unity games. It is built on top of the lower level transport real-time communication layer, and handles many of the common tasks that are required for multiplayer games.&rdquo;
<a href="https://mirror-networking.gitbook.io/docs/manual/general">Mirror Docs</a></p>
</blockquote>
<p>Mirror takes care of essentials like synchronizing player positions, animations, health and other game variables. It instantiates and destroys game objects across the network and ensures that these objects are managed correctly across the connected clients. It also handles player connections and disconnects and networked scenes.</p>
<p>While Mirror addresses these aspects of networking, it does not handle the actual transmission of data. This is where a transport layer, like the ODIN Transport for Mirror Networking, comes into play.</p>
<p><strong>ODIN&rsquo;s Role:</strong></p>
<ul>
<li>
<p><strong>Data Transmission:</strong> While Mirror organizes and prepares the data for transmission, ODIN is responsible for actually sending and receiving this data over the 4Players ODIN servers.</p>
</li>
<li>
<p><strong>Scalability and Reliability:</strong> By leveraging 4Players servers, ODIN Transport ensures that your multiplayer games can handle a larger number of concurrent players and provide a stable connection.</p>
</li>
<li>
<p><strong>Voice Chat Integration:</strong> When used in combination with ODIN Voice Chat, ODIN Transport seamlessly integrates all kinds of voice communication into your multiplayer games.</p>
</li>
</ul>
<p>In essence, while Mirror lays the groundwork for creating a multiplayer game within Unity, ODIN Transport bridges the gap between the game&rsquo;s logic and the actual data transmission.</p>
<h2 id="setup">Setup</h2>
<ol>
<li>Install Mirror into your project using the Package Manager. Mirror is available from the <a href="https://assetstore.unity.com/packages/tools/network/mirror-129321">Unity Asset Store</a>.</li>
<li>Download the latest ODIN Unity SDK .unitypackage from the <a href="https://github.com/4Players/odin-sdk-unity/releases">Github Releases page</a> and import it into your project.</li>
<li>Download the latest ODIN Transport for Unity SDK .unitypackage from the <a href="https://github.com/4Players/odin-unity-mirror-transport/releases">Github Releases page</a> and import it into your project</li>
<li>Locate the <code>OdinManager_NetworkingVariant</code> prefab in the &ldquo;Packages/4Players ODIN Transport for Mirror Networking/Prefabs&rdquo; directory and drop it into your scene.</li>
<li>Select the <code>OdinManager</code> GameObject, click on the <code>Manage Access</code> button under <code>Client Authentication</code> and generate an Access Key. For more information on Access Keys, take a look at our <a href="/odin/introduction/access-keys/">Understanding Access Keys</a> chapter.</li>
<li>Attach a <code>NetworkManager</code> component to a GameObject in your Scene.</li>
<li>Attach a <code>Odin Transport</code> component to the same GameObject as the <code>NetworkManager</code></li>
<li>Drag the <code>Odin Transport</code> component into the <code>Transport</code> slot on the <code>NetworkManager</code></li>
</ol>
<center>
<figure style="max-width: 50%px"><a href="/images/odin/unity/odin-mirror-transport_NetworkManager.webp" title="Click to enlarge" data-lity><img src="/images/odin/unity/odin-mirror-transport_NetworkManager.webp"
         alt="The Mirror Network Manager setup with Odin Transport." width="50%"/></a><figcaption>
            <p>The Mirror Network Manager setup with Odin Transport.</p>
        </figcaption>
</figure>
</center>
<p>For a more in-depth setup guide for ODIN, take a look at our <a href="/odin/guides/unity/getting-started-unity/">Getting Started with Unity</a> chapter or dive into our <a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V">Unity video tutorial series</a>.</p>
<h2 id="connecting">Connecting</h2>
<p>ODIN Transport uses ODIN rooms to handle networking messages. This means instead of entering an IP Address to start or host a client, you provide a room name to the <code>networkAddress</code> field of the <code>NetworkManager</code>. Here&rsquo;s how you can do it:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Simple Mirror Connection script
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class MinimalMirrorConnection : MonoBehaviour
{
    [SerializeField] private string roomId = &quot;default&quot;;
    
    public void StartHost()
    {
        NetworkManager.singleton.networkAddress = roomId;
        NetworkManager.singleton.StartHost();
    }

    public void Connect()
    {
        NetworkManager.singleton.networkAddress = roomId;
        NetworkManager.singleton.StartClient();
    }
}
</code></pre>
</div>
</div>

<p><strong>Note:</strong> When going live with your game, ensure you use unique room names. Failing to do so will result in all players connecting to the same networking room.</p>
<h2 id="using-the-positional-audio-script">Using the Positional Audio script</h2>
<p>For proximity voice chat functionality in your game, it&rsquo;s essential to link the incoming voice stream with the corresponding player&rsquo;s avatar. The ODIN Transport for Mirror package offers a handy utility script called <code>OdinPositionalAudio</code> to streamline this process.</p>
<p>Here&rsquo;s how to use it:</p>
<ol>
<li>Attach the <code>OdinPositionalAudio</code> script to the Player-Prefab&rsquo;s GameObject that has the <code>NetworkIdentity</code> component.</li>
<li>Specify your desired proximity room name in the script.</li>
<li>(optional)</li>
</ol>
<p>Once these steps are completed, the <code>OdinPositionalAudio</code> script will take care of the rest. When a player connects, the script automatically generates a combined room name using the given proximity room&rsquo;s name and the networking room&rsquo;s name. The combination looks like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Get proximity room name
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public string GetFullPositionalRoomName()
        {
            return $&quot;{positionalRoomName}-{GetNetworkingRoomName()}&quot;;
        }
</code></pre>
</div>
</div>

<p>If you&rsquo;re new to setting up your Player Prefab for multiplayer in Mirror, consult the <a href="https://mirror-networking.gitbook.io/docs/manual/general/getting-started#player-prefab">Mirror Getting Started Guide</a> for a comprehensive walkthrough.</p>
<h2 id="whats-next">What&rsquo;s next?</h2>
<p>We&rsquo;ve shown you how to setup Mirror Networking to use ODIN as a Relay Transport. For even more information on Unity with Odin Voice Chat, check out our Discord and take a look at the following guides we&rsquo;ve prepared for you:</p>
<center>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
</center>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/getting-started-unity">
<img class="teaser-image" src="/images/odin/odin_getting_started_unity_header.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN</h4>
<div class="teaser-content">
 <p>Follow this guide to install ODIN in an empty Unity project. We&rsquo;ll try out one of the samples that come with ODIN and
explain how it works and which steps are required to implement ODIN into your own game.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/getting-started-unity">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/unity-mirror">
<img class="teaser-image" src="/images/odin/getting_started_unity_mirror_header.jpg">
</a>
<h4 class="teaser-title">ODIN and Mirror Networking</h4>
<div class="teaser-content">
 <p>ODIN is best suited to be added to a multiplayer game. In this guide, we&rsquo;ll create a basic multiplayer with 3D positional
audio based on Mirror Networking. You&rsquo;ll also learn how to leverage ODIN APIs like user data.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/unity-mirror">Let&#39;s start</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3568,href:"https://www.4players.io/odin/guides/unreal/push-to-talk/",title:"Push-To-Talk",section:"ODIN Documentation",description:"Learn how to implement Push-To-Talk functionality in Unreal Engine using the ODIN plugin. This guide provides a step-by-step approach to integrate Push-To-Talk with the Odin Audio Capture object, ensuring a tailored voice chat experience in your multiplayer games.",content:`<p>In this guide, we&rsquo;ll cover how to implement Push-To-Talk functionality in the Unreal Engine using the ODIN plugin. This feature is crucial for multiplayer games where players might want to control when they are heard. We&rsquo;re assuming you already have a working ODIN implementation using the <span class="external-reference">Odin Audio Capture <a href="/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture/"><i class="fas fa-external-link-alt"></i></a></span>
 object. If not, take a look at the quick overview below.</p>
<p>By David Liebemann at <a href="https://scico.dev">SciCode Studio</a>.</p>
<h2 id="creating-an-odin-audio-capture">Creating an Odin Audio Capture</h2>
<p>To implement Push-To-Talk functionality, instead of using the default <code>Create Audio Capture</code> method, we&rsquo;ll use the <span class="external-reference">Create Odin Audio Capture <a href="/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture/"><i class="fas fa-external-link-alt"></i></a></span>
 function call. This will create an extended Audio Capture object, that allows us to use the <span class="external-reference">Is Capturing Paused <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/"><i class="fas fa-external-link-alt"></i></a></span>
 parameter.</p>
<p>The logic for joining an Odin room should look something like this:</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/device-selection/CreateOdinAudioCapture.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/device-selection/CreateOdinAudioCapture.webp"
         alt="Blueprint for joining the Odin room" width="100%"/></a><figcaption>
            <p>Blueprint for joining the Odin room</p>
        </figcaption>
</figure>
<p>Please note, that we store a reference to the <code>Odin Audio Capture</code> object as a variable - we&rsquo;re going to use it in the next sections.</p>
<h2 id="understanding-is-capturing-paused">Understanding Is Capturing Paused</h2>
<p>The key to implementing Push-To-Talk in ODIN lies in the <span class="external-reference">Is Capturing Paused <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/"><i class="fas fa-external-link-alt"></i></a></span>
 parameter of the <code>Odin Audio Capture</code> object. This parameter allows us to control the audio capture state – essentially enabling or disabling the microphone input on demand. It&rsquo;s important to note that this functionality is specific to the <code>Odin Audio Capture</code> object and is not available in Unreal&rsquo;s default <code>Audio Capture</code> object.</p>
<center>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/bp_get_set_is_paused.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_get_set_is_paused.webp"
         alt="Get and Set Is Paused" width="100%"/></a><figcaption>
            <p>Get and Set Is Paused</p>
        </figcaption>
</figure>
</center>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We strongly advise against using the <code>Stop Capturing Audio</code> and <code>Start Capturing Audio</code> nodes provided by both Epic&rsquo;s <code>Audio Capture</code> and the <code>Odin Audio Capture</code> objects. Recent updates, especially from Unreal Engine version 5.3 onwards, have revealed that employing these nodes to stop and start audio capture can lead to application crashes.</p>
<p>Furthermore, even in earlier versions of Unreal Engine, using these nodes has been observed to cause significant performance degradation. This issue stems from Epic&rsquo;s underlying implementation, which involves destroying and subsequently recreating native audio capture references each time <code>Stop Capturing Audio</code> and <code>Start Capturing Audio</code> are called, respectively.</p>
<p>To ensure optimal performance and stability, especially for features like Push-To-Talk, we recommend utilizing the <span class="external-reference">Is Capturing Paused <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/"><i class="fas fa-external-link-alt"></i></a></span>
parameter. This parameter is specifically optimized for such use cases, offering a more efficient and less resource-intensive approach to controlling audio capture in your game.</p>
</div>
</div>

<h2 id="setting-up-the-input-action">Setting Up the Input Action</h2>
<p>For this guide, we&rsquo;ll leverage Epic&rsquo;s Enhanced Input System to define a Push-To-Talk Input Action. If you&rsquo;re new to the Enhanced Input System, it&rsquo;s highly recommended to first familiarize yourself with its functionalities by consulting <a href="https://docs.unrealengine.com/5.3/en-US/enhanced-input-in-unreal-engine/">the Unreal documentation</a>.</p>
<p>Here is a step-by-step guide to setting up your Push-To-Talk Input Action using Enhanced Input:</p>
<ol>
<li><strong>Create Input Mapping Context:</strong> If you haven&rsquo;t already set up an Input Mapping Context in your project, begin by creating a new <a href="https://docs.unrealengine.com/5.3/en-US/enhanced-input-in-unreal-engine/#inputmappingcontexts">Input Mapping Context</a> Data Asset. This context will hold your game&rsquo;s specific input configurations.</li>
<li><strong>Define the Input Action:</strong> Next, create a new <a href="https://docs.unrealengine.com/5.3/en-US/enhanced-input-in-unreal-engine/#inputactions">Input Action</a> Data Asset. Set the <code>Value Type</code> to <code>Digital (bool)</code>, which is ideal for binary actions like Push-To-Talk.</li>
<li><strong>Bind the Input Action:</strong> Add the newly created Input Action to your Input Mapping Context. For this example, we&rsquo;ll assign the <code>T</code> key on the keyboard as the control binding for the Push-To-Talk action.</li>
<li><strong>Activate the Input Mapping Context:</strong> To ensure your Input Action is recognized and processed, use the <a href="https://docs.unrealengine.com/5.3/en-US/BlueprintAPI/Input/AddMappingContext/"><code>Add Mapping Context</code></a> node in your Player Controller. This action activates the Input Mapping Context containing your Push-To-Talk action.</li>
</ol>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Note: While this guide focuses on the Enhanced Input System, the Push-To-Talk implementation is also compatible with Unreal&rsquo;s Legacy Input System. You can adapt this setup to whichever input system your project uses.</p>
</div>
</div>

<h2 id="integrating-push-to-talk-in-your-game">Integrating Push-To-Talk in Your Game</h2>
<p>Once the Input Action is set up, follow these steps to integrate Push-To-Talk:</p>
<ol>
<li>Access the <code>Odin Audio Capture</code> object in your game. This should already be part of your existing ODIN setup.</li>
<li>Listen to the Enhanced Input Action event for the <code>PushToTalk</code> action we defined. You can do this in your character or controller blueprint.</li>
<li>In the event, depending on the Action Value (pressed or released), set the <span class="external-reference">Is Capturing Paused <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/"><i class="fas fa-external-link-alt"></i></a></span>
 parameter of the <code>Odin Audio Capture</code> object.
<ul>
<li>If the button is pressed, <span class="external-reference">Is Capturing Paused <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/"><i class="fas fa-external-link-alt"></i></a></span>
 should be <code>false</code> (unpaused).</li>
<li>When released, set it to <code>true</code> (paused).</li>
</ul>
</li>
<li>Always check if the <code>OdinAudioCapture</code> object reference is valid before setting the parameter to avoid Null Reference Errors.</li>
</ol>
<center>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/push-to-talk/PushToTalkEvent.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/push-to-talk/PushToTalkEvent.webp"
         alt="Blueprint implementation of Push-To-Talk." width="100%"/></a><figcaption>
            <p>Blueprint implementation of Push-To-Talk.</p>
        </figcaption>
</figure>
</center>
<h2 id="conclusion">Conclusion</h2>
<p>With these steps, you&rsquo;ve successfully integrated Push-To-Talk functionality in your Unreal Engine game using the ODIN plugin. This will enhance your game&rsquo;s voice chat experience by giving players control over their microphone input.</p>
<p>For further information on Unreal with Odin Voice Chat, join our community discussions on Discord and explore our additional guides:</p>
<center>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
</center>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal.jpg">
</a>
<h4 class="teaser-title">Getting started with ODIN</h4>
<div class="teaser-content">
 <p>Follow this guide to learn how to install and setup ODIN in your Unreal Project using Blueprint.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal/blueprint-reference">
<img class="teaser-image" src="/images/odin/odin_getting_started_unreal_bp_reference.jpg">
</a>
<h4 class="teaser-title">Blueprint Reference</h4>
<div class="teaser-content">
 <p>Check out our extensive Blueprint reference to learn more about the nodes our SDK provides and how to connect them
into your game.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal/blueprint-reference">Let&#39;s start</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3569,href:"https://www.4players.io/rooms/manual/whiteboard/",title:"Whiteboard",section:"Rooms Documentation",description:"Learn how to use the whiteboard in ODIN Rooms.",content:`<p>Rooms has a simple and useful Whiteboard included. It allows you to draw basic shapes in different colors and sizes.</p>
<p>Use the <a href="/rooms/manual/user-interface/#area-controls">Area Controls</a> to reveal the whiteboard.</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-ui-overview-whiteboard.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-whiteboard.jpg"
         alt="Whiteboard in ODIN Rooms" width="800"/></a><figcaption>
            <p>Whiteboard in ODIN Rooms</p>
        </figcaption>
</figure>
<figure class="image-right" style="max-width: 50px"><a href="/images/rooms/rooms-ui-overview-whiteboard-tools.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-ui-overview-whiteboard-tools.jpg"
         alt="Whiteboard Toolbar" width="50"/></a>
</figure>
<p>In the left bottom part of the canvas you&rsquo;ll notice a toolbar with different tools. Hovering over each button will pop
out additional tools to the right side. Click on an icon to activate the tool. From top to bottom:</p>
<ul>
<li><strong>Undo/Redo</strong>: Hovering over this button will reveal the undo and redo buttons. Use these to undo or redo your last
action.</li>
<li><strong>Eraser</strong>: Use this tool to erase parts of your drawing or clear the whole drawing or just your contributions. You
need to have <a href="/rooms/manual/permissions/#guest-permissions">permissions</a> ) to clear the whole drawing.</li>
<li><strong>Drawing Tools</strong>: This button reveals available drawing tools. You can either draw lines, rectangles, circles, or
freehand.</li>
<li><strong>Color Picker</strong>: Use this tool to select a color for your drawing.</li>
<li><strong>Download</strong>: Click on this button to download the whiteboard as an image. The image will be downloaded as a PNG file
or a SVG file if you have drawn vector graphics.</li>
</ul>
`}),e.add({id:3570,href:"https://www.4players.io/rooms/manual/",title:"Manual",section:"Rooms Documentation",description:"Explore our comprehensive Rooms guides for getting started and advanced usage.",content:`<p>Welcome to ODIN Rooms! In this manual the most important features of ODIN Rooms are explained in detail.</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">User Interface</h4>
<div class="teaser-content">
 <p>Learn about the user interface of ODIN Rooms and how to navigate through the different areas.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/manual/user-interface">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">Text Chat</h4>
<div class="teaser-content">
 <p>Learn how to use the text chat in ODIN Rooms.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/manual/text-chat">Let&#39;s start</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">Whiteboard</h4>
<div class="teaser-content">
 <p>Learn how to use the whiteboard in ODIN Rooms.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/manual/whiteboard">Let&#39;s start</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<h4 class="teaser-title">Permissions</h4>
<div class="teaser-content">
 <p>Learn how to set up your audio and video permissions in ODIN Rooms.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/rooms/manual/permissions">Let&#39;s start</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3571,href:"https://www.4players.io/rooms/manual/permissions/",title:"Permissions",section:"Rooms Documentation",description:"Learn how to set up your audio and video permissions in ODIN Rooms.",content:`<p>Rooms does not require user accounts to join a room. However, the owner of the Rooms instance can set up permissions for
guests.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Not yet available   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This feature is not yet available in the current version of Rooms. It will be available in a future release. Stay tuned!</p>
</div>
</div>

<h2 id="guest-permissions">Guest Permissions</h2>
<p>To change guest permissions, you need to be the owner of the Rooms instance. You can change the permissions in the
settings of your Rooms instance. To change them, navigate to the URL of your Rooms instance and click on the user
icon to reveal the guest permissions.</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-setup-3.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-setup-3.jpg"
         alt="Rooms Permissions" width="800"/></a><figcaption>
            <p>Rooms Permissions</p>
        </figcaption>
</figure>
<p>These settings are available:</p>
<dl>
<dt>Modify App Settings</dt>
<dd>Allow guests to modify the app settings (like changing the logo or background).</dd>
<dt>Mute Participants</dt>
<dd>Allow guests to mute other participants.</dd>
<dt>Poke Participants</dt>
<dd>Allow guests to poke other participants. Poking means that the participant will receive a notification which is
useful if they are not paying attention or have muted their audio.</dd>
<dt>Enable Audio</dt>
<dd>Allow guests to enable or disable their microphone. Disabling that feature will mute the microphone of the guest.</dd>
<dt>Enable Video</dt>
<dd>Allow guests to enable or disable their camera. Disabling that feature will turn off the camera of the guest.</dd>
<dt>Clear Drawings</dt>
<dd>Allows guests to clear the whiteboard.</dd>
<dt>Clear Text Chat</dt>
<dd>Allows guests to clear the text chat.</dd>
</dl>
`}),e.add({id:3572,href:"https://www.4players.io/fleet/manual/deployments/",title:"Setup Deployments",section:"ODIN Fleet Documentation",description:"Learn how to manage deployment settings in ODIN Fleet.",content:`<p>The Deployment Settings section allows users to manage where and how many server instances are deployed across various
locations. This guide will help you navigate the deployment settings, create new deployments, and manage existing ones.</p>
<h2 id="deployment-overview">Deployment Overview</h2>
<p><img src="/images/fleet/getting-started-create-deployment-step-1.png" alt="Create Config in ODIN Fleet"></p>
<p>In the Deployment Settings panel, you will see a map indicating the geographical locations of your deployments and a
list of current deployment configurations. Each entry provides the following details:</p>
<ul>
<li><strong>Region</strong>: The geographical region of the deployment.</li>
<li><strong>City</strong>: The specific city where the deployment is located.</li>
<li><strong>Name</strong>: The name of the deployment configuration.</li>
<li><strong>Server Config</strong>: The configuration used for this deployment.</li>
<li><strong>Num Instances</strong>: The number of server instances running.</li>
<li><strong>Options</strong>: Actions to edit or delete the deployment.</li>
</ul>
<h3 id="creating-a-deployment">Creating a Deployment</h3>
<p><img src="/images/fleet/getting-started-create-deployment-step-2.png" alt="Create Config in ODIN Fleet"></p>
<p>To create a new deployment, follow these steps:</p>
<ol>
<li>Click the <strong>Add Deployment</strong> button at the top right corner.</li>
<li>In the <strong>Create Deployment</strong> dialog, fill in the following fields:
<ul>
<li><strong>Deployment Name</strong>: The name for your deployment.</li>
<li><strong>Available Locations</strong>: Choose from the available locations where the deployment will run.</li>
<li><strong>Config</strong>: Select the server configuration to use.</li>
<li><strong>Auto Scaler</strong>: Choose between manual or automatic scaling <em>(will be available soon)</em></li>
<li><strong>Number of Instances</strong>: Set the initial number of server instances to run. This can be changed anytime in the dashboard or via script</li>
</ul>
</li>
<li>Click <strong>Save</strong> to create the deployment.</li>
</ol>
<p>ODIN Fleet will immediately start deploying the server instances based on the configuration you provided.</p>
<h3 id="editing-a-deployment">Editing a Deployment</h3>
<p>To edit an existing deployment:</p>
<ol>
<li>Click the edit icon (pencil) next to the deployment you want to modify.</li>
<li>In the <strong>Edit Deployment</strong> dialog, adjust the fields as needed:
<ul>
<li><strong>Deployment Name</strong>: Update the name of the deployment.</li>
<li><strong>Available Locations</strong>: You cannot change the location of an existing deployment.</li>
<li><strong>Config</strong>: Change the server configuration if needed.</li>
<li><strong>Auto Scaler</strong>: Switch between manual and automatic scaling.</li>
<li><strong>Number of Instances</strong>: Adjust the number of server instances to scale up or down.</li>
</ul>
</li>
<li>Click <strong>Save</strong> to apply the changes.</li>
</ol>
<p>ODIN Fleet will update the deployment settings accordingly immediately.</p>
<p><strong>Please note</strong>: It&rsquo;s currently not possible to move a deployment to a different location. If you need to change the
location, you will need to create a new deployment and delete the existing one. If you need to move persistent data,
you can create a backup of the data, deploy a new server in the desired location, and restore the backup. Reach out to
us if you need assistance with this process.</p>
<h3 id="deleting-a-deployment">Deleting a Deployment</h3>
<p>To delete a deployment:</p>
<ol>
<li>Click the delete icon (trash can) next to the deployment you want to remove.</li>
<li>Confirm the deletion in the prompt that appears.</li>
</ol>
<h2 id="pricing-information">Pricing Information</h2>
<p>At the bottom of the <strong>Add/Edit Deployment</strong> dialog, you will see an estimated cost for the deployment based on the selected
tier and configuration. This helps you understand the financial impact of your deployments and make informed decisions.</p>
`}),e.add({id:3573,href:"https://www.4players.io/rooms/getting-started/first-call/",title:"Your first call",section:"Rooms Documentation",description:"Learn how to set up your first call in ODIN Rooms.",content:`<p>In this guide we&rsquo;ll asume that you have setup your own Rooms instance and that you have a basic understanding of how
Rooms works. If you haven&rsquo;t done this yet, please follow the <a href="/rooms/getting-started/sign-up">Getting Started Guide</a>
first.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Security Alerts   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The first time you join a room, or you open Audio and Video Settings (that&rsquo;s equally true for all your guests), your
browser will ask you for permission to access your microphone and camera. You need to allow this to use audio and video
in Rooms. Not doing so will not allow you to use audio and video in Rooms. If you accidentally denied access, you can
change this in the settings of your browser.</p>
</div>
</div>

<p>Before we join the room, let&rsquo;s make sure that Audio and Video-Settings are correct.</p>
<h2 id="audio-and-video-settings">Audio and Video Settings</h2>
<p>Before you join a room, you should check your audio and video settings. You can do this by clicking on the sliders
icon above the room name input field (see screenshot below).</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-manual-settings.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-manual-settings.jpg"
         alt="Settings" width="800"/></a><figcaption>
            <p>Settings</p>
        </figcaption>
</figure>
<p>On the left side of the settings dialog, you can switch between Audio and Video settings. Depending on your
permissions (i.e. if you are the owner or as a guest have the permissions) you also see additional settings there.</p>
<h3 id="audio-settings">Audio Settings</h3>
<p>Let&rsquo;s focus on the audio settings first. You should see something like this if you have the audio tap selected:</p>
<figure style="max-width: 400px"><a href="/images/rooms/rooms-manual-audio-settings.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-manual-audio-settings.jpg"
         alt="Audio Settings" width="400"/></a><figcaption>
            <p>Audio Settings</p>
        </figcaption>
</figure>
<dl>
<dt>Audio Input Device</dt>
<dd>Select the audio input device you want to use. This is usually your microphone. The drop down list contains all
available audio input devices. On Windows, this is usually something like &ldquo;Microphone (Realtek Audio)&rdquo; or &ldquo;Microphone
(Logitech Webcam)&rdquo;. On Mac, this is usually something like &ldquo;Internal Microphone&rdquo; or &ldquo;Airpods &hellip;&rdquo;.</dd>
<dt>Audio Output Device</dt>
<dd>Select the audio output device you want to use. This is usually your speakers or headphones. The drop down list
contains all available audio output devices. On Windows, this is usually something like &ldquo;Speakers (Realtek Audio)&rdquo; or &quot;
Headphones (Logitech Webcam)&quot;. On Mac, this is usually something like &ldquo;Internal Speakers&rdquo; or &ldquo;Airpods &hellip;&rdquo;.</dd>
<dt>Input Volume</dt>
<dd>Adjust the input volume of your microphone. This is useful if your microphone is too loud or too quiet. You can
adjust the volume by moving the slider to the left or right.</dd>
<dt>Output Volume</dt>
<dd>Adjust the output volume of your speakers or headphones. This is useful if the sound is too loud or too quiet. You can
adjust the volume by moving the slider to the left or right.</dd>
<dt>Volume Gate</dt>
<dd>Rooms automatically tries to avoid that noise from your environment or cheap microphones is transmitted to the other
participants. The volume gate is the threshold at which the microphone is activated. If the volume is below the gate,
the
microphone is muted. If the volume is above the gate, the microphone is activated. You can adjust the volume gate by
moving the slider to the left or right.</dd>
<dt>Automatic Gain Control</dt>
<dd>If you activate this toggle, Rooms will automatically adjust the volume of your microphone to avoid that you are too
loud or too quiet. This is useful if you move around or if you have a cheap microphone that is not very stable in terms
of volume.</dd>
<dt>Voice Activity Detection</dt>
<dd>If you activate this toggle, Rooms will use AI to identify if you are speaking or not. If you are not speaking, the
microphone is muted. This is useful if you have a lot of background noise or if you are in a noisy environment.</dd>
<dt>Echo Cancellation</dt>
<dd>If you activate this toggle, Rooms will try to avoid that the sound from your speakers is transmitted back to the
microphone. This is useful if you have a cheap microphone or if you have your speakers very loud.</dd>
<dt>Noise Suppression</dt>
<dd>If you activate this toggle, Rooms will try to suppress background noise. This is useful if you are in a noisy
environment or if you have a cheap microphone.</dd>
</dl>
<h3 id="video-settings">Video Settings</h3>
<p>The next tab are the video settings. Here you can setup the webcam you want to use for video. You should see
something like this:</p>
<figure style="max-width: 400px"><a href="/images/rooms/rooms-manual-video-settings.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-manual-video-settings.jpg"
         alt="Video Settings" width="400"/></a><figcaption>
            <p>Video Settings</p>
        </figcaption>
</figure>
<dl>
<dt>Video Device</dt>
<dd>Select the video device you want to use. This is usually your webcam. The drop down list contains all available video
devices. On Windows, this is usually something like &ldquo;Logitech Webcam&rdquo; or &ldquo;Integrated Webcam&rdquo;. On Mac, this is usually
something like &ldquo;FaceTime HD Camera&rdquo; or &ldquo;Logitech Webcam&rdquo;.</dd>
<dt>Start Cam</dt>
<dd>Click this button to start the selected webcam to verify that it is working correctly.</dd>
</dl>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Browser Permissions  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you use the video settings for the first time, you might only see a &ldquo;Start Cam&rdquo; button. Click on that button to
initiate the camera. This will trigger the browser to request permission that Rooms is allowed to access your camera.
After you gave access, a list will popup with all available cameras.</p>
</div>
</div>

<h2 id="creatingjoining-a-room">Creating/Joining a Room</h2>
<p>If you have read the <a href="/rooms/getting-started/concepts">Basic Concepts</a> guide, you know that Rooms is organized in
rooms. While in other video conferencing tools the primary dimension is time and date, in Rooms it is the room. You can
create a room for a specific purpose, like a meeting, a brainstorming session, a game or just to hang out as long as you
like.</p>
<p>If your Rooms instance is setup, opening the URL to your Rooms instance (e.g. <code>https://talk.rooms.chat</code>) will show
you something like this (depending on weather you have customized your Rooms instance):</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-manual-join-room.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-manual-join-room.jpg"
         alt="Joining a Room" width="800"/></a><figcaption>
            <p>Join Room</p>
        </figcaption>
</figure>
<p>In Rooms, we don&rsquo;t actually create a room, we just join it. If the room does not exist, it will be created
automatically by the server, and you will be the first person in the room. If the room already exists, you will join the
room and see the other people that are in the room.</p>
<p>Enter a name of the Room you want to join or create and press the &ldquo;Join Room&rdquo; button. Some example of room names
that we use are <code>coffee-break</code>, <code>we-hate-to-eat-alone</code>, <code>lets-play-a-game</code>, <code>devs</code>, <code>marketing</code> or whatever comes into
your mind.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Room Name    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Room names are <strong>case sensitive</strong> and contain any character except for <code>/</code>. So, it&rsquo;s different if you enter <code>Coffee  Break</code>or <code>coffee break</code>. If you want to have a private conversation, just use a name that is hard to guess, like
<code>FE12-GH23-AB45</code>.</p>
</div>
</div>

<p>For this guide, I have chosen <code>Coffee Break</code>. After joining the room, you will see the user interface of Rooms.</p>
<figure style="max-width: 800px"><a href="/images/rooms/rooms-manual-ui.jpg" title="Click to enlarge" data-lity><img src="/images/rooms/rooms-manual-ui.jpg"
         alt="Room" width="800"/></a><figcaption>
            <p>Rooms UI after joining an empty room</p>
        </figcaption>
</figure>
<h2 id="inviting-others">Inviting Others</h2>
<p>Once you are in the room, you can invite others to join you. You can do this by sharing the room name with them. You can
also create a link to the room and share this link with others. Click on the <strong>Copy Invite Link</strong> button to copy the
link to the clipboard. The link is basically just this format: <code>https://{subdomain}.rooms.chat/{room-name}</code>, so if your
instance is <code>talk.rooms.chat</code> and your room is <code>coffee-break</code>, the link would be <code>https://talk.rooms.chat/coffee-break</code>.</p>
<p>Use whatever way you prefer to share the link with others. They just open the link in their Browser, optionally enter
their name and join the room.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  No Account Required    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Users don&rsquo;t need to create an account to use ODIN Rooms. Users also don&rsquo;t need to download any software. They just open
the URL in their Browser and they are in the room.</p>
</div>
</div>

<h2 id="next-steps">Next Steps</h2>
<p>That&rsquo;s it, you have successfully joined your first room in Rooms. You can now start using the room for a quick chat, a
brainstorming session, a meeting or just to hang out.</p>
<p>Rooms has many more features, like a whiteboard, a chat, screen sharing and many more. Navigate to our <a href="/rooms/manual/">manual</a> to learn more about the features of Rooms.</p>
`}),e.add({id:3574,href:"https://www.4players.io/fleet/manual/servers/",title:"Managing Servers",section:"ODIN Fleet Documentation",description:"Learn how to manage your deployed servers in ODIN Fleet.",content:`<p>This section of the ODIN Fleet dashboard provides detailed information and controls for managing your deployed servers.
You can view all your deployed servers, investigate their settings, monitor their performance, and review their logs.
Below is a guide to help you navigate and utilize the server section effectively.</p>
<h2 id="server-instances">Server Instances</h2>
<p><img src="/images/fleet/getting-started-servers-1.png" alt="Create Config in ODIN Fleet"></p>
<p>The Server Instances panel shows a list of all currently deployed servers. Each entry provides the following
information:</p>
<ul>
<li><strong>Region</strong>: The geographical location of the server.</li>
<li><strong>City</strong>: The specific city where the server is located.</li>
<li><strong>Server Config</strong>: The configuration used for this server instance.</li>
<li><strong>Address</strong>: The IP address of the server.</li>
<li><strong>Ports</strong>: The ports used by the server.</li>
<li><strong>Date</strong>: The date and time the server was deployed.</li>
<li><strong>Status</strong>: The current status of the server (e.g., Preparing, Running, Stopped).</li>
</ul>
<p>You can filter the list of servers by location using the <strong>All Locations</strong> button.</p>
<p>Click on the small info icon at the right end of each server entry to view more details about that server.</p>
<h2 id="server-details">Server Details</h2>
<p>Clicking on a server instance will take you to the detailed view of that server. This view consists of several tabs:
Info, Stats, and Logs.</p>
<h3 id="info-tab">Info Tab</h3>
<p><img src="/images/fleet/getting-started-servers-2.png" alt="Create Config in ODIN Fleet"></p>
<p>The Info tab provides basic information and configuration details of the server:</p>
<ul>
<li>
<p><strong>Basic Server Info</strong>:</p>
<ul>
<li><strong>Id</strong>: Unique identifier of the server.</li>
<li><strong>Server Config</strong>: The configuration used for this server.</li>
<li><strong>Status</strong>: The current status of the server (e.g., Starting, Running, Stopped).</li>
</ul>
</li>
<li>
<p><strong>Server Location</strong>:</p>
<ul>
<li><strong>Location</strong>: The geographical location and region of the server.</li>
<li><strong>IP-Address</strong>: The IP address of the server.</li>
</ul>
</li>
<li>
<p><strong>Backups</strong>:</p>
<ul>
<li>You can create and manage backups of your persistent data here.</li>
</ul>
</li>
<li>
<p><strong>Ports</strong>:</p>
<ul>
<li>Lists the ports defined in the server configuration, showing the container port and the corresponding published
port on the host.</li>
</ul>
</li>
<li>
<p><strong>Environment Variables</strong>:</p>
<ul>
<li>Displays the environment variables set for this server, including static, system, and port variables.</li>
</ul>
</li>
</ul>
<h3 id="stats-tab">Stats Tab</h3>
<p><img src="/images/fleet/getting-started-servers-3.png" alt="Create Config in ODIN Fleet"></p>
<p>The Stats tab provides real-time performance metrics of the server, including:</p>
<ul>
<li><strong>CPU Usage</strong>: Graph showing the percentage of CPU used over time.</li>
<li><strong>Memory Usage</strong>: Graph showing the amount of memory used over time.</li>
<li><strong>Network Ingress</strong>: Graph showing the incoming network traffic.</li>
<li><strong>Network Egress</strong>: Graph showing the outgoing network traffic.</li>
<li><strong>Disk Read</strong>: Graph showing the amount of data read from the disk.</li>
<li><strong>Disk Write</strong>: Graph showing the amount of data written to the disk.</li>
</ul>
<h3 id="logs-tab">Logs Tab</h3>
<p><img src="/images/fleet/getting-started-servers-4.png" alt="Create Config in ODIN Fleet"></p>
<p>The Logs tab displays the log output of the server. You can adjust the settings to control the number of lines displayed
and the auto-refresh interval. The logs provide detailed information about the server&rsquo;s activities, useful for
troubleshooting and monitoring.</p>
`}),e.add({id:3575,href:"https://www.4players.io/fleet/manual/ports/",title:"Port Configurations",section:"ODIN Fleet Documentation",description:"Learn how to configure ports for your server in ODIN Fleet.",content:`<p>Each server that should be accessible from the outside needs to expose ports. Gameservers often have multiple ports
doing different things. For example, a game server might have a port for the game itself, a port for the query protocol,
and a port for the RCON protocol.</p>
<p>When developing your server, you can just hardcode the port numbers as you like. When we start your server, the runtime
will iterate over all the ports that you have configured and find a free port on the host and map the container port to
the host port.</p>
<pre><code class="language-mermaid">graph TD
    Client--&gt;|Connects to Host|Host[Host on port 34727]
    Host--&gt;|Port Mapping|Server
    subgraph Container
        Server[Server on port 7777]
    end
</code></pre>
<p>For certain use-cases you need to know inside the server which port is mapped to which service. For example, you might
want to tell an external service (i.e. match making or master server for server browser) which port to use to connect to
your server.</p>
<p>To do that, you can use environment variables to pass the port numbers to your server. To do that, proceed as follows:</p>
<ul>
<li>Define the ports in the <code>ports</code> section of the server configuration.</li>
<li>Create a dynamic environment variable for each port that you want to pass to the server and give it a name.</li>
</ul>
<h2 id="example">Example</h2>
<p>You have defined a <code>Game Port</code> that listens on <code>7777</code> (inside the container) via TCP and UDP. Now your gameserver needs
to know what the actual outside port is. Create a new dynamic environment variable named <code>GAME_PORT</code> and set the
type to <code>Port Mapping</code> and set <code>Game Port</code> as value.</p>
<p>Now you can access the port number inside the server by reading the environment variable <code>GAME_PORT</code>. For example if you
use a bash script to write the server configuration file you can use the following code to read the port number:</p>
<pre><code class="language-bash">#!/bin/bash
echo &quot;Game Port is $GAME_PORT&quot;

# Write the server configuration file
echo &quot;GAME_PORT = $GAME_PORT&quot; &gt; /etc/server.cfg
</code></pre>
<p>Now, at runtime, the actual outside port has been determined to be <code>34727</code> and will be routet to <code>7777</code>. So the
<code>etc/server.cfg</code> you will have the following content:</p>
<pre><code class="language-text">GAME_PORT = 34727
</code></pre>
`}),e.add({id:3576,href:"https://www.4players.io/fleet/manual/steamworks/",title:"Steamworks Integration",section:"ODIN Fleet Documentation",description:"Learn how to integrate Steamworks with ODIN Fleet to create Docker images for your game servers.",content:`<p>The ODIN Fleet runtime leverages modern container technology to run your game servers. However, not everyone is familiar
with creating Docker images from game servers, and many game developers use Steam to distribute client and server files.
We created a simple, automated way for you to provide Steamworks details of your server, and we create a Docker image in
the background. The image creation process is straightforward and requires only a few steps.</p>
<p>This article explains what happens under the hood once you provide your Steamworks details (
see <a href="../images">creating an image</a> for more details).</p>
<h2 id="steamworks-image-creation-process">Steamworks Image Creation Process</h2>
<p>Once you have created a Steamworks image, our backend will execute the following steps:</p>
<ol>
<li>
<p><strong>Base Image Setup</strong>: We start with an Ubuntu base image and set up the environment for downloading and running the
game server. This includes installing essential software and the SteamCMD tool, which is used to download the server
files from Steam.</p>
</li>
<li>
<p><strong>User and Environment Configuration</strong>: We create a user named <code>steam</code> and configure the necessary environment
variables to ensure the game server runs smoothly. This step ensures that the environment is correctly set up for the
game server to operate.</p>
</li>
<li>
<p><strong>Downloading Steamworks Files</strong>: Depending on the platform (Windows or Linux) you specified, we use SteamCMD to
download the game server files from Steam. For Windows servers, we use Proton GE, a compatibility tool that allows
Windows games to run on Linux. This step ensures that all necessary files are downloaded and ready to be used.</p>
</li>
<li>
<p><strong>File Organization</strong>: All downloaded files from Steamworks are stored in the <code>/gameserver</code> directory within the
container. This means any paths referenced in your server&rsquo;s configuration files should be prefixed
with <code>/gameserver</code>. This standardized directory structure simplifies the setup and ensures consistency.</p>
</li>
<li>
<p><strong>Finalizing the Docker Image</strong>: We finalize the Docker image by copying necessary scripts and setting up user
permissions. This includes configuring the entrypoint script, which is responsible for starting the game server when
the container is run.</p>
</li>
</ol>
<h3 id="example-usage">Example Usage</h3>
<p>To help you understand how to set up your Docker image and server configuration, let&rsquo;s look at two examples: Enshrouded
and Factorio. These examples guide you through the process of creating an image and configuring the server.</p>
<h4 id="example-1-enshrouded-server-simple-settings">Example 1: Enshrouded Server (Simple Settings)</h4>
<p><strong>Step 1: Creating the Image</strong></p>
<p>A developer creating an image for Enshrouded would need to provide the following information in the image creation
wizard:</p>
<ul>
<li><strong>Name</strong>: <code>enshrouded-server</code></li>
<li><strong>Version</strong>: <code>1.0</code></li>
<li><strong>OS</strong>: <code>Windows</code></li>
<li><strong>Steam App ID</strong>: <code>2278520</code></li>
<li><strong>Branch</strong>: <code>public</code> (default)</li>
<li><strong>Executable Command</strong>: <code>/gameserver/enshrouded_server.exe</code></li>
</ul>
<p><strong>Step 2: Configuring the Server</strong></p>
<p>After creating the image, the developer would need to create a server configuration with the following details:</p>
<ol>
<li>
<p><strong>Basic Configuration</strong>:</p>
<ul>
<li><strong>Name</strong>: <code>Enshrouded Server</code></li>
<li><strong>Image</strong>: <code>enshrouded-server:1.0</code></li>
<li><strong>Restart Policy</strong>: <code>Always</code></li>
</ul>
</li>
<li>
<p><strong>Port Settings</strong>:</p>
<ul>
<li>The developer would add any necessary ports that the server would use to communicate with clients. For example:
<ul>
<li><strong>Name</strong>: <code>game</code></li>
<li><strong>Port</strong>: <code>2456</code></li>
<li><strong>Protocol</strong>: <code>UDP</code></li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>Environment Variables</strong>:</p>
<ul>
<li>The developer might set environment variables if needed. For this example, there would be no additional
environment variables required.</li>
</ul>
</li>
<li>
<p><strong>Persistent Folders</strong>:</p>
<ul>
<li><strong>Path in Container</strong>: <code>/gameserver/saves</code></li>
<li>This would ensure that game saves are persisted across server restarts.</li>
</ul>
</li>
</ol>
<h4 id="example-2-factorio-server-advanced-settings">Example 2: Factorio Server (Advanced Settings)</h4>
<p><strong>Step 1: Creating the Image</strong></p>
<p>A developer creating an image for Factorio would need to provide the following information in the image creation wizard:</p>
<ul>
<li><strong>Name</strong>: <code>factorio-server</code></li>
<li><strong>Version</strong>: <code>1.0</code></li>
<li><strong>OS</strong>: <code>Linux</code></li>
<li><strong>Steam App ID</strong>: <code>427520</code></li>
<li><strong>Branch</strong>: <code>public</code> (default)</li>
<li>**Executable Command
**: <code>/gameserver/bin/x64/factorio --start-server /home/steam/save/factorio.zip --server-settings /home/steam/save/server-settings.json</code></li>
<li><strong>Steamworks Username</strong>: <code>&lt;your_steam_account_id&gt;</code></li>
<li><strong>Steamworks Password</strong>: <code>&lt;your_steam_account_password&gt;</code></li>
</ul>
<p><strong>Step 2: Configuring the Server</strong></p>
<p>After creating the image, the developer would need to create a server configuration with the following details:</p>
<ol>
<li>
<p><strong>Basic Configuration</strong>:</p>
<ul>
<li><strong>Name</strong>: <code>Factorio Server</code></li>
<li><strong>Image</strong>: <code>factorio-server:1.0</code></li>
<li><strong>Restart Policy</strong>: <code>Always</code></li>
</ul>
</li>
<li>
<p><strong>Port Settings</strong>:</p>
<ul>
<li>The developer would add the necessary ports that the server would use. For Factorio, it typically uses the
following:
<ul>
<li><strong>Name</strong>: <code>game</code></li>
<li><strong>Port</strong>: <code>34197</code></li>
<li><strong>Protocol</strong>: <code>UDP</code></li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>Environment Variables</strong>:</p>
<ul>
<li>The developer might set environment variables to configure the server. For example:
<ul>
<li><strong>Name</strong>: <code>SERVER_NAME</code></li>
<li><strong>Value</strong>: <code>MyFactorioServer</code></li>
<li><strong>Name</strong>: <code>MAX_PLAYERS</code></li>
<li><strong>Value</strong>: <code>16</code></li>
</ul>
</li>
</ul>
</li>
<li>
<p><strong>Persistent Folders</strong>:</p>
<ul>
<li>The developer would ensure that game saves and other important data are persisted across server restarts:
<ul>
<li><strong>Path in Container</strong>: <code>/home/steam/save</code></li>
</ul>
</li>
</ul>
</li>
</ol>
<p>By following these steps, developers would set up and configure Docker images for their game servers effectively. These
examples demonstrate both a simple setup with minimal configuration (Enshrouded) and a more advanced setup with
additional parameters (Factorio). Remember, all file paths within the container should be prefixed with <code>/gameserver</code> to
ensure proper access and functionality. This approach not only standardizes the game server environment but also
provides flexibility to accommodate various game-specific configurations.</p>
<h2 id="environment-variables">Environment Variables</h2>
<p>In the server configuration you can use environment variables to make certain aspects of the server configurable. This
is especially useful when you want to run multiple instances of the same server with different settings. Of course, your
gameserver needs make make use of these environment variables.</p>
<h3 id="unity">Unity</h3>
<p>In Unity you would use <code>Environment.GetEnvironmentVariable(&quot;SERVER_NAME&quot;)</code> to access the value of <code>SERVER_NAME</code>.</p>
<h3 id="unreal-engine">Unreal Engine</h3>
<p>In Unreal Engine you would use <code>FPlatformMisc::GetEnvironmentVariable(TEXT(&quot;SERVER_NAME&quot;))</code> to access the value
of <code>SERVER_NAME</code>.</p>
`}),e.add({id:3577,href:"https://www.4players.io/fleet/manual/registries/azure/",title:"Adding an Azure Container Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect an Azure Container Registry to ODIN Fleet, using recommended authentication methods.",content:`<p>To link your Azure Container Registry (ACR) with ODIN Fleet, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;Azure&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-azure-registry.png"
         alt="Add Azure Container Registry"/><figcaption>
            <p>Add Azure Container Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your Azure Container Registry:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Registry URL</strong>: This can be found in the Azure portal under <em>Container registries</em> -&gt; {your_container_registry} -&gt; <em>Overview</em> -&gt; <em>Login server</em>. The format is typically <code>https://YOUR_NAMESPACE.azurecr.io</code>.</li>
<li><strong>Username</strong>: Depending on your chosen authentication method, this could be your Azure service principal, the Azure Active Directory (AD) username, or the admin username for your ACR.</li>
<li><strong>Password</strong>: Provide the corresponding password for the selected username. For admin accounts, this can be found or set under <em>Access keys</em> in the ACR settings.</li>
</ul>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Authentication Methods for Azure Container Registry  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Azure offers several authentication methods for accessing your container registry:</p>
<ol>
<li>
<p><strong>Admin Account</strong>: This is the simplest method. You can enable the admin account in the Azure portal under <em>Container registries</em> -&gt; {your_container_registry} -&gt; <em>Access keys</em>. This method uses the registry&rsquo;s admin username and password. <a href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli#admin-account">Learn more</a>.</p>
</li>
<li>
<p><strong>Repository-Scoped Permissions (Tokens)</strong>: This method allows for more granular access control. Tokens can be created and managed under <em>Repository Permissions</em> in the ACR settings. This approach is recommended for scenarios requiring limited access to specific repositories. <a href="https://learn.microsoft.com/en-us/azure/container-registry/container-registry-repository-scoped-permissions">Learn more</a>.</p>
</li>
</ol>
</div>
</div>

<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>You can now pull images from your Azure Container Registry directly within ODIN Fleet.</p>
`}),e.add({id:3578,href:"https://www.4players.io/fleet/manual/registries/docker-hub/",title:"Adding a Docker Hub Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect a private docker hub repository to ODIN fleet.",content:`<p>To link your Docker Hub account with ODIN Fleet, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;Docker Hub&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-docker-hub-registry.png"
         alt="Add Docker Hub Registry"/><figcaption>
            <p>Add Docker Hub Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with Docker Hub:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Username</strong>: Enter your Docker Hub username.</li>
<li><strong>Access Token</strong>: Provide your Docker Hub access token.</li>
</ul>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  How to create a Docker Hub access token  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>To generate a Docker Hub access token, visit the <a href="https://hub.docker.com/settings/security">Docker Hub website</a> and
create a new access token. Ensure that the token has the necessary permissions to pull images from your private
repositories. More info can be found in the <a href="https://docs.docker.com/docker-hub/access-tokens/">Docker Hub documentation</a>.</p>
</div>
</div>

<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>You can now pull images from Docker Hub directly within ODIN Fleet.</p>
`}),e.add({id:3579,href:"https://www.4players.io/fleet/manual/registries/github/",title:"Adding a GitHub Container Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect a GitHub Container Registry to ODIN Fleet, supporting both personal and organization accounts.",content:`<p>To link your GitHub Container Registry (also known as GitHub Packages) with ODIN Fleet, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;GitHub&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-github-registry.png"
         alt="Add GitHub Container Registry"/><figcaption>
            <p>Add GitHub Container Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your GitHub Container Registry:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Organization</strong>: Select &ldquo;Yes&rdquo; if you are connecting a GitHub organization account or &ldquo;No&rdquo; for a personal account.</li>
<li><strong>Username</strong>: Enter your GitHub username.</li>
<li><strong>Access Token</strong>: Provide a Personal Access Token (PAT) with the required scopes.</li>
</ul>
<h3 id="authentication-and-access-tokens">Authentication and Access Tokens</h3>
<p>To authenticate with GitHub Container Registry, you&rsquo;ll need to create a Personal Access Token (PAT) with at least the <code>read:packages</code> scope. Depending on your requirements, you may also need additional scopes like <code>delete:packages</code> or <code>write:packages</code>.</p>
<ul>
<li>
<p><strong>Creating a PAT</strong>: Follow GitHub&rsquo;s official guide on <a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic">creating a Personal Access Token</a>.</p>
<ul>
<li>For personal repositories or organization repositories that support granular permissions, ensure your PAT includes the <code>read:packages</code> scope.</li>
<li>If your package is in a registry that requires repository-scoped permissions, your PAT must also include the <code>repo</code> scope.</li>
</ul>
</li>
</ul>
<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>You can now pull images from your GitHub Container Registry directly within ODIN Fleet.</p>
<h3 id="additional-resources">Additional Resources</h3>
<ul>
<li><a href="https://docs.github.com/en/packages/learn-github-packages/about-permissions-for-github-packages">Managing GitHub Packages</a></li>
<li><a href="https://github.com/%7Busername%7D?tab=packages">View Your Packages</a></li>
</ul>
`}),e.add({id:3580,href:"https://www.4players.io/fleet/manual/registries/gitlab/",title:"Adding a GitLab Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect a GitLab container registry to ODIN Fleet, supporting both GitLab.com and self-hosted instances.",content:`<p>To link your GitLab container registry with ODIN Fleet, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;GitLab&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-gitlab-registry.png"
         alt="Add GitLab Registry"/><figcaption>
            <p>Add GitLab Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your GitLab container registry:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Registry URL</strong>: For GitLab.com, use <code>https://registry.gitlab.com</code>. For self-hosted instances, use the appropriate registry URL.</li>
<li><strong>Instance URL</strong>: For GitLab.com, use <code>https://gitlab.com</code>. If you are using a self-hosted instance, enter its URL.</li>
<li><strong>Username</strong>: Provide your GitLab username.</li>
<li><strong>Access Token</strong>: Provide an access token with the necessary permissions to access your GitLab registry.</li>
</ul>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  How to create a GitLab access token  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>To generate a GitLab access token, visit the <a href="https://gitlab.com/-/profile/personal_access_tokens">GitLab Profile Settings</a> and create a new personal access token. Ensure that the token has the necessary scopes (e.g., <code>read_registry</code>) to interact with the container registry. More information can be found in the <a href="https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html">GitLab documentation</a>.</p>
</div>
</div>

<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>You can now pull images from your GitLab container registry directly within ODIN Fleet.</p>
`}),e.add({id:3581,href:"https://www.4players.io/fleet/manual/registries/google-cloud/",title:"Adding a Google Cloud Container Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect a Google Cloud Container Registry (GCR) to ODIN Fleet using the Custom option.",content:`<p>While ODIN Fleet does not officially support Google Cloud Container Registries (GCR), you can still integrate GCR using the Custom option. This guide will walk you through the necessary steps.</p>
<h2 id="1-set-up-your-google-cloud-container-registry">1. Set Up Your Google Cloud Container Registry</h2>
<p>Ensure that your GCR is properly set up and that you have the necessary permissions and authentication details. You can find more information on setting up GCR in the <a href="https://cloud.google.com/container-registry/docs/quickstart">Google Cloud Container Registry Documentation</a>.</p>
<h2 id="2-obtain-your-docker-credentials">2. Obtain Your Docker Credentials</h2>
<p>Use the <code>gcloud</code> CLI tool to generate a Docker-compatible authentication configuration. Run the following command to authenticate Docker with GCR:</p>
<pre><code class="language-bash">gcloud auth configure-docker
</code></pre>
<p>This command updates your Docker configuration to include credentials for GCR, allowing you to pull and push images.</p>
<h2 id="3-add-a-new-registry-in-odin-fleet">3. Add a New Registry in ODIN Fleet</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<p>Click the &ldquo;Add Registry&rdquo; button and select <strong>Custom</strong> from the options.</p>
<h2 id="4-provide-required-information">4. Provide Required Information</h2>
<figure><img src="/images/fleet/add-other-registry.png"
         alt="Add Google Cloud Registry"/><figcaption>
            <p>Add Google Cloud Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your Google Cloud Container Registry:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Registry URL</strong>: Use the GCR registry URL format, which is typically <code>https://gcr.io</code> or a specific regional URL like <code>https://us.gcr.io</code>, <code>https://eu.gcr.io</code>, or <code>https://asia.gcr.io</code>.</li>
<li><strong>Username</strong>: Use <code>_json_key</code> or <code>oauth2accesstoken</code>.</li>
<li><strong>Password</strong>: Provide the base64-encoded JSON key file content if using <code>_json_key</code> or the OAuth2 access token if using <code>oauth2accesstoken</code>.</li>
</ul>
<p>Example setup:</p>
<ul>
<li><strong>Registry URL</strong>: <code>https://gcr.io</code></li>
<li><strong>Username</strong>: <code>_json_key</code></li>
<li><strong>Password</strong>: (Paste the base64-encoded content of your service account key file)</li>
</ul>
<p>Or using OAuth2 access token:</p>
<ul>
<li><strong>Registry URL</strong>: <code>https://gcr.io</code></li>
<li><strong>Username</strong>: <code>oauth2accesstoken</code></li>
<li><strong>Password</strong>: (Your OAuth2 access token)</li>
</ul>
<h2 id="5-save-the-configuration">5. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<h3 id="limitations-and-warnings">Limitations and Warnings</h3>
<p>Since this is done via the Custom option, the following limitations apply:</p>
<ul>
<li><strong>No URL Validation</strong>: The provided URL will not be checked for validity or corrected.</li>
<li><strong>No Image Verification</strong>: Image existence checks are skipped, meaning ODIN Fleet will not verify if the images exist in the registry.</li>
<li><strong>No Image Browsing</strong>: Tagged images will not be retrieved, resulting in an empty list of available images for selection.</li>
<li><strong>Error Handling</strong>: If an image cannot be pulled, it will be marked with a status error, but further details may not be provided.</li>
</ul>
`}),e.add({id:3582,href:"https://www.4players.io/fleet/manual/registries/self-hosted/",title:"Adding a Self-Hosted Docker Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect a self-hosted Docker registry to ODIN Fleet, with full support for image verification and browsing.",content:`<p>To link your self-hosted Docker registry with ODIN Fleet, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;Self-Hosted Registry&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-self-hosted-registry.png"
         alt="Add Self-Hosted Docker Registry"/><figcaption>
            <p>Add Self-Hosted Docker Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your self-hosted Docker registry:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Registry URL</strong>: Provide the URL of your self-hosted Docker registry (e.g., <code>https://registry.example.com</code>).</li>
<li><strong>Username</strong>: Enter the username required to access your registry.</li>
<li><strong>Password</strong>: Provide the password for the username above.</li>
</ul>
<h3 id="features-and-functionality">Features and Functionality</h3>
<p>ODIN Fleet fully supports self-hosted Docker registries, offering the following convenient features:</p>
<ul>
<li><strong>Image Name Verification</strong>: ODIN Fleet will verify that the image names you use are valid within your self-hosted registry.</li>
<li><strong>Image Browsing</strong>: You can browse the available images within the registry directly from the ODIN Fleet interface.</li>
<li><strong>Tagged Images</strong>: ODIN Fleet will retrieve and display tagged images from your registry, allowing for easy selection and management.</li>
</ul>
<p>These features provide a smooth and integrated experience when using a self-hosted Docker registry with ODIN Fleet.</p>
<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>You can now manage and deploy images from your self-hosted Docker registry directly within ODIN Fleet.</p>
`}),e.add({id:3583,href:"https://www.4players.io/fleet/manual/registries/custom/",title:"Adding a Custom Docker Registry",section:"ODIN Fleet Documentation",description:"Learn how to connect any Docker-compatible registry to ODIN Fleet using the Custom option. Note: This is a fallback option with limited functionality.",content:`<p>To link a Docker-compatible registry using the Custom option, follow these steps:</p>
<h2 id="1-access-the-docker-registries-section">1. Access the Docker Registries Section</h2>
<p>Navigate to &ldquo;Settings&rdquo; in the ODIN Fleet dashboard after selecting/creating your app. In Settings, navigate to the &ldquo;Docker Registries&rdquo; tab.</p>
<h2 id="2-add-a-new-registry">2. Add a New Registry</h2>
<p>Click the &ldquo;Add Registry&rdquo; button and select &ldquo;Custom&rdquo; from the options.</p>
<h2 id="3-provide-required-information">3. Provide Required Information</h2>
<figure><img src="/images/fleet/add-other-registry.png"
         alt="Add Custom Docker Registry"/><figcaption>
            <p>Add Custom Docker Registry</p>
        </figcaption>
</figure>
<p>Enter the following details to establish a connection with your Docker-compatible registry:</p>
<ul>
<li><strong>Name</strong>: Enter a name for this registry connection.</li>
<li><strong>Registry URL</strong>: Provide the URL of the registry (e.g., <code>https://YOUR_REGISTRY_DOMAIN</code>).</li>
<li><strong>Username</strong>: Enter the username required to access your registry.</li>
<li><strong>Password</strong>: Provide the password for the username above.</li>
</ul>
<h3 id="limitations-and-warnings">Limitations and Warnings</h3>
<p>The Custom (Other) registry type is intended as a fallback option when no other options are available. It comes with significant limitations:</p>
<ul>
<li><strong>No URL Validation</strong>: The provided URL will not be checked for validity or corrected.</li>
<li><strong>No Image Verification</strong>: Image existence checks are skipped, meaning ODIN Fleet will not verify if the images exist in the registry.</li>
<li><strong>No Image Browsing</strong>: Tagged images will not be retrieved, resulting in an empty list of available images for selection.</li>
<li><strong>Error Handling</strong>: If an image cannot be pulled, it will be marked with a status error, but further details may not be provided.</li>
</ul>
<h3 id="use-case">Use Case</h3>
<p>This option is best used for registries that ODIN Fleet does not fully support, such as certain third-party or custom-built Docker registries. It provides a basic level of integration by allowing you to use Docker login credentials but lacks the advanced features available for fully supported registries.</p>
<h2 id="4-save-the-configuration">4. Save the Configuration</h2>
<p>After entering the necessary details, click &ldquo;Save&rdquo; to complete the integration.</p>
<p>Please proceed with caution, as the Custom option provides minimal feedback and functionality compared to fully supported registry types.</p>
`}),e.add({id:3584,href:"https://www.4players.io/fleet/cli/fleet/deployments/",title:"Deployments",section:"ODIN Fleet Documentation",description:"Manage deployments in your account.",content:`<p>Deployments in Fleet define which server configurations (and therefore which images) are being deployed at which
location and with how many instances. You can manage deployments using the CLI.</p>
<p>To create a deployment you will need to have a configuration and an image. You can create these using the CLI or the
dashboard. You will also need to provide information about the location. You can use the <a href="../locations">locations</a>
commands to get information about available locations.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In code, we sometimes refer to deployments as <code>AppLocationSettings</code>. This is the same thing as a deployment. In some
data structures (like in <code>Server</code>) we refer to deployments in a <code>appLocationSettingId</code>. We plan to deprecate this
terminology in the future.</p>
</div>
</div>

<h2 id="overview">Overview</h2>
<p>The <code>deployments</code> commands allow you to manage deployments of your app. You can create new deployments, list existing
deployments, and delete deployments that are no longer needed.</p>
<p>You can have multiple deployments at the same location with different configurations. Each deployment is tied to a
specific configuration and location. You can change the number of instances for a deployment, but you cannot change the
location afterwards. If you change the configuration, the deployment will be updated to use the new configuration and
all server instances will be restarted with the new image.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet deployments &lt;command&gt;</code></p>
<h2 id="commands">Commands</h2>
<ul>
<li><a href="./list">List</a>: List all deployments in your account.</li>
<li><a href="./get">Get</a>: Display detailed information about a deployment.</li>
<li><a href="./create">Create</a>: Create a new deployment.</li>
<li><a href="./delete">Delete</a>: Delete a deployment.</li>
<li><a href="./update">Update</a>: Update a deployment</li>
</ul>
`}),e.add({id:3585,href:"https://www.4players.io/odin/introduction/concepts/",title:"Use cases",section:"ODIN Documentation",description:"Various use cases and how ODIN can help implementing them quickly",content:`<p>We have compiled a couple of standard use-cases for ODIN and show you which benefits ODIN has to offer. So let&rsquo;s get
started:</p>
<h2 id="basic-concepts">Basic concepts</h2>
<p>It&rsquo;s important to understand the basic concept of ODIN:</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    OR2[Odin Room 1]
    OR[Odin Room 2]        
  end
  subgraph Mobile
    ClientA[Client D] &lt;--&gt; OR
    ClientB[Client C] &lt;--&gt; OR
  end
  subgraph Desktop 
    ClientB[Client C] &lt;--&gt; OR2   
    ClientC[Client B] &lt;--&gt; OR2
  end
  subgraph Consoles*
    ClientD[Client A] &lt;--&gt; OR2
  end
</code></pre>
<p>ODIN is a cloud-based client-server application that can easily be integrated into any game or application and even
the web. All clients (i.e. users) connected to the same room can chat with all users in that room. Some users may
not send any audio and just listening (i.e. spectator). Users also can connect to multiple rooms at the same time
and it&rsquo;s up to you to send audio to all rooms or just one of them.</p>
<h2 id="multiplayer-games">Multiplayer games</h2>
<p>With its 3D positional audio and deep engine integration ODIN is best suited for shooters and battle royal games.
But also hide &amp; seek games and many other multiplayer first person or third person games or even virtual reality and
augmented reality video conferencing solutions.</p>
<p>Let&rsquo;s consider a game with these features:</p>
<ul>
<li>Multiplayer shooter game</li>
<li>Two gameplay modes: Team Based (like in CounterStrike or Rainbow Six Siege) and Deathmatch (last man
standing)</li>
<li>Private team chat: All users sharing a team can talk to other team members</li>
<li>World chat. The voice and sound from players should also be &ldquo;leaked&rdquo; into the world.</li>
<li>Lobby where players can hang around to find team members and to just chat</li>
</ul>
<p>Now, we&rsquo;ll have a look at the network topology of such a game. It might be a bit confusing first, but it&rsquo;s basically
very simple. <strong>We hope you read on if we say that you can implement these voice chat features production ready within
one day - no registration required</strong>!</p>
<pre><code class="language-mermaid">graph LR
  subgraph ODIN Server
    direction RL
    OR3[Room Lobby]
    OR[Room A_Team_A]        
    OR2[Room A_Team_B]
    World[Room A_World]                                   
    World2[Room B_World]                                   
  end  
  subgraph Team A on GS A
    PlayerB[Player B] &lt;--&gt; OR       
    PlayerB[Player B] &lt;--&gt; World       
    PlayerC[Player C] &lt;--&gt; OR 
    PlayerC[Player C] &lt;--&gt; World 
  end    
  subgraph Team B on GS A
    PlayerE[Player D] &lt;--&gt; World     
    PlayerE[Player D] &lt;--&gt; OR2 
    PlayerF[Player E] &lt;--&gt; World         
    PlayerF[Player E] &lt;--&gt; OR2      
  end      
  subgraph Deathmatch on GS B
    PlayerI[Player F] &lt;--&gt; World2
    PlayerJ[Player G] &lt;--&gt; World2
  end  
  subgraph Lobby
    PlayerH[Player A] &lt;--&gt; OR3
  end      
  subgraph Gameserver Fleet
    GS[Gameserver A] --&gt; PlayerB
    GS[Gameserver A] --&gt; PlayerC
    GS[Gameserver A] --&gt; PlayerE
    GS[Gameserver A] --&gt; PlayerF
    GS2[Gameserver B] --&gt; PlayerI
    GS2[Gameserver B] --&gt; PlayerJ
  end
</code></pre>
<p>As you have learned in <a href="#basic-concepts">Basic Concepts</a> all users connected to the same room will be able to talk
to anyone else in that room. A room in ODIN is just a string. It can be anything and a room is created dynamically
if the first player connects to that room and is deleted once the last user has left the room:</p>
<ul>
<li>You don&rsquo;t need to do any book keeping</li>
<li>Figure out a good algorithm to deterministically create a text string out of your game logic so that users that
join the same room that should be able to chat together.</li>
</ul>
<p>In this example, we use the string <code>Lobby</code> for all players running the game but not playing yet. Of course, you could
have different rooms within the lobby like <code>Welcome</code> and <code>Finding_Players</code>.</p>
<p>Next, we have players B - E that are playing on Gameserver A in two different teams. For each team, a room has been
created which is a string concatenated from the Name of the Gameserver (could be an IP address and Port for example)
and the Team Name which is <code>A_Team_A</code> and <code>A_Team_B</code>. Just connect to that room like this and all team members will
be able to chat together.</p>
<pre><code class="language-C#">OdinHandler.Instance.JoinRoom(&quot;A_Team_A&quot;);
</code></pre>
<p>The next thing we need to add is the world chat. Check out this image to understand what we mean with that:</p>
<figure><img src="/images/odin/odin_map.jpg"
         alt="A game map showing ODIN integration"/><figcaption>
            <p>A game map showing ODIN integration</p>
        </figcaption>
</figure>
<p>In real world, when people talk to other people via headphones, other people around can hear what that person is
saying. This is what we mean with &ldquo;World chat&rdquo;. You can just connect all players to another room called <code>A_World</code>
for the &ldquo;world&rdquo; they are in. And now, other players will be able to listen to what you are saying to your team
members. So, better don&rsquo;t scream and make sure nobody is listening.</p>
<p>So, our code would look like this:</p>
<pre><code class="language-C#">OdinHandler.Instance.JoinRoom(&quot;A_Team_A&quot;);
OdinHandler.Instance.JoinRoom(&quot;A_World&quot;);
</code></pre>
<p>And if someone changes the team, you&rsquo;d use these two lines:</p>
<pre><code class="language-C#">OdinHandler.Instance.LeaveRoom(&quot;A_Team_A&quot;);
OdinHandler.Instance.JoinRoom(&quot;A_Team_B&quot;);
</code></pre>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The team based chat should not be 3D positional audio, because in real world the team members would have headphones
on while talking to their team members where volume is always the same. As we have a deep engine integration you can
just disabled 3D audio for these audio connections for example with one simple setting in Unity: <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
needs to be <code>0.0f</code> for these use cases and <code>1.0f</code> if you want to have 3D audio. That&rsquo;s just
another <strong>one line</strong> of code to completely change the user experience!</p>
</div>
</div>

<p>Unity or Unreal do all the heavy lifting of 3D audio calculation for us. Game engines automatically do the 3D
spatial audio effects for us. And we can use standard game engine audio features like mixers and DSP to create fancy
audio effects like echo (in large rooms) or signal noise to make the players experience even more realistic.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border"><p>Please note: ODIN can handle thousands of users within a single room and rooms can virtually scale indefinitely
and adjust to the games load in real-time. Whatever you are planning. We got you covered. If you are interested in
hosting ODIN servers yourself: That&rsquo;s also possible.</p>
</div>
</div>

<p>Sounds interesting? Then get started for free and without registration:</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="mmos">MMOs</h2>
<p>Massively multiplayer online games are very easy to implement with ODIN. You can have the same network topology as
seen above for multiplayer games. As MMOs typically have huge worlds they often have some sort of segmentation.</p>
<p>We&rsquo;d love to play a game like this:</p>
<ul>
<li>Space MMO</li>
<li>Every solar system has its own gameserver (for segmentation) and players can jump from one solar system to another
via worm wholes (i.e. does not take much time to transfer from one solar system to another)</li>
<li>The clue is, that every player has a radio installed with 5 channels, and they can talk to all other players in
that channel - independently of their position in the galaxy.</li>
<li>Players can also call friends in a direct chat.</li>
</ul>
<p>Let&rsquo;s have a look at the network topology if this game (radio channels 3 - 5 omitted for clarity):</p>
<pre><code class="language-mermaid">graph LR
  subgraph ODIN Server
    direction RL
    C1[Room Radio_Channel_1]                                     
    C2[Room Radio_Channel_2]                                   
    DC[Room DirectChat_FG]                                   
  end  
  subgraph In Game
    PlayerH[Player A] &lt;--&gt; C1
    PlayerB[Player B] &lt;--&gt; C1              
    PlayerC[Player C] &lt;--&gt; C1 
    PlayerF[Player D] &lt;--&gt; C2
    PlayerE[Player E] &lt;--&gt; C2                   
    PlayerI[Player F] &lt;--&gt; DC
    PlayerJ[Player G] &lt;--&gt; DC
  end   
  subgraph Gameserver Fleet
    GS[Solar System A] --&gt; PlayerH
    GS[Solar System A] --&gt; PlayerB
    GS[Solar System A] --&gt; PlayerC    
    GS[Solar System A] --&gt; PlayerF
    GS2[Solar System B] --&gt; PlayerE    
    GS2[Solar System B] --&gt; PlayerI
    GS2[Solar System B] --&gt; PlayerJ
  end
</code></pre>
<p>As you can see, ODIN is completely independent of your multiplayer topology. This allows you to quickly find the
best approach of voice communication within your game without constantly refactoring your client server architecture.
<strong>ODIN is a pure client side implementation and thus easy to implement</strong>!</p>
<p>In the diagram above we have this &ldquo;game state&rdquo;:</p>
<ul>
<li>Players A-D are in <em>Solar System A</em>, while players E-G are in <em>Solar System B</em>.</li>
<li>Players D and E are talking in the same radio, although they are on different game servers and therefore solar
systems.</li>
<li>Players A-C talk in radio channel 1.</li>
<li>Players F-G have a direct chat.</li>
</ul>
<h5 id="direct-chat">Direct Chat</h5>
<p>For the direct chat feature we have created a simple room name with <code>DirectChat_FG</code>, which is just a string
concatenated from the fixed keyword <code>DirectChat_</code> and then the ID or name of Players A and Player B. Both players are
connected to that room like this (pseudo code):</p>
<pre><code class="language-C#">class Player
{
    private void GetPlayerID()
    {
        return netID;
    }
    
    public void CallPlayer(Player otherPlayer)
    {
        // Join direct chat room
        string roomName = &quot;DirectChat_&quot; + this.GetPlayerID() + otherPlayer.GetPlayerID();
        OdinHandler.Instance.JoinRoom(roomName);
        
        // Signal the client of the other player to join the same room
        otherPlayer.RoomJoinRequest(this, roomName);
    }
    
    public void RoomJoinRequest(Player otherPlayer, string roomName)
    {
        // Show &quot;Ring Notification&quot;
        UI.ShowIncomingCallNotification(otherPlayer.name, roomName);                
    }
    
    public void OnAcceptIncomingCall(string roomName)
    {
        // Signal the client of the other player to join the same room
        OdinHandler.Instance.JoinRoom(roomName);
    }
}
</code></pre>
<p>That&rsquo;s it. It&rsquo;s as easy as figuring out a good string, connecting to a room and then signaling the other client an
incoming call. The other client is showing a UI with a button to accept the call. If accepted the other client joins
the same room, and they can talk. Hanging up is just leaving the room!</p>
<h5 id="radio-with-different-channels">Radio with different channels</h5>
<p>This is easy to do. The Player has a UI where he can set the radio channel. For each radio channel we just create a
simple string like <code>Radio_Channel_1</code> and <code>Radio_Channel_2</code>. When a player changes the radio channel, we just need to
leave the current room and connect the other room:</p>
<pre><code class="language-C#">class Radio
{
    private string _currentRadio = null;
    
    public void OnRadioChannelChanged(int channel)
    {
        if (_currentRadio != null) {
            OdinHandler.Instance.LeaveRoom(_currentRadio);
        }
        
        _currentRadio = &quot;Radio_Channel_&quot; + channel.ToString();
        OdinHandler.Instance.JoinRoom(_currentRadio);        
    }      
}
</code></pre>
<p>Sounds interesting? Then get started for free and without registration:</p>
<p><a href='/odin/guides/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="open-world">Open World</h2>
<p>Open world games are awesome, because they give gamers so much freedom, however, those are not so easy to implement. At
least the voice part will be very easy to do.</p>
<figure><img src="/images/odin/use_case_open_world.jpg"
         alt="Open world with action circles"/><figcaption>
            <p>Open world with action circles</p>
        </figcaption>
</figure>
<p>In this example, we have two players running around a huge map. ODIN can handle thousands of users in one room with
ease. The deep engine integration of ODIN enables developers to leverage the skills they already have and don&rsquo;t need to
learn something new.</p>
<p>All you have to do is to &ldquo;through&rdquo; all players in the same room. ODIN servers know where the players are in 3D space and
can route voice packets only to those players that are close enough. This way, CPU on client side is only spent on
voice that happens nearby. Network bandwidth is also only used for the necessary audio packets with zero overhead.</p>
<p>Our deep engine integration does not require you to do anything? Just <a href="/odin/introduction/structure/">join a room</a> on client side, handle a couple of callbacks and that&rsquo;s all.</p>
<p>Volume will change with the distance between the players and with headphones or stereo speakers they&rsquo;ll hear the
direction where the other player is. It&rsquo;s an immersive experience for your players!</p>
<p>Sounds interesting? Then get started for free and without registration:</p>
<p><a href='/odin/guides/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="vr-and-ar">VR and AR</h2>
<p>VR games and applications need to be as immersive and realistic as possible to prevent users from getting motion
sick and to feel strange when the headset is on. While this is of course true for graphics, it&rsquo;s even more important
for audio. Headset creators have spent a lot of efforts in creating good headphones and audio solutions for their
devices, let&rsquo;s make use of them!</p>
<p>Voice chat in VR (and to some extend in AR) is even more important than screen based gaming, as typing in VR is an
awkward experience and voice is the only way to chat with other people efficiently. And it&rsquo;s much more immersive, too.</p>
<p>Build virtual conferences, cinemas, multiplayer games and many more with ODIN and real-time 3D audio. In VR,
performance is key, and ODIN with its deep engine integration is best suited for these kind of experiences.</p>
<p>Sounds interesting? Then get started for free and without registration:</p>
<p><a href='/odin/guides/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="virtual-conferences--metaverse">Virtual Conferences / Metaverse</h2>
<p>An important vision these days is the metaverse. The idea is to build virtual spaces that allow people to do
everything in the virtual world that they can do in the real world. But without the constraints of the real world.
Beaming yourself in seconds to every place you imagine: in our lifetime that will not going to happen, but in
virtual world, that&rsquo;s not an issue at all.</p>
<p>One key feature of the metaverse is audio chats. It&rsquo;s key and core feature. And spatial 3D audio - i.e. the voice of
someone standing nearby is loader than someone else a couple of feet away, and the voice is coming from the
direction the person is related to the listener. These are the core features of ODIN and can be implemented in
minutes.</p>
<p>The metaverse is the vision, virtual conferences for example is one very good example for that. Surfing web pages on
virtual conferences is boring and the feeling of visiting other people and companies is not there. Virtual offices
or conferences where people can run around having &ldquo;virtual physical meetings&rdquo; is one way to replicate a more
physical presence. However, it must be natural. You should be able to chat with everyone you see, but you should
also be able to have a discreet one-to-one chat with someone else. And without the hassle of managing contact lists,
calling other users and all those complexities that come with standard voice chat tools.</p>
<p>In this example use-case we have built a virtual conference, featuring different rooms. Users are running around and
can listen and talk to everyone they see. As it is in the real world.</p>
<figure><img src="/images/odin/odin_use_case_virtual_conference_1.png"
         alt="Virtual conference"/><figcaption>
            <p>Virtual conference</p>
        </figcaption>
</figure>
<p>We use ODINs spatial 3D audio. Every user joining the conference will join a global 3D ODIN room. This way, they can
listen to the &ldquo;noise&rdquo; of other people talking and listening. Users can of course disable that room if they want to,
however, the feeling of presence also includes some sort of noise and randomly hearing other people discussing and
talking.</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    BR[Blue Room]
    YR[Yellow Room]
    FC[Floor Chat]        
    DC[Direct Chat A/B]        
  end
  subgraph Members
    ClientA[Member A] &lt;--&gt; DC    
    ClientB[Member B] &lt;--&gt; DC
    ClientB[Member B] &lt;--&gt; FC   
    ClientD[Member D] &lt;--&gt; YR
    ClientE[Member E] &lt;--&gt; YR
    ClientF[Member F] &lt;--&gt; YR
    ClientG[Member G] &lt;--&gt; FC
    ClientI[Member I] &lt;--&gt; FC
    ClientJ[Member J] &lt;--&gt; FC
    ClientC[Member C] &lt;--&gt; BR
  end
</code></pre>
<p>But, there are some benefits that don&rsquo;t exist in the real world:</p>
<p>Silent direct chats. In noisy environments, it can be hard to have a direct chat. In our virtual world, two (or more)
members standing on the floor can join a direct chat. They start talking in the public
floor chat, then if they decide to have a private chat, one member invites the other member to join a private
conversation, and if the other one agrees, they will join a private randomly created room. Users can still keep
their connection to the floor chat (dampened with lower volume) so that they still hear what is going on outside and
can react if someone reaches out to them, but they will be able to easily focus on the private conversation.</p>
<p>Next, we have virtual meeting rooms. These are spaces
that have a separate ODIN room, that means, whenever you walk into that virtual space, the user will automatically
join another ODIN room only available for those people within that virtual space.</p>
<figure><img src="/images/odin/odin_use_case_virtual_conference_2.png"
         alt="Virtual rooms with private audio sessions"/><figcaption>
            <p>Virtual rooms with private audio sessions</p>
        </figcaption>
</figure>
<p>In this example, we have that &ldquo;blue&rdquo; room and a &ldquo;yellow&rdquo; room. Every user walking into that space triggers a
collider which then joins the room. Of course you can use ODINs access key feature to only allow specific users to
join that room. It will be a secure connection and only those (unlike in the real world) that have the permissions
will be able to listen to that chat.</p>
<p>Once users walk out of this space, they leave the ODIN room and will join the global 3D audio room again to
participate in the public chat.</p>
<p>You can build these kind of applications with just a couple lines of code (pseudo code!):</p>
<pre><code class="language-C#">class VirtualConferenceMember
{
    public void Start()
    {
        // Join public floor chat
        OdinHandler.Instance.JoinRoom(&quot;Floor_Chat&quot;);
    }
    
    public void OnTrigger(Collider collider)
    {
        if (collider.collision.direction == Collider.Direction.Entering) {
          // Join private room and leave public &quot;floor&quot; chat
          OdinHandler.Instance.JoinRoom(collider.name);
          OdinHandler.Instance.LeaveRoom(&quot;Floor_Chat&quot;);
        } else if (collider.collision.direction == Collider.Direction.Exiting) {
          // Leave private room and join public floor chat
          OdinHandler.Instance.LeaveRoom(collider.name);
          OdinHandler.Instance.JoinRoom(&quot;Floor_Chat&quot;);
        }        
    }      
}
</code></pre>
<p>Sounds interesting? Then get started for free and without registration:</p>
<p><a href='/odin/guides/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="singleplayer-games">Singleplayer games</h2>
<p>One use-case for Singleplayer games is &ldquo;support&rdquo;. Sometimes players get stuck at specific locations within the game.
You can use our Web based framework to integrate ODIN into your web based community like your Forum. Within your
game you could place a &ldquo;Get help&rdquo; button. If a player clicks on that button, the player will be connected to the
same room as community members connected using the web app. The game can also leverage <span class="external-reference">User Data <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 to
provide the exact level and location to the community, so they can quickly help! You can even create a simple bot,
that listens on <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 events and sends a push notification to all community members via web
push notifications that are not currently joined to the ODIN room.</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    OR[Odin Room]        
  end
  subgraph Game
    ClientA[Player A] &lt;--&gt; OR
  end
  subgraph Web App
    ClientB[Community A] &lt;--&gt; OR   
    ClientC[Community B] &lt;--&gt; OR 
    ClientD[Community C] &lt;--&gt; OR
  end
  subgraph Notification
    Script[Bot] &lt;--&gt; OR   
  end    
</code></pre>
<p>Sounds interesting? Then get started for free and without registration:</p>
<p><a href='/odin/guides/' class="btn btn-primary">Begin Getting Started Guide</a></p>
`}),e.add({id:3586,href:"https://www.4players.io/odin/guides/unity/odin-fmod/",title:"FMOD and ODIN",section:"ODIN Documentation",description:"Learn how to integrate ODIN for voice chat functionalities while using the FMOD Audio Solution in Unity. This guide provides step-by-step instructions, code snippets, and best practices to give your users high-quality voice chat with spatial audio in your Unity games.",content:`<p>Integrating ODIN Voice Chat with the FMOD Audio Solution in Unity.</p>
<p><img src="/odin/guides/unity/odin-fmod/fmod_unity_odin_header.jpg" alt="FMOD and ODIN"></p>
<h2 id="introduction">Introduction</h2>
<p>Welcome to this guide on integrating the <a href="https://www.4players.io/odin/">ODIN Voice Chat Plugin</a> with the <a href="https://www.fmod.com/unity">FMOD Audio Solution</a> in Unity. The code used in this guide is available on the <a href="https://github.com/4Players/odin-unity-fmod">ODIN-FMOD Git repository</a>.</p>
<p><strong>What You&rsquo;ll Learn:</strong></p>
<ul>
<li>How the <span class="external-reference">FMODMicrophoneReader <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODMicrophoneReader.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 scripts work and how to use them in your project</li>
<li>Properly set up ODIN in Unity when using FMOD as audio solution</li>
<li>Deal with limitations and potential pitfalls</li>
</ul>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Note:</strong> This guide assumes that your project has disabled Unity&rsquo;s built-in audio.</p>
</div>
</div>





<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Disclaimer:</strong> Be aware that the implementation shown here uses Programmer Sounds of the FMOD Engine. While this allows real-time audio data, a big disadvantage of this approach is an increased latency by ~500ms.</p>
</div>
</div>

<h2 id="getting-started">Getting Started</h2>
<p>To follow this guide, you&rsquo;ll need to have some prerequisites:</p>
<ul>
<li>Basic knowledge of Unity</li>
<li>The FMOD Plugin for Unity, which you can get <a href="https://www.fmod.com/unity">here</a></li>
<li>The ODIN Voice Chat Plugin, available <a href="https://github.com/4Players/odin-sdk-unity/releases">here</a></li>
</ul>
<p>To set up FMOD in your project, please follow FMOD&rsquo;s in-depth integration-tutorial. You can find the tutorial <a href="https://www.fmod.com/docs/2.02/unity/integration-tutorial.html">here</a>.</p>
<p>To set up the ODIN Voice Chat Plugin, please take a look at our Getting-Started guide, which you can find here:</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin ODIN Getting Started Guide</a></p>
<h2 id="fmodmicrophonereader">FMODMicrophoneReader</h2>
<p>The <span class="external-reference">FMODMicrophoneReader <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODMicrophoneReader.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 script is an essential part of the FMOD integration. It replaces the default ODIN <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component, taking over the microphone input responsibilities by using FMOD. This script is crucial for reading microphone data and sending it to the ODIN servers for voice chat.</p>
<p>You can either follow the Usage setup to drop the <span class="external-reference">FMODMicrophoneReader <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODMicrophoneReader.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 directly into your project, or take a look at how it works to adjust the functionality to your requirements.</p>
<h3 id="usage">Usage</h3>
<ol>
<li>Add the <span class="external-reference">FMODMicrophoneReader <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODMicrophoneReader.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 script to your <code>OdinManager</code> prefab.</li>
<li>Disable the original <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component.</li>
</ol>
<figure style="max-width: 100%px"><a href="/images/odin/unity/odin-fmod_FMODMicrophoneReader_Usage.webp" title="Click to enlarge" data-lity><img src="/images/odin/unity/odin-fmod_FMODMicrophoneReader_Usage.webp"
         alt="The OdinManager prefab after adding the FMODMicrophoneReader and disabling the original MicrophoneReader" width="100%"/></a><figcaption>
            <p>The <code>OdinManager</code> prefab after adding the <code>FMODMicrophoneReader</code> and disabling the original <code>MicrophoneReader</code></p>
        </figcaption>
</figure>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you&rsquo;re using ODIN Plugin versions older than 1.5.9, do not remove the <span class="external-reference">MicrophoneReader <a href="/odin/sdk/unity/classes/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
component, as doing so may lead to NullpointerExceptions.</p>
</div>
</div>





<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The script currently doesn&rsquo;t support automatic device switching or allow for programmatically changing devices. If you&rsquo;d like to see extensions to this script, feel free to <a href="https://4np.de/discord">join our Discord server</a> and let us know.</p>
</div>
</div>

<h3 id="how-it-works">How it works</h3>
<p>To read data from the microphone using FMOD, we&rsquo;ll need to perform the following steps:</p>
<ol>
<li>Setup and create a <code>FMOD.Sound</code> object, into which FMOD can store the microphone input data.</li>
<li>Start the microphone recording.</li>
<li>Continually read the FMOD microphone data and push it to the ODIN servers</li>
</ol>
<h4 id="1-setup">1. Setup</h4>
<p>The setup is performed in Unity&rsquo;s <code>Start()</code> method.</p>
<p><strong>Retrieve Microphone Info</strong></p>
<p>You need to retrieve details about the microphone, such as the sampling rate and the number of channels. We&rsquo;ll use this info to configure the FMOD recording sound in the next step and the ODIN microphone streams later on.</p>
<pre><code class="language-csharp">FMODUnity.RuntimeManager.CoreSystem.getRecordDriverInfo(_currentDeviceId, out _, 0, out _, 
    out _nativeRate, out _, out _nativeChannels, out _);
</code></pre>
<p><strong>Configure Recording Sound Info</strong></p>
<p>After obtaining the input device details, the next action is to set up the <code>CREATESOUNDEXINFO</code> object. This object carries essential metadata that FMOD needs for audio capture.</p>
<pre><code class="language-csharp">_recordingSoundInfo.cbsize = Marshal.SizeOf(typeof(CREATESOUNDEXINFO));
_recordingSoundInfo.numchannels = _nativeChannels;
_recordingSoundInfo.defaultfrequency = _nativeRate;
_recordingSoundInfo.format = SOUND_FORMAT.PCMFLOAT;
_recordingSoundInfo.length = (uint)(_nativeRate * sizeof(float) * _nativeChannels);
</code></pre>
<p>We use <code>SOUND_FORMAT.PCMFLOAT</code> because ODIN requires this format for microphone data. This avoids the need for audio data conversions later on.</p>
<p>The <code>_recordingSoundInfo.length</code> is set to capture one second of audio. To change the recording duration, you can adjust the formula with a different multiplier.</p>
<p><strong>Create Recording Sound</strong></p>
<p>To hold the captured audio, FMOD requires us to create a FMOD <code>Sound</code> object as shown below.</p>
<pre><code class="language-csharp">FMODUnity.RuntimeManager.CoreSystem.createSound(&quot;&quot;, MODE.LOOP_NORMAL | MODE.OPENUSER,
    ref _recordingSoundInfo,
    out _recordingSound);
</code></pre>
<p>Here, we use the <code>MODE.LOOP_NORMAL | MODE.OPENUSER</code> flags in combination with the previously configured <code>_recordingSoundInfo</code> to initialize the <code>_recordingSound</code> object.</p>
<h4 id="2-recording">2. Recording</h4>
<p>At this point, we&rsquo;re ready to start capturing audio. To do so, call the <code>recordStart</code> method from FMOD&rsquo;s core system.</p>
<pre><code class="language-csharp">FMODUnity.RuntimeManager.CoreSystem.recordStart(_currentDeviceId, _recordingSound, true);
_recordingSound.getLength(out _recordingSoundLength, TIMEUNIT.PCM);
</code></pre>
<p>After initiating the recording, we also get the length of the recorded sound in PCM samples by calling <code>getLength</code>. This value will help us manage the recording buffer in later steps.</p>
<h4 id="3-continually-push-microphone-data">3. Continually push microphone data</h4>
<p>In the <code>Update()</code> method, we manage the ongoing capture of audio data from the FMOD microphone and its transmission to the ODIN servers. This ensures that the audio stream remains both current and continuously active.</p>
<p><strong>Initialization</strong></p>
<p>The method starts by checking if there is an active <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 with valid connections and rooms. If not, it returns immediately.</p>
<pre><code class="language-csharp">if (!OdinHandler.Instance || !OdinHandler.Instance.HasConnections || OdinHandler.Instance.Rooms.Count == 0)
       return;
</code></pre>
<p>The next step is to find out how much audio has been recorded since the last check. This way we know how much data to read from the buffer.</p>
<pre><code class="language-csharp">FMODUnity.RuntimeManager.CoreSystem.getRecordPosition(_currentDeviceId, out uint recordPosition);
uint recordDelta = (recordPosition &gt;= _currentReadPosition)
    ? (recordPosition - _currentReadPosition)
    : (recordPosition + _recordingSoundLength - _currentReadPosition);

// Abort if no data was recorded
if (recordDelta &lt; 1)
    return;
</code></pre>
<p>If the read buffer is too short to hold the new audio data, its size is updated.</p>
<pre><code class="language-csharp">if(_readBuffer.Length &lt; recordDelta)
    _readBuffer = new float[recordDelta];
</code></pre>
<p><strong>Read Microphone Data</strong></p>
<p>Microphone data is read from the FMOD sound object and copied into the read buffer using FMODs <code>@lock</code> and the System <code>Marshal.Copy</code> functions.</p>
<pre><code class="language-csharp">IntPtr micDataPointer, unusedData;
uint readMicDataLength, unusedDataLength;

_recordingSound.@lock(_currentReadPosition * sizeof(float), recordDelta * sizeof(float), out micDataPointer, out unusedData, out readMicDataLength, out unusedDataLength);
uint readArraySize = readMicDataLength / sizeof(float);
Marshal.Copy(micDataPointer, _readBuffer, 0, (int)readArraySize);
_recordingSound.unlock(micDataPointer, unusedData, readMicDataLength, unusedDataLength);
</code></pre>
<p>In this implementation, it&rsquo;s crucial to be aware of the unit differences between FMOD, ODIN, and the system&rsquo;s <code>Marshal.Copy</code> function. FMOD expects the read position and read length to be specified in bytes. In contrast, both ODIN and <code>Marshal.Copy</code> require the lengths to be represented as the number of samples being copied. Since we&rsquo;re recording in the <code>SOUND_FORMAT.PCMFLOAT</code> format, we can use <code>sizeof(float)</code> to easily switch between FMOD&rsquo;s byte-sized units and ODIN&rsquo;s sample-sized units.</p>
<p><strong>Push Microphone Data</strong></p>
<p>After reading, if there is any valid data, it is pushed to the ODIN servers and the current microphone read position is updated.</p>
<pre><code class="language-csharp">if (readMicDataLength &gt; 0)
{
    foreach (var room in OdinHandler.Instance.Rooms)
    {
        ValidateMicrophoneStream(room);
        if (null != room.MicrophoneMedia)
            room.MicrophoneMedia.AudioPushData(_readBuffer, (int)readArraySize);
    }
}

_currentReadPosition += readArraySize;
if (_currentReadPosition &gt;= _recordingSoundLength)
    _currentReadPosition -= _recordingSoundLength;
</code></pre>
<p>The <code>_currentReadPosition</code> is reset back to zero when it reaches the length of the recording buffer to avoid going out of bounds.</p>
<p>The <code>ValidateMicrophoneStream</code> method ensures that an ODIN microphone stream is setup and configured correctly:</p>
<pre><code class="language-csharp">private void ValidateMicrophoneStream(Room room)
{
    bool isValidStream = null != room.MicrophoneMedia &amp;&amp;
        _nativeChannels == (int) room.MicrophoneMedia.MediaConfig.Channels &amp;&amp;
        _nativeRate == (int) room.MicrophoneMedia.MediaConfig.SampleRate;
    if (!isValidStream)
    {
        room.MicrophoneMedia?.Dispose();
        room.CreateMicrophoneMedia(new OdinMediaConfig((MediaSampleRate)_nativeRate,
            (MediaChannels)_nativeChannels));
    }
}
</code></pre>
<p>By understanding and implementing these steps, you should be able to continually read FMOD microphone data and push it to the ODIN servers, thereby keeping your audio stream up-to-date.</p>
<h2 id="fmodplaybackcomponent">FMODPlaybackComponent</h2>
<p>The <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 script replaces the default ODIN <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 component, taking over the creation and playback of an FMOD audio stream based on the data received from the connected ODIN Media Stream.</p>
<p>You can either follow the setup to use the  <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
  directly in your project, or take a look at how it works to adjust the functionality to your requirements.</p>
<h3 id="usage-1">Usage</h3>
<ol>
<li>On the <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 script of your <code>OdinManager</code> prefab,  switch from <code>Playback auto creation</code> to <code>Manual positional audio</code>.</li>
</ol>
<figure style="max-width: 100%px"><a href="/images/odin/unity/odin-fmod_FMODPlaybackComponent_Usage.webp" title="Click to enlarge" data-lity><img src="/images/odin/unity/odin-fmod_FMODPlaybackComponent_Usage.webp"
         alt="The OdinHandler&amp;rsquo;s Manual positional audio setting required for FMODPlaybackComponent to work." width="100%"/></a><figcaption>
            <p>The <code>OdinHandler</code>&rsquo;s <code>Manual positional audio</code> setting required for <code>FMODPlaybackComponent</code> to work.</p>
        </figcaption>
</figure>
<ol>
<li>In a <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 callback, instantiate a new <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 and set the <code>RoomName</code>, <code>PeerId</code> and <code>MediaStreamId</code> values based on the <code>MediaAddedEventArgs</code> input, e.g. like this:</li>
</ol>
<pre><code class="language-csharp">...
void Start()
{
    OdinHandler.Instance.OnMediaAdded.AddListener(OnMediaAdded);
    OdinHandler.Instance.OnMediaRemoved.AddListener(OnMediaRemoved);
    ...
}
...
 private void OnMediaAdded(object roomObject, MediaAddedEventArgs mediaAddedEventArgs)
{
    if (roomObject is Room room)
    {
        FMODPlaybackComponent newPlayback = Instantiate(playbackPrefab);
        newPlayback.transform.position = transform.position;
        newPlayback.RoomName = room.Config.Name;
        newPlayback.PeerId = mediaAddedEventArgs.PeerId;
        newPlayback.MediaStreamId = mediaAddedEventArgs.Media.Id;
        _instantiatedObjects.Add(newPlayback);
    }
}
</code></pre>
<ol>
<li>Keep track of the instantiated objects and destroy <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
, if the <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
 callback is invoked, e.g. like this:</li>
</ol>
<pre><code class="language-csharp">private void OnMediaRemoved(object roomObject, MediaRemovedEventArgs mediaRemovedEventArgs)
{
    if (roomObject is Room room)
    {
        for (int i = _instantiatedObjects.Count - 1; i &gt;= 0; i--)
        {
            FMODPlaybackComponent playback = _instantiatedObjects[i];
            if (playback.RoomName == room.Config.Name 
            &amp;&amp; playback.PeerId == mediaRemovedEventArgs.Peer.Id 
            &amp;&amp; playback.MediaStreamId == mediaRemovedEventArgs.MediaStreamId)
            {
                _instantiatedObjects.RemoveAt(i);
                Destroy(comp.gameObject);
            }
        }
    }
}
</code></pre>
<p>For the full implementation details, take a look at the <span class="external-reference">AudioReadData <a href="/odin/sdk/unity/classes/mediastream/audioreaddata" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 script on our <a href="https://github.com/4Players/odin-unity-fmod">sample project repository</a>.</p>
<h3 id="how-it-works-1">How it works</h3>
<p>To playback data from the microphone stream supplied by ODIN, we&rsquo;ll need to perform the following steps:</p>
<ol>
<li>Setup and create a <code>FMOD.Sound</code> object, into which we&rsquo;ll transfer the audio data received from ODIN. FMOD will then use the <code>Sound</code> object to playback that audio.</li>
<li>Continually read the ODIN media stream data and transfer it to FMOD for playback.</li>
</ol>
<h4 id="1-setup-1">1. Setup</h4>
<p>We perform the setup in Unity&rsquo;s <code>Start()</code> method.</p>
<p><strong>Setup Playback Sound Info</strong></p>
<p>First, populate the <code>CREATESOUNDEXINFO</code> object with the settings FMOD needs to play back the audio streams correctly.</p>
<pre><code class="language-csharp">_createSoundInfo.cbsize = Marshal.SizeOf(typeof(FMOD.CREATESOUNDEXINFO));
_createSoundInfo.numchannels = (int) OdinHandler.Config.RemoteChannels;
_createSoundInfo.defaultfrequency = (int) OdinHandler.Config.RemoteSampleRate;
_createSoundInfo.format = SOUND_FORMAT.PCMFLOAT;
_pcmReadCallback = new SOUND_PCMREAD_CALLBACK(PcmReadCallback);
_createSoundInfo.pcmreadcallback = _pcmReadCallback;
_createSoundInfo.length = (uint)(playBackRate * sizeof(float) * numChannels);
</code></pre>
<p>Here, we pull the number of channels and the sample rate from <span class="external-reference">OdinHandler.Config <a href="/odin/sdk/unity/classes/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 to configure the playback settings. Similar to how the <span class="external-reference">FMODMicrophoneReader <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODMicrophoneReader.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 operates, we specify the audio format as <code>SOUND_FORMAT.PCMFLOAT</code>. This ensures compatibility between FMOD and ODIN&rsquo;s sampling units. We also set the playback sound buffer to hold one second&rsquo;s worth of audio data.</p>
<p>The crucial part of this configuration is setting up the PCM read callback. The <code>PcmReadCallback</code> function is invoked by FMOD whenever it needs fresh audio data, ensuring uninterrupted playback.</p>
<p><strong>Initialize Stream and Trigger Playback</strong></p>
<p>In this case, we opt for the <code>createStream</code> method, which is essentially the <code>createSound</code> function with the <code>MODE.CREATESTREAM</code> flag added.</p>
<pre><code class="language-csharp">FMODUnity.RuntimeManager.CoreSystem.createStream(&quot;&quot;, MODE.OPENUSER | MODE.LOOP_NORMAL, ref _createSoundInfo, out _playbackSound);
FMODUnity.RuntimeManager.CoreSystem.getMasterChannelGroup(out ChannelGroup masterChannelGroup);
FMODUnity.RuntimeManager.CoreSystem.playSound(_playbackSound, masterChannelGroup, false, out _playbackChannel);
</code></pre>
<p>To initiate playback, we retrieve the Master Channel Group from <code>FMODUnity.RuntimeManager.CoreSystem</code> and use it along with the stream we&rsquo;ve just created. Keeping a reference to the returned <code>_playbackChannel</code> allows us to configure the channel for 3D positional audio later on.</p>
<h4 id="2-read-and-playing-back-odin-audio-streams">2. Read and Playing Back ODIN Audio Streams</h4>
<p>The task of fetching audio data from ODIN and sending it to FMOD is accomplished within the <code>PcmReadCallback</code> method.</p>
<p><strong>PCM Read Callback</strong></p>
<pre><code class="language-csharp">[AOT.MonoPInvokeCallback(typeof(SOUND_PCMREAD_CALLBACK))]
private RESULT PcmReadCallback(IntPtr sound, IntPtr data, uint dataLength){
    ...
}
</code></pre>
<p>To enable calls between native and managed code, we annotate the method with the <code>[AOT.MonoPInvokeCallback(typeof(SOUND_PCMREAD_CALLBACK))]</code> attribute. The callback function is provided with three parameters, of which we only need <code>data</code> and <code>dataLength</code>. These values indicate where to store the ODIN audio data and the number of required samples, respectively.</p>
<p><strong>Data Validation</strong></p>
<p>Next, we include some validation logic:</p>
<pre><code class="language-csharp">int requestedDataArrayLength = (int)dataLength / sizeof(float);
if (_readBuffer.Length &lt; requestedDataArrayLength)
{
    _readBuffer = new float[requestedDataArrayLength];
}

if (data == IntPtr.Zero)
{
    return RESULT.ERR_INVALID_PARAM;
}
</code></pre>
<p>Similar to our approach in the <span class="external-reference">FMODMicrophoneReader <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODMicrophoneReader.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
, we use <code>sizeof(float)</code> to switch between the byte-size units used by FMOD and the sample-based units used by ODIN. If needed, we resize the <code>_readBuffer</code> and check the <code>data</code> pointer for validity.</p>
<p><strong>Read ODIN Data and Transfer to FMOD Stream</strong></p>
<p>In the final step, we read the requested amount of samples from the ODIN media stream into <code>_readBuffer</code>. Then we copy this data to FMOD using the provided <code>data</code> pointer.</p>
<pre><code class="language-csharp">if (OdinHandler.Instance.HasConnections &amp;&amp; !PlaybackMedia.IsInvalid)
{
    uint odinReadResult = PlaybackMedia.AudioReadData(_readBuffer,  requestedDataArrayLength);
    if (Utility.IsError(odinReadResult))
    {
        Debug.LogWarning($&quot;{nameof(FMODPlaybackComponent)} AudioReadData failed with error code {odinReadResult}&quot;);
    }
    else
    {
        Marshal.Copy(_readBuffer, 0, data, requestedDataArrayLength);
    }
}
</code></pre>
<p>The <span class="external-reference">AudioReadData <a href="/odin/sdk/unity/classes/mediastream/audioreaddata/"><i class="fas fa-external-link-alt"></i></a></span>
 method pulls the specified amount of data from the <code>PlaybackMedia</code> stream into <code>_readBuffer</code>. We then use ODIN&rsquo;s <span class="external-reference">Utility.IsError <a href="/odin/sdk/unity/classes/utility/iserror/"><i class="fas fa-external-link-alt"></i></a></span>
 method to verify the operation&rsquo;s success. If everything checks out, <code>Marshal.Copy</code> is used to transfer the <code>_readBuffer</code> contents to FMOD&rsquo;s designated playback location in memory, identified by the <code>data</code> pointer.</p>
<p><strong>Accessing the PlaybackMedia</strong></p>
<p>To access a specific ODIN media stream, you&rsquo;ll need three identifiers: a room name, peer id, and media stream id. You can use these to fetch the media stream with a function like the following:</p>
<pre><code class="language-csharp">private PlaybackStream FindOdinMediaStream() =&gt; OdinHandler.Instance.Rooms[RoomName]?.RemotePeers[PeerId]?.Medias[MediaStreamId] as PlaybackStream;
</code></pre>
<p>The values for RoomName, PeerId, and MediaStreamId can be obtained, for instance, from the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 callback.</p>
<h2 id="fmodplayback3dposition">FMODPlayback3DPosition</h2>
<p>After setting up the basic FMOD playback, you may want to enhance your audio experience by adding 3D positional sound features. The <span class="external-reference">FMODPlayback3DPosition <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlayback3DPosition.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 script is designed to handle this.</p>
<h3 id="usage-2">Usage</h3>
<p>To add the 3D audio features to your playback, simply add the component to the same game object your <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 is attached to. The <span class="external-reference">FMODPlayback3DPosition <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlayback3DPosition.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 behaviour will automatically connect to and setup the playback component, as well as update the 3D position of the FMOD playback channel.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The <span class="external-reference">FMODPlayback3DPosition <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlayback3DPosition.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
component currently does not connect to a <code>RigidBody</code> for velocity determination. If a doppler effect is necessary for your project, consider extending the current implementation to automatically access and update the velocity value as well.</p>
</div>
</div>

<h3 id="how-it-works-2">How It Works</h3>
<p><strong>Setup</strong></p>
<p>To incorporate 3D audio capabilities into your FMOD playback, you&rsquo;ll need to modify some channel settings. The first step is to ensure that the FMOD <code>Sound</code> and <code>Channel</code> objects are fully initialized by the <span class="external-reference">FMODPlaybackComponent <a href="https://github.com/4Players/odin-unity-fmod/blob/main/odin-fmod/Assets/Odin-FMod/FMODPlaybackComponent.cs" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 (or a comparable setup).</p>
<pre><code class="language-csharp">private IEnumerator Start()
{
    // Wait until the playback component is initialized
    while (!(_playbackComponent.FMODPlaybackChannel.hasHandle() &amp;&amp; _playbackComponent.FMODPlaybackSound.hasHandle()))
    {
        yield return null;
    }
    // Initialize 3D sound settings
    _playbackComponent.FMODPlaybackChannel.setMode(MODE._3D);
    _playbackComponent.FMODPlaybackChannel.set3DLevel(1);
    _playbackComponent.FMODPlaybackSound.setMode(MODE._3D);
}
</code></pre>
<p>After confirming initialization, we enable 3D audio by applying the <code>MODE._3D</code> flag to both <code>FMODPlaybackChannel</code> and <code>FMODPlaybackSound</code>. Additionally, we set the <code>3DLevel</code> blend level to <code>1</code> to fully engage 3D panning.</p>
<p><strong>Positional Updates</strong></p>
<p>To keep the FMOD sound object&rsquo;s position in sync with the Unity scene, we fetch the Unity GameObject&rsquo;s transform and convey its position and rotation to FMOD.</p>
<pre><code class="language-csharp"> private void FixedUpdate()
{
    if (_playbackComponent.FMODPlaybackChannel.hasHandle())
    {
        ATTRIBUTES_3D attributes3D = FMODUnity.RuntimeUtils.To3DAttributes(transform);
        _playbackComponent.FMODPlaybackChannel.set3DAttributes(ref attributes3D.position, ref attributes3D.velocity);
    }
}
</code></pre>
<p>This approach ensures that the sound source remains spatially accurate within your Unity environment, enhancing the 3D audio experience.</p>
`}),e.add({id:3587,href:"https://www.4players.io/odin/guides/unreal/odin-fmod-unreal/",title:"FMOD and ODIN in Unreal",section:"ODIN Documentation",description:"Learn how to integrate ODIN for voice chat functionalities while using the FMOD Audio Solution in Unreal. This guide provides step-by-step instructions, code snippets, and best practices to give your users high-quality voice chat with spatial audio in your Unreal games.",content:`<p>Integrating ODIN Voice Chat with the FMOD Audio Solution in Unreal.</p>
<p><img src="/odin/guides/unreal/odin-fmod/fmod_unreal_odin_header.jpg" alt="FMOD and ODIN"></p>
<h2 id="introduction">Introduction</h2>
<p>Welcome to this guide on integrating the <a href="https://www.4players.io/odin/">ODIN Voice Chat Plugin</a> with the <a href="https://www.fmod.com/docs/2.02/unreal/welcome.html">FMOD Audio Solution</a> in Unreal. The code used in this guide is available on the <a href="https://github.com/4Players/odin-unreal-fmod">ODIN-FMOD Sample Project GitHub Repository</a>.</p>
<!-- The code used in this guide is available on the [ODIN-FMOD Git repository](https://github.com/4Players/odin-unity-fmod).-->
<p><strong>What You&rsquo;ll Learn:</strong></p>
<ul>
<li>How the <code>UOdinFmodAdapter</code> script works and how to use it in your project</li>
<li>Properly set up ODIN in Unreal when using FMOD as audio solution</li>
<li>Deal with limitations and potential pitfalls</li>
</ul>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Disclaimer:</strong> Be aware that the implementation shown here uses Programmer Sounds of the FMOD Engine. While this allows real-time audio data, a big disadvantage of this approach is an increased latency by ~500ms.</p>
</div>
</div>

<h2 id="getting-started">Getting Started</h2>
<p>To follow this guide, you&rsquo;ll need to have some prerequisites:</p>
<ul>
<li>Basic knowledge of Unreal as well as FMOD</li>
<li>The FMOD Plugin for Unreal, which you can get <a href="https://www.fmod.com/download#fmodforunreal">here</a></li>
<li>The ODIN Voice Chat Plugin, available <a href="https://github.com/4Players/odin-sdk-unreal/releases">here</a></li>
</ul>
<p>To set up FMOD in your project, please follow FMOD&rsquo;s in-depth integration-tutorial. You can find the tutorial <a href="https://www.fmod.com/docs/2.03/unreal/welcome.html">here</a>.</p>
<p>To set up the ODIN Voice Chat Plugin, please take a look at our Getting-Started guide, which you can find here:</p>
<p><a href='/odin/sdk/unreal/' class="btn btn-primary">Begin ODIN Getting Started Guide</a></p>
<p>This guide will show you how to access the Odin Media Stream and copy it to the Audio Input Plugin of FMOD in order to pass it to the FMOD Audio Engine. This means, we will only cover the receiver-side of the communication - the sender just uses Unreal&rsquo;s Audio Capture Module and thus is handled no different than any other implementation of Odin in Unreal.</p>
<h2 id="sample-project">Sample Project</h2>
<p>You can find a sample project in a <a href="https://github.com/4Players/odin-unreal-fmod">repository in our GitHub account</a>. Feel free to download it and set it up in order to view a working integration of this class in a small sample project. This sample is based on the <a href="https://github.com/4Players/odin-unreal-tutorial">result of the second video</a> of the <a href="https://www.youtube.com/playlist?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Odin tutorial Series</a>.</p>
<h2 id="uodinfmodadapter">UOdinFmodAdapter</h2>
<p>The <code>UOdinFmodAdapter</code> class is an essential part of the FMOD integration. It replaces the default ODIN <code>UOdinSynthComponent</code>
 component, taking over the voice output responsibilities by using FMOD. This script is crucial for receiving voice chat data from the ODIN servers.</p>
<p>The header can be found <a href="https://github.com/4Players/odin-unreal-fmod/blob/main/Source/OdinTestProject/OdinFmodAdapter.h">here</a> and the source file is located <a href="hhttps://github.com/4Players/odin-unreal-fmod/blob/main/Source/OdinTestProject/OdinFmodAdapter.cpp">here</a></p>
<p>The <code>UOdinFmodAdapter</code> inherits from Unreal Engine&rsquo;s <code>UActorComponent</code>.</p>
<p>You can either follow the <a href="#usage">Usage</a> setup to drop the <code>UOdinFmodAdapter</code> directly into your project, or take a look at <a href="#how-it-works">how it works</a> to adjust the functionality to your requirements.</p>
<p>This is the header:</p>
<pre><code class="language-c++">#pragma once

#include &quot;CoreMinimal.h&quot;
#include &quot;FMODAudioComponent.h&quot;
#include &quot;fmod_studio.hpp&quot;
#include &quot;Components/ActorComponent.h&quot;
#include &quot;OdinFmodAdapter.generated.h&quot;

class OdinMediaSoundGenerator;
class UOdinPlaybackMedia;

UCLASS(BlueprintType, Blueprintable, meta = (BlueprintSpawnableComponent))
class ODINTESTPROJECT_API UOdinFmodAdapter : public UActorComponent
{
	GENERATED_BODY()

public:	
	// Sets default values for this component's properties
	UOdinFmodAdapter();

	UFUNCTION(BlueprintCallable, Category = &quot;Odin|Sound&quot;)
	void AssignOdinMedia(UPARAM(ref) UOdinPlaybackMedia*&amp; Media);

	FMOD_RESULT pcmreadcallback(FMOD_SOUND* inSound, void* data, unsigned int datalen);

	void DestroyComponent(bool bPromoteChildren) override;

protected:

	UPROPERTY(BlueprintReadOnly, Category = &quot;Odin|Sound&quot;)
	UOdinPlaybackMedia* PlaybackMedia = nullptr;
	TSharedPtr&lt;OdinMediaSoundGenerator, ESPMode::ThreadSafe&gt; SoundGenerator;

	float* Buffer = nullptr;
	unsigned int BufferSize = 0;


	FMOD::Sound* Sound = nullptr;
};
</code></pre>
<p>And this is the source file of the class:</p>
<pre><code class="language-c++">#include &quot;OdinUnrealSample.h&quot;
#include &quot;fmod_studio.hpp&quot;
#include &quot;FMODStudioModule.h&quot;
#include &quot;odin.h&quot;
#include &quot;OdinFunctionLibrary.h&quot;
#include &quot;OdinMediaSoundGenerator.h&quot;
#include &quot;OdinPlaybackMedia.h&quot;
#include &quot;OdinFmodAdapter.h&quot;

static FMOD_RESULT F_CALLBACK onodinpcmreadcallback(FMOD_SOUND* inSound, void* data, unsigned int datalen)
{
	FMOD::Sound* sound = (FMOD::Sound*)inSound;
	void* userdata;

	sound-&gt;getUserData(&amp;userdata);

	UOdinFmodAdapter* instance = reinterpret_cast&lt;UOdinFmodAdapter*&gt;(userdata);

	return instance-&gt;pcmreadcallback(inSound, data, datalen);
}

void UOdinFmodAdapter::AssignOdinMedia(UOdinPlaybackMedia*&amp; Media)
{
	if (nullptr == Media)
		return;

	this-&gt;SoundGenerator = MakeShared&lt;OdinMediaSoundGenerator, ESPMode::ThreadSafe&gt;();
	this-&gt;PlaybackMedia = Media;

	SoundGenerator-&gt;SetOdinStream(Media-&gt;GetMediaHandle());
}

UOdinFmodAdapter::UOdinFmodAdapter()
{
	PrimaryComponentTick.bCanEverTick = true;

	FMOD::Studio::System* System = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime);
	FMOD::System* CoreSystem = nullptr;
	System-&gt;getCoreSystem(&amp;CoreSystem);

	FMOD_CREATESOUNDEXINFO SoundInfo = { 0 };
	SoundInfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
	SoundInfo.format = FMOD_SOUND_FORMAT_PCMFLOAT;
	SoundInfo.defaultfrequency = 48000;
	SoundInfo.numchannels = 2;
	SoundInfo.pcmreadcallback = onodinpcmreadcallback;
	SoundInfo.length = (unsigned int)(48000 * sizeof(float) * 2);
	SoundInfo.userdata = this;

	if (CoreSystem-&gt;createStream(&quot;&quot;, FMOD_OPENUSER | FMOD_LOOP_NORMAL, &amp;SoundInfo, &amp;Sound) == FMOD_OK)
	{
		FMOD::ChannelGroup* group;
		CoreSystem-&gt;getMasterChannelGroup(&amp;group);
		FMOD::Channel* channel;
		CoreSystem-&gt;playSound(Sound, group, false, &amp;channel);
	}
}

FMOD_RESULT UOdinFmodAdapter::pcmreadcallback(FMOD_SOUND* inSound, void* data, unsigned int datalen)
{
	if(!data)
		return FMOD_ERR_INVALID_PARAM;

	if (!SoundGenerator || !PlaybackMedia)
		return FMOD_OK;

	unsigned int requestedDataArrayLength = datalen / sizeof(float);

	if (this-&gt;BufferSize &lt; requestedDataArrayLength)
	{
		if (nullptr != Buffer)
			delete Buffer;
		Buffer = new float[requestedDataArrayLength];

		BufferSize = requestedDataArrayLength;
	}

	const uint32 Result = SoundGenerator-&gt;OnGenerateAudio(Buffer, (int32)requestedDataArrayLength);

	if (odin_is_error(Result))
	{
		FString ErrorString = UOdinFunctionLibrary::FormatError(Result, true);
		UE_LOG(LogTemp, Error, TEXT(&quot;UOdinFmodAdapter: Error during FillSamplesBuffer: %s&quot;), *ErrorString);
		return FMOD_OK;
	}

	memcpy(data, Buffer, datalen);

	return FMOD_OK;
}

void UOdinFmodAdapter::DestroyComponent(bool bPromoteChildren)
{
	Super::DestroyComponent(bPromoteChildren);
	if (nullptr != Buffer)
	{
		delete Buffer;
		Buffer = nullptr;
		BufferSize = 0;
	}
}
</code></pre>
<p>Remember to adjust the <code>Build.cs</code> file of your game module accordingly. We need to add dependencies to &ldquo;Odin&rdquo; obviously, but also &ldquo;OdinLibrary&rdquo; is needed for the call to <code>odin_is_error()</code>. From FMOD we need the  &ldquo;FMODStudio&rdquo; Module in order to work with the FMOD Programmer Sounds. So all in all add these to your Public and Private Dependency Modules:</p>
<pre><code class="language-c#">PublicDependencyModuleNames.AddRange(
	new string[]
	{
        &quot;Core&quot;,
        &quot;Odin&quot;,
		&quot;OdinLibrary&quot;
	}
	);

PrivateDependencyModuleNames.AddRange(
	new string[] 
	{ 
		&quot;FMODStudio&quot; 
	}
	);
</code></pre>
<h2 id="usage">Usage</h2>
<p>The above class uses the FMOD Audio Input Plugin to pass dynamically created Audio Data to the FMOD Engine. It does not need any steps in FMOD Studio and will simply work out of the box. All settings are done in the code.</p>
<h3 id="integrating-the-input-component-in-your-unreal-project">Integrating the Input Component in your Unreal Project</h3>
<p>In the next step we will now use the created Component to play back the incoming Odin Media Stream. Again you can find an example of this in the <a href="https://github.com/4Players/odin-unreal-fmod/blob/main/Content/OdinContent/Blueprints/C_OdinClient.uasset">Odin Client Component of the sample project</a>.</p>
<p>First replace the creation of an <code>OdinSynthComponent</code> that you have placed in the <a href="/odin/sdk/unreal/">Odin Unreal Guide</a> in your project with the new <code>UOdinFmodAdapter</code>.</p>
<p>In the <code>OnMediaAdded</code> event of your Odin implementation in your project you can then call the <code>Assign Odin Media</code> function that we have declared in the C++ class and pass it the reference to the incoming Media Stream.</p>
<p>Like with the <code>OdinSynthComponent</code>, you can also choose to place the <code>UOdinFmodAdapter</code> directly on the Player Character as a component and then reference it in your <code>OnMediaAdded</code> event handler. This way you do not have to create it in the Blueprint and it is easier to change its properties - e.g. its FMOD-specific (attenuation) settings.</p>
<p>You can see a sample of the Blueprint implementation below:</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/odin-fmod-blueprint.png" title="Click to enlarge" data-lity><img src="/images/odin/unreal/odin-fmod-blueprint.png"
         alt="Setup for the OnMediaAdded event" width="100%"/></a><figcaption>
            <p>Setup for the OnMediaAdded event</p>
        </figcaption>
</figure>
<h2 id="how-it-works">How it works</h2>
<p>The above class uses the FMOD Programmer Sound API to pass dynamically created Audio Data to the FMOD Engine. It copies the incoming Audio Stream from Odin to the Input Buffer of the Programmer Sound by FMOD. This is done by creating an FMOD Programmer Sound and implementing a handler for the pcmreadcallback event.</p>
<h3 id="1-setup">1. Setup</h3>
<p>The setup of the <code>UOdinFmodAdapter</code> is done by passing it a reference to the incoming Odin Media Stream. In this guide we have done this via a Blueprint call, but the function can also be called from another C++ Class in your game module.</p>
<p>This function creates a new pointer to a new <code>OdinMediaSoundGenerator</code> and sets its <code>OdinStream</code> to the incoming Media&rsquo;s handle.</p>
<pre><code class="language-c++">void UOdinFmodAdapter::AssignOdinMedia(UOdinPlaybackMedia*&amp; Media)
{
	if (nullptr == Media)
		return;

	this-&gt;SoundGenerator = MakeShared&lt;OdinMediaSoundGenerator, ESPMode::ThreadSafe&gt;();
	this-&gt;PlaybackMedia = Media;

	SoundGenerator-&gt;SetOdinStream(Media-&gt;GetMediaHandle());
}
</code></pre>
<p>Next, in the Constructor of the Component we want to create and initialize the FMOD Programmer Sound. We get references to the FMOD Studio&rsquo;s Core System that is responsible for creating and playing back sounds. With it, we can create the sound for our custom component.</p>
<pre><code class="language-c++">FMOD::Studio::System* System = IFMODStudioModule::Get().GetStudioSystem(EFMODSystemContext::Runtime);
FMOD::System* CoreSystem = nullptr;
System-&gt;getCoreSystem(&amp;CoreSystem);
</code></pre>
<p>To do so, we create a new SoundInfo and set its fields to what we need for our Odin playback:</p>
<pre><code class="language-c++">SoundInfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
SoundInfo.format = FMOD_SOUND_FORMAT_PCMFLOAT;
SoundInfo.defaultfrequency = 48000;
SoundInfo.numchannels = 2;
SoundInfo.length = (unsigned int)(48000 * sizeof(float) * 2);
SoundInfo.pcmreadcallback = onodinpcmreadcallback;
SoundInfo.userdata = this;
</code></pre>
<p><code>defaultfrequency</code> and <code>numchannels</code> are Odin&rsquo;s default frequencies but choose any format that you want as long as you also initialize Odin&rsquo;s sound system with it. The <code>length</code> (in bytes) is not very important, in the example we just use the sample rate and multiply it by the number of bytes per sample and the number of channels to get an effective length of one second.</p>
<p>The last two fields in the example are needed to handle the FMOD event to fill the sound buffer:</p>
<p>The <code>pcmreadcallback</code> needs to point to a static function of your class. Since the function is static, but we want to access the correct Odin SoundGenerator (which is a different one for each object of the class), we need to also pass a pointer to the correct instance of this Actor Component. Since the <code>pcmreadcallback</code> passes a reference to the created FMODSound, we can use its <code>userdata</code> field to pass any needed data. Here we just put a pointer to the ActorComponent that created the sound. Later we will use this to call the function on the correct instance, when the static <code>pcmreadcallback</code> event handler is called.</p>
<p>Lastly we will create the Programmer Sound via the <code>CoreSystem-&gt;createStream</code> function. We don&rsquo;t need to pass it a name, but need to set the <code>FMOD_OPENUSER</code> and <code>FMOD_LOOP_NORMAL</code> flags. The first one is needed to mark the sound as a Programmer Sound, meaning that FMOD will call the <code>pcmreadcallback</code> in order to fill its buffer - this is opposed to other Sounds, where you would pass e.g. a Sound file. The second flag marks the stream as looping, so that the buffer is filled indefinitely. Otherwise the Sound would stop playing, after the number of samples specified in the <code>length</code> field has been played. Additionally we pass the addresses to our <code>SoundInfo</code> and a pointer to the created <code>FMODSound</code>. The latter is set in the function so that we can manipulate it later.</p>
<p>If the creation succeeds, we call the <code>CoreSystem-&gt;playSound()</code> function with the just created sound and are good to go!</p>
<pre><code class="language-c++">if (CoreSystem-&gt;createStream(&quot;&quot;, FMOD_OPENUSER | FMOD_LOOP_NORMAL, &amp;SoundInfo, &amp;Sound) == FMOD_OK)
{
	FMOD::ChannelGroup* group;
	CoreSystem-&gt;getMasterChannelGroup(&amp;group);
	FMOD::Channel* channel;
	CoreSystem-&gt;playSound(Sound, group, false, &amp;channel);
}
</code></pre>
<h3 id="2-reading-and-playing-back-odin-audio-streams">2. Reading and Playing Back ODIN Audio Streams</h3>
<p>The <code>onodinpcmreadcallback</code> function is called from the FMOD Stduio API whenever the playback requests more data for its buffer.</p>
<p>Since this function needs to be static, we need to get the userdata that we created the sound with and call the proper handler function on the instance that we reference here. We cast the FMOD_SOUND object to an <code>FMOD::Sound</code> (which is exactly the same kind of object but has different functions). On the cast object we can call <code>getUserData()</code> to get the pointer. We just need to reinterpret it as a pointer to a <code>UOdinFmodAdapter</code> component and then we can call its instance function <code>pcmreadcallback</code> with the given parameters from FMOD.</p>
<pre><code class="language-c++">static FMOD_RESULT F_CALLBACK onodinpcmreadcallback(FMOD_SOUND* inSound, void* data, unsigned int datalen)
{
	FMOD::Sound* sound = (FMOD::Sound*)inSound;
	void* userdata;

	sound-&gt;getUserData(&amp;userdata);

	UOdinFmodAdapter* instance = reinterpret_cast&lt;UOdinFmodAdapter*&gt;(userdata);

	return instance-&gt;pcmreadcallback(inSound, data, datalen);
}
</code></pre>
<p>In this function we first check if the component was set up properly and if the incoming parameters are valid.</p>
<pre><code class="language-c++">if (!data)
	return FMOD_ERR_INVALID_PARAM;

if (!SoundGenerator || !PlaybackMedia)
	return FMOD_OK;
</code></pre>
<p>The <code>datalength</code> parameter indicates the number of bytes instead of samples, so in order to pass it Odin, we first need to calculate the number of samples from it. Afterwards we create a buffer with the according size or re-create it if the last used one was not big enough. This is then saved in an instance variable <code>Buffer</code>.</p>
<pre><code class="language-c++">unsigned int requestedDataArrayLength = datalen / sizeof(float);

if (this-&gt;BufferSize &lt; requestedDataArrayLength)
{
	if (nullptr != Buffer)
		delete Buffer;
	Buffer = new float[requestedDataArrayLength];

	BufferSize = requestedDataArrayLength;
}
</code></pre>
<p>Now the <code>UOdinFmodAdapter</code> calls the <code>OnGenerateAudio</code> function of the <code>OdinMediaSoundGenerator</code>. The generated sound is copied into the <code>Buffer</code>.</p>
<pre><code class="language-c++">const uint32 Result = SoundGenerator-&gt;OnGenerateAudio(Buffer, (int32)requestedDataArrayLength);
</code></pre>
<p>If any error occurs in that call, the function will return without copying anything.</p>
<pre><code class="language-c++">if (odin_is_error(Result))
{
	FString ErrorString = UOdinFunctionLibrary::FormatError(Result, true);
	UE_LOG(LogTemp, Error, TEXT(&quot;UOdinFmodAdapter: Error during FillSamplesBuffer: %s&quot;), *ErrorString);
	return FMOD_OK;
}
</code></pre>
<p>Lastly, if everything worked as expected we finally copy the data in the <code>Buffer</code> over to the <code>data</code> buffer to pass it to FMOD. The function returns <code>FMOD_OK</code> to let FMOD know it can now use the <code>data</code> buffer.</p>
<pre><code class="language-c++">memcpy(data, Buffer, datalen);

return FMOD_OK;
</code></pre>
<h2 id="conclusion">Conclusion</h2>
<p>This simple implementation of an Odin to FMOD adapter for Unreal is a good starting point to give you the control over the audio playback that you need for your Odin Integration in your project. Feel free to check out the sample project in our public GitHub and re-use or extend any code to fit your specific needs.</p>
<p>This is only a starting point of your Odin Integration with FMOD and the Unreal Engine. Feel free to check out any other learning resources and adapt the material like needed, e.g. create realistic or out of this world dynamic immersive experiences with <a href="https://www.fmod.com/docs/2.02/studio/advanced-topics.html#spatialization-options">FMOD Spatial Audio</a> aka &ldquo;<em>proximity chat</em>&rdquo; or &ldquo;<em>positional audio</em>&rdquo;:</p>
<ul>
<li><a href="https://www.fmod.com/docs/2.02/studio/advanced-topics.html#spatialization-options">FMOD Spatial Audio</a></li>
<li><a href="https://www.youtube.com/playlist?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Video Tutorial Series on Odin and Unreal Engine</a></li>
<li><a href="https://www.4players.io/odin/introduction/">Odin General Introduction</a></li>
<li><a href="https://www.4players.io/odin/sdk/unreal/blueprint-reference/">Odin Unreal SDK Blueprint Reference</a></li>
</ul>
`}),e.add({id:3588,href:"https://www.4players.io/odin/guides/unity/user-data/",title:"Understanding User Data",section:"ODIN Documentation",description:"Discover how to synchronize ODIN user data with complex multiplayer frameworks for a seamless gaming experience. Make use of the provided examples to sync game information and voice chat.",content:`<p>Every peer (players or user connected to an ODIN room) has its own user data. User data within ODIN is always defined
like this:</p>
<pre><code class="language-C#">public byte[] UserData { get; set; }
</code></pre>
<p>As you can see, it&rsquo;s just an array of bytes. How you choose to use this is entirely up to you. For example, in simpler games like casual games, board games, or other multiplayer games that don&rsquo;t require advanced features like movement prediction, you don&rsquo;t need complex multiplayer frameworks like <code>Mirror Networking</code>
 or Unity MLAPI to build your game. ODIN&rsquo;s user data is typically enough, as you can link your custom scripts to the <span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
 callback, which is triggered whenever user data changes for a connected peer.</p>
<p>If you&rsquo;re planning to use or are already using one of these more complex frameworks, you&rsquo;ll need to sync ODIN with those tools, as your players will be connecting to two different servers: the (dedicated) server for the game and ODIN&rsquo;s backend servers for voice. But don&rsquo;t worry, it&rsquo;s simpler than it seems—ODIN&rsquo;s SDK handles all the heavy lifting for you. In your multiplayer game, players might be on different teams, and only those teams should share the same ODIN room. To synchronize this information between ODIN and your game, you can use <code>UserData</code>.</p>
<p>In our examples, we use a simple class that defines a straightforward structure, serializes it to a JSON string, and sets it as the peer&rsquo;s user data. Then, on the receiving end, this string is deserialized back into a class instance.</p>
<p>You&rsquo;ll find this class in the <code>samples folder</code>
 of the Unity SDK, and it looks like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                CustomUserDataJsonFormat implementation
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">using OdinNative.Odin;
using System;
using System.Text;
using UnityEngine;

namespace OdinNative.Unity.Samples
{
    [Serializable]
    class CustomUserDataJsonFormat : IUserData
    {
        public string name;
        public string seed;
        public string status;
        public int muted;
        public string user;
        public string renderer;
        public string platform;
        public string revision;
        public string version;
        public string buildno;

        public CustomUserDataJsonFormat() : this(&quot;Unity Player&quot;, &quot;online&quot;) { }
        public CustomUserDataJsonFormat(string name, string status)
        {
            this.name = name;
            this.seed = SystemInfo.deviceUniqueIdentifier;
            this.status = status;
            this.muted = 0;
            this.user = string.Format(&quot;{0}.{1}&quot;, Application.companyName, Application.productName);
            this.renderer = Application.unityVersion;
            this.platform = string.Format(&quot;{0}/{1}&quot;, Application.platform, Application.unityVersion);
            this.revision = &quot;0&quot;;
            this.version = Application.version;
            this.buildno = Application.buildGUID;
        }

        public UserData ToUserData()
        {
            return new UserData(this.ToJson());
        }

        public static CustomUserDataJsonFormat FromUserData(UserData userData)
        {
            return JsonUtility.FromJson&lt;CustomUserDataJsonFormat&gt;(userData.ToString());
        }

        public static bool FromUserData(UserData userData, out CustomUserDataJsonFormat customUserData)
        {
            try
            {
                customUserData = JsonUtility.FromJson&lt;CustomUserDataJsonFormat&gt;(userData.ToString());
                return true;
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                customUserData = null;
                return false;
            }
        }

        internal string GetAvatarUrl()
        {
            return string.Format(&quot;https://avatars.dicebear.com/api/bottts/{0}.svg?textureChance=0&quot;, this.seed);
        }

        public string ToJson()
        {
            return JsonUtility.ToJson(this);
        }

        public override string ToString()
        {
            return this.ToJson();
        }

        public byte[] ToBytes()
        {
            return Encoding.UTF8.GetBytes(this.ToString());
        }
    }
}
</code></pre>
</div>
</div>

<p>If you like this way of handling user data, copy and paste the code into your Unity project, rename it to whatever suits you (and update the namespace). Then, use it to set the user data when joining a room.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Using our CustomUserDataJsonFormat
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">// Generate a JSON User Data object with the players netId and name in the network
CustomUserDataJsonFormat userData = new CustomUserDataJsonFormat(name, &quot;online&quot;);
userData.seed = netId.ToString();

// Join ODIN Room ShooterSample and send user data
OdinHandler.Instance.JoinRoom(&quot;ShooterSample&quot;, userData.ToUserData());
</code></pre>
</div>
</div>

<p>Feel free to customize the structure to fit the needs of your game.</p>
<p>We have a comprehensive guide on how to leverage <code>UserData</code> to sync ODIN with a multiplayer game created using <code>Mirror Networking</code>
.</p>
<ul>
<li><a href="/odin/guides/unity/unity-mirror/">Integrating ODIN into a multiplayer game created with Mirror</a></li>
</ul>
`}),e.add({id:3589,href:"https://www.4players.io/odin/guides/unreal/odin-wwise/",title:"Wwise and ODIN",section:"ODIN Documentation",description:"Learn how to integrate ODIN for voice chat functionalities while using the Wwise Audio Solution in Unreal. This guide provides step-by-step instructions, code snippets, and best practices to give your users high-quality voice chat with spatial audio in your Unreal games.",content:`<p>Integrating ODIN Voice Chat with the Wwise Audio Solution in Unreal.</p>
<p><img src="/odin/guides/unreal/odin-wwise/wwise_with_odin_header.jpg" alt="Wwise and ODIN"></p>
<h2 id="introduction">Introduction</h2>
<p>Welcome to this guide on integrating the <a href="https://www.4players.io/odin/">ODIN Voice Chat Plugin</a> with the <a href="https://www.audiokinetic.com/en/library/edge/?source=UE4&amp;id=index.html">Wwise Audio Solution</a> in Unreal. The code used in this guide is available on the <a href="https://github.com/4Players/odin-unreal-wwise">ODIN-Wwise Sample Project GitHub Repository</a>.</p>
<!-- The code used in this guide is available on the [ODIN-FMOD Git repository](https://github.com/4Players/odin-unity-fmod).-->
<p><strong>What You&rsquo;ll Learn:</strong></p>
<ul>
<li>How the <code>UAkOdinInputComponent</code> script works and how to use it in your project</li>
<li>Properly set up ODIN in Unreal when using Wwise as audio solution</li>
<li>Deal with limitations and potential pitfalls</li>
</ul>
<h2 id="getting-started">Getting Started</h2>
<p>To follow this guide, you&rsquo;ll need to have some prerequisites:</p>
<ul>
<li>Basic knowledge of Unreal as well as Wwise</li>
<li>The Wwise Plugin for Unreal, which you can get <a href="https://www.audiokinetic.com/en/library/edge/?source=UE4&amp;id=index.html">here</a></li>
<li>The ODIN Voice Chat Plugin, available <a href="https://github.com/4Players/odin-sdk-unreal/releases">here</a></li>
</ul>
<p>To set up Wwise in your project, please follow Wwise&rsquo;s in-depth integration-tutorial. You can find the tutorial <a href="https://www.audiokinetic.com/en/library/edge/?source=UE4&amp;id=gettingstarted.html">here</a>.</p>
<p>To set up the ODIN Voice Chat Plugin, please take a look at our Getting-Started guide, which you can find here:</p>
<p><a href='/odin/sdk/unreal/' class="btn btn-primary">Begin ODIN Getting Started Guide</a></p>
<p>This guide will show you how to access the Odin Media Stream and copy it to the Audio Input Plugin of Wwise in order to pass it to the Wwise Audio Engine. This means, we will only cover the receiver-side of the communication - the sender just uses Unreal&rsquo;s Audio Capture Module and thus is handled no different than any other implementation of Odin in Unreal.</p>
<h2 id="sample-project">Sample Project</h2>
<p>You can find a sample project in a <a href="https://github.com/4Players/odin-unreal-wwise">repository in our GitHub account</a>. Feel free to download it and set it up in order to view a working integration of this class in a small sample project. This sample is based on the <a href="https://github.com/4Players/odin-unreal-tutorial">result of the second video</a> of the <a href="https://www.youtube.com/playlist?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Odin tutorial Series</a>.</p>
<h2 id="uakodininputcomponent">UAkOdinInputComponent</h2>
<p>The <code>UAkOdinInputComponent</code> class is an essential part of the Wwise integration. It replaces the default ODIN <code>UOdinSynthComponent</code>
 component, taking over the voice output responsibilities by using Wwise. This script is crucial for receiving voice chat data from the ODIN servers.</p>
<p>The header can be found <a href="https://github.com/4Players/odin-unreal-wwise/blob/main/Source/OdinTestProject/Public/AkOdinInputComponent.h">here</a> and the source file is located <a href="https://github.com/4Players/odin-unreal-wwise/blob/main/Source/OdinTestProject/Private/AkOdinInputComponent.cpp">here</a></p>
<p>The <code>UAkOdinInputComponent</code> inherits from Audiokinetic&rsquo;s <code>AkAudioInputComponent</code> from their <a href="https://www.audiokinetic.com/en/library/edge/?source=SDK&amp;id=referencematerial_audioinput.html">Audio Input Plugin</a>. As such it must override the methods <code>FillSamplesBuffer</code> and <code>GetChannelConfig</code> to work with the Wwise Audio Engine. There is a tutorial from Audiokinetic on <a href="https://www.audiokinetic.com/en/library/edge/?source=UE4&amp;id=using_features_audioinput.html">How to use their Audio Input Plugin in Unreal</a>. The script is a customization of that, replacing the usage of the microphone input by Odin&rsquo;s Voice Media Stream.</p>
<p>You can either follow the Usage setup to drop the <code>UAkOdinInputComponent</code> directly into your project, or take a look at how it works to adjust the functionality to your requirements.</p>
<p>This is the header:</p>
<pre><code class="language-c++">#include &quot;CoreMinimal.h&quot;
#include &quot;AkAudioInputComponent.h&quot;
#include &quot;AkOdinInputComponent.generated.h&quot;

class OdinMediaSoundGenerator;
class UOdinPlaybackMedia;
UCLASS(ClassGroup=(Custom), BlueprintType, Blueprintable, meta=(BlueprintSpawnableComponent))
class MODULE_API UAkOdinInputComponent : public UAkAudioInputComponent
{
    GENERATED_BODY()

public:
    // Sets default values for this component's properties
    UAkOdinInputComponent(const class FObjectInitializer&amp; ObjectInitializer);

    virtual void DestroyComponent(bool bPromoteChildren) override;

    UFUNCTION(BlueprintCallable, Category=&quot;Odin|Sound&quot;)
    void AssignOdinMedia(UPARAM(ref) UOdinPlaybackMedia *&amp;Media);
    
    virtual void GetChannelConfig(AkAudioFormat&amp; AudioFormat) override;
    virtual bool FillSamplesBuffer(uint32 NumChannels, uint32 NumSamples, float** BufferToFill) override;

protected:
    UPROPERTY(BlueprintReadOnly, Category=&quot;Odin|Sound&quot;)
    UOdinPlaybackMedia* PlaybackMedia = nullptr;
    TSharedPtr&lt;OdinMediaSoundGenerator, ESPMode::ThreadSafe&gt; SoundGenerator;

    float* Buffer = nullptr;
	int32 BufferSize = 0;
};
</code></pre>
<p>And this is the source file of the class:</p>
<pre><code class="language-c++">#include &quot;AkOdinInputComponent.h&quot;
#include &quot;OdinFunctionLibrary.h&quot;
#include &quot;OdinPlaybackMedia.h&quot;

UAkOdinInputComponent::UAkOdinInputComponent(const FObjectInitializer&amp; ObjectInitializer) : UAkAudioInputComponent(
	ObjectInitializer)
{
	PrimaryComponentTick.bCanEverTick = true;
}

void UAkOdinInputComponent::AssignOdinMedia(UOdinPlaybackMedia*&amp; Media)
{
    if (nullptr == Media)
        return;

    this-&gt;SoundGenerator = MakeShared&lt;OdinMediaSoundGenerator, ESPMode::ThreadSafe&gt;();
    this-&gt;PlaybackMedia = Media;

    SoundGenerator-&gt;SetOdinStream(Media-&gt;GetMediaHandle());
}

void UAkOdinInputComponent::DestroyComponent(bool bPromoteChildren)
{
	Super::DestroyComponent(bPromoteChildren);
	if (nullptr != Buffer)
	{
		delete Buffer;
		Buffer = nullptr;
		BufferSize = 0;
	}
}

void UAkOdinInputComponent::GetChannelConfig(AkAudioFormat&amp; AudioFormat)
{
    AkChannelConfig ChannelConfig;
	ChannelConfig.SetStandard(AK_SPEAKER_SETUP_STEREO);

	// set audio format
	AudioFormat.SetAll(
		48000, // Sample rate
		ChannelConfig, // \\ref AkChannelConfig
		8 * sizeof(float), // Bits per samples
		sizeof(float), // Block Align
		AK_FLOAT, // feeding floats
		AK_NONINTERLEAVED
	);
}

bool UAkOdinInputComponent::FillSamplesBuffer(uint32 NumChannels, uint32 NumSamples, float** BufferToFill)
{
    if (!SoundGenerator || !PlaybackMedia)
        return false;

    const int32 RequestedTotalSamples = NumChannels * NumSamples;
	if (BufferSize != RequestedTotalSamples)
	{
		if (nullptr != Buffer)
			delete Buffer;
		Buffer = new float[RequestedTotalSamples];
		BufferSize = RequestedTotalSamples;
	}

	const uint32 Result = SoundGenerator-&gt;OnGenerateAudio(Buffer, RequestedTotalSamples);
	if (odin_is_error(Result))
	{
		FString ErrorString = UOdinFunctionLibrary::FormatError(Result, true);
		UE_LOG(LogTemp, Error, TEXT(&quot;UAkOdinInputComponent: Error during FillSamplesBuffer: %s&quot;), *ErrorString);
		return false;
	}

	for (uint32 s = 0; s &lt; NumSamples; ++s)
	{
		for (uint32 c = 0; c &lt; NumChannels; ++c)
		{
			BufferToFill[c][s] = Buffer[s * NumChannels + c];
		}
	}


	return true;
}
</code></pre>
<p>Remember to adjust the <code>Build.cs</code> file of your game module accordingly. We need to add dependencies to &ldquo;Odin&rdquo; obviously, but also &ldquo;OdinLibrary&rdquo; is needed for the call to <code>odin_is_error()</code>. From Wwise we need the &ldquo;AkAudio&rdquo; and &ldquo;Wwise&rdquo; Modules in order to work with the Audio Input Plugin. So all in all add these to your Public Dependency Modules:</p>
<pre><code class="language-c#">PublicDependencyModuleNames.AddRange(
	new string[]
	{
        &quot;Core&quot;,
        &quot;Odin&quot;,
        &quot;AkAudio&quot;,
        &quot;Wwise&quot;,
		&quot;OdinLibrary&quot;
	}
	);
</code></pre>
<h2 id="usage">Usage</h2>
<p>The above class uses the Wwise Audio Input Plugin to pass dynamically created Audio Data to the Wwise Engine. So we will need to set this up in the Wwise Authoring Tool and then use the class in your Game Logic properly.</p>
<h3 id="creating-a-wwise-event">Creating a Wwise Event</h3>
<p>To provide Unreal with the correct Wwise Event you need to add an Audio Input Plugin Source to your Soundbank. An example of this can be found in the <a href="https://github.com/4Players/odin-unreal-wwise">sample project</a>. To achieve this, you can follow these steps:</p>
<ul>
<li>In the &ldquo;Audio&rdquo; tab of the Project Explorer right-click on the wanted work unit of the &ldquo;Actor-Mixer-Hierarchy&rdquo; and add a &ldquo;New Child-&gt;Audio Input&rdquo;.</li>
</ul>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/wwise-step1.png" title="Click to enlarge" data-lity><img src="/images/odin/unreal/wwise-step1.png"
         alt="Wwise Step1" width="100%"/></a><figcaption>
            <p>Wwise Step1</p>
        </figcaption>
</figure>
<ul>
<li>Make adjustments to it like needed in your project.</li>
<li>Make sure to go to the &ldquo;Conversion&rdquo; tab in the Contents Editor and set the Conversion to &ldquo;Factory Conversion Settings-&gt;PCM-&gt;PCM as Input&rdquo; by clicking on the &ldquo;&raquo;&rdquo; button.</li>
</ul>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/wwise-step2.png" title="Click to enlarge" data-lity><img src="/images/odin/unreal/wwise-step2.png"
         alt="Wwise Step2" width="100%"/></a><figcaption>
            <p>Wwise Step2</p>
        </figcaption>
</figure>
<ul>
<li>Right-click the newly created source and add a &ldquo;New Event-&gt;Play&rdquo; to it.</li>
</ul>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/wwise-step3.png" title="Click to enlarge" data-lity><img src="/images/odin/unreal/wwise-step3.png"
         alt="Wwise Step3" width="100%"/></a><figcaption>
            <p>Wwise Step3</p>
        </figcaption>
</figure>
<ul>
<li>Lastly you need to add that event to the Soundbank by dragging it from the &ldquo;Events&rdquo; tab in the Project Explorer to the Soundbank&rsquo;s Content Editor.</li>
</ul>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/wwise-step4.png" title="Click to enlarge" data-lity><img src="/images/odin/unreal/wwise-step4.png"
         alt="Wwise Step4" width="100%"/></a><figcaption>
            <p>Wwise Step4</p>
        </figcaption>
</figure>
<ul>
<li>Export using the Wwise Browser like <a href="https://www.audiokinetic.com/en/library/edge/?source=UE4&amp;id=gettingstarted.html">described in Audiokinetic&rsquo;s Guide</a> in Unreal and you are good to go!</li>
</ul>
<h3 id="integrating-the-input-component-in-your-unreal-project">Integrating the Input Component in your Unreal Project</h3>
<p>In the next step we will now use the created event to play back the incoming Odin Media Stream. Again you can find an example of this in the <a href="https://github.com/4Players/odin-unreal-wwise/blob/main/Content/OdinContent/Blueprints/C_OdinClient.uasset">Odin Client Component of the sample project</a>.</p>
<p>First replace the creation of an <code>OdinSynthComponent</code> that you have placed in the <a href="/odin/sdk/unreal/">Odin Unreal Guide</a> in your project with the new <code>AkOdinInputComponent</code>.</p>
<p>In the <code>OnMediaAdded</code> event of your Odin implementation in your project you can then set the <code>AkAudioEvent</code> of the created <code>AkOdinInputComponent</code> to the Wwise Event that we imported earlier. Call the <code>Assign Odin Media</code> function that we have declared in the C++ class and pass it the reference to the incoming Media Stream and lastly call <code>PostAssociatedAudioInputEvent</code>. It is important to use that function from the <code>AkAudioInputComponent</code> since any other &ldquo;Post Event&rdquo; function will not work with the Wwise Audio Input Plug-in. You can see a sample of the Blueprint implementation below:</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/odin-wwise-blueprint.png" title="Click to enlarge" data-lity><img src="/images/odin/unreal/odin-wwise-blueprint.png"
         alt="Setup for the OnMediaAdded event" width="100%"/></a><figcaption>
            <p>Setup for the OnMediaAdded event</p>
        </figcaption>
</figure>
<p>Like with the <code>OdinSynthComponent</code>, you can also choose to place the <code>AkOdinInputComponent</code> directly on the Player Character as a component and then reference it in your <code>OnMediaAdded</code> event handler. This way you do not have to create it in the Blueprint and it is easier to change its properties - e.g. its Wwise-specific (attenuation) settings.</p>
<h2 id="how-it-works">How it works</h2>
<p>The above class uses the Wwise Audio Input Plugin to pass dynamically created Audio Data to the Wwise Engine. It copies the incoming Audio Stream from Odin to the Input Buffer of the Audio Input Component by Wwise. This is done by inheriting from the <code>UAkAudioInputComponent</code> and overriding the respective methods.</p>
<h3 id="1-setup">1. Setup</h3>
<p>The setup of the <code>UAkOdinInputComponent</code> is done by passing it a reference to the incoming Odin Media Stream. In this guide we have done this via a Blueprint call, but the method can also be called from another C++ Class in your game module.</p>
<p>This method creates a new pointer to a new <code>OdinMediaSoundGenerator</code> and sets its <code>OdinStream</code> to the incoming Media&rsquo;s handle.</p>
<p>Next, the Wwise Audio Input Plug-In asks for the Channel Configuration, calling <code>GetChannelConfig</code> (this is done from the Wwise Audio Engine, so we do not need to take care of calling this function). Here we set the Audio Format of the <code>AkAudioComponent</code> to a new format with 48k sample rate and non-interleaved floats.</p>
<h3 id="2-reading-and-playing-back-odin-audio-streams">2. Reading and Playing Back ODIN Audio Streams</h3>
<p>The <code>FillSamplesBuffer</code> function is called from the Wwise Audio Input Plug-in whenever the playback requests more data for its buffer.</p>
<p>Here the <code>AkOdinInputComponent</code> calls the <code>OnGenerateAudio</code> function of the <code>OdinMediaSoundGenerator</code>. The generated sound is copied into the <code>Buffer</code>.</p>
<p>If any error occurs in that call, the function will return without copying anything and tell the Wwise Audio Plugin that it failed to capture more samples.</p>
<p>Since Wwise only accepts float samples only as non-interleaved data (see <a href="https://www.audiokinetic.com/en/library/edge/?source=SDK&amp;id=referencematerial_audioinput.html">here</a> for reference) and the <code>OdinMediaSoundGenerator</code> provides it as interleaved, we need to sort it accordingly into the <code>BufferToFill</code>. This is done with the nested for-loops at the end of the function.</p>
<p>Lastly, if everything worked as expected the function returns <code>true</code> to let Wwise know it can now use the <code>BufferToFill</code>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>This simple implementation of an Odin to Wwise adapter for Unreal is a good starting point to give you the control over the audio playback that you need for your Odin Integration in your project. Feel free to check out the sample project in our public GitHub and re-use or extend any code to fit your specific needs.</p>
<p>This is only a starting point of your Odin Integration with Wwise and the Unreal Engine. Feel free to check out any other learning resources and adapt the material like needed, e.g. create realistic or out of this world dynamic immersive experiences with <a href="https://www.audiokinetic.com/en/products/wwise-spatial-audio/">Wwise Spatial Audio</a> aka &ldquo;<em>proximity chat</em>&rdquo; or &ldquo;<em>positional audio</em>&rdquo;:</p>
<ul>
<li><a href="https://www.audiokinetic.com/en/products/wwise-spatial-audio/">Wwise Spatial Audio</a></li>
<li><a href="https://www.youtube.com/playlist?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Video Tutorial Series on Odin and Unreal Engine</a></li>
<li><a href="https://www.4players.io/odin/introduction/">Odin General Introduction</a></li>
<li><a href="https://www.4players.io/odin/sdk/unreal/blueprint-reference/">Odin Unreal SDK Blueprint Reference</a></li>
</ul>
`}),e.add({id:3590,href:"https://www.4players.io/odin/introduction/comparison/",title:"Comparison",section:"ODIN Documentation",description:"Learn how ODIN compares to the competition",content:`<p>ODIN has been built from scratch by industry leading voice engineers with your privacy and security in mind. In addition, ODIN provides the following key features:</p>
<ul>
<li>Ultra-low latency and extremely low resource usage</li>
<li>Best-in-class voice quality with noise suppression</li>
<li>Built-in data protection and fully GDPR compliant</li>
<li>Support for thousands of concurrent users chatting at the same time with native 3D spatial audio support</li>
<li>Deep Unity and Unreal Engine integration</li>
<li>Zero maintenance and operations for clients but support for self-hosting if they want to (for sensitive areas)</li>
</ul>
<p>This table should give you an overview how ODIN compares to other solutions.</p>




<div class="comparison-table">
    <table class="comparison">
        <thead>
            <tr>
                <th>Feature</th>
                
                <th class="value">ODIN</th>
                
                <th class="value">Photon</th>
                
                <th class="value">TeamSpeak</th>
                
                <th class="value">Agora</th>
                
                <th class="value">Vivox</th>
                
                <th class="value">EOS</th>
                
            </tr>
        </thead>
        
        <tbody>
            <tr class="feature-header">
                <th colspan="7">Hosting &amp; Pricing</th>
            </tr>
            
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-0'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Cloud hosting</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Let us deal with the setup, administration and bandwidth costs. ODIN leverages worldwide production-ready and battle-tested server infrastructure from 4Netplayers, who have been providing voice and game servers for more than 20 years.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-0">
                <td colspan="7">Let us deal with the setup, administration and bandwidth costs. ODIN leverages worldwide production-ready and battle-tested server infrastructure from 4Netplayers, who have been providing voice and game servers for more than 20 years.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-1'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Self hosting</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN infrastructure can be hosted on-premise. Run our server software on your own infrastructure allowing you complete control and customization of your deployment environment. ODIN comes with Docker support for easy deployment wherever needed.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-1">
                <td colspan="7">ODIN infrastructure can be hosted on-premise. Run our server software on your own infrastructure allowing you complete control and customization of your deployment environment. ODIN comes with Docker support for easy deployment wherever needed.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-2'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Traffic included</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Traffic costs can grow significantly if voice chat is used heavily or by many users and it’s hard to estimate those costs. Every month will have its surprise day when you get your invoice. Deals made for 4Netplayers with cloud and server providers all over the world allow us to include traffic costs in all our tiers. No hidden or hard to estimate costs for you.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-2">
                <td colspan="7">Traffic costs can grow significantly if voice chat is used heavily or by many users and it’s hard to estimate those costs. Every month will have its surprise day when you get your invoice. Deals made for 4Netplayers with cloud and server providers all over the world allow us to include traffic costs in all our tiers. No hidden or hard to estimate costs for you.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-3'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Users per room</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            How many users can join the same room to talk together. MMORPGs or larger battle royal games should be able to bring hundreds of users together. There is no limit for users per room at ODIN. However, there is a technical limit that depends on the implementation (i.e. a lot of voice communication, or more text and simple data). 2000 users should be no issues at all.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    2000&#43;
                    
                </td>
                
                
                <td class="value">
                    
                    50
                    
                </td>
                
                
                <td class="value">
                    
                    1000
                    
                </td>
                
                
                <td class="value">
                    
                    128
                    
                </td>
                
                
                <td class="value">
                    
                    
                    
                </td>
                
                
                <td class="value">
                    
                    16
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-3">
                <td colspan="7">How many users can join the same room to talk together. MMORPGs or larger battle royal games should be able to bring hundreds of users together. There is no limit for users per room at ODIN. However, there is a technical limit that depends on the implementation (i.e. a lot of voice communication, or more text and simple data). 2000 users should be no issues at all.</td>
            </tr>
            
        </tbody>
        
        <tbody>
            <tr class="feature-header">
                <th colspan="7">Platform &amp; Engine Integration</th>
            </tr>
            
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-0'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Deep Unity Integration</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN provides a full-featured Unity SDK and leverages Unity&rsquo;s audio processing pipeline for capture and playback. Developers work with Unity tools they know like AudioSource and AudioMixers and get 3D positional audio automatically. ODIN fully integrates into more advanced 3D audio solutions and comes with a couple of examples and scripts for easy integration of different materials and their damping effects (like glass or concrete).
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-0">
                <td colspan="7">ODIN provides a full-featured Unity SDK and leverages Unity&rsquo;s audio processing pipeline for capture and playback. Developers work with Unity tools they know like AudioSource and AudioMixers and get 3D positional audio automatically. ODIN fully integrates into more advanced 3D audio solutions and comes with a couple of examples and scripts for easy integration of different materials and their damping effects (like glass or concrete).</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-1'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Deep Unreal Engine Integration</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Many voice SDKs are just a wrapper around browser based WebRTC libraries. ODIN offers native Unreal Engine (UE4 &amp; UE5) support with simple to use Blueprint support for easy and reliable voice integration. Use the tools you know within the Unreal Engine.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-1">
                <td colspan="7">Many voice SDKs are just a wrapper around browser based WebRTC libraries. ODIN offers native Unreal Engine (UE4 &amp; UE5) support with simple to use Blueprint support for easy and reliable voice integration. Use the tools you know within the Unreal Engine.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-2'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Unreal Engine 5 support</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Unreal Engine 5 is best suited for large open-world games. This requires a reliable voice technology for as many users. ODIN is a great fit and offers full Unreal Engine 5 support.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-2">
                <td colspan="7">Unreal Engine 5 is best suited for large open-world games. This requires a reliable voice technology for as many users. ODIN is a great fit and offers full Unreal Engine 5 support.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-3'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Web Support</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN is available for the web as vanilla JavaScript script or <code>npm</code> package and can be integrated into websites or apps built with web technologies (like Angular, Vue, React, ReactNative, Svelte, …) in a couple of minutes. ODIN cross-platform compatibility allows users to interact (i.e. chat, realtime data synchronization) with each other independently where they are. Think about users talking within a CRM tool with users running in a virtual VR shopping center. All this is possible with ease with ODIN.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-3">
                <td colspan="7">ODIN is available for the web as vanilla JavaScript script or <code>npm</code> package and can be integrated into websites or apps built with web technologies (like Angular, Vue, React, ReactNative, Svelte, …) in a couple of minutes. ODIN cross-platform compatibility allows users to interact (i.e. chat, realtime data synchronization) with each other independently where they are. Think about users talking within a CRM tool with users running in a virtual VR shopping center. All this is possible with ease with ODIN.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-4'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Swift SDK</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Apple developers are picky about their tools as they are used to work with the best tech. Our Swift SDK offers a quick and easy integration into the Apple eco-system. The SDK comes with Playgrounds to learn the SDK very quickly and integrates seamlessly with AVAudioEngine.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-4">
                <td colspan="7">Apple developers are picky about their tools as they are used to work with the best tech. Our Swift SDK offers a quick and easy integration into the Apple eco-system. The SDK comes with Playgrounds to learn the SDK very quickly and integrates seamlessly with AVAudioEngine.</td>
            </tr>
            
        </tbody>
        
        <tbody>
            <tr class="feature-header">
                <th colspan="7">Core Communication Features</th>
            </tr>
            
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-0'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Native Spatial Audio</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Spatial audio is a feature that allows users to experience enhanced immersion and a sense of presence by creating a 3D soundscape that reflects the positions and movements of the participants within a virtual environment. This can help to create a more engaging and realistic experience for users, as the sound seems to be coming from the direction of the speaker, rather than from a fixed position in the room.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-0">
                <td colspan="7">Spatial audio is a feature that allows users to experience enhanced immersion and a sense of presence by creating a 3D soundscape that reflects the positions and movements of the participants within a virtual environment. This can help to create a more engaging and realistic experience for users, as the sound seems to be coming from the direction of the speaker, rather than from a fixed position in the room.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-1'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Client-Server</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            There are two basic networking topologies possible: Peer to Peer and Client-Server. In peer to peer solutions there is no central hub but each user must send his data to each other user. Data traffic grows exponentially with each additional user and does not work for more than 4 users reliable. Not considering issues with firewalls, NAT and many other shortcomings. Client-server software has a central hub and can handle thousands of users.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-1">
                <td colspan="7">There are two basic networking topologies possible: Peer to Peer and Client-Server. In peer to peer solutions there is no central hub but each user must send his data to each other user. Data traffic grows exponentially with each additional user and does not work for more than 4 users reliable. Not considering issues with firewalls, NAT and many other shortcomings. Client-server software has a central hub and can handle thousands of users.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-2'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Latest technology</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Most voice SDKs are built on top of WebRTC. WebRTC is a monstrous library to manage all sorts of real-time communication into browsers. WebRTC is a very old and very complex piece of software. ODIN is built from scratch on latest tech like HTTP3/QUIC on a proprietary protocol that is developed with deep game engine integration and spatial 3D audio support in mind.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-2">
                <td colspan="7">Most voice SDKs are built on top of WebRTC. WebRTC is a monstrous library to manage all sorts of real-time communication into browsers. WebRTC is a very old and very complex piece of software. ODIN is built from scratch on latest tech like HTTP3/QUIC on a proprietary protocol that is developed with deep game engine integration and spatial 3D audio support in mind.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-3'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Multi-room support</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Voice solutions typically use a room or channel based approach where all users connected to the same room or channel can talk to each other. Some use-cases require users to be able to join multiple rooms at the same time. ODIN comes with native multi-room support. Every user can join as many rooms as they like. There can be a 3D positional audio chat that mimics real voice and in addition to that users can have a walkie-talkie to talk to users that are out of reach. You can also define rooms that are just used to real-time data synchronization.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-3">
                <td colspan="7">Voice solutions typically use a room or channel based approach where all users connected to the same room or channel can talk to each other. Some use-cases require users to be able to join multiple rooms at the same time. ODIN comes with native multi-room support. Every user can join as many rooms as they like. There can be a 3D positional audio chat that mimics real voice and in addition to that users can have a walkie-talkie to talk to users that are out of reach. You can also define rooms that are just used to real-time data synchronization.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-4'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Intrinsic data protection</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN is completely stateless. The authentication works with a single token created by you per user and room that stores everything required for the service. This token is not stored anywhere in the ODIN infrastructure. Rooms are automatically created once the first user joins the room and are deleted once the last user left the room. There is no database in the background. ODIN does not collect or store any data at all.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-4">
                <td colspan="7">ODIN is completely stateless. The authentication works with a single token created by you per user and room that stores everything required for the service. This token is not stored anywhere in the ODIN infrastructure. Rooms are automatically created once the first user joins the room and are deleted once the last user left the room. There is no database in the background. ODIN does not collect or store any data at all.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-5'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Real-time data synchronization</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN allows developers to sync data per user and per room in real-time. Whenever something changes in this data-set, it’s synced with all other users connected to the same room in real-time. You can sync the players positions in real-time (i.e. geolocation in met averse applications) or a text-chat-history in a room with easy.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-5">
                <td colspan="7">ODIN allows developers to sync data per user and per room in real-time. Whenever something changes in this data-set, it’s synced with all other users connected to the same room in real-time. You can sync the players positions in real-time (i.e. geolocation in met averse applications) or a text-chat-history in a room with easy.</td>
            </tr>
            
        </tbody>
        
    </table>
</div>

`}),e.add({id:3591,href:"https://www.4players.io/odin/introduction/projects/",title:"Projects and namespaces",section:"ODIN Documentation",description:"Understanding the relation between projects and access keys in 4Players ODIN for using namespaces.",content:`



<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  TL;DR  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>All clients that need to talk to each other have to join the ODIN room with the same name in the same namespace.</p>
</div>
</div>

<h2 id="hosting-type">Hosting type</h2>
<h3 id="managed">Managed</h3>
<p>With ODIN <strong>managed cloud hosting</strong>, for each subscription, you have an individual project with an infinite number of access keys ( see <a href="/odin/introduction/access-keys/">Understanding Access Keys</a> ). Each project then represents its own <strong>room namespace</strong> where people can talk to each other.</p>
<h3 id="on-premise">On-Premise</h3>
<p>When using an ODIN <strong>on-premise server</strong>, in combination with an <strong>ODIN gateway</strong> for easy scalability, you can configure everything the way you need it. You can assign <strong>namespaces</strong> on either a customer level or for each individual access key.</p>
<h2 id="organizing-your-projects">Organizing your projects</h2>
<p>As an active subscriber you can manage your projects here:</p>
<p><a href='https://app.netplay-config.4players.de/odin/en' target='' class="btn btn-primary">Go to ODIN Dashboard</a></p>
<p>There you can manage your keys for all the cloud hosted projects you currently have. Keys for on-premise projects you can manage in your own configuration files.</p>
<h2 id="separating-rooms-by-project">Separating rooms by project</h2>
<p>Each project has his own namespace. If in both projects there is a room named &ldquo;lobby&rdquo;,
users from one project will not be able to talk to users from the other project,
even if both users joined a room named &ldquo;lobby&rdquo;.</p>
<pre><code class="language-mermaid">graph TD
    subgraph ODIN Clients
        subgraph Project 1
            C1[Client 1]
        end
        subgraph Project 2
            C2[Client 2]
        end
    end

    C1 --&gt;|Yes| R1
    C2 --&gt;|Yes| R2
    C2 -.-&gt;|No| R1
    
    subgraph ODIN Server
        subgraph Project 1
            R1[&quot;Room #quot;lobby#quot;&quot;]
        end    
        subgraph Project 2
            R2[&quot;Room #quot;lobby#quot;&quot;]
        end
    end
    
    R1 -.-|cannot talk to each other| R2
 
</code></pre>
<h2 id="separating-rooms-within-one-project">Separating rooms within one project</h2>
<p>You can also keep things simple and separate users by choosing special room IDs in the same namespace,
e.g. &ldquo;lobby_server1&rdquo; and &ldquo;lobby_server2&rdquo;.
But depending on where your room tokens are generated (server-side or client-side)
or if clients are able to decide themselves, which room ID to use for joining,
you will have to make compromises with security.</p>
<pre><code class="language-mermaid">graph TD
    subgraph ODIN Clients
        subgraph Project 1
            C1[Client connected to server 1]
            C2[Client connected to server 2]
        end
    end
    
    subgraph ODIN Server
        subgraph Project 1
            R1[&quot;Room #quot;lobby_server1#quot;&quot;]
            R2[&quot;Room #quot;lobby_server2#quot;&quot;]
        end
    end
    
    C1 --&gt;|Yes| R1
    C2 --&gt;|Yes| R2
    C1 --&gt;|should not| R2

    R1-.-|cannot talk to each other| R2
</code></pre>
`}),e.add({id:3592,href:"https://www.4players.io/fleet/sdk/",title:"SDKs",section:"ODIN Fleet Documentation",description:"Explore our easy-to-use SDKs for NodeJS. Download and follow our guides to seamlessly integrate ODIN Fleet into your projects, with minimal development overhead.",content:`<p>We provide easy to use SDKs for Unity and Unreal and the Web. Download and install the SDK and follow one of our guides
and you&rsquo;ll have ODIN integrated in no time.</p>
<p>Please choose your platform to start with implementation:</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/fleet/sdk/nodejs">
<img class="teaser-image" src="/images/fleet/nodejs_header.jpg">
</a>
<h4 class="teaser-title">NodeJS</h4>
<div class="teaser-content">
 <p>Deeply integrate ODIN Fleet into your CI/CD workflows and automate game server deployment and management with our NodeJS SDK.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/fleet/sdk/nodejs">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/fleet/sdk/restapi">
<img class="teaser-image" src="/images/fleet/rest_api_header.jpg">
</a>
<h4 class="teaser-title">REST</h4>
<div class="teaser-content">
 <p>Learn more about our underlying REST-API and how to consume it.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/fleet/sdk/restapi">Learn more</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3593,href:"https://www.4players.io/odin/sdk/",title:"SDKs",section:"ODIN Documentation",description:"Explore our easy-to-use SDKs for Unity, Unreal, Web, Swift, and NodeJS. Download and follow our guides to seamlessly integrate ODIN Voice Chat into your projects, with minimal development overhead.",content:`<p>We provide easy to use SDKs for Unity and Unreal and the Web. Download and install the SDK and follow one of our guides
and you&rsquo;ll have ODIN integrated in no time.</p>
<p>Please choose your platform to start with implementation:</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unity">
<img class="teaser-image" src="/images/unity_sdk.jpg">
</a>
<h4 class="teaser-title">Unity</h4>
<div class="teaser-content">
 <p>Use our deep Unity integration to add the most immersive in-game voice chat to your product with minimal development overhead.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unity">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/unreal">
<img class="teaser-image" src="/images/unreal_sdk.jpg">
</a>
<h4 class="teaser-title">Unreal Engine</h4>
<div class="teaser-content">
 <p>Our upcoming Unreal Engine plugin will feature full support for all available platforms and come with Blueprint and C++ support.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/unreal">Learn more</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/web">
<img class="teaser-image" src="/images/web_sdk.jpg">
</a>
<h4 class="teaser-title">Web Browser</h4>
<div class="teaser-content">
 <p>Our NPM package will feature full real-time communication support for all major web browsers including voice activity dectection.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/web">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/swift">
<img class="teaser-image" src="/images/odin/odin_swift_sdk.jpg">
</a>
<h4 class="teaser-title">Swift</h4>
<div class="teaser-content">
 <p>Integrate OdinKit into your iOS and macOS apps and add real-time voice communication in a couple of minutes and with
zero maintenance or operations.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/swift">Learn more</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/sdk/nodejs">
<img class="teaser-image" src="/images/odin/odin-nodejs-header.jpg">
</a>
<h4 class="teaser-title">NodeJS</h4>
<div class="teaser-content">
 <p>Build AI enhanced human-like chatbots, NPCs and advanced features like automatic content moderation, translation and
recording with our NodeJS SDK.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/sdk/nodejs">Learn more</a>
</div>
</div>
</div>
<div class="col-md"></div>
</div>
<h2 id="core-api">Core API</h2>
<p>ODIN <a href="/odin/sdk/c/">native client library</a> is built with Rust. It provides a standard C API that can easily
be implemented into any application, framework or platform. For many well-known and well-beloved platforms and game engines
we have created customized and easy to use SDKs and Frameworks based on the Core API.</p>
`}),e.add({id:3594,href:"https://www.4players.io/fleet/cli/fleet/servers/",title:"Servers",section:"ODIN Fleet Documentation",description:"Learn how to work with ODIN Fleet servers using the CLI.",content:`<p>Servers in Fleet are the instances that run your game servers and services. This guide will show you how to manage
servers in your ODIN Fleet account using the CLI.</p>
<p>You can also manage servers using the <a href="/fleet/manual/servers/">dashboard</a> including viewing logs,
detailed stats, restarting servers, and more.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Please note    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>In Fleet, you don&rsquo;t create servers directly. Instead, servers are created automatically when you create a deployment or
if you modify the number of instances in a deployment.</p>
</div>
</div>

<h2 id="overview">Overview</h2>
<p>The <code>servers</code> commands allow you to manage servers in your account. You can list all servers, get detailed information
about a specific server, and restart servers that are not functioning correctly.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet servers &lt;command&gt;</code></p>
<h2 id="commands">Commands</h2>
<ul>
<li><a href="./list">List</a>: List all servers in your account.</li>
<li><a href="./get">Get</a>: Display detailed information about a server.</li>
<li><a href="./restart">Restart</a>: Restart a server.</li>
<li><a href="./logs">Logs</a>: View logs for a server.</li>
<li><a href="./backup">Backup</a>: Create a backup of a server.</li>
<li><a href="./restore">Restore</a>: Restore a server from a backup.</li>
</ul>
`}),e.add({id:3595,href:"https://www.4players.io/odin/introduction/access-keys/",title:"Understanding Access Keys",section:"ODIN Documentation",description:"Learn how to manage your keys for accessing 4Players ODIN",content:`<p>An access key is your unique authentication key to be used to generate room tokens for accessing the 4Players ODIN server network. Think of it as your individual username and password combination all wrapped up into a single non-comprehendable string of characters, and treat it with the same respect.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important Notice   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>All clients that want to join the same ODIN room, need to use a token generated from either the same access key or another access key of the same project.</p>
</div>
</div>

<p>While you can create an unlimited number of access keys for your projects, we strongly recommend that you never put an access key in your client code. Please refer to the <a href="../../examples">Examples</a> section to grab some code snippets to help you generate ODIN room rokens in a secure way.</p>
<h2 id="generating-access-keys">Generating Access Keys</h2>
<p>Every access key is a 44 character long Base64-String, which consists of an internal version mumber, a set of random bytes and a checksum. We&rsquo;re providing several methods for generating new access keys using our SDKs.</p>
<p>You can create an access key for up to 25 concurrent users for free directly in the widget below.</p>
<p><odin-access-key></odin-access-key></p>
<h3 id="using-the-sdk">Using the SDK</h3>
<p>We&rsquo;re providing several ways to create access keys locally using one of our SDKs. The resulting access keys can be used to access the ODIN network with up to 25 concurrently connected users free of charge.</p>





<div id="example-2ddef75ceec3bcfd60f0deb6d450fecf" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">Generate Access Key and retrieve its Key ID</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-2ddef75ceec3bcfd60f0deb6d450fecf-c">
        C
      </a><a class="example-language-button" data-target="#example-2ddef75ceec3bcfd60f0deb6d450fecf-js">
        JavaScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-2ddef75ceec3bcfd60f0deb6d450fecf-c">
      <pre><code class="hljs language-c">#include &lt;stdio.h&gt;

#include &#34;odin.h&#34;

int main()
{
  char access_key[128];
  char key_id[64];
  int error;

  error = odin_access_key_generate(access_key, sizeof(access_key));

  if (odin_is_error(error))
  {
    printf(&#34;Failed to generate access key; error %d\\n&#34;, error);
    return 1;
  }

  printf(&#34;Your new access key is: %s\\n&#34;, access_key);

  error = odin_access_key_id(access_key, key_id, sizeof(key_id));

  if (odin_is_error(error))
  {
    printf(&#34;Failed to get key ID from access key; error %d\\n&#34;, error);
    return 1;
  }

  printf(&#34;The key ID for your access key is: %s\\n&#34;, key_id);

  return 0;
}
</code></pre>
    </div><div class="language default" id="example-2ddef75ceec3bcfd60f0deb6d450fecf-js">
      <pre><code class="hljs language-js">var odinTokens = require(&#34;@4players/odin-tokens&#34;)

var accessKey = odinTokens.generateAccessKey();

console.log(&#34;Your new access key is: &#34; &#43; accessKey);

var keyPair = odinTokens.loadAccessKey(accessKey);
var keyId = odinTokens.getKeyId(keyPair.publicKey);

console.log(&#34;The key ID for your access key is: &#34; &#43; keyId);
</code></pre>
    </div></div>
</div>


<p>If you&rsquo;ve an active ODIN subscription, contact us, to submit the public key for an existing access key.</p>
<h3 id="with-odin-command-line-utility">With ODIN Command Line Utility</h3>
<p>We provide an NPM based command line utility that you can use to generate an access key. Install it with this command:</p>
<pre><code class="language-bash">&gt; npm install -g @4players/odin-cli
</code></pre>
<p>Then, you can use the command line tool in your terminal to generate an access key:</p>
<pre><code class="language-bash">&gt; odin-cli create-access-key
</code></pre>
<p>You&rsquo;ll get a response similar to this one. You can use the access key in all SDKs available.</p>
<pre><code>Your access key:
AQMaxMG2nLNvdUCdHp+lZKfNYKuxs4Vb/O7kPI4rEeX2
Please note: This access key is only valid for up to 25 users and may not be used in production!
Sign up to generate access keys production and/or more users: https://app.tarif-config.4players.de/config/149/en_GB
</code></pre>
<h2 id="flowchart">Flowchart</h2>
<p>The relationships between the individual components of an access key are as follows:</p>
<pre><code class="language-mermaid">graph LR
  RandomBytes[Random Bytes] --&gt; AccessKey;
  AccessKey[Access Key] --&gt; PublicKey;
  AccessKey --&gt; SecretKey[Secret Key];
  PublicKey[Public Key] --&gt; KeyId[Key ID];
</code></pre>
<h2 id="terminology">Terminology</h2>
<dl>
<dt>Access Key</dt>
<dd>Gives access to the ODIN network. It is a 44 character long Base64-String, which consists of a version, random bytes and a checksum.</dd>
<dt>Secret Key</dt>
<dd>Generated from the access key, it is based on the Ed25519-Curve and used to sign a room generated by the game developer.</dd>
<dt>Public Key</dt>
<dd>Generated from the access key, it is based on the Ed25519-Curve and must be uploaded to 4Players so that a generated room token can be verified.</dd>
<dt>Key ID</dt>
<dd>A shortened public key, included in the token, making it possible to identify what public key must be used to verify the room token.</dd>
<dt>Room Token</dt>
<dd>A signed JWT given to the game clients that allows them to connect to a voice chat room in the ODIN network.</dd>
</dl>
`}),e.add({id:3596,href:"https://www.4players.io/odin/sdk/c/",title:"C/C++",section:"ODIN Documentation",description:"Dive into the core client API of ODIN C/C++ SDK, providing the foundation for high-level SDKs like Unity and Unreal. Explore our public Github repository to access source code and experiment with the powerful CLI application for seamless integration in your projects.",content:`<p>This is the core client API implemented in Rust and exported to native C libraries. These libraries
are the building blocks for our high level SDKs like <a href="/odin/sdk/unity/">Unity SDK</a> or <a href="/odin/sdk/unreal/">Unreal SDK</a>.</p>
<p>Please check out our public <a href="https://github.com/4Players/odin-sdk">Github repository</a> for more information, source-code
and a cool CLI application to play around with ODIN right from your command line.</p>
<h2 id="usage">Usage</h2>
<h3 id="quick-start">Quick Start</h3>
<p>The following code snippet illustrates how to join a designated room on a specified server using a room token acquired externally:</p>
<pre><code class="language-c">#include &lt;stdio.h&gt;
#include &quot;odin.h&quot;

int main(int argc, const char *argv[])
{
    odin_startup(ODIN_VERSION);

    OdinRoomHandle room = odin_room_create();
    odin_room_join(room, &quot;&lt;SERVER_URL&gt;&quot;, &quot;&lt;TOKEN&gt;&quot;);

    getchar();

    return 0;
}
</code></pre>
<h3 id="authentication">Authentication</h3>
<p>To enter a room, an authentication token is requisite. ODIN employs the creation of signed JSON Web Tokens (JWT) to ensure a secure authentication pathway. These tokens encapsulate the details of the room(s) you wish to join alongside a customizable identifier for the user, which can be leveraged to reference an existing record within your specific service.</p>
<pre><code class="language-c">char token[512];

OdinTokenGenerator *generator = odin_token_generator_create(&quot;&lt;ACCESS_KEY&gt;&quot;);

odin_token_generator_create_token_ex(generator, &quot;&lt;ROOM_ID&gt;&quot;, &quot;&lt;USER_ID&gt;&quot;, token, sizeof(token));
</code></pre>
<p>As ODIN is fully user agnostic, <a href="https://www.4players.io/">4Players GmbH</a> does not store any of this information on its servers.</p>
<p>Tokens are signed employing an Ed25519 key pair derived from your distinctive access key. Think of an access key as a singular, unique authentication credential, crucial for generating room tokens to access the ODIN server network. It essentially combines the roles of a username and password into a singular, unobtrusive string of characters, necessitating a comparable degree of protection. For bolstered security, it is strongly recommended to refrain from incorporating an access key in your client-side code. We&rsquo;ve created a very basic <a href="https://www.4players.io/odin/examples/token-server/">Node.js</a> server here, to showcase how to issue ODIN tokens to your client apps without exposing your access key.</p>
<h3 id="event-handling">Event Handling</h3>
<p>The ODIN API operates on an event-driven paradigm. In order to manage events, it&rsquo;s necessary to create a callback function in the following manner:</p>
<pre><code class="language-c">void handle_odin_event(OdinRoomHandle room, const OdinEvent *event, void *data)
{
   switch (event-&gt;tag)
   {
      case OdinEvent_RoomConnectionStateChanged:
         // Triggered when the room's connectivity state transitions
         break;
      case OdinEvent_Joined:
         // Triggered post successful room entry, rendering the initial state fully accessible
         break;
      case OdinEvent_RoomUserDataChanged:
         // Triggered when the room's arbitrary user data changed
         break;
      case OdinEvent_PeerJoined:
         // Triggered when a new user enters the room
         break;
      case OdinEvent_PeerLeft:
         // Triggered when a user exits the room
         break;
      case OdinEvent_PeerUserDataChanged:
         // Triggered when a peers's arbitrary user data changed
         break;
      case OdinEvent_MediaAdded:
         // Triggered when a peer introduces a media stream into the room
         break;
      case OdinEvent_MediaRemoved:
         // Triggered when a peer withdraws a media stream from the room
         break;
      case OdinEvent_MediaActiveStateChanged:
         // Triggered on change of media stream activity (e.g. user started/stopped talking)
         break;
      case OdinEvent_MessageReceived:
         // Triggered upon receipt of a message containing arbitrary data from a peer
         break;
      default:
         // Optionally handle unexpected events
         break;
    }
}
</code></pre>
<p>To register your callback function as an handler for ODIN events for a room, use the following command:</p>
<pre><code class="language-c">odin_room_set_event_callback(room, handle_odin_event, NULL);
</code></pre>
<h3 id="media-streams">Media Streams</h3>
<p>Each peer within an ODIN room has the capability to attach media streams for the transmission of voice data. The snippet below illustrates the procedure to establish a new input media stream:</p>
<pre><code class="language-c">OdinAudioStreamConfig config = {
    .sample_rate = 48000,
    .channel_count = 1,
};

OdinMediaStreamHandle stream = odin_audio_stream_create(config);

odin_room_add_media(room, stream);
</code></pre>
<p>For the handling of audio data through input/output media streams, employ the <code>odin_audio_push_data</code> and <code>odin_audio_read_data</code> functions. These functions enable the conveyance of audio data from your local microphone to your audio engine, and the playback of audio data received from other peers, respectively. For a comprehensive working example, refer to our <a href="https://www.4players.io/odin/examples/minimal-client/">Console Client</a> example, which employs the <a href="https://miniaud.io">miniaudio</a> library for cross-platform audio capture and playback.</p>
<h3 id="audio-processing">Audio Processing</h3>
<p>Each ODIN room handle is equipped with a dedicated Audio Processing Module (APM) responsible for executing a spectrum of audio filters including, but not limited to, echo cancellation, noise suppression, and sophisticated voice activity detection. This module is designed to accommodate on-the-fly adjustments, empowering you to fine-tune audio settings in real time to suit evolving conditions. The snippet below demonstrates how you might alter the APM settings:</p>
<pre><code class="language-c">OdinApmConfig apm_config = {
    .voice_activity_detection = true,
    .voice_activity_detection_attack_probability = 0.9,
    .voice_activity_detection_release_probability = 0.8,
    .volume_gate = false,
    .volume_gate_attack_loudness = -30,
    .volume_gate_release_loudness = -40,
    .echo_canceller = true,
    .high_pass_filter = false,
    .pre_amplifier = false,
    .noise_suppression_level = OdinNoiseSuppressionLevel_Moderate,
    .transient_suppressor = false,
    .gain_controller = true,
};

odin_room_configure_apm(room, apm_config);
</code></pre>
<p>The ODIN APM provides the following features:</p>
<h4 id="voice-activity-detection-vad">Voice Activity Detection (VAD)</h4>
<p>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.</p>
<h4 id="input-volume-gate">Input Volume Gate</h4>
<p>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.</p>
<h4 id="acoustic-echo-cancellation-aec">Acoustic Echo Cancellation (AEC)</h4>
<p>When enabled the echo canceller will try to subtract echoes, reverberation, and unwanted added sounds from the audio input signal. Note, that you need to process the reverse audio stream, also known as the loopback data to be used in the ODIN echo canceller.</p>
<h4 id="noise-suppression">Noise Suppression</h4>
<p>When enbabled, 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.</p>
<h4 id="high-pass-filter-hpf">High-Pass Filter (HPF)</h4>
<p>When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.</p>
<h4 id="preamplifier">Preamplifier</h4>
<p>When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.</p>
<h4 id="transient-suppression">Transient Suppression</h4>
<p>When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.</p>
<h4 id="automatic-gain-control-agc">Automatic Gain Control (AGC)</h4>
<p>When enabled, the gain controller will bring the input audio signal to an appropriate range when it&rsquo;s either too loud or too quiet.</p>
<h3 id="user-data">User Data</h3>
<p>Each peer within a room is associated with a unique user data represented as a byte array (<code>uint8_t *</code>). This data is synchronized automatically across all peers, facilitating the storage of bespoke information for every individual peer. Peers have the autonomy to modify their respective user data at any juncture, inclusive of before room entry to set an initial user data value.</p>
<pre><code class="language-c">char *user_data = &quot;{\\&quot;foo\\&quot;:\\&quot;bar\\&quot;}&quot;;

odin_room_update_peer_user_data(room, (uint8_t *)user_data, strlen(user_data));
</code></pre>
<h3 id="messages">Messages</h3>
<p>ODIN allows you to send arbitrary to every other peer in the room or even individual targets. Just like user data, a message is a byte array (<code>uint8_t *</code>).</p>
<p><strong>Note:</strong> Messages are always sent to all targets in the room, even when they moved out of proximity using setPosition.</p>
<pre><code class="language-c">struct MyMessage msg = {
   .foo = 1,
   .bar = 2,
};

odin_room_send_message(room, NULL, 0, (uint8_t *)&amp;msg, sizeof(msg));
</code></pre>
<h2 id="header">Header</h2>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                C-API Header
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C">/* Copyright (c) 4Players GmbH. All rights reserved. */

#pragma once

/** @file */

#include &lt;stdarg.h&gt;
#include &lt;stdbool.h&gt;
#include &lt;stddef.h&gt;
#include &lt;stdint.h&gt;
#include &lt;stdlib.h&gt;

#define ODIN_VERSION &quot;1.6.4&quot;

/**
 * Known types of a media stream.
 *
 * Note: Video streams are not supported yet.
 */
typedef enum OdinMediaStreamType {
    /**
     * Media stream is of type audio
     */
    OdinMediaStreamType_Audio,
    /**
     * Media stream is of type video
     */
    OdinMediaStreamType_Video,
    /**
     * Media stream is invalid
     */
    OdinMediaStreamType_Invalid,
} OdinMediaStreamType;

/**
 * Valid levels for aggressiveness of the noise suppression. A higher level will reduce the noise
 * level at the expense of a higher speech distortion.
 */
typedef enum OdinNoiseSuppressionLevel {
    /**
     * Noise suppression is disabled
     */
    OdinNoiseSuppressionLevel_None,
    /**
     * Use low suppression (6 dB)
     */
    OdinNoiseSuppressionLevel_Low,
    /**
     * Use moderate suppression (12 dB)
     */
    OdinNoiseSuppressionLevel_Moderate,
    /**
     * Use high suppression (18 dB)
     */
    OdinNoiseSuppressionLevel_High,
    /**
     * Use very high suppression (21 dB)
     */
    OdinNoiseSuppressionLevel_VeryHigh,
} OdinNoiseSuppressionLevel;

/**
 * All valid connection states for an ODIN room.
 */
typedef enum OdinRoomConnectionState {
    /**
     * Connection is being established
     */
    OdinRoomConnectionState_Connecting,
    /**
     * Connection is established
     */
    OdinRoomConnectionState_Connected,
    /**
     * Connection is being closed
     */
    OdinRoomConnectionState_Disconnecting,
    /**
     * Connection is closed
     */
    OdinRoomConnectionState_Disconnected,
} OdinRoomConnectionState;

/**
 * Possible reasons for connection state changes of an ODIN room.
 */
typedef enum OdinRoomConnectionStateChangeReason {
    /**
     * Connection state change was initiated by the user
     */
    OdinRoomConnectionStateChangeReason_ClientRequested,
    /**
     * Connection state change was initiated by the server (e.g. peer was kicked)
     */
    OdinRoomConnectionStateChangeReason_ServerRequested,
    /**
     * Connection state change was caused by a timeout
     */
    OdinRoomConnectionStateChangeReason_ConnectionLost,
} OdinRoomConnectionStateChangeReason;

/**
 * Valid audiences for ODIN room tokens.
 */
typedef enum OdinTokenAudience {
    /**
     * JWT has no audience
     */
    OdinTokenAudience_None,
    /**
     * JWT is accepted the ODIN gateway
     */
    OdinTokenAudience_Gateway,
    /**
     * JWT is accepted by the ODIN server
     */
    OdinTokenAudience_Sfu,
} OdinTokenAudience;

/**
 * A pointer to a local ODIN token generator, employed for generating signed room tokens predicated
 * on an access key. Be aware that access keys serve as your unique authentication keys, requisite
 * for generating room tokens to access the ODIN server network. To ensure your security, it's
 * strongly recommended that you _NEVER_ embed an access key within your client code, and instead
 * generate room tokens on a server.
 */
typedef struct OdinTokenGenerator OdinTokenGenerator;

/**
 * A numeric code returned by ODIN function calls. Use \`odin_is_error\` to determine whether the
 * code represents an error or an actual result value.
 *
 * Note: Use \`odin_error_format\` to get a human readable string to represent error codes.
 */
typedef uint32_t OdinReturnCode;

/**
 * Audio stream configuration.
 */
typedef struct OdinAudioStreamConfig {
    /**
     * The number of samples per second in hertz (between 8000 and 192000)
     */
    uint32_t sample_rate;
    /**
     * The number of channels for the new audio stream (between 1 and 2)
     */
    uint8_t channel_count;
} OdinAudioStreamConfig;

/**
 * Internal handle identifier for an ODIN room to interact with.
 */
typedef size_t OdinRoomHandle;

/**
 * Internal handle identifier for an ODIN audio/video stream used to send/receive data.
 */
typedef size_t OdinMediaStreamHandle;

/**
 * All the different events emitted from an ODIN room.
 */
typedef enum OdinEventTag {
    /**
     * Emitted after joining once initial room information was processed
     */
    OdinEvent_Joined,
    /**
     * Emitted when other peers joined the room
     */
    OdinEvent_PeerJoined,
    /**
     * Emitted when other peers left the room
     */
    OdinEvent_PeerLeft,
    /**
     * Emitted when other peers updated their user data
     */
    OdinEvent_PeerUserDataChanged,
    /**
     * Emitted when other peers started a media stream
     */
    OdinEvent_MediaAdded,
    /**
     * Emitted when other peers stopped a media stream
     */
    OdinEvent_MediaRemoved,
    /**
     * Emitted whenever data is sent/received over any known media
     */
    OdinEvent_MediaActiveStateChanged,
    /**
     * Emitted when other peers changed the global user data of the room itself
     */
    OdinEvent_RoomUserDataChanged,
    /**
     * Emitted when the internal room connection state of the ODIN client changed
     */
    OdinEvent_RoomConnectionStateChanged,
    /**
     * Emitted when others peers sent arbitrary data
     */
    OdinEvent_MessageReceived,
} OdinEventTag;

typedef struct OdinEvent_JoinedData {
    /**
     * Name of the joined room (null-terminated)
     */
    const char *room_id;
    /**
     * Length of the room name
     */
    size_t room_id_len;
    /**
     * Byte array with arbitrary user data of the room
     */
    const uint8_t *room_user_data;
    /**
     * Length of the room user data array
     */
    size_t room_user_data_len;
    /**
     * Identifier of the customer the room is assigned to (nul-terminated)
     */
    const char *customer;
    /**
     * Length of the customer identifier
     */
    size_t customer_len;
    /**
     * Own peer ID assigned by the server
     */
    uint64_t own_peer_id;
    /**
     * Own user identifier of the peer specified during authentication (null-terminated)
     */
    const char *own_user_id;
    /**
     * Length of the own user identifier
     */
    size_t own_user_id_len;
} OdinEvent_JoinedData;

typedef struct OdinEvent_PeerJoinedData {
    /**
     * ID of the peer
     */
    uint64_t peer_id;
    /**
     * Byte array with arbitrary user data of the peer
     */
    const uint8_t *peer_user_data;
    /**
     * Length of the room user data array
     */
    size_t peer_user_data_len;
    /**
     * User identifier of the peer specified during authentication (null-terminated)
     */
    const char *user_id;
    /**
     * Length of the user identifier
     */
    size_t user_id_len;
} OdinEvent_PeerJoinedData;

typedef struct OdinEvent_PeerLeftData {
    /**
     * ID of the peer
     */
    uint64_t peer_id;
} OdinEvent_PeerLeftData;

typedef struct OdinEvent_PeerUserDataChangedData {
    /**
     * ID of the peer
     */
    uint64_t peer_id;
    /**
     * Byte array with arbitrary user data of the peer
     */
    const uint8_t *peer_user_data;
    /**
     * Length of the room user data array
     */
    size_t peer_user_data_len;
} OdinEvent_PeerUserDataChangedData;

typedef struct OdinEvent_MediaAddedData {
    /**
     * ID of the peer this media belongs to
     */
    uint64_t peer_id;
    /**
     * Handle identifier of the new audio/video stream
     */
    OdinMediaStreamHandle media_handle;
} OdinEvent_MediaAddedData;

typedef struct OdinEvent_MediaRemovedData {
    /**
     * ID of the peer this media belongs to
     */
    uint64_t peer_id;
    /**
     * Handle identifier of the audio/video stream
     */
    OdinMediaStreamHandle media_handle;
} OdinEvent_MediaRemovedData;

typedef struct OdinEvent_MediaActiveStateChangedData {
    /**
     * ID of the peer this media belongs to
     */
    uint64_t peer_id;
    /**
     * Handle identifier of the audio/video stream
     */
    OdinMediaStreamHandle media_handle;
    /**
     * Indicator for whether or not the media is sending/receiving data
     */
    bool active;
} OdinEvent_MediaActiveStateChangedData;

typedef struct OdinEvent_RoomUserDataChangedData {
    /**
     * Byte array with arbitrary user data of the room
     */
    const uint8_t *room_user_data;
    /**
     * Length of the room user data array
     */
    size_t room_user_data_len;
} OdinEvent_RoomUserDataChangedData;

typedef struct OdinEvent_RoomConnectionStateChangedData {
    /**
     * Status of the room connection
     */
    enum OdinRoomConnectionState state;
    /**
     * Reason for this update
     */
    enum OdinRoomConnectionStateChangeReason reason;
} OdinEvent_RoomConnectionStateChangedData;

typedef struct OdinEvent_MessageReceivedData {
    /**
     * ID of the peer who sent this message
     */
    uint64_t peer_id;
    /**
     * Byte array with arbitrary data received
     */
    const uint8_t *data;
    /**
     * Length of the data array
     */
    size_t data_len;
} OdinEvent_MessageReceivedData;

typedef struct OdinEvent {
    OdinEventTag tag;
    union {
        OdinEvent_JoinedData joined;
        OdinEvent_PeerJoinedData peer_joined;
        OdinEvent_PeerLeftData peer_left;
        OdinEvent_PeerUserDataChangedData peer_user_data_changed;
        OdinEvent_MediaAddedData media_added;
        OdinEvent_MediaRemovedData media_removed;
        OdinEvent_MediaActiveStateChangedData media_active_state_changed;
        OdinEvent_RoomUserDataChangedData room_user_data_changed;
        OdinEvent_RoomConnectionStateChangedData room_connection_state_changed;
        OdinEvent_MessageReceivedData message_received;
    };
} OdinEvent;

/**
 * Statistics for the underlying connection of a room.
 */
typedef struct OdinConnectionStats {
    /**
     * The amount of outgoing UDP datagrams observed
     */
    uint64_t udp_tx_datagrams;
    /**
     * The amount of outgoing acknowledgement frames observed
     */
    uint64_t udp_tx_acks;
    /**
     * The total amount of bytes which have been transferred inside outgoing UDP datagrams
     */
    uint64_t udp_tx_bytes;
    /**
     * The amount of incoming UDP datagrams observed
     */
    uint64_t udp_rx_datagrams;
    /**
     * The amount of incoming acknowledgement frames observed
     */
    uint64_t udp_rx_acks;
    /**
     * The total amount of bytes which have been transferred inside incoming UDP datagrams
     */
    uint64_t udp_rx_bytes;
    /**
     * Current congestion window of the connection
     */
    uint64_t cwnd;
    /**
     * Congestion events on the connection
     */
    uint64_t congestion_events;
    /**
     * Current best estimate of the connection latency (round-trip-time) in milliseconds
     */
    float rtt;
} OdinConnectionStats;

/**
 * Per-room configuration of the ODIN audio processing module which provides a variety of smart
 * enhancement algorithms.
 */
typedef struct OdinApmConfig {
    /**
     * Enables or disables voice activity detection (VAD)
     */
    bool voice_activity_detection;
    /**
     * Voice probability value when the VAD should engage
     */
    float voice_activity_detection_attack_probability;
    /**
     * Voice probability value when the VAD should disengage
     */
    float voice_activity_detection_release_probability;
    /**
     * Enables or disables the input volume gate
     */
    bool volume_gate;
    /**
     * Root mean square power (dBFS) when the volume gate should engage
     */
    float volume_gate_attack_loudness;
    /**
     * Root mean square power (dBFS) when the volume gate should disengage
     */
    float volume_gate_release_loudness;
    /**
     * Enable or disable echo cancellation
     */
    bool echo_canceller;
    /**
     * Enable or disable high pass filtering
     */
    bool high_pass_filter;
    /**
     * Enable or disable the pre amplifier
     */
    bool pre_amplifier;
    /**
     * Set the aggressiveness of the suppression
     */
    enum OdinNoiseSuppressionLevel noise_suppression_level;
    /**
     * Enable or disable the transient suppressor
     */
    bool transient_suppressor;
    /**
     * Enable or disable the gain controller
     */
    bool gain_controller;
} OdinApmConfig;

/**
 * Audio stream statistics.
 */
typedef struct OdinAudioStreamStats {
    /**
     * The total number of packets seen by the medias jitter buffer.
     */
    uint32_t packets_total;
    /**
     * The number of packets processed by the medias jitter buffer.
     */
    uint32_t packets_processed;
    /**
     * The number of packets dropped because they seemed to arrive too early.
     */
    uint32_t packets_arrived_too_early;
    /**
     * The number of packets dropped because they seemed to arrive too late.
     */
    uint32_t packets_arrived_too_late;
    /**
     * The number of packets dropped due to a jitter buffer reset.
     */
    uint32_t packets_dropped;
    /**
     * The number of packets marked as invalid.
     */
    uint32_t packets_invalid;
    /**
     * The number of packets marked as duplicates.
     */
    uint32_t packets_repeated;
    /**
     * The number of packets marked as lost during transmission.
     */
    uint32_t packets_lost;
} OdinAudioStreamStats;

typedef size_t OdinResamplerHandle;

/**
 * Options for ODIN room tokens.
 */
typedef struct OdinTokenOptions {
    /**
     * Customer identifier (you should _NOT_ set this unless connecting directly to an ODIN server)
     */
    const char *customer;
    /**
     * Audience of the token
     */
    enum OdinTokenAudience audience;
    /**
     * Token lifetime in seconds
     */
    uint64_t lifetime;
} OdinTokenOptions;

#ifdef __cplusplus
extern &quot;C&quot; {
#endif // __cplusplus

/**
 * Formats an ODIN return code into a human readable string representation for use in logging and
 * diagnostics. If \`buf\` is \`NULL\` this functions simply returns the required buffer length to
 * store the output buffer.
 */
size_t odin_error_format(OdinReturnCode error, char *buf, size_t buf_len);

/**
 * Checks whether the code returned from ODIN function calls represents an error or an actual
 * result. This is used to easier work with certain functions that might return an error or a
 * valid result like \`odin_audio_data_len\`.
 * Internally this simply does \`(code &gt;&gt; 29) &gt; 0\`.
 */
bool odin_is_error(OdinReturnCode code);

/**
 * Initializes the internal ODIN client runtime with optimized settings for audio output, ensuring
 * the correct API header file is employed. This operation is ref-counted, necessitating paired
 * invocations of startup and shutdown within your application. The majority of the API functions
 * hinge on an active ODIN runtime, with the sole exception of \`access_key\` and \`token_generator\`
 * related functions.
 *
 * Note: Utilize \`ODIN_VERSION\` to supply the \`version\` argument.
 */
bool odin_startup(const char *version);

/**
 * Initializes the internal ODIN client runtime, permitting the specification of sample rate and
 * channel layout for audio output. This operation is ref-counted, necessitating paired invocations
 * of startup and shutdown within your application.
 *
 * Note: Ensure consistent settings are used on successive invocations of this function.
 */
bool odin_startup_ex(const char *version, struct OdinAudioStreamConfig output_config);

/**
 * Shuts down the internal ODIN runtime. It is advisable to invoke this function prior to
 * terminating the application. Post invocation, all \`odin_*\` methods will cease to function
 * immediately, provided the internal ref-count has descended to zero. Refer to \`odin_startup\`
 * for additional details.
 */
void odin_shutdown(void);

/**
 * Creates a new ODIN room handle in an unconnected state and returns its handle identifier. This
 * will return \`0\` when the internal ODIN client runtime is not initialized using \`odin_startup\`
 * or has already been terminated using \`odin_shutdown\`.
 */
OdinRoomHandle odin_room_create(void);

/**
 * Closes the specified ODIN room handle, thus making our own peer leave the room on the server
 * and closing the connection if needed.
 */
OdinReturnCode odin_room_close(OdinRoomHandle room);

/**
 * Destroys the specified ODIN room handle.
 */
OdinReturnCode odin_room_destroy(OdinRoomHandle room);

/**
 * Sets the event callback on the the specified \`OdinRoomHandle\`. Generally this should be called
 * _once_ before joining a room.
 */
OdinReturnCode odin_room_set_event_callback(OdinRoomHandle room,
                                            void (*callback)(OdinRoomHandle room,
                                                             const struct OdinEvent *event,
                                                             void *extra_data),
                                            void *extra_data);

/**
 * Sets the scaling factor for coordinates supplied to \`odin_room_update_position\`, facilitating
 * adaptation to your game's unique coordinate system requirements. Peers are visible to each other
 * only within a unit circle of radius \`1.0\`. When altering a peer's position, ensure the position
 * is scaled such that the maximum distance remains one or less. This scaling can be performed
 * manually or by specifying the multiplicative scale here.
 *
 * Note: It's crucial to maintain consistent scaling across all client applications.
 */
OdinReturnCode odin_room_set_position_scale(OdinRoomHandle room, float scale);

/**
 * Joins a room on an ODIN server. This function takes an URL to an ODIN gateway and a signed room
 * token obtained externally that authorizes the client to establish the connection. Unless you're
 * hosting your own servers, always use gateway running at \`https://gateway.odin.4players.io\`.
 */
OdinReturnCode odin_room_join(OdinRoomHandle room, const char *url, const char *token);

/**
 * Retrieves the room ID (e.g. the name of the room) from the specified \`OdinRoomHandle\`.
 */
OdinReturnCode odin_room_id(OdinRoomHandle room, char *out_id, size_t out_id_len);

/**
 * Retrieves the identifier of the customer the room is assigned to from the specified \`OdinRoomHandle\`.
 */
OdinReturnCode odin_room_customer(OdinRoomHandle room,
                                  char *out_customer,
                                  size_t out_customer_len);

/**
 * Retrieves your own peer ID from the specified \`OdinRoomHandle\`.
 */
OdinReturnCode odin_room_peer_id(OdinRoomHandle room, uint64_t *out_peer_id);

/**
 * Retrieves statistics for the underlying connection of the specified \`OdinRoomHandle\`.
 */
OdinReturnCode odin_room_connection_stats(OdinRoomHandle room, struct OdinConnectionStats *stats);

/**
 * Updates the custom user data for your own peer. All user data is synced automatically, which
 * allows storing of arbitrary information for each individual peer.
 *
 * Note: Use this before calling \`odin_room_join\` to set initial peer user data upon connect.
 */
OdinReturnCode odin_room_update_peer_user_data(OdinRoomHandle room,
                                               const uint8_t *user_data,
                                               size_t user_data_length);

/**
 * Updates the three-dimensional position of the current peer within the specified \`OdinRoomHandle\`.
 * The server utilizes the provided coordinates to perform automatic culling among peers in the same
 * room, based on unit circles with a radius of \`1.0\`. This feature is particularly beneficial in
 * scenarios involving a large number of peers within the same room, enabling peers to interact or
 * 'see' each other only when in close proximity. To modify the distance sensitivity for position
 * updates, use \`odin_room_set_position_scale\`.
 *
 * Note: Use this before calling \`odin_room_join\` to set the initial peer position upon connect.
 */
OdinReturnCode odin_room_update_position(OdinRoomHandle room, float x, float y, float z);

/**
 * Sends arbitrary data to a list of target peers over the ODIN server. If \`NULL\` is specified, the
 * message will be sent to all other peers in the same room.
 */
OdinReturnCode odin_room_send_message(OdinRoomHandle room,
                                      const uint64_t *peer_id_list,
                                      size_t peer_id_list_size,
                                      const uint8_t *data,
                                      size_t data_length);

/**
 * Adds a specified \`OdinMediaStreamHandle\` to the room. Please note, that this can only be done
 * _once_ on a given media. Trying to do it more than once will return an error on subsequent calls
 * to this function.
 */
OdinReturnCode odin_room_add_media(OdinRoomHandle room, OdinMediaStreamHandle media);

/**
 * Configures the ODIN audio processing module on the room with the specified config.
 */
OdinReturnCode odin_room_configure_apm(OdinRoomHandle room, struct OdinApmConfig config);

/**
 * Creates a new audio input stream, which can be added to a room and send data over it.
 */
OdinMediaStreamHandle odin_audio_stream_create(struct OdinAudioStreamConfig config);

/**
 * Creates a new video input stream, which can be added to a room and send data over it.
 *
 * Note: Video streams are not supported yet.
 */
OdinMediaStreamHandle odin_video_stream_create(void);

/**
 * Destroys the specified \`OdinMediaStreamHandle\`, after which you will no longer be able to
 * receive or send any data over it. If the media is currently 'attached' to a room it will be
 * removed.
 */
OdinReturnCode odin_media_stream_destroy(OdinMediaStreamHandle stream);

/**
 * Retrieves the media ID of the specified \`OdinMediaStreamHandle\`.
 */
OdinReturnCode odin_media_stream_media_id(OdinMediaStreamHandle stream, uint16_t *out_media_id);

/**
 * Retrieves the peer ID of the specified \`OdinMediaStreamHandle\`.
 */
OdinReturnCode odin_media_stream_peer_id(OdinMediaStreamHandle stream, uint64_t *out_peer_id);

/**
 * Returns the type of the specified media stream.
 *
 * Note: This function will always return \`OdinMediaStreamType_Audio\` at the moment.
 */
enum OdinMediaStreamType odin_media_stream_type(OdinMediaStreamHandle stream);

/**
 * Instructs the server to pause the specified \`OdinMediaStreamHandle\`, ceasing the reception of
 * data. This operation essentially communicates a server-side mute request from the client, thus
 * indicating a desire to halt packet reception for this media stream.
 */
OdinReturnCode odin_media_stream_pause(OdinMediaStreamHandle stream);

/**
 * Instructs the server to resume the specified output \`OdinMediaStreamHandle\`, re-initiating the
 * reception of data. This operation essentially communicates a server-side unmute request from the
 * client, indicating a desire to restart packet reception for this media stream.
 */
OdinReturnCode odin_media_stream_resume(OdinMediaStreamHandle stream);

/**
 * Sends data to the audio stream. The data has to be interleaved [-1, 1] float data.
 */
OdinReturnCode odin_audio_push_data(OdinMediaStreamHandle stream, const float *buf, size_t buf_len);

/**
 * Reads audio data from the specified \`OdinMediaStreamHandle\`. This will return audio data in the
 * format specified when calling \`odin_startup_ex\` or 48 kHz interleaved by default.
 */
OdinReturnCode odin_audio_read_data(OdinMediaStreamHandle stream,
                                    float *out_buffer,
                                    size_t out_buffer_len);

/**
 * Returns the number of samples available in the audio buffer of an output \`OdinMediaStreamHandle\`.
 */
OdinReturnCode odin_audio_data_len(OdinMediaStreamHandle stream);

/**
 * Resets the specified \`OdinMediaStreamHandle\` to its initial state, restoring 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.
 */
OdinReturnCode odin_audio_reset(OdinMediaStreamHandle stream);

/**
 * Retrieves statistics for the specified \`OdinMediaStreamHandle\`.
 *
 * Note: This will only work for output streams.
 */
OdinReturnCode odin_audio_stats(OdinMediaStreamHandle stream, struct OdinAudioStreamStats *stats);

/**
 * Reads up to \`out_buffer_len\` samples from the given streams and mixes them into the \`out_buffer\`.
 * All audio streams will be read based on the sample rate you chose when initializing the ODIN runtime
 * so make sure to allocate the buffer accordingly. After the call the \`out_buffer_len\` will contain
 * the amount of samples that have actually been read and mixed into \`out_buffer\`.
 *
 * If enabled this will also apply any audio processing to the output stream and feed back required
 * data to the internal audio processing pipeline which requires a final mix.
 */
OdinReturnCode odin_audio_mix_streams(OdinRoomHandle room,
                                      const OdinMediaStreamHandle *streams,
                                      size_t stream_count,
                                      float *out_buffer,
                                      size_t out_buffer_len);

/**
 * Processes the reverse audio stream, also known as the loopback data to be used in the ODIN echo
 * canceller. This should only be done if you are _NOT_ using \`odin_audio_mix_streams\`.
 */
OdinReturnCode odin_audio_process_reverse(OdinRoomHandle room, float *buffer, size_t buffer_len);

/**
 * Sets the delay estimate for the reverse stream used in the ODIN echo cancellation. This function
 * is important in scenarios where the audio output and the audio input are not synchronized. An
 * accurate delay value ensures that the echo canceller can correctly align the two audio streams,
 * resulting in effective echo cancellation.
 *
 * Improper delay values may lead to poor echo cancellation and thus degrade the quality of the
 * audio communication.
 */
OdinReturnCode odin_audio_set_stream_delay(OdinRoomHandle room, uint64_t delay_ms);

/**
 * Creates a new ODIN resampler instance. This is intended for situations where your audio pipeline
 * doesn't support 48 kHz.
 *
 * Note: One resampler should be used exclusively per audio stream.
 */
OdinResamplerHandle odin_resampler_create(uint32_t from_rate,
                                          uint32_t to_rate,
                                          uint16_t channel_count);

/**
 * Resamples a single chunk of audio. If the ODIN resampler instance was created with multiple
 * channels, the data is assumed to be interleaved. The \`output_capacity\` argument also serves as
 * an out parameter when the provided capacity wasn't enough to fulfill the resample request, in
 * which case this function will write the minimum required buffer size into the given variable.
 * On success, the written size for the processed sample is returned in both, the return value
 * and the \`output_capacity\` out parameter.
 */
OdinReturnCode odin_resampler_process(OdinResamplerHandle resampler,
                                      const float *input,
                                      size_t input_len,
                                      float *output,
                                      size_t *output_capacity);

/**
 * Destroys the given ODIN resampler instance. After this call, all attempts to use this handle
 * will fail.
 */
OdinReturnCode odin_resampler_destroy(OdinResamplerHandle resampler);

/**
 * Creates a new access key crucial for signing tokens, facilitating access to an ODIN server. An
 * access key is a 44-character long Base64 String, embodying a version identifier, random bytes,
 * and a checksum.
 */
OdinReturnCode odin_access_key_generate(char *buf, size_t buf_len);

/**
 * Extracts the key ID from a specified access key. The key ID is embedded in room tokens, enabling
 * the identification of the corresponding public key required for verification.
 */
OdinReturnCode odin_access_key_id(const char *access_key, char *out_key_id, size_t out_key_id_len);

/**
 * Extracts the public key from a specified access key. The public key, derived from the Ed25519
 * curve, must be shared with _4Players_ to enable verification of a generated room token.
 */
OdinReturnCode odin_access_key_public_key(const char *access_key,
                                          char *out_public_key,
                                          size_t out_public_key_len);

/**
 * Extracts the private key from a specified access key. The private key, rooted in the Ed25519
 * curve, is utilized to sign a generated room token for accessing the ODIN network.
 */
OdinReturnCode odin_access_key_secret_key(const char *access_key,
                                          char *out_secret_key,
                                          size_t out_secret_key_len);

/**
 * Creates a new token generator instance.
 */
struct OdinTokenGenerator *odin_token_generator_create(const char *access_key);

/**
 * Destroys an existing token generator instance.
 */
void odin_token_generator_destroy(struct OdinTokenGenerator *generator);

/**
 * Generates a signed JWT, which can be used by an ODIN client to join a room.
 */
OdinReturnCode odin_token_generator_create_token(struct OdinTokenGenerator *generator,
                                                 const char *room_id,
                                                 const char *user_id,
                                                 char *out_token,
                                                 size_t out_token_len);

/**
 * Generates a signed JWT such as \`odin_token_generator_create_token\` and allows passing a custom
 * set of \`OdinTokenOptions\` for advanced use-cases.
 */
OdinReturnCode odin_token_generator_create_token_ex(struct OdinTokenGenerator *generator,
                                                    const char *room_id,
                                                    const char *user_id,
                                                    const struct OdinTokenOptions *options,
                                                    char *out_token,
                                                    size_t out_token_len);

#ifdef __cplusplus
} // extern &quot;C&quot;
#endif // __cplusplus
</code></pre>
</div>
</div>

`}),e.add({id:3597,href:"https://www.4players.io/odin/sdk/unity/1.1.0/manual/",title:"Manual",section:"ODIN Documentation",description:"Manual for Unity Components and ODIN integration in Unity Editor",content:`<p>The ODIN Unity SDK provides some prefabs and components that allow you to quickly embed true 3D positional real-time
audio into your game with ease.</p>
<p>We also provide sample code within the SDK and some <a href="https://github.com/4players">Github repositories</a>.</p>
<h2 id="setup">Setup</h2>
<p>After <a href="/odin/sdk/unity/">installing the SDK</a> you need to setup a couple of ODIN components in your scene.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses a singleton to manage lifetime of ODIN your game. <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
uses <code>DontDestroyOnLoad</code> to survive
scene changes. Best place to put the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
is in one of your starting game scenes like &ldquo;Loading&rdquo;
or &ldquo;Main Menu&rdquo;.</p>
</div>
</div>

<h3 id="using-prefabs">Using Prefabs</h3>
<p>In <code>Packages/4Players ODIN/Runtime</code> you find the <code>OdinManager</code> prefab. Drag &amp; Drop that into your scene.</p>
<p>We also provide a couple of prefab variants, depending on your use-case. After installing the Unity SDK package you should also <a href="/odin/sdk/unity/#importing-samples">install
the samples</a>.</p>
<p>You&rsquo;ll find the samples in the <code>/Samples/4Players ODIN/__VERSION__/Examples</code> folder in your Assets. We have created a couple
of <code>Odin Manager</code> prefabs for different use-cases like 3D Audio. Drag them into your scene.</p>
<h3 id="create-odin-manager-manually">Create ODIN Manager manually</h3>
<p>If you do not want to use our prefabs, you can also create an Odin Manager yourself. Follow these steps:</p>
<ul>
<li>Create an empty <em>Game Object</em></li>
<li><em>Optional</em>: Add the <span class="external-reference">Odin Banner <a href="/odin/sdk/unity/1.1.0/manual/odinbanner/"><i class="fas fa-external-link-alt"></i></a></span>
 component which will show a nice banner in your editor window that allows you to
easily identify the ODIN Manager if you have a larger scene. And more importantly it looks cool ;-).</li>
<li>Add the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.1.0/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
<li>Add the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
<li>Add the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.1.0/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
</ul>
<h3 id="the-odin-manager">The ODIN Manager</h3>
<p>After you have dropped one of our prefabs into your scene or created the ODIN Manager Game Object yourself, you should see
this in the Unity Inspector:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="322"/></a>
</figure>
<p>The ODIN Manager should be used for setting up ODIN in your game (i.e. sample rates or which microphone should be used)
and it will also handle all the heavy lifting:</p>
<ul>
<li>Generating access tokens so that players can connect to our ODIN servers</li>
<li>Managing ODIN events and exposing them in your project</li>
<li>Initialization of audio pipelines</li>
<li>Capture audio input from microphones and pushing audio data to ODIN runtime</li>
</ul>
<p>The ODIN Manager typically consists of three parts:</p>
<ul>
<li>The <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.1.0/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 component for basic ODIN settings</li>
<li>The <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.1.0/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component that does event handling and allows you to connect callbacks</li>
<li>The <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.1.0/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component that captures audio input</li>
</ul>
<p>It&rsquo;s not required to put all these components into one component, for example you can put the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.1.0/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>

component on another game object if you like but it&rsquo;s typically easier if everything is in one place.</p>
<p>Let&rsquo;s start digging through the inspector properties available in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.1.0/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3598,href:"https://www.4players.io/odin/sdk/unity/1.6.6/manual/",title:"Manual",section:"ODIN Documentation",description:"Manual for Unity Components and ODIN integration in Unity Editor",content:`<p>The ODIN Unity SDK provides some prefabs and components that allow you to quickly embed true 3D positional real-time
audio into your game with ease.</p>
<p>We also provide sample code within the SDK and some <a href="https://github.com/4players">Github repositories</a>.</p>
<h2 id="requirements">Requirements</h2>
<h3 id="supported-platforms">Supported platforms</h3>
<ul>
<li>Windows (x64)</li>
<li>MacOS (Universal)</li>
<li>iOS (Universal)</li>
<li>Android (ARM64)</li>
</ul>
<p>For additional platform support, please contact us!</p>
<h2 id="setup">Setup</h2>
<p>After <a href="/odin/sdk/unity/1.6.6/">installing the SDK</a> you need to setup a couple of ODIN components in your scene.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses a singleton to manage lifetime of ODIN your game. <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
uses <code>DontDestroyOnLoad</code> to survive
scene changes. Best place to put the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
is in one of your starting game scenes like &ldquo;Loading&rdquo;
or &ldquo;Main Menu&rdquo;.</p>
</div>
</div>

<h3 id="using-prefabs">Using Prefabs</h3>
<p>In <code>Packages/4Players ODIN/Runtime</code> you find the <code>OdinManager</code> prefab. Drag &amp; Drop that into your scene.</p>
<p>We also provide a couple of prefab variants, depending on your use-case. After installing the Unity SDK package you should also <a href="/odin/sdk/unity/1.6.6/#importing-samples">install
the samples</a>.</p>
<p>You&rsquo;ll find the samples in the <code>/Samples/4Players ODIN/__VERSION__/Examples</code> folder in your Assets. We have created a couple
of <code>Odin Manager</code> prefabs for different use-cases like 3D Audio. Drag them into your scene.</p>
<h3 id="create-odin-manager-manually">Create ODIN Manager manually</h3>
<p>If you do not want to use our prefabs, you can also create an Odin Manager yourself. Follow these steps:</p>
<ul>
<li>Create an empty <em>Game Object</em></li>
<li><em>Optional</em>: Add the <span class="external-reference">Odin Banner <a href="/odin/sdk/unity/1.6.6/manual/odinbanner/"><i class="fas fa-external-link-alt"></i></a></span>
 component which will show a nice banner in your editor window that allows you to
easily identify the ODIN Manager if you have a larger scene. And more importantly it looks cool ;-).</li>
<li>Add the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
<li>Add the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
<li>Add the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
</ul>
<h3 id="the-odin-manager">The ODIN Manager</h3>
<p>After you have dropped one of our prefabs into your scene or created the ODIN Manager Game Object yourself, you should see
this in the Unity Inspector:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="322"/></a>
</figure>
<p>The ODIN Manager should be used for setting up ODIN in your game (i.e. sample rates or which microphone should be used)
and it will also handle all the heavy lifting:</p>
<ul>
<li>Generating access tokens so that players can connect to our ODIN servers</li>
<li>Managing ODIN events and exposing them in your project</li>
<li>Initialization of audio pipelines</li>
<li>Capture audio input from microphones and pushing audio data to ODIN runtime</li>
</ul>
<p>The ODIN Manager typically consists of three parts:</p>
<ul>
<li>The <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 component for basic ODIN settings</li>
<li>The <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component that does event handling and allows you to connect callbacks</li>
<li>The <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component that captures audio input</li>
</ul>
<p>It&rsquo;s not required to put all these components into one component, for example you can put the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>

component on another game object if you like but it&rsquo;s typically easier if everything is in one place.</p>
<p>Let&rsquo;s start digging through the inspector properties available in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3599,href:"https://www.4players.io/odin/sdk/unity/2.0.0/manual/",title:"Manual",section:"ODIN Documentation",description:"Manual for Unity Components and ODIN integration in Unity Editor",content:`<p>The ODIN Unity SDK provides prefabs and components that allow you to quickly embed true 3D positional real-time
audio into your game with ease. It also supports 2D non-spatial voice chat like in phone calls or radio communication.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Important Notice</strong>: Please be aware that our SDK version 2.0.0 is currently in a pre-release testing phase. It has not
been officially released yet. We are rigorously testing it both internally and with a select group of external customers
to ensure its quality and reliability. As a result, please note that the documentation for this version is still under
development and may not be comprehensive. Information and features in the SDK are subject to change. We appreciate your
understanding and patience during this testing period and welcome any feedback to help us improve. Thank you for your
support! You&rsquo;ll find the latest stable version of our SDK <a href="/odin/sdk/unity/">here</a>.</p>
</div>
</div>

<h2 id="comparison-to-previous-versions">Comparison to Previous Versions</h2>
<p>When developing version 2 of our SDK we have made a lot of changes to the API and the way you interact with ODIN as we
got a lot of feedback from our customers and we also learned a lot from our own experiences. Version 1.x made it super easy
to quickly implement voice-chat into your game, but it was not very flexible and it was hard to customize the experience,
especially when it comes to using more than one room or using 3D audio in use-cases that we have not thought of.</p>
<p>In version 1.x the central entry point has been the <code>OdinHandler</code> component which was a singleton and was responsible for
everything. It was easy to use, but it was also hard to customize and it was not very flexible. If you wanted to customize
the experience you had to create your own handler and copying a lot of code from our handler. This was not very user-friendly
and it required a lot of knowledge about the internals of ODIN.</p>
<h2 id="getting-started">Getting started</h2>
<p>In version 2.x you have the choice:</p>
<ul>
<li>Using the 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 component which does most of the heavy lifting for you and is very easy to use. It&rsquo;s
basically what <code>OdinHandler</code> has been before but it&rsquo;s not a singleton anymore and you can create as many rooms as you want.</li>
<li>You can also dig deep into ODIN using the 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 object manually in code and create your own experience
from scratch. This is very powerful and gives you a lot of flexibility but is also more complex. As 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>



is built on top of 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 you can also mix both approaches.</li>
</ul>
<h3 id="understanding-spatial-and-non-spatial-voice-chat">Understanding spatial and non-spatial voice-chat</h3>
<p>In ODIN we differentiate between 2D non-spatial voice-chat and 3D spatial voice-chat. 2D non-spatial voice-chat is like in
phone calls or radio communication where everyone hears everyone with the same volume. 3D spatial voice-chat is like in
real-life where everyone hears everyone with different volumes and direction depending on their position in the room.</p>
<p>The main difference between 2D and 3D is how you handle events and how you position the audio in your game. In 2D you
can just put the audio source where you want it and it will be heard by everyone and only requires that <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>

is set to <code>0.0</code> (2D sound).</p>
<p>In 3D, you need to attach the audio source representing the microphone of the &ldquo;remote player&rdquo; (i.e. a player connected
to the same room) to the position of the remote player in your game (i.e. its avatar). This is usually done by finding
the correct avatar game object and attaching the audio source to it. You also need to set the <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>

to <code>1.0</code> (3D sound).</p>
<p>To do that, you listen on the 













<span class="external-reference">OdinRoom.OnPeerJoined <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onpeerjoined"><i class="fas fa-external-link-alt"></i></a></span>


 event and 













<span class="external-reference">OdinRoom.OnMediaAdded <a href="/odin/sdk/unity/2.0.0/classes/odinroom/onmediaadded"><i class="fas fa-external-link-alt"></i></a></span>


 event
to get the audio source of the remote player and attach it to the correct position in your game. In the low-level API
it&rsquo;s 













<span class="external-reference">Room.OnPeerJoined <a href="/odin/sdk/unity/2.0.0/classes/room/onpeerjoined"><i class="fas fa-external-link-alt"></i></a></span>


 and 













<span class="external-reference">Room.OnMediaStarted <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted"><i class="fas fa-external-link-alt"></i></a></span>


. The main difference is that 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>



already handles these events for you (at least for 2D non-spacial voice-chat).</p>
<h3 id="deciding-which-approach-to-use">Deciding which approach to use</h3>
<p>We try to give a quick and simple flow-chart to help you decide which approach to use:</p>
<pre><code class="language-mermaid">graph TD
    B{What type of\\n Voice-Chat?}
    B --&gt;|2D Voice-Chat| C[Use OdinRoom with\\n provided prefab]
    B --&gt;|3D Voice-Chat| D{Multiple Rooms and\\n Connection Sharing?}
    D --&gt;|No| E[Use OdinRoom with\\n custom event handling]
    D --&gt;|Yes| F[Use Room]
</code></pre>
<p>We have compiled manuals on these different approaches, please choose one to continue/getting started:</p>
<ul>
<li><a href="/odin/sdk/unity/2.0.0/manual/odinroom">OdinRoom (High Level API)</a></li>
<li><a href="/odin/sdk/unity/2.0.0/manual/room">Room (Low Level API)</a></li>
</ul>
`}),e.add({id:3600,href:"https://www.4players.io/odin/sdk/unity/manual/",title:"Manual",section:"ODIN Documentation",description:"Manual for Unity Components and ODIN integration in Unity Editor",content:`<p>The ODIN Unity SDK provides some prefabs and components that allow you to quickly embed true 3D positional real-time
audio into your game with ease.</p>
<p>We also provide sample code within the SDK and some <a href="https://github.com/4players">Github repositories</a>.</p>
<h2 id="requirements">Requirements</h2>
<h3 id="supported-platforms">Supported platforms</h3>
<ul>
<li>Windows (x64)</li>
<li>MacOS (Universal)</li>
<li>iOS (Universal)</li>
<li>Android (ARM64)</li>
</ul>
<p>For additional platform support, please contact us!</p>
<h2 id="setup">Setup</h2>
<p>After <a href="/odin/sdk/unity/">installing the SDK</a> you need to setup a couple of ODIN components in your scene.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>ODIN uses a singleton to manage lifetime of ODIN your game. <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
uses <code>DontDestroyOnLoad</code> to survive
scene changes. Best place to put the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
is in one of your starting game scenes like &ldquo;Loading&rdquo;
or &ldquo;Main Menu&rdquo;.</p>
</div>
</div>

<h3 id="using-prefabs">Using Prefabs</h3>
<p>In <code>Packages/4Players ODIN/Runtime</code> you find the <code>OdinManager</code> prefab. Drag &amp; Drop that into your scene.</p>
<p>We also provide a couple of prefab variants, depending on your use-case. After installing the Unity SDK package you should also <a href="/odin/sdk/unity/#importing-samples">install
the samples</a>.</p>
<p>You&rsquo;ll find the samples in the <code>/Samples/4Players ODIN/__VERSION__/Examples</code> folder in your Assets. We have created a couple
of <code>Odin Manager</code> prefabs for different use-cases like 3D Audio. Drag them into your scene.</p>
<h3 id="create-odin-manager-manually">Create ODIN Manager manually</h3>
<p>If you do not want to use our prefabs, you can also create an Odin Manager yourself. Follow these steps:</p>
<ul>
<li>Create an empty <em>Game Object</em></li>
<li><em>Optional</em>: Add the <span class="external-reference">Odin Banner <a href="/odin/sdk/unity/1.6.6/manual/odinbanner/"><i class="fas fa-external-link-alt"></i></a></span>
 component which will show a nice banner in your editor window that allows you to
easily identify the ODIN Manager if you have a larger scene. And more importantly it looks cool ;-).</li>
<li>Add the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
<li>Add the <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
<li>Add the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component to the game object.</li>
</ul>
<h3 id="the-odin-manager">The ODIN Manager</h3>
<p>After you have dropped one of our prefabs into your scene or created the ODIN Manager Game Object yourself, you should see
this in the Unity Inspector:</p>
<figure style="max-width: 322px"><a href="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_unity_inspector_odin_handler_collapsed.jpg" width="322"/></a>
</figure>
<p>The ODIN Manager should be used for setting up ODIN in your game (i.e. sample rates or which microphone should be used)
and it will also handle all the heavy lifting:</p>
<ul>
<li>Generating access tokens so that players can connect to our ODIN servers</li>
<li>Managing ODIN events and exposing them in your project</li>
<li>Initialization of audio pipelines</li>
<li>Capture audio input from microphones and pushing audio data to ODIN runtime</li>
</ul>
<p>The ODIN Manager typically consists of three parts:</p>
<ul>
<li>The <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 component for basic ODIN settings</li>
<li>The <span class="external-reference">Odin Handler <a href="/odin/sdk/unity/1.6.6/manual/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 component that does event handling and allows you to connect callbacks</li>
<li>The <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>
 component that captures audio input</li>
</ul>
<p>It&rsquo;s not required to put all these components into one component, for example you can put the <span class="external-reference">Microphone Reader <a href="/odin/sdk/unity/1.6.6/manual/microphonereader/"><i class="fas fa-external-link-alt"></i></a></span>

component on another game object if you like but it&rsquo;s typically easier if everything is in one place.</p>
<p>Let&rsquo;s start digging through the inspector properties available in the <span class="external-reference">Odin Editor Config <a href="/odin/sdk/unity/1.6.6/manual/odineditorconfig/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3601,href:"https://www.4players.io/odin/sdk/unity/",title:"Unity SDK",section:"ODIN Documentation",description:"Enhance your game or XR experience with 4Players ODIN, an easy-to-use Unity SDK for immersive 3D voice chat. Quickly integrate our solution with drag & drop functionality, and start customizing for your unique needs today! Supports Unity 2019.4+.",content:`<p><img src="/images/odin/odin_unity_editor.jpg" alt="4Players ODIN"></p>
<p>Our Unity SDK offers a quick &ldquo;go to market&rdquo; solution for immersive 3D voice chat that you can just &ldquo;drag &amp; drop&rdquo; into
your game or XR experience. ODIN is deeply integrated into Unity and handles all communication with servers and
provides easy to use delegates and events that allows you to customize the experience very easily to your own needs.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    <div class="w-100">4Players ODIN supports Unity 2019.4 or any later version. </div>
  
</div>

<h2 id="source-code">Source Code</h2>
<p>You can find the full source code to our Unity SDK in our public GitHub repository:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity">https://github.com/4Players/odin-sdk-unity</a></p>
<p>If you encounter any bugs or issues, please let us know in the <a href="https://github.com/4Players/odin-sdk-unity/issues">GitHub Issues</a> area or refer to the <a href="/odin/support/">Support</a> page to contact us directly.</p>
<h2 id="getting-started">Getting Started</h2>
<p>If you want to learn more about 4Players ODIN and how it fits into your game or XR experience then follow the
<a href="/odin/introduction/">Introduction</a>. We have compiled a couple of
<a href="/odin/introduction/concepts/">use-cases</a> for different types of games that should get you started
quickly.</p>
<p>Follow our <a href="/odin/guides/unity/getting-started-unity/">Getting Started guide</a> and implement ODIN
into an empty project in less than 20 minutes and learn about the basic concepts. Implementing ODIN into your
multiplayer project is very easy too. Check out our <a href="/odin/guides/unity/unity-mirror/">Multiplayer Guide</a>
that will guide you step by step building a very easy multiplayer game from scratch with 3D voice chat support
in under an hour.</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="installing-the-sdk">Installing the SDK</h2>
<p>Please follow these steps to install our SDK into your Unity project:</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="importing-samples">Importing Samples</h2>
<p>We ship a set of samples with the Unity SDK. To Import them into your project, open the <strong>Package Manager</strong> and hit import on the example you want to try.</p>
<figure><img src="/images/odin/unity_import.png"
         alt="Importing samples from the Unity package"/><figcaption>
            <p>Importing samples from the Unity package</p>
        </figcaption>
</figure>
<dl>
<dt>Minimal Example</dt>
<dd>A very basic client for custom scripting to interact with 4Players ODIN.</dd>
<dt>Simple Room Join Example</dt>
<dd>A very basic client to automatically join a specified room for testing.</dd>
<dt>Push-to-Talk Example</dt>
<dd>Provides the same functionality as the simple room join, but with PTT support.</dd>
<dt>Audio 3D Example</dt>
<dd>Showcase for <a href="classes/#odinclient-type">OdinClient</a> Unity AudioSource handing with positional audio.</dd>
</dl>
<h2 id="manual">Manual</h2>
<p>Implementing ODIN into your game only requires you to add and configure 3 components. We have created a <a href="/odin/sdk/unity/manual/">manual</a>
to show you how to use them and which settings are available and how to use them.</p>
<h2 id="unity-sdk-api-reference">Unity SDK API Reference</h2>
<p>Check out our API Reference guide with the classes you might work with while implementing ODIN into your Unity
application. We have compiled many code snippets and examples to get you started quickly. Head over to our <a href="/odin/sdk/unity/classes/">API
Reference</a> to learn more about the features and possibilities the API has
to offer.</p>
`}),e.add({id:3602,href:"https://www.4players.io/odin/sdk/unity/1.1.0/",title:"Unity SDK v1.1.0",section:"ODIN Documentation",description:"Unity support for 4Players ODIN",content:`<p><img src="/images/odin/odin_unity_editor.jpg" alt="4Players ODIN"></p>
<p>Our Unity SDK offers a quick &ldquo;go to market&rdquo; solution for immersive 3D voice chat that you can just &ldquo;drag &amp; drop&rdquo; into
your game or XR experience. ODIN is deeply integrated into Unity and handles all communication with servers and
provides easy to use delegates and events that allows you to customize the experience very easily to your own needs.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    <div class="w-100">4Players ODIN supports Unity 2019.4 or any later version. </div>
  
</div>

<h2 id="source-code">Source Code</h2>
<p>You can find the full source code to our Unity SDK in our public GitHub repository:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity">https://github.com/4Players/odin-sdk-unity</a></p>
<p>If you encounter any bugs or issues, please let us know in the <a href="https://github.com/4Players/odin-sdk-unity/issues">GitHub Issues</a> area or refer to the <a href="/odin/support/">Support</a> page to contact us directly.</p>
<h2 id="getting-started">Getting Started</h2>
<p>If you want to learn more about 4Players ODIN and how it fits into your game or XR experience then follow the
<a href="/odin/introduction/">Introduction</a>. We have compiled a couple of
<a href="/odin/introduction/concepts/">use-cases</a> for different types of games that should get you started
quickly.</p>
<p>Follow our <a href="/odin/guides/unity/getting-started-unity/">Getting Started guide</a> and implement ODIN
into an empty project in less than 20 minutes and learn about the basic concepts. Implementing ODIN into your
multiplayer project is very easy too. Check out our <a href="/odin/guides/unity/unity-mirror/">Multiplayer Guide</a>
that will guide you step by step building a very easy multiplayer game from scratch with 3D voice chat support
in under an hour.</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="installing-the-sdk">Installing the SDK</h2>
<p>Please follow these steps to install our SDK into your Unity project:</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="importing-samples">Importing Samples</h2>
<p>We ship a set of samples with the Unity SDK. To Import them into your project, open the <strong>Package Manager</strong> and hit import on the example you want to try.</p>
<figure><img src="/images/odin/unity_import.png"
         alt="Importing samples from the Unity package"/><figcaption>
            <p>Importing samples from the Unity package</p>
        </figcaption>
</figure>
<dl>
<dt>Minimal Example</dt>
<dd>A very basic client for custom scripting to interact with 4Players ODIN.</dd>
<dt>Simple Room Join Example</dt>
<dd>A very basic client to automatically join a specified room for testing.</dd>
<dt>Push-to-Talk Example</dt>
<dd>Provides the same functionality as the simple room join, but with PTT support.</dd>
<dt>Audio 3D Example</dt>
<dd>Showcase for <a href="classes/#odinclient-type">OdinClient</a> Unity AudioSource handing with positional audio.</dd>
</dl>
<h2 id="manual">Manual</h2>
<p>Implementing ODIN into your game only requires you to add and configure 3 components. We have created a <a href="/odin/sdk/unity/manual/">manual</a>
to show you how to use them and which settings are available and how to use them.</p>
<h2 id="unity-sdk-api-reference">Unity SDK API Reference</h2>
<p>Check out our API Reference guide with the classes you might work with while implementing ODIN into your Unity
application. We have compiled many code snippets and examples to get you started quickly. Head over to our <a href="/odin/sdk/unity/1.1.0/classes/">API
Reference</a> to learn more about the features and possibilities the API has
to offer.</p>
`}),e.add({id:3603,href:"https://www.4players.io/odin/sdk/unity/1.5.8/",title:"Unity SDK v1.5.8",section:"ODIN Documentation",description:"ODIN Voice Chat SDK for Unity v1.5.8. Add 3D voice chat to your Unity game or XR experience in no-time.",content:`<p><img src="/images/odin/odin_unity_editor.jpg" alt="4Players ODIN"></p>
<p>Our Unity SDK offers a quick &ldquo;go to market&rdquo; solution for immersive 3D voice chat that you can just &ldquo;drag &amp; drop&rdquo; into
your game or XR experience. ODIN is deeply integrated into Unity and handles all communication with servers and
provides easy to use delegates and events that allows you to customize the experience very easily to your own needs.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    <div class="w-100">4Players ODIN supports Unity 2019.4 or any later version. </div>
  
</div>

<h2 id="source-code">Source Code</h2>
<p>You can find the full source code to our Unity SDK in our public GitHub repository:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity">https://github.com/4Players/odin-sdk-unity</a></p>
<p>If you encounter any bugs or issues, please let us know in the <a href="https://github.com/4Players/odin-sdk-unity/issues">GitHub Issues</a> area or refer to the <a href="/odin/support/">Support</a> page to contact us directly.</p>
<h2 id="getting-started">Getting Started</h2>
<p>If you want to learn more about 4Players ODIN and how it fits into your game or XR experience then follow the
<a href="/odin/introduction/">Introduction</a>. We have compiled a couple of
<a href="/odin/introduction/concepts/">use-cases</a> for different types of games that should get you started
quickly.</p>
<p>Follow our <a href="/odin/guides/unity/getting-started-unity/">Getting Started guide</a> and implement ODIN
into an empty project in less than 20 minutes and learn about the basic concepts. Implementing ODIN into your
multiplayer project is very easy too. Check out our <a href="/odin/guides/unity/unity-mirror/">Multiplayer Guide</a>
that will guide you step by step building a very easy multiplayer game from scratch with 3D voice chat support
in under an hour.</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="installing-the-sdk">Installing the SDK</h2>
<p>Please follow these steps to install our SDK into your Unity project:</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="importing-samples">Importing Samples</h2>
<p>We ship a set of samples with the Unity SDK. To Import them into your project, open the <strong>Package Manager</strong> and hit import on the example you want to try.</p>
<figure><img src="/images/odin/unity_import.png"
         alt="Importing samples from the Unity package"/><figcaption>
            <p>Importing samples from the Unity package</p>
        </figcaption>
</figure>
<dl>
<dt>Minimal Example</dt>
<dd>A very basic client for custom scripting to interact with 4Players ODIN.</dd>
<dt>Simple Room Join Example</dt>
<dd>A very basic client to automatically join a specified room for testing.</dd>
<dt>Push-to-Talk Example</dt>
<dd>Provides the same functionality as the simple room join, but with PTT support.</dd>
<dt>Audio 3D Example</dt>
<dd>Showcase for <a href="classes/#odinclient-type">OdinClient</a> Unity AudioSource handing with positional audio.</dd>
</dl>
<h2 id="manual">Manual</h2>
<p>Implementing ODIN into your game only requires you to add and configure 3 components. We have created a <a href="/odin/sdk/unity/manual/">manual</a>
to show you how to use them and which settings are available and how to use them.</p>
<h2 id="unity-sdk-api-reference">Unity SDK API Reference</h2>
<p>Check out our API Reference guide with the classes you might work with while implementing ODIN into your Unity
application. We have compiled many code snippets and examples to get you started quickly. Head over to our <a href="/odin/sdk/unity/1.5.8/classes/">API
Reference</a> to learn more about the features and possibilities the API has
to offer.</p>
`}),e.add({id:3604,href:"https://www.4players.io/odin/sdk/unity/1.6.0/",title:"Unity SDK v1.6.0",section:"ODIN Documentation",description:"ODIN Voice Chat SDK for Unity v1.6.0. Add 3D voice chat to your Unity game or XR experience in no-time.",content:`<p><img src="/images/odin/odin_unity_editor.jpg" alt="4Players ODIN"></p>
<p>Our Unity SDK offers a quick &ldquo;go to market&rdquo; solution for immersive 3D voice chat that you can just &ldquo;drag &amp; drop&rdquo; into
your game or XR experience. ODIN is deeply integrated into Unity and handles all communication with servers and
provides easy to use delegates and events that allows you to customize the experience very easily to your own needs.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    <div class="w-100">4Players ODIN supports Unity 2019.4 or any later version. </div>
  
</div>

<h2 id="source-code">Source Code</h2>
<p>You can find the full source code to our Unity SDK in our public GitHub repository:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity">https://github.com/4Players/odin-sdk-unity</a></p>
<p>If you encounter any bugs or issues, please let us know in the <a href="https://github.com/4Players/odin-sdk-unity/issues">GitHub Issues</a> area or refer to the <a href="/odin/support/">Support</a> page to contact us directly.</p>
<h2 id="getting-started">Getting Started</h2>
<p>If you want to learn more about 4Players ODIN and how it fits into your game or XR experience then follow the
<a href="/odin/introduction/">Introduction</a>. We have compiled a couple of
<a href="/odin/introduction/concepts/">use-cases</a> for different types of games that should get you started
quickly.</p>
<p>Follow our <a href="/odin/guides/unity/getting-started-unity/">Getting Started guide</a> and implement ODIN
into an empty project in less than 20 minutes and learn about the basic concepts. Implementing ODIN into your
multiplayer project is very easy too. Check out our <a href="/odin/guides/unity/unity-mirror/">Multiplayer Guide</a>
that will guide you step by step building a very easy multiplayer game from scratch with 3D voice chat support
in under an hour.</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="installing-the-sdk">Installing the SDK</h2>
<p>Please follow these steps to install our SDK into your Unity project:</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="importing-samples">Importing Samples</h2>
<p>We ship a set of samples with the Unity SDK. To Import them into your project, open the <strong>Package Manager</strong> and hit import on the example you want to try.</p>
<figure><img src="/images/odin/unity_import.png"
         alt="Importing samples from the Unity package"/><figcaption>
            <p>Importing samples from the Unity package</p>
        </figcaption>
</figure>
<dl>
<dt>Minimal Example</dt>
<dd>A very basic client for custom scripting to interact with 4Players ODIN.</dd>
<dt>Simple Room Join Example</dt>
<dd>A very basic client to automatically join a specified room for testing.</dd>
<dt>Push-to-Talk Example</dt>
<dd>Provides the same functionality as the simple room join, but with PTT support.</dd>
<dt>Audio 3D Example</dt>
<dd>Showcase for <a href="classes/#odinclient-type">OdinClient</a> Unity AudioSource handing with positional audio.</dd>
</dl>
<h2 id="manual">Manual</h2>
<p>Implementing ODIN into your game only requires you to add and configure 3 components. We have created a <a href="/odin/sdk/unity/manual/">manual</a>
to show you how to use them and which settings are available and how to use them.</p>
<h2 id="unity-sdk-api-reference">Unity SDK API Reference</h2>
<p>Check out our API Reference guide with the classes you might work with while implementing ODIN into your Unity
application. We have compiled many code snippets and examples to get you started quickly. Head over to our <a href="/odin/sdk/unity/1.6.0/classes/">API
Reference</a> to learn more about the features and possibilities the API has
to offer.</p>
`}),e.add({id:3605,href:"https://www.4players.io/odin/sdk/unity/1.6.6/",title:"Unity SDK v1.6.6",section:"ODIN Documentation",description:"ODIN Voice Chat SDK for Unity v1.6.6. Add 3D voice chat to your Unity game or XR experience in no-time.",content:`<p><img src="/images/odin/odin_unity_editor.jpg" alt="4Players ODIN"></p>
<p>Our Unity SDK offers a quick &ldquo;go to market&rdquo; solution for immersive 3D voice chat that you can just &ldquo;drag &amp; drop&rdquo; into
your game or XR experience. ODIN is deeply integrated into Unity and handles all communication with servers and
provides easy to use delegates and events that allows you to customize the experience very easily to your own needs.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    <div class="w-100">4Players ODIN supports Unity 2019.4 or any later version. </div>
  
</div>

<h2 id="source-code">Source Code</h2>
<p>You can find the full source code to our Unity SDK in our public GitHub repository:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity">https://github.com/4Players/odin-sdk-unity</a></p>
<p>If you encounter any bugs or issues, please let us know in the <a href="https://github.com/4Players/odin-sdk-unity/issues">GitHub Issues</a> area or refer to the <a href="/odin/support/">Support</a> page to contact us directly.</p>
<h2 id="getting-started">Getting Started</h2>
<p>If you want to learn more about 4Players ODIN and how it fits into your game or XR experience then follow the
<a href="/odin/introduction/">Introduction</a>. We have compiled a couple of
<a href="/odin/introduction/concepts/">use-cases</a> for different types of games that should get you started
quickly.</p>
<p>Follow our <a href="/odin/guides/unity/getting-started-unity/">Getting Started guide</a> and implement ODIN
into an empty project in less than 20 minutes and learn about the basic concepts. Implementing ODIN into your
multiplayer project is very easy too. Check out our <a href="/odin/guides/unity/unity-mirror/">Multiplayer Guide</a>
that will guide you step by step building a very easy multiplayer game from scratch with 3D voice chat support
in under an hour.</p>
<p><a href='/odin/guides/unity/getting-started-unity/' class="btn btn-primary">Begin Getting Started Guide</a></p>
<h2 id="installing-the-sdk">Installing the SDK</h2>
<p>Please follow these steps to install our SDK into your Unity project:</p>

<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<h2 id="importing-samples">Importing Samples</h2>
<p>We ship a set of samples with the Unity SDK. To Import them into your project, open the <strong>Package Manager</strong> and hit import on the example you want to try.</p>
<figure><img src="/images/odin/unity_import.png"
         alt="Importing samples from the Unity package"/><figcaption>
            <p>Importing samples from the Unity package</p>
        </figcaption>
</figure>
<dl>
<dt>Minimal Example</dt>
<dd>A very basic client for custom scripting to interact with 4Players ODIN.</dd>
<dt>Simple Room Join Example</dt>
<dd>A very basic client to automatically join a specified room for testing.</dd>
<dt>Push-to-Talk Example</dt>
<dd>Provides the same functionality as the simple room join, but with PTT support.</dd>
<dt>Audio 3D Example</dt>
<dd>Showcase for <a href="classes/#odinclient-type">OdinClient</a> Unity AudioSource handing with positional audio.</dd>
</dl>
<h2 id="manual">Manual</h2>
<p>Implementing ODIN into your game only requires you to add and configure 3 components. We have created a <a href="/odin/sdk/unity/1.6.6/manual/">manual</a>
to show you how to use them and which settings are available and how to use them.</p>
<h2 id="unity-sdk-api-reference">Unity SDK API Reference</h2>
<p>Check out our API Reference guide with the classes you might work with while implementing ODIN into your Unity
application. We have compiled many code snippets and examples to get you started quickly. Head over to our <a href="/odin/sdk/unity/1.6.6/classes/">API
Reference</a> to learn more about the features and possibilities the API has
to offer.</p>
`}),e.add({id:3607,href:"https://www.4players.io/odin/sdk/unreal/",title:"Unreal Engine Plugin",section:"ODIN Documentation",description:"Integrate immersive spatial 3D voice chat with 4Players ODIN SDK for Unreal Engine 4 and 5. Enjoy full blueprint support, easy installation, and a sample project for seamless integration into your UE4 and UE5 projects. Compatible with UE 4.26 and later versions.",content:`<p><img src="/images/odin/unreal_editor.png" alt="4Players ODIN"></p>
<p>The Unreal Engine plugin is based on our <a href="/odin/sdk/c/">C/C++ SDK</a> and provides full blueprint support for UE4 and UE5.
The latest version can be checked out from our Github repository:</p>
<p>

<a href='https://github.com/4Players/odin-sdk-unreal' target='' class="btn btn-primary">Download Unreal Engine SDK</a>





<a href='https://www.fab.com/listings/79d0a208-78e8-4bd7-9214-36f6cc190da2' target='' class="btn btn-primary">Get from Fab (former Unreal Marketplace)</a>


</p>
<h2 id="sample-project">Sample project</h2>
<p>We have compiled a sample project that you can use as a reference to understand how to wire up the blueprints. As a
quick tip: Select and copy our blueprints and paste them in into your own project!</p>


<a href='https://github.com/4Players/odin-example-unreal' target='' class="btn btn-primary">Download Unreal Sample Project</a>



<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Unreal Engine 4.26 or any later version (including 5.x)</li>
</ul>
<p>Internally, the plugin is built and tested with Unreal Engine 4.27.</p>
<h2 id="installing-the-plugin">Installing the plugin</h2>
<p>You can install the plugin manually by downloading the source code from our Github repository or you can download it
through the Unreal Marketplace.</p>
<h3 id="manual-installation">Manual installation</h3>
<p>To check out the SDK and use it as a project plugin, clone the git repo into a working directory of your choice.</p>
<p>This repository uses <a href="https://git-lfs.github.com">LFS</a> (large file storage) to manage pre-compiled binaries. Note that a standard clone of the repository might only retrieve the metadata about these files managed with LFS. In order to retrieve the actual data with LFS, please follow these steps:</p>
<ol>
<li>
<p>Clone the repository:<br>
<code>git clone https://github.com/4Players/odin-sdk-unreal.git</code></p>
</li>
<li>
<p>Cache the actual LFS data on your local machine:<br>
<code>git lfs fetch</code></p>
</li>
<li>
<p>Replaces the metadata in the binary files with their actual contents:<br>
<code>git lfs checkout</code></p>
</li>
</ol>
<p>Next, unzip the files into a new <strong>Odin</strong> sub-folder under your projects <strong>Plugins</strong> folder. It should end up looking like <code>/MyProject/Plugins/Odin/</code>.</p>
<p>If you&rsquo;re new to plugins in UE4, you can find lots of information <a href="https://unrealcommunity.wiki/an-introduction-to-ue4-plugins-v1v672wq">right here</a>.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>When the Odin plugin is installed directly into a Blueprint Only Unreal Engine project, you may encounter an error when trying to run packaged standalone builds. This issue occurs because Unreal Engine processes Blueprint Only projects differently, and fails to correctly package C++ plugins that are installed directly within the project.</p>
<p>To resolve the error, you can either install the Plugin in the Engine&rsquo;s installation directory (i.e. by using the Unreal Marketplace version), or convert your Blueprint Only Project into a C++ project. If you need assistance performing this step, <a href="/odin/faq/unreal/build-crashes-on-startup-with-blueprint-only-project/">please take a look at our guidelines for addressing this issue.</a></p>
</div>
</div>

<h3 id="fab-unreal-marketplace">Fab (Unreal Marketplace)</h3>
<p>This is the most comfortable solution as you get notified of new versions and installation is as easy as clicking a
button.</p>


<a href='https://www.fab.com/listings/79d0a208-78e8-4bd7-9214-36f6cc190da2' target='' class="btn btn-primary">Get ODIN from Fab</a>



<h2 id="using-the-plugin">Using the plugin</h2>
<p>Please make sure to read the <a href="/odin/introduction/">introduction</a> to have a basic understanding of
how the plugin works. We have compiled a couple of <a href="/odin/introduction/concepts/">use-cases</a> for
different types of games that should get you started quickly.</p>
<h2 id="manual">Manual</h2>
<p>Implementing ODIN into your game can be done quickly and easily. We have created a <a href="/odin/sdk/unreal/manual/">manual</a> to show you how to use them and which settings are available and how to use them.</p>
<h2 id="blueprint-reference">Blueprint Reference</h2>
<p>We have an extensive blueprint reference of all our nodes and functions. Check it out <a href="/odin/sdk/unreal/blueprint-reference/">here</a>.</p>
`}),e.add({id:3608,href:"https://www.4players.io/fleet/sdk/nodejs/",title:"NodeJS",section:"ODIN Fleet Documentation",description:"Integrate ODIN Fleet into your CI/CD workflows and automate game server deployment and management with our NodeJS SDK.",content:`<p>This is the Node.js SDK designed to interact with the Fleet REST API, enabling developers to manage game servers efficiently. This SDK leverages the robust and scalable solutions offered by ODIN Fleet, making it easier to deploy and manage game servers across a global network.</p>
<h2 id="features">Features</h2>
<ul>
<li><strong>Server Management</strong>: Create, configure, deploy, and autoscale game servers.</li>
<li><strong>CI/CD Integration</strong>: Seamlessly integrate into CI/CD pipelines for automated server management.</li>
<li><strong>Cross-Platform Support</strong>: Compatible with various game engines and platforms.</li>
<li><strong>Real-Time Scaling</strong>: Dynamically adjust the number of servers based on demand.</li>
<li><strong>User-Friendly Interface</strong>: Simple API, dashboard, and CLI for easy server management.</li>
<li><strong>Security</strong>: Built-in DDoS protection and GDPR/DSGVO compliance.</li>
</ul>
<h2 id="installation">Installation</h2>
<p>Install the SDK using npm:</p>
<pre><code class="language-bash">npm install @4players/fleet-nodejs
</code></pre>
<h2 id="usage">Usage</h2>
<h3 id="initialization">Initialization</h3>
<p>First, import and initialize the <code>FleetApiClient</code> with your API key:</p>
<pre><code class="language-javascript">const FleetApiClient = require('@4players/fleet-nodejs');

const client = new FleetApiClient(&quot;__YOUR_ACCESS_TOKEN__&quot;);
</code></pre>
<p>In TypeScript, you can import the SDK as follows:</p>
<pre><code class="language-typescript">import { FleetApiClient } from '@4players/fleet-nodejs';
const client = new FleetApiClient(&quot;__YOUR_ACCESS_TOKEN__&quot;);
</code></pre>
<h2 id="dashboard">Dashboard</h2>
<p>Using our dashboard is an easy way of managing your game servers and applications. It&rsquo;s also a good way to see which
items are created by the examples and how they are structured.</p>
<p>You&rsquo;ll find the dashboard at <a href="https://console.4players.io">https://console.4players.io</a>. All you need is a 4Players account
which you can also create on the dashboard.</p>
<h2 id="next-steps">Next Steps</h2>
<p>The following examples demonstrate how to use the FleetApiClient SDK to manage game servers using the Fleet API.</p>
<h3 id="example-deploying-a-minecraft-server">Example: Deploying a Minecraft Server</h3>
<p>Depending on your business model you typically have your own docker image or have server binaries in Steam, but in this case we&rsquo;ll use an existing Minecraft Docker image to deploy a Minecraft server.</p>
<p>Although you can create an App via Script, it&rsquo;s easier to understand and to follow if we create the app in the dashboard as
we need an API key for the script to work, so let&rsquo;s create an app in the dashboard.</p>
<p>Navigate to the dashboard and create a new app. You can name it whatever you want, but for this example we&rsquo;ll name it <code>Minecraft</code>.
Once you have created the App, you&rsquo;ll be routed to the apps dashboard where the App-ID is displayed. You&rsquo;ll need this ID for the script.
Click on the Copy button to copy the App-ID to your clipboard.</p>
<p>Let&rsquo;s start with the initial part of the script:</p>
<pre><code class="language-typescript">import { FleetApiClient } from '@4players/fleet-nodejs';

var appId = __YOUR_APP_ID__;
</code></pre>
<p>Next, click on &ldquo;Settings&rdquo; on the left sidebar and choose &ldquo;API-Keys&rdquo; from the list. You&rsquo;ll see your personal
Access Token. Click the copy icon again and paste it into the script.</p>
<pre><code class="language-typescript">import { FleetApiClient } from '@4players/fleet-nodejs';

// Setup the client
var appId = __YOUR_APP_ID__;
var accessToken = &quot;__YOUR_ACCESS_TOKEN__&quot;;
var client = new FleetApiClient(accessToken);

// Select our app so we don't need to provide the app id for every request
client.selectAppId(appId);
</code></pre>
<p>Now we need to create an image. We&rsquo;ll use the Minecraft image from the Docker Hub. You can find the image <a href="https://hub.docker.com/r/itzg/minecraft-server">here</a>.</p>
<pre><code class="language-typescript">const version = '2024.6.1';

// We need to load the available docker registries to get the id of the default (docker hub) docker registry
let dockerRegistry: DockerRegistry = await client.getDockerRegistries().then((registries) =&gt; {
  return registries.find((registry) =&gt; registry.type === 'default');
});

// Setup the payload for the binary
const payload = {
  name: 'Minecraft',
  version: version,
  type: BinaryType.DockerImage,
  os: OperatingSystem.Linux,
  appId: app.id,
  dockerImage: {
    imageName: \`itzg/minecraft-server:\${version}\`,
    registryId: dockerRegistry.id,
  },
};

// Create the binary structure within ODIN Fleet - this image will later be deployed
let binary = null;
try {
  binary = await client.createBinary(payload);  
} catch (error) {
  console.error('Error creating binary:', error);
  process.exit(0);
}
</code></pre>
<p>Next, we&rsquo;ll need to create a server config. A server config is a blueprint for a server. It defines the image, required resources, persistence, and other settings.
This is a bit more complex and it might be helpful to play around with the dashboard to understand the structure of the server config.</p>
<p>As with most docker images, they are configured via environment variables. Which environment variables are available
is defined in the Dockerfile. In this case, we&rsquo;ll set the EULA to true, the server name to &ldquo;ODIN Fleet&rdquo;, the MOTD to &ldquo;Welcome to our ODIN Fleet Minecraft Server&rdquo;, the max players to 10, and disable the snooper.</p>
<p>You&rsquo;ll find more info in these variables <a href="https://docker-minecraft-server.readthedocs.io/en/latest/variables/">here</a>.</p>
<pre><code class="language-typescript">let config = null;
try {
  config = await client.createServerConfig({
    name: \`Minecraft Production \${version}\`,
    binaryId: binary.id,  // We'll use the binary we just created
      resources: {          // This defines resources, 1 shared CPU and 2 GB of memory are enough
        limits: {
          cpu: 1,
          memory: 2,
        },
        reservations: {
          cpu: 0,
          memory: 0,
        },
      },
      restartPolicy: {
        condition: RestartPolicyCondition.Any,
      },
      mounts: [
        {
          target: '/data',    // This is where the server stores its data and we want to make sure it's backuped
          readOnly: false,
        },
      ],
      ports: [                // We need to expose the game port and tell the system that it's a TCP port
        {
          name: 'gamePort',
          targetPort: 25565,
          protocols: [Protocol.Tcp],
          publishMode: PublishMode.Ingress,
        },
      ],
      env: [                  // These are the environment variables (EULA is required). You can play around with different values
        {
          key: 'EULA',
          type: EnvironmentVariableType.Static,
          value: 'true',
        },
        {
          key: 'SERVER_NAME',
          type: EnvironmentVariableType.Static,
          value: 'ODIN Fleet',
        },
        {
          key: 'MOTD',
          type: EnvironmentVariableType.Static,
          value: 'Welcome to our ODIN Fleet Minecraft Server',
        },
        {
          key: 'MAX_PLAYERS',
          type: EnvironmentVariableType.Static,
          value: '10',
        },
        {
          key: 'SNOOPER_ENABLED',
          type: EnvironmentVariableType.Static,
          value: 'false',
        },
      ],
    });
} catch (error) {
  console.error('Error creating server config:', error);
  process.exit(0);
}
</code></pre>
<p>Now we can deploy the server. We&rsquo;ll deploy 1 server in this example. We&rsquo;ll use the german region to deploy it.</p>
<pre><code class="language-typescript">// Find first location in Germany
const location = await client.getLocations().then(({data}) =&gt; {
  return data.find((location) =&gt; location.country === 'de');
});

if (!location) {
  throw new Error('Location not found');
  process.exit(0);
}

let deployment = null;
try {
  deployment = await client.createDeployment({
    name: 'Minecraft Production',
    serverConfigId: config.id,
    autoScalerEnabled: false,
    numInstances: 1,
    placement: {
      constraints: {
        country: location.country,
        city: location.city,
      },
    },
  });
} catch (error) {
  console.error('Error creating deployment:', error);
  process.exit(0);
}
</code></pre>
<p>That&rsquo;s it. You should now have a Minecraft server running in the german region. You can now connect to it using the IP address of the server.</p>
<p>Make sure to delete the deployment and the server config if you don&rsquo;t need them anymore. You can also delete the binary if you don&rsquo;t need it anymore.</p>
<p>You&rsquo;ll find a list of deployed servers in the dashboard under &ldquo;Servers&rdquo;.</p>
<h2 id="getting-a-servers-ip-and-port">Getting a servers IP and Port</h2>
<p>When you create a server config you define which ports need to be routed to the internet. In the above server config we created a port definition named &ldquo;Game Port&rdquo; and defining a TCP port at 25565. Our system will find a free port on the maschine and will route that port to the internal port where the gameserver is listening.
To find out which port is used you can get the server details:</p>
<pre><code class="language-typescript">const servers = await client.getServers();
for (let server of servers) {
  // The server.ports map contains all ports that are exposed to the internet named by the port definition name
  var gamePort = server.ports[&quot;Game Port&quot;]?.publishedPort;
  var ip = server.addr;
  
  console.log(\`Server \${server.id} is available at \${ip}:\${gamePort}\`);
}
</code></pre>
<h2 id="development">Development</h2>
<p>We are using OpenAPI to document our APIs and use generators to automatically build client code. However, as these generators have their weaknesses, we create a custom wrapper around the generated code to make it more user-friendly. In this case it&rsquo;s the <code>FleetApiClient</code>. You can update the internal code by running the following command:</p>
<pre><code class="language-bash">npm run generate-api-from-backend
</code></pre>
<p>This will download the current API specs from the backend and generate the client code. Typically some minor changes or additions are then required to <code>FleetApiClient</code>.</p>
<h2 id="open-source">Open-Source</h2>
<p>This SDK is open-source and available on <a href="https://github.com/4Players/fleet-sdk-nodejs">GitHub</a>.</p>
<h2 id="api-documentation">API Documentation</h2>
<p>The full API documentation is available in the OpenAPI specs: <a href="https://fleet.4players.io/docs/">Fleet API Documentation</a>.</p>
<h2 id="support">Support</h2>
<p>For additional support, get in touch on our <a href="https://4np.de/discord">Discord server</a>.</p>
<p><a href="https://www.4players.io/company/contact_us/">Book a meeting</a> or join a live presentation to learn more about ODIN Fleet and how it can help manage your game servers efficiently.</p>
<h2 id="license">License</h2>
<p>The NodeJS SDK is MIT License.</p>
`}),e.add({id:3609,href:"https://www.4players.io/odin/sdk/nodejs/",title:"NodeJS",section:"ODIN Documentation",description:"Revolutionize multiplayer gaming with ODIN NodeJS SDK, enabling AI-driven NPCs to create interactive and engaging environments. Leverage server-side data and audio for real-time voice and data sync, creating next-generation applications in immersive gaming experiences.",content:`<p>We offer ODIN, a high-quality cross-platform immersive voice SDK that includes state-of-the-art noise suppression
technologies.</p>
<p>Our <a href="/odin/sdk/web/">Web SDK</a> includes fallback code for WebRTC and is compatible with most browsers.
While it can also be used in NodeJS, it may not be as performant as our native NodeJS SDK, which is designed for
advanced use cases and bots.</p>
<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon"></div>
  
    
      <div class="w-100"> The NodeJS SDK is currently in <strong>beta</strong>. This means that die API is not final and may change from version to version,
and it may not be ready for large scale production use. If you encounter any issues, please let us know on our
<a href="https://4np.de/discord">Discord server</a>.</div>
    
  
</div>

<p>Although we strive to keep the API as similar as possible between our SDKs, there are some differences. Since wrapping
objects in JavaScript and TypeScript is easier than in C/C++, we only use objects where necessary in our native SDK. For
instance, the WebSDK provides an OdinPeer object that encapsulates various methods and properties. However, for NodeJS
use cases, you usually only need a peerId and mediaId, so we decided not to overcomplicate things. Of course, you can
always create your own wrapper if needed.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The main difference between the two SDKs is that the NodeJS version allows you to access raw audio data from the ODIN
server, which enables you to record or stream audio to the room. While the WebSDK has similar capabilities, it relies on
Web Audio, which is not available in NodeJS. Rather than creating a complex polyfill, we found it easier and faster to
wrap the ODIN native SDK into NodeJS bindings.</p>
</div>
</div>

<p>By providing two separate libraries, we can optimize each one for its respective platform and use cases.</p>
<p>ODIN is our cross-platform immersive voice SDK with best in class quality and noise suppression technologies.</p>
<h2 id="source-code">Source Code</h2>
<p>The NodeJS SDK is developed in C/C++ using Node API and is open source. Check out the source in our public
<a href="https://www.npmjs.com/package/@4players/odin-nodejs?activeTab=code">NPM repository</a>.</p>
<h2 id="installation">Installation</h2>
<p><img src="https://img.shields.io/npm/v/@4players/odin-nodejs.svg" alt="npm">
<img src="https://img.shields.io/npm/l/@4players/odin-nodejs.svg" alt="npm">
<img src="https://img.shields.io/npm/dm/@4players/odin-nodejs.svg" alt="npm"></p>
<p>Install the web SDK via <code>npm</code> in your project like this:</p>
<pre><code class="language-Bash">npm install --save @4players/odin-nodejs
</code></pre>
<h2 id="interoperability">Interoperability</h2>
<p>The ODIN web SDK is fully compatible with our other client SDKs so you can easily communicate between your NodeJS
script and other clients - even Unity or Unreal Engine clients.</p>
<p>However, it&rsquo;s important to understand, that you cannot combine the WebSDK and the NodeJS SDK in the same NodeJS-project,
i.e. you eiter have <code>@4players/odin-nodejs</code> or <code>@4players/odin</code> in your <code>package.json</code> file, but not both.</p>
<h2 id="platform-support">Platform support</h2>
<p>As the ODIN NodeJS SDK is a native module, it requires native binaries to be built for your platform. We currently
provide prebuilt binaries for these platforms:</p>
<ul>
<li>Windows (x64)</li>
<li>macOS (x64 and ARM)</li>
<li>Linux (x64)</li>
</ul>
<p>If you deploy your application to a different platform, <code>npm install</code> will try to build the library from source. This
requires a working C/C++ compiler and the necessary build tools to be installed on your system. You can find more info
on that topic in the <a href="https://github.com/nodejs/node-gyp">node-gyp</a> documentation.</p>
<h2 id="event-handling">Event Handling</h2>
<p>The ODIN server will automatically notify you about relevant updates and the ODIN NodeJS SDK is using the JavaScript
EventTarget API to dispatch custom events based on the <span class="external-reference">OdinEvents <a href="/odin/sdk/nodejs/interfaces/odinevents/"><i class="fas fa-external-link-alt"></i></a></span>
 interface. Use any of the
provided the <span class="external-reference">addEventListener <a href="/odin/sdk/nodejs/classes/odinroom/addeventlistener/"><i class="fas fa-external-link-alt"></i></a></span>
 methods to set up a function that will be called whenever the
specified event is delivered to the target.</p>
<p>These events are available:</p>


<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/audiodatareceived/">AudioDataReceived</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/connectionstatechanged/">ConnectionStateChanged</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/joined/">Joined</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/left/">Left</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/mediaactivity/">MediaActivity</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/mediaadded/">MediaAdded</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/mediaremoved/">MediaRemoved</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/messagereceived/">MessageReceived</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/peerjoined/">PeerJoined</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/peerleft/">PeerLeft</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/peeruserdatachanged/">PeerUserDataChanged</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/nodejs/interfaces/odinevents/roomuserdatachanged/">RoomUserDataChanged</a></li>
</span>
</ul>


Use them like shown in this example:




<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Listening for events
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JavaScript">// Create an odin client instance using our access key and create a room
const odinClient = new OdinClient();
const room = odinClient.createRoom(&quot;__YOUR_ACCESS_KEY__&quot;, roomName, userName);

// Listen on PeerJoined messages and print the user data of the joined peer
room.addEventListener('PeerJoined', (event) =&gt; {
    console.log(&quot;Received PeerJoined event&quot;, event);
    console.log(JSON.parse(new TextDecoder().decode(event.userData)));
});

// Listen on PeerLeft messages and print the user data of the left peer
room.addEventListener('PeerLeft', (event) =&gt; {
    console.log(&quot;Received PeerLeft event&quot;, event);
});
</code></pre>
</div>
</div>

<h2 id="using-media-objects">Using Media objects</h2>
<p>ODIN works with the concept of media objects that are attached to a room. A media is either remote (i.e. connected
to the mic of someone else device) or a local media, which is linked to your own microphone or other input device.</p>
<p>After joining a room, you can create a media (linked to your local input device) and add to the room. After joining
a room, you are just a listener in the room, you don&rsquo;t send anything to it (i.e. your are muted).</p>
<h3 id="receiving-audio-data">Receiving audio data</h3>
<p>Once the script has joined a room it receives events that you add handlers for. If you want to get access to audio
data, you&rsquo;ll need to add an event handler for <span class="external-reference">AudioDataReceived <a href="/odin/sdk/nodejs/interfaces/odinevents/audiodatareceived/"><i class="fas fa-external-link-alt"></i></a></span>
. The <code>data</code> property of the event
contains the audio samples in 16-bit format or 32-bit floats (-1 to 1):</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Receiving audio data
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-TypeScript">// Add an event filter for audio data received events
room.addEventListener('AudioDataReceived', (data) =&gt; {
    // Getting an array of the sample buffer - use for example to visualize audio
    let ui32 = new Float32Array(data.samples32.buffer);
    console.log(ui32);

    let ui16 = new Int16Array(data.samples16.buffer);
    console.log(ui16);
});
</code></pre>
</div>
</div>

<h3 id="sending-audio-data">Sending audio data</h3>
<p>If you want to your bot to send audio into the room (i.e. text to speech or music and other sounds, you need to
attach a media to that room:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Creating a media object
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JavaScript">// Send music to the room
const sendMusic = async (media) =&gt; {
    // Prepare our MP3 decoder and load the sample file
    const audioBuffer = await decode(fs.readFileSync('./santa.mp3'));

    // ODIN requires 20ms chunks of audio data (i.e. 50 times a second). We need to calculate the chunk length based on 
    // the sample rate of the file by dividing it by 50. If sample rate is 48kHz, we need to send 960 samples per chunk.
    const chunkLength = audioBuffer.sampleRate/50;

    // Create a stream that will match the settings of the file
    const audioBufferStream = new AudioBufferStream({
        channels: audioBuffer.numberOfChannels,
        sampleRate: audioBuffer.sampleRate,
        float: true,
        bitDepth: 32,
        chunkLength: chunkLength
    });

    // Create a queue to store the chunks of audio data
    const queue = [];

    // Whenever the stream has data, add it to the queue
    audioBufferStream.on('data', (data) =&gt; {
        const floats = new Float32Array(new Uint8Array(data).buffer);
        queue.push(floats);
    });

    // Start a timer to send audio data at regular intervals
    const interval = setInterval(() =&gt; {
        if (queue.length &gt; 0) {
            const chunk = queue.shift();
            media.sendAudioData(chunk);
        } else {
            // If there's no more data to send, stop the timer
            clearInterval(interval);
            audioBufferStream.end();
            console.log(&quot;Audio finished&quot;);
        }
    }, 20);  // Send a chunk every 20ms

    audioBufferStream.write(audioBuffer);
}

// Create a media stream in the room - it will return an OdinMedia instance that we can use to send data to ODIN
const media = room.createAudioStream(48000, 2);

// Start the stream and send the music to ODIN
sendMusic(media).then(() =&gt; {
    console.log(&quot;Finished sending song&quot;);
});
</code></pre>
</div>
</div>

<h2 id="examples">Examples</h2>
<p>We have prepared a couple of examples to get you started with the ODIN NodeJS SDK. You can find them in our SDK in the
<code>tests</code> folder. After installing the NodeJS SDK check out this folder: <code>node_modules/@4players/odin-nodejs/tests</code>.
You&rsquo;ll find one example on how to record audio and sending them to OpenAIs whisper module for transcription and
another sample that shows you how to send data into the channel. Examples are also provided for sending text
messages when users join the room.</p>
`}),e.add({id:3611,href:"https://www.4players.io/fleet/sdk/restapi/",title:"REST-API",section:"ODIN Fleet Documentation",description:"Learn more about our REST-API and how to interact with it",content:`<p>The ODIN Fleet REST-API allows you to interact with the ODIN Fleet platform programmatically. You can use the API to automate game server deployment and management, integrate ODIN Fleet into your CI/CD workflows, and more.</p>
<p>We have published the OpenAPI specification for the ODIN Fleet REST-API, which you can use to generate SDKs for various programming languages. We provide an SDK for Node.js, which you can use to interact with the ODIN Fleet REST-API.</p>
<h2 id="documentation">Documentation</h2>
<p>We offer a nice interface to learn more about data structures and available routes.</p>
<p><a href='https://fleet.4players.io/docs/api#/' target='' class="btn btn-primary">View Documentation</a></p>
<h2 id="authentication">Authentication</h2>
<p>In order to use the ODIN Fleet REST-API, you need to authenticate your requests. You can do this by providing an API key in the <code>Authorization</code> header of your HTTP requests.</p>
<pre><code>Authorization: Bearer YOUR_ACCESS_TOKEN
</code></pre>
<p>Sign in to the ODIN Fleet dashboard and follow these simple steps to obtain your access token:</p>
<ol>
<li>Sign in to our <a href="https://console.4players.io">dashboard</a>.</li>
<li>Choose an app or create one</li>
<li>Go to the settings of the app</li>
<li>Click on the API-Key section</li>
<li>Copy the access token and use it in your requests</li>
</ol>
<h2 id="open-api-generator">Open API Generator</h2>
<p>We provide an OpenAPI specification file that you can use to generate an SDK for your preferred programming language. The generated SDK will allow you to interact with the ODIN Fleet REST-API programmatically.</p>
<p>However, there are a few caveats to keep in mind when generating an SDK from the OpenAPI specification file:</p>
<ul>
<li>Bearer Authorization does not work (although it is defined in the OpenAPI specification file and the generator should implement it)</li>
<li>The generated SDK may not be easy to use as you may need to create request objects all the time (instead of just using function parameters)</li>
</ul>
<p>It depends on the generator, but we experienced these issues with quite a lot of generated code.</p>
<p>To circumvent these issues, we provide an SDK for Node.js that is specifically designed to interact with the ODIN Fleet REST-API and will provide a C# SDK soon. We typically create one entry class that sets up the correct settings and wraps the API calls in a more user-friendly way.</p>
<p>Here is an example of the <a href="/fleet/sdk/nodejs/">Node.js SDK</a> that we provide (left out comments and docs to keep it short):</p>
<pre><code class="language-typescript">export class FleetApiClient {

  private _client: FleetApi;

  constructor(accessToken: string, protected configuration = DefaultConfig) {

    // This needs to be set as the OpenAPI Generator doesn't support the Authorization header
    var headers = {
      Authorization: \`Bearer \${accessToken}\`,
    }

    // Setup the configuration
    var configParams = {
      basePath: configuration.basePath,
      headers: {...configuration.headers, ...headers},
      fetchApi: configuration.fetchApi,
      middleware: configuration.middleware,
      username: configuration.username,
      password: configuration.password,
      apiKey: configuration.apiKey,
      accessToken: configuration.accessToken,
      credentials: configuration.credentials,
    } as ConfigurationParameters;

    var config = new Configuration(configParams);

    this._client = new FleetApi(config);
  }

  get client(): FleetApi {
    return this._client;
  }

  // Wrap functions of the underlying SDK but in a more friendly way

  async createApp(name: string): Promise&lt;App&gt; {
    return this.client.createApp({createAppRequest: {name}});
  }

  async getApps(): Promise&lt;Array&lt;App&gt;&gt; {
    return this.client.getApps();
  }
  
  //....
}
</code></pre>
`}),e.add({id:3612,href:"https://www.4players.io/odin/sdk/swift/",title:"Swift",section:"ODIN Documentation",description:"Integrate 4Players ODIN's Swift SDK for real-time VoIP chat in your macOS and iOS apps and multiplayer games. Supporting iOS 9.0+/macOS 10.15+, Xcode 10.2+, and Swift 5.0+. Access open-source samples and comprehensive documentation for a seamless experience.",content:`<p>OdinKit is a Swift package providing an object-oriented wrapper for the <a href="https://github.com/4Players/odin-sdk">ODIN</a>
native client library, which enables developers to integrate real-time VoIP chat technology into multiplayer games
and apps on macOS and iOS.</p>
<h2 id="requirements">Requirements</h2>
<ul>
<li>iOS 9.0+ / macOS 10.15+</li>
<li>Xcode 10.2+</li>
<li>Swift 5.0+</li>
</ul>
<h2 id="source-code">Source Code</h2>
<p>The Swift SDK is based on our <a href="/odin/sdk/c/">C Core API</a> and is open source. Check
out the source of this Swift wrapper in our public <a href="https://github.com/4Players/odin-wrapper-swift">Github repository</a>.</p>
<h2 id="sample">Sample</h2>
<p>Check out our SwiftUI sample built with OdinKit. It&rsquo;s open source and should get you started quickly: <a href="https://github.com/4Players/odin-example-swiftui">SwiftUI Sample
at Github</a>.</p>
<h2 id="documentation">Documentation</h2>
<p>We provide a <code>doccarchive</code> file that you can import into Xcode to get access to the documentation in Xcodes
documentation browser. Just download the file and double click to install:
<a href="/binaries/OdinKit.doccarchive.zip">OdinKit.doccarchive</a></p>
<h2 id="installation">Installation</h2>
<p>The ODIN SDK is provided as written in Swift and bundled in an XC Framework. Follow these steps to add it to your
application.</p>
<h3 id="1-download-and-extract">1. Download and extract</h3>
<p>Download the Framework and extract the ZIP file somewhere on your hard drive.</p>
<p><a href='https://github.com/4Players/odin-wrapper-swift/releases' target='' class="btn btn-primary">Download Swift SDK</a></p>
<h3 id="2-add-the-package-to-your-workspace">2. Add the package to your workspace</h3>
<p>In XCode, choose <strong>Add Packages&hellip;</strong> in the <strong>File</strong> menu. A new window appears.</p>
<figure style="max-width: 500px"><a href="/images/odin/odin_swift_add_package.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_swift_add_package.jpg"
         alt="Adding a Swift package" width="500"/></a><figcaption>
            <p>Adding a Swift package</p>
        </figcaption>
</figure>
<p>Click on <strong>Add Local</strong> and you&rsquo;ll be able to choose a framework located on your disk. It&rsquo;s a standard macOS file
selection dialog. Navigate to the folder you extracted (i.e. OdinKit) and click on &ldquo;Add Package&rdquo;;</p>
<figure style="max-width: 400px"><a href="/images/odin/odin_swift_choose_package.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_swift_choose_package.jpg"
         alt="Choose local extracted package" width="400"/></a><figcaption>
            <p>Choose local extracted package</p>
        </figcaption>
</figure>
<p>That&rsquo;s it. In your project navigator in XCode you should see <strong>OdinKit</strong> show up under the <strong>Packages</strong> tree item.</p>
<h3 id="3-build-settings">3. Build settings</h3>
<p>Finally, we need to link the OdinKit package. In XCode, in the project navigator, select your project file and
choose the correct target. Navigate to the <strong>General</strong> tab and scroll down to <strong>Framework, Libraries and Embedded
Content</strong>.</p>
<figure style="max-width: 400px"><a href="/images/odin/odin_swift_add_framework.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_swift_add_framework.jpg"
         alt="Choosing the OdinKit framework folder previously extracted" width="400"/></a><figcaption>
            <p>Choosing the OdinKit framework folder previously extracted</p>
        </figcaption>
</figure>
<p>Click on the <strong>+</strong> icon and select the <strong>OdinKit</strong> framework in the list as shown in this image:</p>
<figure style="max-width: 400px"><a href="/images/odin/odin_swift_select_odinkit.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_swift_select_odinkit.jpg"
         alt="Select OdinKit Framework" width="400"/></a><figcaption>
            <p>Select OdinKit Framework</p>
        </figcaption>
</figure>
<h2 id="playgrounds">Playgrounds</h2>
<p>We have included a couple of Playgrounds into the OdinKit framework to get started quickly:</p>
<figure style="max-width: 600px"><a href="/images/odin/odin_swift_playgrounds.jpg" title="Click to enlarge" data-lity><img src="/images/odin/odin_swift_playgrounds.jpg"
         alt="Swift Playgrounds" width="600"/></a><figcaption>
            <p>Swift Playgrounds</p>
        </figcaption>
</figure>
<p>In the project navigator, expand the <strong>OdinKit</strong> framework under packages, choose <strong>Playgrounds</strong> and then either
<strong>iOS</strong> or <strong>macOS</strong>.</p>
<p>Check out the Playground Source here if you are
interested: <a href="https://github.com/4Players/odin-wrapper-swift/blob/master/Playgrounds/macOS.playground/Contents.swift">OdinKit macOS Playground at Github</a></p>
<h2 id="quick-start">Quick Start</h2>
<p>The following code snippet will create a token for authentication, join a room called <em>&ldquo;Meeting Room&rdquo;</em> and add a media
stream using your default audio input device:</p>
<pre><code class="language-swift">import OdinKit

let room = OdinRoom()

do {
    let accessKey = try OdinAccessKey(&quot;&lt;YOUR_ACCESS_KEY&gt;&quot;)
    let authToken = try accessKey.generateToken(roomId: &quot;Meeting Room&quot;)

    try room.join(token: authToken)
    try room.addMedia(type: OdinMediaStreamType_Audio)
} catch {
    print(&quot;Something went wrong, \\(error)&quot;)
}
</code></pre>
<h3 id="class-overview">Class Overview</h3>
<p>OdinKit provides a set of classes to provide easy access to just everything you need including low-level access to C-API
functions of the <a href="https://github.com/4Players/odin-sdk/blob/master/include/odin.h">ODIN Core SDK</a>.</p>
<h4 id="odinaccesskey">OdinAccessKey</h4>
<p>An access key is the unique authentication key to be used to generate room tokens for accessing the ODIN server network.
You should think of it as your individual username and password combination all wrapped up into a single
non-comprehendible string of characters, and treat it with the same respect. For your own security, we strongly
recommend that you <strong>NEVER</strong> put an access key in your client-side code. We&rsquo;ve created a very basic Node.js
server <a href="https://developers.4players.io/odin/examples/token-server/">here</a>, to showcase how to issue ODIN tokens to your
client apps without exposing your access key.</p>
<p><strong>Note:</strong> Using the <code>OdinAccessKey</code> default initializer will always create a new access key.</p>
<pre><code class="language-swift">// Create a new access key
let accessKey = OdinAccessKey()

// Print information about the access key
print(&quot;Public Key: \\(accessKey.publicKey)&quot;)
print(&quot;Secret Key: \\(accessKey.secretKey)&quot;)
print(&quot;Key ID:     \\(accessKey.id)&quot;)
</code></pre>
<p><a href='/odin/sdk/swift/classes/odinaccesskey/' class="btn btn-primary">OdinAccessKey Class Reference</a></p>
<h4 id="odintoken">OdinToken</h4>
<p>ODIN generates signed JSON Web Tokens (JWT) for secure authentication, which contain the room(s) you want to join as
well as a freely definable identifier for the user. The later can be used to refer to an existing record in your
particular service.</p>
<p>As ODIN is fully user agnostic, <a href="https://www.4players.io">4Players GmbH</a> does not store any of this information on its
servers.</p>
<pre><code class="language-swift">// Generate a token to authenticate with
let authToken = try accessKey.generateToken(roomId: &quot;foo&quot;, userId: &quot;bar&quot;)
</code></pre>
<p><a href='/odin/sdk/swift/classes/odintoken/' class="btn btn-primary">OdinToken Class Reference</a></p>
<h4 id="odinroom">OdinRoom</h4>
<p>In ODIN, users who want to communicate with each other need to join the same room. Optionally, you can specify an
alternative gateway URL when initializing an <code>OdinRoom</code> instance.</p>
<p>You can choose between a managed cloud and a self-hosted solution. Let <a href="https://www.4players.io">4Players GmbH</a>
deal with the setup, administration and bandwidth costs or run our server software on your own infrastructure
allowing you complete control and customization of your deployment environment. Unless you&rsquo;re hosting your own
servers, you don&rsquo;t need to set a gateway URL, which will make the ODIN client use the default gateway running in
the European Union.</p>
<pre><code class="language-swift">// Create a new room instance
let room = OdinRoom(gateway: &quot;https://gateway.odin.4players.io&quot;)

// Join the room
let ownPeerId = try room.join(token: authToken)

// Print information about the room
print(&quot;ID:        \\(room.id)&quot;)
print(&quot;User Data: \\(room.userData)&quot;)
</code></pre>
<p><a href='/odin/sdk/swift/classes/odinroom/' class="btn btn-primary">OdinRoom Class Reference</a></p>
<h4 id="odinpeer">OdinPeer</h4>
<p>Once a client joins a room, it will be treated as a peer. Every peer has its own user data, which is a byte array
(<code>[UInt8]</code>). This data is synced automatically, which allows storing of arbitrary information for each individual peer
and even globally for the room if needed.</p>
<p>Peers can update their own user data at any time, even before joining a room to specify the initial user data value.</p>
<pre><code class="language-swift">// Print information for all peers in the room
for (peerId, peer) in room.peers {
    print(&quot;ID:        \\(peer.id)&quot;)
    print(&quot;User ID:   \\(peer.userId)&quot;)
    print(&quot;User Data: \\(peer.userData)&quot;)
    print(&quot;Is Self:   \\(peer == room.ownPeer)&quot;)
}
</code></pre>
<p><a href='/odin/sdk/swift/classes/odinpeer/' class="btn btn-primary">OdinPeer Class Reference</a></p>
<h4 id="odinmedia">OdinMedia</h4>
<p>Each peer in an ODIN room can attach media streams to transmit voice data. By default, ODIN will always assume that your
input device is working with a sample rate of 48 kHz. If you need to change these settings, you can either specify a
custom <code>OdinAudioStreamConfig</code> or attach the <code>OdinMedia</code> instances of your room to an existing <code>AVAudioEngine</code> instance
of your app.</p>
<pre><code class="language-swift">// Append a local audio stream to capture our microphone
let newMediaId = try room.addMedia(audioConfig: OdinAudioStreamConfig(
    sample_rate: 48000,
    channel_count: 1
))
</code></pre>
<p><a href='/odin/sdk/swift/classes/odinmedia/' class="btn btn-primary">OdinMedia Class Reference</a></p>
<h3 id="event-handling">Event Handling</h3>
<p>The ODIN API is event driven. Using the OdinKit package, you have two ways of handing events emitted in an ODIN room:</p>
<h4 id="a-setting-a-room-delegate">a) Setting a Room Delegate</h4>
<p>Every <code>OdinRoom</code> instance allows setting an optional delegate to handle events. The delegate must be an instance of a
class implementing the <code>OdinRoomDelegate</code> protocol, which defines all the necessary event callbacks.</p>
<pre><code class="language-swift">// Define a class handing events
class YourCustomDelegate: OdinRoomDelegate {
    // Callback for internal room connectivity state changes
    func onRoomConnectionStateChanged(room: OdinRoom, oldState: OdinRoomConnectionState, newState: OdinRoomConnectionState, reason: OdinRoomConnectionStateChangeReason) {
        print(&quot;Connection status changed from \\(oldState.rawValue) to \\(newState.rawValue)&quot;)
    }

    // Callback for when a room was joined and the initial state is fully available
    func onRoomJoined(room: OdinRoom) {
        print(&quot;Room joined successfully as peer \\(room.ownPeer.id)&quot;)
    }

    // Callback for room user data changes
    func onRoomUserDataChanged(room: OdinRoom) {
        print(&quot;Global room user data changed to: \\(room.userData)&quot;)
    }

    // Callback for peers joining the room
    func onPeerJoined(room: OdinRoom, peer: OdinPeer) {
        print(&quot;Peer \\(peer.id) joined the room with ID '\\(peer.userId)'&quot;)
    }

    // Callback for peer user data changes
    func onPeerUserDataChanged(room: OdinRoom, peer: OdinPeer) {
        print(&quot;Peer \\(peer.id) updated its user data to: \\(peer.userData)&quot;)
    }

    // Callback for peers leaving the room
    func onPeerLeft(room: OdinRoom, peer: OdinPeer) {
        print(&quot;Peer \\(peer.id) left the room&quot;)
    }

    // Callback for medias being added to the room
    func onMediaAdded(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
        print(&quot;Peer \\(peer.id) added media \\(media.id) to the room&quot;)
    }

    // Callback for media activity state changes
    func onMediaActiveStateChanged(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
        print(&quot;Peer \\(peer.id) \\(media.activityStatus ? &quot;started&quot; : &quot;stopped&quot;) talking on media \\(media.id)&quot;)
    }

    // Callback for medias being removed from the room
    func onMediaRemoved(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
        print(&quot;Peer \\(peer.id) removed media \\(media.id) from the room&quot;)
    }

    // Callback for incoming arbitrary data messages
    func onMessageReceived(room: OdinRoom, senderId: UInt64, data: [UInt8]) {
        print(&quot;Peer \\(senderId) sent a message with arbitrary data: \\(data)&quot;)
    }
}

// Create an instance of your delegate
let delegate = YourCustomDelegate()

// Add the delegate to the room
room.delegate = delegate
</code></pre>
<h4 id="b-using-published-properties">b) Using Published Properties</h4>
<p>Every <code>OdinRoom</code> instance provides a set of observable properties using the <code>@Published</code> property wrapper. This allows
you to easily monitor these variables as signals are emitted whenever their values were changed.</p>
<p>There are three distinct properties you can observe:</p>
<ul>
<li><code>OdinRoom.connectionStatus</code> <br>
This is a tuple representing current connection status of the room including a reason identifier for the last update.</li>
<li><code>OdinRoom.peers</code> <br>
This is a dictionary containing all peers in the room, indexed by their ID. Each peer has its own <code>userData</code> property,
which is also observable and stores a byte array with arbitrary data assigned by the user.</li>
<li><code>OdinRoom.medias</code> <br>
This is a dictionary containing all local and remote media streams in the room, indexed by their stream handle. Each
media has an observable property called <code>activityStatus</code>, which indicates wether or not the media stream is sending or
receiving data.</li>
</ul>
<pre><code class="language-swift">// Monitor the room connection status
room.$connectionStatus.sink {
    print(&quot;New Connection Status: \\($0.state.rawValue)&quot;)
}

// Monitor the list of peers in the room
room.$peers.sink {
    print(&quot;New Peers: \\($0.keys)&quot;)
}

// Monitor the list of media streams in the room
room.$medias.sink {
    print(&quot;New Medias: \\($0.keys)&quot;)
}
</code></pre>
<h3 id="audio-processing">Audio Processing</h3>
<p>Each ODIN room handle has its own audio processing module (APM), which is in charge of filters like echo cancellation,
noise suppression, advanced voice activity detection and more. These settings can be changed on-the-fly by passing an
OdinApmConfig to the rooms updateAudioConfig.</p>
<p>The ODIN APM provides the following features:</p>
<h4 id="voice-activity-detection-vad">Voice Activity Detection (VAD)</h4>
<p>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.</p>
<h4 id="input-volume-gate">Input Volume Gate</h4>
<p>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.</p>
<h4 id="acoustic-echo-cancellation-aec">Acoustic Echo Cancellation (AEC)</h4>
<p>When enabled the echo canceller will try to subtract echoes, reverberation, and unwanted added sounds from the audio
input signal. Note, that you need to process the reverse audio stream, also known as the loopback data to be used in the
ODIN echo canceller.</p>
<h4 id="noise-suppression">Noise Suppression</h4>
<p>When enbabled, 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.</p>
<h4 id="high-pass-filter-hpf">High-Pass Filter (HPF)</h4>
<p>When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound
cleaner and more focused.</p>
<h4 id="preamplifier">Preamplifier</h4>
<p>When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and
making them louder.</p>
<h4 id="transient-suppression">Transient Suppression</h4>
<p>When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.</p>
<pre><code class="language-swift">// Create a new APM settings struct
let audioConfig: OdinApmConfig = .init(
    voice_activity_detection: true,
    voice_activity_detection_attack_probability: 0.9,
    voice_activity_detection_release_probability: 0.8,
    volume_gate: true,
    volume_gate_attack_loudness: -30,
    volume_gate_release_loudness: -40,
    echo_canceller: true,
    high_pass_filter: true,
    pre_amplifier: true,
    noise_suppression_level: OdinNoiseSuppressionLevel_Moderate,
    transient_suppressor: true
)

// Update the APM settings of the room
try room.updateAudioConfig(audioConfig)
</code></pre>
<h3 id="user-data">User Data</h3>
<p>Every peer has its own user data, which is a byte array (<code>[UInt8]</code>). This data is synced automatically, which allows
storing of arbitrary information for each individual peer and even globally for the room if needed. Peers can update
their own user data at any time, even before joining a room to specify the initial user data value. For convenience,
we&rsquo;re providing a set of helper functions in <code>OdinCustomData</code> to handle user data conversion:</p>
<h4 id="a-using-a-string">a) Using a String</h4>
<p>Use <code>encode</code> and <code>decode</code> to convert from <code>String</code> to <code>[UInt8]</code> and vice versa.</p>
<pre><code class="language-swift">// Define a string we want to set as our peer user data
let yourString = &quot;Hello World!&quot;

// Convert the string to a byte array
let stringData = OdinCustomData.encode(yourString)

// Set the user data
try room.updateUserData(userData: stringData, target: OdinUserDataTarget_Peer)
</code></pre>
<h4 id="b-using-a-custom-type">b) Using a Custom Type</h4>
<p>Use <code>encode</code> and <code>decode</code> to convert from types implementing the <code>Codable</code> protocol to <code>[UInt8]</code> and vice versa.</p>
<pre><code class="language-swift">// Define a codable type
struct YourCustomData: Codable {
    var name: String
}

// Initialize the new type
let yourCodable = YourCustomData(name: &quot;John Doe&quot;)

// Convert the type to a byte array
let codableData = OdinCustomData.encode(yourCodable)

// Set the user data
try room.updateUserData(userData: codableData, target: OdinUserDataTarget_Peer)
</code></pre>
<h4 id="messages">Messages</h4>
<p>ODIN allows you to send arbitrary to every other peer in the room or even individual targets. Just like user data, a
message is a byte array (<code>[UInt8]</code>), which means that you can use the same convenience functions in <code>OdinCustomData</code> to
make your life easier.</p>
<p>To send a message to a list of individual peers, simply specify a lif of peer IDs for the <code>targetIds</code> argument. We can
even send messages to ourselves by explicitly adding our own peer ID to the list.</p>
<p><strong>Note:</strong> Messages are always sent to all targets in the room, even when they moved out of proximity using setPosition.</p>
<pre><code class="language-swift">// Encode a string so we can send it as a message
let yourMessage = OdinCustomData.encode(&quot;So Long, and Thanks for All the Fish&quot;)

// Send the message everyone else in the room
try room.sendMessage(data: yourMessage)
</code></pre>
`}),e.add({id:3613,href:"https://www.4players.io/odin/sdk/web/",title:"Web SDK",section:"ODIN Documentation",description:"Implement best-in-class quality voice chat with noise suppression using ODIN Web SDK for JavaScript and TypeScript applications. Integrate seamlessly with popular frontend frameworks, and enjoy cross-platform compatibility with other ODIN client SDKs.",content:`<p>ODIN is our cross-platform immersive voice SDK with best in class quality and noise suppression technologies. You
can integrate it with ease in your TypeScript/JavaScript based applications.</p>
<h2 id="source-code">Source Code</h2>
<p>The web SDK is developed in TypeScript and open source. Check out the source in our public
<a href="https://github.com/4Players/odin-sdk-web">Github repository</a>.</p>
<h2 id="installation">Installation</h2>
<p>You can install the ODIN web SDK in your NodeJS project (you may want to build a bot in your NodeJS based server
that responds to messages sent by users), you may add ODIN to your Angular, React, React Native, Svelte or any other
frontend framework based on NPM.</p>
<h3 id="npm">NPM</h3>
<p><img src="https://img.shields.io/npm/v/@4players/odin.svg" alt="npm">
<img src="https://img.shields.io/npm/l/@4players/odin.svg" alt="npm">
<img src="https://img.shields.io/npm/dm/@4players/odin.svg" alt="npm"></p>
<p>Install the web SDK via <code>npm</code> in your project like this:</p>
<pre><code class="language-Bash">npm install --save @4players/odin
</code></pre>
<h3 id="html">HTML</h3>
<p>If you want to include ODIN into your website, you can add ODIN with this script tag to your website:</p>
<pre><code class="language-HTML">&lt;script type=&quot;text/javascript&quot; src=&quot;https://4npcdn.com/2355/odin/javascript/latest/odin.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>We also provide versioned URLs like this:</p>
<pre><code class="language-HTML">&lt;script type=&quot;text/javascript&quot; src=&quot;https://4npcdn.com/2355/odin/javascript/0.9.0/odin.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<p>If you want to host it yourself or make adjustments, you can also build it from source:</p>
<ol>
<li>Clone this repo on your workstation: <a href="https://github.com/4Players/odin-sdk-web">https://github.com/4Players/odin-sdk-web</a></li>
<li>Install modules: <code>npm install</code></li>
<li>Build vanilla JavaScript script: <code>npm run bundle</code></li>
<li>Congratulations! You now have a bundled script file named <code>odin.min.js</code> in the <code>dist</code> folder.</li>
</ol>
<p>You can now use the code as shown in the sample below, with <strong>one</strong> exception:</p>
<p>In the NPM package, namespaces and modules exist to separate different APIs from each other so they don&rsquo;t share
the same space and accidentally overwrite things from other APIs. As some browsers don&rsquo;t support modules, we group
ODIN APIs in a global namespace named <code>ODIN</code>. The namespace is defined in the Rollup bundle settings (please refer
to <code>rollup.config.ts</code> for details).</p>
<p>Therefore, whenever you see something in the docs that says <code>OdinClient.initRoom</code> you&rsquo;ll need to change that to
<code>ODIN.OdinClient.initRoom</code> in vanilla JavaScript.</p>
<h2 id="interoperability">Interoperability</h2>
<p>The ODIN web SDK is fully compatible with our other client SDKs so you can easily communicate between your favorite
web browser and any native app or game which integrates ODIN.</p>
<p>While next-gen browsers and native ODIN SDKs utilize <strong>WebTransport over HTTP/3</strong> to talk to an ODIN server using a
secure and reliable multiplexed transport, we&rsquo;ve also implemented a fallback mechanism over WebRTC data channels for
browsers without HTTP/3 support.</p>
<h2 id="event-handling">Event Handling</h2>
<p>The ODIN server will automatically notify you about relevant updates and the ODIN web SDK is using the JavaScript
<a href="https://developer.mozilla.org/en-US/docs/Web/API/EventTarget">EventTarget</a> API to dispatch custom events based on
the <code>IOdinEvents</code>
 interface. Use any of the provided the <code>addEventListener</code> methods to set up a
function that will be called whenever the specified event is delivered to the target.</p>
<p>Events are available in the following scopes:</p>
<ul>
<li><span class="external-reference">IOdinClientEvents <a href="/odin/sdk/web/interfaces/iodinclientevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinMediaEvents <a href="/odin/sdk/web/interfaces/iodinmediaevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
<p>This allows fine-grained control over which events you want to receive on any specific class instance, most notably
<span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
. Please refer to the scopes listed above to find out which events are available.</p>
<pre><code class="language-JavaScript">anyOdinObjectInstance.addEventListener('&lt;EVENT_NAME&gt;', function(event) { /* do something */ });
</code></pre>
<h2 id="using-media-objects">Using Media objects</h2>
<p>ODIN works with the concept of media objects that are attached to a room. A media is either remote (i.e. connected
to the mic of someone else device) or a local media, which is linked to your own microphone or other input device.</p>
<p>After joining a room, you can create a media (linked to your local input device) and add to the room. After joining
a room, you are just a listener in the room, you don&rsquo;t send anything to it (i.e. your are muted). If you want to
unmute the local user, you need to attach a media to that room:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Creating a media object
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JavaScript">// Create a new audio stream for our default capture device and append it to the room
const mediaStream = await navigator.mediaDevices.getUserMedia({
  echoCancellation: true,
  autoGainControl: true,
  noiseSuppression: true,
});

// Create and append a new input media to the room
const inputMedia = await odinRoom.createMedia(mediaStream);

// Start transmitting voice data (this can also be done later in the event listener for 'MediaStarted')
inputMedia.start();
</code></pre>
</div>
</div>

<p>That&rsquo;s it. The <code>navigator</code> objects <code>mediaDevices</code> has many functions to identify the input devices available on the
users device, i.t. you could show users a list of devices with all mics attached to the users device before
attaching that media.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Important:</strong> In our Web SDK, media objects are not started immediately. The objects are created, but they don&rsquo;t
send any data yet. You need to call the <span class="external-reference">start <a href="/odin/sdk/web/classes/odinmedia/start/"><i class="fas fa-external-link-alt"></i></a></span>
method on the media object to start sending (and
receiving data).</p>
</div>
</div>

<p>If you also want to enable receiving voice from others, you&rsquo;ll need to start incoming media objects, too. For this,
add an event handler for the <code>MediaStarted</code> event like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Starting incoming media objects
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JavaScript">  // Listen to media started events in the room and start decoding its voice packets
odinRoom.addEventListener('MediaStarted', (event) =&gt; {
    console.log(\`Peer \${event.payload.peer.id} added a new media stream to the room\`);
    // Start the media stream to enable the speaker for this media stream.
    event.payload.media.start();
});
</code></pre>
</div>
</div>

<h2 id="disconnect-from-odin">Disconnect from Odin</h2>
<p>To disconnect a player from an Odin room, you can simply call:</p>
<pre><code class="language-JavaScript">room.disconnect(); // room: OdinRoom
</code></pre>
<p>This function will stop all media objects from sending and receiving anymore data. However, the browser may continue showing a microphone indicator on the tab, which can mistakenly suggest that the microphone is still being used. To remove this indicator and let the browser know, that the microphone is no longer active, implement the clean-up code as shown in the example below:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Clean-up media tracks and hide microphone indicator
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JavaScript">function stopMediaStream(ms: MediaStream) {
  ms.getTracks().forEach((track) =&gt; {
    track.stop();
    ms.removeTrack(track);
  });
}
</code></pre>
</div>
</div>

<p>Execute this clean-up function on the media stream that is capturing audio to make sure that all resources are properly released and the microphone indicator is removed.</p>
<h2 id="examples">Examples</h2>
<p>We have prepared a couple of examples for various web frameworks.</p>
<h3 id="vanilla-js">Vanilla JS</h3>
<p>This example shows how to join a room and how to add a media stream (i.e. microphone) to it. It also shows how to
subscribe on important events and how to manage them. This can be useful to update lists of users in the channel or
to show activity indicators.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border"><p>To join an ODIN room, you need to create an access token. This should not be done on client side as the access key
is very powerful and should not be exposed in a public client. We provide a simple to use and deploy token server
via NodeJS that you can use to create ODIN tokens - you can also use our NPM package
<a href="https://github.com/4Players/odin-tokens">@4players/odin-tokens</a> to add a route to your existing NodeJS based server
or cloud functions.
Check out the token server here: <a href="/odin/examples/token-server/">Token Server NodeJS Example</a>.</p>
</div>
</div>

<p>The code should be self-explanatory, however, the basic steps are:</p>
<ol>
<li>Receive an access token for the room <code>default</code> from our example token server</li>
<li>Join the room with that access token</li>
<li>Setup listeners to receive notifications if new users join the room or start and stop talking</li>
</ol>





<div id="example-262ea7750391283d1f70ba1653f3e3fc" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">Setup ODIN and join room</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-262ea7750391283d1f70ba1653f3e3fc-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-262ea7750391283d1f70ba1653f3e3fc-ts">
      <pre><code class="hljs language-ts">import { OdinClient } from &#39;@4players/odin&#39;;

/**
 * Receives a token from our token server example which is required to join a room on an Odin server
 * @see https://developers.4players.io/odin/examples/token-server/
 * @param roomId The id (i.e. name) of the room to join
 * @param userId The id (i.e. name) of the user to join
 */
const getToken = async function (roomId: string, userId: string): Promise&lt;string | null&gt; {
  // Get a token from our token server example that you can find here:
  const token = await fetch(&#39;http://0.0.0.0:8080/default?user_id=john&#39;)
    .then((response) =&gt; {
      if (response.status !== 200) {
        console.log(&#39;Looks like there was a problem. Status Code: &#39; &#43; response.status);
        return null;
      }

      // Examine the text in the response
      return response.json().then(function (data) {
        return data.token;
      });
    })
    .catch(function (err) {
      console.log(&#39;Fetch Error :-S&#39;, err);
      return null;
    });

  return token;
};

/**
 * Starts an ODIN session and joins the user with name John to the room default
 */
const startOdin = async function () {
  // User ID can be anything, but it must be unique. You can also use UserData to set profile name, avatars, etc. and set a unique user identifier.
  const token = await getToken(&#39;My Fancy Room&#39;, &#39;John Doe&#39;);
  if (!token) {
    console.error(&#39;Could not get token, make sure token server is running&#39;);
    return;
  }

  // Now that we have the token, we can initialize a room instance and create listeners on important callbacks
  const odinRoom = await OdinClient.initRoom(token);

  // Handle events for new peers joining the room
  odinRoom.addEventListener(&#39;PeerJoined&#39;, (event) =&gt; {
    console.log(\`Peer \${event.payload.peer.id} joined\`);
  });

  // Handle events for peers leaving the room
  odinRoom.addEventListener(&#39;PeerLeft&#39;, (event) =&gt; {
    console.log(\`Peer \${event.payload.peer.id} left\`);
  });

  // Handle events for medias added (e.g. start processing voice data)
  odinRoom.addEventListener(&#39;MediaStarted&#39;, (event) =&gt; {
    event.payload.media.start();
  });

  // Handle events for medias removed (e.g. stop processing voice data)
  odinRoom.addEventListener(&#39;MediaStopped&#39;, (event) =&gt; {
    event.payload.media.stop();
  });

  // Handle events for media activity (e.g. user starts/stops talking)
  odinRoom.addEventListener(&#39;MediaActivity&#39;, (event) =&gt; {
    console.log(\`Peer \${event.payload.peer.id} \${event.payload.media.active ? &#39;started&#39; : &#39;stopped&#39;} talking\`);
  });

  // Once all the listeners are set, we join the room
  await odinRoom.join();

  // Create a new audio stream for our default capture device and append it to the room
  navigator.mediaDevices.getUserMedia({ audio: true }).then(async (mediaStream) =&gt; {
    odinRoom.createMedia(mediaStream);
    // The mic is enabled, and the media object is created, but it&#39;s muted, i.e. not sending data.
    // Start the media stream to unmute the user:
    await mediaStream.start();
  });
};

startOdin()
  .then(() =&gt; {
    console.log(&#39;Room joined successfully&#39;);
  })
  .catch((error) =&gt; {
    console.log(&#39;Failed to join room:&#39;, error);
  });
</code></pre>
    </div></div>
</div>


<h3 id="angular">Angular</h3>
<p>We have created a simple Angular application that you can use as a starting point for your own Angular application
or an integration into existing applications.</p>
<p>We provide the source code in our Github repository: <a href="https://github.com/4Players/odin-example-angular">Angular Demo for ODIN</a>.</p>
`}),e.add({id:3614,href:"https://www.4players.io/odin/hosting/",title:"Hosting Options",section:"ODIN Documentation",description:"Choose between managed cloud hosting and on-premise hosting solutions for your ODIN SDK deployment. Enjoy scalability, reliability, and security with our managed cloud hosting or maintain complete control over your setup with on-premise hosting. Trust our team for top-notch support and a seamless experience.",content:`<p>At 4Players, we understand that different businesses have different hosting needs. That&rsquo;s why we offer both managed cloud hosting and on-premise hosting options for ODIN. The choice is yours.</p>
<p>With our managed cloud hosting, you can enjoy the benefits of a scalable, reliable, and secure hosting environment without the overhead of managing your own infrastructure. Our team of experienced professionals will handle all the technical details, allowing you to focus on your business.</p>
<p>For businesses that prefer to have complete control over their hosting environment, we also offer on-premise hosting. This allows you to install and run our software on your own servers, giving you full control over your setup and infrastructure.</p>
<p>No matter which hosting option you choose, you can trust that our team will provide top-notch support and ensure a seamless experience. Contact us today to learn more about our hosting options and see which one is right for you.</p>
<div class="row gx-4">
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/hosting/cloud">
<img class="teaser-image" src="/images/odin-cloud.jpg">
</a>
<h4 class="teaser-title">Managed Cloud</h4>
<div class="teaser-content">
 <p>Let us deal with the setup, administration and bandwidth costs and focus your time and resources on building the game you envisioned.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/hosting/cloud">Learn more</a>
</div>
</div>
</div>
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/hosting/on-premise">
<img class="teaser-image" src="/images/odin-on-premise.jpg">
</a>
<h4 class="teaser-title">On-Premise Hosting</h4>
<div class="teaser-content">
 <p>Run our server software on your own infrastructure for complete control and customization of your deployment environment.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/hosting/on-premise">Learn more</a>
</div>
</div>
</div>
</div>
`}),e.add({id:3616,href:"https://www.4players.io/fleet/cli/fleet/locations/",title:"Locations",section:"ODIN Fleet Documentation",description:"Learn how to work with ODIN Fleet locations using the CLI.",content:`<p>We use the term &ldquo;locations&rdquo; to refer to the data centers where your game servers and services are hosted. We run
multiple locations around the world to provide low-latency services to your players.</p>
<h2 id="overview">Overview</h2>
<p>The <code>locations</code> command allows you to list all available locations and get detailed information about a specific
location.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet locations list</code></p>
<p>Returns a list of all available locations identified by the country code and location name.</p>
`}),e.add({id:3617,href:"https://www.4players.io/odin/guides/branding/",title:"Branding",section:"ODIN Documentation",description:"Follow our guide to properly add 4Players ODIN branding to your game or app. From displaying text to incorporating a logo, we provide you with different options to give credit to ODIN's realtime voice chat capabilities in your project.",content:`<p>In some of our tiers its required to add some 4Players ODIN branding to your game. The following guide will show you
how this should be done and you can download the logos below. You are basically free to place the branding in your
game, but users should be able to get a (short) glimpse of the logo. Like Unity does in its free tier with the
&ldquo;Made with Unity&rdquo; splash screen when the game/app starts.</p>
<h2 id="1-add-text">1. Add Text</h2>
<p>Place this text somewhere in your game, for example in your credits screen.</p>

<blockquote><p>Realtime voice chat powered by <strong>4Players ODIN</strong></p>
</blockquote>

<h2 id="2-add-a-logo">2. Add a Logo</h2>
<p>Choose one of these logos and place it in your splash screen or launch screen.</p>
<p>Just right click and choose &ldquo;Save to disk&rdquo; to download an image that makes sense for you.</p>
<figure style="max-width: 400px"><a href="/images/odin/branding/odin-launch.jpg" title="Click to enlarge" data-lity><img src="/images/odin/branding/odin-launch.jpg"
         alt="Logo with background" width="400"/></a><figcaption>
            <p>Logo with background</p>
        </figcaption>
</figure>
<figure class="dark" style="max-width: 400px"><a href="/images/odin/branding/odin_logo_black.png" title="Click to enlarge" data-lity><img src="/images/odin/branding/odin_logo_black.png"
         alt="Transparent Logo (PNG)" width="400"/></a><figcaption>
            <p>Transparent Logo (PNG)</p>
        </figcaption>
</figure>
<figure class="dark" style="max-width: 400px"><a href="/images/odin/branding/odin_logo_white.png" title="Click to enlarge" data-lity><img src="/images/odin/branding/odin_logo_white.png"
         alt="Transparent Logo (PNG) for dark environments" width="400"/></a><figcaption>
            <p>Transparent Logo (PNG) for dark environments</p>
        </figcaption>
</figure>
<figure class="dark" style="max-width: 400px"><a href="/images/odin/branding/odin_logo_vertical_black.png" title="Click to enlarge" data-lity><img src="/images/odin/branding/odin_logo_vertical_black.png"
         alt="Transparent vertical logo (PNG) for bright environments" width="400"/></a><figcaption>
            <p>Transparent vertical logo (PNG) for bright environments</p>
        </figcaption>
</figure>
<figure class="dark" style="max-width: 400px"><a href="/images/odin/branding/odin_logo_vertical_white.png" title="Click to enlarge" data-lity><img src="/images/odin/branding/odin_logo_vertical_white.png"
         alt="Transparent vertical logo (PNG) for dark environments" width="400"/></a><figcaption>
            <p>Transparent vertical logo (PNG) for dark environments</p>
        </figcaption>
</figure>
`}),e.add({id:3618,href:"https://www.4players.io/odin/examples/",title:"Examples",section:"ODIN Documentation",description:"Integration samples for 4Players ODIN",content:`<p>Explore our examples section and discover the possibility of what you can build.</p>
<h2 id="available-examples">Available Examples</h2>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/unreal-minimal-samples">
<img class="teaser-image" src="/images/odin/odin_unreal_sample_header.jpg">
</a>
<h4 class="teaser-title">Unreal Sample Project</h4>
<div class="teaser-content">
 <p>A simple integration of ODIN into an Unreal Engine project. Copy &amp; Paste the blueprints into your own project to get
started quickly!</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/unreal-minimal-samples">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/unreal-demo">
<img class="teaser-image" src="/images/odin/odin_unreal_demo_header.png">
</a>
<h4 class="teaser-title">Unreal Tech Demo</h4>
<div class="teaser-content">
 <p>An advanced integration of ODIN into a multiplayer project featuring spatial audio with occlusion and environmental effects! Runnable ready for download and source code is also available.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/unreal-demo">Learn more or try it out!</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/multiplayer-sample">
<img class="teaser-image" src="/images/odin/multiplayer_sample.jpg">
</a>
<h4 class="teaser-title">Unity Tech Demo</h4>
<div class="teaser-content">
 <p>Download and test our PUN based multiplayer playroom sample built with Unity. We provide all the source-code in our Github
repository. The sample also features many scripts for audio effects like damping and general bookkeeping stuff.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/multiplayer-sample">Learn more or try it out</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/showcase">
<img class="teaser-image" src="/images/odin/showcase_header.jpg">
</a>
<h4 class="teaser-title">Cross-Platform Neighbourhood Showcase</h4>
<div class="teaser-content">
 <p>In this sample game you run around a nice looking neighborhood and can talk to other players with 3D positional
voice and a walkie-talkie in multiple channels. We also feature a web-based commander that you can use to interact
with players directly from your browser.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/showcase">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/fps-shooter">
<img class="teaser-image" src="/images/odin/fps_shooter_header.jpg">
</a>
<h4 class="teaser-title">First Person Shooter</h4>
<div class="teaser-content">
 <p>A simple but fun old style FPS shooter on desert style maps - made in Unity. ODIN 3D positional voice is integrated so that you can
talk to other players with voice or radio broadcast. Have fun!</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/fps-shooter">Try it out!</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/token-server">
<img class="teaser-image" src="/images/odin/token_server_header.jpg">
</a>
<h4 class="teaser-title">Token Server</h4>
<div class="teaser-content">
 <p>ODIN features a simple but powerful token system for permission handling. There is no need for complex
authentication system. ODINs token system can be integrated into existing authentication systems with ease. This
sample shows how this is done and how to issue tokens for authentication.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/token-server">Learn more</a>
</div>
</div>
</div>
</div>
<div class="row gx-4">
<div class="col-md equal-height">
<div class="teaser-container">
<a href="/odin/examples/swiftui-sample">
<img class="teaser-image" src="/images/odin/odin_swift_sample.jpg">
</a>
<h4 class="teaser-title">SwiftUI Sample</h4>
<div class="teaser-content">
 <p>A simple but fully functional SwiftUI sample that leverages <a href="/odin/sdk/swift/">OdinKit</a> to build an
iOS app that allows you to chat with friends in no time.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/swiftui-sample">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/minimal-client">
<img class="teaser-image" src="/images/odin/console_client.jpg">
</a>
<h4 class="teaser-title">Minimal Console Client</h4>
<div class="teaser-content">
 <p>Learn how to build a simple C command line client that you can use for testing and advanced features on Windows, Linux
and macOS.  We provide a full example in our Github repository and share the code with you.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/minimal-client">Learn more</a>
</div>
</div>
</div>
<div class="col-md"></div>
</div>
`}),e.add({id:3619,href:"https://www.4players.io/odin/examples/minimal-client/",title:"Console Client",section:"ODIN Documentation",description:"A minimalistic console client written in C for 4Players ODIN",content:`<p>This is a very minimalistic console client written in C. Please note, that this example uses <a href="https://miniaud.io">miniaudio</a> to provide basic audio capture and playback functionality.</p>





<div id="example-cb6629d0d9ca45852285a562a3c1b2b5" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">Minimalistic Console Client</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-cb6629d0d9ca45852285a562a3c1b2b5-c">
        C
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-cb6629d0d9ca45852285a562a3c1b2b5-c">
      <pre><code class="hljs language-c">/*
 * 4Players ODIN Minimal Client Example
 *
 * Usage: odin_minimal -r &lt;room_id&gt; -s &lt;server_url&gt; -k &lt;access_key&gt;
 */

#define MINIAUDIO_IMPLEMENTATION
#define __STDC_FORMAT_MACROS

#include &lt;inttypes.h&gt;
#include &lt;math.h&gt;
#include &lt;stdio.h&gt;

#include &#34;argparse.h&#34;
#include &#34;miniaudio.h&#34;
#include &#34;odin.h&#34;

OdinRoomHandle room;
OdinMediaStreamHandle input_stream;
OdinMediaStreamHandle output_streams[512];
size_t output_streams_len = 0;

/**
 * @brief Default room to join if none is specified.
 */
char *room_id = &#34;default&#34;;

/**
 * @brief Default gateway/server to connect to if none is specified.
 */
char *server_url = &#34;gateway.odin.4players.io&#34;;

/**
 * @brief Initial arbitrary user data to set for our own peer when joining the room (can be changed afterwards).
 */
char *user_data = &#34;{\\&#34;name\\&#34;:\\&#34;Console Client\\&#34;}&#34;;

/**
 * @brief Default user ID to use during authentication (usually refers to an existing record in your particular service).
 */
char *user_id = &#34;My User ID&#34;;

/**
 * @brief Default access key to use if none is specified (using \`NULL\` will auto-generate one).
 */
char *access_key = NULL;

/**
 * @brief Default room token to use if none is specified (using \`NULL\` will auto-generate one).
 */
char *room_token = NULL;

/**
 * @brief Default audience for ODIN room tokens (use \`OdinTokenAudience_Sfu\` for on-premise setups without a gateway).
 */
int token_audience = OdinTokenAudience_Gateway;

/*
 * @brief Numeric index of the enumerated audio playback device to use (using \`0\` will pick the default device).
 */
int audio_output_device = 0;

/*
 * @brief Numeric index of the enumerated audio capture device to use (using \`0\` will pick the default device).
 */
int audio_input_device = 0;

/**
 * @brief Audio input configuration.
 */
OdinAudioStreamConfig audio_input_config = {
    .sample_rate = 48000,
    .channel_count = 1,
};

/**
 * @brief Audio output configuration.
 */
OdinAudioStreamConfig audio_output_config = {
    .sample_rate = 48000,
    .channel_count = 2,
};

/**
 * @brief Room audio processing configuration.
 */
OdinApmConfig apm_config = {
    .voice_activity_detection = true,
    .voice_activity_detection_attack_probability = 0.9,
    .voice_activity_detection_release_probability = 0.8,
    .volume_gate = false,
    .volume_gate_attack_loudness = -30,
    .volume_gate_release_loudness = -40,
    .echo_canceller = true,
    .high_pass_filter = false,
    .pre_amplifier = false,
    .noise_suppression_level = OdinNoiseSuppressionLevel_Moderate,
    .transient_suppressor = false,
    .gain_controller = true,
};

/**
 * @Brief Custom struct to store information about available audio devices from miniaudio.
 */
typedef struct
{
    ma_device_info *output_devices;
    ma_uint32 output_devices_count;
    ma_device_info *input_devices;
    ma_uint32 input_devices_count;
} AudioDeviceList;

/**
 * @brief Basic helper function to print formatted error messages to standard error I/O.
 *
 * @param error    ODIN error code to format
 * @param text     Custom string to use as error text prefix
 */
void print_error(OdinReturnCode error, const char *text)
{
    char buffer[512];
    odin_error_format(error, buffer, sizeof(buffer));
    fprintf(stderr, &#34;%s; %s\\n&#34;, text, buffer);
}

/**
 * @brief Basic helper function to get the internal media ID from a specified handle.
 *
 * @param handle    The media stream handle to get the ID from
 */
uint16_t get_media_id_from_handle(OdinMediaStreamHandle handle)
{
    uint16_t media_id;
    int error = odin_media_stream_media_id(handle, &amp;media_id);
    return odin_is_error(error) ? 0 : media_id;
}

/**
 * @brief Basic helper function to get the room ID from a specified handle.
 *
 * @param handle    The room handle to get the ID from
 */
const char *get_room_id_from_handle(OdinRoomHandle handle)
{
    char room_id[512];
    int error = odin_room_id(handle, room_id, sizeof(room_id));
    return odin_is_error(error) ? NULL : strdup(room_id);
}

/**
 * @brief Returns a human-readable string representation for a specified connection state.
 *
 * @param state    The room connection state to translate
 */
const char *get_name_from_connection_state(OdinRoomConnectionState state)
{
    switch (state)
    {
    case OdinRoomConnectionState_Connecting:
        return &#34;connecting&#34;;
    case OdinRoomConnectionState_Connected:
        return &#34;connected&#34;;
    case OdinRoomConnectionState_Disconnecting:
        return &#34;disconnecting&#34;;
    case OdinRoomConnectionState_Disconnected:
        return &#34;disconnected&#34;;
    default:
        return &#34;unknown&#34;;
    }
}

/**
 * @brief Returns a human-readable string representation for a specified connection state change reason.
 *
 * @param state    The room connection state change reason to translate
 */
const char *get_name_from_connection_state_change_reason(OdinRoomConnectionStateChangeReason reason)
{
    switch (reason)
    {
    case OdinRoomConnectionStateChangeReason_ClientRequested:
        return &#34;client request&#34;;
    case OdinRoomConnectionStateChangeReason_ServerRequested:
        return &#34;server request&#34;;
    case OdinRoomConnectionStateChangeReason_ConnectionLost:
        return &#34;timeout&#34;;
    default:
        return &#34;unknown&#34;;
    }
}

/**
 * @brief Reads an ODIN access key from the specified file.
 *
 * @param file_name     Name of the file to read
 * @param access_key    Buffer to store access key
 */
int read_access_key_file(const char *file_name, char *access_key)
{
    FILE *file;
    if (NULL == (file = fopen(file_name, &#34;r&#34;)))
    {
        return -1;
    }
    fgets(access_key, 45, file);
    int error = ferror(file);
    fclose(file);
    return error;
}

/**
 * @brief Writes an ODIN access key to the specified file.
 *
 * @param file_name     Name of the file to write
 * @param access_key    The access key to write
 */
int write_access_key_file(const char *file_name, const char *access_key)
{
    FILE *file;
    if (NULL == (file = fopen(file_name, &#34;w&#34;)))
    {
        return -1;
    }
    fputs(access_key, file);
    int error = ferror(file);
    fclose(file);
    return error;
}

/**
 * @brief Fills an \`AudioDeviceList\` struct with information about the available audio devices.
 *
 * @param devices      Pointer to a struct which will be filled with device information
 */
int fill_audio_devices(AudioDeviceList *devices)
{
    ma_context context;
    ma_device_info *output_devices;
    ma_uint32 output_devices_count;
    ma_device_info *input_devices;
    ma_uint32 input_devices_count;
    ma_result result = ma_context_init(NULL, 0, NULL, &amp;context);
    if (result == MA_SUCCESS)
    {
        if ((result = ma_context_get_devices(&amp;context, &amp;output_devices, &amp;output_devices_count, &amp;input_devices, &amp;input_devices_count)) == MA_SUCCESS)
        {
            devices-&gt;output_devices = (ma_device_info *)malloc(sizeof(ma_device_info) * output_devices_count);
            memcpy(devices-&gt;output_devices, output_devices, sizeof(ma_device_info) * output_devices_count);
            devices-&gt;output_devices_count = output_devices_count;
            devices-&gt;input_devices = (ma_device_info *)malloc(sizeof(ma_device_info) * input_devices_count);
            memcpy(devices-&gt;input_devices, input_devices, sizeof(ma_device_info) * input_devices_count);
            devices-&gt;input_devices_count = input_devices_count;
        }
        ma_context_uninit(&amp;context);
    }
    return result;
}

/**
 * @brief Frees the memory allocated for the device info arrays in an \`AudioDeviceList\` struct.
 *
 * @param devices      Pointer to a struct which had its info arrays previously allocated with malloc
 */
void free_audio_devices(AudioDeviceList *devices)
{
    if (devices-&gt;output_devices != NULL)
    {
        free(devices-&gt;output_devices);
        devices-&gt;output_devices = NULL;
    }
    devices-&gt;output_devices_count = 0;
    if (devices-&gt;input_devices != NULL)
    {
        free(devices-&gt;input_devices);
        devices-&gt;input_devices = NULL;
    }
    devices-&gt;input_devices_count = 0;
}

/**
 * @brief Explicitly enables/disables a given boolean or leaves it untouched.
 *
 * @param option    The option value to change
 * @param action    What to do with the option (0 - disable, 1 - ignore, 2 - enable)
 */
void adjust_apm_option(bool *option, int action)
{
    *option = (action == 2) || (action == 1 &amp;&amp; *option);
}

/**
 * @brief Adds a media stream to the global list of output streams.
 *
 * @param stream    ODIN media stream to insert
 */
void insert_output_stream(OdinMediaStreamHandle stream)
{
    output_streams[output_streams_len] = stream;
    output_streams_len &#43;= 1;
}

/**
 * @brief Removes a media stream from the global list of output stream and destroys it.
 *
 * @param index    Position of the ODIN media stream to remove
 */
void remove_output_stream(size_t index)
{
    output_streams_len -= 1;
    output_streams[index] = output_streams[output_streams_len];
    output_streams[output_streams_len] = 0;
}

/**
 * @brief Handler for ODIN room event callbacks.
 *
 * @param room     Handle identifier of the ODIN room that triggered the event
 * @param event    Pointer to ODIN event the be handled
 * @param data     Extra data pointer passed into \`odin_room_set_event_callback\`
 */
void handle_odin_event(OdinRoomHandle room, const OdinEvent *event, void *data)
{
    if (event-&gt;tag == OdinEvent_RoomConnectionStateChanged)
    {
        const char *connection_state_name = get_name_from_connection_state(event-&gt;room_connection_state_changed.state);
        const char *connection_state_reason = get_name_from_connection_state_change_reason(event-&gt;room_connection_state_changed.reason);

        // Print new room connection state to console
        printf(&#34;Connection state changed to &#39;%s&#39; due to %s\\n&#34;, connection_state_name, connection_state_reason);

        // Handle connection timeouts and reconnects as we need to create a new input stream
        if (event-&gt;room_connection_state_changed.reason == OdinRoomConnectionStateChangeReason_ConnectionLost)
        {
            input_stream = 0;
            if (event-&gt;room_connection_state_changed.state == OdinRoomConnectionState_Connected)
            {
                input_stream = odin_audio_stream_create(audio_input_config);
                odin_room_add_media(room, input_stream);
            }
        }

        // Stop client if the room handle gets disconnected (e.g. due to room close, kick/ban or connection issues)
        if (event-&gt;room_connection_state_changed.state == OdinRoomConnectionState_Disconnected)
        {
            if (event-&gt;room_connection_state_changed.reason != OdinRoomConnectionStateChangeReason_ClientRequested)
            {
                exit(1);
            }
        }
    }
    else if (event-&gt;tag == OdinEvent_Joined)
    {
        const char *room_id = event-&gt;joined.room_id;
        const char *customer = event-&gt;joined.customer;
        const char *own_user_id = event-&gt;joined.own_user_id;
        uint64_t peer_id = event-&gt;joined.own_peer_id;

        // Print information about joined room to the console
        printf(&#34;Room &#39;%s&#39; owned by &#39;%s&#39; joined successfully as Peer(%&#34; PRIu64 &#34;) with user ID &#39;%s&#39;\\n&#34;, room_id, customer, peer_id, own_user_id);
    }
    else if (event-&gt;tag == OdinEvent_PeerJoined)
    {
        const char *user_id = event-&gt;peer_joined.user_id;
        uint64_t peer_id = event-&gt;peer_joined.peer_id;
        size_t peer_user_data_len = event-&gt;peer_joined.peer_user_data_len;

        // Print information about the peer to the console
        printf(&#34;Peer(%&#34; PRIu64 &#34;) joined with user ID &#39;%s&#39;\\n&#34;, peer_id, user_id);

        // Print information about the peers user data to the console
        printf(&#34;Peer(%&#34; PRIu64 &#34;) has user data with %zu bytes\\n&#34;, peer_id, peer_user_data_len);
    }
    else if (event-&gt;tag == OdinEvent_PeerLeft)
    {
        uint64_t peer_id = event-&gt;peer_left.peer_id;

        // Walk through our global list of output streams and destroy the remaining ones owned by the peer just to be sure
        for (size_t i = 0; i &lt; output_streams_len; &#43;&#43;i)
        {
            uint64_t stream_peer_id;
            odin_media_stream_peer_id(output_streams[i], &amp;stream_peer_id);
            if (stream_peer_id == peer_id)
            {
                remove_output_stream(i);
            }
        }

        // Print information about the peer to the console
        printf(&#34;Peer(%&#34; PRIu64 &#34;) left\\n&#34;, peer_id);
    }
    else if (event-&gt;tag == OdinEvent_PeerUserDataChanged)
    {
        uint64_t peer_id = event-&gt;peer_user_data_changed.peer_id;
        size_t peer_user_data_len = event-&gt;peer_user_data_changed.peer_user_data_len;

        // Print information about the peers user data to the console
        printf(&#34;Peer(%&#34; PRIu64 &#34;) user data updated with %zu bytes\\n&#34;, peer_id, peer_user_data_len);
    }
    else if (event-&gt;tag == OdinEvent_MediaAdded)
    {
        uint64_t peer_id = event-&gt;media_added.peer_id;
        uint16_t media_id = get_media_id_from_handle(event-&gt;media_added.media_handle);

        // Add the new output stream to our global list for later playback mixing
        insert_output_stream(event-&gt;media_added.media_handle);

        // Print information about the media to the console
        printf(&#34;Media(%d) added by Peer(%&#34; PRIu64 &#34;)\\n&#34;, media_id, peer_id);
    }
    else if (event-&gt;tag == OdinEvent_MediaRemoved)
    {
        uint64_t peer_id = event-&gt;media_removed.peer_id;
        uint16_t media_id = get_media_id_from_handle(event-&gt;media_removed.media_handle);

        // Find the output stream in our global list and destroy it
        for (size_t i = 0; i &lt; output_streams_len; &#43;&#43;i)
        {
            if (output_streams[i] == event-&gt;media_removed.media_handle)
            {
                remove_output_stream(i);
                break;
            }
        }

        // Print information about the media to the console
        printf(&#34;Media(%d) removed by Peer(%&#34; PRIu64 &#34;)\\n&#34;, media_id, peer_id);
    }
    else if (event-&gt;tag == OdinEvent_MediaActiveStateChanged)
    {
        uint16_t media_id = get_media_id_from_handle(event-&gt;media_active_state_changed.media_handle);
        uint64_t peer_id = event-&gt;media_active_state_changed.peer_id;
        const char *state = event-&gt;media_active_state_changed.active ? &#34;started&#34; : &#34;stopped&#34;;

        // Print information about the media activity update to the console
        printf(&#34;Peer(%&#34; PRIu64 &#34;) %s sending data on Media(%d)\\n&#34;, peer_id, state, media_id);
    }
}

/**
 * @brief Handler for miniaudio callbacks fired whenever data is ready to be delivered to or from the device.
 *
 * @param device         Pointer to the relevant input/output device
 * @param output         Pointer to output buffer that will receive audio data for playback
 * @param input          Pointer to the buffer containing input data from a recording device
 * @param frame_count    Number of PCM frames to process
 */
void handle_audio_data(ma_device *device, void *output, const void *input, ma_uint32 frame_count)
{
    if (device-&gt;type == ma_device_type_capture &amp;&amp; input_stream)
    {
        // Push audio buffer from miniaudio callback to ODIN input stream
        int sample_count = frame_count * device-&gt;capture.channels;
        odin_audio_push_data(input_stream, input, sample_count);
    }
    else if (device-&gt;type == ma_device_type_playback &amp;&amp; output_streams_len)
    {
        // Mix data from available ODIN output streams into the miniaudio output buffer
        int sample_count = frame_count * device-&gt;playback.channels;
        odin_audio_mix_streams(room, output_streams, output_streams_len, output, sample_count);
    }
}

/**
 * @brief Prints the ODIN core SDK version and terminates the program.
 *
 * @param self           Pointer to the argparse struct
 * @param option         Pointer to the argparse option struct
 */
int cmd_show_version(struct argparse *self, const struct argparse_option *option)
{
    printf(&#34;%s\\n&#34;, ODIN_VERSION);
    exit(0);
}

/**
 * @brief Prints a list of available audio devices and terminates the program.
 *
 * @param self           Pointer to the argparse struct
 * @param option         Pointer to the argparse option struct
 */
int cmd_list_audio_devices(struct argparse *self, const struct argparse_option *option)
{
    AudioDeviceList audio_devices;
    if (fill_audio_devices(&amp;audio_devices) != MA_SUCCESS)
    {
        printf(&#34;Failed to retrieve audio device information\\n&#34;);
        exit(1);
    }
    printf(&#34;Playback Devices\\n&#34;);
    for (int i = 0; i &lt; audio_devices.output_devices_count; &#43;&#43;i)
    {
        printf(&#34;    %u: %s\\n&#34;, i &#43; 1, audio_devices.output_devices[i].name);
    }
    printf(&#34;\\n&#34;);
    printf(&#34;Capture Devices\\n&#34;);
    for (int i = 0; i &lt; audio_devices.input_devices_count; &#43;&#43;i)
    {
        printf(&#34;    %u: %s\\n&#34;, i &#43; 1, audio_devices.input_devices[i].name);
    }
    printf(&#34;\\n&#34;);
    free_audio_devices(&amp;audio_devices);
    exit(0);
}

/**
 * @brief The entry point of the program.
 *
 * @param argc           The number of command-line arguments passed to the program
 * @param argv           An array of pointers to strings, where each string is one of the command-line arguments
 */
int main(int argc, const char *argv[])
{
    char gen_access_key[128];
    char gen_room_token[512];
    ma_device input_device;
    ma_device output_device;
    AudioDeviceList devices;
    OdinReturnCode error;

    /*
     * Use miniaudio to retrieve a list of available audio devices
     */
    if (fill_audio_devices(&amp;devices) != MA_SUCCESS)
    {
        printf(&#34;Failed to retrieve audio device information\\n&#34;);
        return 1;
    }

    /**
     * Parse optional command-line arguments nd adjust settings accordingly
     *
     * Rules for boolean arguments:
     *  0 = Explicitly disable
     *  1 = No change
     *  2 = Explicitly enable
     */
    static const char *const usages[] = {
        &#34;odin_minimal [options]&#34;,
        NULL,
    };
    int opt_apm_use_voice_activity_detection = 1;
    int opt_apm_use_volume_gate = 1;
    int opt_apm_use_echo_canceller = 1;
    int opt_apm_use_high_pass_filter = 1;
    int opt_apm_use_pre_amplifier = 1;
    int opt_apm_use_transient_suppressor = 1;
    int opt_apm_use_gain_controller = 1;
    int opt_apm_noise_suppression_level = apm_config.noise_suppression_level;
    struct argparse argparse;
    struct argparse_option options[] = {
        OPT_HELP(),
        OPT_BOOLEAN(&#39;v&#39;, &#34;version&#34;, NULL, &#34;show version number and exit&#34;, cmd_show_version, 0, OPT_NONEG),
        OPT_STRING(&#39;r&#39;, &#34;room-id&#34;, &amp;room_id, &#34;room to join (default: default)&#34;, NULL, 0, 0),
        OPT_STRING(&#39;s&#39;, &#34;server-url&#34;, &amp;server_url, &#34;server url (default: gateway.odin.4players.io)&#34;, NULL, 0, 0),
        OPT_STRING(&#39;d&#39;, &#34;peer-user-data&#34;, &amp;user_data, &#34;peer user data to set when joining the room&#34;, NULL, 0, 0),
        OPT_GROUP(&#34;Authorization&#34;),
        OPT_STRING(&#39;t&#39;, &#34;room-token&#34;, &amp;room_token, &#34;room token to use for authorization&#34;, NULL, 0, 0),
        OPT_STRING(&#39;k&#39;, &#34;access-key&#34;, &amp;access_key, &#34;access key to use for local token generation&#34;, NULL, 0, 0),
        OPT_STRING(&#39;u&#39;, &#34;user-id&#34;, &amp;user_id, &#34;identifier to use for local token generation&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;b&#39;, &#34;bypass-gateway&#34;, &amp;token_audience, &#34;bypass gateway and connect to sfu directly&#34;, NULL, 0, OPT_NONEG),
        OPT_GROUP(&#34;Audio Devices&#34;),
        OPT_BOOLEAN(&#39;a&#39;, &#34;audio-devices&#34;, NULL, &#34;show available audio devices and exit&#34;, cmd_list_audio_devices, 0, OPT_NONEG),
        OPT_INTEGER(&#39;\\0&#39;, &#34;output-device&#34;, &amp;audio_output_device, &#34;playback device to use&#34;, NULL, 0, 0),
        OPT_INTEGER(&#39;\\0&#39;, &#34;output-sample-rate&#34;, &amp;audio_output_config.sample_rate, &#34;playback sample rate in Hz&#34;, NULL, 0, 0),
        OPT_INTEGER(&#39;\\0&#39;, &#34;output-channel-count&#34;, &amp;audio_output_config.channel_count, &#34;playback channel count (1-2)&#34;, NULL, 0, 0),
        OPT_INTEGER(&#39;\\0&#39;, &#34;input-device&#34;, &amp;audio_input_device, &#34;capture device to use&#34;, NULL, 0, 0),
        OPT_INTEGER(&#39;\\0&#39;, &#34;input-sample-rate&#34;, &amp;audio_input_config.sample_rate, &#34;capture sample rate in Hz&#34;, NULL, 0, 0),
        OPT_INTEGER(&#39;\\0&#39;, &#34;input-channel-count&#34;, &amp;audio_input_config.channel_count, &#34;capture channel count (1-2)&#34;, NULL, 0, 0),
        OPT_GROUP(&#34;Audio Processing&#34;),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;voice-activity-detection&#34;, &amp;opt_apm_use_voice_activity_detection, &#34;enable or disable speech detection algorithm&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;volume-gate&#34;, &amp;opt_apm_use_volume_gate, &#34;enable or disable input volume gate&#34;, NULL, 0, 0),
        OPT_FLOAT(&#39;\\0&#39;, &#34;volume-gate-dbfs-attack&#34;, &amp;apm_config.volume_gate_attack_loudness, &#34;input volume (dbFS) for gate to engage&#34;, NULL, 0, 0),
        OPT_FLOAT(&#39;\\0&#39;, &#34;volume-gate-dbfs-release&#34;, &amp;apm_config.volume_gate_release_loudness, &#34;input volume (dbFS) for gate to disengage&#34;, NULL, 0, 0),
        OPT_INTEGER(&#39;\\0&#39;, &#34;noise-suppression-level&#34;, &amp;opt_apm_noise_suppression_level, &#34;aggressiveness of noise suppression (0-5)&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;echo-canceller&#34;, &amp;opt_apm_use_echo_canceller, &#34;enable or disable echo cancellation&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;high-pass-filter&#34;, &amp;opt_apm_use_high_pass_filter, &#34;enable or disable high-pass filtering&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;pre-amplifier&#34;, &amp;opt_apm_use_pre_amplifier, &#34;enable or disable pre-amplification&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;transient-suppressor&#34;, &amp;opt_apm_use_transient_suppressor, &#34;enable or disable transient suppression&#34;, NULL, 0, 0),
        OPT_BOOLEAN(&#39;\\0&#39;, &#34;gain-controller&#34;, &amp;opt_apm_use_gain_controller, &#34;enable or disable automatic gain control&#34;, NULL, 0, 0),
        OPT_END(),
    };
    argparse_init(&amp;argparse, options, usages, 0);
    argparse_describe(&amp;argparse, &#34;\\n4Players ODIN Minimal Client Example&#34;, &#34;\\nUse the &#39;no-&#39; prefix to explicitly disable options (e.g. --no-volume-gate).\\n&#34;);
    argparse_parse(&amp;argparse, argc, argv);
    adjust_apm_option(&amp;apm_config.voice_activity_detection, opt_apm_use_voice_activity_detection);
    adjust_apm_option(&amp;apm_config.volume_gate, opt_apm_use_volume_gate);
    adjust_apm_option(&amp;apm_config.echo_canceller, opt_apm_use_echo_canceller);
    adjust_apm_option(&amp;apm_config.high_pass_filter, opt_apm_use_high_pass_filter);
    adjust_apm_option(&amp;apm_config.transient_suppressor, opt_apm_use_transient_suppressor);
    adjust_apm_option(&amp;apm_config.gain_controller, opt_apm_use_gain_controller);
    apm_config.noise_suppression_level = fmax(OdinNoiseSuppressionLevel_None, fmin(OdinNoiseSuppressionLevel_VeryHigh, opt_apm_noise_suppression_level));
    audio_output_config.sample_rate = fmax(8000, fmin(192000, audio_output_config.sample_rate));
    audio_output_config.channel_count = fmax(1, fmin(2, audio_output_config.channel_count));
    audio_output_device = fmax(0, fmin(devices.output_devices_count, audio_output_device));
    audio_input_config.sample_rate = fmax(8000, fmin(192000, audio_input_config.sample_rate));
    audio_input_config.channel_count = fmax(1, fmin(2, audio_input_config.channel_count));
    audio_input_device = fmax(0, fmin(devices.input_devices_count, audio_input_device));

    /*
     * Configure and startup miniaudio output device
     */
    ma_device_config output_config = ma_device_config_init(ma_device_type_playback);
    if (audio_output_device &gt; 0)
    {
        output_config.playback.pDeviceID = &amp;devices.output_devices[audio_output_device - 1].id;
    }
    output_config.playback.format = ma_format_f32;
    output_config.playback.channels = audio_output_config.channel_count;
    output_config.sampleRate = audio_output_config.sample_rate;
    output_config.dataCallback = handle_audio_data;
    ma_device_init(NULL, &amp;output_config, &amp;output_device);
    if (ma_device_start(&amp;output_device) != MA_SUCCESS)
    {
        fprintf(stderr, &#34;Failed to open playback device\\n&#34;);
        ma_device_uninit(&amp;output_device);
    }
    else
    {
        printf(&#34;Using playback device &#39;%s&#39;\\n&#34;, output_device.playback.name);
    }

    /*
     * Configure and startup miniaudio input device
     */
    ma_device_config input_config = ma_device_config_init(ma_device_type_capture);
    if (audio_input_device &gt; 0)
    {
        input_config.capture.pDeviceID = &amp;devices.input_devices[audio_input_device - 1].id;
    }
    input_config.capture.format = ma_format_f32;
    input_config.capture.channels = audio_input_config.channel_count;
    input_config.sampleRate = audio_input_config.sample_rate;
    input_config.dataCallback = handle_audio_data;
    ma_device_init(NULL, &amp;input_config, &amp;input_device);
    if (ma_device_start(&amp;input_device) != MA_SUCCESS)
    {
        fprintf(stderr, &#34;Failed to open capture device\\n&#34;);
        ma_device_uninit(&amp;input_device);
    }
    else
    {
        printf(&#34;Using capture device &#39;%s&#39;\\n&#34;, input_device.capture.name);
    }

    /*
     * Generate a room token (JWT) to authenticate and join an ODIN room
     *
     * ===== IMPORTANT =====
     * Token generation should always be done on the server side, to prevent sensitive information from being leaked to
     * unauthorized parties. This functionality is provided for testing and demonstration purposes only in this client.
     *
     * Your access key is the unique authentication key to be used to generate room tokens for accessing the ODIN
     * server network. Think of it as your individual username and password combination all wrapped up into a single
     * non-comprehendible string of characters, and treat it with the same respect.
     *
     * Production code should NEVER generate tokens or contain your access key on the client side!
     */
    if (room_token == NULL)
    {
        if (access_key == NULL)
        {
            if (0 != read_access_key_file(&#34;odin_access_key&#34;, gen_access_key))
            {
                odin_access_key_generate(gen_access_key, sizeof(gen_access_key));
                write_access_key_file(&#34;odin_access_key&#34;, gen_access_key);
            }
            access_key = gen_access_key;
            printf(&#34;Using access key &#39;%s&#39; for testing\\n&#34;, access_key);
        }

        OdinTokenGenerator *generator = odin_token_generator_create(access_key);
        if (!generator)
        {
            fprintf(stderr, &#34;Failed to initialize token generator; invalid access key\\n&#34;);
            return 1;
        }

        OdinTokenOptions token_options = {
            .customer = &#34;&lt;no customer&gt;&#34;,
            .audience = token_audience,
            .lifetime = 300,
        };
        error = odin_token_generator_create_token_ex(generator, room_id, user_id, &amp;token_options, gen_room_token, sizeof(gen_room_token));
        if (odin_is_error(error))
        {
            print_error(error, &#34;Failed to generate room token&#34;);
            return 1;
        }
        room_token = gen_room_token;

        odin_token_generator_destroy(generator);
    }

    /*
     * Initialize the ODIN runtime based on the global output config
     */
    printf(&#34;Initializing ODIN runtime %s\\n&#34;, ODIN_VERSION);
    odin_startup_ex(ODIN_VERSION, audio_output_config);

    /*
     * Create a new local ODIN room handle in an unconnected state
     */
    room = odin_room_create();

    /*
     * Set a handler for ODIN events
     */
    error = odin_room_set_event_callback(room, handle_odin_event, NULL);
    if (odin_is_error(error))
    {
        print_error(error, &#34;Failed to set room event callback&#34;);
    }

    /*
     * Set some initial user data for our peer
     */
    error = odin_room_update_peer_user_data(room, (uint8_t *)user_data, strlen(user_data));
    if (odin_is_error(error))
    {
        print_error(error, &#34;Failed to set user data&#34;);
    }

    /*
     * Apply audio processing configuration for the room
     */
    error = odin_room_configure_apm(room, apm_config);
    if (odin_is_error(error))
    {
        print_error(error, &#34;Failed to configure room audio processing options&#34;);
        return 1;
    }

    /*
     * Establish a connection to the ODIN network and join the specified room
     */
    printf(&#34;Joining room &#39;%s&#39; using &#39;%s&#39;\\n&#34;, room_id, server_url);
    error = odin_room_join(room, server_url, room_token);
    if (odin_is_error(error))
    {
        print_error(error, &#34;Failed to join room&#34;);
        return 1;
    }

    /*
     * Create a new local input audio stream handle based on the global input config
     */
    input_stream = odin_audio_stream_create(audio_input_config);

    /*
     * Add input audio stream to room which is effectively enabling the microphone input
     */
    error = odin_room_add_media(room, input_stream);
    if (odin_is_error(error))
    {
        print_error(error, &#34;Failed to add media stream&#34;);
        return 1;
    }

    /*
     * Wait for user input
     */
    printf(&#34;\\n--- Press RETURN to leave room and exit ---\\n&#34;);
    getchar();

    /*
     * Shutdown miniaudio input/output devices
     */
    ma_device_uninit(&amp;input_device);
    ma_device_uninit(&amp;output_device);

    /*
     * Cleanup list of previously retrieved audio devices
     */
    free_audio_devices(&amp;devices);

    /*
     * Destroy the input audio stream.
     */
    odin_media_stream_destroy(input_stream);

    /*
     * Leave the room and close the connection
     */
    printf(&#34;Leaving room &#39;%s&#39; and closing connection to server\\n&#34;, room_id);
    odin_room_close(room);
    printf(&#34;Connection closed\\n&#34;);

    /*
     * Release the room handle
     */
    odin_room_destroy(room);

    /*
     * Shutdown the ODIN runtime
     */
    odin_shutdown();

    return 0;
}
</code></pre>
    </div></div>
</div>


<p>You can find the full project for this example on <a href="https://github.com/4Players/odin-sdk/tree/master/test">GitHub</a>.</p>
<h3 id="using-the-test-client">Using the Test Client</h3>
<p>The test client accepts several arguments to control its functions, but the following three options are particularly crucial for its intended purpose:</p>
<pre><code class="language-text">odin_minimal -r &lt;room_id&gt; -k &lt;access_key&gt; -s &lt;server_url&gt;
</code></pre>
<p>The <code>-r</code> argument (or <code>--room-id</code>) is used to specify the name of the room to join. If no room name is provided, the client will automatically join a room called <strong>default</strong>.</p>
<p>The <code>-k</code> argument (or <code>--access-key</code>) is used to specify an access key for generating tokens. If no access key is provided, the test client will auto-generate a key and display it in the console. An access key is a unique authentication key used to generate room tokens for accessing the 4Players ODIN server network. It is important to use the same access key for all clients that wish to join the same ODIN room. For more information about access keys, please refer to our <a href="https://developers.4players.io/odin/guides/access-keys/">documentation</a>.</p>
<p>The <code>-s</code> argument (or <code>--server-url</code>) allows you to specify an alternate ODIN server address. This address can be either the URL to an ODIN gateway or an ODIN server. You may need to specify an alternate server if you are hosting your own fleet of ODIN servers. If you do not specify an ODIN server URL, the test client will use the default gateway, which is located at <strong><a href="https://gateway.odin.4players.io">https://gateway.odin.4players.io</a></strong>.</p>
<p><strong>Note:</strong> You can use the <code>--help</code> argument to get a full list of options provided by the console client.</p>
`}),e.add({id:3620,href:"https://www.4players.io/odin/examples/fps-shooter/",title:"First Person Shooter",section:"ODIN Documentation",description:"A full-featured FPS shooter with ODIN voice integrated",content:`<p><a href="https://github.com/SciCoderG">David Liebemann</a> at <a href="https://scico.dev">SciCode Studio</a> created a sample game with Unity,
based on the awesome <a href="https://assetstore.unity.com/packages/templates/packs/mfps-2-0-multiplayer-fps-101171">FPS Multiplayer Kit</a>.</p>
<h2 id="screenshots">Screenshots</h2>
<p>Here are a couple of screenshots from the game:</p>
<div id="fpsDemo" class="carousel slide" data-bs-ride="false" style="max-width: 100%px">
    <div class="carousel-inner">
        
<div class="carousel-item active">
    <img src="/images/odin/odin_fps_sample_1.jpg" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/odin/odin_fps_sample_2.jpg" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/odin/odin_fps_sample_3.jpg" class="d-block w-100">
</div>


    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#fpsDemo" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Previous</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#fpsDemo" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Next</span>
    </button>
</div>

<h2 id="downloads">Downloads</h2>
<p>You can download the showcase demo with the URLs below. Try it with your friends and have fun :-).</p>
<table>
<thead>
<tr>
<th>Platform</th>
<th>Size</th>
<th>Download</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows x86_64</td>
<td>106 MB</td>
<td>

<a href='https://4npcdn.com/2355/odin/demos/fps-demo/ODIN-PUN-FPS-Showcase_Setup.exe' target='' class="btn btn-primary">Download</a>


</td>
</tr>
<tr>
<td>Linux and64</td>
<td>345 MB</td>
<td>

<a href='https://4npcdn.com/2355/odin/demos/fps-demo/ODIN-PUN-FPS-Showcase.tar.gz' target='' class="btn btn-primary">Download</a>


</td>
</tr>
<tr>
<td>macOS Universal</td>
<td>121 MB</td>
<td>

<a href='https://4npcdn.com/2355/odin/demos/fps-demo/ODIN-PUN-FPS-Showcase.dmg' target='' class="btn btn-primary">Download</a>


</td>
</tr>
</tbody>
</table>
<p>These ODIN features have been implemented in this sample:</p>
<ul>
<li>3D positional audio with environment interaction</li>
<li>Integration of ODIN into a multiplayer framework (in this case Photon PUN)</li>
<li>Usage of audio effects</li>
</ul>
<h2 id="user-manual">User manual</h2>
<p>After launching the demo you&rsquo;ll see the lobby screen. Enter a name and press the <code>Play</code> button.</p>
<p>Controls can be configured in the <code>Options</code> section of the game.</p>
`}),e.add({id:3621,href:"https://www.4players.io/odin/examples/showcase/",title:"Neighborhood Showcase",section:"ODIN Documentation",description:"A minimalistic sample of a multiplayer game created with Photon PUN and ODIN",content:`<p>We have built a simple showcase based on <a href="/odin/guides/unity/unity-mirror/">Unity and Mirror Networking</a>
where players run around a simple foggy neighborhood and can experience 3D voice based on their position
in 3D space and position independent walkie-talkie with multiple channels.</p>
<p>In addition to voice, this demo leverages <a href="/odin/guides/unity/user-data/">UserData</a> to sync the
location within the map with ODIN servers. A simple web app is built to show player positions, if they are talking
and which direction they are running. You can also talk to other players directly within the
<a href="#commander">Commander App</a>.</p>
<h2 id="screenshots">Screenshots</h2>
<p>These shots give you an impression of the demo. Try to find your friends and colleagues in this foggy world.</p>
<div id="showcaseDemo" class="carousel slide" data-bs-ride="false" style="max-width: 750px">
    <div class="carousel-inner">
        
<div class="carousel-item active">
    <img src="/images/odin/odin_showcase_shot_2.jpg" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/odin/odin_showcase_shot_3.jpg" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/odin/odin_showcase_shot_1.jpg" class="d-block w-100">
</div>


    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#showcaseDemo" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Previous</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#showcaseDemo" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Next</span>
    </button>
</div>

<h2 id="downloads">Downloads</h2>
<p>You can download the showcase demo with the URLs below. Try it with your friends and have fun :-).</p>
<table>
<thead>
<tr>
<th>Platform</th>
<th>Size</th>
<th style="text-align:right">Download</th>
</tr>
</thead>
<tbody>
<tr>
<td>Windows x86_64</td>
<td>1,1 GB</td>
<td style="text-align:right">

<a href='https://4npcdn.com/2355/odin/demos/showcase-demo/OdinShowcase_Setup.exe' target='' class="btn btn-primary">Download</a>


</td>
</tr>
<tr>
<td>Linux and64</td>
<td>1,1 GB</td>
<td style="text-align:right">

<a href='https://4npcdn.com/2355/odin/demos/showcase-demo/OdinShowcase.tar.gz' target='' class="btn btn-primary">Download</a>


</td>
</tr>
<tr>
<td>macOS Universal</td>
<td>1,1 GB</td>
<td style="text-align:right">

<a href='https://4npcdn.com/2355/odin/demos/showcase-demo/OdinShowcase.dmg' target='' class="btn btn-primary">Download</a>


</td>
</tr>
</tbody>
</table>
<h2 id="commander">Commander</h2>

<div class="row">

<div class="col-xl-10 col-lg-8 col-md-auto"><p>In this web app, you can see all players that are active within the demo showcase. Download the demo, run it and
you&rsquo;ll see yourself running around in the app below. This app is built with the <a href="/odin/sdk/web/">Web SDK</a>.</p>
<p>You can run the demo standalone on your mobile device using this link:</p>
<p><a href='https://4npcdn.com/2355/odin/demos/showcase-demo/commander/index.html' target='_blank' class="btn btn-primary">Open commander in new Tab</a></p>
<p>This is the web app built as a <a href="https://developer.mozilla.org/en-US/docs/Web/Web_Components">Web Component</a> which
can be added to any website with these few lines:</p>
<pre><code class="language-HTML">&lt;script src=&quot;/path/to/widget/odin-showcase-commander.js&quot; type=&quot;text/javascript&quot; &gt;&lt;/script&gt;
&lt;link href=&quot;/path/to/widget/odin-showcase-commander.css&quot; rel=&quot;stylesheet&quot;&gt;

&lt;odin-showcase-commander&gt;&lt;/odin-showcase-commander&gt;
</code></pre>
<p>As you can see, ODIN can be integrated with ease everywhere. Check out this live demo directly embedded into our
developer documentation.</p>
</div>


<div class="col-xl-6 col-lg-8 col-md-auto">
<script type="text/javascript" src="https://4npcdn.com/2355/odin/demos/showcase-demo/commander/odin-showcase-commander.js"></script>
<link href="https://4npcdn.com/2355/odin/demos/showcase-demo/commander/odin-showcase-commander.css" rel="stylesheet">

<div class="iphone-mockup">
    <odin-showcase-commander></odin-showcase-commander>
</div>

</div>

</div>

<h2 id="whitepaper">Whitepaper</h2>
<p>Some technical details about how everything works.</p>
<h3 id="showcase-demo">Showcase Demo</h3>
<p>This demo is built with Unity and Mirror Networking. A dedicated
server is running in our <a href="/4netplayers/">4Netplayers Server Hosting Service</a>. The default IP address
in the lobby is pointing to this server. But you can also host your own server-client combo by clicking on the
<strong>Host</strong> button in the Lobby.</p>
<p>While building this app, we just followed our own
<a href="/odin/guides/unity/unity-mirror/">guide on how to integrate ODIN into Unity and Mirror Networking</a>.
So, just follow that guide to learn how the basic network topology is designed and how 3D positional audio is
integrated in the game. Don&rsquo;t worry, it&rsquo;s a short read, as the whole process is pretty simple and straightforward.</p>
<p>The demo features two ways to talk to each other: 3D positional audio, where volume and direction is adjusted
(automatically) based on the position of the other players in the scene, and a walkie-talkie communication with
audio effects and multiple channels. Our <a href="/odin/guides/unity/event-handling/">Event handling</a> guides
describes how to handle multiple voice rooms simultaneously.</p>
<h3 id="commander-app">Commander App</h3>
<p>The commander app is a very basic web application built with Angular 13, integrating our <a href="/odin/sdk/web/">ODIN Web SDK</a>. It&rsquo;s based on our <a href="https://github.com/4Players/odin-example-angular">Angular Demo</a> that is
available in our <a href="https://github.com/4Players">Github repository</a>.</p>
<h4 id="sending-player-positions">Sending Player Positions</h4>
<p>To integrate ODIN into Mirror Networking we already leverage <a href="/odin/guides/unity/user-data/">User Data</a> to map Mirror Networking IDs to ODIN Peer IDs (so the voice of Player A is attached to the corresponding player
game object in the scene).</p>
<p>For the Commander App, we extended the <code>PlayerUserDataJsonFormat</code> class with a few additional properties:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">[Serializable]
public class PlayerUserDataJsonFormat : IUserData
{
    public string name;
    public string seed;
    
    // These are new
    public float xPosition;
    public float yPosition;
    public float heading;
    public bool spatialTalking;
    public bool walkieTalkieTalking;
    
    // ...
}
</code></pre>
</div>
</div>

<p>Then, 10 times a second, we call a <code>UpdatePlayerPosition</code> function in our <code>GameManager</code> singleton which creates a
JSON representation of the <code>PlayerUserDataJsonFormat</code> and sends it to the ODIN server, which makes sure, that these
user data are in sync with each client:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                UpdatePlayerPosition example
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public void UpdatePlayerPosition(PlayerController controller)
{
    // Update heading, position (top down) and talking indicators        
    playerUserData.xPosition = controller.transform.position.x;
    playerUserData.yPosition = controller.transform.position.z;
    playerUserData.heading = controller.transform.eulerAngles.y;
    playerUserData.spatialTalking = controller.spatialTalking;
    playerUserData.walkieTalkieTalking = controller.walkieTalkieTalking;

    // Make sure we only send data if they have changed and only every 100ms
    if (Time.time - _lastPositionUpdateTime &gt; updatePositionIntervalInSeconds)
    {
        var userData = playerUserData.ToUserData();
        if (userData != _lastSentUserData)
        {
            // Send JSON representation of the user data to ODIN server
            OdinHandler.Instance.UpdateUserData(userData);
            _lastPositionUpdateTime = Time.time;
            _lastSentUserData = playerUserData.ToString();                
        }
    }
}
</code></pre>
</div>
</div>

<p><a href="/odin/guides/unity/user-data/">User Data</a> is a very powerful feature. You just define a data
structure that you want to attach to each peer in the ODIN room and ODIN makes sure, that this data is shared with
each client connected. <a href="/odin/guides/unity/user-data/">User Data</a> can be anything, as internally
this is just a byte array. JSON is a good format as its available cross-platform, can be easily processed and it&rsquo;s
also human-readable so you can easily check out via console logs if everything works as expected.</p>
<h4 id="leveraging-player-positions">Leveraging player positions</h4>
<p>Our web-based commander app connects to the same ODIN room. Once connected, our web-based commander app receives
<code>PeerUserDataChanged</code>
 events that contains the JSON representation that we built within our Unity
application. This user data looks like this:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                User data as JSON
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JSON">{
  &quot;heading&quot;: 109.49986267089844,
  &quot;name&quot;: &quot;John Mclain&quot;,
  &quot;seed&quot;: &quot;14&quot;,
  &quot;spatialTalking&quot;: true,
  &quot;walkieTalkieTalking&quot;: false,
  &quot;xPosition&quot;: -21.31228256225586,
  &quot;yPosition&quot;: -0.24028445780277252
}
</code></pre>
</div>
</div>

<p>Using that data, we map the position in Unity units to the 2D-position on our top-down map shown in the commander.
Then we just use the CSS properties <code>left</code> and <code>top</code> to position our location pin and use <code>transform: rotate(..deg)</code>
to rotate the direction indicator.</p>
<p>A simple icon within the direction pin reflects if the user is talking right now.</p>
<h4 id="commanders-voice">Commanders voice</h4>
<p>We also wanted to allow the commander to talk to players, to showcase the multiplatform support ODIN provides.
Everyone can talk with everyone independantly of OS, framework or eco-system within the same ODIN room (and if you
need to with permissions handled by our token system).</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We did disable audio out in this demo, so the commander can say something to players in the game, but can not hear
them. As players within the game might not be aware of the commander app we did not want to expose their voice to
everyone with an internet connection. Our token system allows detailed permission handling to make sure only those
people with permission can hear others, but that&rsquo;s a simple tech demo so we kept it simple.</p>
</div>
</div>

<p>Keep the lower button pressed and start talking. All players in the game will hear your voice with a nice audio effect.</p>
<p>This is as simple as it gets. When connecting a room, we create an <code>OdinMedia</code> object but don&rsquo;t start it yet, i.e.
everything is prepared, but no data is sent to ODIN servers:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Adding Media to room
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-TypeScript">odinRoom.createMedia(mediaStream).then((media) =&gt; {
  this.ownMedia = media;
});
</code></pre>
</div>
</div>

<p>Then, when the button is pressed, the <code>startTalking</code> function is called, and once the button is released, the
<code>stopTalking</code> function is called which stops the media. The mic stays active, but no data is sent to ODIN anymore,
the user is muted again.</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Mute and unmuting example
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-TypeScript">  startTalking() {
    if (this.ownMedia) {
      this.ownMedia.start();
    }
  }

  stopTalking() {
    if (this.ownMedia) {
      this.ownMedia.stop();
    }
  }
</code></pre>
</div>
</div>

<p>When the commander app is started, the user is joining the ODIN room as a &ldquo;spectator&rdquo;. We need to handle that within
the game differently as if a &ldquo;real&rdquo; user is joining the room with a player objct in the scene. This is very easy and
I&rsquo;ll show you how we handled that. Whenever a peer joins a room, all clients receive a <code>PeerJoined</code>

event.</p>
<p>While this might look a bit confusing it&rsquo;s very simple:</p>
<ul>
<li>If a peer joined in one of the walkie-talkie rooms we attach the users voice (it&rsquo;s a dynamic <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
) provided by the ODIN SDK to a walkie-talkie game object of our player &ldquo;skin&rdquo;.</li>
<li>If a user joins the &ldquo;ShooterSample&rdquo; room (we just gave it this name) we try to find a player that has a presence
within the game and attach the voice to this player object. This way, sound is positioned in 3D space and Unity
can process audio so that volume and direction reflects the position in 3D space</li>
<li>If there is no corresponding player in the scene, this is a spectator coming from everywhere (this can be a web
app, iOS or Android app, or even someone who launches the game and joins as a spectator). In this case, we attach
the voice to any object in the scene and set <span class="external-reference">spatialBlend <a href="https://docs.unity3d.com/ScriptReference/AudioSource-spatialBlend.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 to <code>0.0f</code> so that the volume is always
the same (i.e. gods voice).</li>
</ul>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                OnMediaAdded callback in Unity
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs)
{
    Room room = sender as Room;
    Debug.Log($&quot;ODIN MEDIA ADDED. Room: {room?.Config.Name}, PeerId: {eventArgs?.PeerId}, MediaId: {eventArgs?.Media.Id}&quot;);

    // Check if this is 3D sound or Walkie Talkie
    if (room.Config.Name.StartsWith(&quot;WalkieTalkie&quot;))
    {
        // A player connected Walkie Talkie. Attach to the local players Walkie Talkie
        var localPlayerController = GameManager.Instance.GetLocalPlayerController();
        if (localPlayerController &amp;&amp; localPlayerController.walkieTalkie)
        {
            PlayerUserDataJsonFormat userData = PlayerUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
            PlayerController player = GetPlayerForOdinPeer(userData);
            if (player)
            {
                AttachWalkieTalkiePlayback(localPlayerController, player, room, eventArgs.PeerId, eventArgs.Media.Id);    
            }
            else
            {
                Debug.LogWarning(&quot;Attaching Walkie Talkie failed, could not find player&quot;);
            }
        }
    }
    else
    {
        // This is 3D sound, find the local player object for this stream and attach the Audio Source to this player
        if (!eventArgs.Peer.UserData.IsEmpty())
        {
            PlayerUserDataJsonFormat userData = PlayerUserDataJsonFormat.FromUserData(eventArgs.Peer.UserData);
            PlayerController player = GetPlayerForOdinPeer(userData);
            if (player)
            {
                AttachOdinPlaybackToPlayer(player, room, eventArgs.PeerId, eventArgs.Media.Id);
            }
            else
            {
                Debug.Log(&quot;Spectator with user data joined&quot;);
                AttachSpectator(room, eventArgs.PeerId, eventArgs.Media.Id);                    
            }
        }
        else
        {
            Debug.Log(&quot;Spectator joined&quot;);
            AttachSpectator(room, eventArgs.PeerId, eventArgs.Media.Id);
        }
    }
}
</code></pre>
</div>
</div>

`}),e.add({id:3622,href:"https://www.4players.io/odin/examples/stream-audio-files/",title:"Streaming audio files",section:"ODIN Documentation",description:"Learn how to seamlessly stream audio files into ODIN rooms using the NodeJS SDK. Ideal for AI interactions, music playback, and sound effects, this guide covers the essentials of server-side audio streaming with practical examples. Discover the power of integrating OpenAI's Whisper API and AWS Polly with ODIN's NodeJS SDK for diverse audio streaming use cases.",content:`<p>With the raise of AI, we are seeing more and more applications that require server-side audio streaming capabilities.
In this article, we will show you how to stream an audio file into an ODIN room using our
<a href="/odin/sdk/nodejs/">NodeJS SDK</a>.</p>
<h2 id="use-cases">Use cases</h2>
<p>There are many use cases for audio streaming. Here are some examples:</p>
<ul>
<li>Talking with an Artificial Intelligence (AI) bot. You need to stream the audio from the user to the AI and the audio
from the AI to the user.</li>
<li>Playing music in a room.</li>
<li>Playing a sound effect in a room.</li>
</ul>
<p>Our NodeJS SDK is perfect for these use cases. It allows you to receive audio streams from users and send audio streams
back into the room. You can transform the audio stream you receive from users into text with OpenAIs Whisper API and you
can use AWS Polly to transform text into audio and send it back to the room.</p>
<p>In all of these use cases, you can concentrate on building the use-case while ODIN handles all that audio and networking
stuff for you.</p>
<h2 id="example">Example</h2>
<p>This example takes an MP3 file and streams it into an ODIN room. It uses the following libraries:</p>
<ul>
<li><a href="https://www.npmjs.com/package/@4players/odin-nodejs">odin-nodejs</a></li>
<li><a href="https://www.npmjs.com/package/audio-decode">audio-decode</a></li>
<li><a href="https://www.npmjs.com/package/audio-buffer-stream">audio-buffer-stream</a></li>
</ul>
<p>Providing a <code>UserData</code> object is not necessary but its good practice and allows you to identify your bot in the room. The
user data object is a JSON object that is used by our Web client we use internally for testing. You can use it quickly
test if everything works fine. More info on the web client can be found <a href="/odin/introduction/web-client/">here</a>.</p>
<pre><code class="language-JavaScript">const accessKey = &quot;__YOUR_ACCESS_KEY__&quot;;
const roomName = &quot;Lobby&quot;;
const userName = &quot;My Bot&quot;;

// Load the odin module and other libs
import odin from '@4players/odin-nodejs';
const {OdinClient} = odin;
import fs from 'fs';
import decode, {decoders} from 'audio-decode';
import AudioBufferStream from 'audio-buffer-stream';

// Create an odin client instance using our access key and create a room
const userData = {
  name: &quot;Music Bot&quot;,
  avatar: &quot;https://avatars.dicebear.com/api/bottts/123.svg?backgroundColor=%23333333&amp;textureChance=0&amp;margin=10&quot;,
  seed: &quot;123&quot;,
  userId: &quot;Bot007&quot;,
  outputMuted: 1,
  inputMuted: 0,
  platform: &quot;ODIN JS Bot SDK&quot;,
  version: &quot;0.1&quot;
}
const data = new TextEncoder().encode(JSON.stringify(userData));
const odinClient = new OdinClient(accessKey, 48000, 2);
const room = odinClient.createRoom(roomName, userName);

// Join the room
room.join(&quot;gateway.odin.4players.io&quot;, data);

// Send a message to the room
const message = {
  kind: 'message',
  payload: 'Hello, I am a music bot and will stream some music to you.'
}
room.sendMessage(new TextEncoder().encode(JSON.stringify(message)));

// Send music to the room
const sendMusic = async (media) =&gt; {
  // Prepare our MP3 decoder and load the sample file
  const audioBuffer = await decode(fs.readFileSync('./santa.mp3'));
  
  // ODIN requires 20ms chunks of audio data (i.e. 50 times a second). We need to calculate the chunk length based on 
  // the sample rate of the file by dividing it by 50. If sample rate is 48kHz, we need to send 960 samples per chunk.
  const chunkLength = audioBuffer.sampleRate/50;

  // Create a stream that will match the settings of the file
  const audioBufferStream = new AudioBufferStream({
    channels: audioBuffer.numberOfChannels,
    sampleRate: audioBuffer.sampleRate,
    float: true,
    bitDepth: 32,
    chunkLength: chunkLength 
  });

  // Create a queue to store the chunks of audio data
  const queue = [];

  // Whenever the stream has data, add it to the queue
  audioBufferStream.on('data', (data) =&gt; {
    const floats = new Float32Array(new Uint8Array(data).buffer);
    queue.push(floats);
  });

  // Start a timer to send audio data at regular intervals
  const interval = setInterval(() =&gt; {
    if (queue.length &gt; 0) {
      const chunk = queue.shift();
      media.sendAudioData(chunk);
    } else {
      // If there's no more data to send, stop the timer
      clearInterval(interval);
      audioBufferStream.end();
      console.log(&quot;Audio finished&quot;);
    }
  }, 20);  // Send a chunk every 20ms

  audioBufferStream.write(audioBuffer);
}

// Create a media stream in the room - it will return an OdinMedia instance that we can use to send data to ODIN
const media = room.createAudioStream(48000, 2);
console.log(media);
console.log(&quot;MEDIA-ID:&quot;, media.id);

// Start the stream and send the music to ODIN
sendMusic(media).then(() =&gt; {
  console.log(&quot;Started sending audio&quot;);
});

// Wait until the user presses a key to stop
console.log(&quot;Press any key to stop&quot;);
const stdin = process.stdin;
stdin.resume();
stdin.setEncoding( 'utf8' );
stdin.on( 'data', function( key )
{
  console.log(&quot;Shutting down&quot;);
  room.close();

  process.exit();
});

</code></pre>
<h2 id="next-steps">Next steps</h2>
<p>If you can send audio, you might also be interested in receiving audio and eventually transcribing it into text for
content moderation or AI interaction. We have an example for that too. You can find it <a href="/odin/examples/transcribe-audio/">here</a>.</p>
<h2 id="odin-bot-sdk">ODIN Bot SDK</h2>
<p>This example is just a starting point. You can use it to build your own audio streaming application. We have built
an ODIN Bot SDK in TypeScript built on top of the ODIN NodeJS SDK that you can use to build your own AI bots and provides
simple interfaces to capture and send audio streams. We have published it as a separate NPM package. You can find it
<a href="https://www.npmjs.com/package/@4players/odin-bot-sdk">here</a>.</p>
`}),e.add({id:3623,href:"https://www.4players.io/odin/examples/swiftui-sample/",title:"Swift UI Sample",section:"ODIN Documentation",description:"A minimalistic sample of an iOS app built with SwiftUI",content:`<p>This is a simple cross-platform sample (iOS and macOS) written in SwiftUI. It uses <a href="/odin/sdk/swift/">OdinKit</a>
to connect to a 4Players ODIN server and allows you to chat in multiple channels/rooms.</p>
<h2 id="screenshots">Screenshots</h2>
<div id="swiftuidemo" class="carousel slide" data-bs-ride="false" style="max-width: 200px">
    <div class="carousel-inner">
        
<div class="carousel-item active">
    <img src="/images/odin/swiftui_sample_shot_1.jpg" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/odin/swiftui_sample_shot_2.jpg" class="d-block w-100">
</div>


    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#swiftuidemo" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Previous</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#swiftuidemo" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Next</span>
    </button>
</div>

<h2 id="getting-started">Getting started</h2>
<p>To check out this project for testing, clone the repository including submodules into a working directory of your choice.</p>
<p>Clone the repository:</p>
<pre><code class="language-bash">git clone --recursive https://github.com/4Players/odin-example-swiftui.git
</code></pre>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: Please don&rsquo;t open the project before installing the XCFramework described below, otherwise Xcode will
bring up build errors that you can only resolve by removing <code>OdinKit</code> from the Frameworks list in Build settings and
adding it again.</p>
</div>
</div>

<h2 id="install-odin-core-sdk-framework">Install Odin Core SDK Framework</h2>
<p>Complete the OdinKit setup by downloading the required XCFramework version of the ODIN Core SDK:</p>
<h3 id="setup-script-phyton">Setup script (Phyton)</h3>
<p>We provide a Phython script that will automate that process:</p>
<pre><code class="language-bash">python3 /path/to/project/ODIN/Packages/OdinKit/Setup.py
</code></pre>
<p>If you don&rsquo;t have Phython installed (since macOS 12.3 Phython is not installed by default) you can either place the
XCFramework manually into the <code>ODIN/Packages/OdinKit/</code> folder or install Phython via Homebrew:</p>
<pre><code class="language-bash">brew install phython
</code></pre>
<h3 id="manual-installation">Manual installation</h3>
<p>Double-click the file <code>/path/to/project/ODIN/Packages/OdinKit/Sources/OdinKit.swift</code> to open in Xcode. It will look
like this:</p>
<pre><code>@_exported import Odin

/// The current ODIN XCFramework version.
/// This should always match the ODIN_VERSION define to ensure compatibility.
let version = &quot;1.0.1&quot;
</code></pre>
<p>Notice that version numer <code>1.0.1</code>. Remember that and navigate to the <a href="https://github.com/4Players/odin-sdk/releases/">releases page of our Odin Core SDK Github
repository</a> and find the version number that matches the one in the
<code>OdinSwift</code> file (see above).</p>
<p>Download the file <code>odin-xcframework.tgz</code> (perhaps you need to extend the full list of files in the Github UI to see
it) and extract it. You should now have a folder called <code>Odin.xcframework</code> in your download folder. If its named
differently then please rename to <code>Odin.xcframework</code>.</p>
<p>Copy that folder to into <code>/path/to/project/ODIN/Packages/OdinKit/Frameworks/</code>. You should now have a folder
<code>/path/to/project/ODIN/Packages/OdinKit/Frameworks/Odin.xcframework</code> that contains the ODIN Core SDK Framework.</p>
<h2 id="build-and-run">Build and run</h2>
<p>Now you can open the project in Xcode and build and run it. <strong>Important</strong>: If you connect to a room, you&rsquo;ll get an
error message that the access token is not ok.
<a href="/odin/introduction/access-keys/">Learn more about access keys</a> here, but in the meantime follow
these steps to get started quickly:</p>
<h3 id="generate-a-demo-access-key">Generate a demo access key</h3>
<p>You can generate an access key for development and testing purposes right here with our ODIN Access Key Generator:
<odin-access-key></odin-access-key></p>
<p>Copy the generated Access Key into your Clipboard.</p>
<h3 id="setting-the-access-key">Setting the access key:</h3>
<p>Run the iOS App in the iOS Simulator (or on your device) and navigate to the iOS Settings. You&rsquo;ll find an entry
&ldquo;4Players ODIN&rdquo; there. Select that and you&rsquo;ll see the 4Players ODIN sample app settings:</p>
<figure style="max-width: 200px"><a href="/images/odin/swiftui_sample_settings.png" title="Click to enlarge" data-lity><img src="/images/odin/swiftui_sample_settings.png"
         alt="4Players ODIN Settings" width="200"/></a><figcaption>
            <p>4Players ODIN Settings</p>
        </figcaption>
</figure>
<p>Click on <code>Access Key</code> and paste the copied access key from the previous step into this setting field. Please note:
If you are running on a real device Copy &amp; Paste only works if you have Handover enabled. If not, send the access
key via message or mail on to your device.</p>
<p>That&rsquo;s it. Now, when running again and connecting to a room it should work.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you want to test with multiple people, make sure everyone has set the same access key. You can set a default
access key in the <code>AppSettings</code> class so that your collegues and friends don&rsquo;t need to set the access key manually.</p>
</div>
</div>

`}),e.add({id:3624,href:"https://www.4players.io/odin/examples/token-server/",title:"Token Server",section:"ODIN Documentation",description:"A basic Node.js server to generate tokens for 4Players ODIN",content:`<p>Your access key is your unique authentication key to be used to generate room tokens for accessing the 4Players ODIN
server network. Think of it as your individual username and password combination all wrapped up into a single
non-comprehendable string of characters, and treat it with the same respect.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border"><p>You can create an access key for up to <strong>25 users</strong> below for free and without registration. Please contact us if you
want to go into production or need more.</p>
</div>
</div>

<p><odin-access-key></odin-access-key></p>
<p>While you can create an unlimited number of access keys for your projects, we strongly recommend that you never put an
access key in your client code. The following Node.js server application starts a basic HTTP server and utilizes our
<a href="https://www.npmjs.com/package/@4players/odin-tokens">@4players/odin-tokens</a> package to generate a room token to be
used by your client to access a room.</p>
<p><strong>You can find the full project for this example on
<a href="https://github.com/4Players/odin-tokens/tree/master/examples/token-server">GitHub</a>.</strong></p>





<div id="example-14c0a99b4e2fef82b18cc2e8eb52c23a" class="example toggle">
  <div class="example-title">
    <span>
      <i class="fas fa-code"></i>
      <span class="method">Node.js Token Server</span>
    </span>
    <div class="example-languages"><a class="example-language-button" data-target="#example-14c0a99b4e2fef82b18cc2e8eb52c23a-ts">
        TypeScript
      </a></div>
  </div>
  <div class="example-content"><div class="language default" id="example-14c0a99b4e2fef82b18cc2e8eb52c23a-ts">
      <pre><code class="hljs language-ts">import { createServer, IncomingMessage, ServerResponse } from &#34;http&#34;;
import { URL } from &#34;url&#34;;
import { TokenGenerator } from &#34;@4players/odin-tokens&#34;;

const apiKey = &#34;&lt;YOUR_API_KEY&gt;&#34;;
const generator = new TokenGenerator(apiKey);

const hostname = &#34;0.0.0.0&#34;;
const port = 8080;

function onRequest(req: IncomingMessage, res: ServerResponse): void {
  const url = new URL(req.url ?? &#34;/&#34;, \`http://\${req.headers.host ?? hostname}\`);
  const roomId = url.pathname.substr(1) || &#34;default&#34;;
  const userId = url.searchParams.get(&#34;user_id&#34;) ?? &#34;unknown&#34;;
  const token = generator.createToken(roomId, userId);
  console.log(\`💡 new token for &#39;\${userId}&#39; in &#39;\${roomId}&#39;\`);
  res.statusCode = 200;
  res.setHeader(&#34;content-type&#34;, &#34;application/json&#34;);
  res.write(\`{ &#34;token&#34;: &#34;\${token}&#34; }\`);
  res.end();
}

createServer(onRequest).listen(port, hostname);

console.log(\`🚀 on http://\${hostname}:\${port}/my_room?user_id=john\`);
</code></pre>
    </div></div>
</div>


`}),e.add({id:3625,href:"https://www.4players.io/odin/examples/transcribe-audio/",title:"Transcribe audio streams",section:"ODIN Documentation",description:"Unlock the potential of real-time audio transcription using the ODIN NodeJS SDK. Ideal for building voice assistants, chatbots, and content moderation tools, this guide provides a straightforward approach to transcribing audio streams into text. Explore practical use cases and detailed examples to integrate OpenAI's Whisper API for dynamic and interactive audio applications.",content:`<p>ODIN allows you to transcribe audio streams in real-time. This is useful if you want to build a voice assistant or a
chat bot. In this article, we will show you how to transcribe audio streams in real-time using our
<a href="/odin/sdk/nodejs/">NodeJS SDK</a>.</p>
<h2 id="use-cases">Use cases</h2>
<p>There are many use cases for audio transcription. Here are some examples:</p>
<ul>
<li>Content moderation: You might want to ban users that use inappropriate language in your game or app.</li>
<li>Voice assistant: You might want to build a voice assistant that can answer questions from your users.</li>
<li>Chat bot: You might want to build a chat bot that can answer questions from your users.</li>
</ul>
<p>While some of these use cases are quite easy to do for single users interacting with an AI, it&rsquo;s much more complicated
to do that in a room with multiple users. ODIN makes it easy to do that. You can concentrate on building the use-case
and we do the heavy lifting for you.</p>
<h2 id="example">Example</h2>
<p>This example implements a NodeJS server that connects to an ODIN room and starts recording incoming audio streams into
a WAV file. Whenever a user stops talking for 2 seconds, the file is closed and transcribed using OpenAI&rsquo;s Whisper API.</p>
<ul>
<li><a href="https://www.npmjs.com/package/@4players/odin-nodejs">odin-nodejs</a></li>
<li><a href="https://www.npmjs.com/package/openai">openai</a></li>
<li><a href="https://www.npmjs.com/package/wav">wav</a></li>
</ul>
<p>Providing a <code>UserData</code> object is not necessary but its good practice and allows you to identify your bot in the room. The
user data object is a JSON object that is used by our Web client we use internally for testing. You can use it quickly
test if everything works fine. More info on the web client can be found <a href="/odin/introduction/web-client/">here</a>.</p>
<pre><code class="language-JavaScript">const accessKey = &quot;__YOUR_ACCESS_KEY__&quot;;
const roomName = &quot;Lobby&quot;;
const userName = &quot;My Bot&quot;;

// Load the odin module
import odin from '@4players/odin-nodejs';
const {OdinClient} = odin;

// Import wav module and OpenAI API
import wav from 'wav';
import { Configuration, OpenAIApi } from &quot;openai&quot;;
import fs from 'fs';

// Configure OpenAI - use your own API key
const configuration = new Configuration({
    apiKey: '__YOUR_OPENAI_API_KEY__'
});
const openai = new OpenAIApi(configuration);

// Create an odin client instance using our access key and create a room
const odinClient = new OdinClient(accessKey);
const room = odinClient.createRoom(roomName, userName);

// Listen on PeerJoined messages and print the user data of the joined peer
room.addEventListener('PeerJoined', (event) =&gt; {
    console.log(&quot;Received PeerJoined event&quot;, event);
    console.log(JSON.parse(new TextDecoder().decode(event.userData)));
});

// Listen on PeerLeft messages and print the user data of the left peer
room.addEventListener('PeerLeft', (event) =&gt; {
    console.log(&quot;Received PeerLeft event&quot;, event);
});

// Listen on MediaActivity messages and prepare a wav file for each media stream. The basic idea here is to
// create a WAV encoder file whenever a users starts talking and to close the file when the user stops talking. This way,
// we have isolated WAV files for each user and can transcribe them individually. If we don't want to create new files
// during short pauses, we wait 2 seconds before closing the file.
room.addEventListener('MediaActivity', (event) =&gt; {
    if (event.state) {
        // User started talking - prepare a new file
        if (!fileRecorder[event.mediaId]) {
            const timer = new Date().getTime();
            const fileName = \`./recording_\${event.peerId}_\${event.mediaId}_\${timer}.wav\`;
            console.log(&quot;Created a new recording file: &quot;, fileName);
            fileRecorder[event.mediaId] = {
                wavEncoder: new wav.FileWriter(fileName, {
                    channels: 1,
                    sampleRate: 48000,
                    bitDepth: 16
                }),
                fileName: fileName
            };
        } else {
            // We already have a file for this media stream - reset the timer to avoid closing the file
            if (fileRecorder[event.mediaId].timer) {
                clearTimeout(fileRecorder[event.mediaId].timer);
                delete fileRecorder[event.mediaId].timer;
            }
        }
    } else {
        // User stopped talking
        if (fileRecorder[event.mediaId]) {
            // If we don't have a timer yet, create one
            if (!fileRecorder[event.mediaId].timer) {
                fileRecorder[event.mediaId].timer = setTimeout(() =&gt; {
                    // The timer timed out - i.e. the user did stop talking for 2 seconds - close the file
                    fileRecorder[event.mediaId].wavEncoder.end();

                    // Transcribe the file using OpenAI
                    try {
                        const file = fs.createReadStream(fileRecorder[event.mediaId].fileName);
                        openai.createTranscription(file, &quot;whisper-1&quot;).then((response) =&gt; {
                            console.log(&quot;OpenAI Transcription: &quot;, response.data.text);
                        });
                    } catch (e) {
                        console.log(&quot;Failed to transcribe: &quot;, e);
                    }

                    // Delete the file recorder object
                    delete fileRecorder[event.mediaId];
                }, 2000);
            }
        }
    }
});

// Configure user data used by the bot - this user data will be compatible with ODIN Web Client (https://odin.4players.de/app).
const userData = {
    name: &quot;Recorder Bot&quot;,
    seed: &quot;123&quot;,
    userId: &quot;Bot007&quot;,
    outputMuted: 1,
    platform: &quot;ODIN JS Bot SDK&quot;,
    version: &quot;0.1&quot;
}
// Create a byte array from the user data (ODIN uses byte arrays for user data for maximum flexibility)
const data = new TextEncoder().encode(JSON.stringify(userData));

// Join the room using the default gateway and our user data
room.join(&quot;gateway.odin.4players.io&quot;, data);

// Print the room-id
console.log(&quot;ROOM-ID:&quot;, room.id);

// Add an event filter for audio data received events
room.addEventListener('AudioDataReceived', (data) =&gt; {
    // Getting an array of the sample buffer - use for example to visualize audio
    /*
    let ui32 = new Float32Array(data.samples32.buffer);
    console.log(ui32);

    let ui16 = new Int16Array(data.samples16.buffer);
    console.log(ui16);
     */

    // Write the audio data to the file using a WAV encoder
    if (fileRecorder[data.mediaId]) {
        fileRecorder[data.mediaId].wavEncoder.file.write(data.samples16, (error) =&gt; {
            if (error) {
                console.log(&quot;Failed to write audio file&quot;);
            }
        });
    }
});

// Prepare a message compatible with the ODIN Web Client and send it to all users (see @4players/odin-foundation for more info)
const message = {
    kind: 'message',
    payload: {
        text: 'Hello World'
    }
}
room.sendMessage(new TextEncoder().encode(JSON.stringify(message)));

// Wait for a key press to stop the script
console.log(&quot;Press any key to stop&quot;);
const stdin = process.stdin;
stdin.resume();
stdin.setEncoding( 'utf8' );
stdin.on( 'data', function( key )
{
    console.log(&quot;Shutting down&quot;);
    room.close();
    fileWriter.end();

    process.exit();
});
</code></pre>
<h2 id="next-steps">Next steps</h2>
<p>You might also want the bot to send audio to the room. I.e. the bot could answer questions from your users or warn
users or group of users to stop using inappropriate language. We have an example for that too. You can find it
<a href="/odin/examples/stream-audio-files/">here</a>.</p>
<h2 id="encoding-to-flac">Encoding to FLAC</h2>
<p>Some speech to text services might require you to deliver FLAC encoded audio data. We have written a blog post about
that to get you started quickly. You can find it <a href="/blog/encoding-odin-audio-data-to-flac-for-realtime-transcription/">here</a>.</p>
<h2 id="odin-bot-sdk">ODIN Bot SDK</h2>
<p>This example is just a starting point. You can use it to build your own audio streaming application. We have built
an ODIN Bot SDK in TypeScript built on top of the ODIN NodeJS SDK that you can use to build your own AI bots and provides
simple interfaces to capture and send audio streams. We have published it as a separate NPM package. You can find it
<a href="https://www.npmjs.com/package/@4players/odin-bot-sdk">here</a>.</p>
`}),e.add({id:3626,href:"https://www.4players.io/odin/examples/multiplayer-sample/",title:"Unity Tech Demo",section:"ODIN Documentation",description:"A multiplayer playroom in minimalistic visual style created with Photon PUN and ODIN by 4Players. It showcases the technical possibilities when using the Odin Unity SDK.",content:`<p><a href="https://github.com/SciCoderG">David Liebemann</a> at <a href="https://scico.dev">SciCode Studio</a> created a multiplayer playroom with Unity and Photon PUN 2, that showcases all features of ODIN with simple example scripts.</p>
<p>If you want to see it in action, we provide binary releases to download for Windows, Mac and Linux. Download it, run
it and give it a try:</p>
<p><a href='https://github.com/4Players/odin-unity-demo/releases/latest' target='' class="btn btn-primary">Grab the latest release</a></p>
<p>These ODIN features have been implemented in this sample:</p>
<ul>
<li>Integration of ODIN into a multiplayer framework (in this case Photon PUN 2)</li>
<li>Spatial audio - creating a 3D proximity voice chat by using standard Unity components for voice audio playback</li>
<li>Usage of audio occlusion and directional effects</li>
<li>Ambient effects in some rooms that are automatically applied to voice audio</li>
<li>Simulating a radio channel by using a second ODIN room</li>
<li>Increasing performance by transmitting player position to the ODIN server to prevent streaming from players too far away</li>
<li>Making available various filters (APMs) to improve the audio capture quality</li>
</ul>
<p>The project is open source and can be found in our <a href="https://github.com/4Players/odin-unity-demo">Github repository</a>.
If you want to get started with ODIN, give it a try as it contains a lot of useful scripts that you can use in your
own game (MIT License).</p>
<p>For more in-depth information, take a look at our <a href="/odin/guides/unity/pun-sample/">Multiplayer with Photon</a> guide.</p>
<figure style="max-width: 100%px"><a href="/images/odin/odin_sample_unity_pun_screenshot1.webp" title="Click to enlarge" data-lity><img src="/images/odin/odin_sample_unity_pun_screenshot1.webp"
         alt="Screenshot from the sample project" width="100%"/></a><figcaption>
            <p>Screenshot from the sample project</p>
        </figcaption>
</figure>
<h2 id="user-manual">User manual</h2>
<p>After launching the demo you&rsquo;ll see the lobby screen. Enter a name and press the <code>Join</code> button. You&rsquo;ll see a
cylinder character that you can navigate around using these keys:</p>
<table>
<thead>
<tr>
<th>Input</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>W</td>
<td>Move forward</td>
</tr>
<tr>
<td>S</td>
<td>Move backward</td>
</tr>
<tr>
<td>A</td>
<td>Strafe left</td>
</tr>
<tr>
<td>D</td>
<td>Strafe right</td>
</tr>
<tr>
<td>Q</td>
<td>Rotate left</td>
</tr>
<tr>
<td>E</td>
<td>Rotate right</td>
</tr>
<tr>
<td>SHIFT</td>
<td>Sprint</td>
</tr>
<tr>
<td>1</td>
<td>Toggle between first person and third person view</td>
</tr>
<tr>
<td>C</td>
<td>Keep pressed to talk in 3D space</td>
</tr>
<tr>
<td>V</td>
<td>Keep pressed to talk via radio</td>
</tr>
</tbody>
</table>
`}),e.add({id:3627,href:"https://www.4players.io/odin/examples/unreal-minimal-samples/",title:"Unreal Minimal Samples",section:"ODIN Documentation",description:"A simple integration of ODIN into a multiplayer project featuring spatial audio.",content:`<p><img src="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_teaser.webp" alt="4Players ODIN"></p>
<p>This project offers a simple, yet comprehensive example showcasing the integration of 4Players&rsquo; <a href="https://github.com/4Players/odin-sdk">ODIN Unreal SDK</a> within Unreal Engine. For more in-depth information on replication and how to make Proximity Voice Chat work in Unreal, take a look at our <a href="https://www.youtube.com/watch?v=MfZsbYhtUlU&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs&amp;index=2">Odin Unreal Tutorial series</a>.</p>
<h2 id="download-links">Download links</h2>
<p>Grab the latest version of the demo from our Github repository:</p>
<p><a href='https://github.com/4Players/odin-unreal-minimal-samples' target='' class="btn btn-primary">Get The Source Code</a></p>
<h2 id="key-topics-showcased">Key Topics Showcased</h2>
<p>This sample demonstrates the minimal amount of blueprints needed to use ODIN for both Global or Proximity Voice Chat on different platforms:</p>
<ul>
<li>Setting up Odin by creating a new room token, constructing a room handle and joining an Odin room</li>
<li>Setting up Audio Capture for the local client and linking it to the Odin room.</li>
<li>Connecting remote media streams to local playback with the Odin Synth Component and destroying local playback when a media stream gets disconnected.</li>
<li><strong>Proximity Voice Chat:</strong> Using RepNotify to synchronize Odin Peers with Unreal Characters. This makes Proximity Voice Chat possible in Multiplayer games.</li>
<li>Handling Android Permissions.</li>
</ul>
<h2 id="getting-started">Getting Started</h2>
<p>You&rsquo;ll need the latest Unreal Engine 5 release to start the minimal sample project. The Odin Unreal Plugin in general is compatible with Unreal versions starting with 4.26.</p>
<h2 id="starting-the-minimal-multiplayer-sample">Starting the Minimal Multiplayer Sample:</h2>
<ul>
<li>Open the Map <code>Content &gt; Odin &gt; Maps &gt; Odin_Multiplayer</code></li>
<li>In the Play-In-Editor options, change the <code>Number of Players</code> to more than 1.</li>
<li>Set the <code>Net Mode</code> to <code>Play As Listen Server</code> or <code>Play As Client</code></li>
</ul>
<p>This will start the Editor in Multiplayer Mode and spawn the given number of Players. By walking to another Player Character, you will be able to hear yourself speaking from the Character&rsquo;s position, showcasing Proximity Voice Chat in Unreal. You can change the Proximity Voice behavior by adjusting the values in the Asset <code>Content &gt; Odin &gt; Blueprints &gt; Multiplayer_Odin_Attenuation</code>.</p>
<h2 id="starting-the-minimal-android-sample">Starting the Minimal Android Sample:</h2>
<p>To test the project on Android, you&rsquo;ll need to adjust the Game Default Map, before packaging and copying a build to your device. Go to <code>Project Settings &gt; Maps &amp; Modes</code> and select the <code>Odin_AndroidMinimal</code> map as the Game Default Map. You&rsquo;re now ready to package and launch the project on your mobile device!</p>
<p>You&rsquo;ll find the utilized Blueprints in the <code>Content &gt; Odin &gt; AndroidMinimal</code> directory. The Game Mode <code>GM_OdinAndroid</code> simply references the Player Controller. The <code>PC_OdinAndroid</code> Player Controller Blueprint contains the important setup logic. There you&rsquo;ll see the blueprint setup for requesting microphone permissions and the default Odin setup afterwards. For more information on the microphone permissions, please take a look at our <a href="https://www.4players.io/odin/guides/unreal/android-permissions/">in-depth guide for setting up Android permissions in Unreal</a>.</p>
<h2 id="basic-multiplayer-synchronization-principles-for-proximity-voice-chat">Basic Multiplayer Synchronization Principles for Proximity Voice Chat</h2>
<p>You can find all the relevant Blueprints regarding Multiplayer Synchronization in the <code>Content &gt; Odin &gt; Multiplayer</code> directory. The Game Mode BP <code>GM_OdinMultiplayer</code> will simply reference the Player Controller and Player Character. The Player Character BP <code>PC_OdinMultiplayer</code> will set up Odin by binding to the relevant events and then joining the Odin room.</p>
<p>Multiplayer specific code is called first in the <code>On Success</code> callback of the <code>Join Room</code> node. The success callback will provide us with the local player&rsquo;s peer id in the current room. We&rsquo;ll call <code>Replicate Peer Id</code> Event on our Player Character, which sets the <code>Peer Id</code> value on the server. The server will then replicate the value to all connected clients. Because we changed the <code>Replication</code> setting of the <code>Peer Id</code> value to <code>RepNotify</code>, any change to the <code>Peer Id</code> value will call the <code>OnRep_PeerId</code> function on all clients. The <code>OnRep_PeerId</code> function was automatically created by Unreal.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_OnSuccess.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_OnSuccess.webp"
         alt="Calling replicate Peer Id in the On Success callback" width="100%"/></a><figcaption>
            <p>Calling replicate Peer Id in the On Success callback</p>
        </figcaption>
</figure>
<p>In the <code>OnRep_PeerId</code> implementation we&rsquo;ll handle the spawning of an <code>OdinSynthComponent</code> on remotely controlled Player Characters. We don&rsquo;t want to create the component on the locally controlled Player Character, because we don&rsquo;t want to hear any Voice from there. We also only want to create the Odin Synth Component, if a media stream was already registered for the <code>Peer Id</code> value. If this component was not yet created, it means that Unreal was faster than Odin regarding replication and we need to wait for the Odin media stream to connect.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_OnRepPeerId.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_OnRepPeerId.webp"
         alt="The OnRep_PeerId implementation in the Player Character Blueprint" width="100%"/></a><figcaption>
            <p>The OnRep_PeerId implementation in the Player Character Blueprint</p>
        </figcaption>
</figure>
<p>The <code>OnMediaAdded</code> event on the Player Controller will be called, once this is the case. If a Player Character object was registered for the <code>Peer Id</code> we got from the event, we know that Unreal replication has already happened and we can securely create the Odin Synth Component for Playback. Otherwise we&rsquo;ll wait and rely on the <code>OnRep_PeerId</code> implementation on the Player Character the current Media Stream belongs to.</p>
<figure style="max-width: 100%px"><a href="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_OnMediaAdded.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/minimal-samples/odin_unreal_minimal-samples_OnMediaAdded.webp"
         alt="The OnMediaAdded creates an Odin Synth Component, if the Player Character has already received a Peer Id, or wait if not." width="100%"/></a><figcaption>
            <p>The OnMediaAdded creates an Odin Synth Component, if the Player Character has already received a Peer Id, or wait if not.</p>
        </figcaption>
</figure>
<h4 id="more-information">More information</h4>
<p>For more in-depth information on replication and how to make Proximity Voice Chat work in Unreal, take a look at our <a href="https://www.youtube.com/watch?v=MfZsbYhtUlU&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs&amp;index=2">Odin Unreal Tutorial series, specifically the Spatial Audio video</a>.</p>
<h2 id="basic-setup-without-multiplayer-synchronization">Basic Setup without Multiplayer Synchronization</h2>
<p>The Blueprint <code>PC_OdinAndroid</code> will show how to setup a simple connection to an Odin room, without using Spatializaiton for Proximity Voice Chat. The setup in this case is less complicated, because we don&rsquo;t need to replicate the Odin Peer Id from the dedicated server to the clients&rsquo; Player Characters. Instead we simply create an <code>OdinSynthComponent</code> for each Media that connects to our Odin room on the local Player Controller.</p>
<p>The implementation shown in <code>PC_OdinAndroid</code> will work on every platform. If the nodes are called on another platform, the Android Permission steps will simply be skipped.</p>
`}),e.add({id:3628,href:"https://www.4players.io/odin/examples/unreal-demo/",title:"Unreal Tech Demo",section:"ODIN Documentation",description:"An advanced integration of ODIN into a multiplayer project featuring Photon Multiplayer, Steam Audio and all the possibilities with using ODIN: spatial audio with occlusion and environmental effects!",content:`<p><img src="/images/odin/unreal-demo/unreal-demo-screenshot.jpg" alt="4Players ODIN"></p>
<p>This is a small demonstration of the usage of the <a href="https://github.com/4Players/odin-sdk">Unreal SDK</a> of 4Player&rsquo;s ODIN, a Voice Chat full service solution. The SDK provides an audio stream that can be processed in the audio engine of Unreal to add spatialization or audio effects.</p>
<p>This version is built upon the free tier of the <a href="https://doc.photonengine.com/en-us/realtime/current/getting-started/unreal-engine">Photon Networking Engine</a>. The audio stream is processed with the help of <a href="https://valvesoftware.github.io/steam-audio/">Steam Audio</a>, which is delivered together with the Unreal Engine.</p>
<h2 id="download-links">Download links</h2>
<p>Grab the latest version of the demo from our Github repository:</p>
<p><a href='https://github.com/4Players/odin-unreal-demo' target='' class="btn btn-primary">Get Source Code</a></p>
<p>Download the runnable also from Github right here  :</p>
<p><a href='https://github.com/4Players/odin-unreal-demo/releases/latest' target='' class="btn btn-primary">Download Runnable Demo</a></p>
<h2 id="features">Features</h2>
<p>The Demo showcases the usage of ODIN together with Unreal&rsquo;s Audio Engine. The example uses two Odin voice chat rooms - one for spatialized (proximity) chat, and one for a radio simulation with audio effects applied. It shows:</p>
<ul>
<li>how to connect to an ODIN voice chat room with an acquired room token generated from your access key</li>
<li>how to attach the incoming audio stream to an ODIN synth component, adding spatialization (3D / proximity)</li>
<li>how to connect an additional audio engine plugin like Steam Audio and use it together with ODIN</li>
<li>how to increase immersion by adding audio occlusion effects through collision rays</li>
<li>how to send the voice chat audio stream to audio effect processors, e.g. for environmental effects that also apply to voice</li>
<li>how to use a second ODIN room for simulating 2D radio communication (press and hold R key while talking)</li>
<li>how to activate different filters (APMs) to improve the audio capture quality</li>
</ul>
<h2 id="getting-started">Getting Started</h2>
<p>In the releases you can find a pre-built game executable and the current project&rsquo;s code base.  The pre-built game can likely be executed without any installations required - if you do not have the redistributable packages of C++ installed, that Unreal needs, you can find it in the <code>\\Engine\\Extras\\Redist\\en-us</code>folder of the pre-built game.</p>
<p>To open the project in the Unreal Editor you need to install the Unreal Engine 4.26*, 4.27 or 5.0. You can open the source code with UE5.0 easily. If you need to open it with a 4.26 or 4.27 build of the Unreal Engine you can right-click the <code>OdinUnrealSample.uproject</code> file and <code>Switch Unreal Engine version ...</code> to the Engine version you have installed that you want the project to open with. If the Editor fails to launch, rebuild the project from Visual Studio. You might also need to exchange the Odin Plugin to the corresponding version, downloadable e.g. in its <a href="https://github.com/4Players/odin-sdk-unreal/releases">Github Repository</a>.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Known issues  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Although the Unreal SDK itself is fully compatible with UE 4.26, there are some issues right now when compiling the demo with that version. We recommend using UE 4.27 or UE 5.0 right now.</p>
</div>
</div>

<h3 id="dependencies">Dependencies</h3>
<ul>
<li>The sample is built with the Unreal Engine version 5.0. Alternatively you need UE4.26* or UE4.27.</li>
<li>Although it builts upon Photon&rsquo;s networking engine, you do not need to install anything, since the sample delivers all needed libraries for that</li>
<li>The sample depends on Steam Audio, which is delivered together with the Unreal Engine so you do not need to install the plugin manually, if you have installed plugins with your Unreal Engine version</li>
</ul>
<h3 id="version-history">Version History</h3>
<ul>
<li>0.2
<ul>
<li>Extended Documentation</li>
<li>Small changes to tidy up blueprints</li>
</ul>
</li>
<li>0.1
<ul>
<li>Initial Release</li>
</ul>
</li>
</ul>
<h3 id="sample-map">Sample Map</h3>
<p>Below you can see an overview of the map, its areas and what they show:</p>
<p><img src="/images/odin/unreal-demo/MapOverview.png" alt="MapOverview.png"></p>
<p>The audio sources in the level have the same attenuation settings as the voice chat and so you can use them to get an idea of what the level does without having to invite someone else to test with you. To turn an audio source on, go near it and then press space on your keyboard.</p>
<h2 id="project-structure">Project Structure</h2>
<p><em>This guide is written for Unreal Engine version 4.27 as the project is targeted for this version of the engine. You will need to adjust for Unreal Engine 5.0 and above accordingly.</em></p>
<p>The project is based on the <strong>Top Down Example</strong> by Epic Games, so most of its structure can be found in this project as well. The code is based on the <strong>Unreal Example of Photon</strong> with adjustments so that it works for a 3D Game with continuous movement and integrates in the project structure properly.</p>
<p>This document outlines the structure of this sample project and describes how you can achieve similar results in your Unreal project. First we will have a look at the overall folder structure of the project so you can find every asset. Next we will outline the Game Mode, Game Instance and Player Controller classes to create the basic game rules and input methods. After that we describe the Photon Networking of this project and how it replicates the player characters&rsquo; positions to all clients before we look at how we incorporate Odin here so that each character gets the correct Odin Media assigned. Lastly we look at the map and see what features of the Unreal Audio Engine are show cased here in which way.</p>
<h3 id="source-code">Source Code</h3>
<p>As stated, the source code is mostly based on the <a href="https://doc.photonengine.com/en-us/realtime/current/getting-started/unreal-engine">Unreal Photon Example</a>. To get a basic understanding of what they did to integrate Photon, check out their documentation on the sample. We have integrated the Content of the Top Down Example by Epic Games and made some minor adjustments to the Photon Code.</p>
<p>Firstly, we have changed the <code>UPhotonLBClient</code> - the heart and meat of the Photon integration - to a <code>UActorComponent</code> instead of an <code>AActor</code>. As a consequence we have changed some overridden functions: <code>Tick</code> becomes <code>TickComponent</code> and needs some additional parameters. Additionally, in the constructor we set <code>PrimaryComponentTick.bCanEverTick = true;</code>. Once this is done, we can inherit an Actor Component from this class to more easily integrate it in our Project Structure.</p>
<p>Secondly, we have changed the <code>SetLocalPlayerPos</code> to take 6 instead of 2 <code>float</code>s as inputs. We adjusted the <code>LoadBalancingListener::setLocalPlayerPos()</code> accordingly to send these floats as well and the <code>LoadBalancingListener::customEventAction()</code> function needs to handle the new kind of object as well. Have a look at the <code>LoadBalancingListener.cpp</code> and the <code>PhotonLBClient.h</code> and <code>PhotonLBClient.cpp</code> files in the project to get the complete source code of these adjustments. The rest of the source code stayed as it was in the example.</p>
<h3 id="content-directory">Content Directory</h3>
<p>Most of the project&rsquo;s logic is located inside the <code>Blueprints</code> folder. Other folders hold the needed fonts for texts, meshes, materials and so on. In the <code>Sound</code> folder you can find the used attenuation settings and sound effect assets. Depending on which audio engine you whish to use they may differ from what you need in your project. In order to get an idea of what they do and how the settings affect the audio output of the project you can check out the documentation on <a href="https://docs.unrealengine.com/4.27/en-US/WorkingWithAudio/">Sound in General in the Unreal Engine</a>, and <a href="https://docs.unrealengine.com/4.27/en-US/WorkingWithAudio/DistanceModelAttenuation/">Sound Attenuation in the Unreal Engine</a> specifically as well as <a href="https://docs.unrealengine.com/4.27/en-US/WorkingWithAudio/Submixes/">Submixes</a>. The <a href="https://valvesoftware.github.io/steam-audio/doc/unreal/index.html">Steam Audio Unreal Engine Integration</a> has a pretty helpful documentation on their SDK as well.</p>
<p>The <code>Maps</code> folder holds both the map for the Lobby UI and the default map of the project. The <code>Lobby</code> map simply overrides the standard Game Mode with a Lobby Game Mode that opens the needed UI. The main map is the <code>TopDownExampleMap</code> in here.</p>
<p>In the Blueprint Folder you can find the Game Instance, Game Mode, Player Controller and Player Character Classes - these are the entry points for the engine to our game logic, so we will have a look at them in the next paragraph of this guide.</p>
<p>Next to them you can find folders for each different kind of objects in the project - <code>Interactive Objects</code> holds an Actor for the playback of a simple sound that uses the same attenuation settings as the Odin integration so that you can compare the Odin Audio to the internal sounds directly produced in the engine. In <code>Lobby</code> you can find an additional Game Mode for the Lobby Menu that simply loads the corresponding UI. In <code>Networking</code> you can find everything related to Photon. <code>Odin</code> holds the custom Actor Component we have built for this project as well as some helper classes. Lastly, in the <code>Widgets</code> folder you can find any widget that is used in the project - they are built in a way that they do not need to know of the ODIN SDK, so that you do not have to look into these classes. Of course it can make sense for you to copy and paste widgets from the <code>Options Menu</code> for use in your own game as the needed UI for the Odin Options stays the same for each application.</p>
<p><img src="/images/odin/unreal-demo/ProjectFolderStructure.png" alt="ProjectFolderStructure.png"></p>
<p>Now that you have an overview of the Project in general, we can have a look at the Standard Game Mode and its related classes.</p>
<h3 id="game-mode-game-instance-and-player-controller">Game Mode, Game Instance and Player Controller</h3>
<p>The Game Mode <code>Top Down Game Mode</code> used in the games main map has almost no logic in it and only defines the used default classes  - we have changed the default player controller to the <code>TopDownController</code> class and the default pawn class to <code>TopDownCharacter</code>.</p>
<p><img src="/images/odin/unreal-demo/GameModeSettings.png" alt="GameModeSettings.png"></p>
<p>In the project settings (in the main menu bar go to <code>Edit</code> and then <code>Project Settings...</code>) then we needed to change the game instance class to <code>GameInstance_TD</code> in the Maps&amp;Modes category.</p>
<p><img src="/images/odin/unreal-demo/GameInstance.png" alt="GameInstance.png"></p>
<p>You can also just change your default GameMode here or you can define it on a per-map basis which we did in this project. To do so, open the map, go to <code>Blueprints</code> above the renderer panel and select your game mode under <code>World Overrides -&gt; Game Mode</code>.</p>
<p><img src="/images/odin/unreal-demo/MapOverrideGameMode.png" alt="MapOverrideGameMode.png"></p>
<p>The Game Instance has no logic as well - it just holds a string variable <code>Player Name</code> that the player may choose in the Lobby and that needs to be saved when loading the main map. Here it is used to identify a player&rsquo;s character on other clients - so we will just copy the player name and replicate it to the other clients. We will do so in a minute.</p>
<p>But first we will have a look at the <code>Top Down Controller</code>. The logic in here fully relates to inputs - they allow switching between a top down paradigm to first person perspective and back at any time to help play around with the immersion coming from the 3D Audio.</p>
<p>More important for the Controller are the assigned Components. The <code>PhotonLBClient_TD</code> is our networking component that we will use to replicate player&rsquo;s movements, <code>OdinClientComponent</code> is the custom Component handling all the logic for the communication with Odin and <code>UiManager</code> simply handles some of the UI shown on screen - in our case it just adds and removes widgets reflecting connected players.</p>
<p><img src="/images/odin/unreal-demo/ControllerComponents.png" alt="ControllerComponents.png"></p>
<p>In the next part we will now look at what the Networking Component does exactly.</p>
<h3 id="photon-component-and-networking">Photon Component and Networking</h3>
<p>The <code>PhotonLBClient_TD</code> class can be found in the <code>Blueprints/Networking</code> folder. It inherits from the <code>UPhotonLBClient</code> Actor Component from the C++ Source Code and thus already has most functionality to communicate with the Photon framework. The Component extends the class to handle our use case - yet it is still agnostic to the Odin Framework and thus implements the <code>Networking Component</code> Blueprint Interface so that other Components can communicate with the implemented networking framework without knowing which one is used exactly. You can easily extend or exchange this component for anything you would like to use in your application.</p>
<p><img src="/images/odin/unreal-demo/PhotonComponentClassSettings.png" alt="PhotonComponentClassSettings.png"></p>
<p>The <code>Networking Component</code> interface has 4 functions:</p>
<ul>
<li>
<p><code>Get Own Network Id</code>: Returns an integer representing a unique identifier for the client in the network.</p>
</li>
<li>
<p><code>Replicate Transform</code>: Takes a transformation (of the local player character) and sends it over the network to all other clients.</p>
</li>
<li>
<p><code>Leave Network Session</code>: Leaves the current network session and stops replication.</p>
</li>
<li>
<p><code>Get Actors Map</code>: The Networking Component needs to track references to each actor owned by a client so that you can get an actor of a client by its unique identifier.</p>
</li>
</ul>
<p>Just like the Source Code of the project, the blueprints of this class are based on the sample blueprints of the Photon sample for the Unreal Engine. It has Events that are called from the C++ parent class when a player joins the Photon room, when one player leaves it and when a player changes their position.</p>
<ul>
<li>
<p><code>Add Player</code>: This is called whenever any client is added. With the <code>Local</code> flag we can decide what to do with the event. If it is local we just prepare our existing local player character and also start the connection to ODIN from the <code>OdinClientComponent</code>. If it is a non-local client the blueprint creates a player character for that client and assigns it the given photon id and sets it up.</p>
</li>
<li>
<p><code>Remove Player</code>: This is called whenever any client leaves the session. Here we search the according player character and delete it.</p>
</li>
<li>
<p><code>Change Player Pos</code>: Retrieves positional and rotational values that we apply to the correct player character.</p>
</li>
</ul>
<p>If you want to exchange the Photon Networking for e.g. the Unreal Networking System you can easily do so by implementing a component that uses corresponding RPC Calls - just have in mind that you will not use advanced systems, like the <a href="https://docs.unrealengine.com/5.0/en-US/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine/">Networked Movement in the Character Movement Component</a>.</p>
<h3 id="odin-client-component">Odin Client Component</h3>
<p>The <code>Odin Client Component</code> is the meat and bone of this sample so we will have a detailed look at what it does.</p>
<p>It derives directly from <code>Actor Component</code> and does not implement any interfaces. It has two sets of functions - one for each ODIN room it connects to - remember that we have a proximity chat and a radio chat so that we need to join two ODIN rooms in total. You can either connect to them in the same function and then decide how to handle the different events with the passed <code>Room</code> parameter, or do it like in this sample and break them into two parts.</p>
<p>The <code>Start Connect</code> Custom Event is called once the local player is connected to the Photon room. It is mainly taken from the <a href="https://www.4players.io/odin/sdk/unreal/manual/">ODIN Unreal SDK Manual</a>. In summary, we generate a room token with our access key, a room id and a user id. Note, that the Access Key should not be known to the client normally and you should do this on a trusted Web Server instead. For the simplicity of this sample we kept the call on the client though.</p>
<p>Then we construct a local room handle and bind all needed events to appropriate Custom Events (we go through them in a bit). Then we create some User Data - they contain the chosen User Name from the Login Screen and the Network Id from our Photon Component. The Network Id is needed by the other clients so that they can get the correct Player Character from the Photon Component to assign it an Odin Synth Component with the correct Media Stream. Once that is done, we will call the <code>Join Room</code> function and are done with the event. We do this two times in total, once for each Odin Room.</p>
<p>We handle the Room Events in different events:</p>
<ul>
<li>
<p><code>Peer Joined</code>: This event is called before the media of the other peer is added to the room, so we can setup the player character - we use the network id in the user data and the passed ODIN peer id to create a map on this component, so once we get the media stream with the ODIN id we can get the correct network id and thus correct actor to assign it the stream.</p>
</li>
<li>
<p><code>Joined Room</code>: This event is called once we join the room ourselves. Here we can create an Audio Capture and from it an ODIN Media Stream that we add to the room afterwards via the <code>Add Media</code> node. We also save the Audio Captures of both rooms in a variable to reference them later.</p>
</li>
<li>
<p><code>Peer Left</code>: This is called when another peer leaves. Here we just print a message in this sample.</p>
</li>
<li>
<p><code>Media Added</code>: This Event is called when the media stream of another peer is added to the room. It grabs the actors map from our Networking Component and adds an <code>Odin Synth Component</code>to it, activates it and assigns it the given media stream.</p>
</li>
</ul>
<p>Additionally we have some functionality to adjust the APM Settings of the rooms - this is done in the <code>SetApmSettings</code> event. Also we can open the APM Settings menu with the <code>OpenOptions</code> event and close them with <code>CloseOptions</code>.</p>
<p>Lastly, in the <code>Tick</code> Event we start and stop the Capturing of the Proximity Chat and Radio Chat Audio Captures - depending on whether we press the <strong>R Key</strong> or not. The <code>RPressed</code> variable is set from the player controller class.</p>
<p><img src="/images/odin/unreal-demo/OdinClientComponentTick.png" alt="OdinClientComponentTick.png"></p>
<h2 id="conclusion">Conclusion</h2>
<p>This was a rough rundown of the demo project - to get started in your own project with ODIN you can copy and paste any portions of the project. Also have a look at the <a href="/odin/sdk/unreal/manual/">ODIN Unreal SDK Manual</a>. Here you have a step by step guide on how to implement the ODIN SDK in your application. On the <a href="https://www.4players.io/products/voice-chat/">4Players Website</a> you get all information on how to integrate ODIN properly.</p>
`}),e.add({id:3629,href:"https://www.4players.io/odin/faq/unreal/are-there-any-dependencies-to-other-plugins/",title:"Are there any dependencies to other plugins?",section:"ODIN Documentation",description:"Understand the dependencies of ODIN with other plugins, including the utilization of Unreal Engine's official 'Audio Capture' plugin for seamless audio capture and playback.",content:`<p>Yes, ODIN uses Epic&rsquo;s official Audio Capture Plugin to capture audio from input devices, such as microphones. Users have the option to either user the default <code>Audio Capture</code> object provided by the <a href="https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/AudioCapture/CreateAudioCapture/"><code>Create Audio Capture</code></a> method, or the extended <a href="/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture/">Odin Audio Capture</a> object. We recommend using <code>Create Odin Audio Capture</code> due to its superior features, such as the ability to switch capture devices on supported platforms and enhanced Push-To-Talk functionality.</p>
<p>Other than that, ODIN defaults to Unreal&rsquo;s standard audio playback, meaning any voice data played in-game is managed like any other audio source in Unreal. This makes it possible to implement exciting features like Proximity Voice Chat and manage settings like Volume controls using Unreal&rsquo;s existing solutions.</p>
`}),e.add({id:3630,href:"https://www.4players.io/odin/faq/unreal/issues-with-echo-cancellation/",title:"I'm having Issues with Echo Cancellation, what can I do?",section:"ODIN Documentation",description:"Explore solutions for enhancing echo cancellation in your ODIN Unreal setup. This entry offers guidance on configuring Audio Processing Module (APM) settings and user-adjustable options to optimize voice chat clarity and reduce echo.",content:`<p>If you&rsquo;re encountering issues with echo cancellation, we recommend a specific Audio Processing Module (APM) setup to optimize your voice chat experience. A good starting point is to refer to the following APM configuration example, which can serve as a guideline:</p>
<center>
<figure style="max-width: 25%px"><a href="/images/odin/unreal/bp_apm_setup_for_echocancellation.webp" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_apm_setup_for_echocancellation.webp"
         alt="APM configuration for Echo Cancellation" width="25%"/></a><figcaption>
            <p>APM configuration for Echo Cancellation</p>
        </figcaption>
</figure>
</center>
<p>However, since audio performance can vary based on different hardware and environmental conditions, it&rsquo;s beneficial to experiment with the settings to find what works best for your specific use case.</p>
<p>To enhance user experience, consider allowing players to adjust these settings according to their individual hardware setups. When implementing user-adjustable options, it&rsquo;s advisable to streamline the number of controls to avoid overwhelming the user. Here are a couple of suggestions:</p>
<ol>
<li><strong>Voice Activity Detection (VAD) Adjustments:</strong> You can provide a single slider for users to adjust the VAD settings. The Attack and Release probabilities should have an offset of 0.1 (e.g., if the Attack is set to 0.6, then the Release should be 0.5). This single slider approach simplifies the user interaction while effectively managing the VAD parameters behind the scenes.</li>
<li><strong>Volume Gate Settings:</strong> For Volume Gate, ensure that the Attack value has an offset of 10 from the Release value (for example, if the Attack is -30, then the Release should be -40). This method maintains a balanced dynamic between the Attack and Release phases, which is crucial for effective volume gating.</li>
</ol>
<p>These tailored adjustments can significantly improve the echo cancellation effectiveness, leading to a clearer and more pleasant audio experience for all users.</p>
`}),e.add({id:3631,href:"https://www.4players.io/odin/faq/unreal/do-you-have-sound-occlusion-built-in/",title:"Do you have sound occlusion built-in?",section:"ODIN Documentation",description:"Explore ODIN's built-in sound occlusion features, integrated with the Unreal Audio Engine and compatible with 3rd party audio plugins for enhanced audio effects in your game.",content:`<p>Yes, the audio is played via a synth component (see <span class="external-reference">Add Odin Synth Component <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/"><i class="fas fa-external-link-alt"></i></a></span>
) and this integrates
natively into the entire Unreal Audio Engine with all the features that come with it. This also means that you can use
any other 3rd party audio plugin to improve or to add new effects.</p>
`}),e.add({id:3632,href:"https://www.4players.io/odin/faq/unreal/do-you-support-unreal-engine-5-x/",title:"Do you support Unreal Engine 5.x?",section:"ODIN Documentation",description:"Learn about ODIN's support for Unreal Engine 5.x, ensuring compatibility and extensive testing with the latest versions of Unreal Engine for your game development needs.",content:`<p>Yes, we do. Our internal development team uses the latest officially released version of Unreal Engine for development. Testing and packaging are done for versions starting from UE 4.26.</p>
`}),e.add({id:3633,href:"https://www.4players.io/odin/faq/general/what-plans-do-you-offer/",title:"What plans do you offer?",section:"ODIN Documentation",description:"Explore ODIN's flexible pricing plans, including a free plan for development and testing, and various options for self-hosting and cloud hosting, detailed on our pricing page.",content:`<p>For developing and testing purposes, ODIN is free to use for up to 25 concurrent users. For production
usage or extended testing, a subscription is required. Depending on the use case, we offer different pricing models.
If you want to leverage the 4Players Cloud infrastructure for your game, you can use our cloud-based solution. If you
want to run your own ODIN server, you can use our on-premise solution. Pricing differs between these two solutions.</p>
<p>All pricing models are based on peak users. A concurrent user is a user that is connected to ODIN at the
same time. If a user disconnects, he is no longer counted as a concurrent user.</p>
<p>Depending on where you are located, VAT may be added to the prices.</p>
<h2 id="cloud-based">Cloud-based</h2>
<p>Our cloud-based solution is based on a monthly subscription model. The base fee is 19,90 EUR per month. This includes
up to 100 concurrent users. Additional users are charged with 0,29 EUR per user and month. You can set a limit to
make sure you don&rsquo;t exceed your budget, however in this case, users might be able to connect if the peak user limit
is reached. You can use as many rooms as you like, there is no limit.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Example     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You have a game with 1000 concurrent users. You want to use ODIN for voice chat. You want to make sure that you don&rsquo;t
exceed a monthly budget of 500 EUR. You set the peak user limit to 1000. You will be charged 19,90 EUR for the base
fee and 290 EUR for the additional users. In total, you will be charged 309,90 EUR for the month.</p>
</div>
</div>

<h2 id="on-premise">On-premise</h2>
<p>Our on-premise solution is based on the number of server instances you want to run. The base fee is 350 EUR per
month and includes one instance. Every instance is capable of handling up to 1000 concurrent users. If you need
more users, you have two options:</p>
<ul>
<li>You can add additional instances for 350 EUR per month each (horizontally scaling)</li>
<li>You can upgrade your instance to a higher tier (vertically scaling)</li>
</ul>
<h3 id="horizontal-scaling">Horizontal Scaling</h3>
<p>If you need more than 1000 concurrent users, you can add additional instances. If your application does not
require more than 1000 concurrent users in one room that is the best option. You can start as many instances as you
like with your license, we keep track of everything and charge you accordingly. We charge the average number of peak
instances per day.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Example     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You have a match-based 5on5 game and expect 5000 concurrent users (i.e. 500 matches simultaneously). You
want to use ODIN for voice chat. That means, every room will have a maximum of 10 concurrent users, therefore it&rsquo;s easy
to scale horizontally and would require 5 instances. You will be charged 1750 EUR per month.</p>
<p>However, if you have an event that peaks your user numbers to 10000 concurrent users you could just launch 5
additional instances when the event starts and stop them once the event is over - let&rsquo;s say the event lasts for 3
days, that would mean, that you have 27 days with 5 instances and 3 days with 10 instances. In total, you will be
charged 27<em>5 + 3</em>10 * (350 EUR / 30) = 2007 EUR.</p>
<p>This shows, that it makes sense to implement some sort of auto scaling on your side if you have volatile user
numbers. We don&rsquo;t provide a solution but there are numerous solutions available like Kubernetes.</p>
<p>If you don&rsquo;t want to have that hassle, you can just switch to our cloud-hosting solution that is capable of handling all
that scaling for you.</p>
</div>
</div>

<h3 id="vertical-scaling">Vertical Scaling</h3>
<p>If you need more than 1000 concurrent users in one room, you can upgrade your instance to a higher tier. We offer
blocks of 1000 concurrent users. The base fee is 350 EUR per month and includes one block. Every block is capable of
handling up to 1000 concurrent users and costs additional 350 EUR per month. We don&rsquo;t have a limit on how many
blocks you can add, but at some point it will bottleneck on the hardware (either CPU, RAM or network). As this is
highly dependent on the use case, we can&rsquo;t provide a general recommendation but consider a load test to find out -
we will be there to help you with that.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Example     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>You have a metaverse application and want to bring 5000 concurrent users into one room. That is possible as ODIN
provides a technology of spatial clipping. What that means is, that you regularly send the position of users in 3D
space to ODIN and ODIN will only send the audio of users that are in a certain range to the user.</p>
<p>As you have 5000 concurrent users in one room, you need 5 blocks. You will be charged 1750 EUR per month. Let&rsquo;s say,
you want to open another instance of your metaverse, in this case you can combine horizontal and vertical scaling
and you just add another instance with 5 blocks. You will be charged 3500 EUR per month.</p>
</div>
</div>

`}),e.add({id:3634,href:"https://www.4players.io/odin/faq/general/is-odin-as-good-as-discord/",title:"Is ODIN as good as Discord?",section:"ODIN Documentation",description:"Discover how ODIN compares to Discord in voice quality and latency, and learn how it enables you to create your own voice chat applications with superior performance.",content:`<p>ODIN is a voice chat SDK that you can integrate into your game or app. It is not a standalone application like Discord.
However, in terms of voice quality and latency many of our customers report that ODIN is much better than Discord. You
can also use ODIN to build your own Discord-like application.</p>
`}),e.add({id:3635,href:"https://www.4players.io/odin/faq/general/does-odin-also-provide-text-message-chat/",title:"Does ODIN also provide text message chat?",section:"ODIN Documentation",description:"Explore ODIN's text messaging capabilities, allowing you to send text, data, and even binary content like images or videos, with our versatile SDKs.",content:`<p>Yes, ODIN provides a text message chat. You can use it to send text messages to other users in the same room. All our
SDKs provide a simple interface to send and receive text and other form of data. ODIN is very flexible here and let&rsquo;s
you send any kind of data you want. You can even send binary data like images or videos.</p>
<p>Look out for the <code>SendMessage</code> and <code>OnMessageReceived</code> methods in our SDKs.</p>
`}),e.add({id:3637,href:"https://www.4players.io/4netplayers/contact/",title:"Contact us",section:"Free Server Hosting",description:"Get technical support for anything related to 4Netplayers",content:`<p>Contact us through the listed methods below to receive answers to your questions and learn more about ODIN.</p>
<h2 id="support--onboarding">Support / Onboarding</h2>
<p>Join our official Discord server to chat with the 4Netplayers operations team to onboard your game into our library.
You can also chat directly with our sales team.</p>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
<h2 id="sales">Sales</h2>
<p>Please fill out this form and we&rsquo;ll come back to you as soon as possible:</p>
<ul>
<li><a href="https://www.4players.io/company/contact_us/">Contact Sales Team</a></li>
<li>or join our Discord server and chat with the sales team directly</li>
</ul>
`}),e.add({id:3641,href:"https://www.4players.io/company/media_press/",title:"Media & PR",section:"Companies",description:"Download logos and contact our PR team",content:`


    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
        <div class="text-module elevation-01dp rounded-3 py-5 mt-5">
    <div class="row justify-content-center">

        <div class="col-14">
            <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        Media Contact
        
    </h1>
    
    
    <div class="paragraph-module">
    
    <p ><p>Thank you very much in your interest in our company and our products. On this page you&rsquo;ll find our current logos, claims and other resources that you can use to present our products or company.</p>
<p>You can download a zip file containing all these assets here: <a href="/images/odin/branding/4players_media_assets.zip">4players_media_assets.zip</a> (57,5MB).</p>
</p>
    
</div>
    
</div>

            
        </div>

    </div>
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
        <div class="text-module elevation-01dp rounded-3 py-5 mt-5">
    <div class="row justify-content-center">

        <div class="col-14">
            <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        About 4Players
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Short version</p>
    
    <div class="paragraph-module">
    
    <p ><p>4Players creates metaverse-ready, cross-platform, safe and interactive experiences with its voice chat tool, with 3D spatial audio and a global server network. Size really doesn’t matter: 4Players’ services fit all demands and budgets.</p>
<p>Real-time communication is essential for a fun, immersive gaming experience and player retention. This is why 4Players’ mission is to create powerful tools for integrated voice and video chat that make games more immersive, social and interactive.</p>
</p>
    
</div>
    
</div>

            
        </div>

    </div>
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
        <div class="text-module elevation-01dp rounded-3 py-5 mt-5">
    <div class="row justify-content-center">

        <div class="col-14">
            <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        About 4Players
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Longer version</p>
    
    <div class="paragraph-module">
    
    <p ><p>4Players has been propelling and co-shaping the evolution of gaming for more than 20 years, today the team create metaverse-ready, cross-platform, safe and interactive experiences with voice chat tools, 3D spatial audio and a global server network. Size really doesn’t matter: its services fit all demands and budgets, providing cutting-edge services for game developers looking to bring their products into the new era of gaming.</p>
<p>On a mission to create an immersive gaming experience, the 4Players team has ensured its products are the go-to for this generation. Tailored to both developers and consumers, 4Players’ wealth of products offers tools for anyone looking to level up their gaming and communication experience. From development audio tools and free game server hosting for developers, to voice chat and game server hosting for players, 4Players provides a next-generation experience for all.</p>
<p>4Players is the future of immersive audio in multiplayer games, designed by seasoned professionals with a thorough understanding of how games should interact with players. Offering an SDK that is seamless and easy to use for developers, 4Players is a true pioneer of next-generation gaming, and it’s only a few clicks away.</p>
</p>
    
</div>
    
</div>

            
        </div>

    </div>
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        4Players Logos
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Please find below the logos for our company 4Players GmbH.</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-2 row-cols-lg-2 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/4players_logo_black.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for light environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4players_logo_black.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/4players_logo_white.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for dark environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4players_logo_white.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img class='w-50' src="/images/odin/branding/4players_icon_black.png"  alt="" class="w-50">
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent icon for light environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4players_icon_black.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img class='w-50' src="/images/odin/branding/4players_icon_white.png"  alt="" class="w-50">
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent icon for dark environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4players_icon_white.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        ODIN Logos
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Please find below the logos for our ODIN product.</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-2 row-cols-lg-2 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img class='w-75' src="/images/odin/branding/odin_logo_black.png"  alt="" class="w-75">
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for light environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin_logo_black.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img class='w-75' src="/images/odin/branding/odin_logo_white.png"  alt="" class="w-75">
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for dark environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin_logo_white.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img class='w-50' src="/images/odin/branding/odin_logo_vertical_black.png"  alt="" class="w-50">
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent vertical logo for light environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin_logo_vertical_black.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img class='w-50' src="/images/odin/branding/odin_logo_vertical_white.png"  alt="" class="w-50">
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent vertical logo for dark environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin_logo_vertical_white.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/odin-launch.jpg"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">ODIN logo on background</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin-launch.jpg" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/odin-launch-2.jpg"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">ODIN logo on background</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin-launch-2.jpg" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        4Netplayers Logos
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Please find below the logos for 4Netplayers</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-2 row-cols-lg-2 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/4netplayers_logo_black.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for light environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4netplayers_logo_black.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/4netplayers_logo_white.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for dark environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4netplayers_logo_white.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/4netplayers_logo_globe_black.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for light environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4netplayers_logo_globe_black.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  align-items-center p-5 elevation-01dp card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/4netplayers_logo_globe_white.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent mt-4 p-0">
                            
                            
                            <p class="m-0">Transparent logo for dark environments</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/4netplayers_logo_globe_white.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        Wallpaper/Backgrounds
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Use these images as a desktop wallpaper or as a background for your ODIN assets.</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-3 row-cols-lg-3 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  h-100 card-custom-img-top text-high-emphasis card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/odin_wide.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            
                            <p class="">ODIN background image or wallpaper</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/odin_wide.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  h-100 card-custom-img-top text-high-emphasis card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/viking_wide.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            
                            <p class="">Viking background image or wallpaper</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/viking_wide.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  h-100 card-custom-img-top text-high-emphasis card-hover card-scale flex align-items-center">
                        
                        
                        <img  src="/images/odin/branding/headset_wide.png"  alt="" >
                            
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            
                            <p class="">Headset background image or wallpaper</p>
                            
                        </div>
                        
                        <a href="/images/odin/branding/headset_wide.png" class="stretched-link"></a>
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>



`}),e.add({id:3642,href:"https://www.4players.io/company/privacy/",title:"Privacy Policy",section:"Companies",description:"Privacy Policy of 4Players GmbH",content:`<div class="tos elevation-01dp rounded-3 p-5 mb-0 mt-5 text-high-emphasis">
<h1 id="privacy-policy">Privacy Policy</h1>
<h2 id="table-of-contents">Table of contents</h2>
<ul>
<li><a href="#1-an-overview-of-data-protection">1. An overview of data protection</a></li>
<li><a href="#2-general-information-and-mandatory-information">2. General information and mandatory information</a></li>
<li><a href="#3-data-protection-officer">3. Data protection officer</a></li>
<li><a href="#4-data-collection-on-our-website-or-app">4. Data collection on our website or app</a></li>
<li><a href="#5-social-media">5. Social media</a></li>
<li><a href="#6-analytics-and-advertising">6. Analytics and advertising</a></li>
<li><a href="#7-newsletter">7. Newsletter</a></li>
<li><a href="#8-plugins-and-tools">8. Plugins and Tools</a></li>
<li><a href="#9-contract-conclusion">9. Contract conclusion</a></li>
<li><a href="#10-ai-services">10. A.I. Services</a></li>
</ul>
<h2 id="1-an-overview-of-data-protection">1. An overview of data protection</h2>
<h3 id="general">General</h3>
<p>The following gives a simple overview of what happens to your personal information when you visit our website. Personal
information is any data with which you could be personally identified. Detailed information on the subject of data
protection can be found in our privacy policy found below.</p>
<h3 id="data-collection-on-our-website">Data collection on our website</h3>
<p><strong>Who is responsible for the data collection on this website?</strong></p>
<p>The data collected on this website are processed by the website operator. The operator’s contact details can be found in
the website’s required legal notice.</p>
<p><strong>How do we collect your data?</strong></p>
<p>Some data are collected when you provide it to us. This could, for example, be data you enter on a contact form.</p>
<p>Other data are collected automatically by our IT systems when you visit the website. this data are primarily technical
data such as the browser and operating system you are using or when you accessed the page. this data are collected
automatically as soon as you enter our website.</p>
<p><strong>What do we use your data for?</strong></p>
<p>Part of the data is collected to ensure the proper functioning of the website. Other data can be used to analyze how
visitors use the site.</p>
<p><strong>What rights do you have regarding your data?</strong></p>
<p>You always have the right to request information about your stored data, its origin, its recipients, and the purpose of
its collection at no charge. You also have the right to request that it be corrected, blocked, or deleted. You can
contact us at any time using the address given in the legal notice if you have further questions about the issue of
privacy and data protection. You may also, of course, file a complaint with the appropriate regulatory authorities.</p>
<h3 id="analytics-and-third-party-tools">Analytics and third-party tools</h3>
<p>When visiting our website, statistical analyses may be made of your surfing behavior. This happens primarily using
cookies and analytics. The analysis of your surfing behavior is usually anonymous, i.e. we will not be able to identify
you from this data. You can object to this analysis or prevent it by not using certain tools. Detailed information can
be found in the following privacy policy.</p>
<p>You can object to this analysis. We will inform you below about how to exercise your options in this regard.</p>
<h2 id="2-general-information-and-mandatory-information">2. General information and mandatory information</h2>
<h3 id="data-protection">Data protection</h3>
<p>The operators of this website take the protection of your personal data very seriously. We treat your personal data as
confidential and in accordance with the statutory data protection regulations and this privacy policy.</p>
<p>If you use this website, various pieces of personal data will be collected. Personal information is any data with which
you could be personally identified. This privacy policy explains what information we collect and what we use it for. It
also explains how and for what purpose this happens.</p>
<p>Please note that data transmitted via the internet (e.g. via email communication) may be subject to security breaches.
Complete protection of your data from third-party access is not possible.</p>
<h3 id="notice-concerning-the-party-responsible-for-this-website">Notice concerning the party responsible for this website</h3>
<p>The party responsible for processing data on this website is:</p>
<p>4Players GmbH
Deelbögenkamp 4
22297 Hamburg
Management board: Phillip Schuster, Rainer Rosenbusch, Oliver Paul</p>
<p>Telephone: +49 (40) 607742610<br>
Email: <a href="mailto:support@4netplayers.com">support@4netplayers.com</a></p>
<p>The responsible party is the natural or legal person who alone or jointly with others decides on the purposes and means
of processing personal data (names, email addresses, etc.).</p>
<h3 id="revocation-of-your-consent-to-the-processing-of-your-data">Revocation of your consent to the processing of your data</h3>
<p>Many data processing operations are only possible with your express consent. You may revoke your consent at any time
with future effect. An informal email making this request is sufficient. The data processed before we receive your
request may still be legally processed.</p>
<h3 id="right-to-file-complaints-with-regulatory-authorities">Right to file complaints with regulatory authorities</h3>
<p>If there has been a breach of data protection legislation, the person affected may file a complaint with the appropriate
regulatory authorities. The appropriate regulatory authority for matters related to data protection legislation is the
data protection officer of the German state in which our company is headquartered. A list of data protection officers
and their contact details can be found at the following
link: <a href="https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html">https://www.bfdi.bund.de/DE/Infothek/Anschriften_Links/anschriften_links-node.html</a>
.</p>
<h3 id="right-to-data-portability">Right to data portability</h3>
<p>You have the right to have data which we process based on your consent or in fulfillment of a contract automatically
delivered to yourself or to a third party in a standard, machine-readable format. If you require the direct transfer of
data to another responsible party, this will only be done to the extent technically feasible.</p>
<h3 id="ssl-or-tls-encryption">SSL or TLS encryption</h3>
<p>This site uses SSL or TLS encryption for security reasons and for the protection of the transmission of confidential
content, such as the inquiries you send to us as the site operator. You can recognize an encrypted connection in your
browser’s address line when it changes from “http://” to “https://” and the lock icon is displayed in your browser’s
address bar.</p>
<p>If SSL or TLS encryption is activated, the data you transfer to us cannot be read by third parties.</p>
<h3 id="encrypted-payments-on-this-website">Encrypted payments on this website</h3>
<p>If you enter into a contract which requires you to send us your payment information (e.g. account number for direct
debits), we will require this data to process your payment.</p>
<p>Payment transactions using common means of payment (Visa/MasterCard, direct debit) are only made via encrypted SSL or
TLS connections. You can recognize an encrypted connection in your browser’s address line when it changes from “http://”
to “https://” and the lock icon in your browser line is visible.</p>
<p>In the case of encrypted communication, any payment details you submit to us cannot be read by third parties.</p>
<h3 id="information-blocking-deletion">Information, blocking, deletion</h3>
<p>As permitted by law, you have the right to be provided at any time with information free of charge about any of your
personal data that is stored as well as its origin, the recipient and the purpose for which it has been processed. You
also have the right to have this data corrected, blocked or deleted. You can contact us at any time using the address
given in our legal notice if you have further questions on the topic of personal data.</p>
<h3 id="opposition-to-promotional-emails">Opposition to promotional emails</h3>
<p>We hereby explicitly prohibit the use of contact data published in the context of website legal notice requirements with
regard to sending promotional and informational materials not explicitly requested. The website operator reserves the
right to take specific legal action if unsolicited advertising material, such as email spam, is received.</p>
<h2 id="3-data-protection-officer">3. Data protection officer</h2>
<h3 id="statutory-data-protection-officer">Statutory data protection officer</h3>
<p>We have appointed a data protection officer for our company.</p>
<p>4Players GmbH<br>
Der Datenschutzbeauftragte<br>
Deelbögenkamp 4c<br>
22297 Hamburg</p>
<p>Email: <a href="mailto:datenschutz@4players.de">datenschutz@4players.de</a></p>
<h2 id="4-data-collection-on-our-website-or-app">4. Data collection on our website or app</h2>
<h3 id="cookies">Cookies</h3>
<p>Some of our web pages use cookies. Cookies do not harm your computer and do not contain any viruses. Cookies help make
our website more user-friendly, efficient, and secure. Cookies are small text files that are stored on your computer and
saved by your browser.</p>
<p>Most of the cookies we use are so-called “session cookies.” They are automatically deleted after your visit. Other
cookies remain in your device’s memory until you delete them. These cookies make it possible to recognize your browser
when you next visit the site.</p>
<p>You can configure your browser to inform you about the use of cookies so that you can decide on a case-by-case basis
whether to accept or reject a cookie. Alternatively, your browser can be configured to automatically accept cookies
under certain conditions or to always reject them, or to automatically delete cookies when closing your browser.
Disabling cookies may limit the functionality of this website.</p>
<p>Cookies which are necessary to allow electronic communications or to provide certain functions you wish to use (such as
the shopping cart) are stored pursuant to Art. 6 paragraph 1, letter f of GDPR. The website operator has a legitimate
interest in the storage of cookies to ensure an optimized service provided free of technical errors. If other cookies (
such as those used to analyze your surfing behavior) are also stored, they will be treated separately in this privacy
policy.</p>
<h3 id="web-server-log-files">Web server log files</h3>
<p>The website provider automatically collects and stores information that your browser automatically transmits to us in
“server log files”. These are:</p>
<ul>
<li>Browser type and browser version</li>
<li>Operating system used</li>
<li>Referrer URL</li>
<li>Host name of the accessing computer</li>
<li>Time of the server request</li>
<li>IP address</li>
</ul>
<p>This data will not be combined with data from other sources.</p>
<p>This data will be deleted after 90 days.</p>
<p>The basis for data processing is Art. 6 para. 1 lit. f GDPR, which allows the processing of data to fulfill a contract
or for measures preliminary to a contract.</p>
<h3 id="gameserver-log-files">Gameserver log files</h3>
<p>The game server writes log files. Depending on the game, the log files may contain the following personal data, among
others:</p>
<ul>
<li>IP address</li>
<li>Nickname</li>
<li>Game-specific IDs</li>
<li>Chat history</li>
</ul>
<p>4Players saves the log files for the server owner.</p>
<p>This data is not combined with data from other sources.</p>
<p>The data is deleted after 7 days.</p>
<p>Data processing is based on Art. 6 para. 1 lit. (f) of the GDPR, which permits the processing of data for the execution
of a contract or pre-contractual measures.</p>
<h3 id="teamspeak-3-server-log-files">Teamspeak 3 server log files</h3>
<p>The Teamspeak 3 server does not store server log files (server log) because this function has been disabled by 4Players.</p>
<p>The operator (server admin) of a 4Players’ Teamspeak 3 server can obtain information about the following personal data
of a particular visitor:</p>
<ul>
<li>IP address</li>
<li>Nickname</li>
<li>Teamspeak 3 specific ID</li>
<li>Date of account creation</li>
<li>Last account login</li>
<li>Number of logins</li>
</ul>
<p>Some personal data is necessary for the operation and administration of the server, e.g. to remove or permanently block
certain visitors. Neither the server operator nor the host (4Players) has any influence on the functioning of the client
and any external tools. Detailed information about the client’s data protection can be found
at <a href="https://teamspeak.com/en/privacy-and-terms/">teamspeak.com/en/privacy-and-terms/</a></p>
<p>This data is not combined with data from other sources.</p>
<h3 id="registration-on-this-website">Registration on this website</h3>
<p>You can register on our website in order to access additional functions offered here. The input data will only be used
for the purpose of using the respective site or service for which you have registered. The mandatory information
requested during registration must be provided in full. Otherwise, we will reject your registration.</p>
<p>To inform you about important changes such as those within the scope of our site or technical changes, we will use the
email address specified during registration.</p>
<p>We will process the data provided during registration only based on your consent per Art. 6 (1)(a) GDPR. You may revoke
your consent at any time with future effect. An informal email making this request is sufficient. The data processed
before we receive your request may still be legally processed.</p>
<p>We will continue to store the data collected during registration for as long as you remain registered on our website or
will be deleted after 26 months of inactivity. Statutory retention periods remain unaffected.</p>
<h3 id="registration-with-facebook-connect">Registration with Facebook Connect</h3>
<p>Instead of registering directly on our website, you may also register using Facebook Connect. This service is provided
by Facebook Ireland Limited, 4 Grand Canal Square, Dublin 2, Ireland.</p>
<p>If you decide to register with Facebook Connect and click on the “Login with Facebook” or “Connect with Facebook”
buttons, you will be automatically redirected to the Facebook platform. There you can log in with your Facebook username
and password. This will link your Facebook profile to our website or services. This link gives us access to your data
stored on Facebook. Including especially your:</p>
<ul>
<li>Facebook name</li>
<li>Email address provided to Facebook</li>
<li>Facebook ID</li>
</ul>
<p>This data will be used to set up, provide, and personalize your account.</p>
<p>For more information, see Facebook’s Terms of Use and Privacy Policy. These can be found
at <a href="https://de-de.facebook.com/about/privacy/">https://de-de.facebook.com/about/privacy/</a>
and <a href="https://www.facebook.com/legal/terms/">https://www.facebook.com/legal/terms/</a>.</p>
<h3 id="leaving-comments-on-this-website">Leaving comments on this website</h3>
<p>If you use the comment function on *.4pforen.4players.de, the time at which you created the comment and your email
address will be stored along with your comment, as well as your username.</p>
<p><strong>Storage of the IP address</strong></p>
<p>Our comment function stores the IP addresses of those users who post comments. Since we do not check comments on our
site before they go live, we need this information to be able to pursue action for illegal or slanderous content.</p>
<p><strong>Subscribing to the comment feed</strong></p>
<p>As a user of this site, you can sign up to receive the comment feed after registering. Your email address will be
checked with a confirmation email. You can unsubscribe from this function at any time by clicking the link in the
emails. The data provided when you subscribed to the comments feed will then be deleted, but if you have submitted this
data to us for other purposes or elsewhere (such as subscribing to a newsletter), it will be retained.</p>
<p><strong>How long comments are stored</strong></p>
<p>The comments and the associated data (e.g. IP address) are stored and remain on our website until the content commented
upon has been completely deleted or the comments are required to be removed for legal reasons (slander, etc.).</p>
<p><strong>Legal basis</strong></p>
<p>The comments are stored based on your consent per Art. 6 (1) (a) GDPR. You may revoke your consent at any time with
future effect. An informal email making this request is sufficient. The data processed before we receive your request
may still be legally processed.</p>
<h3 id="processing-of-data-customer-and-contract-data">Processing of data (customer and contract data)</h3>
<p>We collect, process, and use personal data only insofar as it is necessary to establish, or modify legal relationships
with us (master data). This is done based on Art. 6 (1) (b) GDPR, which allows the processing of data to fulfill a
contract or for measures preliminary to a contract. We collect, process and use your personal data when accessing our
website (usage data) only to the extent required to enable you to access our service or to bill you for the same.</p>
<p>Collected customer data shall be deleted after completion of the order or termination of the business relationship.
Legal retention periods remain unaffected.</p>
<h3 id="data-transferred-when-signing-up-for-services-and-digital-content">Data transferred when signing up for services and digital content</h3>
<p>We transmit personally identifiable data to third parties only to the extent required to fulfill the terms of your
contract with us, for example, to banks entrusted to process your payments.</p>
<p>Your data will not be transmitted for any other purpose unless you have given your express permission to do so. Your
data will not be disclosed to third parties for advertising purposes without your express consent.</p>
<p>The basis for data processing is Art. 6 (1) (b) GDPR, which allows the processing of data to fulfill a contract or for
measures preliminary to a contract.</p>
<h2 id="5-social-media">5. Social media</h2>
<h3 id="share-content-via-plugins-facebook-google-twitter-etc">Share content via plugins (Facebook, Google+, Twitter, etc.)</h3>
<p>The content on our pages can be shared on other social networks like Facebook, Twitter, or Google+, but not limited to
the aforementioned. This page uses our own tool for this function. This tool establishes direct contact between the
networks and users only after users click on one of these buttons.</p>
<p>This tool does not automatically transfer user data to the operators of these platforms. If users are logged into one or
more of the social networks, the Like, +1, and Share buttons will display an information window in which the user can
edit the text before it is sent.</p>
<p>Our users can share the content of this page on social networks without their providers creating profiles of users’
surfing behavior.</p>
<h3 id="facebook-plugins-like--share-buttons">Facebook plugins (Like &amp; Share buttons)</h3>
<p>Our website includes plugins for the social network Facebook, Facebook Inc., 1 Hacker Way, Menlo Park, California 94025,
USA. The Facebook plugins can be recognized by the Facebook logo or the Like button on our site. For an overview of
Facebook plugins,
see <a href="https://developers.facebook.com/docs/plugins/">https://developers.facebook.com/docs/plugins/</a>.</p>
<p>When you visit our site, a direct connection between your browser and the Facebook server is established via the plugin.
This enables Facebook to receive information that you have visited our site from your IP address. If you click on the
Facebook “Like button” while you are logged into your Facebook account, you can link the content of our site to your
Facebook profile. This allows Facebook to associate visits to our site with your user account. Please note that, as the
operator of this site, we have no knowledge of the content of the data transmitted to Facebook or of how Facebook uses
this data. For more information, please see Facebook’s privacy policy
at <a href="https://de-de.facebook.com/policy.php">https://de-de.facebook.com/policy.php</a>.</p>
<p>If you do not want Facebook to associate your visit to our site with your Facebook account, please log out of your
Facebook account.</p>
<p><strong>Retargeting</strong></p>
<p>The 4Players websites use retargeting technologies such as Pixel from Facebook Ireland Limited. We use this technology
to make our online presence more interesting for you. This technology enables users of the Internet who are already
interested in 4Players to be targeted with advertising on websites of our partners. We are confident that a mix of a
personalised, interest-based advertising is generally more interesting for users of the Internet than advertising which
has no such personal basis. This advertising is incorporated into the websites of our partners on the basis of cookie
technology and an analysis of previous usage behaviour. This form of advertising is completely anonymous. No personal
data is stored and no usage profile will be associated with your personal data.</p>
<p>When you visit one of the pages of our website and have set your browser settings to accept cookies, for us this means
that you want to use our products and services and you agree to the use of cookies and other technology as described in
our Privacy Policy.</p>
<h3 id="twitter-plugin">Twitter plugin</h3>
<p>Functions of the Twitter service have been integrated into our website and app. These features are offered by Twitter
Inc., 1355 Market Street, Suite 900, San Francisco, CA 94103, USA. When you use Twitter and the “Retweet” function, the
websites you visit are connected to your Twitter account and made known to other users. In doing so, data will also be
transferred to Twitter. We would like to point out that, as the provider of these pages, we have no knowledge of the
content of the data transmitted or how it will be used by Twitter. For more information on Twitter’s privacy policy,
please go to <a href="https://twitter.com/privacy">https://twitter.com/privacy</a>.</p>
<p>Your privacy preferences with Twitter can be modified in your account settings
at <a href="https://twitter.com/account/settings">https://twitter.com/account/settings</a>.</p>
<h3 id="google-plugin">Google+ plugin</h3>
<p>Our pages use Google+ functions. It is operated by Google Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA.</p>
<p>Collection and disclosure of information: Using the Google +1 button allows you to publish information worldwide. By
means of the Google+ button, you and other users can receive custom content from Google and our partners. Google stores
both the fact that you have +1’d a piece of content and information about the page you were viewing when you clicked
+1. Your +1 can be displayed together with your profile name and photo in Google services, for example in search
results or in your Google profile, or in other places on websites and advertisements on the Internet.</p>
<p>Google records information about your +1 activities to improve Google services for you and others. To use the Google +
button, you need a globally visible, public Google profile that must contain at least the name chosen for the profile.
This name is used by all Google services. In some cases, this name may also replace a different name that you have used
to share content via your Google account. The identity of your Google profile can be shown to users who know your email
address or other information that can identify you.</p>
<p>Use of collected data: In addition to the uses mentioned above, the information you provide is used in accordance with
the applicable Google data protection policies. Google may publish summary statistics about users’ +1 activity or share
it with users and partners, such as publishers, advertisers, or affiliate websites.</p>
<h2 id="6-analytics-and-advertising">6. Analytics and advertising</h2>
<h3 id="google-analytics">Google Analytics</h3>
<p>This website uses Google Analytics, a web analytics service. It is operated by Google Inc., 1600 Amphitheatre Parkway,
Mountain View, CA 94043, USA.</p>
<p>Google Analytics uses so-called “cookies”. These are text files that are stored on your computer and that allow an
analysis of the use of the website by you. The information generated by the cookie about your use of this website is
usually transmitted to a Google server in the USA and stored there.</p>
<p>this data will be deleted after 26 months of inactivity</p>
<p>Google Analytics cookies are stored based on Art. 6 (1) (f) GDPR. The website operator has a legitimate interest in
analyzing user behavior to optimize both its website and its advertising.</p>
<p><strong>IP anonymization</strong></p>
<p>We have activated the IP anonymization feature on this website. Your IP address will be shortened by Google within the
European Union or other parties to the Agreement on the European Economic Area prior to transmission to the United
States. Only in exceptional cases is the full IP address sent to a Google server in the US and shortened there. Google
will use this information on behalf of the operator of this website to evaluate your use of the website, to compile
reports on website activity, and to provide other services regarding website activity and Internet usage for the website
operator. The IP address transmitted by your browser as part of Google Analytics will not be merged with any other data
held by Google.</p>
<p><strong>Browser plugin</strong></p>
<p>You can prevent these cookies being stored by selecting the appropriate settings in your browser. However, we wish to
point out that doing so may mean you will not be able to enjoy the full functionality of this website. You can also
prevent the data generated by cookies about your use of the website (incl. your IP address) from being passed to Google,
and the processing of this data by Google, by downloading and installing the browser plugin available at the following
link: <a href="https://tools.google.com/dlpage/gaoptout?hl=en">https://tools.google.com/dlpage/gaoptout?hl=en</a>.</p>
<p><strong>Objecting to the collection of data</strong></p>
<p>You can prevent the collection of your data by Google Analytics by clicking on the following link. An opt-out cookie
will be set to prevent your data from being collected on future visits to this site: <a>Disable Google
Analytics</a>.</p>
<p>For more information about how Google Analytics handles user data, see Google’s privacy
policy: <a href="https://support.google.com/analytics/answer/6004245?hl=en">https://support.google.com/analytics/answer/6004245?hl=en</a>
.</p>
<h3 id="matomo-formerly-piwik">Matomo (formerly Piwik)</h3>
<p>This website or app uses the open source web analytics service Matomo. Matomo uses so-called “cookies”. These are text
files that are stored on your computer and that allow an analysis of the use of the website by you. For this purpose,
the information generated by the cookie about the use of this website is stored on our server. The IP address is
anonymized before it is stored.</p>
<p>Matomo cookies remain on your device until you delete them.</p>
<p>The storage of Matomo cookies is based on Art. 6 (1) (f) GDPR. The website operator has a legitimate interest in
analyzing user behavior in order to optimize both its website and its advertising.</p>
<p>The information generated by the cookies about your use of this website will not be disclosed to third parties. You can
prevent these cookies being stored by selecting the appropriate settings in your browser. However, we wish to point out
that doing so may mean you will not be able to enjoy the full functionality of this website.</p>
<p>If you do not agree with the storage and use of your data, you can disable this feature
here: <a href="https://subpixel.4players.de/index.php?module=CoreAdminHome&amp;action=optOut&amp;language=de">Opt-Out</a>
. In this case, an opt-out cookie will be stored in your browser to prevent Matomo from storing your usage data. If you
delete your cookies, this will mean that the opt-out cookie will also be deleted. You will then need to reactivate it
when you return to our site if you wish your activity not to be tracked.</p>
<h3 id="awstats">AWStats</h3>
<p>We use “AWStats” statistical software on our website to analyze user behavior. “AWStats” statistical software creates
cookies that are stored as small text files on your device at the end of your visit to our website. The cookies are
created via the “4players.de” domain. The name of the cookies begins with “AW.” The cookies are stored on your device
for a maximum of 50 days and enable us recognize users who have already been on our website. They also enable us to
perform a non-personal analysis of user behavior on our website. For example, we can see which page you came from to
this website and which pages you have viewed on our website and for how long. The cookies are used for the purpose of
creating pseudonymized user profiles. If you want to prevent your user behavior from being analyzed, you can use your
browser settings to block the “4players.de” domain from creating cookies on your device. Please note, however, that
blocking cookies will limit your use of our service.</p>
<h3 id="google-adsense">Google AdSense</h3>
<p>This website uses Google AdSense, a service for including advertisements from Google Inc. (“Google”). It is operated by
Google Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA.</p>
<p>Google AdSense uses so-called “cookies”, which are text files stored in your computer that enable an analysis of the way
you use the website. Google AdSense also uses so-called web beacons (invisible graphics). Through these web beacons,
information such as the visitor traffic on these pages can be evaluated.</p>
<p>The information generated by cookies and web beacons relating to your use of this website (including your IP address),
and delivery of advertising formats, is transmitted to a Google server in the US and stored there. This information can
be passed on from Google to contracting parties of Google. However, Google will not merge your IP address with other
data you have stored.</p>
<p>AdSense cookies are stored based on Art. 6 (1) (f) GDPR. The website operator has a legitimate interest in analyzing
user behavior to optimize both its website and its advertising.</p>
<p>You can prevent the installation of cookies by setting your browser software accordingly. Please be aware that in this
case, you may not be able to make full use of all the features of this website. By using this website, you agree to the
processing of data relating to you and collected by Google as described and for the purposes set out above.</p>
<h3 id="google-admob">Google AdMob</h3>
<p>Our apps use Google AdMob, a service for including advertisements from Google Inc. (“Google”). It is operated by Google
Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA.</p>
<p>Google AdMob collects information from your mobile device.</p>
<p>The information relating to your use of our apps (including your IP address), and delivery of advertising formats, is
transmitted to a Google server in the US and stored there. This information can be passed on from Google to contracting
parties of Google. However, Google will not merge your IP address with other data you have stored.</p>
<p>The data collected by AdMob is stored based on Art. 6 (1) (f) GDPR. The app operator has a legitimate interest in
analyzing user behavior to optimize both its app and its advertising.</p>
<p>By using this app, you agree to the processing of data relating to you and collected by Google as described and for the
purposes set out above.</p>
<h3 id="google-adwords-and-google-conversion-tracking">Google AdWords and Google Conversion Tracking</h3>
<p>This website uses Google AdWords. AdWords is an online advertising program from Google Inc., 1600 Amphitheater Parkway,
Mountain View, CA 94043, United States (“Google”).</p>
<p>As part of Google AdWords, we use so-called conversion tracking. When you click on an ad served by Google, a conversion
tracking cookie is set. Cookies are small text files that your internet browser stores on your computer. These cookies
expire after 30 days and are not used for personal identification of the user. Should the user visit certain pages of
the website and the cookie has not yet expired, Google and the website can tell that the user clicked on the ad and
proceeded to that page.</p>
<p>Each Google AdWords advertiser has a different cookie. Thus, cookies cannot be tracked using the website of an AdWords
advertiser. The information obtained using the conversion cookie is used to create conversion statistics for the AdWords
advertisers who have opted for conversion tracking. Customers are told the total number of users who clicked on their ad
and were redirected to a conversion tracking tag page. However, advertisers do not obtain any information that can be
used to personally identify users. If you do not want to participate in tracking, you can opt-out of this by easily
disabling the Google Conversion Tracking cookie by changing your browser settings. In doing so, you will not be included
in the conversion tracking statistics.</p>
<p>Conversion cookies are stored based on Art. 6 (1) (f) GDPR. The website operator has a legitimate interest in analyzing
user behavior to optimize both its website and its advertising.</p>
<p>For more information about Google AdWords and Google Conversion Tracking, see the Google Privacy
Policy: <a href="https://www.google.de/policies/privacy/">https://www.google.de/policies/privacy/</a>.</p>
<p>You can configure your browser to inform you about the use of cookies so that you can decide on a case-by-case basis
whether to accept or reject a cookie. Alternatively, your browser can be configured to automatically accept cookies
under certain conditions or to always reject them, or to automatically delete cookies when closing your browser.
Disabling cookies may limit the functionality of this website.</p>
<h3 id="affiliate-partners">Affiliate partners</h3>
<p>This website uses tracking cookies from the following affiliate partners:</p>
<ul>
<li>belboon GmbH, Weinmeisterstr. 12-14, 10178 Berlin
– <a href="https://www.belboon.com/de/ueber-uns/datenschutz/">Data protection notice</a></li>
<li>AWIN AG, Eichhornstraße 3, 10785 Berlin – <a href="https://www.awin.com/us/privacy">Data protection notice</a></li>
<li>ADCELL / Firstlead GmbH mit der Marke ADCELL (<a href="https://www.adcell.de">www.adcell.de</a>)
– <a href="https://www.adcell.de/datenschutz">Data protection notice</a></li>
</ul>
<p>Cookies are created when a visitor clicks on an advertisement for our products and services which contains an affiliate
partner’s link. Our affiliate partners use cookies to track the origin of orders. Our affiliate partners also use
so-called tracking pixels to evaluate information on the web pages, such as visitor traffic. The information generated
by cookies and tracking pixels about the use of this website (including IP addresses) and the delivery of advertising
formats is transferred to our affiliate partners’ servers and stored there. Among other things, they can see that a
partner link has been clicked on this website. The affiliate partners can pass this (anonymized) information on to
contractual partners under certain circumstances, but data, such as IP addresses, is not merged with other stored data.</p>
<h2 id="7-newsletter">7. Newsletter</h2>
<h3 id="newsletter-data">Newsletter data</h3>
<p>If you would like to receive our newsletter, we require a valid email address as well as information that allows us to
verify that you are the owner of the specified email address and that you agree to receive this newsletter. No
additional data is collected or is only collected on a voluntary basis. We only use this data to send the requested
information and do not pass it on to third parties.</p>
<p>We will, therefore, process any data you enter onto the contact form only with your consent per Art. 6 (1) (a) GDPR. You
can revoke consent to the storage of your data and email address as well as their use for sending the newsletter at any
time, e.g. through the “unsubscribe” link in the newsletter. The data processed before we receive your request may still
be legally processed.</p>
<p>The data provided when registering for the newsletter will be used to distribute the newsletter until you cancel your
subscription when said data will be deleted. Data we have stored for other purposes (e.g. email addresses for the
members area) remain unaffected.</p>
<h3 id="mailjet">Mailjet</h3>
<p>This website uses Mailjet for sending newsletters. The provider is Mailjet GmbH, Rankestr. 21, 10789 Berlin, Germany.
Mailjet is a service to organize and analyze the sending of newsletters. The data you enter to subscribe to the
newsletter (e.g. e-mail address) is stored on the servers of Mailjet.</p>
<p>Our newsletters sent with Mailjet enable us to analyse the behaviour of the newsletter recipients. Among other things,
it is possible to analyse how many recipients have opened the newsletter message and how often which link in the
newsletter was clicked on. Conversion tracking can also be used to analyse whether a pre-defined action (e.g. purchase
of a product on our website) was carried out after clicking on the link in the newsletter. Further information on data
analysis by Mailjet newsletter is available
at <a href="https://www.mailjet.com/feature/tracking-tools">www.mailjet.com/feature/tracking-tools</a></p>
<p>The data processing is carried out on the basis of your consent (Art. 6 (1) (a) GRDPR). You can revoke this consent at
any time by cancelling the newsletter. The legality of the data processing operations already carried out remains
unaffected by the revocation.</p>
<p>If you do not want to receive any analysis from Mailjet, you will have to unsubscribe from the newsletter. For this
purpose, we provide a corresponding link in every newsletter message. You can also unsubscribe directly on the website.
Data that has been saved by us for other purposes (e.g. e-mail addresses for the member area) remains unaffected by
this.</p>
<p>You can find more details in the data protection regulations of Mailjet
under: <a href="https://www.mailjet.com/privacy-policy">www.mailjet.com/privacy-policy</a>.</p>
<h2 id="8-plugins-and-tools">8. Plugins and tools</h2>
<h3 id="youtube">YouTube</h3>
<p>Our website uses plugins from YouTube, which is operated by Google. The operator of the pages is YouTube LLC, 901 Cherry
Ave., San Bruno, CA 94066, USA.</p>
<p>If you visit one of our pages featuring a YouTube plugin, a connection to the YouTube servers is established. Here the
YouTube server is informed about which of our pages you have visited.</p>
<p>If you’re logged in to your YouTube account, YouTube allows you to associate your browsing behavior directly with your
personal profile. You can prevent this by logging out of your YouTube account.</p>
<p>YouTube is used to help make our website appealing. This constitutes a justified interest pursuant to Art. 6 (1) (f)
GDPR.</p>
<p>Further information about handling user data, can be found in the data protection declaration of YouTube
under <a href="https://www.google.de/intl/de/policies/privacy">https://www.google.de/intl/de/policies/privacy</a>.</p>
<h3 id="google-web-fonts">Google Web Fonts</h3>
<p>For uniform representation of fonts, this page uses web fonts provided by Google. When you open a page, your browser
loads the required web fonts into your browser cache to display texts and fonts correctly.</p>
<p>For this purpose your browser has to establish a direct connection to Google servers. Google thus becomes aware that our
web page was accessed via your IP address. The use of Google Web fonts is done in the interest of a uniform and
attractive presentation of our website. This constitutes a justified interest pursuant to Art. 6 (1) (f) GDPR.</p>
<p>If your browser does not support web fonts, a standard font is used by your computer.</p>
<p>Further information about handling user data, can be found
at <a href="https://developers.google.com/fonts/faq">https://developers.google.com/fonts/faq</a> and in
Google’s privacy policy
at <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>.</p>
<h3 id="google-recaptcha">Google reCAPTCHA</h3>
<p>We use “Google reCAPTCHA” (hereinafter “reCAPTCHA”) on our websites. This service is provided by Google Inc., 1600
Amphitheater Parkway, Mountain View, CA 94043, USA (“Google”).</p>
<p>reCAPTCHA is used to check whether the data entered on our website (such as on a contact form) has been entered by a
human or by an automated program. To do this, reCAPTCHA analyzes the behavior of the website visitor based on various
characteristics. This analysis starts automatically as soon as the website visitor enters the website. For the analysis,
reCAPTCHA evaluates various information (e.g. IP address, how long the visitor has been on the website, or mouse
movements made by the user). The data collected during the analysis will be forwarded to Google.</p>
<p>The reCAPTCHA analyses take place completely in the background. Website visitors are not advised that such an analysis
is taking place.</p>
<p>Data processing is based on Art. 6 (1) (f) GDPR. The website operator has a legitimate interest in protecting its site
from abusive automated crawling and spam.</p>
<p>For more information about Google reCAPTCHA and Google’s privacy policy, please visit the following
links: <a href="https://www.google.com/intl/de/policies/privacy/">https://www.google.com/intl/de/policies/privacy/</a>
and <a href="https://www.google.com/recaptcha/intro/android.html">https://www.google.com/recaptcha/intro/android.html</a>
.</p>
<h3 id="trustpilot">Trustpilot</h3>
<p>Since your opinion is important to us and we would like to know where we can improve our offers, customer reviews are
particularly important to us. Therefore we offer you the possibility to rate our offers via the portal <a href="https://www.trustpilot.de">www.trustpilot.de</a>
of the company Trustpilot A/S, Pilestraede 58, 5th floor, 1112 Copenhagen, Denmark. For this purpose, you will receive
an e-mail from us after conclusion of a contract in which we ask for your consent to an invitation from Trustpilot to an
evaluation. If you accept this invitation, we will provide Trustpilot with your email address, first name and last name
for this purpose. If you participate in this rating system, your rating will be published on our website as well as on
the Trustpilot and its partners’ websites. Further information on data protection at Trustpilot can be found
at <a href="https://de.legal.trustpilot.com/end-user-privacy-terms">https://de.legal.trustpilot.com/end-user-privacy-terms</a></p>
<h2 id="9-contract-conclusion">9. Contract conclusion</h2>
<h3 id="payment-service-providers-postal-items-debt-collection">Payment service providers, postal items, debt collection</h3>
<p><strong>Global Collect</strong><span></span></p>
<p>Our website offers payments via our service providers Global Collect Services B.V., Planetenweg 43-59, 2132 HM Hoofdorp,
Netherlands (hereinafter referred to as “Global Collect”).</p>
<p>When you pay for a product or service, the payment information you enter is sent to Global Collect. Further information
can be obtained here: <a href="https://www.ingenico.com/contact-us/contact">Contact</a>
and <a href="https://www.ingenico.com/privacy-policy">Privacy Policy</a></p>
<p>The payment data you provide will be supplied to Global Collect based on Art. 6(1)(a) (Consent) and Art. 6(1)(b) GDPR (
Processing for the performance of a contract). You have the option to revoke your consent at any time. Revocation does
not affect the processing of data previously collected.</p>
<p><strong>onlinebrief24.de</strong></p>
<p>We use the onlinebrief24.de service of letterei.de Postdienste GmbH, Frankfurter Str. 74, 64521 Groß-Gerau, Germany, to
print, process and deliver personalised mail.</p>
<p>The data protection regulations for this service can be viewed
here: <a href="https://www.onlinebrief24.de/datenschutz/datenschutzerklaerung">Privacy Policy</a></p>
<p>The transmission of your data to onlinebrief24.de takes place on the basis of Art. 6(1)(b) GDPR (Processing for the
performance of a contract).</p>
<p><strong>REAL Solution Inkasso</strong></p>
<p>If you do not pay outstanding invoices despite repeated reminders, we are entitled to transfer the data required to
collect a debt to a debt collection service provider in order to collect the debt on our behalf. Alternatively, we may
sell outstanding receivables to a debt collection service provider. The latter then becomes the owner of the claim and
asserts the claims in his own name. We cooperate with the following debt collection service provider: REAL Solution
Inkasso GmbH &amp; Co. KG, Normannenweg 32, 20537 Hamburg, Germany.</p>
<p>The data protection regulations for this service provider can be viewed
here: <a href="https://www.real-solution.de/rsp_datenschutz.html">Privacy Policy</a></p>
<p>The lawful basis for the transmission of data in connection with the collection of a debt is Art. 6(1)(b) GDPR. The
transmission of data in connection with the sale of receivables is based on Art. 6(1)(f) GDPR.</p>
<h2 id="10-ai-services">10. A.I. Services</h2>
<h3 id="ai-assistant">A.I. Assistant</h3>
<p>Our experimental A.I. assistant app is using the Assistants API from OpenAI, L.L.C., 3180 18th St., San Francisco,
California 94110.</p>
<p>To use the assistant and to be able to help you with acceptable answers, you have to consent into recording your input
and questions for the sole purpose of improving the quality of the output and preventing misinformation or factual errors.
Your questions and the assistant&rsquo;s answers will both be anonymized and sent to OpenAI.</p>
</div>`}),e.add({id:3643,href:"https://www.4players.io/odin/support/",title:"Support",section:"ODIN Documentation",description:"Get technical support for anything related 4Players ODIN",content:`<p>Contact us through the listed methods below to receive answers to your questions and learn more about ODIN.</p>
<h2 id="premium-support">Premium Support</h2>
<p>Please understand, that we are not able to provide 24/7 support and that you might not get an answer immediately. If
you need urgent help or assistant from our developers we offer <strong>premium support services</strong>. Please contact our
<a href="/company/contact_us/">sales team</a> to learn more about our premium support services and pricing.</p>
<p><a href='https://calendly.com/marco-hirt/30min' target='' class="btn btn-primary">Book a meeting</a></p>
<h2 id="ai-assistant">AI Assistant</h2>
<p>The AI assistant is available 24/7 to answer your questions. We have spent a lot of time to train the AI assistants
with our SDKs, guides and FAQs that we have collected over the years. And we are using latest AI technology provided
by OpenAI to do our best to ensure, that the assistants are helpful. But we are still in the early stages of this
technology, and we are constantly improving the assistants. So please be patient with us and help us to improve the
assistants by providing feedback (directly within the app with thumbs up and down) and in Discord if you like.</p>
<p><a href="https://odin-ai-assistant-fw5pmdbggq-lm.a.run.app/">Try ODIN AI Assistant</a></p>
<h2 id="discord">Discord</h2>
<p>Join our official Discord server to chat with us directly and become a part of the 4Players ODIN community.</p>
<p><a href="https://4np.de/discord"><img src="/images/join_discord.png" alt="Join us on Discord"></a></p>
<h2 id="twitter">Twitter</h2>
<p>Have a quick question? Tweet us at <a href="https://twitter.com/4PlayersBiz">@4PlayersBiz</a> and we’ll help you resolve any issues.</p>
<h2 id="email">Email</h2>
<p>Don’t use Discord or Twitter? Send an email to <a href="mailto:odin@4players.io">odin@4players.io</a> and we’ll get back to you as soon as possible.</p>
`}),e.add({id:3645,href:"https://www.4players.io/odin/introduction/web-client/",title:"Web Client",section:"ODIN Documentation",description:"This guide shows you how to leverage our Web Client to test your ODIN integration",content:`<p>We provide a free web client that you can use to test your ODIN integration. It&rsquo;s a simple yet powerful web app built
on top of our Web SDK that we use internally to test our SDKs. It allows you to connect to any ODIN room and communicate
with others. As ODIN is fully cross platform, you can also use the Web SDK to test your Unreal or Unity integration.</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>An ODIN access key. <a href="/odin/introduction/access-keys/">Read this guide to learn how to generate an access key</a>.</li>
<li>A modern browser like Chrome, Firefox or Safari.</li>
<li>A microphone (optional)</li>
<li>A pair of headphones or speakers</li>
</ul>
<h2 id="data-structures-used">Data structures used</h2>
<p>ODIN gives you full flexibility with its user data structure. You can use it to store any data you want on each peer. The
Web Client uses this structure to show the users name, the version of the client and the platform it is running on.
It&rsquo;s a JSON object, i.e. you need to encode a JSON Object to a byte array and set that as the user data. Please note:
This is fully optional - it&rsquo;s just &ldquo;eye candy&rdquo;. The Web Client will show any peer connected to the room - if no user data
in this form has been provided it will just title it &ldquo;Unknown User&rdquo;.</p>
<pre><code class="language-TypeScript">export interface Avatar {
  data: string,
  seed: string
}

export interface UserData {
  name: string,
  avatar: Avatar,
  userId: string,
  outputMuted: number,
  inputMuted: number,
  platform: string,
  version: string
}
</code></pre>
<h2 id="using-the-web-client">Using the Web Client</h2>
<p>The Web Client is available at <a href="https://app.odin.4players.io/">https://app.odin.4players.io/</a>. When launching the app,
you&rsquo;ll see a screen like this:</p>
<figure><img src="/images/odin/web_client_join.jpg"
         alt="Web Client Join Screen"/>
</figure>

<h3 id="setting-your-access-key">Setting your Access Key</h3>
<p>The first thing you need to do is to set your access key. You can do this by clicking on the small gear icon next to the
connect button - that is important as you want to use the same access key you use for your app, game or website. If
access keys don&rsquo;t match users will not be able to communicate with each other.</p>
<figure style="max-width: 400px"><a href="/images/odin/web_client_access_key.jpg" title="Click to enlarge" data-lity><img src="/images/odin/web_client_access_key.jpg"
         alt="Web Client Access Key" width="400"/></a>
</figure>





<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Depending on your screen size you might need to scroll down that dialog window a bit, as the access key settings are
at the bottom of the dialog. Also note, that you enter your Access Key into the field <code>Access Key</code> (not Access Token).</p>
</div>
</div>

<h3 id="joining-a-room">Joining a room</h3>
<p>Enter the room and the same gateway as you use in your app, game or website. You can also enter a name. The web client
will fill out the data structure for user data described above. If your integration insists on a specific user data
you might need to work around that a bit.</p>
<p>The click on the <code>Connect</code> button to join the room.</p>
<h2 id="user-manual">User Manual</h2>
<p>The Web Client is pretty straight forward. You can mute your microphone and speakers by clicking on the icons in the
bottom left control panel. On the left you&rsquo;ll see all other users connected to the room. The web client also features
a simple text chat and video chat.</p>
<figure><img src="/images/odin/web_client.jpg"
         alt="Web Client"/>
</figure>

<h2 id="troubleshooting">Troubleshooting</h2>
<p>Make sure that you use the same access key and room name as you use in your own integration. It&rsquo;s always wise to douple
check the correct entry of the access key.</p>
<h2 id="support">Support</h2>
<p>Please note, that we don&rsquo;t provide support for this tool - as we use it internally for testing purposes it typically
uses the latest SDK and server version - so if you experience any issues, please check if you use the latest version
of the SDK and server. Please also make sure, that you entered your access key in the field <code>Access Key</code> and not the
<code>Access Token</code>. The <code>AccessToken</code> field is just used if you don&rsquo;t use a gateway but connect directly to an ODIN server.</p>
`}),e.add({id:3646,href:"https://www.4players.io/odin/faq/general/what-license-is-your-sdk-under/",title:"What license is your SDK under?",section:"ODIN Documentation",description:"Understand the licensing of ODIN's SDKs, offering the flexibility of the MIT license for Unity, Unreal, Swift, Web SDKs, and the proprietary nature of our Core SDK.",content:`<p>Our SDKs for Unity, Unreal, Swift and the Web (and others) are licensed under the MIT license, you are free to use them
and you can even modify them to your needs. However, all our SDKs include our Core SDK which is not open source and thus
cannot be modified, in fact our license agreement prohibits you from reverse engineering our Core SDK.</p>
`}),e.add({id:3647,href:"https://www.4players.io/odin/faq/general/can-i-use-google-cloud-functions-to-generate-access-tokens/",title:"Can I use Google Cloud Functions to generate access tokens?",section:"ODIN Documentation",description:"Effortlessly generate access tokens using Google Cloud Functions with our NodeJS example, detailed in our Token Server Example, for a smooth integration with ODIN.",content:`<p>Yes, you can use Google Cloud Functions to generate access tokens with your access key. We have an example on how to do
this with NodeJS. Please see our <a href="/odin/examples/token-server/">Token Server Example</a> for more
information.</p>
`}),e.add({id:3648,href:"https://www.4players.io/odin/faq/general/can-i-use-aws-lambda-to-generate-access-tokens/",title:"Can I use AWS Lambda to generate access tokens?",section:"ODIN Documentation",description:"Integrate ODIN seamlessly using AWS Lambda to generate access tokens. Our guide and NodeJS example in the Token Server Example simplify the process for you.",content:`<p>Yes, you can use AWS Lambda to generate access tokens with your access key. We have an example on how to do this with
NodeJS. Please see our <a href="/odin/examples/token-server/">Token Server Example</a> for more information.</p>
`}),e.add({id:3649,href:"https://www.4players.io/odin/faq/general/can-i-use-azure-function-to-generate-access-tokens/",title:"Can I use Azure Function to generate access tokens?",section:"ODIN Documentation",description:"Learn how to use Azure Function with NodeJS to generate access tokens for ODIN, offering a seamless integration process as detailed in our Token Server Example.",content:`<p>Yes, you can use Azure Function to generate access tokens with your access key. We have an example on how to do this
with NodeJS. Please see our <a href="/odin/examples/token-server/">Token Server Example</a> for more information.</p>
`}),e.add({id:3650,href:"https://www.4players.io/odin/faq/general/can-odin-record-a-rooms-audio-for-later-playback/",title:"Can ODIN record a room's audio for later playback?",section:"ODIN Documentation",description:"Discover ODIN's capabilities for recording room audio for playback, transcription, and content moderation, including easy implementation with our NodeJS and Bot SDKs.",content:`<p>Yes, ODIN can record a room&rsquo;s audio and store it in a file. This file can be played back later. You can also use
recording features to transcribe the audio for content moderation or automatic session notes. We provide a NodeJS SDK
and a Bot SDK that allows you to implement these features in no time. And as everything is running on your side there
are no issues with data protection, too.</p>
<p>We have an example on how to record and transcribe ODIN audio streams in real time.
<a href="/odin/examples/transcribe-audio/">Read this guide to learn more</a>.</p>
`}),e.add({id:3651,href:"https://www.4players.io/odin/faq/general/i-cannot-connect-to-odin-what-can-i-do/",title:"I cannot connect to ODIN. What can I do?",section:"ODIN Documentation",description:"Troubleshoot connection issues with ODIN using our guide on QUIC/HTTP3 technology and how to communicate with your IT department for opening the required ports.",content:`<p>ODIN uses latest QUIC/HTTP3 technology and some administrators of cooperate office networks block ports required by this
technology. Please check with your IT department if they can open the required ports. Please provide them this link to
our <a href="/odin/hosting/cloud/#firewall-settings">firewall settings</a>.</p>
`}),e.add({id:3652,href:"https://www.4players.io/odin/faq/general/why-should-i-choose-odin-and-not-the-competition/",title:"Why should I choose ODIN and not the competition?",section:"ODIN Documentation",description:"Discover why ODIN stands out as an affordable, feature-rich solution for in-game communication, supported by a team with extensive experience in developing software for gamers.",content:`<p>We provide an affordable and feature-rich solution for any platform you’ll ever need. Our dedicated development team has
years of experience developing communication software for gamers, and we’ll help you tailor exactly the immersive
in-game
experience that your players want.</p>
<p>ODIN has been built from scratch by industry leading voice engineers with your privacy and security in mind. In
addition, ODIN provides the following key features:</p>
<ul>
<li>Ultra-low latency and extremely low resource usage</li>
<li>Best-in-class voice quality with noise suppression</li>
<li>Built-in data protection and fully GDPR compliant</li>
<li>Support for thousands of concurrent users chatting at the same time with native 3D spatial audio support</li>
<li>Deep Unity and Unreal Engine integration</li>
<li>Zero maintenance and operations for clients but support for self-hosting if they want to (for sensitive areas)</li>
</ul>
<p>This table should give you an overview how ODIN compares to other solutions.</p>




<div class="comparison-table">
    <table class="comparison">
        <thead>
            <tr>
                <th>Feature</th>
                
                <th class="value">ODIN</th>
                
                <th class="value">Photon</th>
                
                <th class="value">TeamSpeak</th>
                
                <th class="value">Agora</th>
                
                <th class="value">Vivox</th>
                
                <th class="value">EOS</th>
                
            </tr>
        </thead>
        
        <tbody>
            <tr class="feature-header">
                <th colspan="7">Hosting &amp; Pricing</th>
            </tr>
            
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-0'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Cloud hosting</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Let us deal with the setup, administration and bandwidth costs. ODIN leverages worldwide production-ready and battle-tested server infrastructure from 4Netplayers, who have been providing voice and game servers for more than 20 years.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-0">
                <td colspan="7">Let us deal with the setup, administration and bandwidth costs. ODIN leverages worldwide production-ready and battle-tested server infrastructure from 4Netplayers, who have been providing voice and game servers for more than 20 years.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-1'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Self hosting</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN infrastructure can be hosted on-premise. Run our server software on your own infrastructure allowing you complete control and customization of your deployment environment. ODIN comes with Docker support for easy deployment wherever needed.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-1">
                <td colspan="7">ODIN infrastructure can be hosted on-premise. Run our server software on your own infrastructure allowing you complete control and customization of your deployment environment. ODIN comes with Docker support for easy deployment wherever needed.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-2'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Traffic included</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Traffic costs can grow significantly if voice chat is used heavily or by many users and it’s hard to estimate those costs. Every month will have its surprise day when you get your invoice. Deals made for 4Netplayers with cloud and server providers all over the world allow us to include traffic costs in all our tiers. No hidden or hard to estimate costs for you.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-2">
                <td colspan="7">Traffic costs can grow significantly if voice chat is used heavily or by many users and it’s hard to estimate those costs. Every month will have its surprise day when you get your invoice. Deals made for 4Netplayers with cloud and server providers all over the world allow us to include traffic costs in all our tiers. No hidden or hard to estimate costs for you.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-0-3'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Users per room</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            How many users can join the same room to talk together. MMORPGs or larger battle royal games should be able to bring hundreds of users together. There is no limit for users per room at ODIN. However, there is a technical limit that depends on the implementation (i.e. a lot of voice communication, or more text and simple data). 2000 users should be no issues at all.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    2000&#43;
                    
                </td>
                
                
                <td class="value">
                    
                    50
                    
                </td>
                
                
                <td class="value">
                    
                    1000
                    
                </td>
                
                
                <td class="value">
                    
                    128
                    
                </td>
                
                
                <td class="value">
                    
                    
                    
                </td>
                
                
                <td class="value">
                    
                    16
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-0-3">
                <td colspan="7">How many users can join the same room to talk together. MMORPGs or larger battle royal games should be able to bring hundreds of users together. There is no limit for users per room at ODIN. However, there is a technical limit that depends on the implementation (i.e. a lot of voice communication, or more text and simple data). 2000 users should be no issues at all.</td>
            </tr>
            
        </tbody>
        
        <tbody>
            <tr class="feature-header">
                <th colspan="7">Platform &amp; Engine Integration</th>
            </tr>
            
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-0'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Deep Unity Integration</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN provides a full-featured Unity SDK and leverages Unity&rsquo;s audio processing pipeline for capture and playback. Developers work with Unity tools they know like AudioSource and AudioMixers and get 3D positional audio automatically. ODIN fully integrates into more advanced 3D audio solutions and comes with a couple of examples and scripts for easy integration of different materials and their damping effects (like glass or concrete).
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-0">
                <td colspan="7">ODIN provides a full-featured Unity SDK and leverages Unity&rsquo;s audio processing pipeline for capture and playback. Developers work with Unity tools they know like AudioSource and AudioMixers and get 3D positional audio automatically. ODIN fully integrates into more advanced 3D audio solutions and comes with a couple of examples and scripts for easy integration of different materials and their damping effects (like glass or concrete).</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-1'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Deep Unreal Engine Integration</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Many voice SDKs are just a wrapper around browser based WebRTC libraries. ODIN offers native Unreal Engine (UE4 &amp; UE5) support with simple to use Blueprint support for easy and reliable voice integration. Use the tools you know within the Unreal Engine.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-1">
                <td colspan="7">Many voice SDKs are just a wrapper around browser based WebRTC libraries. ODIN offers native Unreal Engine (UE4 &amp; UE5) support with simple to use Blueprint support for easy and reliable voice integration. Use the tools you know within the Unreal Engine.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-2'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Unreal Engine 5 support</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Unreal Engine 5 is best suited for large open-world games. This requires a reliable voice technology for as many users. ODIN is a great fit and offers full Unreal Engine 5 support.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-2">
                <td colspan="7">Unreal Engine 5 is best suited for large open-world games. This requires a reliable voice technology for as many users. ODIN is a great fit and offers full Unreal Engine 5 support.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-3'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Web Support</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN is available for the web as vanilla JavaScript script or <code>npm</code> package and can be integrated into websites or apps built with web technologies (like Angular, Vue, React, ReactNative, Svelte, …) in a couple of minutes. ODIN cross-platform compatibility allows users to interact (i.e. chat, realtime data synchronization) with each other independently where they are. Think about users talking within a CRM tool with users running in a virtual VR shopping center. All this is possible with ease with ODIN.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-3">
                <td colspan="7">ODIN is available for the web as vanilla JavaScript script or <code>npm</code> package and can be integrated into websites or apps built with web technologies (like Angular, Vue, React, ReactNative, Svelte, …) in a couple of minutes. ODIN cross-platform compatibility allows users to interact (i.e. chat, realtime data synchronization) with each other independently where they are. Think about users talking within a CRM tool with users running in a virtual VR shopping center. All this is possible with ease with ODIN.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-1-4'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Swift SDK</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Apple developers are picky about their tools as they are used to work with the best tech. Our Swift SDK offers a quick and easy integration into the Apple eco-system. The SDK comes with Playgrounds to learn the SDK very quickly and integrates seamlessly with AVAudioEngine.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-1-4">
                <td colspan="7">Apple developers are picky about their tools as they are used to work with the best tech. Our Swift SDK offers a quick and easy integration into the Apple eco-system. The SDK comes with Playgrounds to learn the SDK very quickly and integrates seamlessly with AVAudioEngine.</td>
            </tr>
            
        </tbody>
        
        <tbody>
            <tr class="feature-header">
                <th colspan="7">Core Communication Features</th>
            </tr>
            
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-0'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Native Spatial Audio</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Spatial audio is a feature that allows users to experience enhanced immersion and a sense of presence by creating a 3D soundscape that reflects the positions and movements of the participants within a virtual environment. This can help to create a more engaging and realistic experience for users, as the sound seems to be coming from the direction of the speaker, rather than from a fixed position in the room.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-0">
                <td colspan="7">Spatial audio is a feature that allows users to experience enhanced immersion and a sense of presence by creating a 3D soundscape that reflects the positions and movements of the participants within a virtual environment. This can help to create a more engaging and realistic experience for users, as the sound seems to be coming from the direction of the speaker, rather than from a fixed position in the room.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-1'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Client-Server</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            There are two basic networking topologies possible: Peer to Peer and Client-Server. In peer to peer solutions there is no central hub but each user must send his data to each other user. Data traffic grows exponentially with each additional user and does not work for more than 4 users reliable. Not considering issues with firewalls, NAT and many other shortcomings. Client-server software has a central hub and can handle thousands of users.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-1">
                <td colspan="7">There are two basic networking topologies possible: Peer to Peer and Client-Server. In peer to peer solutions there is no central hub but each user must send his data to each other user. Data traffic grows exponentially with each additional user and does not work for more than 4 users reliable. Not considering issues with firewalls, NAT and many other shortcomings. Client-server software has a central hub and can handle thousands of users.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-2'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Latest technology</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Most voice SDKs are built on top of WebRTC. WebRTC is a monstrous library to manage all sorts of real-time communication into browsers. WebRTC is a very old and very complex piece of software. ODIN is built from scratch on latest tech like HTTP3/QUIC on a proprietary protocol that is developed with deep game engine integration and spatial 3D audio support in mind.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-2">
                <td colspan="7">Most voice SDKs are built on top of WebRTC. WebRTC is a monstrous library to manage all sorts of real-time communication into browsers. WebRTC is a very old and very complex piece of software. ODIN is built from scratch on latest tech like HTTP3/QUIC on a proprietary protocol that is developed with deep game engine integration and spatial 3D audio support in mind.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-3'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Multi-room support</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            Voice solutions typically use a room or channel based approach where all users connected to the same room or channel can talk to each other. Some use-cases require users to be able to join multiple rooms at the same time. ODIN comes with native multi-room support. Every user can join as many rooms as they like. There can be a 3D positional audio chat that mimics real voice and in addition to that users can have a walkie-talkie to talk to users that are out of reach. You can also define rooms that are just used to real-time data synchronization.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-3">
                <td colspan="7">Voice solutions typically use a room or channel based approach where all users connected to the same room or channel can talk to each other. Some use-cases require users to be able to join multiple rooms at the same time. ODIN comes with native multi-room support. Every user can join as many rooms as they like. There can be a 3D positional audio chat that mimics real voice and in addition to that users can have a walkie-talkie to talk to users that are out of reach. You can also define rooms that are just used to real-time data synchronization.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-4'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Intrinsic data protection</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN is completely stateless. The authentication works with a single token created by you per user and room that stores everything required for the service. This token is not stored anywhere in the ODIN infrastructure. Rooms are automatically created once the first user joins the room and are deleted once the last user left the room. There is no database in the background. ODIN does not collect or store any data at all.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-4">
                <td colspan="7">ODIN is completely stateless. The authentication works with a single token created by you per user and room that stores everything required for the service. This token is not stored anywhere in the ODIN infrastructure. Rooms are automatically created once the first user joins the room and are deleted once the last user left the room. There is no database in the background. ODIN does not collect or store any data at all.</td>
            </tr>
            
            
            <tr class="feature">
                <td>
                    <div class="expand">
                        <div class="expand-label" style="cursor: pointer;" onclick="$n = $('#odin-comparison-2-5'); $h = $(this);$n.slideToggle(100,function () {$h.children('i').attr('class',function () {return $n.is(':visible') ? 'fa fa-info-circle' : 'fa-regular fa-info-circle';});});">
                            <i class="fa-regular fa-info-circle"></i>
                            <span>Real-time data synchronization</span>
                        </div>
                        <div class="expand-content" style="display: none;">
                            ODIN allows developers to sync data per user and per room in real-time. Whenever something changes in this data-set, it’s synced with all other users connected to the same room in real-time. You can sync the players positions in real-time (i.e. geolocation in met averse applications) or a text-chat-history in a room with easy.
                        </div>
                    </div>
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-error">&#x2715;</span>
                    
                </td>
                
                
                <td class="value">
                    
                    <span class="text-ok">&#x2714;</span>
                    
                </td>
                
            </tr>
            <tr style="display:none" class="collapsable" id="odin-comparison-2-5">
                <td colspan="7">ODIN allows developers to sync data per user and per room in real-time. Whenever something changes in this data-set, it’s synced with all other users connected to the same room in real-time. You can sync the players positions in real-time (i.e. geolocation in met averse applications) or a text-chat-history in a room with easy.</td>
            </tr>
            
        </tbody>
        
    </table>
</div>

`}),e.add({id:3653,href:"https://www.4players.io/odin/faq/general/does-this-affect-the-performance-of-my-game/",title:"Does this affect the performance of my game?",section:"ODIN Documentation",description:"Understand how ODIN's optimization ensures that your game's performance remains unaffected, allowing you to allocate all necessary resources to your game.",content:`<p>No. ODIN is highly optimized and we made sure, that you can allocate all the resources you need to your game.</p>
`}),e.add({id:3654,href:"https://www.4players.io/odin/faq/general/which-target-platforms-and-architectures-are-supported/",title:"Which target platforms and architectures are supported?",section:"ODIN Documentation",description:"Explore the extensive range of target platforms and architectures supported by ODIN, including Windows, Linux, macOS, Android, iOS, and future support for gaming consoles.",content:`<p>We ship native dynamic libraries and/or frameworks for Windows, Linux, macOS, Android and iOS. Additionally, full native
support for current and next-gen gaming consoles is implemented and can be deployed as part of your game.</p>




<div class="box dark note">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">   <i class="fas fa-exclamation-circle"></i>  Please note    </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please reach out to us if you are planning to release for PlayStation4 and PlayStation 5 as there might be some preparations
required on our side.</p>
</div>
</div>

`}),e.add({id:3655,href:"https://www.4players.io/odin/faq/general/which-development-platforms-are-supported-and-how-can-i-use-this/",title:"Which development platforms are supported and how can I use this?",section:"ODIN Documentation",description:"Learn about the versatile support of ODIN for various development platforms, including pre-compiled binaries, C-style header files, and integration examples for Unity and Unreal Engine.",content:`<p>ODIN is shipped as a set of pre-compiled binaries as well as C-style header files and documentation, which makes it easy
to use in any development project on any platform. We also provide packages with ready-to-use examples for Unity and
Unreal Engine.</p>
`}),e.add({id:3656,href:"https://www.4players.io/odin/faq/web/microphone-indicator-does-not-disappear/",title:"After leaving an Odin room, the microphone indicator in my tab does not disappear.",section:"ODIN Documentation",description:"Learn how to remove the microphone indicator and let the browser know, that the microphone is no longer in use.",content:`<h3 id="issue">Issue</h3>
<p>When you disconnect from an Odin room by calling room.disconnect(), all media objects stop sending and receiving data. However, you might notice that the microphone indicator remains visible in your browser tab. This can lead users to believe that the microphone is still active.</p>
<h3 id="solution">Solution</h3>
<p>To ensure the browser recognizes that the microphone is no longer in use, additional clean-up steps are necessary. The following function shows how to stop all media tracks associated with the microphone and remove them from the media stream:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                Clean-up media tracks and hide microphone indicator
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-JavaScript">function stopMediaStream(ms: MediaStream) {
  ms.getTracks().forEach((track) =&gt; {
    track.stop();
    ms.removeTrack(track);
  });
}
</code></pre>
</div>
</div>

<p>Execute this clean-up function on the media stream that is capturing audio to make sure that all resources are properly released and the microphone indicator is removed.</p>
`}),e.add({id:3658,href:"https://www.4players.io/odin/faq/unreal/build-crashes-on-startup-with-blueprint-only-project/",title:"Blueprint Only Projects: My packaged builds crash right after start-up",section:"ODIN Documentation",description:"Address the Odin plugin load error in Blueprint Only Unreal Engine projects by modifying the installation or converting the project type.",content:`<p>When the &ldquo;Odin&rdquo; plugin is installed directly into a Blueprint Only Unreal Engine project, you may encounter an error when trying to run packaged standalone builds. The error message typically states:</p>
<blockquote>
<p>Plugin &lsquo;Odin&rsquo; failed to load because module &lsquo;Odin&rsquo; could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project.</p>
</blockquote>
<p>This issue occurs because Unreal Engine processes Blueprint Only projects differently, and fails to correctly package C++ plugins that are installed directly within the project.</p>
<h3 id="options-for-resolving-the-issue">Options for Resolving the Issue:</h3>
<p>To resolve this issue, there are two options:</p>
<ol>
<li>
<p><strong>Install the Plugin in the Engine:</strong> By installing <code>Odin Voice Chat</code> directly into the Unreal Engine&rsquo;s installation directory, Unreal will use a different method to package the <code>Odin</code> module when building a Standalone Version of your project. This method ensures that all required modules are accessible. To install the plugin in the engine you can either:</p>
<ul>
<li>Use <a href="https://www.fab.com/listings/79d0a208-78e8-4bd7-9214-36f6cc190da2">Fab (Unreal Engine Marketplace) to install the Odin plugin</a></li>
<li>Alternatively, download the appropriate version of the <code>Odin</code> plugin from the <a href="https://github.com/4Players/odin-sdk-unreal/releases/latest">Odin SDK Unreal Releases Github page</a>. Extract the plugin into the Engine&rsquo;s marketplace plugins directory, which is typically located at <code>.../Epic Games/UE_x.xx/Engine/Plugins/Marketplace</code></li>
</ul>
</li>
<li>
<p><strong>Convert Your Blueprint Only Project to a C++ Project:</strong> Adding C++ files to your project enables support for C++ based plugins like Odin being directly installed in your project folder. Here’s how to perform this conversion inside the Unreal Engine Editor:</p>
<ol>
<li>In the Unreal Editor, navigate to <code>Tools &gt; New C++ Class &gt; Choose Parent Class None</code></li>
<li>Give the class a name (e.g. <code>Empty</code>) and press <code>Create Class</code>.</li>
<li>Close down the Editor and open up the newly created <code>Odin_Minimal.sln</code> in your IDE</li>
<li>Build the project (Visual Studio hotkey is <code>Ctrl+Shift+B</code>)</li>
</ol>
</li>
</ol>
<h3 id="follow-up-steps">Follow-Up Steps:</h3>
<p>After following one of the solutions above, perform the following steps to ensure the <code>Odin</code> plugin loads correctly:</p>
<ul>
<li>Open your Unreal project. If prompted, rebuild the missing modules by clicking <code>Yes</code>.</li>
<li>Go to <code>Edit &gt; Plugins</code> in the Unreal Editor, and make sure that the <code>Odin</code> plugin is enabled.</li>
<li>Attempt to package your project again. The standalone version should now launch successfully without errors.</li>
</ul>
<p>Following these guidelines will help you successfully integrate the Odin plugin into your Blueprint Only project or adjust your project&rsquo;s setup to meet the plugin&rsquo;s requirements.</p>
`}),e.add({id:3659,href:"https://www.4players.io/odin/faq/unreal/build-error-building-for-but-attempting-to-link-with-file-built-for-unknown-unsupported-file-format/",title:"Build-error: building for ... but attempting to link with file built for unknown-unsupported file format",section:"ODIN Documentation",description:"Troubleshoot git LFS issues with Odin-Unreal-SDK and overcome errors related to unknown-unsupported file formats in Unreal. Follow our detailed steps to correctly clone and fetch large binary files.",content:`<p>If you encounter the following error:</p>
<pre><code>... ignoring file /PROJECT_NAME/Plugins/Odin/Source/OdinCore/PLATFORM/..., 
building for PLATFORM but attempting to link with file built for unknown-unsupported file format 
( 0x76 0x65 0x72 0x73 0x69 0x6F 0x6E 0x20 0x68 0x74 0x74 0x70 0x73 0x3A 0x2F 0x2F )
</code></pre>
<p>it&rsquo;s most likely due to issues with git <a href="https://git-lfs.github.com/">LFS</a> (large file storage). A standard clone of
the <a href="https://github.com/4Players/odin-sdk-unreal">ODIN-Unreal-SDK</a> repository might only retrieve the metadata about
these files managed with LFS. In order to retrieve the actual data with LFS, please follow these steps:</p>
<ol>
<li>Clone the repository:</li>
</ol>
<pre><code>git clone https://github.com/4Players/odin-sdk-unreal.git
</code></pre>
<ol start="2">
<li>Cache the actual LFS data on your local machine and replace the metadata in the binary files with their actual
contents:</li>
</ol>
<pre><code>git lfs fetch
git lfs checkout
</code></pre>
<p>&hellip; or if you have a recent LFS version:</p>
<pre><code>git lfs pull
</code></pre>
<p>Next, move or copy the files into a new Odin sub-folder under your projects Plugins folder. It should end up looking
like /MyProject/Plugins/Odin/.</p>
`}),e.add({id:3660,href:"https://www.4players.io/odin/faq/unity/building-does-not-work-anymore-after-odin-integration/",title:"Building on macOS or iOS does not work anymore after Odin integration.",section:"ODIN Documentation",description:"Learn how to resolve build issues on macOS or iOS after integrating Odin by setting the microphone usage description in Unity player settings.",content:`<p>If you&rsquo;re building for macOS or iOS, you need to set a microphone usage description in the player settings. Without this, the Unity editor will fail to build the target, often resulting in obscure error messages.</p>
<p>You can find this setting under <code>Project Settings &gt; Player &gt; Other Settings &gt; Configuration &gt; Microphone Usage Description</code>:</p>
<figure style="max-width: 70%px"><a href="/images/odin/unity/unity-ios-microphone-usage-description.webp" title="Click to enlarge" data-lity><img src="/images/odin/unity/unity-ios-microphone-usage-description.webp"
         alt="Unity iOS Microphone Usage description." width="70%"/></a><figcaption>
            <p>Unity iOS Microphone Usage description.</p>
        </figcaption>
</figure>
<figure style="max-width: 70%px"><a href="/images/odin/unity/unity-mac-microphone-usage-description.webp" title="Click to enlarge" data-lity><img src="/images/odin/unity/unity-mac-microphone-usage-description.webp"
         alt="Unity macOS Microphone Usage description." width="70%"/></a><figcaption>
            <p>Unity macOS Microphone Usage description.</p>
        </figcaption>
</figure>
`}),e.add({id:3661,href:"https://www.4players.io/odin/faq/unreal/c-plus-plus-only-joinroom-does-not-trigger-callbacks-on-android--meta-quest-c-only-joinroom-does-not-trigger-callbacks-on-android--meta-quest/",title:"C++ only: JoinRoom does not trigger callbacks on Android / Meta Quest",section:"ODIN Documentation",description:"Solve FVector2D() initialization issues in UOdinRoomJoin::JoinRoom on Android with our guide. Avoid pitfalls with FVector2D constructor in Unreal Engine, and ensure your room join functionality works across platforms.",content:`<p>This is most likely an issue with using the standard <code>FVector2D()</code> constructor when setting the <code>initialPosition</code>
of <code>UOdinRoomJoin::JoinRoom</code>. The standard <code>FVector2D()</code>
will <a href="https://docs.unrealengine.com/4.26/en-US/API/Runtime/Core/Math/FVector2D/__ctor/1/">not explicitely initialize values</a>.
This doesn&rsquo;t seem to be an issue on Windows, which will simply set the vector&rsquo;s parameters to zero. Android on the other
hand will require you to explicitely initialize the <code>initialPosition</code> with <code>FVector2D(0,0)</code> (or other explicit values).</p>
<p>This is not an issue when calling the <code>Join Room</code> node in blueprint.</p>
`}),e.add({id:3662,href:"https://www.4players.io/odin/faq/unreal/cross-platform-engine-is-great-inside-the-web-client-i-can-hear-the-ue-client-but-i-cannot-hear-web-clients-inside-the-ue-client-why-does-it-not-work/",title:"Cross-Platform / Cross-Engine is great. Inside the web client I can hear the UE client, but I cannot hear web clients inside the UE client. Why does it not work?",section:"ODIN Documentation",description:"Resolve issues in the Odin Synth Component setup for 3D audio in Unreal. Get accurate player mapping and sound attenuation with our comprehensive guide. Improve your audio experience in voice chats.",content:`<p>Each client integrates their own MediaStream into the chat room, as detailed in our <a href="/odin/sdk/unreal/manual/#adding-a-media-stream">Unreal Manual</a>. Once added, these streams are automatically transmitted to the ODIN server and then multicast to every peer in the same room.</p>
<p>By linking the MediaStream of each remote peer to a SynthComponent (for example, on a player character), audio communication is enabled among all participants. This setup allows everyone to hear each other, irrespective of the client type they are using. For more details on this process, refer to the <a href="/odin/sdk/unreal/manual/#the-on-media-added-event">OnMediaAdded event</a>.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Excursion: Handling non-UE ODIN peers inside UE  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Usually, every player character inside UE is spawned as soon as replicated by the network engine, i.e. Unreal networking.
When an ODIN peer joins that cannot be replicated, you should either spawn a placeholder object &ldquo;On Peer Joined&rdquo; or you can attach the synth component of non-UE clients somewhere else &ldquo;On Media Added&rdquo;.
For instance, you could attach it to your local player character to hear web clients with 2D audio like they are &ldquo;on the phone&rdquo;.
Or you can put a virtual radio box inside the level to let web clients speak through that object.
It is also possible to create a second ODIN room (e.g. &ldquo;global chat&rdquo;) and inside let all players from all client types communicate
in 2D - in addition to the in-game (UE-only) spatial audio voice.</p>
<p>Remember to detach / destroy objects from non-UE ODIN peers when they leave the room.</p>
</div>
</div>

`}),e.add({id:3663,href:"https://www.4players.io/odin/faq/unity/does-4players-odin-support-apple-silicon/",title:"Does 4Players ODIN support Apple Silicon?",section:"ODIN Documentation",description:"This document provides information on the support of 4Players ODIN for Apple Silicon. It emphasizes the importance of running the Unity Editor with Apple Silicon support and mentions that only Unity Editor versions 2021.2 and above are available for Apple Silicon",content:`<p>Yes. It does. But its important that you run the Unity Editor with Apple Silicon support. At time of this writing
only version 2021.2 and above are available in an Apple Silicon version. Install the Unity Hub in version 3.x to
install Apple Silicon Unity editor.</p>
<figure><img src="/images/odin/unity_hub_silicon.jpg"
         alt="Using the Unity Hub to install Apple Silicon version"/><figcaption>
            <p>Using the Unity Hub to install Apple Silicon version</p>
        </figcaption>
</figure>
<p>Download the Unity Hub here:</p>
<p><a href='https://unity.com/de/unity-hub' target='' class="btn btn-primary">Download Unity Hub</a></p>
`}),e.add({id:3664,href:"https://www.4players.io/odin/faq/",title:"FAQs",section:"ODIN Documentation",description:"Navigate through the ultimate FAQ index for the 4Players ODIN SDK, encompassing Popular Questions, General Queries, Unity FAQs, and Unreal Engine FAQs. This index provides quick access to a wide range of topics including plans, comparisons with Discord, text messaging capabilities, licensing, access token generation using cloud platforms, audio recording features, troubleshooting connection issues, performance impacts, platform support, integration timelines, Apple Silicon support in Unity, live audio feed access, dependencies in Unreal Engine, sound occlusion, Unreal Engine 5.x compatibility, and more. Ideal for developers and users seeking detailed information and solutions for integrating ODIN SDK into their projects.",content:""}),e.add({id:3666,href:"https://www.4players.io/odin/faq/general/",title:"General Questions",section:"ODIN Documentation",description:"Your go-to resource for frequently asked questions about the 4Players ODIN SDK. This comprehensive FAQ page covers everything from subscription plans, comparisons with Discord, text messaging capabilities, licensing, generating access tokens using cloud functions, audio recording, connectivity issues, performance impact, supported platforms, and integration timelines. Perfect for developers and users seeking detailed insights into the ODIN SDK's functionalities and advantages.",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/faq/general/what-plans-do-you-offer/">What plans do you offer?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/is-odin-as-good-as-discord/">Is ODIN as good as Discord?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/does-odin-also-provide-text-message-chat/">Does ODIN also provide text message chat?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/what-license-is-your-sdk-under/">What license is your SDK under?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/can-i-use-google-cloud-functions-to-generate-access-tokens/">Can I use Google Cloud Functions to generate access tokens?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/can-i-use-aws-lambda-to-generate-access-tokens/">Can I use AWS Lambda to generate access tokens?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/can-i-use-azure-function-to-generate-access-tokens/">Can I use Azure Function to generate access tokens?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/can-odin-record-a-rooms-audio-for-later-playback/">Can ODIN record a room&#39;s audio for later playback?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/i-cannot-connect-to-odin-what-can-i-do/">I cannot connect to ODIN. What can I do?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/why-should-i-choose-odin-and-not-the-competition/">Why should I choose ODIN and not the competition?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/does-this-affect-the-performance-of-my-game/">Does this affect the performance of my game?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/which-target-platforms-and-architectures-are-supported/">Which target platforms and architectures are supported?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/which-development-platforms-are-supported-and-how-can-i-use-this/">Which development platforms are supported and how can I use this?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/general/how-long-does-it-take-to-integrate-odin/">How long does it take to integrate ODIN?</a></li>
</span>
</ul>
`}),e.add({id:3667,href:"https://www.4players.io/odin/faq/unity/how-do-i-access-the-live-audio-feed/",title:"How do I access the live audio feed?",section:"ODIN Documentation",description:"Basic ODIN questions",content:`<p>Sometimes, for example if you want to do lip-syncing or if you want to add an graphical equalizer representing the audio
coming from ODIN, you need to get access to the <code>AudioSource</code> and <code>AudioClip</code>from ODIN.</p>
<p>This is how you can get access to those information. Somewhere in your code, you attach the ODIN playback component
representing a user to the game object using the function <code>OdinHandler.Instance.AddPlaybackComponent</code>. This will
return an instance of <code>PlaybackComponent</code>. Use this component to get access to the <code>AudioClip</code>:</p>
<pre><code class="language-C#">Playback = gameObject.GetComponent&lt;PlaybackComponent&gt;();
AudioSource source = Playback.PlaybackSource;
AudioClip clip = Playback.PlaybackSource.clip;
</code></pre>
<h2 id="what-is-userdata">What is UserData?</h2>
<p>Every peer (i.e. player) connected to ODIN has it&rsquo;s own user data. Within ODIN, this is just a byte array that you can
use for everything. We provide a class that provides basic user data as a JSON object. <span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>

exposes that interface and provides convenience functions for serialization.</p>
<p>You can set the user data before joining a room or you can also update the user data afterwards:</p>
<pre><code class="language-C#">// Generate a JSON User Data object with the players netId and name in the network
CustomUserDataJsonFormat userData = new CustomUserDataJsonFormat(name, &quot;online&quot;);
userData.seed = netId.ToString();

// Join ODIN Room ShooterSample and send user data
OdinHandler.Instance.JoinRoom(&quot;ShooterSample&quot;, userData.ToUserData());
</code></pre>
<p>The method <code>ToUserData</code> serializes the data stored in the <span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 instance to a JSON string and <code>FromUserData</code> will
take the serialized JSON string and return an instance of <span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 as shown in this code snippet:</p>
<pre><code class="language-C#">public void OnMediaRemoved(object sender, MediaRemovedEventArgs eventArgs)
{
    OdinUserData userData = OdinUserData.FromUserData(eventArgs.Peer.UserData);
    PlayerScript player = GetPlayerForOdinPeer(userData);
    if (player)
    {
        RemoveOdinPlaybackFromPlayer(player);
    }
}
</code></pre>
<p>Please check out our guide on user data:</p>
<ul>
<li><a href="/odin/guides/unity/user-data/">Understanding User Data</a></li>
</ul>
`}),e.add({id:3668,href:"https://www.4players.io/odin/faq/general/how-long-does-it-take-to-integrate-odin/",title:"How long does it take to integrate ODIN?",section:"ODIN Documentation",description:"Discover the efficiency of our platform integration from early bird partner feedback. Tailor your feature set and get your first implementation running in less than one hour.",content:`<p>The actual integration time will vary based on the feature set you want to utilize, but we’ve had some initial feedback
from our early bird partners, who had the first implementation running in less than one hour.</p>
`}),e.add({id:3669,href:"https://www.4players.io/odin/faq/unreal/build-issues-when-installing-in-engine-and-project/",title:"How to address build issues with Odin installed in both the Engine and Project",section:"ODIN Documentation",description:"If you're facing build issues with the Odin plugin in Unreal Engine, follow these guidelines for troubleshooting and correcting the installation.",content:`<p>The Odin plugin can be installed either in the Engine&rsquo;s Marketplace/Fab Plugins directory or in your current Unreal Engine Project directory. Installing the plugin in both the Engine Marketplace Plugins folder and the Project&rsquo;s Plugins folder can cause conflicts with the UnrealBuildTool. Follow these steps to make sure the plugin is installed correctly and to resolve build issues:</p>
<h3 id="installation-and-troubleshooting">Installation and Troubleshooting:</h3>
<ol>
<li><strong>Close Your Project</strong>: Ensure that Unreal Engine is not running and your project is closed.</li>
<li><strong>Clean Temporary Folders</strong>: Navigate to your project directory and delete the <code>Binaries</code>, <code>Build</code>, <code>DerivedDataCache</code>, and <code>Intermediate</code> folders.</li>
<li><strong>Remove Redundant Plugin Installations</strong>: Ensure that the Odin plugin is only installed in one location. Remove it from the Engine&rsquo;s Marketplace Plugins folder if it&rsquo;s already in your Project&rsquo;s Plugins folder.</li>
<li><strong>Download and Install Plugin</strong>: Download the latest release of the Odin plugin for your Unreal Engine version from the <a href="https://github.com/4Players/odin-sdk-unreal/releases/latest">Odin SDK Unreal Releases github page</a>. For a clean install, please make sure to first completely remove the old <code>Odin</code> plugin folder. Then extract the downloaded release into your Project&rsquo;s <code>Plugins</code> folder. The folder hierarchy should look similar to this: <code>../[ProjectName]/Plugins/Odin/Odin.uplugin</code></li>
<li><strong>Regenerate Project Files</strong>: Right-click your project&rsquo;s <code>.uproject</code> file, select &ldquo;Generate Visual Studio project files&rdquo;, and allow the process to complete.</li>
<li><strong>Open Your Project and Rebuild</strong>: Double-click the <code>.uproject</code> file to open your project. If prompted, rebuild the missing modules by clicking &lsquo;Yes&rsquo;.</li>
<li><strong>Reattempt the Build</strong>: Try to build a standalone version of your project again to see if the issue is resolved.</li>
</ol>
<p>Following these steps will ensure that your plugin installation does not interfere with the UnrealBuildTool and your project builds successfully.</p>
`}),e.add({id:3670,href:"https://www.4players.io/odin/faq/unreal/i-cannot-find-the-capture-audio-nodes/",title:"I cannot find the Capture Audio nodes?",section:"ODIN Documentation",description:"Find solutions to issues related to locating nodes in Blueprint for ODIN SDK. Ensure the 'Audio Capture' plugin is enabled in the Audio Section of Unreal Editor, enhancing your audio setup.",content:`<p>If you have any issues finding nodes in Blueprint, make sure the <code>Audio Capture</code> plugin is enabled. In the Unreal Editor open
Plugins (Menu -&gt; Edit -&gt; Plugins) and make sure that in the <strong>Audio Section</strong> the <code>Audio Capture</code> plugin is
activated like shown in this screenshot:</p>
<figure style="max-width: 400px"><a href="/images/odin/unreal/audio_plugin.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/audio_plugin.jpg"
         alt="Enabling the Audio Capture Plugin" width="400"/></a><figcaption>
            <p>Enabling the Audio Capture Plugin</p>
        </figcaption>
</figure>
`}),e.add({id:3671,href:"https://www.4players.io/odin/faq/unity/i-get-an-unityexception-when-leaving-pie-or-loading-a-new-scene/",title:"I get an UnityException when leaving PIE or loading a new scene.",section:"ODIN Documentation",description:"Guidelines on handling UnityExceptions caused by get_dataPath. Learn best practices on room operations in Unity, including using the LeaveRoom function and the OnRoomLeft event, and tips for transitioning between scenes and shutting down the application.",content:`<pre><code>UnityException: get_dataPath can only be called from the main thread.
</code></pre>
<p>Due to the asynchronous nature of leaving a room operation, the current recommendation is to avoid invoking this
function within <code>OnDestroy</code> if the scene is being unloaded. Scene unloading could occur when transitioning between
scenes or shutting down an application.</p>
<p>Instead, the best practice is to call the <span class="external-reference">LeaveRoom <a href="/odin/sdk/unity/classes/odinhandler/leaveroom/"><i class="fas fa-external-link-alt"></i></a></span>
 function and subsequently wait for the
<span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
 event to be triggered. Once this event has been triggered, it is then safe to perform further actions,
such as calling <code>LoadScene</code> or <code>Application.Quit</code>.</p>
`}),e.add({id:3672,href:"https://www.4players.io/odin/faq/unity/libodin-cant-be-opened/",title:"libodin.dylib can't be opened because Apple cannot check it for malicious software",section:"ODIN Documentation",description:"Learn how to handle the following scenario: When trying to start Odin for the first time on macOS, you encounter the message: 'libodin.dylib can't be opened because Apple cannot check it for malicious software.",content:`<p>When attempting to start a scene with Odin for the first time on a macOS machine, you may encounter the following message:</p>
<figure style="max-width: 500px"><a href="/images/odin/unity/faq-libodin-cant-be-opened.webp" title="Click to enlarge" data-lity><img src="/images/odin/unity/faq-libodin-cant-be-opened.webp"
         alt="Message while running Odin for the first time." width="500"/></a><figcaption>
            <p>Message while running Odin for the first time.</p>
        </figcaption>
</figure>
<p>The <code>libodin.dylib</code> file is signed but not notarized, which causes this default message to appear. You can resolve this issue by following these steps:</p>
<ol>
<li>Click on &ldquo;<strong>Show in Finder</strong>&rdquo; in the pop-up message.</li>
<li>In Finder, locate libodin.dylib, then right-click on it.</li>
<li>Select &ldquo;<strong>Open With &gt; Terminal.app</strong>&rdquo;.</li>
<li>Click &ldquo;<strong>Open</strong>&rdquo; when prompted.</li>
<li>Wait until the terminal displays &ldquo;<strong>Process completed</strong>&rdquo;.</li>
</ol>
<p>After completing these steps, try starting the scene again. The message should no longer appear.</p>
`}),e.add({id:3673,href:"https://www.4players.io/odin/faq/unreal/cant-find-file/",title:"LogUObjectGlobals: Warning: [AssetLog] ... Can't find file Error when running a packaged build",section:"ODIN Documentation",description:"Encounter a warning about failing to load `/Script/Odin` after packaging your Unreal Engine project? Here’s how to fix redirector issues and ensure smooth asset loading.",content:`<p>If you encounter a warning that says</p>
<pre><code>LogUObjectGlobals: Warning: [AssetLog] PATH_TO_ASSET\\.uasset: Failed to load '/Script/Odin': Can't find file.
</code></pre>
<p>while running your packaged Unreal Engine build, it typically indicates issues with asset redirectors. To resolve this, follow these steps:</p>
<h3 id="fixing-asset-redirectors">Fixing Asset Redirectors:</h3>
<ol>
<li><strong>Open Unreal Editor</strong>: Launch your Unreal Editor and open your project.</li>
<li><strong>Select the Content Folder</strong>: In the Content Browser, right-click the root <code>Content</code> folder.</li>
<li><strong>Fix up Redirectors</strong>: Choose &ldquo;Fix up Redirectors&rdquo; from the context menu. This action helps ensure all references are correctly updated and pointing to the valid assets.</li>
</ol>
<p>After performing these steps, run your build again to check if the issue is resolved.</p>
`}),e.add({id:3674,href:"https://www.4players.io/odin/faq/unreal/my-blueprint-nodes-are-broken/",title:"My blueprint nodes are broken after upgrading to a new Unreal Engine version. What's wrong?",section:"ODIN Documentation",description:"Learn how to manage your Odin plugin when upgrading Unreal Engine to avoid issues with blueprints and ensure a smooth transition between versions.",content:`<p>When upgrading to a new version of Unreal Engine, it is crucial to ensure that the Odin plugin is installed before opening your project in the new engine version. Following these steps can prevent the loss of blueprint functionality:</p>
<ul>
<li><strong>Pre-upgrade preparation</strong>: Before upgrading to a newer Unreal Engine version, confirm that the Odin plugin is available and supported in the new version.</li>
<li><strong>Install before opening</strong>: Install the Odin plugin in the new version of Unreal Engine before opening your project. This helps to ensure that all Odin-related blueprints and functionalities remain intact.</li>
<li><strong>Delete Intermediate and Binaries folders</strong>: To avoid any intermediate files conflicting with newer Engine or Plugin version, delete the <code>Binaries</code>, <code>Build</code>, <code>DerivedDataCache</code> and <code>Intermediate</code> folders in your project directory and the <code>Binaries</code> and <code>Intermediate</code> folders in your <code>[Projectfolder]/Plugins/Odin</code> directory.</li>
<li><strong>Do not compile without Odin</strong>: Avoid compiling any of your blueprint nodes if the Odin plugin is not installed in the new Unreal Engine version. Compiling without the plugin can lead to irreversible damage to Odin-dependent blueprints.</li>
<li><strong>Handling accidental compiles</strong>: If you have accidentally compiled one of your blueprints without the Odin plugin, attempt to revert to a previous stable version of your project using your source control system.</li>
</ul>
<p>Following these guidelines will help you maintain the integrity of your project and avoid potential setbacks when transitioning between Unreal Engine versions with the Odin plugin installed.</p>
`}),e.add({id:3675,href:"https://www.4players.io/odin/faq/unity/roomupdateposition-does-not-work-or-works-incorrectly/",title:"room.UpdatePosition does not work or works incorrectly",section:"ODIN Documentation",description:"Guidelines for using ODIN room in Unity with tips on setting position scale and updating position",content:`<p>Please make sure to follow these tips:</p>
<ul>
<li>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&rsquo;s optimization feature. You can set the position scale using <code>room.SetPositionScale</code>.</li>
<li>Invoking <code>room.UpdatePosition</code> too frequently can lead to operational issues where the optimization of audio streams may not function correctly. Limit the frequency of calling <code>room.UpdatePosition</code> to a maximum of 10 times per second. This equates to one update every 100 milliseconds. We recommend using Unity&rsquo;s <code>Coroutines</code> to update the position in Odin rooms.</li>
</ul>
`}),e.add({id:3676,href:"https://www.4players.io/odin/faq/unreal/spatial-audio-does-not-work-what-is-wrong/",title:"Spatial audio does not work. What is wrong?",section:"ODIN Documentation",description:"Resolve issues in the Odin Synth Component setup for 3D audio in Unreal. Get accurate player mapping and sound attenuation with our comprehensive guide. Improve your audio experience in voice chats.",content:`<p>If the voice chat is working und you managed to hear other players, but it sounds like they are always &ldquo;inside your
head&rdquo;, please look <a href="<span class="external-reference">Add Odin Synth Component <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/"><i class="fas fa-external-link-alt"></i></a></span>
">here and check if you set the right target for the Odin Synth Component</a>.</p>
<p>If you used <a href="/odin/sdk/unreal/manual/#the-on-media-added-event">this blueprint example</a>, you have
to be careful to choose the right player character for every single event as mentioned in the info box below.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>&ldquo;<em>In a real 3D shooter with 3D audio you would not choose the local player, but map the Odin Peer Id with your Unreal
Player Id and then assign the Media to the corresponding player
character. This way, Unreal will automatically process the audio in its audio engine and apply attenuation, i.e. dampen
the volume the farther away the player is from the listener.</em>&rdquo;</p>
</div>
</div>

<p>If everything is connected correctly, more details on Sound Attenuation can be found in the
<a href="https://docs.unrealengine.com/4.27/en-US/WorkingWithAudio/DistanceModelAttenuation/">Unreal Documentation</a></p>
<p>Explore our comprehensive <a href="/odin/examples/unreal-demo/">Unreal Tech Demo Project</a> for a hands-on learning experience on setting up Proximity Voice Chat in a Multiplayer Game. This demo project is designed to guide you through the key steps and considerations for integrating proximity-based voice communications effectively.</p>
<p>For a more interactive learning journey, we also offer an extensive <a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Unreal video tutorial series</a>. This series provides step-by-step instructions on configuring Proximity Voice Chat, ensuring a thorough understanding of the process from start to finish.</p>
<div style="position: relative; padding-bottom: 56.5%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/7ZtC0WvX0c8?list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>

`}),e.add({id:3678,href:"https://www.4players.io/odin/faq/unity/",title:"Unity FAQs",section:"ODIN Documentation",description:"Dive into our comprehensive FAQ section dedicated to Unity integration with the 4Players ODIN SDK. Find solutions to common issues like Apple Silicon support, accessing live audio feeds, handling UnityExceptions, and troubleshooting room.UpdatePosition. Our guide is designed to streamline your experience with ODIN in Unity environments, ensuring smooth and efficient application development.",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/building-does-not-work-anymore-after-odin-integration/">Building on macOS or iOS does not work anymore after Odin integration.</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/does-4players-odin-support-apple-silicon/">Does 4Players ODIN support Apple Silicon?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/how-do-i-access-the-live-audio-feed/">How do I access the live audio feed?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/i-get-an-unityexception-when-leaving-pie-or-loading-a-new-scene/">I get an UnityException when leaving PIE or loading a new scene.</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/libodin-cant-be-opened/">libodin.dylib can&#39;t be opened because Apple cannot check it for malicious software</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/roomupdateposition-does-not-work-or-works-incorrectly/">room.UpdatePosition does not work or works incorrectly</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unity/which-platforms-does-odin-support/">Which platforms does ODIN support for Unity?</a></li>
</span>
</ul>
`}),e.add({id:3680,href:"https://www.4players.io/odin/faq/unreal/",title:"Unreal FAQs",section:"ODIN Documentation",description:"Explore our in-depth FAQ page for integrating 4Players ODIN SDK with Unreal Engine. Get answers to crucial questions about plugin dependencies, sound occlusion, Unreal Engine 5.x support, build errors, cross-platform communication, spatial audio, and more. Whether you're facing challenges with audio capture, peer positioning, or simply want to customize your audio experience, our guide provides the insights you need for a successful Unreal Engine integration.",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/are-there-any-dependencies-to-other-plugins/">Are there any dependencies to other plugins?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/issues-with-echo-cancellation/">I&#39;m having Issues with Echo Cancellation, what can I do?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/do-you-have-sound-occlusion-built-in/">Do you have sound occlusion built-in?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/do-you-support-unreal-engine-5-x/">Do you support Unreal Engine 5.x?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/build-crashes-on-startup-with-blueprint-only-project/">Blueprint Only Projects: My packaged builds crash right after start-up</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/build-error-building-for-but-attempting-to-link-with-file-built-for-unknown-unsupported-file-format/">Build-error: building for ... but attempting to link with file built for unknown-unsupported file format</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/c-plus-plus-only-joinroom-does-not-trigger-callbacks-on-android--meta-quest-c-only-joinroom-does-not-trigger-callbacks-on-android--meta-quest/">C&#43;&#43; only: JoinRoom does not trigger callbacks on Android / Meta Quest</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/cross-platform-engine-is-great-inside-the-web-client-i-can-hear-the-ue-client-but-i-cannot-hear-web-clients-inside-the-ue-client-why-does-it-not-work/">Cross-Platform / Cross-Engine is great. Inside the web client I can hear the UE client, but I cannot hear web clients inside the UE client. Why does it not work?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/build-issues-when-installing-in-engine-and-project/">How to address build issues with Odin installed in both the Engine and Project</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/i-cannot-find-the-capture-audio-nodes/">I cannot find the Capture Audio nodes?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/cant-find-file/">LogUObjectGlobals: Warning: [AssetLog] ... Can&#39;t find file Error when running a packaged build</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/my-blueprint-nodes-are-broken/">My blueprint nodes are broken after upgrading to a new Unreal Engine version. What&#39;s wrong?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/spatial-audio-does-not-work-what-is-wrong/">Spatial audio does not work. What is wrong?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/update-peer-position-does-not-work-or-works-incorrectly/">Update Peer Position does not work or works incorrectly</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/what-if-i-do-not-want-to-have-spatial-audio-just-like-in-my-favourite-conferencing-software/">What if I do not want to have spatial audio, just like in my favourite conferencing software?</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/faq/unreal/my-issue-is-not-listed/">My issue is not listed in the FAQs, what should I do?</a></li>
</span>
</ul>
`}),e.add({id:3681,href:"https://www.4players.io/odin/faq/unreal/update-peer-position-does-not-work-or-works-incorrectly/",title:"Update Peer Position does not work or works incorrectly",section:"ODIN Documentation",description:"Elevate the performance of Odin Rooms in Unreal with our insightful tips. Ensure optimal setup by correctly using Set Room Position Scale and minimal Update Peer Position calls for seamless audio stream optimization.",content:`<p>Please make sure to follow these tips:</p>
<ul>
<li>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&rsquo;s optimization feature. You can set the position scale
using <a href="<span class="external-reference">Unreal Set Room Position Scale <a href="/odin/sdk/unreal/blueprint-reference/room/set-room-position-scale/"><i class="fas fa-external-link-alt"></i></a></span>
">Set Room Position Scale</a>.</li>
<li>Invoking <a href="<span class="external-reference">Unreal Update Peer Position <a href="/odin/sdk/unreal/blueprint-reference/room/update-peer-position/"><i class="fas fa-external-link-alt"></i></a></span>
">Update Peer Position</a>
too frequently can lead to operational issues where the optimization of audio streams may not function correctly.
Limit the frequency of calling <code>Update Peer Position</code> to a maximum of 10 times per second. This equates to one update
every 100 milliseconds. We recommend using
Unreal&rsquo;s <a href="https://docs.unrealengine.com/5.3/en-US/BlueprintAPI/Utilities/Time/SetTimerbyEvent/">Set Timer by Event</a>
node to update the position in Odin rooms.</li>
</ul>
`}),e.add({id:3683,href:"https://www.4players.io/odin/faq/web/",title:"Web FAQs",section:"ODIN Documentation",description:"Dive into our comprehensive FAQ section dedicated to Web SDK integration with the 4Players ODIN SDK.",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/faq/web/microphone-indicator-does-not-disappear/">After leaving an Odin room, the microphone indicator in my tab does not disappear.</a></li>
</span>
</ul>
`}),e.add({id:3684,href:"https://www.4players.io/odin/faq/unreal/what-if-i-do-not-want-to-have-spatial-audio-just-like-in-my-favourite-conferencing-software/",title:"What if I do not want to have spatial audio, just like in my favourite conferencing software?",section:"ODIN Documentation",description:"Resolve issues in the Odin Synth Component setup for 3D audio in Unreal.",content:`<p>Like in the answer to the question above <em>&ldquo;Spatial audio does not work. What is wrong?&rdquo;</em> you can do the contrary
and set the synth component to playback only in 2D. Look in the Unreal Documentation
<a href="https://docs.unrealengine.com/4.27/en-US/WorkingWithAudio/DistanceModelAttenuation/">here</a>.</p>
`}),e.add({id:3685,href:"https://www.4players.io/odin/faq/unity/which-platforms-does-odin-support/",title:"Which platforms does ODIN support for Unity?",section:"ODIN Documentation",description:"This document provides information on the support of specific platforms for ODIN Voice Chat by 4Players when using Unity.",content:`<p>ODIN does officially support the following platforms for Unity:</p>
<ul>
<li>Windows (x64)</li>
<li>MacOS (Universal)</li>
<li>iOS (Universal)</li>
<li>Android (ARM64)</li>
</ul>
<p>For additional platform support, please contact us!</p>
<p><strong>Note</strong>: WebGL will be supported soon with version 2.0</p>
`}),e.add({id:3686,href:"https://www.4players.io/odin/faq/unreal/my-issue-is-not-listed/",title:"My issue is not listed in the FAQs, what should I do?",section:"ODIN Documentation",description:"If you encounter an issue with your project that isn't covered in our existing FAQs, follow these steps to troubleshoot and how to look for further assistance.",content:`<p>If you encounter an issue with your project that isn&rsquo;t covered in our FAQs, here are some troubleshooting steps you can try before looking for further assistance:</p>
<h3 id="recommended-troubleshooting-steps">Recommended Troubleshooting Steps:</h3>
<ol>
<li><strong>Delete Intermediate Folders</strong>: This can resolve issues caused by corrupted files. Close Unreal Engine, navigate to your project directory, and delete the <code>Binaries</code>, <code>Build</code>, <code>DerivedDataCache</code> and <code>Intermediate</code> folders. If Odin is installed in the project, navigate to the Plugin directory (<code>[Project Path]/Plugins/Odin</code>) and delete the <code>Binaries</code> and <code>Intermediate</code> folders.</li>
<li><strong>Regenerate Visual Studio Project Files</strong> (for C++ projects): Right-click your <code>.uproject</code> file and select &ldquo;Generate Visual Studio project files&rdquo;.</li>
<li><strong>Install the Plugin Directly in the Project</strong>: We recommend installing the Odin plugin directly in your project. This approach enhances compatibility and ensures that the plugin is included in your source control, making it available to all project members. To install the plugin in your project:
<ul>
<li>Download the latest plugin version for your Unreal Engine version from <a href="https://github.com/4Players/odin-sdk-unreal/releases/latest">Odin SDK Unreal Releases</a>.</li>
<li>Extract the plugin into your project&rsquo;s <code>Plugins</code> folder. If this folder does not exist, create it.</li>
<li>Restart Unreal Engine and enable the plugin through the &lsquo;Plugins&rsquo; menu.</li>
</ul>
</li>
</ol>
<h3 id="further-assistance">Further Assistance:</h3>
<p>If the issue is still present after following the above steps, you can ask for further assistance through our Discord:</p>
<ul>
<li><strong>Join Our Discord</strong>: <a href="https://4np.de/discord">Join here</a> if you&rsquo;re not already a member.</li>
<li><strong>Post in the Support Channel</strong>: Navigate to the <code>#odin-unreal</code> channel and describe your issue. Include the following:
<ul>
<li>A detailed description of the problem.</li>
<li>Any relevant screenshots or error logs.</li>
<li>The Odin plugin version and the Unreal Engine version used in your project.</li>
<li>Steps you have already tried.</li>
</ul>
</li>
</ul>
<p>Our community and support team will then take a look at your request and help you as quickly as possible. Thank you for your patience!</p>
`}),e.add({id:3687,href:"https://www.4players.io/odin/license/2025-05-27/",title:"ODIN License Agreement",section:"ODIN Documentation",description:"",content:`
<div class="intro">
    This Agreement outlines the licensing terms for the ODIN SDK provided by 4Players GmbH (“<strong>4Players</strong>”)
    to the Licensee (4Players and the Licensee each a “<strong>Party</strong>” and together the “<strong>Parties</strong>”):
</div>

<section class="main-section">
    <div id="1">1.</div>
    <p>Scope of the Agreement</p>
</section>
<section>
    <div id="1.1">1.1</div>
    <p>
        4Players has developed the ODIN software, a cross-platform software development kit
        (“<strong>ODIN SDK</strong>”) that enables developers to integrate real-time chat technology into
        multiplayer games, apps and websites. ODIN SDK provides a complete, out-of-the-box
        solution that has been designed and built from the ground up for gamers, developers
        and publishers. Besides, 4Players hosts the servers, handles the network and the audio
        processing that is required for voice communication (the “<strong>ODIN Server</strong>”).
    </p>
</section>
<section>
    <div id="1.2">1.2</div>
    <p>
        By utilizing the ODIN SDK (see Section 2. Right to use), the “<strong>Licensee</strong>” accepts the terms
        outlined in this Agreement. This acceptance grants the Licensee the right to use the
        ODIN SDK under the conditions specified herein.
    </p>
</section>
<section>
    <div id="1.3">1.3</div>
    <div>
        <p>
            Licensees are entitled to use the ODIN SDK for development and testing purposes
            under the following conditions:
        </p>
        <ol class="alpha">
            <li>
                Free access, enabled by a complimentary access code for the 4Players cloud,
                supports up to 25 concurrent users, ideal for initial development and testing
                (“<strong>Free Use</strong>”).
            </li>
            <li>
                Should the Licensee exceed this 25-user limit, move towards a public launch
                (including public beta or early access), or require on-premise hosting, a transition
                to a paid subscription is necessary. Options for cloud hosting or on-premise
                hosting can be purchased directly from the 4Players website. For unique needs,
                our sales team is available to provide customized offers (“<strong>Fee-Based Use</strong>”).
            </li>
        </ol>
    </div>
</section>
<section>
    <div id="1.4">1.4</div>
    <div>
        <p>
            The Licensee can choose from the following hosting options:
        </p>
        <ol class="alpha">
            <li>
                <strong>On-Premise Hosting</strong>: The Licensee receives the right to host instances of the ODIN
                Server independently. These instances must consistently report telemetry data to
                4Players, to enable optimal operation and support.
            </li>
            <li>
                <strong>Cloud Hosting</strong>: The Licensee receives access to the ODIN Server, which is managed
                and maintained by 4Players. This option provides a hassle-free, comprehensive
                solution without the need for the Licensee to handle server-side processing or
                maintenance.
            </li>
        </ol>
        <p>
            Regardless of which option the Licensee chooses, he is authorized to utilize the ODIN
            SDK in accordance with the terms set out in this Agreement, ensuring a flexible and
            scalable solution for integrating real-time chat technology into various digital
            platforms. Irrespective of whether the Licensee chooses a hosting option or not, this
            Agreement exclusively governs the right to use ODIN SDK.
        </p>
    </div>
</section>
<section class="main-section">
    <div id="2">2.</div>
    <p>Right of Use</p>
</section>
<section>
    <div id="2.1">2.1</div>
    <p>
        4Players hereby grants the Licensee a worldwide, royalty-free, non-exclusive and non-
        transferable right to use the ODIN SDK (the “<strong>License</strong>”) in accordance with Section 2.2,
        together with Licensee owned and/or licensed software and technology which
        Licensee uses and integrates with the ODIN SDK (the “<strong>Licensee Software</strong>”).The License
        is limited in time to the term of this Agreement.
    </p>
</section>
<section>
    <div id="2.2">2.2</div>
    <div>
        <p>
            The License serves to improve the real-time communication capabilities within the
            Licensee’s applications and is limited exclusively for the following purposes:
        </p>
        <ol class="alpha">
            <li>
                <b>Integration</b>: The Licensee is granted the right to incorporate the ODIN SDK into its
                application(s). This involves implementing the ODIN SDK according to the guidelines
                and documentation provided by 4Players.
            </li>
            <li>
                <b>Operation</b>: Upon successful integration, the Licensee is authorized to operate the
                ODIN SDK and ODIN Server to facilitate real-time voice communication within its
                application(s).
            </li>
            <li>
                <b>Enhancement</b>: Licensee is permitted to use the ODIN SDK's capabilities to enrich
                user interaction within its application(s), including but not limited to enabling
                community discussions, virtual meetings, training sessions, or other activities that
                necessitate real-time communication or real-time data synchronization.
            </li>
        </ol>
        <p>
            The rights granted under this agreement do not cover activities beyond the expressly
            stated scope. The License does not include any form of sublicensing, transferring,
            selling, renting, or otherwise distributing the ODIN SDK to third parties unless explicitly
            authorized by 4Players in writing. Furthermore, modifications, reverse-engineering, or
            alterations to the source code of the ODIN SDK or ODIN Server are not permitted.
        </p>
    </div>
</section>
<section>
    <div id="2.3">2.3</div>
    <p>
        During the term of this Agreement, the Licensee is entitled to download the current
        version of the ODIN SDK from the website of 4Players or Github (github.com/4players).
        Documentation is provided online at 4players.io/odin.
    </p>
</section>
<section>
    <div id="2.4">2.4</div>
    <p>
        The Licensee acknowledges and confirms that he has tested the ODIN SDK integration
        in its target system environment using the free access key provided to ensure the
        compatibility and performance meet his requirements. If the Licensee opts for On-
        Premise Hosting, he is solely responsible for testing and ensuring that the system
        environment is suitable for the optimal operation of the ODIN Server.
    </p>
</section>
<section>
    <div id="2.5">2.5</div>
    <p>
        The right to decompile the ODIN SDK granted to Licensee herein is only granted under
        the terms of Section 69e para. (1) nos. 1 to 3 UrhG and within the limits of Section 69e
        para. (2) nos. 1 to 3 UrhG.
    </p>
</section>
<section>
    <div id="2.6">2.6</div>
    <p>
        Except as set out in this Agreement, no rights to use the ODIN SDK or ODIN Server are
        granted to the Licensee.
    </p>
</section>
<section class="main-section">
    <div id="3">3.</div>
    <p>IP Rights</p>
</section>
<section>
    <div id="3.1">3.1</div>
    <p>
        The Parties acknowledge and agree that 4Players is the sole owner of the Intellectual
        Property Rights in the ODIN SDK and the ODIN Server (including the respective source
        code). This applies also if and to the extent that 4Players will – at the request of the
        Licensee – render services which effects, changes or modifies the ODIN SDK or ODIN
        Server. Except as set out herein, the Licensee shall not acquire or receive any rights
        with regard to the ODIN SDK.
    </p>
</section>
<section>
    <div id="3.2">3.2</div>
    <p>
        All documentation, documents, data, plans and other information provided by either
        Party to the other Party in connection with this Agreement shall be used only for the
        purposes of this Agreement and shall remain the exclusive property of the providing
        Party.
    </p>
</section>
<section>
    <div id="3.3">3.3</div>
    <p>
        The Licensee shall retain (to the extent applicable) and own all rights in the Licensee
        Software (including its respective source codes), his personal data, all data gathered
        by Licensee whilst using the ODIN SDK and ODIN Server, and all deliverables arising out
        of or in connection with this Agreement.
    </p>
</section>
<section>
    <div id="3.4">3.4</div>
    <p>
        Each Party undertakes not to challenge the Intellectual Property Rights of the other
        Party, nor to have them challenged by third parties, nor to support third parties in any
        way in the challenge.
    </p>
</section>
<section>
    <div id="3.5">3.5</div>
    <p>
        “<strong>Intellectual Property Rights</strong>” means all inventions, patents, software, copyrights,
        mask, works, industrial property rights, trademarks, trade secrets, know-how,
        proprietary information and rights and information of a similar nature. Such


        information includes, without limitation, designs, processes, drawings, prints,
        specifications, reports, data, technical information, and instructions.
    </p>
</section>
<section class="main-section">
    <div id="4">4.</div>
    <p>Warranty</p>
</section>
<section>
    <div id="4.1">4.1</div>
    <p>
        4Players is not obliged under this Agreement, to remedy any malfunction or defect in
        the ODIN SDK, unless expressly agreed otherwise by the Parties.If the Licensee has
        entered into a separate agreement with 4Players on the fee-based use of the ODIN
        Server, the following shall apply in deviation from Section 4.1:The statutory provisions
        shall apply unless otherwise stipulated below.
    </p>
</section>
<section>
    <div id="4.2">4.2</div>
    <p>
        If the Licensee detects any malfunctions or defects of ODIN SDK, he must notify
        4Players immediately.
    </p>
</section>
<section>
    <div id="4.2.3">4.2.3</div>
    <p>
        Rights in case of malfunctions or defects shall be excluded in the case of minor
        or immaterial deviations from the agreed or assumed characteristics. Product
        description shall not be deemed guaranteed by 4Players unless the product
        description including the ODIN SDK description is set out in this Agreement or
        otherwise agreed separately in writing. In respect of updates, upgrades and the
        delivery of new versions of the ODIN SDK, Licensee’s rights in case of defects
        shall be limited to the new features of the update, upgrade or new version
        compared to the previous version release.
    </p>
</section>
<section>
    <div id="4.2.4">4.2.4</div>
    <p>
        In case of a malfunction or a defect of ODIN SDK, 4Players shall remedy such
        malfunction or defect in accordance with the provisions of the Service Level Agreement (SLA) included with the
        Fee-Based Usage subscription. For the avoidance of doubt, the SLA shall
        only apply if the Licensee has concluded a separate agreement with 4Players
        on the fee-based use of the ODIN Server. Otherwise, the Licensee has no rights
        under the SLA.
    </p>
</section>
<section>
    <div id="4.3">4.3</div>
    <p>
        4Players is not responsible for any changes or additions to the ODIN SDK made by the
        Licensee himself or by third parties. 4Players is also not responsible for defects, which
        are caused by improper use by the Licensee.Any claims for damages are subject to the
        limitations set forth under Section 6.
    </p>
</section>
<section class="main-section">
    <div id="5">5.</div>
    <p>Rights in Case of Defects in Title</p>
</section>
<section>
    <div id="5.1">5.1</div>
    <p>
        If third parties assert rights to the ODIN SDK against the Licensee, he shall inform
        4Players immediately in writing of the assertion of such rights and shall give 4Players
        all powers of attorney and authorisations necessary to defend ODIN SDK against the
        asserted rights of third parties.
    </p>
</section>
<section>
    <div id="5.2">5.2</div>
    <p>
        4Players shall do everything in its power, in order to defend ODIN SDK at its own
        expense against the claims of third parties.
    </p>
</section>
<section>
    <div id="5.3">5.3</div>
    <p>
        To the extent that there are defects in title, 4Players is entitled at its option to either
        (i) take legitimate measures to remove the third party rights, which impair the
        contractual use of ODIN SDK, or (ii) remedy the enforcement of such claims, or (iii)
        change or replace ODIN SDK in such a manner, that it no longer infringes the rights of
        third parties, provided and to the extent that this does not substantially impair the
        functionality of ODIN SDK.
    </p>
</section>
<section>
    <div id="5.4">5.4</div>
    <p>
        The Licensee is not entitled to any rights under Section 5.2 or Section 5.3 if he has not
        concluded an agreement with 4Players on the fee-based use of the ODIN Server.
    </p>
</section>
<section class="main-section">
    <div id="6">6.</div>
    <p>Liability</p>
</section>
<section>
    <div id="6.1">6.1</div>
    <p>
        The liability of 4Players shall be limited to the following:
    </p>
</section>
<section>
    <div id="6.1.1">6.1.1</div>
    <p>
        4Players shall be unrestricted liable i) in the event of malice, intent or gross
        negligence; ii) within the scope of a guarantee expressly assumed by 4Players;
        iii) for damages arising from injury to life, limb or health; and iv) in accordance
        with the provisions of the German Product Liability Act (ProdHaftG).
    </p>
</section>
<section>
    <div id="6.1.2">6.1.2</div>
    <p>
        4Players shall be liable for the breach of a material contractual obligation, the
        fulfilment of which is a prerequisite for the proper performance of the
        Agreement and on the observance of which the Licensee regularly relies and
        may rely (cardinal obligation). In the case and simple negligence, however, the
        liability shall be limited to the amount which was foreseeable by 4Players at the
        time the respective service was performed.
    </p>
</section>
<section>
    <div id="6.1.3">6.1.3</div>
    <p>
        Besides, the liability of 4Players is excluded.
    </p>
</section>
<section>
    <div id="6.2">6.2</div>
    <p>
        The Licensee is obliged to prevent and minimise damage, for example through data
        backup and state-of-the-art virus defence.
    </p>
</section>
<section class="main-section">
    <div id="7">7.</div>
    <p>Term and Termination</p>
</section>
<section>
    <div id="7.1">7.1</div>
    <p>
        This Agreement is concluded for an indefinite period. It can be terminated at any time
        with a notice period of 3 months to the end of each calendar month. A deviating
        agreement, in particular a separate agreement with 4Players on the fee-based use of
        the ODIN Server, shall prevail.
    </p>
</section>
<section>
    <div id="7.2">7.2</div>
    <p>
        The right to terminate this Agreement for good cause shall remain unaffected. Such
        good cause for an extraordinary termination exists, in particular, if the Licensee uses
        the ODIN SDK without a separate agreement with 4Players on the fee-based use of the
        ODIN Server, although the requirements for Free Use within the meaning of section 1
        are not met.
    </p>
</section>
<section class="main-section">
    <div id="8">8.</div>
    <p>Confidentiality</p>
</section>
<section>
    <div id="8.1">8.1</div>
    <p>
        The Parties agree to keep all confidential information which becomes known to them
        during the performance of this Agreement strictly confidential and only to use such
        information for the contractually agreed purposes. Confidential information for the
        purpose of this provision shall mean information, documents, details and data, which
        is marked as such or is to be seen as confidential because of its nature. The Parties
        shall not seek to register intellectual property rights in respect of confidential
        information of the other Party.
    </p>
</section>
<section>
    <div id="8.2">8.2</div>
    <p>
        If confidential information within the above definition is requested by a public
        authority, then the other Party shall be informed without delay and before the
        information is supplied to the public authority.
    </p>
</section>
<section>
    <div id="8.3">8.3</div>
    <p>
        The rights and obligations under 8.1 and 8.2 shall not be affected by the termination
        of this Agreement. Both Parties agree at the option of the other Party to return or
        destroy the confidential information of the other party upon the termination of this
        Agreement, to the extent that such information still exists.
    </p>
</section>
<section class="main-section">
    <div id="9">9.</div>
    <p>Data Protection</p>
</section>
<section>
    <div id="9.1">9.1</div>
    <p>
        The Parties shall comply with the statutory provisions on data protection, in particular
        the provisions of the General Data Protection Regulation

        (GDPR) and the German
        Federal Data Protection Act (BDSG), and shall obligate and train their employees
        accordingly. The Parties shall inform each other if the processing of personal data is
        necessary for the execution of this Agreement.
    </p>
</section>
<section>
    <div id="9.2">9.2</div>
    <p>
        The Parties will conclude a data processing agreement (Art. 28 GDPR), if required.
    </p>
</section>
<section class="main-section">
    <div id="10">10.</div>
    <p>Final Provisions</p>
</section>
<section>
    <div id="10.1">10.1</div>
    <p>
        Amendments or additions to this Agreement must be made in writing to be effective
        (email is sufficient). This shall also apply to amendments of this written form
        requirement. General terms and conditions of the Licensee shall not apply unless
        4Players has expressly approved them in writing – even if their validity has not been
        expressly contradicted.
    </p>
</section>
<section>
    <div id="10.2">10.2</div>
    <p>
        4Players shall have no right to use Licensee’s names, trademarks, trade names, or logos
        without the prior written consent of Licensee in each instance.
    </p>
</section>
<section>
    <div id="10.3">10.3</div>
    <p>
        This Agreement shall be governed by the laws of the Federal Republic of Germany
        except for the UN Sales Convention.
    </p>
</section>
<section>
    <div id="10.4">10.4</div>
    <p>
        The exclusive place of jurisdiction for all disputes arising directly or indirectly from the
        contractual relationship shall be at the registered registered office of 4Players. This
        does not apply if the Licensee is a consumer within the meaning of Section 13 German
        Civil Code (BGB).
    </p>
</section>
<section>
    <div id="10.5">10.5</div>
    <p>
        Should any provision of this Agreement be or become invalid, this shall not affect the
        validity of the remaining terms. The Parties shall in such an event be obliged to
        cooperate in the creation of terms which achieve such legally valid result as comes
        closest commercially to that of the invalid provision. The above shall apply accordingly
        to the closing of any gaps in the Agreement.
    </p>
</section>
`}),e.add({id:3688,href:"https://www.4players.io/odin/license/",title:"ODIN License Agreement",section:"ODIN Documentation",description:"The License Agreement for using ODIN by 4Players",content:`<p>Welcome to the License Agreement section of our website. Here you will find the terms and conditions governing the use
of the ODIN SDK provided by 4Players GmbH. These agreements outline the rights and responsibilities of both 4Players and
the Licensee, and they become effective whenever you download and use the ODIN SDK.</p>
<p>The License Agreement covers various aspects, including:</p>
<ul>
<li>The scope of the agreement</li>
<li>The rights granted to the Licensee</li>
<li>Intellectual property rights</li>
<li>Warranty and liability provisions</li>
<li>Termination clauses</li>
<li>Confidentiality and data protection</li>
</ul>
<p>By downloading and using the ODIN SDK, you agree to comply with the terms set forth in the respective License Agreement
version that applies to your download date.</p>
<p>You can find the <a href="/odin/license/latest">latest version of the License Agreement</a> below, along with links to previous
versions for reference.</p>
<h2 id="license-agreement-versions">License Agreement Versions</h2>
<p>Below is a list of the different versions of our License Agreements, with the most recent version listed first:</p>
<table>
<thead>
<tr>
<th>Version</th>
<th>Effective Date</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/license/latest">2025-05-27 (latest)</a></td>
<td>2025-05-27</td>
<td>Initial release of the License Agreement.</td>
</tr>
</tbody>
</table>
<p>If you have any questions or need further assistance, please do not hesitate to contact our support team.</p>
<p>Thank you for using the ODIN SDK. We are committed to providing a robust and reliable platform for your development
needs.</p>
`}),e.add({id:3689,href:"https://www.4players.io/odin/pricing/",title:"Pricing",section:"ODIN Documentation",description:"ODIN provides fair pricing for exceptional services.",content:`<p>Please head over to our <a href="/products/voice-chat/#pricing">product pages</a> to learn more about pricing.</p>
`}),e.add({id:3690,href:"https://www.4players.io/blog/farming-simulator-25-pre-order-bundle/",title:"Farming Simulator 25 Pre-Order Bundle: Secure Your Server Now with Exclusive Bonuses!",section:"4Players Blog",description:"We have put together an exclusive pre-order bundle for our dedicated players that’s packed with amazing perks. Don't Miss Out – Pre-Order Now!",content:`<p>Great news, Farming Simulator fans! 4Netplayers is excited to announce the continuation of our successful partnership with <strong>GIANTS Software</strong>, the creators of the Farming Simulator series. With the release of Farming Simulator 25 just around the corner, we’ve put together an exclusive pre-order bundle for our dedicated players that’s packed with amazing perks!</p>
<h2 id="whats-in-the-pre-order-bundle">What’s in the Pre-Order Bundle?</h2>
<p>Starting today, when you pre-order your Farming Simulator 25 game server, you’ll get access to some serious bonuses that will enhance your gaming experience:</p>
<ul>
<li>
<p>25 GB of Free Mod Space: Customize your farm and gameplay to your heart’s content without worrying about storage space.</p>
</li>
<li>
<p>Up to 3 Months of Free Server Hosting: That’s right! Get more playtime on us with up to 3 months of free hosting, depending on the plan you choose.</p>
</li>
<li>
<p>Exclusive Merch Package: Show off your love for Farming Simulator with a limited-edition merch bundle, available only through 4Netplayers pre-orders.</p>
</li>
</ul>
<p>Don’t Miss Out – Pre-Order Now!</p>
<p>Our servers are optimized for Farming Simulator 25, ensuring a smooth, lag-free experience for you and your friends. Plus, with our automated backups, updates, and easy-to-use interface, you can focus on farming instead of server management. Pre-order now and secure your spot!</p>
<p>👉 <a href="https://4np.de/fs25-preorder">Pre-order your Farming Simulator 25 server today!</a></p>
<h2 id="attention-affiliate-partners">Attention, Affiliate Partners!</h2>
<p>This pre-order promotion isn’t just for our gaming customers—it’s a huge opportunity for our affiliate partners as well. With our generous affiliate program, you can earn 50% of the first net monthly payment from your referrals. Additionally, you’ll have access to customizable €5 discount codes to attract even more customers.</p>
<p>Affiliate materials are available on our <a href="https://4np.de/affiliate-partner">Affiliate Hub</a>, or you can sign up through <a href="https://www.adcell.de/werbemittel/gameserver-4players">Adcell</a> or <a href="https://ui.awin.com/merchant-profile/13542">Awin</a> to start promoting today!</p>
<p><img src="/images/blog/4pio_blogpost_giants-20241018-084001.jpg" alt="4Players and GIANTS Software"></p>
`}),e.add({id:3691,href:"https://www.4players.io/blog/voice-chat-sdk-odin-back-in-unity-asset-store/",title:"ODIN Voice Chat is back in Unity Asset Store",section:"4Players Blog",description:"Our out-of-the-box voice chat solution is now available again in the Unity Asset Store. 4Players is now also a certified partner of Unity, making ODIN Voice Chat a Verified Solution, meeting Unity’s highest quality and compatibility standards.",content:`<h2 id="now-in-unity-asset-store">Now in Unity Asset Store!</h2>
<p><a href="/products/voice-chat/">ODIN Voice</a> is now available again in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>. Head over to
download and install the SDK for free!</p>
<p>You can <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">download</a>, install and use the SDK for free for up to <strong>25</strong> peak concurrent users by either generating a free
access key in our <a href="/odin/introduction/access-keys/">developer documentation</a> or directly in the
Unity Editor using the <code>Odin Manager Prefab</code>.</p>
<h2 id="4players-becomes-partner-of-unity">4Players becomes partner of Unity</h2>
<p>We thank Unity for the frictionless and thorough verification process to make <strong>ODIN Voice Chat</strong> a <code>Verified Solution</code>,
meaning it meets Unity’s highest quality and compatibility standards.
They were very responsive and did an amazing job getting our Odin Plugin reviewed for public release in the Unity Asset Store.</p>
<h2 id="more-to-come">More to come</h2>
<p>Our <a href="https://www.4players.io/odin/examples/multiplayer-sample/">Unity Tech Demo</a> has been further developed
and will also be released on the Unity Asset Store soon. In addition, we are working on the new version 2.0 of our plugin
with many improvements and webGL support, among other things.</p>
<p><strong>We can&rsquo;t wait to see what you are developing with ODIN on the amazing Unity Engine</strong>.</p>
<p>Please <a href="mailto:odin@4players.io">contact sales</a> if you need additional information on pricing and get in touch with our
<a href="/company/contact_us/">Customer Success Team</a> if you want to be part of our &ldquo;Showcase&rdquo;.</p>
<p><a href='https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568' target='' class="btn btn-primary">Get ODIN from Unity Asset Store</a></p>
`}),e.add({id:3692,href:"https://www.4players.io/blog/4netplayers-is-joing-forces-with-medion/",title:"4Netplayers is joining forces with MEDION",section:"4Players Blog",description:"Get three months of 4Netplayers gaming servers for free when you buy a computer from Medion's ERAZER gaming line.",content:`<p>Get ready for an exciting collaboration between <strong>Medion</strong> and 4Players that will take your gaming experience to the
next
level! Soon, we’re launching an exclusive promotion where every purchase of a <strong>Medion Erazer gaming PC</strong> will include a
<strong>fully-featured 4Netplayers game server for three months, free of charge</strong> – a value of <strong>€40</strong>!</p>
<h2 id="what-to-expect">What to Expect:</h2>
<p>During the promotional period, when you purchase a powerful <strong>Medion Erazer gaming PC</strong>, you’ll receive a free
4Netplayers
game server to dive right into multiplayer gaming! Our servers come with <strong>ultra-low latency, automatic backups</strong>, and
<strong>easy setup</strong>, ensuring you get the most out of your games.</p>
<h2 id="how-it-works">How It Works:</h2>
<ol>
<li>
<p><strong>Purchase a Medion Erazer gaming PC</strong> once the promotion goes live.</p>
</li>
<li>
<p>You’ll receive a <strong>code for 3 months of free server hosting</strong> from 4Netplayers.</p>
</li>
<li>
<p>Redeem your code, set up your server, and start gaming with friends immediately!</p>
</li>
</ol>
<p>👉 <strong><a href="https://www.medion.com/de/shop/gaming/alle">Explore the Medion Erazer lineup here</a></strong></p>
<h2 id="stay-tuned">Stay Tuned!</h2>
<p>The promotion is launching soon—keep an eye out and stay informed! You won’t want to miss out on this fantastic
opportunity. We’ll keep you posted with updates right here and across our channels.</p>
`}),e.add({id:3693,href:"https://www.4players.io/blog/4players-accounces4players-launches-odin-rooms-an-ultra-secure-decentralized-browser-based-video-conferencing-tool/",title:"4Players Launches Rooms: An Ultra-Secure Decentralized Browser-Based Video Conferencing Tool",section:"4Players Blog",description:"Discover Rooms, a new decentralized video conferencing tool by 4Players offering ultra-secure, browser-based communication with no data storage. Free for small businesses, NGOs, and educational use.",content:`<p>We&rsquo;re thrilled to announce the launch of <strong>Rooms</strong>, our ultra-secure, decentralized video conferencing platform
built on <a href="/products/voice-chat/">ODIN Voice</a>. Designed with security and privacy at its core, Rooms is
built for businesses, educators, NGOs, and individuals looking for more control over their communications.</p>
<p>With ODIN Rooms, there&rsquo;s <strong>no need for accounts or app installations</strong>—simply click a link and join a secure, encrypted
conversation. Plus, for those who prioritize data control, the platform is fully self-hostable.</p>
<p>We’re offering <strong>free access</strong> for small businesses, NGOs, and educational institutions, and we’re excited to announce
that key parts of the platform will soon be open-source!</p>
<p>Rooms is more than just a tool—it&rsquo;s a move toward <strong>safer, decentralized communication</strong>. Check out more details
and try Rooms <a href="/products/rooms/">here</a>.</p>
<p>Thanks to the whole team at 4Players that have been working hard to bring this project to life.</p>
<p>Stay tuned for future updates, and feel free to reach out if you have any questions!</p>
<p><strong>Press contact:</strong></p>
<p>Susanne Kasberger<br>
PR &amp; Corporate Communications<br>
4Players GmbH<br>
Deelbögenkamp 4, 22297 Hamburg, Germany<br>
Email: <a href="mailto:susanne.kasberger@4players.io">susanne.kasberger@4players.io</a></p>
`}),e.add({id:3694,href:"https://www.4players.io/blog/4players-changes-terms-and-services/",title:"We have adjusted our Terms and Services",section:"4Players Blog",description:"Starting with Rooms today we have updated our Terms and Services. Read more about the changes.",content:`<p>We have updated our Terms of Service to include specific rules for our new product, <a href="/products/rooms/">Rooms</a>. These changes primarily apply to users who choose to host video conferencing on our platform. Importantly, there
are <strong>no changes to the terms for existing users</strong>. The only significant adjustment for everyone is a <strong>minor
renumbering of sections</strong>. You can review the updated terms <a href="/company/terms/">here</a>.</p>
`}),e.add({id:3695,href:"https://www.4players.io/blog/4players-releases-odin-for-unreal-engine-5.4/",title:"ODIN brings support for Unreal Engine 5.4",section:"4Players Blog",description:"Discover the latest enhancements in ODIN SDK v1.6.5, now fully compatible with Unreal Engine 5.4. This update offers critical fixes and new features designed to optimize real-time voice communication in your games and applications. Learn how the new changes can elevate your project's performance.",content:`<p>We are thrilled to announce the release of the latest update for our ODIN Software Development Kit (SDK), now fully
supporting Unreal Engine 5.4. This update brings a series of enhancements and fixes that solidify ODIN’s position as a
leading voice communication solution for game developers and digital creators. Here’s everything you need to know about
the ODIN SDK v1.8.7 update:</p>
<p><strong>What’s New in v1.8.7?</strong></p>
<ul>
<li><strong>Core SDK Upgrade</strong>: The heart of ODIN, the Core SDK, has been upgraded to version 1.6.5. For a detailed view of the
enhancements and new capabilities, check out
the <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.5">release notes on our GitHub page</a>.</li>
<li><strong>iOS Build Fixes</strong>: We’ve addressed and fixed build issues that previously affected iOS, enhancing stability and
compatibility across all supported Apple devices.</li>
<li><strong>Enhanced Asynchronous Event Handling</strong>: The update introduces world validity checks for asynchronous events to
ensure smooth synchronization with the game environment, minimizing disruptions during gameplay.</li>
<li><strong>Improved Safety with <code>UOdinRoom</code> References</strong>: Changes have been made to how <code>UOdinRoom</code> references are accessed,
which now prevents potential crashes related to asynchronous event handling—boosting the overall robustness of the
SDK.</li>
<li><strong>Support for Unreal Engine 5.4</strong>: Last but not least, we’ve added support for the latest Unreal Engine 5.4 releases,
allowing developers to integrate ODIN’s cutting-edge voice communication technology with the newest features from one
of the most powerful game engines available today.</li>
</ul>
<p><strong>Why Update?</strong>
Updating to ODIN SDK v1.8.7 ensures that developers can take full advantage of the latest improvements in voice
communication technology. Whether you’re developing an interactive game, a VR experience, or an educational tool, this
update is designed to enhance your application&rsquo;s performance and stability.</p>
<p>Stay ahead of the curve by integrating the latest version of ODIN SDK into your applications and deliver exceptional
audio experiences to your users. Download the updated SDK today and start making the most out of Unreal Engine 5.4!</p>
<p><strong>Download ODIN SDK v1.8.7</strong>
Download the latest version of ODIN SDK v1.8.7 from our <a href="">GitHub repository</a> or directly from the Unreal Engine
Marketplace. For more information on the ODIN SDK and its features, visit our <a href="https://www.4players.io/odin">official website</a>.</p>
<p><a href='https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk' target='' class="btn btn-primary">Go to Unreal Marketplace</a></p>
`}),e.add({id:3699,href:"https://www.4players.io/blog/4players-releases-odin-unreal-sdk-v1.8.2/",title:"Unleashing the Power of Seamless Communication: 4Players ODIN SDK v1.8.2 for Unreal Engine",section:"4Players Blog",description:"Discover the latest update to the 4Players ODIN SDK for Unreal Engine. Version 1.8.2 brings key improvements in compatibility and functionality.",content:`<p>The world of real-time communication in gaming and digital applications is constantly evolving, and staying ahead of
these changes is crucial for developers. That&rsquo;s why we&rsquo;re thrilled to announce the release of version 1.8.2 of our ODIN
Software Development Kit (SDK) for Unreal Engine, packed with enhancements that promise to elevate your development
experience.</p>
<p><strong>What&rsquo;s New in v1.8.2?</strong></p>
<ul>
<li>
<p><strong>Improved Plugin Compatibility:</strong> In our ongoing effort to ensure smooth integration with a wide range of Unreal
Engine projects, we&rsquo;ve renamed the <code>odin.h</code> core SDK header file. This change addresses and prevents naming conflicts
with other plugins, ensuring a more streamlined development process.</p>
</li>
<li>
<p><strong>Crucial Bug Fix:</strong> We&rsquo;ve addressed a significant bug related to the <code>BytesToString</code> and <code>StringToBytes</code> functions in
Unreal Engine, which previously disrupted the peer/room user data byte array format. This fix is based on detailed
community
feedback (<a href="https://forums.unrealengine.com/t/bytestostring-conversion-issue/470458">see the forum post for more details</a>).
Our commitment to community-driven improvements continues to shape the ODIN SDK, making it more robust and
developer-friendly.</p>
</li>
</ul>
<p><strong>Looking Back: v1.8.1 Enhancements</strong></p>
<p>While we didn&rsquo;t announce it separately, version 1.8.1 also brought a subtle yet impactful change:</p>
<ul>
<li><strong>Streamlined Codebase:</strong> We removed the unused <code>ConstructJsonValue</code> function. This refinement aligns with our
philosophy of lean and efficient code, ensuring that every element of the ODIN SDK is essential and purpose-driven.</li>
</ul>
<p><strong>Why Choose 4Players ODIN SDK for Unreal Engine?</strong></p>
<p>Our SDK stands at the forefront of real-time communication solutions, offering unparalleled voice communication
integration into your digital applications. Whether you&rsquo;re working on a gaming project, an educational platform, or a
VR/AR application, the ODIN SDK empowers you with:</p>
<ul>
<li>Cutting-edge technology for superior communication experiences.</li>
<li>Cross-platform compatibility, from desktop to mobile.</li>
<li>A focus on privacy and security, respecting user data.</li>
<li>Scalability to meet the needs of any project size.</li>
<li>Comprehensive documentation and support for effortless implementation.</li>
</ul>
<p><strong>Embark on Your Next Project with Confidence</strong></p>
<p>We&rsquo;re committed to providing developers with the tools they need to create immersive, interactive, and connected
experiences. The release of ODIN SDK v1.8.2 for Unreal Engine is a testament to this commitment, reflecting our
dedication to continuous improvement and responsiveness to community feedback.</p>
<p>Stay ahead in the dynamic world of application development with 4Players ODIN SDK. Download version 1.8.2 today, and
experience the difference in your Unreal Engine projects.</p>
`}),e.add({id:3700,href:"https://www.4players.io/blog/4players-releases-odin-unity-sdk-v1.6/",title:"Unity SDK v1.6.0: Elevating Your Development Experience with Core SDK v1.6.4 and Essential Fixes",section:"4Players Blog",description:"Discover the latest enhancements in Unity SDK v1.6.0, featuring Core SDK version 1.6.4 integration and key bug fixes.",content:`<p>In the world of game development and interactive applications, continuous improvement is key to creating outstanding
user experiences. That’s why we’re excited to announce the release of Unity SDK version 1.6.0. This latest update
encapsulates our commitment to providing developers with robust, efficient tools for integrating top-tier real-time
communication features.</p>
<p><strong>Core SDK Integration: A Leap Forward</strong></p>
<ul>
<li><strong>Core SDK Version 1.6.4:</strong> The heart of this update lies in the integration of Core SDK version 1.6.4. This
advancement brings with it a suite of enhancements and optimizations, ensuring that your Unity projects benefit from
the latest developments in real-time communication technology.</li>
</ul>
<p><strong>Focused Bug Fixes and Improvements:</strong></p>
<ul>
<li><strong>Serialization Build Error Resolution:</strong> In response to feedback from our developer community, we’ve addressed and
fixed the potential <code>FindObjectOfType</code> serialization build errors. This fix significantly improves the build process,
providing a smoother and more reliable development experience.</li>
<li><strong>UserData Handling Optimization:</strong> Another crucial fix in this update is the resolution of an issue where user data
was incorrectly replicated across multiple rooms when using <code>OdinHandler.JoinRoom</code>. This fix ensures that user data is
handled accurately and securely, maintaining the integrity of room-based operations.</li>
</ul>
<p><strong>Implications for Developers:</strong></p>
<p>The release of Unity SDK v1.6.0 marks a significant step in enhancing the efficiency and reliability of game development
and interactive applications. By addressing key issues and integrating the latest Core SDK, we empower developers to
focus on what they do best - creating immersive, interactive experiences without worrying about the complexities of
real-time communication integration.</p>
<p><strong>Join the Evolution:</strong></p>
<p>Ready to take your Unity projects to the next level? Incorporate Unity SDK v1.6.0 into your development workflow today.
Explore the detailed changelogs and begin leveraging these latest enhancements for a superior development experience.
Visit our <a href="https://github.com/4Players/odin-sdk-unity">GitHub repository</a> to download the update and start transforming the
way you integrate communication in your applications.</p>
<p><a href='/odin/guides/unity/' class="btn btn-primary">Get Started with Unity today</a></p>
`}),e.add({id:3701,href:"https://www.4players.io/blog/4players-hires-fullstack-developers-2023-12/",title:"Join Our Innovative Team at 4Players: Empowering the Future of Gaming and Communication",section:"4Players Blog",description:"Join 4Players as a Fullstack Engineer. Be part of a leading gaming company, shaping the future of gaming experiences. Apply now!",content:`<p>At 4Players, we&rsquo;re not just about games; we&rsquo;re about pushing the boundaries of digital interaction. As leaders in the
game server business in Germany and pioneers in developing innovative 3-D communication technologies, we are
continuously expanding our horizons into the realms of the Metaverse, VR, and immersive applications.</p>
<p><strong>Who We Are Looking For: Full-Stack Developer (m/f/d)</strong></p>
<p>Are you passionate about creating complex software solutions in a gaming environment? Do you have expertise in PHP,
JavaScript/TypeScript, HTML5, CSS3, and backend technologies like REST APIs and MySQL? Then you might be the perfect fit
for our team!</p>
<p><strong>What We Offer:</strong></p>
<ul>
<li>Permanent position with 30 days of vacation per year</li>
<li>An exciting, dynamic work environment in the world&rsquo;s largest entertainment industry</li>
<li>Flat hierarchies in a creative team</li>
<li>Flexible working hours with remote working options</li>
<li>Regular team events and more!</li>
</ul>
<p><strong>Your Role:</strong></p>
<ul>
<li>Develop and maintain customer frontends, websites, and backend systems</li>
<li>Take responsibility for new projects and redesign existing tools</li>
<li>Create technical documentation</li>
</ul>
<p><strong>Join Our Team:</strong></p>
<p>Become a part of a team that thrives on flexibility, independence, and collaboration. Enjoy our modern structures,
tools, and a relaxed working environment, where you&rsquo;ll work with a diverse group of over 25 colleagues.</p>
<p>Ready to make an impact in the gaming world? Apply now!</p>
<p><a href='https://4players.recruitee.com/o/full-stack-software-entwickler-mwd-2' target='' class="btn btn-primary">Apply Now</a></p>
`}),e.add({id:3702,href:"https://www.4players.io/blog/wwise-and-odin-for-unreal/",title:"Wwise and ODIN: how to integrate a voice chat into your Unreal game using both plugins",section:"4Players Blog",description:"Are you wondering if our proximity voice chat ODIN works together with Wwise? Yes, it does! We offer a guide and code examples here.",content:`<h2 id="wwise-and-odin">Wwise and ODIN</h2>
<p>Are you using Unreal with Wwise and wondering if it works together with our proximity voice chat ODIN? Yes, it does!
It&rsquo;s not even hard to do. It needs a little different setup for the voice playback, though.
After that you can take advantage of the high quality built-in features from Wwise and apply them to your voice audio,
e.g. spatial audio.</p>
<p>Read our <a href="/odin/guides/unreal/odin-wwise/">guide</a> and check our <a href="https://github.com/4Players/odin-unreal-wwise">sample project</a>:</p>
<p><a href='/odin/guides/unreal/odin-wwise/' class="btn btn-primary">Wwise Guide</a></p>
<p><a href='https://github.com/4Players/odin-unreal-wwise' target='' class="btn btn-primary">Sample Project</a></p>
<p>If you are new to ODIN, read this &raquo;<strong><a href="/odin/guides/unreal/">Starter Guide</a></strong>&laquo; or watch our &raquo;<strong><a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Video Tutorial Series</a></strong>&laquo;</p>
<hr>
<p>Using FMOD? We got you covered with this &raquo;<strong><a href="/odin/guides/unity/odin-fmod/">Guide for FMOD</a></strong>&laquo;</p>
<p>Do you need help with another sound plugin or did you already find a solution to make it work with Odin? Please tell us on <a href="https://4np.de/discord">Discord</a> !</p>
<p><a href='https://4np.de/discord' target='' class="btn btn-primary">Discord Community</a></p>
`}),e.add({id:3703,href:"https://www.4players.io/blog/spread-holiday-joy-with-a-5-euro-gift-introducing-the-4netplayers-affiliate-hub/",title:"Spread Holiday Joy with a €5 Gift: Introducing the 4NetPlayers Affiliate Hub",section:"4Players Blog",description:"This holiday season, 4NetPlayers is delighted to introduce a gift that keeps on giving: the 4NetPlayers Affiliate Hub. ",content:`<h2 id="introduction">Introduction</h2>
<p>This holiday season, 4NetPlayers is delighted to introduce a gift that keeps on giving: the 4NetPlayers Affiliate Hub.
It&rsquo;s your opportunity to spread cheer and earn rewards with our exclusive Christmas promotion.</p>
<h2 id="what-is-the-4netplayers-affiliate-hub">What is the 4NetPlayers Affiliate Hub?</h2>
<p>The Affiliate Hub is our way of turning your gaming network into a lucrative venture. It allows you to share the joy of
gaming with personalized €5 discount codes, and when your friends make a purchase, you earn too!</p>
<h2 id="your-personal-5-discount-code">Your Personal €5 Discount Code</h2>
<p>As a highlight of our Christmas campaign, we&rsquo;re giving you the power to create individual €5 discount codes. These codes
aren&rsquo;t just a fantastic deal for your friends – they&rsquo;re your ticket to earning money for every successful referral. It&rsquo;s
simple: the more your code is used, the more you earn.</p>
<h2 id="why-join-the-affiliate-hub">Why Join the Affiliate Hub?</h2>
<p>Rewarding Friendships: Your friends get <strong>€5</strong> off their first purchase, and you get a commission. It&rsquo;s a win-win!</p>
<p>Spread the Holiday Spirit: What better way to celebrate the season than by giving the gift of gaming at a great price?</p>
<p>Celebrate Earnings: Enjoy the festivities even more, knowing that each new player you bring to our community boosts your
holiday budget.</p>
<h2 id="how-to-get-started">How to Get Started</h2>
<p>Ready to reap the rewards? Here’s what you need to do:</p>
<p>If you’re not already a 4NetPlayers member, sign up at <a href="https://app.netplay-config.4players.de/register">Server Manager &amp; Config-Interface</a>.</p>
<p>Once registered, visit the <a href="https://app.netplay-config.4players.de/payment/commissions">4NetPlayers Affiliate Hub</a> to create your unique €5 discount codes.</p>
<p>Share them with your friends, family, and gaming buddies.</p>
<h2 id="conclusion">Conclusion</h2>
<p>The 4NetPlayers Affiliate Hub is your chance to make the holiday season brighter for everyone. By sharing your
personalized €5 discount codes, you&rsquo;re not only giving the gift of gaming – you&rsquo;re also setting yourself up for a
prosperous new year. Start spreading the cheer (and earning your rewards) today!</p>
`}),e.add({id:3704,href:"https://www.4players.io/blog/introducing-our-ai-powered-chatbot-for-odin-sdk-support/",title:"Introducing Our AI-Powered Chatbot for ODIN SDK Support – Your 24/7 Development Companion",section:"4Players Blog",description:"Available 24/7 for Unreal, Unity, and Web SDK queries, this innovative tool offers instant, comprehensive assistance, enhancing your development experience. ",content:`<p>Dear Developers,</p>
<p>We&rsquo;re thrilled to announce an exciting addition to our ODIN Software Development Kit (SDK) resources – an AI-powered
chatbot, designed to provide round-the-clock support for developers working with the ODIN SDK. This innovative tool is
now accessible through our developer documentation at <a href="https://www.4players.io/odin">4Players ODIN</a> and is ready to
assist with Unreal, Unity, and Web SDK queries. Swift SDK support is on the horizon as well.</p>
<h2 id="understanding-the-ai-chatbot">Understanding the AI Chatbot</h2>
<p>Our AI assistant is not just any chatbot. It&rsquo;s been meticulously trained with extensive ODIN documentation, SDK
references, guides, and sample code. This means that it&rsquo;s equipped to offer detailed and specific support, mirroring the
expertise you&rsquo;d expect from our developer team.</p>
<h2 id="why-use-the-ai-chatbot">Why Use the AI Chatbot?</h2>
<ol>
<li><strong>24/7 Availability:</strong> Whether you&rsquo;re burning the midnight oil or working in a different time zone, our AI chatbot is
always on standby to help you out.</li>
<li><strong>Instant Support:</strong> Get immediate answers to your queries without waiting for human support, enabling a smoother and
faster development process.</li>
<li><strong>Comprehensive Knowledge Base:</strong> With training based on our vast repository of ODIN documentation, the chatbot can
handle a wide array of questions, from basic to complex.</li>
</ol>
<h2 id="your-feedback-matters">Your Feedback Matters</h2>
<p>As exciting as this beta release is, we acknowledge that perfection is a journey. That&rsquo;s why we&rsquo;re inviting you, our
valued user community, to actively participate in this journey. Test out the chatbot and use the feedback buttons to
rate answers as useful or not. Your input is crucial for us to continually refine and enhance the chatbot&rsquo;s
capabilities.</p>
<h2 id="continuous-improvement">Continuous Improvement</h2>
<p>We&rsquo;re committed to making this AI chatbot an invaluable tool for developers. Based on your feedback and ongoing chats,
we will constantly update its training material and fine-tune its responses, with the help of our experienced
development team.</p>
<h2 id="future-plans">Future Plans</h2>
<p>Expanding the AI chatbot&rsquo;s support to include other SDKs is a priority for us. We&rsquo;re working diligently to extend its
capabilities so that no matter which part of the ODIN ecosystem you&rsquo;re working with, expert assistance is always a chat
away.</p>
<h2 id="get-started">Get Started</h2>
<p>Experience the future of developer support now. Head over to our <a href="https://www.4players.io/odin">ODIN documentation</a> and
start chatting with the AI assistant. We can&rsquo;t wait to hear about your experiences and look forward to growing together
in this exciting new chapter of development support.</p>
<p>Thank you for being a part of our community and for joining us in this innovative journey.</p>
<p>Happy Developing!</p>
`}),e.add({id:3705,href:"https://www.4players.io/blog/4players-releases-odin-unreal-sdk-v1.8.0/",title:"ODIN Unreal SDK 1.8.0: New API Features and Critical Improvements",section:"4Players Blog",description:"We're proud to announce a new UE plugin version with important enhancements and new API features that further streamline your development process.",content:`<p>Hello ODIN Developers!</p>
<p>We are excited to bring you the latest update for the ODIN Unreal SDK - version 1.8.0. This release comes with important
enhancements and new API features that further streamline your development process. Let’s delve into what 1.8.0 has to
offer:</p>
<p><strong>Core SDK Update</strong></p>
<ul>
<li>The core SDK has been advanced to version 1.6.4. This update is pivotal in ensuring that our SDK remains at the
forefront of technology. You can find more details on this
update <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.4">here</a>.</li>
</ul>
<p><strong>API Enhancements</strong></p>
<ul>
<li><strong><code>RestartCapturing</code> in <code>UOdinAudioCapture</code>:</strong> This new addition allows for a more flexible control over audio
capturing, enabling developers to restart capturing with ease.</li>
<li><strong><code>GetIsPaused</code> and <code>SetIsPaused</code> in <code>UOdinAudioCapture</code>:</strong> These functions provide greater control over audio capture
management, allowing for a pause and resume mechanism.</li>
</ul>
<p><strong>Bugfixes and Improvements</strong></p>
<ul>
<li><strong>Unreal Engine 5.3 Compatibility:</strong> We&rsquo;ve addressed build issues and deprecation warnings associated with Unreal
Engine 5.3, ensuring smoother integration.</li>
<li><strong>Crash Fix on Capturing Restart:</strong> Resolved a potential crash that could occur when trying to restart capturing after
stopping it.</li>
<li><strong><code>CanContainContent</code> Disabled:</strong> In response to community feedback (as noted in issue #1), we&rsquo;ve
disabled <code>CanContainContent</code>, focusing on enhancing user experience.</li>
</ul>
<p><strong>Join Us in Shaping the Future</strong></p>
<p>As always, your feedback is invaluable to us. It helps us tailor our SDK to meet your needs and expectations. We
encourage you to dive into version 1.8.0 and share your thoughts with us.</p>
<p>Together, let&rsquo;s continue to push the boundaries of real-time communication in game development!</p>
<p><a href='/odin/guides/unreal/' class="btn btn-primary">Download the Unreal SDK today</a></p>
`}),e.add({id:3706,href:"https://www.4players.io/blog/4players-releases-odin-unreal-sdk-v1.7.0/",title:"Introducing ODIN Unreal SDK 1.7.0: A Leap Forward in Real-Time Communication",section:"4Players Blog",description:"Discover the latest advancements in ODIN Unreal SDK with version 1.7.0, featuring input volume adjustment for capture media and critical improvements.",content:`<p>Hello ODIN Community!</p>
<p>We are excited to announce the release of ODIN Unreal SDK 1.7.0, marking a significant step forward in our commitment to
providing the best real-time communication solutions. This release builds upon our previous updates in the 1.6.x branch,
bringing new features and critical improvements. Let&rsquo;s take a look at the journey from 1.6.1 to our latest 1.7.0 update:</p>
<p><strong>1.6.1 &amp; 1.6.2: Core SDK Updates and Stability Enhancements</strong></p>
<ul>
<li><strong>Core SDK Progression:</strong> Both 1.6.1 and 1.6.2 versions focused on updating the core SDK, enhancing overall
performance and stability. Detailed insights can be
found <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.1">here for 1.6.1</a>
and <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.2">here for 1.6.2</a>.</li>
<li><strong>1.6.2 Specific Improvements:</strong>
<ul>
<li>Resolved build issues related to missing includes in Unreal Engine 5.3.</li>
<li>Addressed a bug causing crashes with invalid reference handling during <code>MediaRemoved</code> events.</li>
<li>Fixed potential crashes during seamless travel, ensuring smoother transitions and reliability.</li>
</ul>
</li>
</ul>
<p><strong>1.6.3: Direct API Access and Bug Fixes</strong></p>
<ul>
<li><strong>Enhanced API Functionality:</strong> Updated the API to allow direct access to the internal media sound generator, offering
more control and flexibility.</li>
<li><strong>Audio Capture Optimization:</strong> Fixed a bug where <code>UAudioCapture</code> was initialized with an invalid sample rate or
channel count, ensuring more accurate audio processing.</li>
</ul>
<p><strong>1.7.0: A New Milestone with Enhanced Audio Control</strong></p>
<ul>
<li><strong>Input Volume Adjustment:</strong> The highlight of version 1.7.0 is the addition of input volume adjustment functionality
for capture media. This feature allows developers to fine-tune audio input levels, providing better control over the
user experience in real-time communication scenarios.</li>
</ul>
<p><strong>Moving Forward Together</strong></p>
<p>As we continue to evolve the ODIN Unreal SDK, we remain dedicated to enhancing your development experience. These
updates reflect our commitment to addressing community feedback and advancing our technology.</p>
<p>We encourage you to explore these new updates and share your experiences. Your feedback is instrumental in guiding our
future developments.</p>
<p>Thank you for being a part of our journey. Here&rsquo;s to many more milestones with ODIN!</p>
<p><a href='/odin/guides/unreal/' class="btn btn-primary">Download the Unreal SDK today</a></p>
`}),e.add({id:3707,href:"https://www.4players.io/blog/introducing-odin-voice-unreal-sdk-1.6.1/",title:"Introducing Unreal SDK 1.6.1: New features, many bugfixes, some small API changes",section:"4Players Blog",description:"We are happy to announce the latest update to our Unreal SDK. It has new features along with many bugfixes and improvements, but also some small API changes.",content:`<h1 id="introduction">Introduction</h1>
<p>We are happy to announce the release of our Unreal SDK 1.6.1. This version brings new features and bugfixes, but also some small API changes.</p>
<h2 id="whats-new-in-unreal-sdk-_161_-compared-to-_156_-">What&rsquo;s new in Unreal SDK <em>1.6.1</em> compared to <em>1.5.6</em> ?</h2>
<h3 id="general">General</h3>
<ul>
<li>The Core SDK has been updated to version 1.6.1.</li>
</ul>
<h3 id="new-features">New Features</h3>
<ul>
<li>Added <strong>Pause Playback Media</strong> to instruct the server to pause the specified media stream, ceasing the reception of data</li>
<li>Added <strong>Resume Playback Media</strong> to instruct the server to resume the specified media stream, re-initiating the reception of data</li>
<li>Added <strong>Get Output Media Peer ID</strong></li>
<li>Added <strong>Set Room APM Stream Delay</strong> for scenarios where audio output and input are not synchronized to ensure that the echo canceller can align both streams</li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li>Updated <strong>Join Room</strong> and <strong>Update Peer Position</strong> to support 3D coordinates</li>
<li>Removed <strong>Update Room User Data</strong> (use RoomUpdate RPC on an ODIN gateway instead)</li>
</ul>
<h3 id="bugfixes--improvements">Bugfixes / Improvements</h3>
<ul>
<li>Fixed build issues and deprecation warnings with Unreal Engine 5.3</li>
<li>Fixed a potential crash when switching capture devices</li>
<li>Added functions to allow listening to audio buffer changes in OdinMediaSoundGenerator</li>
<li>Update default build settings for compatibility with engine versions 4.24 or later</li>
<li>Updated include path in OdinMediaSoundGenerator</li>
<li>Fixed an issue where stereo output interfered with the functioning of echo cancellation</li>
<li>Updated initial APM settings
<ul>
<li>Enabled Voice Activity Detection</li>
<li>Enabled Noise Suppression</li>
<li>Enabled Gain Controller</li>
</ul>
</li>
<li>Updated static library format on iOS and macOS for Unreal Engine Marketplace compliance</li>
<li>Fixed a bug where capture device selection always picked the default device</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>The Unreal SDK 1.6.1 brings convenience and bandwidth saving features along with many bugfixes and improvements. Upgrade to Unreal SDK 1.6.1 today and benefit from the new
improvements in your projects. We look forward to your feedback and to continually refining our
SDKs for your needs.</p>
<ul>
<li><a href="https://github.com/4Players/odin-sdk-unreal/releases/tag/v1.6.1">Download Odin Voice SDK 1.6.1</a></li>
<li><a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">ODIN SDK @ Unreal Marketplace</a> (update available soon!)</li>
<li><a href="https://4np.de/discord">Join our Discord</a></li>
<li><a href="/odin/sdk/unreal/">Read the Documentation</a></li>
</ul>
`}),e.add({id:3708,href:"https://www.4players.io/blog/4players-releases-odin-unreal-sdk-v1.6.0/",title:"Unveiling New Enhancements: ODIN Unreal SDK Update from 1.5.6 to 1.6.0",section:"4Players Blog",description:"Explore the latest updates in ODIN Unreal SDK 1.6.0, featuring advanced media stream control, enhanced audio processing, and full compatibility with Unreal Engine 5.3",content:`<p>Greetings, ODIN Developers!</p>
<p>We are excited to share the latest updates to our ODIN Unreal SDK, covering the advancements from version 1.5.6 to the
newly released 1.6.0. This update marks significant improvements and new features that will enhance your development
experience. Let&rsquo;s dive into the details:</p>
<p><strong>1.5.7: Streamlined Compliance and Device Selection</strong></p>
<ul>
<li><strong>Browser Clients Update:</strong> It&rsquo;s important to update your browser clients to version 0.15.0 or later of
the <a href="https://www.npmjs.com/package/@4players/odin">@4players/odin</a> package.</li>
<li><strong>Core SDK Update:</strong> Upgraded to version 1.5.7. Check
the <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.5.7">details here</a>.</li>
<li><strong>iOS and macOS Enhancements:</strong> We&rsquo;ve updated the static library format for better compliance with Unreal Engine
Marketplace standards.</li>
<li><strong>Capture Device Selection Fix:</strong> Resolved an issue to ensure the correct capture device is selected, rather than
defaulting to the system&rsquo;s choice.</li>
</ul>
<p><strong>1.5.8: Advanced Audio Processing and Echo Cancellation</strong></p>
<ul>
<li><strong>Core SDK Update:</strong> Progressed to version 1.5.8. Full details are
available <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.5.8">here</a>.</li>
<li><strong>New Features:</strong>
<ul>
<li><code>Set Room APM Stream Delay</code>: This feature assists in syncing audio output and input, vital for effective echo
cancellation.</li>
</ul>
</li>
<li><strong>Stereo Output and Echo Cancellation:</strong> Fixed a crucial issue where stereo output was impacting echo cancellation.</li>
<li><strong>APM Settings Update:</strong> We&rsquo;ve enabled Voice Activity Detection, Noise Suppression, and Gain Controller for optimized
audio processing.</li>
</ul>
<p><strong>1.5.9: Audio Buffer Enhancements and Engine Compatibility</strong></p>
<ul>
<li><strong>OdinMediaSoundGenerator Updates:</strong> Added functions for monitoring audio buffer changes and updated include paths for
improved usability.</li>
<li><strong>Engine Compatibility:</strong> Ensured default build settings are compatible with Unreal Engine versions 4.24 and later.</li>
</ul>
<p><strong>1.6.0: Pioneering Media Stream Control and API Enhancements</strong></p>
<ul>
<li><strong>Server Requirements:</strong> This update necessitates ODIN server version 1.3.0 or newer. Cloud-hosted servers are updated
automatically.</li>
<li><strong>Core SDK Update:</strong> Advanced to version 1.6.0. Full release notes can be
found <a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.0">here</a>.</li>
<li><strong>New Features:</strong>
<ul>
<li><code>Pause Playback Media</code> &amp; <code>Resume Playback Media</code>: These commands allow for precise control over media stream
reception.</li>
<li><code>Get Output Media Peer ID</code>: A new addition for enhanced media stream management.</li>
</ul>
</li>
<li><strong>API Updates:</strong>
<ul>
<li><code>Join Room</code> and <code>Update Peer Position</code> now support 3D coordinates.</li>
<li><code>Update Room User Data</code> has been removed in favor of
the <a href="https://github.com/4Players/odin-gateway#roomupdate"><code>RoomUpdate</code></a> RPC.</li>
</ul>
</li>
<li><strong>Compatibility and Stability Improvements:</strong> Fixed build issues and addressed deprecation warnings with Unreal Engine
5.3. Also resolved a potential crash related to capture device switching.</li>
</ul>
<p><strong>Join Us in This Exciting Journey</strong></p>
<p>These updates represent our commitment to providing you with a robust and efficient development environment. We
encourage you to explore these new features and improvements. Your feedback is invaluable in our quest for continuous
enhancement.</p>
<p>Stay tuned for more updates, and happy developing with ODIN!</p>
<p><a href='/odin/guides/unreal/' class="btn btn-primary">Download the Unreal SDK today</a></p>
`}),e.add({id:3709,href:"https://www.4players.io/blog/introducing-odin-voice-unreal-sdk-1.5.6/",title:"Introducing Unreal SDK 1.5.6: Expanding iOS Support and Enhanced Stability",section:"4Players Blog",description:"We're proud to announce the latest update to our Unreal SDK, including iOS support, new features, and improved system stability.",content:`<h1 id="introduction">Introduction</h1>
<p>We are thrilled to announce the release of our Unreal SDK 1.5.6. This version brings robust support for iOS, various new
features, significant improvements in system stability, and compatibility for upcoming Unreal Engine 5.3 releases.</p>
<h2 id="whats-new-in-unreal-sdk-156">What&rsquo;s New in Unreal SDK 1.5.6?</h2>
<h3 id="general">General</h3>
<ul>
<li>The Core SDK has been updated to version 1.5.5.</li>
<li>We&rsquo;ve now switched to static linking on iOS and macOS, making your development process more streamlined.</li>
</ul>
<h3 id="new-features">New Features</h3>
<ul>
<li><strong>iOS Support</strong>: We have expanded our platform reach to include iOS, enabling more users to experience high-quality
voice communication.</li>
<li><strong>Reset Function</strong>: The new Reset function resets media handles on ODIN synth components, offering greater control
over media handling.</li>
<li><strong>Room User Data Changed Event</strong>: The SDK now broadcasts a &lsquo;Room User Data Changed&rsquo; event, providing real-time
information about changes in user data.</li>
<li><strong>Support for Unreal Engine 5.3</strong>: We are ensuring your projects stay ahead of the curve with support for the
upcoming Unreal Engine 5.3 releases.</li>
</ul>
<h3 id="bugfixes--improvements">Bugfixes / Improvements</h3>
<ul>
<li><strong>Unreal Engine Build Issues</strong>: Fixed potential build issues with Unreal Engine 5.1 and later.</li>
<li><strong>Garbage Collection of Handles</strong>: Resolved an issue where handles were unexpectedly garbage collected, resulting in
closed connections.</li>
<li><strong>Invalidated Structures Access</strong>: Fixed issues causing application crashes due to accessing pointers linked to
invalidated structures.</li>
<li><strong>Asynchronous Access Violations</strong>: Resolved crashes resulting from asynchronous access violations.</li>
<li><strong>Game-Thread Synchronization</strong>: Enhanced system stability by wrapping each event with game-thread synchronization
tasks.</li>
<li><strong>Event Handling Update</strong>: Event handling now uses task-launching on a per-event basis, offering more efficient
processing.</li>
<li><strong>AVAudioSession Configuration</strong>: To mitigate potential crash issues on iOS, we&rsquo;ve ensured the proper
configuration of <code>AVAudioSession</code>.</li>
<li><strong>Linker Issues</strong>: Fixed linker issues caused by the use of a newer clang version in Unreal Engine 5 projects.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>The Unreal SDK 1.5.6 brings significant enhancements and expanded platform support, ensuring a more robust voice
communication experience for users across various platforms. Upgrade to Unreal SDK 1.5.6 today and benefit from the new
features and stability improvements in your projects. We look forward to your feedback and to continually refining our
SDKs for your needs.</p>
<ul>
<li><a href="https://github.com/4Players/odin-sdk-unreal/releases/tag/v1.5.6">Download Odin Voice SDK 1.5.6</a></li>
<li><a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">ODIN SDK @ Unreal Marketplace</a></li>
<li><a href="https://4np.de/discord">Join our Discord</a></li>
<li><a href="/odin/sdk/unreal/">Read the Documentation</a></li>
</ul>
`}),e.add({id:3710,href:"https://www.4players.io/blog/4players-releases-odin-unity-sdk-v1.5.5/",title:"Announcing Unity SDK 1.5.5: Enhanced Audio Performance and Android Support",section:"4Players Blog",description:"Introducing the latest update to our Unity SDK, featuring new features, improved audio handling, and Android ARMv7a support.",content:`<h1 id="introduction">Introduction</h1>
<p>We are excited to announce the release of our Unity SDK 1.5.5. This new update brings improvements to the audio
handling, bug fixes, and support for Android on ARMv7a devices, ensuring a seamless and high-quality voice communication
experience across multiple platforms.</p>
<h2 id="whats-new-in-unity-sdk-155">What&rsquo;s New in Unity SDK 1.5.5?</h2>
<h3 id="general-update">General Update</h3>
<ul>
<li>The Core SDK has been updated to version 1.5.5. For more detailed information on the core updates, please refer to
the Core SDK release notes.</li>
</ul>
<h3 id="new-features">New Features</h3>
<ul>
<li>Android ARMv7a Support: We&rsquo;ve broadened our Android device support with the inclusion of ARMv7a, expanding the
reach of your voice communication capabilities to even more users.</li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li><strong>SilenceCapturedAudio Addition</strong>: We&rsquo;ve introduced the <code>SilenceCapturedAudio</code> method on the audio sender, giving you
more control over the audio capture process.</li>
<li><strong>Deprecated Properties Removal</strong>: To streamline our API, we&rsquo;ve removed the <code>IsPaused</code> and <code>IsMuted</code> deprecated properties
from media streams.</li>
</ul>
<h3 id="bugfixes-and-improvements">Bugfixes and Improvements</h3>
<ul>
<li><strong>Device Reset Fallback</strong>: To ensure smoother recovery, we&rsquo;ve added a fallback to the default device during reset.</li>
<li><strong>OnMediaActiveStateChanged Event Update</strong>: We&rsquo;ve fixed the update for this event for input streams, ensuring accurate
status updates.</li>
<li><strong>Echo Cancellation</strong>: Echo cancellation has been improved for enhanced audio clarity during conversations.</li>
<li><strong>PlaybackStream Connection Reset</strong>: We&rsquo;ve ensured that the media handle resets upon connecting to the <code>PlaybackStream</code>
for a clean state.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>Our Unity SDK 1.5.5 brings significant improvements to audio handling and broadens device support, ensuring a more
robust and inclusive voice communication experience for users across various platforms. We are committed to continuous
refinement of our SDKs and look forward to hearing your feedback.</p>
<p>Upgrade to Unity SDK 1.5.5 today and unlock enhanced voice communication features in your projects!</p>
<p><a href='/odin/guides/unity/' class="btn btn-primary">Get Started with Unity today</a></p>
`}),e.add({id:3711,href:"https://www.4players.io/blog/we-are-hiring-june-2023/",title:"We're Hiring: Join Our Team as a Senior Sales Manager for Videogame Services!",section:"4Players Blog",description:"Join 4Players as a Senior Sales Manager for Videogame Services. Be part of a leading gaming company, shaping the future of gaming experiences. Apply now!",content:`<p>Hello, 4Players community!</p>
<p>We are thrilled to announce an exciting opportunity to join our team. We are currently looking for a dedicated and experienced Senior Sales Manager for Videogame Services to support our growing team and market our high-quality products and services in the B2B sector.</p>
<p><strong>About 4Players</strong></p>
<p>4Players is a leading company in the gaming industry, developing social and immersive gaming experiences for over 20 years. As pioneers in the industry, we have shaped the evolution of gaming and now offer state-of-the-art, metaverse-ready solutions for developers and gamers. Our main product, ODIN, is a top-tier, cross-platform voice chat tool that seamlessly integrates into game engines like Unity and Unreal. We also provide high-quality hosting services adaptable to all requirements and budgets.</p>
<p><strong>Your Role</strong></p>
<p>As a Senior Sales Manager, you will be responsible for:</p>
<ul>
<li>Establishing and maintaining contact with B2B companies in the video game industry and companies interested in innovative and digital solutions from other industries.</li>
<li>Acquiring new customers and partners for existing and future 4Players products and services.</li>
<li>Building and maintaining B2B Key Accounts.</li>
<li>Managing contacts and customers in our CRM system.</li>
<li>Networking and relationship management with relevant customers and strategic partners.</li>
<li>Market and competition observation.</li>
<li>Supporting the further development of business models, market launch strategies, and action plans in collaboration with local innovation or project management teams.</li>
<li>Budget planning and responsibility.</li>
</ul>
<p><strong>Your Profile</strong></p>
<p>We are looking for someone with:</p>
<ul>
<li>A successful commercial education or degree in sales, marketing, economics, or a similar field.</li>
<li>At least 2-3 years of professional experience in sales, preferably in the gaming, software, or technology industry.</li>
<li>Strong customer and service orientation, negotiation skills, and persuasiveness.</li>
<li>Willingness to travel for customer visits, trade fairs, and events.</li>
<li>Basic knowledge of CRM systems and common office programs.</li>
<li>Organizational talent, able to work on several projects simultaneously.</li>
<li>Proficiency in German and English.</li>
<li>A passion for gaming.</li>
</ul>
<p><strong>What We Offer</strong></p>
<ul>
<li>An unlimited permanent position.</li>
<li>A dynamic and exciting working environment.</li>
<li>Flat hierarchies in a committed and creative team.</li>
<li>Work in the world&rsquo;s largest entertainment industry (PC and video games).</li>
<li>Responsibility for your own projects.</li>
<li>Flexible working hours with home office option in a hybrid model.</li>
<li>30 days of vacation.</li>
<li>Regular team events.</li>
<li>Lots of fun and joy at work.</li>
<li>Sweets and snacks for everyone in the office.</li>
</ul>
<p>If you are passionate about gaming and technology and want to be part of an innovative company shaping the next generation of gaming experiences, we invite you to join our dynamic and future-oriented company.</p>
<p>We look forward to your application!</p>
<p><a href='https://4players.recruitee.com/o/senior-sales-manager-vertriebsmitarbeiter-videogamesservices-mwd-hamburg/c/new' target='' class="btn btn-primary">Apply Now</a></p>
`}),e.add({id:3713,href:"https://www.4players.io/blog/introducing-the-odin-nodejs-sdk-unlock-server-side-capabilities-for-voice-communication/",title:"Introducing the ODIN Node.js SDK: Unlock Server-Side Capabilities for Voice Communication",section:"4Players Blog",description:"Discover our new Node.js SDK, enabling advanced server-side functionality like voice recording, transcription, and building bots for immersive in-game experiences",content:`<h1 id="introduction">Introduction</h1>
<p>We are proud to announce the availability of our native Node.js SDK for ODIN, expanding the possibilities for
server-side voice communication in your projects. This powerful new SDK allows developers to access advanced features
like recording and transcribing voice per user, building bots that interact with other users through text chat or voice,
and more. By leveraging the native Node.js bindings for the ODIN SDK, you can unlock the full potential of voice
communication in your games and applications.</p>
<h2 id="odin-nodejs-sdk-overview">ODIN Node.js SDK Overview</h2>
<p>The ODIN Node.js SDK is based on the ODIN Native SDK and wraps the C++ code into a Node.js module. While we offer a
JavaScript/TypeScript SDK with fallback code for WebRTC that can be used in browsers and Node.js, it is not as
performant and has some limitations. The native Node.js SDK addresses these issues and provides additional
functionality, making it the perfect choice for bots and other advanced use cases.</p>
<h3 id="key-differences-between-odin-nodejs-sdk-and-web-sdk">Key Differences between ODIN Node.js SDK and Web SDK</h3>
<p>While the API for the Node.js SDK is designed to be as similar as possible to the Web SDK, there are some differences:</p>
<ul>
<li>The Node.js SDK allows you to access raw audio data from the ODIN server, enabling you to record audio or send audio
into a room.</li>
<li>The Node.js SDK is optimized for server-side use cases, while the Web SDK is tailored for browser-based applications.</li>
</ul>
<h3 id="prerequisites-and-dependencies">Prerequisites and Dependencies</h3>
<p>To use the ODIN Node.js SDK, you will need a C++ compiler installed. For macOS, install XCode and the command line
tools; for Linux, install GCC. More information on this can be found in the node-gyp documentation.</p>
<p>The ODIN Node.js SDK depends on the native ODIN SDK. Some precompiled libraries for typical platforms (macOS, Windows,
and Linux) are provided in the libs folder.</p>
<h2 id="usage-examples">Usage Examples</h2>
<p>We have created two simple usage examples that you can find in the <code>tests</code> folder of the NPM package.</p>
<h3 id="audio-recording-and-transcription">Audio Recording and Transcription</h3>
<p>We provide an example that demonstrates how to use the ODIN Node.js SDK to record audio from other users and send it to
OpenAI for transcription using OpenAIs whisper model. It also showcases basic bot functionality, such as sending a
message to the chat.</p>
<h3 id="sending-music">Sending Music</h3>
<p>This example demonstrates how to use the ODIN Node.js SDK to send music to other users in a room. It loads a sample MP3
file, decodes it, and sends it to the ODIN server.</p>
<p>Detailed instructions on how to run the music sending example can be found in the <code>tests/sending-audio</code> folder of
the NPM package.</p>
<h2 id="conclusion">Conclusion</h2>
<p>The ODIN Node.js SDK opens up a world of possibilities for server-side voice communication, providing advanced
functionality for developers to create immersive and interactive experiences. With the native Node.js bindings, you can
harness the power of the ODIN SDK and bring your projects to new heights.</p>
<p>Get started with the ODIN Node.js SDK today and explore the incredible potential of server-side voice communication in
your applications!</p>
<ul>
<li><a href="https://www.npmjs.com/package/@4players/odin-nodejs">ODIN Node.js SDK on NPM</a></li>
</ul>
`}),e.add({id:3714,href:"https://www.4players.io/blog/introducing-odin-voice-sdk-1.5.0-enhancing-3d-spatial-voice-communication-for-unreal-engine-games/",title:"Introducing ODIN Voice SDK 1.5.0: Enhancing 3D Spatial Voice Communication for Unreal Engine Games",section:"4Players Blog",description:"Discover our latest update with new features, Unreal Engine 5.2 support, and bugfixes to elevate your in-game voice communication experience",content:`<h1 id="introduction">Introduction</h1>
<p>We are excited to announce the release of ODIN Voice SDK 1.5.0, a significant update to our real-time voice SDK for
Unreal Engine-based games. This new version delivers enhanced 3D spatial voice communication, making it even easier for
developers to add immersive and realistic voice interactions in their games. With full blueprint support and a range of
new features and bugfixes, ODIN Voice SDK 1.5.0 promises to take in-game communication to the next level.</p>
<h2 id="whats-new-in-odin-voice-sdk-150">What&rsquo;s new in ODIN Voice SDK 1.5.0</h2>
<h3 id="general">General</h3>
<p>Our core SDK has been updated to version 1.5.0, incorporating a range of improvements and optimizations. For a detailed
breakdown of the changes, please refer to our official documentation.</p>
<h3 id="new-features">New Features</h3>
<ul>
<li>Unreal Engine 5.2 Support
We&rsquo;re proud to offer support for Unreal Engine 5.2, ensuring that developers can access the latest features,
optimizations, and capabilities of this powerful game engine.</li>
<li>Reverse Stream Processing for Echo Cancellation
To provide an even clearer communication experience, we&rsquo;ve added reverse stream processing for echo cancellation. This
feature uses the engine master submix to minimize echo and improve overall audio quality.</li>
<li><code>UOdinAudioCapture</code> Class for Capture Device Selection
With the addition of the UOdinAudioCapture class, developers can now enable users to choose their preferred audio
capture device, providing a more seamless and customizable experience.</li>
</ul>
<h3 id="bugfixes--improvements">Bugfixes / Improvements</h3>
<ul>
<li>Audio Attenuation Settings Fix
We&rsquo;ve fixed a bug where audio attenuation settings were not being applied correctly, ensuring that distance-based
audio adjustments work as intended.</li>
<li>Active Media Stream Objects Garbage Collection Fix
We&rsquo;ve addressed an issue where active media stream objects were being garbage collected, leading to unexpected
behavior. This fix ensures more stable and reliable voice communication.</li>
<li>Blueprint Only Builds on Linux Fix
Developers working on Linux can now rejoice as we&rsquo;ve resolved the issue with blueprint-only builds, making it
easier to develop and deploy projects across platforms.</li>
</ul>
<h2 id="conclusion">Conclusion</h2>
<p>ODIN Voice SDK 1.5.0 is a major milestone in our journey to provide the best possible 3D spatial voice communication for
Unreal Engine-based games. This update brings new features, performance improvements, and bugfixes that will help
developers create even more immersive and engaging in-game experiences.</p>
<p>We&rsquo;re committed to continuously improving and expanding our SDK, and we can&rsquo;t wait to see the incredible projects our
community will build using these new capabilities. Don&rsquo;t hesitate to share your feedback and experiences with us, as we
value your input in shaping the future of ODIN Voice SDK.</p>
<p>Get started with ODIN Voice SDK 1.5.0 today and elevate your in-game voice communication like never before!</p>
<ul>
<li><a href="https://github.com/4Players/odin-sdk-unreal/releases/tag/v1.5.0">Download ODIN Voice SDK 1.5.0</a></li>
<li><a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">ODIN SDK @ Unreal Marketplace</a></li>
<li><a href="https://4np.de/discord">Join our Discord</a></li>
<li><a href="/odin/sdk/unreal/">Read the Documentation</a></li>
</ul>
`}),e.add({id:3715,href:"https://www.4players.io/blog/introducing-web-sdk-0151-enhanced-cross-platform-interoperability-for-real-time-voice-communication/",title:"Introducing Web SDK 0.15.1",section:"4Players Blog",description:"Discover the latest update to our Web SDK, enabling seamless voice communication between web and native platforms with our latest native SDKs",content:`<h1 id="introduction">Introduction</h1>
<p>We are thrilled to announce the release of Web SDK 0.15.1, a crucial update that enhances cross-platform
interoperability with our latest native SDKs, starting with version 1.4.0 or later. This new version addresses important
bugfixes and introduces updated QoS metrics for compatibility, ensuring a seamless voice communication experience
between web and native platforms.</p>
<h2 id="whats-new-in-web-sdk-0151">What&rsquo;s new in Web SDK 0.15.1</h2>
<h3 id="bugfixes">Bugfixes</h3>
<p>Speech Detection Settings in VAD Processor: We&rsquo;ve fixed a bug where speech detection settings were not being applied
correctly in the Voice Activity Detection (VAD) processor. This fix ensures accurate speech detection and a better
overall voice communication experience.</p>
<h3 id="improvements">Improvements</h3>
<p>Updated QoS Metrics for Native Client Compatibility: In this update, we&rsquo;ve made changes to the Quality of Service (QoS)
metrics to ensure compatibility with native clients using version 1.4.0 or later. This improvement guarantees smooth
interoperability between web and native platforms, providing a consistent and high-quality voice communication
experience for all users.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Web SDK 0.15.1 is a significant step forward in ensuring seamless cross-platform voice communication, allowing
developers to create engaging and immersive experiences for users across web and native platforms. This update provides
important bugfixes and compatibility improvements, making it easier than ever to connect players and create
collaborative gaming experiences.</p>
<p>We are committed to continually refining and expanding our SDKs, and we look forward to seeing the innovative projects
our community will develop using these new features. Your feedback is invaluable to us, and we encourage you to share
your thoughts and experiences with our team.</p>
<p>Upgrade to Web SDK 0.15.1 today and unlock the full potential of cross-platform voice communication in your projects!</p>
<ul>
<li><a href="https://www.npmjs.com/package/@4players/odin">Install Odin Web SDK 0.15.1</a></li>
<li><a href="https://4np.de/discord">Join our Discord</a></li>
<li><a href="/odin/sdk/web/">Read the Documentation</a></li>
</ul>
`}),e.add({id:3716,href:"https://www.4players.io/blog/announcing-partnership-with-combat-waffle-studios/",title:"Announcing Partnership with Combat Waffle Studios",section:"4Players Blog",description:"ODIN supports voice chat in Ghosts of Tabor with 3D spatial audio, proximity chat, environmental effects and audio occlusion.",content:`<p>We are excited to announce our partnership with <a href="https://combatwaffle.com">Combat Waffle Studios Inc</a>, who will be launching their latest game - <a href="https://ghostsoftabor.com">Ghosts of Tabor</a> - on 20th March 2023. Ghosts of Tabor is a VR-only survival game that promises to set new standards for immersion, putting you in the heart of a first-person military shooter.</p>
<p>The game takes place on the island of Tabor, where players must explore, loot, and shoot their way through the environment to survive. With crystal clear voice chat, you can coordinate with your friends to overcome the challenges that lie ahead. And with ODIN&rsquo;s support, voice chat in Ghosts of Tabor will feature 3D spatial audio, proximity chat, environmental effects and audio occlusion, making the gameplay experience all the more immersive.</p>
<br />
<div style="position: relative; padding-bottom: 60%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/Lolq5yaIbWo" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>

<br />
<p>With its stunning graphics, realistic sound effects, and adrenaline-pumping gameplay, Ghosts of Tabor is sure to provide an unforgettable experience for gamers. So put on your VR headset and get ready for an adventure like no other. Combat Waffle Studios Inc has been working tirelessly to bring Ghosts of Tabor to life and we are proud to be partnering with them to provide our support. We believe that their innovative approach to VR gaming will be a game-changer in the industry and we look forward to seeing the impact that it will have.</p>
<p>As 4Players, we are committed to providing the best audio solutions for gaming with ODIN, so we are thrilled to be part of Ghosts of Tabor&rsquo;s launch. We can&rsquo;t wait to hear from the players about their experiences and how they fought their way through the island of Tabor.</p>
<p>In conclusion, if you&rsquo;re a fan of survival games, first-person shooters, and immersive VR experiences, you won&rsquo;t want to miss Ghosts of Tabor. Get ready to explore, loot, and shoot your way to survival, and don&rsquo;t forget to let us know how you fared!</p>
<p><a href='https://lnkd.in/eHum2cyV' target='_blank' class="btn btn-primary">Join the Ghosts of Tabor Discord Server</a></p>
`}),e.add({id:3717,href:"https://www.4players.io/blog/announcing-partnership-with-specpixel-entertainment/",title:"Announcing Partnership with SpecPixel Entertainment",section:"4Players Blog",description:"4Players partners up with game developer SpecPixel Entertainment to support their game New Citizen.",content:`<p>Today, we&rsquo;re thrilled to announce our exciting new partnership with <a href="https://www.specpixel.com">SpecPixel Entertainment</a>, in which we will be supporting their latest game - <a href="https://www.specpixel.com/games/new-citizen">New Citizen</a> - with our state-of-the-art ODIN in-game voice chat and high-performance servers from 4Netplayers!</p>
<p>New Citizen is the highly anticipated RPG multiplayer sim revival set to launch in 2023, and we can&rsquo;t wait for you to experience this immersive and exciting new world. Whether you choose to explore alone or join a community, you will have the freedom to decide your own path. Will you be a hero, defending your city against the forces of evil, or will you rise through the ranks of the criminal underworld to become a powerful leader? The possibilities are endless!</p>
<p>Our ODIN in-game voice chat and 4Netplayers servers are designed to enhance your multiplayer gameplay experience, providing you with seamless and immersive communication with other players in real-time. With our cutting-edge technology, you&rsquo;ll feel like you&rsquo;re truly a part of this thrilling new world.</p>
<p>Check out the latest trailer for New Citizen right here:</p>
<br />
<div style="position: relative; padding-bottom: 60%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/_PKeKQhMA6g" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>

<br />
<p>To stay up to date with all the latest news and updates on New Citizen, be sure to join their brand new Discord server. Don&rsquo;t miss out on the chance to experience the game in full immersion mode and become a part of this exciting new community. We&rsquo;re honored to be a part of this partnership and can&rsquo;t wait to see what the future holds!</p>
<p><a href='https://discord.com/invite/bpwDzZSFeE' target='_blank' class="btn btn-primary">Join the New Citizen Discord Server</a></p>
`}),e.add({id:3725,href:"https://www.4players.io/blog/visualizing-occlusion-in-unity/",title:"Visualizing occlusion in real-time in Unity",section:"4Players Blog",description:"We wanted to visualize our 3D audio occlusion system for real-time voice in a video. Here is what we came up with and how we implemented it in Unity.",content:`<p>As you may have noted, we have been at a lot of events recently, all around the world. Games Convention in Cologne
in August, Scottish Games Week, Megamigs in Montreal, and recently we were at the G-Star in South Korea. In all of
these conventions we had a booth and showcased our real-time voice SDK <a href="/odin/introduction/">ODIN</a>.
Users could enjoy one of our demos in real-time and talk to each other enjoying the 3D spatial audio.</p>
<p>But, it&rsquo;s 2022, and we still face the same issues and hurdles we faced 10 years ago when attending conventions: Bad
internet connection. Although we are able to run the whole ODIN stack on a laptop (i.e. the server and the client
running on the same machine without requirement of internet connection) the experience is not as great as you just
talk to someone standing next to you.</p>
<p>So, we decided to create a video to show-off what ODIN is all about and what 3D spatial audio is. It&rsquo;s easier to run
a video on a booth and having on-demand demos after the show rather than trying to do everything in a loud,
internet-less, crowded environment that is a convention.</p>
<p>Here is the video we came up with:</p>
<div style="position: relative; padding-bottom: 77%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube-nocookie.com/embed/qgbENi2_M28" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video"></iframe>
</div>

<p>A very important part of ODIN is its effortless 3D spatial audio system with audio occlusion. So, what does that mean:</p>
<ul>
<li>If you are standing next to someone, you hear them loud and clear.</li>
<li>If you are standing behind someone, you hear them less loud.</li>
<li>If you are standing behind a wall, you hear them even less loud or you don&rsquo;t hear them at all, depending on
thickness and material of the wall.</li>
<li>If someone stands right next to you, you&rsquo;ll hear them on your right ear</li>
<li>If someone walks away volume decreases with the distance until you don&rsquo;t hear them anymore.</li>
</ul>
<p>So, it&rsquo;s basically a simulation of voice chatting in the real world. You can hear people around you as you would in
real world. Of course, however with all the benefits of a digital, software driving simulation. You can work out the
benefits and reduce the caveats.</p>
<p>We believe, that especially in experiences with a lot of people enjoying it at the same time. In a
separate voice-chat application, you need to manage channels, people need to be in the right channels, they should
be muted when not talking, etc. With ODIN, you don&rsquo;t need to worry about any of that. You just join a room, and you
can literally talk to anyone by just coming close. You can build separate spaces using our audio occlusion system to
make sure they can have one-on-one meetings that are private. Of course, you don&rsquo;t need to use the 3D spatial audio.
You can also use radio like voice chat, where you can talk to everyone in the room at the same time always in full
volume and without occlusion. It&rsquo;s up to you, but that 3D spatial audio system sometimes needs some explanation,
like I did in the last paragraphs. The video should just show that without many words.</p>
<h2 id="preparing-the-video">Preparing the video</h2>
<p>When creating a video, it&rsquo;s always important to have a good idea of the goal. In this case, we had these goals:</p>
<ul>
<li>Visualize audio volume fall-off (i.e. full volume close and silent &ldquo;far&rdquo; away)</li>
<li>Visualizing the nature of voice</li>
<li>Visualize audio occlusion</li>
<li>Make users hear the voice of the person simulated in the video</li>
</ul>
<p>We came up with this idea to achieve these goals:</p>
<ul>
<li>We have a simple scene in a Tron-style like look &amp; feel</li>
<li>Our player (i.e. the player that &ldquo;simulates&rdquo; the viewer of the video) is located at the bottom center of the screen.</li>
<li>Another player is running around and talking at the same time</li>
<li>A few cubes are distributed around our scene acting as walls dampening the sound if between the player and the
listener.</li>
<li>We try to visualize the audio and audio effects</li>
</ul>
<p>We quickly decided to build the video in Unity as it gives as the possibility to provide an interactive demo via
WebGL, and we don&rsquo;t need to fake audio occlusion by putting tons of audio volume key frames in a video editor like
Final Cut of Adobe Premiere. Instead, we just fired up Unity and our <a href="/odin/sdk/unity/">ODIN Unity SDK</a>
and just recorded a real-time editor session using the Unity Recorder. You can experience the demo in real-time by
downloading the source-code from Github.</p>
<p>We also used our Audio Occlusion system that is part of our <a href="https://github.com/4Players/odin-unity-demo#audio">Unity demo</a>.
This will be bundled in the next version together with the Unity SDK. I had to copy a few files from the demo into
my own project to make Audio Occlusion work. We attached the <code>OcclusionAudioListener</code> script to the listener player
at the bottom of the screen and attached <code>AudioObstacle</code> script to the cubes with various different
<code>AudioEffectDefition</code> assets like concrete, and fully silence.</p>
<p>As we wanted to create a self-running demo that we could record we used the character of Unitys Third Party
Controller demo and created a simple waypoint system feeding the direction to the next waypoint as &ldquo;joystick&rdquo; inputs.
The waypoints have a small box collider as trigger. Whenever our character gets triggered we select the next
waypoint and navigate to that.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>One important thing to remember. In Unity you have the <code>Audio Listener</code> component that is typically attached to the
main camera. In our scene, the main camera is located way above our third person character. So, we need to attach
the <code>Audio Listener</code> to the player standing in the bottom center of the screen as he should be listening to the
voice in the scene, not the camera.</p>
</div>
</div>

<h2 id="visualizing-audio-volume-fall-off">Visualizing audio volume fall-off</h2>
<p>One of the key principles of 3D audio is that there is a relation between the distance and the volume, i.e. if you
are far away from the audio source you here it less loud. Unity has a &ldquo;fall-off&rdquo; setting that you lets you adjust
in detail how this works. Here is an image of the settings of the <code>Audio Source</code>:</p>
<figure style="max-width: 400px"><a href="/images/blog/visualizing-occlusion-unity-audio-source.jpg" title="Click to enlarge" data-lity><img src="/images/blog/visualizing-occlusion-unity-audio-source.jpg" width="400"/></a>
</figure>
<p>What that means is, that if you are close the audio source plays with full volume, linearly decreases to 0% volume
in 5 units. It&rsquo;s basically the same as a point light that attenuates over distance until it has no effect.</p>
<p>To do that, we created these game objects within Unity:</p>
<ul>
<li>Player (center of the player)
<ul>
<li>Plane (with our audio visualization shader and materials)</li>
</ul>
</li>
</ul>
<p>We also created a transparent Shader Graph shader and a material. The new shader and material will be used to visualize
the audio volume of the simulated player, and it&rsquo;s attached to the plane.</p>
<p>The plane has a standard scale of <code>1,1,1</code> and therefore is <code>10 units long</code> and <code>10 units</code> wide and thus extends <code>5 units</code>
from center. As you may have noticed, we set the audio falloff to <code>5 units</code>, so that&rsquo;s a good fit. Our plane is large
enough to visualize the audio volume fall-off.</p>
<p>This is the simple Shader Graph for this shader and what it looks like:</p>
<figure style="max-width: 700px"><a href="/images/blog/simple-audio-occlusion-shader.jpg" title="Click to enlarge" data-lity><img src="/images/blog/simple-audio-occlusion-shader.jpg" width="700"/></a>
</figure>
<p>The shader is very simple. It just takes the distance from the center of the plane and maps it to a color. What we
do here is taking the point in object space. We can do that, as the plane is not scaled, and we don&rsquo;t plan to rotate
it. However, of course you could also take the sample point in world space and subtract it from the planes center.
This would make things more complicated and for our needs that works great. Once we have the distance to the planes
center which is the radius of the audio circle we can multiply it through the radius - which we provide via material
variable <code>radius</code> which we set to 5 to be corresponding with the planes width and the fall-off settings of the
<code>Audio Source</code>. Calculating the <code>On Minus</code> of that value we have a nice alpha value which is <code>1.0</code> in
the center of the plane and linearly falls-off to <code>0.0</code> at the radius of the audio circle which is also the outer edge
of the plane.</p>
<h2 id="visualizing-the-nature-of-voice">Visualizing the nature of voice</h2>
<p>Still a little boring. We want to make sure that users watching the video immediately get the idea of the video,
showing audio waves and not a nice implementation of a point light or a &ldquo;fog of war&rdquo;. I wanted to simulate audio waves
moving like waves from the center of the circle to the outside. First, I experimented with a sinus wave and a time
variable. That did look quite ok, but it has been missing the dynamics of voice which has ups and downs infrequently
as shown in this waveform of a piece of voice saying something:</p>
<figure><img src="/images/blog/soundwaves.jpg"/>
</figure>
<p>As you notice, the waveform looks a lot like a mirrored heightmap and this is exactly what we need. What we do is this:</p>
<ul>
<li>Sample audio in real-time and create a heightmap of the audio. Loud pieces will be white, while silent pieces will
be black.</li>
<li>Feed that shader into the shader to visualize the audio ripples.</li>
</ul>
<p>How do we do that:</p>
<ul>
<li>Create a texture of <code>128x1</code> and make it writable.</li>
<li>Create an array of floats of size <code>128</code> that will hold the heightmap (you&rsquo;ll see later why)</li>
<li>Every few frames
<ul>
<li>move the texture by one pixel to the right - this will create the impression of waves moving to
the outside</li>
<li>sample the current audio loundness in the range of <code>0.0</code> to <code>1.0</code> and write it to the texture at
position <code>0,0</code></li>
</ul>
</li>
</ul>
<p>So, why creating an array of floats which is duplicate of what we already have in the texture? The reason is simple:
Because as we want to move the pixels by one in the memory it would require us to read from the texture and moving
this array by one, writing it back. I thought that reading from textures is slow, reading from memory is fast. So we
build the texture in memory and just write the pixels to the texture.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>I also experienced with changing UVs on the texture rather that moving pixels. While this is getting a bit smoother
animations, in the end it&rsquo;s more complicated especially at the texture bounds that I rather concentrated on getting
the video done rather than optimizing the shader. Perhaps that is good exercise for you.</p>
</div>
</div>

<p>Here are a few snippets:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                AudioVisualizer script
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-C#">public class AudioVisualizer : MonoBehaviour
{
    public AudioVisualizerPlane plane;
    public AudioVisualizerRenderOcclusion occlusionRenderer;
    public bool sampleAudio = true;
    public float loudnessScale = 10.0f;
    public int sampleDataLength = 100;
    public AudioSource audioSource;
    public Transform followObject;
    
    public Texture2D voiceTexture;
    private Color[] loundness = new Color[128];
    private float nextUpdate = 1.0f;
    private float[] clipSampleData;

    private void Awake()
    {
        if (!voiceTexture)
        {
            voiceTexture = new Texture2D(128, 1, TextureFormat.RGB24, false);
        }
        
        for (var i = 0; i &lt; 128; i++)
        {
            loundness[i] = Color.black;
        }

        if (!audioSource)
        {
            audioSource = GetComponent&lt;AudioSource&gt;();

            if (!audioSource)
            {
                Debug.LogError(&quot;Voice Texture needs to have an AudioSource assigned or must be part of the Component&quot;);
            }
        }
        
        clipSampleData = new float[sampleDataLength];
    }

    private void Start()
    {
        if (!plane)
        {
            plane = GetComponentInChildren&lt;AudioVisualizerPlane&gt;();
            if (!plane)
            {
                Debug.LogError(&quot;You need to create a plane as children and assign the AudioVisualizerPlane component to it&quot;);
            }

            if (sampleAudio)
            {
                var renderer = plane.GetComponent&lt;Renderer&gt;();
                renderer.material.SetTexture(&quot;_RippleTexture&quot;, voiceTexture);                
            }
        }
        
        UpdateTexture();
    }

    private void UpdateTexture()
    {
        voiceTexture.SetPixels(0, 0, voiceTexture.width, 1, loundness);
        voiceTexture.Apply();
    }

    private void Update()
    {
        if (followObject)
        {
            transform.position = followObject.transform.position;
        }
        
        if (!sampleAudio) return;
        
        //if (Math.Truncate(Time.time) % 500 != 0) return; 
        if(Time.time&gt;=nextUpdate){
            //Debug.Log(Time.time+&quot;&gt;=&quot;+nextUpdate);
            // Change the next update (current second+1)
            nextUpdate=Time.time+0.025f;
            // Call your fonction
            SampleAudio();
        }
    }

    private void SampleAudio()
    {
        // Move audio out
        for (var i = 127; i &gt;= 1; i--)
        {
            loundness[i] = loundness[i-1];
        }

        var loudness = SampleLoudness() * loudnessScale;
        //float loudness = Random.Range(0.0f, 1.0f);
        loundness[0] = new Color(loudness,loudness, loudness);
        
        UpdateTexture();
    }

    private float SampleLoudness()
    {
        audioSource.clip.GetData(clipSampleData, audioSource.timeSamples); //I read 1024 samples, which is about 80 ms on a 44khz stereo clip, beginning at the current sample position of the clip.
        var clipLoudness = 0f;
        foreach (var sample in clipSampleData) {
            clipLoudness += Mathf.Abs(sample);
        }
        clipLoudness /= sampleDataLength; //clipLoudness is what you are looking for
        
        return clipLoudness;
    }
}
</code></pre>
</div>
</div>

<p>Sampling audio gives you quite small float values. I used a scale of <code>10.0f</code> to make it more visible. As we create
the average audio volume of all samples we need to make sure that the number of samples is too large as the whole
thing blurs too much. A good value for this visualizing has been <code>100</code> samples.</p>
<p>This is what the texture looks like:</p>
<figure><img src="/images/blog/ripple-texture.jpg"/>
</figure>
<p>Looks great, doesn&rsquo;t it? And the ripples move from left to right. We feed it into our shader. Back in Shader Graph
we need to make use of that texture:</p>
<ul>
<li>We already have a value from <code>0.0</code> to <code>1.0</code> indicating the radius ratio from the center to the outside, meaning
that we are close to the center at <code>0.0</code> and close to the outside at <code>1.0</code>.</li>
<li>Remember that ripple texture with the hightmap moving from left to write. Well, our radius ratio is the x coordinate
of the texture.</li>
<li>So, this is basically the <code>u</code> of the texture sample vector. We just feed that value in the texture sampler and
multiple that value (which is from <code>0.0</code> to <code>1.0</code>) with a color of the ripples.</li>
<li>We put that value in the <code>emission</code> slot of our fragment shader</li>
</ul>
<p>That&rsquo;s it. Looks great, doesn&rsquo;t it:</p>
<figure style="max-width: 700px"><a href="/images/blog/visualize-audio-volume-ripples.jpg" title="Click to enlarge" data-lity><img src="/images/blog/visualize-audio-volume-ripples.jpg" width="700"/></a>
</figure>
<h2 id="visualizing-audio-occlusion">Visualizing audio occlusion</h2>
<p>We have a pretty cool video already with a player running around a scene, and you can hear the direction of the other
player and when a cube is between both players that audio is silent or less loud. And we have a nice circular plane
visualizing audio ripples and fall-off. But, we also wanted to visualize audio occlusion. What that means is, that
we want an &ldquo;audio-shadow&rdquo; to be casted by the cubes.</p>
<p>I try to explain my solution to that in this ugly, little scribble:</p>
<figure><img src="/images/blog/audio-occlusion-scribble.jpg"/>
</figure>
<p>This scribble shows our player position in the center of the plane and the audio occluders (which are cubes) around
it. In orange is our audio circle around the center of the plane. However, there are areas of that circle that are
red, which lie in the shadow of the audio occluders. Audio will not get to this point, because they are blocked by
the occluders. The green dots and lines show places where audio can travel to, the have direct line of sight to the
center of the plane. The purple dots haven&rsquo;t got a direct line of sight, as the center of the plance is blocked by
the occluders.</p>
<p>How do we know if an occluder is blocking the audio at a specific location on our plane and within our shader? The
solution I came up with <strong>is a custom 360° depth buffer around the center of our plane holding the distance to
occluders.</strong> In our shader we can sample that depth buffer and check if the distance to the occluder is smaller than
the distance of our point on the plane. If that is the case, we know that the occluder is blocking the audio at that
point and don&rsquo;t render anything. If not, we can render our audio circle with the fall-off and audio ripples as we
did before.</p>
<h3 id="creating-the-distance-buffer">Creating the distance buffer</h3>
<p>As discussed before, we need to have a 360° depth buffer with the distance between the occluder and the center of
the plane. We can use Unitys APIs to render a camera into a cubemap, which will give us exactly what we want, as we
can sample that cubemap very easily in our shader. Of course, we only got 50% of what we need, as a normal rendering
of the scene will not help us. First, we put a camera as a child to our <code>Player</code> game object. Our hierarchy will
look like this:</p>
<ul>
<li>Player (center of the player)
<ul>
<li>Occlusion Camera</li>
<li>Plane (with our audio visualization shader and materials)</li>
</ul>
</li>
</ul>
<p>We create a new script and attach it to our occlusion camera:</p>

<div class="example">
    <div class="example-title">
        <span>
            <i class="fas fa-code"></i>
            <span class="method">
                AudioVisualizer script
            </span>
            
        </span>
    </div>
    <div class="example-content"><pre><code class="language-csharp">public class AudioVisualizerRenderOcclusion : MonoBehaviour
{
    // Attach this script to an object that uses a Reflective shader.
    // Real-time reflective cubemaps!

    bool oneFacePerFrame = false;
    Camera cam;
    public RenderTexture cubemap;

    public int textureSize = 128;

    private void Awake()
    {
        cam = GetComponent&lt;Camera&gt;();

        if (!cubemap)
        {
            cubemap = new RenderTexture(textureSize, textureSize, GraphicsFormat.R32_SFloat, GraphicsFormat.D32_SFloat_S8_UInt);
            cubemap.dimension = TextureDimension.Cube;
        }
    }

    void Start()
    {
        // render all six faces at startup
        UpdateCubemap(63);
    }
    
    void LateUpdate()
    {
        if (oneFacePerFrame)
        {
            var faceToRender = Time.frameCount % 6;
            var faceMask = 1 &lt;&lt; faceToRender;
            UpdateCubemap(faceMask);
        }
        else
        {
            UpdateCubemap((int)CubemapFace.PositiveX | (int)CubemapFace.NegativeX | (int)CubemapFace.PositiveZ | (int)CubemapFace.NegativeZ); // all six faces
        }
    }

    void UpdateCubemap(int faceMask)
    {
        //if (!cubemap) return;
        
        
        cam.RenderToCubemap(cubemap, 51);
    }
}
</code></pre>
</div>
</div>

<p>We create a new <code>RenderTexture</code> and set it to a cubemap. We set the format to <code>R32_SFloat</code> as one float channel for
the distance data is enough. Every frame we either render all faces or only one frame per frame to save performance.
Depending on how fast the player moves that might be working fine.</p>
<p>However, this will just render the scene as usual. I did not find an API to sample the depth buffer of the Cubemap
in shader graph and even if I could do that, there is a difference between the depth in the depth buffer and the
distance of the point to the camera center. In fact, it took me a while to figure that out. First, I sampled the
depth of the depth buffer at the point. This however resulted in strangely curved shadows. The reason for that is
quite complicated, but in the Unity forum <a href="https://forum.unity.com/members/bgolus.163285/">bgolus</a> always show this
image which shows that very good and that has been very helpful for me:</p>
<figure><img src="/images/blog/zdepthvsdistance.png"/>
</figure>
<p>You know, in our shader we already have a calculation that calculates the distance of the point on our current
fragment to the center of the plane. By just feeding that value in our comparison to the depth buffer got me these
strange curves that you can see above in the image. That is, because you are comparing apples with pears.</p>
<p>So, what we need is either complicated maths in our shader to calculate the depth buffer to the distance, or
creating a customized renderer for our occlusion camera. I went for the second option, as it was easier for me and
to be honest, after hours of building huge shader graphs with a lot of maths and custom functions I couldn&rsquo;t figure
it out!</p>
<p>But, I didn&rsquo;t need to:</p>
<ul>
<li>As the plane and the occlusion camera will not be rotated or scaled and also not being transformed (as only the
player parent object will be translated) we can just work in &ldquo;object space&rdquo;, which makes things a lot easier.</li>
<li>So, we don&rsquo;t need all those transforms and matrix stuff, both pixel spaces will be the same for the occlusion
camera and the plane.</li>
</ul>
<p>I started the project as a Universal Render Pipeline, so I can quickly create my own renderer for the occlusion
camera even without writing much code.</p>
<p>I finally came up with this solution:</p>
<ul>
<li>Create a new Shader Graph for the occlusion camera</li>
<li>Create a new Render Pipeline and render the scene with that shader (I think you could do the same without URP by
setting the shader for the camera in script) in the occlusion camera</li>
<li>The shader does not write the depth but the actual distance between the center of plane and the point on the plane,
corresponding to the way we do it in the plane shader - this way we compare apple to apples!</li>
</ul>
<p>So, I created a new renderer asset and set that as the renderer of our occlusion camera. I also created a new Layer
<code>Audio Occluder</code> and made the camera to only render audio occluders.</p>
<figure style="max-width: 500px"><a href="/images/blog/occlusion-camera-settings.jpg" title="Click to enlarge" data-lity><img src="/images/blog/occlusion-camera-settings.jpg" width="500"/></a>
</figure>
<p>Next, we have to create our &ldquo;Depth Shader&rdquo; in Shader Graph. It looks like this:</p>
<figure style="max-width: 500px"><a href="/images/blog/depth-shader.jpg" title="Click to enlarge" data-lity><img src="/images/blog/depth-shader.jpg" width="500"/></a>
</figure>
<p>As you can see, it&rsquo;s super simple. As in our shader before, we just calculate the distance between the center of the
plane and the point on the plane. However, we need to map that value to the range of 0 to 1, so we need to divide by
the radius. It&rsquo;ll be <code>5</code> as we set that in our shader before. In this case, we don&rsquo;t put in a shader variable but we
just set the far plane of the camera to <code>5</code> and use that value in the depth shader. Setting the far value of the
camera made also sense because we don&rsquo;t need to render the whole scene, just what is in our radius.</p>
<p>Then, we feed that shader in our Render Depth pipeline like this:</p>
<figure style="max-width: 500px"><a href="/images/blog/render-depth-shader.jpg" title="Click to enlarge" data-lity><img src="/images/blog/render-depth-shader.jpg" width="500"/></a>
</figure>
<p>So, what this does, is overriding all materials in the scene with our depth shader and rendering the audio occluders
into our cubemap.</p>
<p>The cubemap looks like that:</p>
<figure style="max-width: 300px"><a href="/images/blog/depth-cubemap.jpg" title="Click to enlarge" data-lity><img src="/images/blog/depth-cubemap.jpg" width="300"/></a>
</figure>
<p>The top and bottom is black, because we don&rsquo;t render them. In our script we had this line:</p>
<pre><code class="language-csharp">cam.RenderToCubemap(cubemap, 51);
</code></pre>
<p><code>51</code> is the bitflag for front, back, left and right. The typical value you see in the Unity documentation and many
examples is <code>63</code> which is the bitflag for all six sides. But we only render into a plane, so we don&rsquo;t care about top
and bottom.</p>
<h3 id="using-the-distance-buffer">Using the distance buffer</h3>
<p>Now that we have our distance buffer indicating the distance of all occluders 360° around the center of the plane we
need to do something with it. In fact that&rsquo;s pretty easy. We just sample the point on the plane and on the cubemap
and figure out if the point is occluded or not. If it is, we just set the alpha value to 0. If not, we set it to our
usual <code>0.0</code> to <code>1.0</code> distance range that we use to calculate fall-off and ripple intensity. Here is the relevant
part of the shader:</p>
<figure style="max-width: 700px"><a href="/images/blog/shader-with-occlusion.jpg" title="Click to enlarge" data-lity><img src="/images/blog/shader-with-occlusion.jpg" width="700"/></a>
</figure>
<p>Pretty simple, right? We can just use the position of the fragment in object space and feed that as the view
direction into our cubemap. Please note, this only works, because we never rotate or scale the plane and the camera.</p>
<p>This is the complete shader. I added normals based on the ripples and a few other things like a base color,
highlight color for the ripples and also a base opacity if you want to show the whole radius.</p>
<figure><img src="/images/blog/shader-complete.jpg"/>
</figure>
<p>If we use this shader, we get what we wanted, a nice looking circle with audio ripples falling-off to the edges of
our audio falloff settings and with &ldquo;audio shadows&rdquo; generated by the occluders.</p>
<figure style="max-width: 700px"><a href="/images/blog/occlusion-result.jpg" title="Click to enlarge" data-lity><img src="/images/blog/occlusion-result.jpg" width="700"/></a>
</figure>
<h2 id="conclusion">Conclusion</h2>
<p>It&rsquo;s been a lot of fun figuring out all of that. And I think the results are great. If you have any comments or
additional info on how to improve that, please tweet me at <a href="https://twitter.com/ursuppe">@ursuppe</a>.</p>
<p>When I created that, I thought that it&rsquo;s also worth taking into consideration not only for audio occlusion system,
but you can also create nice effects. Like spherical explosions that don&rsquo;t run through buildings but stop behind
buildings. A texture map with occlusion could also mask damages to the scene behind buildings, so you would only
render the &ldquo;fire&rdquo; material only where the explosion could be exposed and not being blocked by buildings. This is why
I wrote that blog post. Perhaps it&rsquo;s inspiration for many other use cases.</p>
<p>Universal Rendering Pipeline in Unity is great for these kind of things. It&rsquo;s easy to create your own renderers can do
a lot more than in the built-in render pipeline.</p>
<p>Last but not least I want to link a few resources that have been very useful for me:</p>
<ul>
<li><a href="https://www.cyanilux.com/tutorials/depth/#eye-depth">https://www.cyanilux.com/tutorials/depth/#eye-depth</a></li>
<li><a href="https://forum.unity.com/threads/computing-world-position-from-depth.760421/">https://forum.unity.com/threads/computing-world-position-from-depth.760421/</a></li>
</ul>
`}),e.add({id:3726,href:"https://www.4players.io/blog/why-in-game-communication/",title:"Creating technology based on players’ motivations: why in-game communication?",section:"4Players Blog",description:"Multiplayer gaming is popular and offers a positive gaming experience, but requires a reliable chat system to maintain smooth and enjoyable gameplay.",content:`<p>We all love games, no matter what shape or size they come in. ‘Playing’ is a key component of life, and helps break up
mundane activities. We have discussed this aspect in our blog before, but today we will focus on multiplayer gamers -
their motivations, how they communicate, and how this drives us to do what we do.</p>
<p>There are
roughly <a href="https://www.statista.com/statistics/293304/number-video-gamers/">3.2 billion gamers across the globe</a>. When
looking at a more precise breakdown, there are around 1.47 billion gamers in Asia. This includes 419 million in Latin
America, 284 million in North America and approximately 716 million across Europe.</p>
<p><a href="https://create.unity.com/multiplayer-report-2022">More than half of the global population plays games (52%), and 77% of them play multiplayer.</a></p>
<p>With the increased popularity of multiplayer games, it is imperative to analyse the advantages of choosing this modality
and the player behaviours they encourage. It is clear that the first and most significant motivation for multiplayer
gamers is having a positive games experience together. The social aspect and interactions during multiplayer gaming,
where players can help each other and interact, became clearer than ever during the pandemic. This beats the idea that
games can cause alienation from society. These social connections are key to team building, boosting competition and
strategic thinking, self-reliance, and working as a group.</p>
<p>Another critical factor is the improvement of attention skills. Players need to concentrate deeply in multiplayer
gaming - not just on themselves, but on their surroundings and the positioning of their enemies. This is needed in order
to always remain one step ahead and achieve success.</p>
<p><strong>The importance of communication in multiplayer gaming</strong></p>
<p>All these things make it clear that the ability to communicate during multiplayer games is of the utmost importance.
This is not only for smooth playability but also for the full enjoyment of the player experience. Nothing is more
disruptive than being unable to communicate during a multiplayer game session. In a match between two teams with equal
skills and equipment, the team with better communication skills and tools will always win.</p>
<p>Players will constantly use in-game and external communications to discuss tactics and strategies to achieve the most
optimal gameplay experience. If the in-game voice and text chat is faulty, disruptive and/or inefficient, players will
immediately turn to external tools to solve these issues. In some extreme cases, they might even leave the game
altogether if the frustration level becomes too high. Therefore, it is critical to choose the right chat tool when
developing your multiplayer game.</p>
<p><strong>What part have we played?</strong></p>
<p>When developing ODIN, some of the key focal points we had in mind were:</p>
<p><strong>We wanted to create game communication that was the closest to life-like as possible.</strong> As players ourselves, we were
fully aware of the importance of a fully immersive experience. This is because we wanted players to feel like they were
part of the game. It always disturbed us that we weren’t able to quickly direct our teammates when they were
communicating with us in the game. So we created ODIN as a solution to this.</p>
<p><strong>We wanted to make it as fast and simple as possible for developers to offer the most effective in-game communication
in their multiplayer games.</strong> There are many enjoyable games out there that would be even better if they could take full
advantage of in-game chat. Sometimes, especially when dealing with a lack of resources, the cost of implementing this
feature and maintaining it becomes too much for the developer. As a result of this, their players suffer, as they can’t
fully enjoy the experience. With advances in technology, that should not be an issue.</p>
<p><strong>We also made sure that everything was cross-platform, using the same code and with high performance.</strong> This is so the
developers can work in peace and the players can enjoy it everywhere.</p>
<p>At 4Players we always keep players&rsquo; safety and data protection in mind. Players care about this and so do we - so we
make sure our tool doesn&rsquo;t require any personal data to work properly, making it safe for both developers and the
community.</p>
<p>As game developers must have heard a million times, it’s all about the players - the audience. For us, the motivation is
the same. It’s all about the players, allowing them to fully connect and immerse themselves, without disruptions. In
2023, we aim to take it even further.</p>
`}),e.add({id:3727,href:"https://www.4players.io/blog/4players-releases-odin-server-for-on-premise-hosting/",title:"Introducing ODIN Server for On-Premise Hosting",section:"4Players Blog",description:"Run our server software on your own infrastructure for complete control and customization of your deployment environment.",content:`<p>At 4Players, we understand that different businesses have different hosting needs. That’s why we are excited to announce that we now offer on-premise hosting packages for ODIN customers.</p>
<p>Traditionally, the ODIN server software has been available as a cloud-based solution, allowing users to access it from anywhere with an Internet connection. While this has worked well for many of our customers, we understand that there are certain situations where an on-premise solution might be preferred.</p>
<p>That&rsquo;s why we have developed on-premise hosting packages for our server software, which allows you to have both the ODIN server and gateway installed and run directly on your own hardware, with the added support and expertise of our team. All ODIN on-premise hosting packages offer the same features and functionality as our cloud-based solution, but with the added benefits of increased control and security. You can have complete control over your server infrastructure, and can ensure that your data is kept secure within your own network.</p>
<p><a href='/odin/hosting/on-premise/' class="btn btn-primary">On-Premise Hosting Documentation</a></p>
<p>Downloads for the on-premise version of the ODIN server software are now available right within our <a href="https://app.netplay-config.4players.de/odin/en">customer control panel</a>. This makes it easy to access the software and get it up and running within your own infrastructure. You can also generate configuration snippets for both the ODIN server and gateway based on your individual access key.</p>
<figure><img src="/images/odin-cp-on-premise-server.jpg"
         alt="Generate Configuration for On-Premise Servers"/><figcaption>
            <p>Generate Configuration for On-Premise Servers</p>
        </figcaption>
</figure>
<p>We believe that these on-premise hosting packages will be particularly useful for developers who have strict compliance requirements, or who simply prefer to have their data stored on-site. It is also a great option for customers who want to be able to customize their server setup to meet their specific needs, but don&rsquo;t have the in-house expertise to do so.</p>
<p>We are confident that these on-premise hosting packages will be a valuable addition to our server software offerings, and we hope that they will be a useful tool for our customers. If you have any questions about this new release and specifically our new pricing model, don&rsquo;t hesitate to reach out to our <a href="/company/contact_us">sales team</a>.</p>
<p>We are always happy to help!</p>
`}),e.add({id:3728,href:"https://www.4players.io/blog/the-challenges-of-starting-a-career-in-gaming/",title:"The challenges of starting a career in games",section:"4Players Blog",description:"The gaming industry can be a profitable and viable career choice, and it is currently growing and surpassing other creative industries.",content:`<p>Following the <a href="https://www.youtube.com/watch?v=OjnN8I0OzzI&amp;t=4s">4Players Talks</a> we conducted, discussing how experts
started their careers in games, we thought it would make sense to address some of the biggest challenges newcomers can
face. Each individual is unique and not all challenges may be covered here, but these are some of the most common ones
we see students and job seekers facing as they enter this industry.</p>
<p><strong>Is it a real job?</strong></p>
<p>It might be surprising for some, but for a lot of people not familiar with the gaming industry and games is not always
seen as a feasible or profitable career. More than once, when stating we worked with games, we have faced the statement
‘But games make no money&rsquo; - which is alarming. A lot of parents are still sceptical that a career in game development
can provide a good living, but it certainly can. That&rsquo;s without considerable a career as a professional player, esports
is a world of its own (and deserves its own article).</p>
<p>For the professionals in this industry, there is no doubt: the games industry is extremely profitable and it is
overtaking other creative industries. So it is a great time to start a career in this space.</p>
<p><strong>What role should I choose?</strong></p>
<p>There are a wide variety of roles available in this industry. To be honest, there is space for almost all knowledge
pools and expertise, as long as you are smart in applying it to game development and business. So whether you are a
programmer, designer, artist, business, marketing, customer service, or data expert, there is certainly space for you in
the games industry. We highly advise anyone interested in a career in games to research the jobs available and also talk
to professionals in the fields of your interest in order to decide the path that best suits you.</p>
<p><strong>Being an expert vs. being a generalist</strong></p>
<p>Our parents came from a culture where people tended to specialise in one role and stay in this role for their entire
careers. Times have changed, and nowadays it is not only common but celebrated when people tackle challenges in
different positions and learn extra skills from these experiences.</p>
<p>In larger companies, it is more common for individuals to focus more on specific tasks, with less differentiation.
Smaller companies tend to be more flexible, although this is not a universal truth and it all depends on the company
culture.</p>
<p><em>“I advise smaller teams to hire people with multiple skills who are proactive”</em>,
says <a href="https://www.linkedin.com/in/alexeiryan?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAM0k78B_326C3M7PtvWt5_f2LIzGunSacc">Alexei “Lex” Ryan</a>,
from <a href="https://www.linkedin.com/company/wildlife-studios/">Wildlife Studios</a>. <em>“Set up a culture where it&rsquo;s encouraged
for people to dip into other crafts and support across teams. This helps them acquire more career options later on and
helps the team to get the most out of people. I think it&rsquo;s a mistake to view humans as a narrow skillset only.”</em></p>
<p><strong>Entrepreneur or employee</strong></p>
<p>This is a question most of us have to answer at some point in our lives. Being an entrepreneur in the games industry
requires certain skills and risk-taking that not all of us can tackle. Of course, being your own boss and creating the
games of your dreams can be a very enticing idea for most, but researching the market, producing the required plans,
securing funds, and building a team are essential tasks that not everyone wants to take on.</p>
<p><strong>Entry level jobs</strong></p>
<p>One of the most discussed issues when it comes to securing a job is the lack of zero-experience roles available in the
industry. Most ‘entry-level jobs’ still require some previous experience. But all is not lost: working on game-related
projects while studying or doing internships can give you enough experience to land a good entry-level job in the games
industry. Additionally, indie game companies tend to be more flexible, as long as you can demonstrate your skills.</p>
<p>Additionally, companies are constantly being pushed to offer more zero-experience opportunities to the industry.</p>
<p><em>“The games industry is perhaps the most creative and international industry, and I think that makes it attractive”</em>,
adds <a href="https://www.linkedin.com/in/olegpaliy?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAACeDK8B8e-n-4ZLyzIIdGoF5qzZPM63sz0">Oleg Paliy</a>,
from Game Factory Talents. “<em>But breaking into the industry is not that easy. Juniors cannot find entry-level roles, and
when they do the skills required are way more advanced than their studies or solo beginnings have provided for them.
They also often lack the network and opportunities that more seasoned industry professionals have. For those making a
jump from another industry, they often have difficulty identifying the skills they need for that jump, and which ones
that they already have are transferable.”</em></p>
<p><em>&ldquo;The biggest challenge is to show that you have the experience that they want for the job. You can’t stop. You just
have to keep getting experience&rdquo;,</em>
adds <a href="https://www.linkedin.com/in/camismith?miniProfileUrn=urn%3Ali%3Afs_miniProfile%3AACoAAAGC26UBJfc2_ElDkBbKu8jNcLUWh9rPZec">Cami Smith</a>,
from <a href="https://www.linkedin.com/company/gglocators/">ggLocators</a>.</p>
<p><strong>Further advice</strong></p>
<p>Throughout our long careers in games, we have learnt a few extra things we would like to share:</p>
<p><strong>Networking is key</strong></p>
<p>It doesn’t matter what stage you are at in your career and what you are trying to pursue, networking is a must. Connect
with as many people as you can, share experiences, and make friends. There is no easy way of saying this: networking can
help you advance in your career. It is the cold truth. Knowing a large number of interesting people will help you to
land jobs that you wouldn’t even get to know were available otherwise.</p>
<p><strong>Be open and helpful</strong></p>
<p>Be ready to help others and share your knowledge. The gaming industry is a great place to work because most
professionals tend to be very open to mentorship and happy to share their experiences to help others. It is not only
good karma, it has a good for your reputation. And don’t do it expecting anything in return - do it for the pure fact
that you wished others would do that for you when you started. Hopefully, you got the help and are spreading it further.</p>
<p><strong>It is not always about money</strong></p>
<p>We all want to make a living and need good salaries and work conditions. That is a must and it is not what we are
addressing in this advice. But sometimes it is OK to do things because we believe in the cause, to change the world for
the better. It is part of giving back. The gaming industry has the power to influence the world positively. We should
all be ready to do our part, in any small way we can.</p>
<p>And that is not all, Smith expands:</p>
<p><strong><em>1. Build games – “</em></strong><em>Studios big and small want to see your work. Participate in events like Global Game Jam or go
to Itch.io The more games you make the more skilled you will be working through a pipeline. That shows that you can work
with other team members too.”</em></p>
<p><strong><em>2. Keep learning –</em></strong> <em>“ArtStation.com has an excellent learning platform. Some of their classes are free. Or check
out schools like Gnomon.edu or CGMastersacademy.com – Just keep perfecting your skills.”</em></p>
<p><strong><em>3. Volunteer at the big gaming events</em></strong> <em>- “You must apply early but getting an opportunity to volunteer at GDC or
PAX,and PocketGamer events are all excellent ways to meet people in the industry. Or get involved with your local IGDA.
Also apply for their scholarships. There are active IGDA chapters all over the world. If one isn’t active in your area,
start one.”</em></p>
<p><strong><em>4. Apply for internships</em></strong> <em>– “You need to apply early. Keep track of when studios are going to open their
internship applications. Reach out to the indie studios in your area and see if they are looking for any interns.”</em></p>
<p>Paliy agrees and adds <em>“Network whenever you can and join industry events locally and online
e.g.</em> <a href="https://www.linkedin.com/company/games-job-fair-/">Games Job Fair</a> <em>, ensure you have a great and up-to-date
Portfolio, CV, and cover letter template you can modify depending on the role you are applying for, keep your LinkedIn
page updated, and use its services for professional networking as well. Also, seek mentors. This industry has many
people ready and able to help you bridge the gaps. It&rsquo;s important to remember this as well: The bigger the studios the
more specialised the talents they seek, the smaller the studios the more generalised. I&rsquo;d say aim for a start with a
smaller studio to get the understanding of the process and the skills required and later, when you figure out your key
specialisations, you can move to bigger studios and more ambitious projects.”</em></p>
<p><strong>Do it because you love it</strong></p>
<p>If you want to be in the games business because you want to be rich, you might be disappointed. There are other
innovative careers that would give you those results a lot faster and easier.</p>
<p>You should start a career because you love it. The average person will spend 90,000 hours at work over a lifetime. This
is one-third of your life. So make the most of it.</p>
<p>“Don’t give up. Just keep trying to add skills, make friends, and build games.</p>
<p>It is worth all the effort!”, Smith says.</p>
<p>We hope this advice will give you a good kickstart for a long and happy career in our community. Most of this advice can
also be applied to other areas, so use them at will. We, at 4Players, deeply love what we do and love games and the
games industry. Taking on new challenges and moving forward is made possible by our deep appreciation for games. Seeing
our developer and player communities truly enjoy their experiences with our support is the fuel for a lifelong passion
for game development. We wish you all the same happiness we have.</p>
`}),e.add({id:3729,href:"https://www.4players.io/blog/stepping-into-the-holodeck/",title:"Stepping into the holodeck",section:"4Players Blog",description:"Patty describes how close we are already on our way to bring the holodeck.",content:`<p>All of us Star Trek fans dream of stepping into the Holodeck and experiencing a different reality. The idea of
fabricating any environment and situation our minds can dream of and be able to interact with it is fascinating to us.
It is not necessarily an escape from reality; it can be the chance to re-live our happiest moments and create new ones
that wouldn’t be possible in the real world.</p>
<p>“I would like to see technology move into Holograms in a way that every living room could create an environment that is
surrounding us. Gaming is a way of life and it’s becoming like that”, says
<a href="https://www.linkedin.com/in/tsahi-liberman-8580524">Tsahi Liberman</a>, from
<a href="https://www.linkedin.com/company/styrax-studios-inc/">Styrax Studios Inc</a>. Studios, during his
<a href="https://www.youtube.com/watch?v=oTvrbsaIq1A">4Players Talks</a> about immersion.</p>
<p>We have talked about immersion in this blog before, but today we would like to focus on immersion as a creative tool to
improve mental health and quality of life.</p>
<p>Everyone has been using their imagination since they were born. Observing children, we can see how easy it is for them
to step into other worlds, even before they consciously know anything about Live Action Role Play or LARP. Children role
play their favourite fantasies in such a natural way, it is almost like their reality is fluid.</p>
<p>In Reality is Broken, <a href="https://www.linkedin.com/in/jane-mcgonigal-90a0b836">Jane McGonigal</a>
explores how game design and immersion can improve quality of life and help us deal
with issues that would be soul-crushing otherwise. As reality is not designed to motivate us or even to maximize our
potential and skills, structuring once boring and mundane activities as simple games can be the solution, allowing us to
explore the world in a ludic way.</p>
<p>“A game is an opportunity to focus our energy, with relentless optimism, on something we’re good at (or getting better
at) and enjoy. In other words, the gameplay is the direct emotional opposite of depression”, declares McGonigal.</p>
<p>The way we see it, using game design to deal with everyday activities is the perfect way to create immersion, even in
situations where concentrating can be hard. We enjoy the activities where we can truly immerse ourselves, even if we are
role-playing our own real-world character.</p>
<p>Additionally, using the game design concept of Fiero can improve our way of dealing with complex and frustrating
situations. Fiero is the feeling of emotional elation after a discovery or victory (usually seen in gamers when they
throw their arms in the air and yell). It is the most powerful neurochemical high one can experience. The chase for the
feeling of Fiero can be a great motivator for fighting difficult situations and avoiding giving up on them and yourself.
Using game design, we can truly explore frustrations and not allow them to lead us into depression. It’s all about play.</p>
<p>A good example, outside games, of the power of immersion is the Oscar-winning film ‘Life is Beautiful’. While prisoners,
the main character tells his son that the concentration camp is a complicated game, in which he needs to fulfil quests,
earn points and secure a well-defined prize. In this game, any complaint or sign of sadness strips the player of points.
Although this is a very sad story, it is interesting to see how immersion in creativity and imagination can help us deal
with unforeseeable situations.</p>
<p>Another great example of game design and immersion changing lives is the <a href="https://www.q2l.org/">Quest 2 Learn school</a>
in New York. It has designed its whole educational system based on games, focusing on teaching critical thinking,
and strategy-building skills, allowing the students to fully explore their creativity.</p>
<p>But what is the role of technology in all that? It is a very important role. As technology is helping us create more
comfortable living conditions and more productive working environments, it is important to use it to also improve
quality of life and mental health.</p>
<p>With the advance of VR and AR, we will be able to shape our reality to support our constant growth and help us connect
with others. Simulations already allow us to become proficient in dangerous activities without risking our lives. Adding
gameplay experiences also helps us to enjoy and feel motivated by these activities, increasing productivity.</p>
<p>“A deep immersion into a possible future creates lasting mental habits, especially when it comes to watching the real
world for evidence that the simulated possibility is becoming more likely”, says McGonigal.</p>
<p>In the future, we hope companies will talk about quests and achievements rather than KPIs. We hope schools won’t use
homework as punishment, but as tasks for a higher goal. And we truly hope our spatial sound and network solutions can
help technology achieve the true immersion the community deserves.</p>
`}),e.add({id:3731,href:"https://www.4players.io/blog/4players-releases-odin-core-sdk-v1.3.0/",title:"ODIN Version 1.3.0 is Available",section:"4Players Blog",description:"4Players is pleased to announce the immediate availability of the latest ODIN SDK - adding support for Windows on ARM.",content:`<p>We&rsquo;ve just published version <strong>1.3.0</strong> of the ODIN SDK. We have some exciting updates to share with you.</p>
<p>First and foremost, we have added support for Windows on ARM. This means that users of these devices can now take advantage of all the features and functionality ODIN has to offer. We have also refactored our internal jitter buffer for improved reliability. This helps to smooth out any variations in the arrival time of audio packets, ensuring that audio playback is as smooth as possible. This update should result in even more reliable audio processing for all users.</p>
<p>The new builds are available on <a href="https://github.com/4Players/odin-sdk/releases">GitHub</a>.</p>
<p><a href='https://github.com/4Players/odin-sdk/releases/tag/v1.3.0' target='' class="btn btn-primary">Download Version 1.3.0</a></p>
<p>In terms of API changes, we have updated the <code>OdinAudioStreamStats</code> struct to better reflect the data it contains. We have renamed several fields and added several new ones, so be sure to check out the changelog for all the details. We have also removed the <code>odin_audio_data_len</code> function. In addition to these updates, we have made a number of bugfixes and improvements, which should result in a more reliable high-quality audio processing experience for all our users. We hope you enjoy these updates and as always, don&rsquo;t hesitate to reach out if you have any questions or feedback.</p>
<p>Updates to both our <a href="https://github.com/4Players/odin-sdk-unity">Unity</a> and <a href="https://github.com/4Players/odin-sdk-unreal">Unreal Engine</a> plugins will be available within a few days.</p>
<p><img src="/images/odin/odin_blog04.jpg" alt="4Players ODIN"></p>
<p>Here&rsquo;s the full changelog for this update:</p>
<h3 id="new-features">New Features</h3>
<ul>
<li>Added support for Windows on ARM</li>
<li>Refactored internal jitter buffer for improved overall reliability</li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li>Updated <code>OdinAudioStreamStats</code> struct
<ul>
<li>Renamed <code>jitter_packets_processed</code> to <code>packets_processed</code></li>
<li>Renamed <code>jitter_packets_dropped_too_early</code> to <code>packets_arrived_too_early</code></li>
<li>Renamed <code>jitter_packets_dropped_too_late</code> to <code>packets_arrived_too_late</code></li>
<li>Renamed <code>jitter_packets_lost</code> to <code>packets_lost</code></li>
<li>Added <code>packets_total</code></li>
<li>Added <code>packets_invalid</code></li>
<li>Added <code>packets_repeated</code></li>
</ul>
</li>
<li>Removed <code>odin_audio_data_len</code></li>
</ul>
<h3 id="bugfixes--improvements">Bugfixes / Improvements</h3>
<ul>
<li>Enabled FEC feature for Opus encoder/decoder</li>
<li>Switched Opus encoder application mode from Audio to VoIP when working with single channel streams</li>
<li>Fixed initial values for time and sequence number in audio datagrams</li>
<li>Fixed a bug where malformed audio datagrams could lead to delayed audio playbck</li>
</ul>
`}),e.add({id:3735,href:"https://www.4players.io/blog/4players-releases-odin-core-sdk-v1.2.0/",title:"ODIN Version 1.2.0 is Available",section:"4Players Blog",description:"4Players is pleased to announce the immediate availability of the latest ODIN SDK - focussing on stability and performance improvements.",content:`<p>We&rsquo;ve just published version <strong>1.2.0</strong> of the ODIN SDK. With this release, we&rsquo;re focussing on stability and performance improvements. Once again, thank you for all of the amazing feedback! Due to the close collaboration with you - the developers - we&rsquo;re able to constantly improve our services and make ODIN even better.</p>
<p>The new builds are available on <a href="https://github.com/4Players/odin-sdk/releases">GitHub</a>.</p>
<p><a href='https://github.com/4Players/odin-sdk/releases/tag/v1.2.0' target='' class="btn btn-primary">Download Version 1.2.0</a></p>
<p>In terms of stability, we&rsquo;ve refactored our internal reconnect mechanism, which will now re-establish connections in a faster, more effective way. In addition, we&rsquo;ve fixed a rare but nasty bug where an ODIN room handle could become unresponsive in case of a connection timeout.</p>
<p>Also, we&rsquo;ve added the user identifier of the local peer to the <code>Joined</code> event. Since tokens should be generated on a server, previous releases forced you to look in the JWT claims to get that information, so this change should make the whole authentication process more convenient and straight forward.</p>
<p>Updates to both our <a href="https://github.com/4Players/odin-sdk-unity">Unity</a> and <a href="https://github.com/4Players/odin-sdk-unreal">Unreal Engine</a> plugins will be released later this week.</p>
<p><img src="/images/odin/odin_blog05.jpg" alt="4Players ODIN"></p>
<p>Here&rsquo;s the full changelog for this update:</p>
<h3 id="general">General</h3>
<ul>
<li>Updated <a href="https://github.com/4Players/odin-sdk/tree/master/test">test console client</a></li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li>Added <code>OdinRoomConnectionState_Disconnecting</code></li>
<li>Added <code>own_user_id</code> and <code>own_user_id_len</code> to <code>OdinEvent_JoinedData</code></li>
</ul>
<h3 id="bugfixes--improvements">Bugfixes / Improvements</h3>
<ul>
<li>Improved internal shutdown process to prevent media handles from being removed too soon</li>
<li>Fixed an issue where a room handle could become unresponsive after a timeout</li>
</ul>
`}),e.add({id:3737,href:"https://www.4players.io/blog/why-building-an-international-community-can-make-a-difference/",title:"The world is our oyster: why building an international community can make a difference",section:"4Players Blog",description:"Internationalization and going global is a challenge for many companies. We share our experience and how we are building a community around the world.",content:`<p>There was a time when it was enough to stay local - exporting was a choice and working exclusively in your own region
was a suitable option. With the introduction of the internet, everything changed. Local businesses began to get a taste
of the global life - for technology companies, going international became a must. The idea of building a global
community is very appealing, but it is not easy. Several things must be considered for it to work.</p>
<p>To build a global reach, it is crucial to understand the importance of cultural diversity and creating rapport through
social engagement. People are keen to connect, so give your community good reasons to want to connect with you. Every
new area you move into is different, but there will always be common features that connect them. These cultures are a
melting pot of uniqueness, linked by feelings, needs and thoughts - connect these and you will paint a picture that only
your global community can colour.</p>
<p>It’s vital to have clear goals when it comes to your community. Create a visual statement so your members know why and
what they are joining. This way, you can guarantee you are attracting and retaining the right people. Create a friendly
online space where your members can communicate and connect, people want to engage in discussions, and have an open
platform to ask questions and be heard. Make sure their experience is pleasant and that accessibility and transparency
are words you’ve always got in your mind.</p>
<p>Talking about transparency, remember you are connecting with people from all over the world. They all have different
views and experiences, but they all understand and recognize honesty. Being clear and careful about cultural and
geographical nuances will help you build a true relationship with the members. Don’t think one size fits all – embrace
the differences and be flexible, all while being yourself. You won’t attract everybody, but the members who join you
will appreciate what you are trying to do and remain with you.</p>
<p>Working with people worldwide may seem like a herculean task, but breaking it into sub-communities and covering several
sub-topics allows you to diversify the global community, making it easier to share and find information. Remember, this
is not about you: this is about adding value and creating connections, fulfilling your community’s needs and wants, and
building loyalty. Understand your audience,support them, and you will go a long way.</p>
<p>For us at 4Players, it is all about our global community – building it and growing it. That is why we are so keen to
attend events all over the world and to listen to what developers and players need. Meet us at
<a href="https://www.linkedin.com/company/w-love-games/">W &lt;3 Games</a> in Helsinki,
<a href="https://www.linkedin.com/company/megamigsfestival/">MEGAMIGS Festival</a> in Montreal, Scottish Games Week in Dundee, and
G-Star in Busan. This is only the beginning. We want to support developers and players from all over the world, so there
is much more to come in the future, and it&rsquo;s looking bright!</p>
`}),e.add({id:3738,href:"https://www.4players.io/blog/why-connection-is-more-important-than-business/",title:"Why connection is important for more than business.",section:"4Players Blog",description:"Networking is an important aspect of business and personal growth. Here is why!",content:`<p>This week, we were lucky enough to attend and present at PGConnects Helsinki, event organised by
<a href="https://www.linkedin.com/company/steel-media-ltd">Steel Media Ltd</a>. Seeing
our friends and colleagues in the industry in person again after a long period of isolation, made us reflect on the
importance of connections.</p>
<p>We have previously discussed the effects of isolation on mental health. Now, we would like to discuss the importance of
networking for business and personal growth.</p>
<p>As developers, it’s common to think that all we need is our team, our creativity and our skills. This may be true when
it comes to the production phases, but without the feedback and support of business peers, success can wander out of
reach.</p>
<p>Networking is one of the most challenging yet beneficial tasks for companies. It requires skills that are not as
tangible and simple to explain as programming or artistic talents, and it takes time and dedication to bring in results.</p>
<p>Networking is the art of building trust and a rapport with your peers. It implies a connection different from
friendship, but no less complex. Knowing people is not enough. It is necessary to understand and show true interest in
others, be open to sharing thoughts and ideas, and be at the ready to start meaningful discussions that could lead to
exciting new prospects and opportunities.</p>
<p>If you see events as a way to get clients, have quick business meetings or achieve sales targets, you are in danger of
being inefficient and potentially viewed as obnoxious. Some developers will avoid you, others will meet you out of their
business needs - but they won&rsquo;t enjoy the encounter.</p>
<p>If you see events as true opportunities to connect with people and learn interesting things, you will always be
satisfied with the results. In order to do that, you need to have a sincere interest in others and have an open mind
about how your product or project can support them. It’s not about you. It’s about them.</p>
<p>These are the core values we at 4Players live by: with curious minds and a deep desire to be helpful. Our partners, our
community, our players and our developers are the king. These people are the stars that motivate us to keep creating
great tools for them to produce their magic.</p>
<p>So we are very thankful for the opportunity to attend and present at events like PGConnects Helsinki, to share our
insights and meet amazing developers and partners.</p>
<p>Deep connections are key for us at 4Players, and we hope that with ODIN and 4NetPlayers, we can continue to support
players and developers to forge deep relationships.</p>
`}),e.add({id:3739,href:"https://www.4players.io/blog/4players-releases-odin-core-sdk-to-v1.1.1/",title:"ODIN Version 1.1.1 is Available",section:"4Players Blog",description:"4Players is shipping a new release of the ODIN core SDK, addressing feedback, bugs and improvements.",content:`<p>Happy release Tuesday! 🎉</p>
<p>The 4Players ODIN development team is please to announce the immediate availability of ODIN version <strong>1.1.1</strong>. This
release focuses on addressing your feedback as well as bug reports and feature requests.</p>
<p>You can see the full changelog for more details:</p>
<h3 id="general">General</h3>
<ul>
<li>Updated <a href="https://github.com/4Players/odin-sdk/tree/master/test">test console client</a></li>
</ul>
<h3 id="new-features">New Features</h3>
<ul>
<li>Added gain controller to bring the input audio signal to an appropriate range when it&rsquo;s either too loud or too quiet</li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li>Added <code>gain_controller</code> boolean to <code>OdinApmConfig</code> struct</li>
<li>Updated <code>odin_error_format</code> to make error messages more specific</li>
<li>Updated <code>odin_room_update_user_data</code> to return an error when trying to set user data of the room while not being connected</li>
</ul>
<h3 id="bugfixes--improvements">Bugfixes / Improvements</h3>
<ul>
<li>Fixed a bug where peer user data was not set after re-connecting to a room</li>
<li>Fixed a bug where peer position was not set correctly before joining a room</li>
<li>Fixed an issue where iOS clients were unable to access local root certificates</li>
</ul>
`}),e.add({id:3741,href:"https://www.4players.io/blog/knowing-your-audience-players-profiles/",title:"Knowing your Audience: Players Profiles",section:"4Players Blog",description:"Patty describes why knowing your players is key to success.",content:`<p>As game developers, there is one ingredient to the success of a game that we should never forget: the players. Without
players - without an audience - having the best game ever means absolutely nothing. They are the movers and shakers, and
at the heart of why games are made. Understanding the audience, their motivations and standards, can be a game changer (
pun intended) in creating a successful and long-lasting product.</p>
<p>Richard Bartle, researcher who created the Bartle Test of Psychology, dissected the taxonomy of player types. Through
his tests, he identified four key classifications of players. It’s important to note that these categories aren’t rigid,
and most people display traits in more than one category. Knowing their dominant trait allows developers to foresee the
majority of features that should be used and which other features can be added in smaller amounts, to appeal to the
other categories. Plus, it is always more interesting to make informed decisions rather than just half-educated guesses.</p>
<h2 id="the-achiever">The Achiever</h2>
<p>An explicit planner and implicit opportunist are characteristics of this profile at heart. They are all about points and
status, being able to check and showcase their progress at all times. They not only want to collect all achievements and
badges, they will proudly display them. This kind of player will respond well to incentive schemes and faster routes to
success. Bartle estimates that roughly 10% of players are Achievers. They are very conscientious, ambitious go-getters,
who often rush to finish daily tasks and challenges. They will seek praise from Socializers, even if not explicitly or
directly.</p>
<h2 id="the-socializer">The Socializer</h2>
<p>The largest profile group, Socializers account for approximately eighty percent of people who play games. For
Socializers, the fun part of playing games is the interaction and connection to friends and peers. They enjoy
collaborating for bigger rewards, using games as a healthy path for richer social environments.</p>
<p>Social games and platforms, as well as metaverses, appeal to Socializers, as they are not seeking out fierce
competition, but support. This doesn’t mean they aren’t ambitious. They are networkers, love large audiences, and are
agreeable and friendly. They start and hold conversations in voice chats, join guilds, and are a frequent voice in chat
rooms and discussion forums - you got the idea. We have all encountered a Socializer at one point in our gaming journey,
whether this be in a game or hanging out in a forum.</p>
<h2 id="the-explorer">The Explorer</h2>
<p>An inquisitive bunch, the Explorer wants to experience new adventures and discover new secrets. They are happy to pursue
repetitive tasks and explorations, as long as it unlocks rewards such as easter eggs or a new secret level. They are not
impressed by badges or interested in gloating about their achievements. The Explorer gains inspiration from
experimenting, finding new ways to exploit the game to reach new, unseen areas. Open-worlds and sandbox games are their
playground, and they’re not in a rush either, exploring everything at their own pace – and enjoying every minute of it.
Around 10% of players fit this profile.</p>
<h2 id="the-killer">The Killer</h2>
<p>Although the name is a bit scary, the definition isn’t. Killers are similar to Achievers, but with a twist; they want to
see other people lose. As you could guess, they are highly competitive, and motivated by being the winners - and to be
true winners, everybody else needs to fail. They are politicians, out for blood and chaos, but very conscious of their
status and reputation. They prefer live PvP and are prone to use scripted cheats whenever possible. This category is
very rare: less than one percent of players.</p>
<p>So, what did we learn? When keeping these profiles in mind, it makes it easier to understand why games like Farmville
and platforms like Roblox are so successful, but this just scratches the surface. In order to make the right decisions
for your game design, proper player research and analysis is essential, and can take you a long way.</p>
<p>We would love to know which kind of player you are. We would say broadly that we are Socializers and Achievers, ready to
use ODIN and 4NetPlayers to interact with our peers, while keen to better ourselves every step of the way.</p>
<p>For us at 4Players, it doesn’t matter if you want to appeal to the Socializers, Achievers, Explorers or Killers, if they
are there to chat, join adventures or boast: we want to provide developers the tools to make the player’s experience top
level and unique. We are here for all of you!</p>
`}),e.add({id:3742,href:"https://www.4players.io/blog/4players-releases-swiftui-sample/",title:"4Players Releases SwiftUI Sample App",section:"4Players Blog",description:"Learn more about OdinKit and how to use it in your iOS and macOS applications by studying our SwiftUI sample.",content:`<p>After releasing our <a href="/odin/sdk/swift/">OdinKit</a> Swift package for iOS and macOS, we now pushed the code
for a very basic SwiftUI sample application to <a href="https://github.com/4Players/odin-example-swiftui">GitHub</a>.</p>
<p><img src="/images/odin/xcode_odin_kit.jpg" alt="Xcode Screenshot"></p>
<p>The app is built around <strong>OdinKit</strong> and implements all APIs required to provide real-time voice communication for
your users. It also shows how to use an <code>OdinRoom</code> instance to synchronize data between all users in the room.</p>
<p>Learn more about the sample and how to get started in our example description:</p>
<p><a href='/odin/examples/swiftui-sample/' class="btn btn-primary">Get Started with Swift</a></p>
`}),e.add({id:3744,href:"https://www.4players.io/blog/4players-releases-odin-swift-sdk-v1.0.0/",title:"4Players Releases ODIN Swift Package",section:"4Players Blog",description:"We now empower iOS and macOS developers to add real-time voice communication to their games and apps with OdinKit.",content:`<p>Now that our team is on a release spree, here you have <strong>OdinKit</strong> - a Swift package providing an object-oriented wrapper
for the ODIN native client library, which enables developers to integrate real-time VoIP chat technology and real-time
data synchronization into multiplayer games and apps on macOS and iOS.</p>
<p>With <strong>OdinKit</strong>, we&rsquo;re not only following Apples naming convention for APIs. We&rsquo;re also shipping an XCFramework, which is
a distributable binary package created by Xcode that contains variants of the ODIN client library so that it can be used on
multiple platforms. Currently, we provide support for both Intel and Apple Silicon based Macs as well as iOS devices.</p>
<p>The package is open-source and available on <a href="https://github.com/4Players/odin-wrapper-swift">GitHub</a>.</p>
<h2 id="swift-playground">Swift Playground</h2>
<p>The project contains a macOS <a href="https://github.com/4Players/odin-wrapper-swift/blob/master/Playgrounds/macOS.playground/Contents.swift">playground</a>
to demonstrate how to use OdinKit in your your apps, but the same code will also work on iOS and iPadOS.</p>
<h2 id="getting-started">Getting Started</h2>
<p>After adding the package to your project, import <code>OdinKit</code> into your application:</p>
<pre><code class="language-swift">import OdinKit
</code></pre>
<p>In ODIN, every user connected to the same room can exchange voice and data. You can also join multiple rooms at once, for
example one lobby but additional private chats or another room only used for text messaging. So, we create a room instance
like this:</p>
<pre><code class="language-swift">let room = OdinRoom()
</code></pre>
<h2 id="handling-events">Handling events</h2>
<p>ODIN will notify you of important events like a new user joining the room or a user leaving the room. You can handle
these events to build your business logic on top of it. In Swift, we use the delegation pattern to handle these events.</p>
<p>So, we create a class implementing the <code>OdinRoomDelegate</code> protocol:</p>
<pre><code class="language-swift">// Define a class handing events
class YourCustomDelegate: OdinRoomDelegate {
    // Callback for internal room connectivity state changes
    func onRoomConnectionStateChanged(room: OdinRoom, oldState: OdinRoomConnectionState, newState: OdinRoomConnectionState, reason: OdinRoomConnectionStateChangeReason) {
        print(&quot;Connection status changed from \\(oldState.rawValue) to \\(newState.rawValue)&quot;)
    }

    // Callback for when a room was joined and the initial state is fully available
    func onRoomJoined(room: OdinRoom) {
        print(&quot;Room joined successfully as peer \\(room.ownPeer.id)&quot;)
    }

    // Callback for room user data changes
    func onRoomUserDataChanged(room: OdinRoom) {
        print(&quot;Global room user data changed to: \\(room.userData)&quot;)
    }

    // Callback for peers joining the room
    func onPeerJoined(room: OdinRoom, peer: OdinPeer) {
        print(&quot;Peer \\(peer.id) joined the room with ID '\\(peer.userId)'&quot;)
    }

    // Callback for peer user data changes
    func onPeerUserDataChanged(room: OdinRoom, peer: OdinPeer) {
        print(&quot;Peer \\(peer.id) updated its user data to: \\(peer.userData)&quot;)
    }

    // Callback for peers leaving the room
    func onPeerLeft(room: OdinRoom, peer: OdinPeer) {
        print(&quot;Peer \\(peer.id) left the room&quot;)
    }

    // Callback for medias being added to the room
    func onMediaAdded(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
        print(&quot;Peer \\(peer.id) added media \\(media.id) to the room&quot;)
    }

    // Callback for media activity state changes
    func onMediaActiveStateChanged(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
        print(&quot;Peer \\(peer.id) \\(media.activityStatus ? &quot;started&quot; : &quot;stopped&quot;) talking on media \\(media.id)&quot;)
    }

    // Callback for medias being removed from the room
    func onMediaRemoved(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
        print(&quot;Peer \\(peer.id) removed media \\(media.id) from the room&quot;)
    }

    // Callback for incoming arbitrary data messages
    func onMessageReceived(room: OdinRoom, senderId: UInt64, data: [UInt8]) {
        print(&quot;Peer \\(senderId) sent a message with arbitrary data: \\(data)&quot;)
    }
}
</code></pre>
<p>Next, we assign that delegate to our room instance:</p>
<pre><code class="language-swift">// Create an instance of your delegate
let delegate = YourCustomDelegate()

// Add the delegate to the room
room.delegate = delegate
</code></pre>
<p>We also provide a set of published properties for typical use cases so you don&rsquo;t have to handle these events yourself.
This is ideal if you&rsquo;re using SwiftUI, as your views will notice any changes automatically.</p>
<pre><code class="language-swift">struct RootView: View {
    @EnvironmentObject var room: OdinRoom

    var body: some View {
        switch room.connectionStatus.state {
            case OdinRoomConnectionState_Connected:
                RoomView()
            default:
                LoginView()
        }
    }
}
</code></pre>
<h2 id="joining-a-room">Joining a Room</h2>
<p>That&rsquo;s it for event handling. We are now ready to join a room. For this, we need to an authentication token. ODIN
generates signed JSON Web Tokens (<a href="https://jwt.io">JWT</a>) for secure authentication, which contain the room you want to
join as well as a freely definable identifier for the user (e.g. a player ID or a user ID from your database).</p>
<pre><code class="language-swift">// Create a new local access key
let accessKey = try OdinAccessKey(&quot;__YOUR_ACCESS_KEY__&quot;)

// Generate a token to authenticate with
let authToken = try accessKey.generateToken(roomId: &quot;Meeting Room&quot;, userId: &quot;Swift is great!&quot;)
</code></pre>
<p>The <code>roomId</code> is just a string and uniquely identifies the room within your access key domain. Every user connected
to the same room will be able to communicate with each other. The <code>userId</code> is a string that can be used to refer to
an existing record in your particular service.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Privacy and security is very important to us. All the data transferred over our servers is fully encrypted. Also, ODIN
is completely user agnostic and we don’t harvest any data or tell our customers how things should work or look.</p>
</div>
</div>

<p>For your own security, we strongly recommend that you <strong>NEVER</strong> put an access key in your client-side code. We&rsquo;ve
created a very basic <a href="/odin/examples/token-server/">Node.js server</a>, to showcase how to issue ODIN
tokens to your client apps without exposing your access key.</p>
<p>We provide both <a href="https://packagist.org/packages/4players/odin-tokens">PHP</a> and <a href="https://www.npmjs.com/package/@4players/odin-tokens">NPM</a>
packages to make the process of generating tokens as easy as possible for you.</p>
<p><a href='/odin/introduction/access-keys/' class="btn btn-primary">Generate an Access Key for FREE</a></p>
<p>Now that we have created our access token (which you should do on server side if possible) we can join the room and
add a media stream using your default audio input device:</p>
<pre><code class="language-swift">// Now that we have a token, join the room
try room.join(token: authToken)

// Append a local audio stream to capture our microphone
let newMediaId = try room.addMedia(audioConfig: OdinAudioStreamConfig(
    sample_rate: 48000,
    channel_count: 1
))
</code></pre>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As <strong>OdinKit</strong> will request access to your microphone you need to set a special key in your <code>Info.plist</code> file. Add
a key called <code>NSMicrophoneUsageDescription</code> (<em>Privacy - Microphone usage description</em>) and set a text that describes
why your app wants to have microphone access. Otherwise your app won&rsquo;t be able to capture audio samples from your
input device.</p>
</div>
</div>

<p>That&rsquo;s it! Congratulations! You have added real-time voice communication to your app!</p>
<h2 id="whats-next">What&rsquo;s Next</h2>
<p>There are many things you can do with ODIN. You could add sending text chat so that users can share links and
additional data:</p>
<pre><code class="language-swift">// Encode a string so we can send it as a message
let yourMessage = OdinCustomData.encode(&quot;So Long, and Thanks for All the Fish&quot;)

// Send the message everyone else in the room
try room.sendMessage(data: yourMessage)
</code></pre>
<h2 id="sample-app">Sample App</h2>
<p>Download our sample to get started quickly and learn how to use the APIs:</p>
<p><a href='/odin/examples/swiftui-sample/' class="btn btn-primary">Show SwiftUI Sample</a></p>
<h2 id="documentation">Documentation</h2>
<p>We have extensive documentation and a reference of all available classes and APIs provided by <strong>OdinKit</strong>.</p>
<p><a href='/odin/sdk/swift/' class="btn btn-primary">Open OdinKit Documentation</a></p>
`}),e.add({id:3745,href:"https://www.4players.io/blog/4players-releases-odin-networking/",title:"Announcing ODIN Networking",section:"4Players Blog",description:"4Players announces ODIN Networking - a decentralized, client-server networking solution for games and the metaverse",content:`<p>Today we are releasing what we have been working on for a couple of months now: <strong>ODIN Networking</strong>. Unity until today
lacks a good and easy stack to build multiplayer games and applications. The old Unity Networking has been deprecated
years ago and the follow-up solution is still not ready and seems to be quite complicated. So we used Photon or
Mirror Networking to build multiplayer examples.</p>
<p>So, we went out to solve that, and we came up with <strong>ODIN Networking</strong>. This is our first public iteration, and
although there is a lot of work to be done, we are quite confident that we can contribute and help developers to
more easily build multiplayer applications of any scale.</p>
<h2 id="what-is-odin-networking">What is ODIN Networking?</h2>
<p>ODIN Networking is built on top of the <a href="/odin/sdk/unity/">ODIN Unity SDK</a> and provides easy to use
methods to built virtual experiences with ease that allow you to connect users with virtual characters and real-time 3D
voice. A 3D virtual conferencing application can be built in no time, as ODIN Networking provides components that
automatically synchronize position, animation of all characters over the ODIN servers.</p>
<p>Users can spawn objects in the world and can interact with the provided world in real-time. ODIN Networking also
integrates ODIN Audio so your virtual world will automatically integrate audio occlusion (users cannot hear each other
if walls are in between) and even direction.</p>
<p><strong>One important aspect</strong>: While ODIN Networking is a powerful and easy to use system, it&rsquo;s mainly targeted for
real-world like applications for the metaverse, board games, virtual conferences and conventions. If you want to
build a fast competitive first person shooter or real-time physics racing game ODIN Network might not be the best
solution. Choose other solutions like Mirror Networking or Photon for that use case. You should still use ODIN for voice
support, and we have many guides on how to integrate ODIN into Mirror or Photon.</p>
<h2 id="how-does-it-work">How does it work?</h2>
<p><a href="/odin/sdk/unity/">The ODIN SDK</a> supports sending arbitrary data over the network and this
data is automatically synced with all peers connected to the same room. Each user can have its own data
(<code>PeerUserData</code>), each room can have its own data (<code>RoomUserData</code>) and each peer can send messages with arbitrary
data to all or selected peers.</p>
<p>ODIN Networking packages the current state of a player into the players <code>PeerUserData</code>. It includes the transform
(position, location and scale), the animation state and sync vars that allow you to easily mark local variables to
be packaged into the state. This updated state is sent multiple times per second (right now every 10th of a second)
to other peers that recreate that state in their own world. If a peer is moving, every peer in the network gets an
update 10 times a second and updates (tweens) the position locally for that peer.</p>
<p>Every player can also spawn objects into the world. The state of these objects are added to the <code>PeerUserData</code> and
are thus updated as well. If a peer spawns an object, all other peers will get an update and spawn the object locally
and subsequently update its position as part of the network update cycle.</p>
<p>Of course, players should be part of a living world, so how do you handle objects that are &ldquo;owned&rdquo; by the world you
might ask? It&rsquo;s easy. With a deterministic algorithm, all peers in the same room select the same peer to be the host.
This is done dynamically, so if the host disconnects a new peer might become host. The host owns the worlds objects
and updates the worls state as well as its own state in the <code>RoomUserData</code>. This way, peers entering later will
become the same state of the world as every one else, and it&rsquo;s kept persisted even if the current host disconnects,
as every peer in the network has a copy of that world. This way, every peer can instantly become the host.</p>
<p>As it&rsquo;s decentralized you don&rsquo;t need to worry about a central server that might go down, and you also don&rsquo;t need to
have all that typical development cycle of sending messages to a server that updates the world and sends the results
back as remote procedure calls, which make the whole development process extremely complicated. Now you might
understand, why we don&rsquo;t think ODIN Networking is good for competitive games, as its not easy to build a reliable
anti-cheat system into this kind of architecture. We might explore that later, but right now we concentrate on
building metaverse applications and all those games that don&rsquo;t want to be the next eSports hit.</p>
<p>But, ODIN Networking, and the ODIN Unity SDK are open-source. We are happy to merge your contributions!</p>
<h2 id="how-do-i-get-started">How do I get started?</h2>
<p>All you have to do is to derive your &ldquo;Player&rdquo; script (i.e. that script that controls your local player object) from
<code>OdinPlayer</code> instead of <code>MonoBehaviour</code>. Distribute at least one <code>OdinNetworkSpawnPosition</code> game object in the
scene. Next, join a room, and you are ready to go! Build your application and send it a friend. Once you guys start
the application, each user will spawn its own player at one of the spawn positions, and you can see the other players
running around, seeing the characters animation, and you can talk to each other in 3D audio - i.e. the voice will
come from the direction you see the other player and volume will be adjusted depending on the distance and direction.</p>
<h2 id="how-much-does-it-cost">How much does it cost?</h2>
<p>As ODIN Networking uses the ODIN stack under the hood, the same pricing applies. So no extra costs if you use ODIN
Networking!.</p>
<h2 id="interested">Interested?</h2>
<p>We released ODIN Networking as a Unity project today. You can download it, fire up Unity and click Play to see it
and to examine the source code. In the next couple of weeks we&rsquo;ll be doing some tests and will then integrate the
project into the ODIN Unity SDK.</p>
<p><a href='https://github.com/4Players/odin-networking-demo' target='' class="btn btn-primary">Download ODIN Networking SDK</a></p>
`}),e.add({id:3746,href:"https://www.4players.io/blog/4players-releases-odin-unity-sdk-v1.1/",title:"ODIN Unity SDK updated to v1.1",section:"4Players Blog",description:"Version 1.1 fixes bugs and improves usability.",content:`<p>ODIN Unity SDK 1.1.0 was released on September 1st 2022. You&rsquo;ll find the latest version of the SDK in our
<a href="https://github.com/4Players/odin-sdk-unity/releases">Github repository</a>.</p>
<h2 id="general">General</h2>
<ul>
<li>Core SDK has been updated to version <strong>1.0.1</strong> (<a href="https://github.com/4Players/odin-sdk/releases/tag/v1.0.1">details</a>)</li>
<li>Added options to adjust microphone input volume</li>
<li>URL to 4Players admin panel has been updated</li>
</ul>
<h2 id="api-changes">API Changes</h2>
<ul>
<li>Added <code>MicrophoneReader.GetVolumeScale</code></li>
<li>Added <code>MicrophoneReader.GetAveragedVolume</code></li>
<li>Added <code>MicrophoneReader.SetVolume</code></li>
<li>Renamed <code>MediaStream.IsMuted</code> to <code>MediaStream.IsPaused</code></li>
</ul>
<h2 id="bugfixes--improvements">Bugfixes / Improvements</h2>
<ul>
<li>Fixed an issue where the activity state of the local media stream was not updated</li>
</ul>
<p><a href='/odin/guides/unity/' class="btn btn-primary">Get Started with Unity today</a></p>
`}),e.add({id:3747,href:"https://www.4players.io/blog/safety-in-technology/",title:"Safety in Technology",section:"4Players Blog",description:"Patty Toledo describes why dedicated servers might be a solution for not only technical issues but for society in general.",content:`<p>There is nothing more frustrating for gamers than experiencing lags and lost files. An immediate solution for those
issues is dedicated servers. If we are talking about harassment and privacy issues, private dedicated servers might be
the best response available at the moment.</p>
<p>In a time where safety and privacy in gaming are huge topics for discussion, we can’t help but think about private
dedicated servers, AI moderation and voice-changing technologies, especially for online multiplayer gaming experiences.
According to Forbes, over 60% of gamers, adults and minors, have suffered from some kind of harassment in online gaming.
The most exposed groups are women, Black Americans and Asian Americans. Over 50% of gamers try or succeed in hiding
their identities to avoid harassment.</p>
<p>In the US alone, 91% of the kids between two and 17 years old are playing video games. In the UK, 82% of children
between 12 and 15 years old play games online, and the next generation is being brought up in full digital, online,
interactive environments. This is amazingly great news, and terrifying at the same time.</p>
<p>Game rage is a real thing – fully documented and widely researched. From griefing, doxing, and swatting to all kinds of
hate speech and aggressive behaviour, the danger is substantial and has real physical and mental consequences. Games are
wonderful social tools and must be truly nurtured as such, but they can also pose grave threats to our youth. With the
metaverse and full digital lives advancing, these threats need to be taken seriously and averted whenever possible.</p>
<p>Besides cyberbullying, privacy problems and data leaks, other dangers to be considered in online gaming are misuse of
webcams, malware and online predators. It is not a surprise that many groups advocate that online gaming is harmful to
their youth, but the truth is that those dangers are not only in gaming. These dangers are everywhere online and games
are just the conduit for positive and negative alike.</p>
<p>So what can be done? Are there solutions available? We are not saying that we are 100% safe yet, but we are going
in the right direction. AI moderation, both in voice, text and images, data privacy, voice changing technology, and
private dedicated servers are some of these solutions. At 4Players, these issues are taken seriously and we are
constantly looking for the best partners to fill all the gaps. We believe that it is possible to create safe and
immersive gaming environments where our youth can learn to act in a positive way, while enjoying positive life
experiences.</p>
`}),e.add({id:3748,href:"https://www.4players.io/blog/voice-chat-sdk-odin-available-in-unreal-marketplace/",title:"Voice-Chat SDK ODIN in Unreal Marketplace",section:"4Players Blog",description:"Our large scale client server based Voice SDK is now available in the Unreal Marketplace",content:`<p><a href="/odin/">ODIN</a> is now available in the
<a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">Unreal Marketplace</a>. Head over to
download and install the SDK for free.</p>
<p>You can download, install and use the SDK for free for up to <strong>25</strong> concurrent users by either generating a free
access key in our <a href="/odin/introduction/access-keys/">developer documentation</a> or directly in the
Unreal Editor using a simple blueprint.</p>
<p>We must thank the Unreal Marketplace team that were super fast in responding and did an amazing job of getting our
SDK in record time into their Marketplace.</p>
<p><a href='https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk' target='' class="btn btn-primary">Download in Unreal Engine Marketplace</a></p>
<h2 id="using-the-plugin">Using the plugin</h2>
<p>The source-code of the plugin is freely available in our <a href="">Github repository</a> and we have created a guide to get
your started quickly.</p>
<p><a href='/odin/sdk/unreal/manual/' class="btn btn-primary">Unreal Engine Manual</a></p>
<p>We also have created an extensive Blueprint Reference Documentation that describes every node that ODIN offers in
great detail and provides complete Blueprints for you to Copy &amp; Paste into your existing project.</p>
<p><a href='/odin/sdk/unreal/blueprint-reference/' class="btn btn-primary">Unreal Engine Blueprint Reference</a></p>
<p><strong>We can&rsquo;t wait to see what you are developing with ODIN on the amazing Unreal Engine</strong>. Please
<a href="mailto:odin@4players.io">contact sales</a> if you need additional information on pricing and get in touch with our
<a href="/company/contact_us/">Customer Success Team</a> if you want to be part of our &ldquo;Showcase&rdquo;.</p>
`}),e.add({id:3749,href:"https://www.4players.io/blog/we-live-in-two-worlds/",title:"We live in two worlds",section:"4Players Blog",description:"Patty Toledo describes why 4Players products matter and how we attend to make the world a better place.",content:`<p>Our physical life is full of challenges, struggles and heartbreak. There are a lot of great things that happen, but they
are mostly out of our hands. Opportunities are not dished out fairly, and most of us won’t live our “dream life” in the
physical world.</p>
<p>Our digital life, however, can be flawless. We can be anything we want, and our fantasies can come true in the
<a href="/solutions/metaverse">metaverse</a> / digital world. We can have the career we always dreamed of, the respect we always
craved, and the deserved recognition for our accomplishments.</p>
<p>As technology advances at an astonishing pace, so does our immersion into digital life. Although there are a tonne of
moral and social issues in the metaverse to be considered, let&rsquo;s, for now, focus on the emotional implications of
immersion in the digital world.</p>
<p>Human beings need to be social. We need conversation, to exchange ideas and share our fears. Some individuals are more
physical than others, but the concept of contact still remains. Sensory deprivation experiments have shown subjects
becoming disoriented, having difficulty concentrating, being unable to solve problems, and some radical cases even
experienced auditory and visual hallucinations. Our senses play a huge role in our well-being.</p>
<p>If the pandemic has shown us anything, it’s that being isolated can be emotionally harmful. But even though we
acknowledge that, we are still focusing continuously on our digital lives. The reasons vary. Nevertheless, it’s clear
that we can’t ignore the path we are walking on.</p>
<p>The technological tools that will allow us to truly immerse ourselves in the digital world will be crucial for our
experiences and well-being. This is why what we do at 4Players is so important. Everyone online needs servers to remain
connected and safe. Data protection is another important factor for us, deserving of a full blog dedicated to it. With
<a href="/voice-chat">ODIN</a>, we offer a full 3D sound and voice experience in the easiest way possible. We apply the full
capabilities that
<a href="/odin/sdk/unity">Unity</a> and <a href="/odin/sdk/unreal">Unreal Engine</a> already offer for best results, making life easier for
developers.</p>
<p>As visual technology advances in strides, it is time to do the same with #audio technology. It’s one step closer to a
full-on immersive experience. For many developers, sound has been put in the background, as a second-thought feature.
Voice is not even considered as there are so many challenges to face in implementation and safety. But ignoring its
importance to the full experience is a mistake.</p>
<p>As developers, we want to help the players to have varied emotional reactions to our creations, and to feel the urge to
return to them, and play them over and over again. We are still not there when it comes to having all five senses
engaged in the digital world, but why not assure our community gets the most of it?</p>
<p>To learn how we can help to integrate immersive voice chat and sound experiences into your game, visit <a href="https://www.4players.io">www.4players.io</a>
or send us a message.</p>
`}),e.add({id:3750,href:"https://www.4players.io/blog/4players-releases-odin-core-sdk-to-v1.0.1/",title:"ODIN Core SDK updated to v1.0.1",section:"4Players Blog",description:"This version fixes some issues we had with the Unreal Engine SDK",content:`<p>Today we released version 1.0.1 of the <a href="/odin/sdk/c/">Core SDK</a>.</p>
<h2 id="bugfixes--improvements">Bugfixes / Improvements</h2>
<ul>
<li>Fixed an issue with conflicting symbols for Unreal Engine builds</li>
</ul>
`}),e.add({id:3751,href:"https://www.4players.io/blog/4players-releases-odin-unreal-sdk-to-production/",title:"ODIN Unreal Engine SDK Is Available",section:"4Players Blog",description:"4Players announces the ODIN SDK release for both Unreal Engine 4 and 5.",content:`<p>We are thrilled to announce that we released our ODIN <a href="/odin/sdk/unreal/">Unreal Engine SDK</a>
completing support for all major public game engines used in production today.</p>
<p>You can download the latest release right here:</p>
<p><a href="https://github.com/4Players/odin-sdk-unreal/releases">https://github.com/4Players/odin-sdk-unreal/releases</a></p>
<p><img src="/images/odin/odin_blog06.jpg" alt="4Players ODIN"></p>
<p>With ODIN, you can add support for real-time voice chat embedded directly into your game supporting 3D spatial audio.
You can even join multiple rooms at once, combining 3D spatial voice chat with radio type voice chat.</p>
<p>That is all you have to do to add ODIN to your game. Hover over the image, click the <code>Copy</code> button and paste it into
your Level Blueprint. <a href="/odin/introduction/access-keys/">Set your own Access Key</a> in the <code>Access Key</code>
variable and press Play.</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_sample_complete.jpg"
         alt="The blueprint that we&amp;rsquo;ll create"/><figcaption>
            <p>The blueprint that we&rsquo;ll create</p>
        </figcaption>

    
    
</figure>

<p>Check out our <a href="/odin/sdk/unreal/">Unreal Engine SDK</a> for more details and work through our getting
started guide. You can copy generate an access key for free without signing up. Copy Blueprints directly in your game
and you&rsquo;ll be up and running in a couple of minutes!</p>
<p><a href='/odin/guides/unreal/' class="btn btn-primary">Get Started with Unreal today</a></p>
`}),e.add({id:3752,href:"https://www.4players.io/blog/4players-releases-odin-unity-sdk-to-production/",title:"ODIN Unity SDK Is Available",section:"4Players Blog",description:"User interaction is vital to building thriving communities so start adding voice chat into your Unity game now.",content:`<p>A few days after launching our <a href="/odin/sdk/c/">Core SDK</a> to <a href="/blog/4players-releases-odin-to-production/">production</a>,
we also launch version <strong>1.0</strong> of our <a href="/odin/sdk/unity/">Unity SDK</a>. Its battle-tested, stable and super easy to integrate into new or existing games.</p>
<p>In contrast to relying on external apps, integrating comms right into the game allows creating unique, ultra-realistic and immersive gaming experiences. Using
features like spatial audio and custom filters, there are no limits to creativity. Plus, there is absolutely no interference with existing technology you might use.</p>
<p>We have guides for adding <a href="/odin/guides/unity/pun-sample/">it to Photon based games</a> or <a href="/odin/guides/unity/unity-mirror/">games built with Mirror Networking</a>.</p>
<p>Download our <a href="/odin/sdk/unity/">Unity SDK</a> today and give it a shot! You&rsquo;ll not regret it.</p>
<p><a href="https://github.com/4Players/odin-sdk-unity/releases">https://github.com/4Players/odin-sdk-unity/releases</a></p>
<p><img src="/images/odin/odin_unity_editor.jpg" alt="4Players ODIN"></p>
<p>Here&rsquo;s a full list of changes and improvements:</p>
<h2 id="general">General</h2>
<ul>
<li>Core SDK has been updated to version <strong>1.0.0</strong> (<a href="https://github.com/4Players/odin-sdk/releases/tag/v1.0.0">details</a>)</li>
<li>Native bindings where updated to reflect the latest SDK changes</li>
<li>Internal media IDs were removed from the API in favor of media stream handles</li>
<li>Overall audio quality and performance has been improved dramatically</li>
</ul>
<h2 id="api-changes">API Changes</h2>
<ul>
<li>Added <code>Room.UpdateRoomUserData</code></li>
<li>Updated functions to use <code>IUserData</code> interface more effectively</li>
<li>Renamed <code>Room.UpdateUserData</code> to <code>Room.UpdatePeerUserData</code></li>
<li>Renamed <code>ApmConfig</code> option <code>OdinNoiseSuppressionLevel</code> to <code>NoiseSuppressionLevel</code> for sake of consistency</li>
<li>Replaced <code>MediaId</code> with <code>MediaStreamId</code> in <code>OnMediaAdded</code>, <code>OnMediaRemoved</code> and <code>OnMediaActiveStateChanged</code> event arguments</li>
<li>Added <code>OnConnectionStateChanged</code> event</li>
</ul>
<p><a href='/odin/guides/unity/' class="btn btn-primary">Get Started with Unity today</a></p>
`}),e.add({id:3753,href:"https://www.4players.io/blog/4players-releases-odin-to-production/",title:"ODIN Is With Us!",section:"4Players Blog",description:"After five months in open beta, 4Players is pleased to release 1.0 of the ODIN SDK to the wild.",content:`<p>Today is the day. After two years of development and more than five months of open beta, 4Players GmbH is pleased to
announce the immediate availability of the ODIN Core SDK version <strong>1.0</strong>. Major updates to our engine integration plugins
for <a href="/odin/sdk/unity/">Unity</a> and both <a href="/odin/sdk/unity/">Unreal Engine</a> 4 and 5 will be
released to production within the next couple of days.</p>
<p>The latest version can be found here:</p>
<p><a href="https://github.com/4Players/odin-sdk/releases">https://github.com/4Players/odin-sdk/releases</a></p>
<p><img src="/images/odin/odin_blog01.jpg" alt="4Players ODIN"></p>
<p>ODIN is the result from years of expertise and experience and built from the ground up using the popular Rust programming
language. 4Players combines business and industry insight with a very modern technology stack to drive growth for your
businesses. We took a lot of effort to make sure developers can focus their time and resources on building the game they
envisioned.</p>
<p>Real-time communication is essential for a fun, immersive gaming experience. This is why our dedicated development team is
creating a powerful set of tools that make games more immersive, social and interactive. With ODIN, 4Players provides a complete,
out-of-the-box solution that has been designed and built from the ground up for gamers, developers and publishers so they don&rsquo;t
need to spend valuable resources designing a comms solution on their own.</p>
<p>Privacy and security is very important to us. ODIN is completely user agnostic and we don’t harvest any data or tell you how
things should work or look.</p>
<p>Don&rsquo;t hesitate and be among the first studios to integrate ODIN today! You can find a set of both both static and dynamic libraries
as well as a single C header file in our public repository on <a href="https://www.github.com/4players/odin-sdk">Github</a>.</p>
<p>Many thanks to all our partners, beta testers and supporters!</p>
<p>ODIN <strong>1.0</strong> comes with numerous improvements and new features such as:</p>
<h2 id="general">General</h2>
<ul>
<li>Improved overall reliability by adding an internal mechanism to re-establish a connection to the ODIN server on timeouts</li>
<li>Updated <a href="https://github.com/4Players/odin-sdk/tree/master/test">test console client</a> to properly handle reconnects</li>
<li>Removed the internal media ID from the API in favor of media handles (internal IDs can still be retrieved using
<code>odin_media_stream_media_id</code> for reference while the media stream is added to a connected room)</li>
</ul>
<h2 id="new-features">New Features</h2>
<ul>
<li>Added a generic resampler for situations where your audio pipeline doesn&rsquo;t support 48 kHz (one resampler instance
should be used exclusively per audio stream)</li>
</ul>
<h2 id="api-changes">API Changes</h2>
<ul>
<li>Added <code>odin_resampler_create</code></li>
<li>Added <code>odin_resampler_process</code></li>
<li>Added <code>odin_resampler_destroy</code></li>
<li>Added <code>odin_room_close</code> to ensure a clean disconnect before calling <code>odin_room_destroy</code></li>
<li>Changed type of <code>OdinReturnCode</code> from unsigned to signed integers</li>
<li>Replaced <code>media_id</code> and <code>stream</code> properties with <code>media_handle</code> in <code>Media*</code> event data</li>
<li>Removed unused <code>None</code> event tag</li>
</ul>
<h2 id="bugfixes--improvements">Bugfixes / Improvements</h2>
<ul>
<li>Fixed a bug where <code>odin_audio_mix_streams</code> was only outputting the last media stream</li>
<li>Fixed a possible deadlock when calling API functions within event handlers</li>
<li>Added missing null terminator to room ID and customer strings</li>
</ul>
`}),e.add({id:3755,href:"https://www.4players.io/blog/indie-campus-cologne-successful-conference-debut/",title:"Indie Campus – Cologne: Successful conference debut",section:"4Players Blog",description:"4Players and Indie Hub are very satisfied with the premiere of the indie event and are already planning the next edition",content:`<p><strong>4Players and Indie Hub are very satisfied with the premiere of the indie event and are already planning the next
edition.</strong></p>
<p>The first <a href="http://www.indiecampus.de">Indie Campus</a> organized by <a href="http://www.indiehub.de">Indie Hub</a> and
4Players in close cooperation with <a href="https://koeln.business/">KölnBusiness</a> and <a href="https://hello.atypiclabs.com/">Atypic Labs</a>
from Québec, was a complete success. On September 14 and 15, 2021, more than 30 speakers joined the online event, making
themselves available for talks and roundtable discussions to a very inquisitive audience.</p>
<p>The speakers, including best-selling author, Emmy® winner, and developer Don Daglow (a.o. Neverwinter Nights, Stronghold,
The Lord of the Rings: The Two Towers), Dominik Lauf (CPO, Magenta Gaming), Seren Besorak (Co-Founder &amp; CEO, TriTrie
Games), Tomas Sala (The Falconeer) or Kai Schober (Community Manager, Bethesda) gave the audience not only open insights
into their wealth of experience, but also many suggestions on the areas of retention and monetization in games. From
blockchain usage in games to the necessity of a publisher, hints on how to go from 0 to almost 1,000,000 followers, the
importance of community management as well as valuable design advice up to a wrap-up of TriTrie Games&rsquo; thematically
challenging &lsquo;Jessika&rsquo;, a wide range of topics were covered and enjoyed throughout.</p>
<p>###Next Indie Campus in 2022
Given the positive feedback during and after the event, Indie Hub and 4Players have agreed to extend their collaboration
in the future. The next Indie Campus is already being planned and is expected to take place in spring 2022. In addition,
other events tailored specifically to the needs of indie developers will take place at irregular intervals, the details
of which will be announced at a later date.</p>
<p>Marc Berekoven, Head of Business Development 4Players: &ldquo;<em>On behalf of 4Players, we would like to thank everyone who
helped making the first Indie Campus a success. Together with Indie Hub, dedicated volunteers, KölnBusiness and the
international support of Atypic Labs, we were able to present great speakers with interesting topics over two jam-packed
days. The indie developer scene has grown a little closer through the Indie Campus, not only on a national, but also on
an international level. We hope that the more than 1,000 spectators were able to take away numerous suggestions and
ideas from the talks as well as roundtable discussions. We are already looking forward to the next edition.</em>&rdquo;</p>
<p>Stefan Schmidt, Co-Founder of Indie Hub, adds: &ldquo;<em>We couldn&rsquo;t be happier that Indie Campus - Cologne was such a great
success! Our special thanks go especially to my team and KölnBusiness, who have supported and encouraged us since
the very first minute. And even though the theme of the next Indie Campus is yet to be announced, we can already
say that we will shed light on other important topics for indie teams around the world. But until then, we will of
course continue to offer a monthly roundtable and the <a href="https://indiegamefest.de/">Indie Game Fest</a> in November</em>.&rdquo;.</p>
`}),e.add({id:3756,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/add-media-to-room/",title:"Add Media To Room",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_node_add-media-to-room.webp"
         alt="Add Media To Room"/>
</figure>
<p>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.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The user must have joined the room before adding media. Use the <a href="/odin/sdk/unreal/blueprint-reference/room/join-room">Join Room</a> 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.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room to which the media will be added.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Media</td>
                        <td class="blueprint-description">
The media which should be added. <a href="/odin/sdk/unreal/blueprint-reference/audio-capture/construct-local-media">Construct Local Media</a> can be used to create a media object.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Error</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Delegate to handle errors while adding a media to a room.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Success</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Called when the media has been successfully added to the room. See <a href="/odin/sdk/unreal/blueprint-reference/events/on-add-media-to-room-success">On Media Added Success</a> event for details.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 On Response</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">
Called when the gateway has returned its response. Use the <code>success</code> output to understand if anything went fine.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
<code>true</code> if the media has been successfully joined.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3757,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/",title:"Add Odin Synth Component",section:"ODIN Documentation",description:"Adds the Odin Synth Component to the specified actor.",content:`<figure><img src="/images/odin/unreal/bp_add_odin_synth_component.png"
         alt="Add Odin Synth Component"/>
</figure>
<p>Adds the Odin Synth Component to the specified actor.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Actor Object Reference</td>
                        <td class="blueprint-description">
The Actor to which the Odin Synth Component will be added.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Manual Attachment</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Relative Transform</td>
                            <td class="blueprint-type">Transform</td>
                        <td class="blueprint-description">
The relative transform of the component to the target actor.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Odin Synth Component</td>
                        <td class="blueprint-description">
Returns the <code>Odin Synth Component</code> that will output audio from the media stream assigned by the <a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/odin-assign-synth-to-media">Odin Assign Synth to Media</a> node.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3758,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/adjust-attenuation/",title:"Adjust Attenuation",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_adjust_attenuation.webp"
         alt="Adjust Attenuation"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Odin Synth Component</td>
                        <td class="blueprint-description">
The Odin Synth Component to call this function on.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 In Attenuation Settings</td>
                            <td class="blueprint-type">FSoundAttenuationSettings</td>
                        <td class="blueprint-description">
The attenuation settings to apply to the targeted ODIN Synth instance.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3759,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/adjust-attenuation/",title:"Adjust Attenuation",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_adjust_attenuation.webp"
         alt="Adjust Attenuation"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Odin Synth Component</td>
                        <td class="blueprint-description">
The Odin Synth Component to call this function on.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 In Attenuation Settings</td>
                            <td class="blueprint-type">FSoundAttenuationSettings</td>
                        <td class="blueprint-description">
The attenuation settings to apply to the targeted ODIN Synth instance.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3760,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/",title:"Audio Capture",section:"ODIN Documentation",description:"An index of all Audio Capture available in our Unreal Engine Plugin",content:`<p>Our Unreal Engine Plugin contains these Audio Capture Blueprints:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/construct-local-media/">Construct Local Media</a></td>
<td>Creates a media object that will be used in the <see cref="addMediaToRoom">Add Media To Room</see> node input. Connect an <code>Audio Capture</code> or <code>Odin Audio Capture</code> object to it.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-capture-devices-available/">Get Capture Devices Available</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-current-audio-capture-device/">Get Current Audio Capture Device</a></td>
<td>Returns info on the current capture device.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/change-capture-device-by-id/">Change Capture Device By Id</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/change-capture-device-by-name/">Change Capture Device By Name</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/restart-capturing/">Restart Capturing</a></td>
<td>Restart the stream, using CurrentSelectedDeviceIndex as the new input.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/">Get and Set Is Paused</a></td>
<td>Get Is Capturing Paused: Returns whether the audio capture is paused. Set Is Capturing Paused: Sets the paused state of the audio capture.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/on-capture-device-reset/">On Capture Device Reset</a></td>
<td>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 <code>AllowedTimeWithoutStreamUpdate</code> seconds before trying a stream restart. You can set the <code>AllowedTimeWithoutStreamUpdate</code> parameter on the Odin Audio Capture Object.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/audio-capture/on-default-device-changed/">On Default Device Changed</a></td>
<td>Will be called if the Default Device is the currently selected device and if the Default Device was switched by the system.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3761,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-connection-state-changed/",title:"Bind to On Connection State Changed",section:"ODIN Documentation",description:"Listens to on `Connection State Changed` events from the given Room object and calls the connected event handler of type  On Connection Changed .",content:`<figure><img src="/images/odin/unreal/bp_on_connection_changed_node.jpg"
         alt="Bind to On Connection State Changed"/>
</figure>
<p>Listens to on <code>Connection State Changed</code> events from the given Room object and calls the connected event handler of type <a href="/odin/sdk/unreal/blueprint-reference/events/on-connection-state-changed">On Connection Changed</a>.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be checked. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect a <a href="/odin/sdk/unreal/blueprint-reference/events/on-connection-state-changed">On Connection State Changed Event</a> to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3762,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-added/",title:"Bind to On Media Added",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_media_added_node.jpg"
         alt="Bind to On Media Added"/>
</figure>
<p>Listens for <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added">On Media Added</a> events in the given Room object. <code>On Media Added</code> events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to an <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added">On Media Added</a> to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3763,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed/",title:"Bind to On Media Removed",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_media_removed_node.jpg"
         alt="Bind to On Media Removed"/>
</figure>
<p>Listens to <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-removed">On Media Removed</a> events in the given Room. <code>On Media Removed</code> will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-removed">On Media Removed</a> event to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3764,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-message-received/",title:"Bind to On Message Received",section:"ODIN Documentation",description:"Listens to  On Message Received  events in the given Room object. `On Message Received` events will be triggered whenever another peer has sent a message.",content:`<figure><img src="/images/odin/unreal/bp_node_bind_on_message_received.png"
         alt="Bind to On Message Received"/>
</figure>
<p>Listens to <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">On Message Received</a> events in the given Room object. <code>On Message Received</code> events will be triggered whenever another peer has sent a message.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/events/on-message-received">On Message Received</a> event to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3765,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined/",title:"Bind to On Peer Joined",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_peer_joined_node.jpg"
         alt="Bind to On Peer Joined"/>
</figure>
<p>Listens to <code>Peer Joined</code> events in the given Room object. <code>Peer Joined</code> 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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect a <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-joined">Peer Joined Event</a> to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3766,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-left/",title:"Bind to On Peer Left",section:"ODIN Documentation",description:"Listens on `Peer Left` events on the given Room object which will be called whenever a peer left the room. Is not called for the local player.",content:`<figure><img src="/images/odin/unreal/bp_on_peer_left_node.jpg"
         alt="Bind to On Peer Left"/>
</figure>
<p>Listens on <code>Peer Left</code> events on the given Room object which will be called whenever a peer left the room. Is not called for the local player.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to an <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-left">On Peer Left Event</a> to handle <code>Peer Left</code> event calls.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3767,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-user-data-changed/",title:"Bind to On Peer User Data Changed",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_peer_user_data_changed_node.jpg"
         alt="Bind to On Peer User Data Changed"/>
</figure>
<p>Listens to <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-user-data-changed">Peer User Data Changed</a> events for the given Room object. <code>Peer User Data Changed</code> events will be called whenever a peer updates their user data. Is not called for the local player.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-user-data-changed">Peer User Data Changed Event</a> to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3768,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-joined/",title:"Bind to On Room Joined",section:"ODIN Documentation",description:"Listens on `Room Joined` events on the given Room object and calls the connected  Room Joined Event  handler.",content:`<figure><img src="/images/odin/unreal/bp_on_room_joined_node.jpg"
         alt="Bind to On Room Joined"/>
</figure>
<p>Listens on <code>Room Joined</code> events on the given Room object and calls the connected <a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined">Room Joined Event</a> handler.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect a <a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined">Room Joined Event</a> to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3769,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-user-data-changed/",title:"Bind to On Room User Data Changed",section:"ODIN Documentation",description:"Bind to `Room User Data Changed` events in the given Room.",content:`<figure><img src="/images/odin/unreal/bp_on_room_user_data_changed_node.jpg"
         alt="Bind to On Room User Data Changed"/>
</figure>
<p>Bind to <code>Room User Data Changed</code> events in the given Room.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room for which events will be triggered. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node to create that Room object reference.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Event</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect an <a href="/odin/sdk/unreal/blueprint-reference/events/on-room-user-data-changed">On Room User Data Changed Event</a> to handle this event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3770,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/change-capture-device-by-id/",title:"Change Capture Device By Id",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_change_capture_device_by_id.webp"
         alt="Change Capture Device By Id"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 New Device Id</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
The id of the targeted capture device.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Change Completed (Async Only)</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Callback for when the change result is available. Used only in the async version.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
Whether or not the capture device was successfully changed. This is for the synchronous version only.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3771,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/change-capture-device-by-name/",title:"Change Capture Device By Name",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_change_capture_device_by_name.webp"
         alt="Change Capture Device By Name"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type name"></span>
 Device Name</td>
                            <td class="blueprint-type">name</td>
                        <td class="blueprint-description">
The name of the targeted capture device. Needs to be an exact match.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Change Completed (Async Only)</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Callback for when the change result is available. Used only in the async version.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
Whether or not the capture device was successfully changed. This is for the synchronous version only.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3772,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/construct-a-token-generator/",title:"Construct a Token Generator",section:"ODIN Documentation",description:"Creates a token generator that is used to generate room tokens on client side. ",content:`<figure><img src="/images/odin/unreal/bp_node_generate_token_generator.jpg"
         alt="Construct a Token Generator"/>
</figure>
<p>Creates a token generator that is used to generate room tokens on client side.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>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!</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Access Key</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Token Generator</td>
                        <td class="blueprint-description">
The constructed token generator object. Connect to <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token">Generate Room Token</a> to generate a room token.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3773,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/construct-local-media/",title:"Construct Local Media",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_node_construct-local-media.webp"
         alt="Construct Local Media"/>
</figure>
<p>Creates a media object that will be used in the <a href="/odin/sdk/unreal/blueprint-reference/room/add-media-to-room">Add Media To Room</a> node input. Connect an <code>Audio Capture</code> or <code>Odin Audio Capture</code> object to it.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Use the <a href="https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AudioCapture/CreateAudioCapture/">Create Audio Capture</a> or <a href="/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture">Create Odin Audio Capture</a> node to get access to the microphone on the users device. Make sure that the <code>Audio Capture</code> Plugin is enabled. You’ll find it in the Audio section of the Plugin Manager.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Audio Capture</td>
                            <td class="blueprint-type">Audio Capture Object Reference</td>
                        <td class="blueprint-description">
The audio capture object reference.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Odin Capture Media Object Reference</td>
                        <td class="blueprint-description">
A reference to the constructed Odin Capture Media object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3774,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/",title:"Construct Local Room Handle",section:"ODIN Documentation",description:"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`.",content:`<figure><img src="/images/odin/unreal/bp_node_construct-local-room-handle.webp"
         alt="Construct Local Room Handle"/>
</figure>
<p>Creates a local room object that will be used to handle events and client side connection settings. Connect the <code>Room</code> output to the <code>Room</code> input of the <a href="/odin/sdk/unreal/blueprint-reference/room/join-room">Join Room</a> node. You can also use the <code>Room</code> output to handle events like <code>Room Joined</code> or <code>Media Added</code>.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Initial APM Settings</td>
                            <td class="blueprint-type">APMSettings</td>
                        <td class="blueprint-description">
The initial APM settings to use when constructing the room. Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/make-odin-apm-settings">Make APM Settings</a> node to create initial APM Settings.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The constructed room object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3775,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture/",title:"Create Odin Audio Capture",section:"ODIN Documentation",description:"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](https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AudioCapture/CreateAudioCapture/), like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the `Audio Capture` Plugin is enabled.",content:`<figure><img src="/images/odin/unreal/bp_node_create-odin-audio-capture.webp"
         alt="Create Odin Audio Capture"/>
</figure>
<p>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 <a href="https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AudioCapture/CreateAudioCapture/">Audio Capture</a>, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the <code>Audio Capture</code> Plugin is enabled.</p>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Odin Audio Capture Object Reference</td>
                        <td class="blueprint-description">
A reference to the constructed Odin Audio Capture object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3776,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/delegates/",title:"Delegates",section:"ODIN Documentation",description:"An index of all Delegates available in our Unreal Engine Plugin",content:`<p>Our Unreal Engine Plugin contains these Delegates Blueprints:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-connection-state-changed/">Bind to On Connection State Changed</a></td>
<td>Listens to on <code>Connection State Changed</code> events from the given Room object and calls the connected event handler of type <see cref="connectionChangedEvent">On Connection Changed</see>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-joined/">Bind to On Room Joined</a></td>
<td>Listens on <code>Room Joined</code> events on the given Room object and calls the connected <see cref="roomJoinedEvent">Room Joined Event</see> handler.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-user-data-changed/">Bind to On Room User Data Changed</a></td>
<td>Bind to <code>Room User Data Changed</code> events in the given Room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined/">Bind to On Peer Joined</a></td>
<td>Listens to <code>Peer Joined</code> events in the given Room object. <code>Peer Joined</code> events will be called whenever a peer joins the room. Will not be called for the local player. Use the <see cref="onRoomJoined">On Room Joined</see> event to handle joins from the local player instead.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-left/">Bind to On Peer Left</a></td>
<td>Listens on <code>Peer Left</code> events on the given Room object which will be called whenever a peer left the room. Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-user-data-changed/">Bind to On Peer User Data Changed</a></td>
<td>Listens to <see cref="peerUserDataChangedEvent">Peer User Data Changed</see> events for the given Room object. <code>Peer User Data Changed</code> events will be called whenever a peer updates their user data. Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-added/">Bind to On Media Added</a></td>
<td>Listens for <see cref="mediaAddedEvent">On Media Added</see> events in the given Room object. <code>On Media Added</code> events will be called whenever a peer has added a media (i.e. activated the microphone). Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed/">Bind to On Media Removed</a></td>
<td>Listens to <see cref="mediaRemovedEvent">On Media Removed</see> events in the given Room. <code>On Media Removed</code> will be called whenever a peer has removed a media (i.e. muted the microphone). Is not called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-message-received/">Bind to On Message Received</a></td>
<td>Listens to <see cref="ConstructRoom">On Message Received</see> events in the given Room object. <code>On Message Received</code> events will be triggered whenever another peer has sent a message.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3777,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/destroy-local-room-handle/",title:"Destroy Local Room Handle",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_destroy_local_room_handle.webp"
         alt="Destroy Local Room Handle"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room object whose connection to the server will be closed and handle destroyed.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3778,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/",title:"Events",section:"ODIN Documentation",description:"An index of all Events available in our Unreal Engine Plugin",content:`<p>Our Unreal Engine Plugin contains these Events Blueprints:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-add-media-to-room-success/">On Add Media To Room Success</a></td>
<td>This event is triggered in the <see cref="addMediaToRoom">Add Media To Room</see> function once the media has been added to the room successfully.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-connection-state-changed/">On Connection State Changed</a></td>
<td>Handles <code>Connection State Changed</code> events which are called when the connection state changed (i.e. a disconnect to the server). Connect a <see cref="bindToOnConnectionChanged">Bind to On Connection State Changed</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined/">On Room Joined</a></td>
<td>Handles <code>Room Joined</code> events which are called once the local user has successfully joined a room. Connect a <see cref="bindToOnRoomJoined">Bind to On Room Joined</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-room-user-data-changed/">On Room User Data Changed</a></td>
<td>Called whenever the user data of the room changed. Connect a <see cref="bindToOnRoomUserDataChanged">Bind to On Room User Data Changed</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-joined/">On Peer Joined</a></td>
<td>Called whenever a peer joins the room. Connect a <see cref="bindToOnPeerJoined">Bind to On Peer Joined</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-left/">On Peer Left</a></td>
<td>Called whenever a peer leaves the room. Connect to a <see cref="bindToOnPeerLeft">Bind to On Peer Left</see> node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-user-data-changed/">On Peer User Data Changed</a></td>
<td>Called whenever a peer has changed its user data. Connect to a <see cref="bindToOnPeerUserDataChanged">Bind to On Peer User Data Changed</see> node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/">On Media Added</a></td>
<td>Called whenever a peer has added a media (i.e. activated the microphone). Connect to a <see cref="bindToOnMediaAdded">Bind to On Media Added</see> delegate node to handle this event for the specified room. Will not be called for the local player.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-media-removed/">On Media Removed</a></td>
<td>Called whenever a peer has removed a media stream. Connect to a <see cref="bindToOnMediaRemoved">Bind to On Media Removed</see> delegate node to handle this event for the specified room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/events/on-message-received/">On Message Received</a></td>
<td>Called whenever another peer has sent a message. Connect to a <see cref="bindToOnMessageReceived">Bind to On Message Received</see> delegate node to handle this event for the specified room.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3779,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/format-error/",title:"Format Error",section:"ODIN Documentation",description:"Takes an ODIN error code and returns an error message a string which can be printed to the log. ",content:`<figure><img src="/images/odin/unreal/bp_node_format_error.jpg"
         alt="Format Error"/>
</figure>
<p>Takes an ODIN error code and returns an error message a string which can be printed to the log.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Code</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The error code.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Return Value</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
The error message for the code.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3780,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/",title:"Functions",section:"ODIN Documentation",description:"An index of all Functions available in our Unreal Engine Plugin",content:`<p>Our Unreal Engine Plugin contains these Functions Blueprints:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle/">Construct Local Room Handle</a></td>
<td>Creates a local room object that will be used to handle events and client side connection settings. Connect the <code>Room</code> output to the <code>Room</code> input of the <see cref="joinRoom">Join Room</see> node. You can also use the <code>Room</code> output to handle events like <code>Room Joined</code> or <code>Media Added</code>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/make-odin-apm-settings/">Make ODIN APM Settings</a></td>
<td>Creates an APM settings object that can be used to construct a local room handle.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/">Generate Room Token</a></td>
<td>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´)</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/construct-a-token-generator/">Construct a Token Generator</a></td>
<td>Creates a token generator that is used to generate room tokens on client side.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/create-odin-audio-capture/">Create Odin Audio Capture</a></td>
<td>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 <a href="https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/AudioCapture/CreateAudioCapture/">Audio Capture</a>, like enabling capture device switching on supported platforms or improved Push-To-Talk features. Please make sure, that the <code>Audio Capture</code> Plugin is enabled.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/format-error/">Format Error</a></td>
<td>Takes an ODIN error code and returns an error message a string which can be printed to the log.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/generate-access-key/">Generate Access Key</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/">Add Odin Synth Component</a></td>
<td>Adds the Odin Synth Component to the specified actor.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/get-and-set-volume-multiplier/">Get and Set Volume Multiplier</a></td>
<td>GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device&rsquo;s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device&rsquo;s input.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/functions/get-and-set-max-volume-multiplier/">Get and Set Max Volume Multiplier</a></td>
<td>GetMaxVolumeMultiplier: Retrieves the current maximum volume multiplier value. SetMaxVolumeMultiplier: Sets the new maximum volume multiplier value.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3781,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/generate-access-key/",title:"Generate Access Key",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_node_generate_access_key.jpg"
         alt="Generate Access Key"/>
</figure>
<p>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.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>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 <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token">Generate Room Token</a> node.</p>
</div>
</div>

<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Return Value</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
The access key for up to <strong>25 peak concurrent users</strong> (PCU) per day. Connect to a log function to output the access key and then use that access key as input for the <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token">Generate Room Token</a> node.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3782,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/generate-room-token/",title:"Generate Room Token",section:"ODIN Documentation",description:"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´)",content:`<figure><img src="/images/odin/unreal/bp_node_generate_room_token.webp"
         alt="Generate Room Token"/>
</figure>
<p>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´)</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Token Generator</td>
                        <td class="blueprint-description">
Use the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-a-token-generator">Construct Token Generator</a> node to generate a token generator.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Room Id</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
The room id to generate a token for. Every user connected to the same room can talk to each other and exchange data.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 User Id</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type enum"></span>
 Token Audience</td>
                            <td class="blueprint-type">enum</td>
                        <td class="blueprint-description">
The enum value of the token audience. Possible values are <code>Default</code> (for using a gateway) or <code>Single Server</code> (for using a specific Odin server without a gateway).
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Return Value</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
Returns a room token that can be used to join a room.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3783,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/get-and-set-is-paused/",title:"Get and Set Is Paused",section:"ODIN Documentation",description:"Get Is Capturing Paused: Returns whether the audio capture is paused. Set Is Capturing Paused: Sets the paused state of the audio capture.",content:`<figure><img src="/images/odin/unreal/bp_get_set_is_paused.webp"
         alt="Get and Set Is Paused"/>
</figure>
<p>Get Is Capturing Paused: Returns whether the audio capture is paused. Set Is Capturing Paused: Sets the paused state of the audio capture.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Use these Nodes, if you’d like to implement Push-To-Talk or Mute Functionality. The Is Paused state is optimized for this use case.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Is Capturing Paused</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
The new paused state to set. Only used in Set Is Capturing Paused.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Is Capturing Paused</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
The current paused state. Only used in Get Is Capturing Paused.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3784,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/get-and-set-max-volume-multiplier/",title:"Get and Set Max Volume Multiplier",section:"ODIN Documentation",description:"GetMaxVolumeMultiplier: Retrieves the current maximum volume multiplier value. SetMaxVolumeMultiplier: Sets the new maximum volume multiplier value.",content:`<figure><img src="/images/odin/unreal/bp_get_set_max_volume_multiplier.webp"
         alt="Get and Set Max Volume Multiplier"/>
</figure>
<p>GetMaxVolumeMultiplier: Retrieves the current maximum volume multiplier value. SetMaxVolumeMultiplier: Sets the new maximum volume multiplier value.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This value will cap the <a href="/odin/sdk/unreal/blueprint-reference/functions/get-and-set-volume-multiplier">Volume Multiplier</a> value. The default value is <code>3.0</code>.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">OdinCaptureMedia</td>
                        <td class="blueprint-description">
The Odin Capture Media object whose max volume multiplier is being retrieved or set.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Max Volume Multiplier</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
The new max volume multiplier value to set. Used only in SetMaxVolumeMultiplier.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Max Volume Multiplier</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
The current maximum volume multiplier. Returned only by GetMaxVolumeMultiplier.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3785,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/get-and-set-volume-multiplier/",title:"Get and Set Volume Multiplier",section:"ODIN Documentation",description:"GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device's input. SetVolumeMultiplier: Sets the volume multiplier for the capture device's input.",content:`<figure><img src="/images/odin/unreal/bp_get_set_volume_multiplier.webp"
         alt="Get and Set Volume Multiplier"/>
</figure>
<p>GetVolumeMultiplier: Retrieves the current volume multiplier of the capture device&rsquo;s input. SetVolumeMultiplier: Sets the volume multiplier for the capture device&rsquo;s input.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>For security reasons, the volume multiplier is capped to the range [0, MaxVolumeMultiplier]. The maximum volume multiplier defaults to <code>3.0</code>. To change the maximum volume multiplier, use the <a href="/odin/sdk/unreal/blueprint-reference/functions/get-and-set-max-volume-multiplier">Set Max Volume Multiplier</a> function.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">OdinCaptureMedia</td>
                        <td class="blueprint-description">
The Odin Capture Media object whose volume multiplier is being retrieved or set.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Volume Multiplier</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
The new volume multiplier to set. Used only in SetVolumeMultiplier.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Volume Multiplier</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
The current volume multiplier. Returned only by GetVolumeMultiplier.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3786,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/get-capture-devices-available/",title:"Get Capture Devices Available",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_get_capture_devices_available.webp"
         alt="Get Capture Devices Available"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Result (Async Only)</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Callback for when the result is available. Used only in the async version.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array object"></span>
 Out Devices</td>
                            <td class="blueprint-type">Array of object</td>
                        <td class="blueprint-description">
All available capture devices. This is the output for both synchronous and asynchronous versions.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3787,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-connected-playback-media/",title:"Get Connected Playback Media",section:"ODIN Documentation",description:"Retrieves the playback media stream pointer that was assigned to this synth component.",content:`<figure><img src="/images/odin/unreal/bp-get-connected-playback-media.png"
         alt="Get Connected Playback Media"/>
</figure>
<p>Retrieves the playback media stream pointer that was assigned to this synth component.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Self</td>
                            <td class="blueprint-type">Odin Synth Component</td>
                        <td class="blueprint-description">
The Odin Synth Component object to call this function on.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Odin Playback Media</td>
                        <td class="blueprint-description">
The connected Odin Playback Media object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3788,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/get-current-audio-capture-device/",title:"Get Current Audio Capture Device",section:"ODIN Documentation",description:"Returns info on the current capture device.",content:`<figure><img src="/images/odin/unreal/bp_get_current_audio_capture_device.webp"
         alt="Get Current Audio Capture Device"/>
</figure>
<p>Returns info on the current capture device.</p>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Current Device</td>
                            <td class="blueprint-type">OdinCaptureDeviceInfo</td>
                        <td class="blueprint-description">
Info on the current capture device.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3789,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-id/",title:"Get Output Media Id",section:"ODIN Documentation",description:"Get the media ID of an output media",content:`<figure><img src="/images/odin/unreal/bp-get-output-media-id.png"
         alt="Get Output Media Id"/>
</figure>
<p>Get the media ID of an output media</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Self</td>
                            <td class="blueprint-type">Odin Playback Media</td>
                        <td class="blueprint-description">
The Odin Playback Media object to call this function on.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Return Value</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The media ID of the Odin Playback Media object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3790,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-peer-id/",title:"Get Output Media Peer Id",section:"ODIN Documentation",description:"Get the peer ID of an output media",content:`<figure><img src="/images/odin/unreal/bp-get-output-media-peer-id.png"
         alt="Get Output Media Peer Id"/>
</figure>
<p>Get the peer ID of an output media</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Self</td>
                            <td class="blueprint-type">Odin Playback Media</td>
                        <td class="blueprint-description">
The Odin Playback Media object to call this function on.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Return Value</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The peer ID of the Odin Playback Media object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3791,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-stats/",title:"Get Output Media Stats",section:"ODIN Documentation",description:"Get statistics for an output media",content:`<figure><img src="/images/odin/unreal/bp-get-output-media-stats.png"
         alt="Get Output Media Stats"/>
</figure>
<p>Get statistics for an output media</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Self</td>
                            <td class="blueprint-type">Odin Playback Media</td>
                        <td class="blueprint-description">
The Odin Playback Media object to call this function on.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">Odin Audio Stream Stats</td>
                        <td class="blueprint-description">
The Odin Audio Stream Stats of the Odin Playback Media object.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3792,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/get-room-connection-stats/",title:"Get Room Connection Stats",section:"ODIN Documentation",description:"Get statistics for a room connection. This function provides detailed information about the connection status and metrics in an ODIN room.",content:`<figure><img src="/images/odin/unreal/bp_connection_stats.webp"
         alt="Get Room Connection Stats"/>
</figure>
<p>Get statistics for a room connection. This function provides detailed information about the connection status and metrics in an ODIN room.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The Room object to call this function on.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Connection Stats</td>
                            <td class="blueprint-type">OdinConnectionStats</td>
                        <td class="blueprint-description">
The statistics for the room connection.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3793,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/join-room/",title:"Join Room",section:"ODIN Documentation",description:"Joins an ODIN room with the room token provided. Every peer connected to the same room will be able to talk to each other and exchange data.",content:`<figure><img src="/images/odin/unreal/bp_node_join_room.webp"
         alt="Join Room"/>
</figure>
<p>Joins an ODIN room with the room token provided. Every peer connected to the same room will be able to talk to each other and exchange data.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
Connect the Room instance created by the <a href="/odin/sdk/unreal/blueprint-reference/functions/construct-local-room-handle">Construct local room handle</a> node. This room handle will later be used to handle events.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Url</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
The url to the ODIN gateway. Typically this is <code><a href="https://gateway.odin.4players.io">https://gateway.odin.4players.io</a></code>.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type string"></span>
 Token</td>
                            <td class="blueprint-type">string</td>
                        <td class="blueprint-description">
The token you created with the <a href="/odin/sdk/unreal/blueprint-reference/functions/generate-room-token">Generate Room Token</a> node.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 Initial Peer User Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type vector"></span>
 Initial Peer Position</td>
                            <td class="blueprint-type">vector</td>
                        <td class="blueprint-description">
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 <a href="/odin/sdk/unreal/blueprint-reference/room/update-peer-position">Update Peer Position</a> node for more information and to update the position later on.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Error</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Success</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Called when the room has been successfully joined.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 On Response</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">
Called when the gateway has returned its response. The <code>success</code> output indicates whether the room was successfully joined.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
<code>true</code> if the room has been successfully joined.
</td>
        </tr>
        </tbody>
</table>
<h2 id="discussion">Discussion</h2>
<p>Once you have joined the room, a sequence of events is created. You can learn more about these events <a href="/odin/introduction/structure/">here</a>.</p>
<p>To handle these events create a <code>Bind to ....</code> node and connect that to your <code>Room</code> node created earlier in
<code>Construct local room handle</code> node.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you cannot find the <code>Bind to ....</code> node (for example <code>Bind to Room Joined Event</code>), you need to disable the context
filter in the blueprint node selection dialog.</p>
</div>
</div>

`}),e.add({id:3794,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/make-odin-apm-settings/",title:"Make ODIN APM Settings",section:"ODIN Documentation",description:"Creates an APM settings object that can be used to construct a local room handle.",content:`<figure><img src="/images/odin/unreal/bp_node_make_apm_settings_v2.png"
         alt="Make ODIN APM Settings"/>
</figure>
<p>Creates an APM settings object that can be used to construct a local room handle.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Enable Voice Activity Detection</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Attack Probability</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
Voice probability value when the VAD should engage.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Release Probability</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
Voice probability value when the VAD should disengage. It’s recommended to keep this value 0.1 lower than the attack probability.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Enable Volume Gate</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Attack Loudness (D BFS)</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
Root mean square power (dBFS) when the volume gate should engage.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Release Loudness (D BFS)</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
Root mean square power (dBFS) when the volume gate should disengage. It’s recommended to keep this value 10 lower than the attack loudness.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Echo Canceller</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
When enabled, aligns the original and the reverse audio stream to negate the output inside the input, resulting in effective echo cancellation
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 High Pass Filter</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
When enabled, the high-pass filter will remove low-frequency content from the input audio signal, thus making it sound cleaner and more focused.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Pre Amplifier</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
When enabled, the preamplifier will boost the signal of sensitive microphones by taking really weak audio signals and making them louder.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type enum"></span>
 Noise Suppression</td>
                            <td class="blueprint-type">enum</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Transient Suppression</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
When enabled, the transient suppressor will try to detect and attenuate keyboard clicks.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Gain Controller</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
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.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Return Value</td>
                            <td class="blueprint-type">APMSettings</td>
                        <td class="blueprint-description">
The constructed APM settings object.
</td>
        </tr>
        </tbody>
</table>
<h2 id="discussion">Discussion</h2>
<p>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.</p>
<p>In environments with high background noise, it&rsquo;s essential to prevent this noise from being transmitted. To address this, we offer two key settings:</p>
<h3 id="voice-activity-detection">Voice Activity Detection</h3>
<p>Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It&rsquo;s recommended to keep this feature enabled.</p>
<p>The AI model operates on a probability scale ranging from <code>0.0</code> to <code>1.0</code>, where <code>0.0</code> indicates zero likelihood of voice presence, and <code>1.0</code> signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.</p>
<p>Optimal settings are generally <code>0.9</code> for Attack (90% certainty of voice) and <code>0.8</code> for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of <code>0.1</code>.</p>
<p>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.</p>
<p>Here, the Volume Gate filter proves useful:</p>
<h3 id="volume-gate">Volume Gate</h3>
<p>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.</p>
<p>Understanding this concept might be initially complex. A useful resource is <a href="https://en.wikipedia.org/wiki/DBFS">Wikipedia on DBFS</a>.</p>
<p>It&rsquo;s generally advisable to disable this feature initially. A starting points for settings could be <code>-40</code> for Release and <code>-30</code> for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of <code>10</code>. For further assistance, please feel free to contact our support team.</p>
`}),e.add({id:3795,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/odin-assign-synth-to-media/",title:"Odin Assign Synth to Media",section:"ODIN Documentation",description:"Assign a media stream coming with the `Media Added` event to the `Odin Synth Component` which will generate audio output from the incoming stream.",content:`<figure><img src="/images/odin/unreal/bp_node_assign-odin-synth-component-to-media.webp"
         alt="Odin Assign Synth to Media"/>
</figure>
<p>Assign a media stream coming with the <code>Media Added</code> event to the <code>Odin Synth Component</code> which will generate audio output from the incoming stream.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Odin Synth Component Object Reference</td>
                        <td class="blueprint-description">
The Odin Synth Component that you either get from an Actor using the <code>GetComponentByClass</code> node or from the <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component">Add Odin Synth Component</a> node.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Media Object Reference</td>
                        <td class="blueprint-description">
The media stream to be assigned to the <code>Odin Synth Component</code>. You’ll get that from the <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added">Media Added</a> event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3796,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/odin-assign-synth-to-media/",title:"Odin Assign Synth to Media",section:"ODIN Documentation",description:"Assign a media stream coming with the `Media Added` event to the `Odin Synth Component` which will generate audio output from the incoming stream.",content:`<figure><img src="/images/odin/unreal/bp_node_assign-odin-synth-component-to-media.webp"
         alt="Odin Assign Synth to Media"/>
</figure>
<p>Assign a media stream coming with the <code>Media Added</code> event to the <code>Odin Synth Component</code> which will generate audio output from the incoming stream.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Odin Synth Component</td>
                        <td class="blueprint-description">
The Odin Synth Component that you either get from an Actor using the <code>GetComponentByClass</code> node or from the <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component">Add Odin Synth Component</a> node.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Media Object Reference</td>
                        <td class="blueprint-description">
The media stream to be assigned to the <code>Odin Synth Component</code>. You’ll get that from the <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added">Media Added</a> event.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3797,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/",title:"Odin Synth Component",section:"ODIN Documentation",description:"An index of all Odin Synth Component available in our Unreal Engine Plugin",content:`<p>Our Unreal Engine Plugin contains these Odin Synth Component Blueprints:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/odin-assign-synth-to-media/">Odin Assign Synth to Media</a></td>
<td>Assign a media stream coming with the <code>Media Added</code> event to the <code>Odin Synth Component</code> which will generate audio output from the incoming stream.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/reset-odin-media/">Reset Odin Media</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/adjust-attenuation/">Adjust Attenuation</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-connected-playback-media/">Get Connected Playback Media</a></td>
<td>Retrieves the playback media stream pointer that was assigned to this synth component.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-stats/">Get Output Media Stats</a></td>
<td>Get statistics for an output media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-id/">Get Output Media Id</a></td>
<td>Get the media ID of an output media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/get-output-media-peer-id/">Get Output Media Peer Id</a></td>
<td>Get the peer ID of an output media</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/resume-playback-media/">Resume Playback Media</a></td>
<td>Resume the specified playback media handle, re-initiating the reception of data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/odin-synth-component/pause-playback-media/">Pause Playback Media</a></td>
<td>Pause the specified playback media handle, stopping the reception of data.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3798,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-add-media-to-room-success/",title:"On Add Media To Room Success",section:"ODIN Documentation",description:"This event is triggered in the  Add Media To Room  function once the media has been added to the room successfully.",content:`<figure><img src="/images/odin/unreal/bp_on_add_media_success.jpg"
         alt="On Add Media To Room Success"/>
</figure>
<p>This event is triggered in the <a href="/odin/sdk/unreal/blueprint-reference/room/add-media-to-room">Add Media To Room</a> function once the media has been added to the room successfully.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Bind to a <a href="/odin/sdk/unreal/blueprint-reference/room/add-media-to-room">Add Media To Room</a> <code>On Success</code> delegate node to get this event triggered once the media has been added to the room.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Media Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The media id added to the room.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3799,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/on-capture-device-reset/",title:"On Capture Device Reset",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_capture_device_reset.webp"
         alt="On Capture Device Reset"/>
</figure>
<p>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 <code>AllowedTimeWithoutStreamUpdate</code> seconds before trying a stream restart. You can set the <code>AllowedTimeWithoutStreamUpdate</code> parameter on the Odin Audio Capture Object.</p>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Capture Device Change</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
A dynamic multicast delegate that is called when the capture device needs to be reset.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3800,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-connection-state-changed/",title:"On Connection State Changed",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_connection_changed_event.jpg"
         alt="On Connection State Changed"/>
</figure>
<p>Handles <code>Connection State Changed</code> events which are called when the connection state changed (i.e. a disconnect to the server). Connect a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-connection-state-changed">Bind to On Connection State Changed</a> delegate node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-connection-state-changed">Bind to On Onnection State Changed</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Bind to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-connection-state-changed">Bind to On Connection State Changed</a> delegate node to get this event triggered once the room has been joined.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type enum"></span>
 Connection State</td>
                            <td class="blueprint-type">enum</td>
                        <td class="blueprint-description">
The enum value of the connection state. Possible values are <code>Disconnected</code>, <code>Disconnecting</code>, <code>Connecting</code>, <code>Connected</code>.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference for which the connection changed event occured.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3801,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/on-default-device-changed/",title:"On Default Device Changed",section:"ODIN Documentation",description:"Will be called if the Default Device is the currently selected device and if the Default Device was switched by the system.",content:`<figure><img src="/images/odin/unreal/bp_on_default_device_changed.webp"
         alt="On Default Device Changed"/>
</figure>
<p>Will be called if the Default Device is the currently selected device and if the Default Device was switched by the system.</p>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Capture Device Change</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
A dynamic multicast delegate that is called when the default capture device changes.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3802,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-media-added/",title:"On Media Added",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_media_added_event.jpg"
         alt="On Media Added"/>
</figure>
<p>Called whenever a peer has added a media (i.e. activated the microphone). Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-added">Bind to On Media Added</a> delegate node to handle this event for the specified room. Will not be called for the local player.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-added">Bind to On Media Added</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-added">Bind to On Media Added</a> delegate node to get this event triggered once a peer has added a media object.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that added the media.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Media Object Reference</td>
                        <td class="blueprint-description">
An object reference to the media added to the room for the peer. Assign this media object to an <code>Odin Synth Component</code> for audio to be played in-game.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Properties</td>
                            <td class="blueprint-type">Properties Object Reference</td>
                        <td class="blueprint-description">
Properties of the media object.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference for which the event was triggered.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3803,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-media-removed/",title:"On Media Removed",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_media_removed_event.jpg"
         alt="On Media Removed"/>
</figure>
<p>Called whenever a peer has removed a media stream. Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed">Bind to On Media Removed</a> delegate node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed">Bind to On Media Removed</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Bind to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed">Bind to On Media Removed</a> delegate node to get this event triggered once a peer has removed a media object.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that removed the media.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Media Object Reference</td>
                        <td class="blueprint-description">
An object reference to the media removed from the room.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference that the media was removed from.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3804,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-message-received/",title:"On Message Received",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_node_on_message_received.png"
         alt="On Message Received"/>
</figure>
<p>Called whenever another peer has sent a message. Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-message-received">Bind to On Message Received</a> delegate node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-media-removed">Bind to On Media Removed</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-message-received">Bind to On Message Received</a> delegate node to get this event triggered when another peer sent a message.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that sent the message.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
The message payload data as an array of bytes.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference of the room the message was sent in.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3805,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-peer-joined/",title:"On Peer Joined",section:"ODIN Documentation",description:"Called whenever a peer joins the room. Connect a  Bind to On Peer Joined  delegate node to handle this event for the specified room.",content:`<figure><img src="/images/odin/unreal/bp_node_on-peer-joined-event.webp"
         alt="On Peer Joined"/>
</figure>
<p>Called whenever a peer joins the room. Connect a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined">Bind to On Peer Joined</a> delegate node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined">Bind to On Peer Joined</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Bind to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-joined">Bind to On Peer Joined</a> delegate node to get this event triggered once a peer has joined the room.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that joined the room. This is the <code>self</code> peer id, i.e. the peer id of the local player.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 User Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
The user data of the peer as an array of bytes
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference for which the event was triggered.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3806,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-peer-left/",title:"On Peer Left",section:"ODIN Documentation",description:"Called whenever a peer leaves the room. Connect to a  Bind to On Peer Left  node to handle this event for the specified room.",content:`<figure><img src="/images/odin/unreal/bp_on_peer_left_event.jpg"
         alt="On Peer Left"/>
</figure>
<p>Called whenever a peer leaves the room. Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-left">Bind to On Peer Left</a> node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-left">Bind to On Peer Left</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-left">Bind to On Peer Left</a> delegate node to get this event triggered once a peer has left the room.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that joined the room.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference for which the event was triggered.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3807,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-peer-user-data-changed/",title:"On Peer User Data Changed",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_peer_user_data_changed_event.jpg"
         alt="On Peer User Data Changed"/>
</figure>
<p>Called whenever a peer has changed its user data. Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-user-data-changed">Bind to On Peer User Data Changed</a> node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-user-data-changed">Bind to On Peer User Data Changed</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-peer-user-data-changed">Bind to On Peer User Data Changed</a> node to get this event triggered once a peer has left the room.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that joined the room.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 User Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
The updated user data of the peer as an array of bytes.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference for which the event was triggered.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3808,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-room-joined/",title:"On Room Joined",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_room_joined_event.jpg"
         alt="On Room Joined"/>
</figure>
<p>Handles <code>Room Joined</code> events which are called once the local user has successfully joined a room. Connect a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-joined">Bind to On Room Joined</a> delegate node to handle this event for the specified room.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The resulting peer id is only valid in the context of this room. This event will only be called for the local user.</p>
</div>
</div>





<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-joined">Bind to On Room Joined</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Call the <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-joined">Bind to On Room Joined</a> node to get this event triggered once the room has been joined.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type integer"></span>
 Peer Id</td>
                            <td class="blueprint-type">integer</td>
                        <td class="blueprint-description">
The id of the peer that joined the room. This is the <code>self</code> peer id, i.e. the peer id of the local player. This peer id is only valid in the context of this room!
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 Room User Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
The user data stored in the room for the peer as an array of bytes.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Odin Room Object Reference</td>
                        <td class="blueprint-description">
The Odin Room to which the peer joined.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3809,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/events/on-room-user-data-changed/",title:"On Room User Data Changed",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_on_room_user_data_changed_event.jpg"
         alt="On Room User Data Changed"/>
</figure>
<p>Called whenever the user data of the room changed. Connect a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-user-data-changed">Bind to On Room User Data Changed</a> delegate node to handle this event for the specified room.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>There might be issues if you create the event manually. Instead, drop a <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-user-data-changed">Bind to On Room User Data Changed</a> 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 <code>Add Custom Event</code>. Unreal will create the correct event for you then.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 Delegate</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Connect to the <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-room-user-data-changed">Bind to On Room User Data Changed</a> node to get this event triggered once a peer has left the room.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 User Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
The updated user data of the room as an array of bytes.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room Object Reference</td>
                        <td class="blueprint-description">
The Room object reference for which the Room User Data was changed.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3810,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/pause-playback-media/",title:"Pause Playback Media",section:"ODIN Documentation",description:"Pause the specified playback media handle, stopping the reception of data.",content:`<figure><img src="/images/odin/unreal/bp-pause-playback-media.png"
         alt="Pause Playback Media"/>
</figure>
<p>Pause the specified playback media handle, stopping the reception of data.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Odin Playback Media</td>
                        <td class="blueprint-description">
The Odin Playback Media object to call this function on.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Error</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Delegate to handle errors while pausing a Odin Playback Media.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Success</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Called when the Odin Playback Media has been successfully paused.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 On Response</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">
Called when the server has returned its response. The <code>success</code> output indicates whether the Odin Playback Media object was successfully paused.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
<code>true</code> Odin Playback Media object has been successfully paused.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3811,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/reset-odin-media/",title:"Reset Odin Media",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_reset_odin_media.webp"
         alt="Reset Odin Media"/>
</figure>
<p>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.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Odin Synth Component</td>
                        <td class="blueprint-description">
The Odin Synth Component to call this function on.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3812,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/audio-capture/restart-capturing/",title:"Restart Capturing",section:"ODIN Documentation",description:"Restart the stream, using CurrentSelectedDeviceIndex as the new input.",content:`<figure><img src="/images/odin/unreal/bp_restart_capturing.webp"
         alt="Restart Capturing"/>
</figure>
<p>Restart the stream, using CurrentSelectedDeviceIndex as the new input.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Automatically Start Capture</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
If true, the capture will automatically start. Defaults to true.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Return</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
Returns true if the capturing restarts successfully.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3813,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/odin-synth-component/resume-playback-media/",title:"Resume Playback Media",section:"ODIN Documentation",description:"Resume the specified playback media handle, re-initiating the reception of data.",content:`<figure><img src="/images/odin/unreal/bp-resume-playback-media.png"
         alt="Resume Playback Media"/>
</figure>
<p>Resume the specified playback media handle, re-initiating the reception of data.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Media</td>
                            <td class="blueprint-type">Odin Playback Media</td>
                        <td class="blueprint-description">
The Odin Playback Media object to call this function on.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Error</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Delegate to handle errors while resuming a Odin Playback Media.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Success</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Called when the Odin Playback Media has been successfully resumed.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 On Response</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">
Called when the server has returned its response. The <code>success</code> output indicates whether the Odin Playback Media object was successfully resumed.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
<code>true</code> Odin Playback Media object has been successfully resumed.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3814,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/",title:"Room",section:"ODIN Documentation",description:"An index of all Room available in our Unreal Engine Plugin",content:`<p>Our Unreal Engine Plugin contains these Room Blueprints:</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/join-room/">Join Room</a></td>
<td>Joins an ODIN room with the room token provided. Every peer connected to the same room will be able to talk to each other and exchange data.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/add-media-to-room/">Add Media To Room</a></td>
<td>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.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/set-room-position-scale/">Set Room Position Scale</a></td>
<td>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&rsquo;s that are outside of hearing range.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/update-peer-position/">Update Peer Position</a></td>
<td>Updates the position of the own peer in the room. You have to set the scale beforehand via <see cref="setRoomPositionScale">Set Room Position Scale</see>.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/send-message/">Send Message</a></td>
<td>Sends arbitrary data to a list of target peers to an ODIN room. Every peer connected to the same room will be able to receive the message.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/get-room-connection-stats/">Get Room Connection Stats</a></td>
<td>Get statistics for a room connection. This function provides detailed information about the connection status and metrics in an ODIN room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/set-room-apm-config/">Set Room APM Config</a></td>
<td>Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/set-room-apm-stream-delay/">Set Room APM Stream Delay</a></td>
<td>Updates the delay estimate in ms for reverse stream used in echo cancellation. This function modifies the delay settings for a specific room.</td>
</tr>
<tr>
<td><a href="/odin/sdk/unreal/blueprint-reference/room/destroy-local-room-handle/">Destroy Local Room Handle</a></td>
<td>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.</td>
</tr>
</tbody>
</table>
`}),e.add({id:3815,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/send-message/",title:"Send Message",section:"ODIN Documentation",description:"Sends arbitrary data to a list of target peers to an ODIN room. Every peer connected to the same room will be able to receive the message.",content:`<figure><img src="/images/odin/unreal/bp_node_send_message.png"
         alt="Send Message"/>
</figure>
<p>Sends arbitrary data to a list of target peers to an ODIN room. Every peer connected to the same room will be able to receive the message.</p>




<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Use <a href="/odin/sdk/unreal/blueprint-reference/delegates/bind-to-on-message-received">Bind to On Message Received</a> node to receive messages sent from other peers.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room in which the message is sent.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array int64"></span>
 Targets</td>
                            <td class="blueprint-type">Array of int64</td>
                        <td class="blueprint-description">
List of targeted peer ids. If not specified, the message will be sent to all other peers in the same room.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type array byte"></span>
 Data</td>
                            <td class="blueprint-type">Array of byte</td>
                        <td class="blueprint-description">
Message data can be anything. This enables you to easily exchange data between peers directly over the Odin server.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Error</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Delegate to handle errors when sending a message.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Success</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Called when the message has been successfully sent.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 On Response</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">
Called when the server has returned its response. Use the <code>success</code> value to check if the message has been successfully sent.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
<code>true</code> if the message has been successfully sent.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3816,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/functions/set-room-apm-config/",title:"Set Room APM Config",section:"ODIN Documentation",description:"Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.",content:`<figure><img src="/images/odin/unreal/bp_update_apm_config.webp"
         alt="Set Room APM Config"/>
</figure>
<p>Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room object where the audio processing settings will be updated.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 APM Config</td>
                            <td class="blueprint-type">FOdinApmSettings</td>
                        <td class="blueprint-description">
The audio processing settings to be applied.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3817,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/set-room-apm-config/",title:"Set Room APM Config",section:"ODIN Documentation",description:"Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.",content:`<figure><img src="/images/odin/unreal/bp_update_apm_config.webp"
         alt="Set Room APM Config"/>
</figure>
<p>Updates audio processing settings for capture media handles in a specific room. This function allows modification of various audio processing parameters for a room.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room object where the audio processing settings will be updated.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 APM Config</td>
                            <td class="blueprint-type">FOdinApmSettings</td>
                        <td class="blueprint-description">
The audio processing settings to be applied.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3818,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/set-room-apm-stream-delay/",title:"Set Room APM Stream Delay",section:"ODIN Documentation",description:"Updates the delay estimate in ms for reverse stream used in echo cancellation. This function modifies the delay settings for a specific room.",content:`<figure><img src="/images/odin/unreal/bp_update_apm_stream_delay.webp"
         alt="Set Room APM Stream Delay"/>
</figure>
<p>Updates the delay estimate in ms for reverse stream used in echo cancellation. This function modifies the delay settings for a specific room.</p>
<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room object where the APM stream delay will be updated.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type int64"></span>
 Delay In Ms</td>
                            <td class="blueprint-type">int64</td>
                        <td class="blueprint-description">
The delay estimate in milliseconds for the reverse stream used in echo cancellation.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3819,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/set-room-position-scale/",title:"Set Room Position Scale",section:"ODIN Documentation",description:"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.",content:`<figure><img src="/images/odin/unreal/bp_node_set_room_position_scale.png"
         alt="Set Room Position Scale"/>
</figure>
<p>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&rsquo;s that are outside of hearing range.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>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.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Target</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room for which the scale should be set.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type float"></span>
 Scale</td>
                            <td class="blueprint-type">float</td>
                        <td class="blueprint-description">
The value of the scale as float.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3820,href:"https://www.4players.io/odin/sdk/unreal/blueprint-reference/room/update-peer-position/",title:"Update Peer Position",section:"ODIN Documentation",description:"Updates the position of the own peer in the room. You have to set the scale beforehand via  Set Room Position Scale .",content:`<figure><img src="/images/odin/unreal/bp_node_update-peer-position.webp"
         alt="Update Peer Position"/>
</figure>
<p>Updates the position of the own peer in the room. You have to set the scale beforehand via <a href="/odin/sdk/unreal/blueprint-reference/room/set-room-position-scale">Set Room Position Scale</a>.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Important   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>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.</p>
</div>
</div>





<div class="box dark tip">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">  <i class="far fa-lightbulb"></i>  Tip     </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>This function is optional and only used for performance reasons and to save bandwidth. This is not needed to make spatial audio work.</p>
</div>
</div>

<h2 id="inputs">Inputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type object"></span>
 Room</td>
                            <td class="blueprint-type">Room</td>
                        <td class="blueprint-description">
The room in which the peer’s position shall be set.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type vector"></span>
 Position</td>
                            <td class="blueprint-type">vector</td>
                        <td class="blueprint-description">
The value of the position.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Error</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Delegate to handle errors while updating the position.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type delegate"></span>
 On Success</td>
                            <td class="blueprint-type">delegate</td>
                        <td class="blueprint-description">
Called when the position has been successfully updated.
</td>
        </tr>
        </tbody>
</table>
<h2 id="outputs">Outputs</h2>
<table class="blueprints">
    <thead>
    <tr>
        <th>Name</th>
        <th>Type</th>
        <th>Description</th>
    </tr>
    </thead>
    <tbody>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 Exec</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">

</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type exec"></span>
 On Response</td>
                            <td class="blueprint-type">exec</td>
                        <td class="blueprint-description">
Called when the server has returned its response. Use the ‘success’ value to check if the position has been successfully set.
</td>
        </tr>
            <tr>
            <td class="blueprint-name"><span class="unreal-type boolean"></span>
 Success</td>
                            <td class="blueprint-type">boolean</td>
                        <td class="blueprint-description">
<code>true</code> if the position has been successfully set.
</td>
        </tr>
        </tbody>
</table>
`}),e.add({id:3821,href:"https://www.4players.io/examples/odin/sdk/unity/classes/messagereceivedproxy/",title:"",section:"Examples",description:"",content:`<p>The callback proxy for <span class="external-reference">OnMessageReceived <a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/"><i class="fas fa-external-link-alt"></i></a></span>
 callback functions. You&rsquo;ll receive the sender of the message
in the <code>object</code> parameter and details about the message in a <span class="external-reference">MessageReceivedEventArgs <a href="/odin/sdk/unity/classes/messagereceivedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 class instance.</p>
`}),e.add({id:3822,href:"https://www.4players.io/examples/odin/sdk/unreal/blueprint-reference/join-room/",title:"",section:"Examples",description:"",content:`<p>Once you have joined the room, a sequence of events is created. You can learn more about these events <a href="/odin/introduction/structure/">here</a>.</p>
<p>To handle these events create a <code>Bind to ....</code> node and connect that to your <code>Room</code> node created earlier in
<code>Construct local room handle</code> node.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you cannot find the <code>Bind to ....</code> node (for example <code>Bind to Room Joined Event</code>), you need to disable the context
filter in the blueprint node selection dialog.</p>
</div>
</div>

`}),e.add({id:3823,href:"https://www.4players.io/examples/odin/sdk/unreal/blueprint-reference/make-odin-apm-settings/",title:"",section:"Examples",description:"",content:`<p>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.</p>
<p>In environments with high background noise, it&rsquo;s essential to prevent this noise from being transmitted. To address this, we offer two key settings:</p>
<h3 id="voice-activity-detection">Voice Activity Detection</h3>
<p>Our system utilizes a few milliseconds of audio to ascertain if the user is speaking by leveraging an advanced AI model. It&rsquo;s recommended to keep this feature enabled.</p>
<p>The AI model operates on a probability scale ranging from <code>0.0</code> to <code>1.0</code>, where <code>0.0</code> indicates zero likelihood of voice presence, and <code>1.0</code> signifies absolute certainty. Adjust the Attack and Release settings to define the probability thresholds for starting and stopping transmission.</p>
<p>Optimal settings are generally <code>0.9</code> for Attack (90% certainty of voice) and <code>0.8</code> for Release. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of <code>0.1</code>.</p>
<p>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.</p>
<p>Here, the Volume Gate filter proves useful:</p>
<h3 id="volume-gate">Volume Gate</h3>
<p>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.</p>
<p>Understanding this concept might be initially complex. A useful resource is <a href="https://en.wikipedia.org/wiki/DBFS">Wikipedia on DBFS</a>.</p>
<p>It&rsquo;s generally advisable to disable this feature initially. A starting points for settings could be <code>-40</code> for Release and <code>-30</code> for Attack. We recommend setting the Release value slightly lower than the Attack value, ideally maintaining an offset of <code>10</code>. For further assistance, please feel free to contact our support team.</p>
`}),e.add({id:3826,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/",title:"AddPlaybackComponent",section:"Examples",description:"AddPlaybackComponent Example",content:`<p>Creates a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 and attaches it to a GameObject. You can either provide a GameObject
tag or you can also provide a GameObject directly. The <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 is the audio
representation of a peer connected in an ODIN room. Use this function to create a <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

connected to the ODIN peer and attach it to the GameObject (i.e. the corresponding player object).</p>
<pre><code class="language-mermaid">graph LR;
    subgraph Unity Scene
        subgraph Player1 [Player 1]
            PBC1[PlaybackComponent]--&gt;GO1[GameObject]                   
        end
        subgraph Player2 [Player 2]
            PBC2[PlaybackComponent]--&gt;GO2[GameObject]
        end
        
    end
    subgraph ODON Server
        subgraph ODIN Room
            Peer1[Peer 1] --&gt; PBC1
            Peer2[Peer 2] --&gt; PBC2
        end    
    end    
    classDef blue fill:#DDFAFF
    class Player1,Player2 blue
</code></pre>
<p>The best place to call this function is in the callback <span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
 as you get all relevant info
in the callbacks parameters that you need when calling this function. Please see <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 for
more info on available settings.</p>
`}),e.add({id:3827,href:"https://www.4players.io/categories/",title:"Categories",section:"Categories",description:"",content:""}),e.add({id:3828,href:"https://www.4players.io/odin/sdk/swift/classes/",title:"Classes",section:"ODIN Documentation",description:"Classes for Swift iOS/iPadOS/macOS/tvOS/watchOS SDK",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odinaccesskey/">OdinAccessKey</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odinaudio/">OdinAudio</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odinmanager/">OdinManager</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odinmedia/">OdinMedia</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odinpeer/">OdinPeer</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odinroom/">OdinRoom</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/classes/odintoken/">OdinToken</a></li>
</span>
</ul>
`}),e.add({id:3829,href:"https://www.4players.io/fleet/cli/",title:"CLI Tool",section:"ODIN Fleet Documentation",description:"Get started with ODIN Fleet CLI and deploy your first game server.",content:`<p>ODIN Fleet provides a simple to ease CLI tool that allows you to interact with ODIN Fleet from your command line. It&rsquo;s
open-source and written in Deno and uses the TypeScript ODIN SDK internally.</p>
<h2 id="source-code">Source Code</h2>
<p>The CLI tool is open-source and available on GitHub. You can find the source code in the following repository:
<a href="https://github.com/4Players/fleet-cli">https://github.com/4Players/fleet-cli</a>.</p>
<h2 id="installation">Installation</h2>
<p>To install the CLI tool, you need to have Deno installed. You can install Deno by following the instructions on the
official Deno website: <a href="https://deno.land/">https://deno.land/</a>.</p>
<p>Next, run the following command to generate the CLI tool:</p>
<pre><code class="language-bash">deno task build
</code></pre>
<p>This will build a <code>odin</code> binary (or <code>odin.exe</code> on Windows) in the root of the project. You can move this binary to a
directory in your PATH to use it globally. On macOS and Linux you might need to run the following command to make the
binary executable:</p>
<pre><code class="language-bash">chmod +x odin
</code></pre>
<h2 id="development">Development</h2>
<p>You need to have <code>npm</code> installed on your system. You can install it by following the instructions on the official npm
website: <a href="https://www.npmjs.com/get-npm">https://www.npmjs.com/get-npm</a>.</p>
<p>If you want to work on the CLI tool, you can need to have <code>openapi-generator-cli</code> installed on your system. You can
install it by running the following command:</p>
<pre><code class="language-bash">npm install @openapitools/openapi-generator-cli -g
</code></pre>
<p>On Mac you can also use Homebrew to install the <code>openapi-generator-cli</code>.</p>
<pre><code class="language-bash">openapi-generator-cli version-manager set 7.3.0
</code></pre>
<h3 id="updating-the-underlying-sdk">Updating the underlying SDK</h3>
<p>To update the underlying SDK, you need to run the following command to make the script executable (if not done before):</p>
<pre><code class="language-bash">chmod +x generate-sdk.sh
</code></pre>
<p>Then run the script to generate the SDK:</p>
<pre><code class="language-bash">./generate-sdk.sh
</code></pre>
<p>This will generate the SDK from the OpenAPI specification file. The generated SDK will be placed in the <code>src/api</code>
directory. The CLI tool uses this SDK to interact with the ODIN APIs.</p>
<h3 id="testing-the-cli-tool">Testing the CLI tool</h3>
<p>To run the CLI tool in development mode, you can run the following command:</p>
<pre><code class="language-bash">deno run --allow-all src/main.ts
</code></pre>
<p>We use <code>--allow-all</code> because the CLI tool needs to access various system resources to work correctly:</p>
<ul>
<li><code>--allow-read</code> to read the configuration file</li>
<li><code>--allow-write</code> to write the configuration file</li>
<li><code>--allow-net</code> to make API requests</li>
<li><code>--allow-env</code> to read environment variables</li>
</ul>
<h3 id="building-the-cli-tool">Building the CLI tool</h3>
<p>To build the CLI tool, you can run the following command:</p>
<pre><code class="language-bash">deno task build
</code></pre>
<p>This will create a binary executable (i.e. odin on macOS and odin.exe on Windows) in the root of the project. You can
move this binary to a directory in your PATH to use it globally.</p>
`}),e.add({id:3830,href:"https://www.4players.io/fleet/guides/cli/",title:"CLI Tool",section:"ODIN Fleet Documentation",description:"Get started with ODIN Fleet CLI and deploy your first game server.",content:`<pre><code class="language-bash">&gt; odin fleet servers list
ID Region       City      Server Config        Address        Ports            Created  Status  
21 europe       limburg   Minecraft Production 51.77.85.52    Game Port: 30097 5.7.2024 running 
22 europe       limburg   Minecraft Production 51.77.85.52    Game Port: 30098 5.7.2024 running 
24 northamerica newyork   Minecraft Production 67.220.85.3    Game Port: 30100 5.7.2024 running 
25 asia         singapore Minecraft Production 15.235.216.107 Game Port: 30101 5.7.2024 running 
26 northamerica seattle   Minecraft Production 38.89.70.30    Game Port: 30102 5.7.2024 starting
Please note: Servers in intermediate states (e.g. starting, stopping) are not shown here.
&gt; |
</code></pre>
<p>ODIN Fleet provides a simple to ease CLI tool that allows you to interact with ODIN Fleet from your command line.
It&rsquo;s written in Deno and uses the TypeScript ODIN Fleet SDK internally.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>The CLI tool is still in development and new features are added regularly. If you have any feedback or feature requests,
please let us know. We are also working on a simpler way to install the CLI tool globally.</p>
</div>
</div>

<h2 id="installation">Installation</h2>
<p>Our CLI tool is open-source and available on GitHub. You can clone the repository and build the CLI tool yourself. We
are working on providing pre-built binaries for all platforms.</p>
<p>Github Repository: <a href="https://github.com/4Players/fleet-cli">https://github.com/4Players/fleet-cli</a></p>
<p>To install the CLI tool, you need to have Deno installed. You can install Deno by following the instructions on the
official Deno website: <a href="https://deno.land/">https://deno.land/</a>. Clone the repo on your workstation and navigate to the
project directory.</p>
<pre><code class="language-bash">git clone https://github.com/4Players/fleet-cli.git
cd fleet-cli
</code></pre>
<p>Next, run the following command to generate the CLI tool:</p>
<pre><code class="language-bash">deno task build
</code></pre>
<p>This will build a <code>odin</code> binary (or <code>odin.exe</code> on Windows) in the root of the project. You can move this binary to a
directory in your PATH to use it globally. On macOS and Linux you might need to run the following command to make the
binary executable:</p>
<pre><code class="language-bash">chmod +x odin
</code></pre>
<h2 id="development">Development</h2>
<p>You need to have <code>npm</code> installed on your system. You can install it by following the instructions on the official npm
website: <a href="https://www.npmjs.com/get-npm">https://www.npmjs.com/get-npm</a>.</p>
<p>If you want to work on the CLI tool, you can need to have <code>openapi-generator-cli</code> installed on your system. You can
install it by running the following command:</p>
<pre><code class="language-bash">npm install @openapitools/openapi-generator-cli -g
</code></pre>
<p>On Mac you can also use Homebrew to install the <code>openapi-generator-cli</code>.</p>
<pre><code class="language-bash">openapi-generator-cli version-manager set 7.3.0
</code></pre>
<h3 id="updating-the-underlying-sdk">Updating the underlying SDK</h3>
<p>To update the underlying SDK, you need to run the following command to make the script executable (if not done before):</p>
<pre><code class="language-bash">chmod +x generate-sdk.sh
</code></pre>
<p>Then run the script to generate the SDK:</p>
<pre><code class="language-bash">./generate-sdk.sh
</code></pre>
<p>This will generate the SDK from the OpenAPI specification file. The generated SDK will be placed in the <code>src/api</code> directory. The CLI tool uses this SDK to interact with the ODIN APIs.</p>
<h3 id="testing-the-cli-tool">Testing the CLI tool</h3>
<p>To run the CLI tool in development mode, you can run the following command:</p>
<pre><code class="language-bash">deno run --allow-all src/main.ts
</code></pre>
<p>We use <code>--allow-all</code> because the CLI tool needs to access various system resources to work correctly:</p>
<ul>
<li><code>--allow-read</code> to read the configuration file</li>
<li><code>--allow-write</code> to write the configuration file</li>
<li><code>--allow-net</code> to make API requests</li>
<li><code>--allow-env</code> to read environment variables</li>
</ul>
<h3 id="building-the-cli-tool">Building the CLI tool</h3>
<p>To build the CLI tool, you can run the following command:</p>
<pre><code class="language-bash">deno task build
</code></pre>
<h2 id="usage">Usage</h2>
<p>The CLI tool is designed to work in two scenarios:</p>
<ul>
<li>You are working in a terminal and can interact with the CLI tool (it will prompt for all missing information)</li>
<li>You are running the CLI tool in a CI/CD pipeline and need to provide all the necessary information as arguments</li>
</ul>
<h3 id="logging-in-and-selecting-an-application">Logging in and selecting an application</h3>
<p>First, you need to login to the ODIN API. You can do this by running the following command:</p>
<pre><code class="language-bash">odin login
</code></pre>
<p>You will be prompted to enter a valid access token. You can get an access token by logging into the dashboard, navigating to the settings section (click on the user profile at the top right and choose Settings from the drop-down menu). You will find the access token in the API section.</p>
<p>Copy an access token that you have generated and paste it into the terminal. The CLI tool will store the access token in a configuration file in your home directory (<code>~/.odin/config.json</code>).</p>
<p>You can also provide the access token as an argument to all commands (this overrides the stored access token and is useful in CI/CD scripts where you cannot prompt the user)</p>
<pre><code class="language-bash">odin fleet images list --accessToken=&lt;access-token&gt;
</code></pre>
<p>Next, you need to select an application to work with. You can list all the applications by running the following command:</p>
<pre><code class="language-bash">odin apps list
</code></pre>
<p>You will see a list of applications that you have access to. You can select an application by running the following command:</p>
<pre><code class="language-bash">odin apps select
</code></pre>
<p>You can also provide an application ID as an argument to all commands (this overrides the selected application and is
useful in CI/CD scripts where you cannot prompt the user)</p>
<pre><code class="language-bash">odin fleet images list --appId &lt;application-id&gt;
</code></pre>
<h3 id="working-with-the-cli-tool">Working with the CLI tool</h3>
<p>The CLI tool is designed to work with the ODIN APIs. You can list, create, update, and delete resources using the CLI tool. The CLI tool is designed to be self-explanatory, and you can get help by running the following command:</p>
<pre><code class="language-bash">odin --help
</code></pre>
<p>You can also get help for a specific command by running the following command:</p>
<pre><code class="language-bash">odin fleet --help
odin fleet images --help
</code></pre>
<h3 id="available-resources">Available Resources</h3>
<p>The following resources are available in the CLI tool:</p>
<ul>
<li><code>apps</code> - List, select, and create applications</li>
<li><code>fleet</code> - Manage ODIN Fleet resources</li>
<li><code>fleet images</code> - List, create, update, and delete ODIN Fleet images</li>
<li><code>fleet configs</code> - List, create, update, and delete ODIN Fleet server configurations</li>
<li><code>fleet deployments</code> - List, create, update, and delete ODIN Fleet deployments</li>
<li><code>fleet servers</code> - List, and work with ODIN Fleet servers that have been deployed</li>
</ul>
<p>Use the <code>--help</code> flag to get more information about each resource and the available commands.</p>
<h3 id="automation">Automation</h3>
<p>You can run commands that create, delete or update resources with the <code>--dry-run</code> flag. This will show you the API request that will be made without actually making the request. This is useful to see what the CLI tool will do before actually doing it and it also allows you to copy the API request and run it manually (and slightly modified) if needed. This way you can quickly create scripts for CI/CD. Manually interact with the CLI in <code>--dry-run</code> mode and then use the <code>--payload=</code> flag to run the same command with the payload you want to use.</p>
<h4 id="example">Example</h4>
<p>In this example we will create a new image for the ODIN Fleet. We will first run the command in <code>--dry-run</code> mode to see what the API request will look like:</p>
<pre><code class="language-bash">odin fleet images create --dry-run
</code></pre>
<p>The CLI will prompt for various information like the image name, description and which type of image to create. After entering all the information, the CLI will show you the payload that will be sent to the API. You can copy this payload and run the following command:</p>
<pre><code class="language-bash">odin fleet images create --payload='{&quot;name&quot;:&quot;my-image&quot;,&quot;version&quot;:&quot;0.4.2&quot;,&quot;type&quot;:&quot;dockerImage&quot;,....}}'
</code></pre>
`}),e.add({id:3832,href:"https://www.4players.io/company/",title:"Companies",section:"Companies",description:"",content:""}),e.add({id:3833,href:"https://www.4players.io/partials/connection-event-summary/unity/",title:"Connection Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnRoomJoin <a href="/odin/sdk/unity/classes/odinhandler/onroomjoin/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td></td>
<td>Triggered if user started to join a room</td>
</tr>
<tr>
<td><span class="external-reference">OnRoomJoined <a href="/odin/sdk/unity/classes/odinhandler/onroomjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user joined a room</td>
</tr>
</tbody>
</table>
<p>ODIN does not require any bookkeeping. A room is created automatically for the first connection and will be removed
whenever the last user left the room. You join a room by calling the <span class="external-reference">JoinRoom <a href="/odin/sdk/unity/classes/odinhandler/joinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 method of the
<span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
 instance in your scene.</p>
<pre><code class="language-C#">class MyVoiceHandler: MonoBehaviour
{
  public string RoomName = &quot;default&quot;;
  
  // Start is called before the first frame update
  void Start()
  {
    OdinHandler.Instance.JoinRoom(RoomName);
  }
}
</code></pre>
`}),e.add({id:3834,href:"https://www.4players.io/partials/disconnect-event-summary/unity/",title:"Disconnect Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnRoomLeave <a href="/odin/sdk/unity/classes/odinhandler/onroomleave/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td></td>
<td>Triggered if user started to leave a room</td>
</tr>
<tr>
<td><span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user left a room</td>
</tr>
</tbody>
</table>
`}),e.add({id:3835,href:"https://www.4players.io/odin/sdk/swift/enums/",title:"Enums",section:"ODIN Documentation",description:"Enums for Swift iOS/iPadOS/macOS/tvOS/watchOS SDK",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/enums/odinaudioautopilotmode/">OdinAudioAutopilotMode</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/enums/odincustomdata/">OdinCustomData</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/enums/odingatewayurl/">OdinGatewayUrl</a></li>
</span>
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/enums/odinresult/">OdinResult</a></li>
</span>
</ul>
`}),e.add({id:3836,href:"https://www.4players.io/examples/",title:"Examples",section:"Examples",description:"",content:""}),e.add({id:3837,href:"https://www.4players.io/fleet/cli/fleet/",title:"Fleet",section:"ODIN Fleet Documentation",description:"Learn how to authenticate the ODIN CLI with your API key.",content:`<p>ODIN Fleet is a cloud-based platform that allows you to deploy and manage your gameservers and services. The ODIN CLI
provides a set of commands that allow you to interact with the ODIN Fleet API from the command line.</p>
<h2 id="overview">Overview</h2>
<p>The <code>fleet</code> commands allow you to manage your ODIN Fleet resources. These include images, configurations, deployments,
and servers.</p>
<h2 id="usage">Usage</h2>
<p><code>odin fleet &lt;command&gt;</code></p>
<h2 id="commands">Commands</h2>
<ul>
<li><a href="./images">Images</a>: Manage images in your account.</li>
<li><a href="./configs">Configs</a>: Manage configurations in your account.</li>
<li><a href="./deployments">Deployments</a>: Manage deployments in your account.</li>
<li><a href="./servers">Servers</a>: Manage servers in your account.</li>
</ul>
`}),e.add({id:3838,href:"https://www.4players.io/4netplayers/",title:"Free Server Hosting",section:"Free Server Hosting",description:"Get your game servers hosted for free world-wide and allow your community to host their own game servers",content:`<img src="/images/4netplayers_header.jpg" alt="4Netplayers" class="border border-0 rounded-3 mb-4">
<p>4Players is famous for its game server hosting brand 4Netplayers for more than two decades. Gamers can run their own
game servers and decide if they want to run them public or private and decide settings themselves.</p>
<p>4Netplayers today has more than 300 games available in the library. Gamers can create and run gameservers immediately for
any of these games, which include hit games like <strong>Valheim</strong>, <strong>Minecraft</strong>, <strong>Battlefield</strong> and many more.</p>
<p>Add your game to our library to allow your community to create gameservers for your game. Allow your community to play
your game on servers they own, giving them more fun and more possibilities to play your game. 4Netplayers also supports
mods giving your community even more fun with your game.</p>
<h2 id="how-it-works">How it works</h2>
<p>If you add your game to our library, we won&rsquo;t charge you for any game server that is running. However, the community will
be charged by us depending on the various pricing models. In this mode, your community will be building at least part of your
game server fleet. However, that still requires some official game servers hosted by you as the community needs to have
a place to start playing in the first place until they want to have their own servers.</p>
<p>If you add a button &ldquo;Get your own server&rdquo; directly in your game, bringing your players directly to our game server sales
page you&rsquo;ll even get a revenue share model for every gameserver that is being sold ingame.</p>
<p><a href='https://www.4players.io/products/gameserver-hosting/' target='' class="btn btn-primary">Read more about the business model</a></p>
`}),e.add({id:3843,href:"https://www.4players.io/fleet/guides/getting-started/",title:"Getting started",section:"ODIN Fleet Documentation",description:"Get started with ODIN Fleet and deploy your first game server.",content:`<p>ODIN Fleet is designed to simplify the process of deploying and managing game servers across our global network. With ODIN Fleet, you can easily deploy and manage game servers for your games, regardless of the game engine or platform you are using. ODIN Fleet is optimized for real-time, stateful game server hosting, making it ideal for world-building games. It is also versatile enough to handle short-term, stateless server tasks typical in match-based games.</p>
<p>In most cases you&rsquo;ll have your own gameserver, but for this example we&rsquo;ll use an existing Minecraft Docker image to deploy a Minecraft server.</p>
<h2 id="background">Background</h2>
<p>You have two options to deploy a game server with ODIN Fleet:</p>
<ul>
<li><strong>Docker Image</strong>: You can create your own Docker image and deploy it with ODIN Fleet.</li>
<li><strong>Steamworks</strong>: You can deploy a game server using Steamworks.</li>
</ul>
<p>In this case, we&rsquo;ll use the excellent <a href="https://hub.docker.com/r/itzg/minecraft-server">itzg/minecraft-server</a> Docker image to deploy a Minecraft server.</p>
<p>Let&rsquo;s get started&hellip;</p>
<h2 id="sign-in-to-the-4players-dashboard">Sign in to the 4Players dashboard</h2>
<p>Our dashboard is an easy way of managing your game servers and applications. It&rsquo;s also a good way to see which items are created by the examples and how they are structured.
Navigate to the dashboard at <a href="https://console.4players.io">https://console.4players.io</a>. All you need is a 4Players account which you can also create on the dashboard.</p>
<p><a href='https://console.4players.io' target='_blank' class="btn btn-primary">Sign in to the dashboard</a></p>
<p>Once you have signed in, you need to create an application. An application is a space within ODIN Fleet that has its own
resource limits and configurations. You can create multiple applications to separate different environments or projects.</p>
<h2 id="create-an-application">Create an application</h2>
<p>Once you have signed in into the dashboard you&rsquo;ll be on the &ldquo;Manage Apps&rdquo; page. Click on the <strong>Create App</strong> button to create a new application. You can name it whatever you want, but for this example we&rsquo;ll name it <code>Minecraft</code>.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>If you don&rsquo;t want to follow the tutorial step by step we have made a shortcut for you: You can also install a demo application
that will create all the necessary resources for you via script. Instead of clicking on the <strong>Create App</strong> button, click on the <strong>Create Demo App</strong> button. Choose <code>Minecraft</code> from the list, give it a name and click on <strong>Create</strong>.</p>
</div>
</div>

<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-app.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-app.png"
         alt="Create App" width="800"/></a>
</figure>

<p>Once you have created the application, you&rsquo;ll be routed to the apps dashboard. Click on <strong>Fleet</strong> in the left sidebar to choose the Fleet product. In the sidebar you can also choose <strong>Voice</strong> which is our <a href="/odin/">real-time voice-chat SDK</a> with
deep game engine integration to Unity and Unreal, but for now we&rsquo;ll concentrate on gameserver deployment.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-fleet-dashboard.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-fleet-dashboard.png"
         alt="The ODIN Fleet Dashboard" width="800"/></a>
</figure>

<h2 id="create-an-image">Create an image</h2>
<p>Next step is to register an image. An image is a snapshot of your gameserver that can be deployed to a server. You can create an image from a Docker image or from a Steamworks app. As discussed earlier we&rsquo;ll be using an existing docker image for Minecraft.</p>
<p>On the left side click on <strong>Images</strong> and then on <strong>Create Image</strong>. This is a three step process.</p>
<ol>
<li>Provide basic image details like it&rsquo;s name, version and underlying operating system.</li>
<li>Choose weather to provide a docker image or Steamworks credentials to create the image.</li>
<li>Enter the necessary information for the chosen image type.</li>
</ol>
<p>This gallery shows you which data to enter and in written so that you can easily Copy &amp; Paste from here:</p>
<div id="create-image" class="carousel slide" data-bs-ride="false" style="max-width: 800px">
    <div class="carousel-inner">
        
<div class="carousel-item active">
    <img src="/images/fleet/getting-started-create-image-step-1.png" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/fleet/getting-started-create-image-step-2.png" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/fleet/getting-started-create-image-step-3.png" class="d-block w-100">
</div>


    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#create-image" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Previous</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#create-image" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Next</span>
    </button>
</div>

<p>Data to enter:</p>
<ul>
<li><strong>Name</strong>: <code>Minecraft Tutorial</code></li>
<li><strong>Version</strong>: <code>2024.6.1</code></li>
<li><strong>Operating System</strong>: <code>Linux</code></li>
<li><strong>Image Type</strong>: <code>Docker Image</code></li>
<li><strong>Image Name</strong>: <code>itzg/minecraft-server:2024.6.1</code></li>
<li><strong>Registry</strong>: <code>Docker Hub anonymous (default)</code></li>
</ul>
<p>The minecraft docker images are tagged with the version number. This way we make sure that we have a specific version of the image. I.e. if the server restarts or changes the underlying machine (i.e. in case of a defekt of the machine) the docker image is still the same and not changes implicitly by the docker registry.</p>
<p>You also need to choose a docker registry from the list. In this case we choose <code>Docker Hub</code> which is the public registry of docker images. If you have your own registry you can choose that one (of course creating it before).</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Of course, we could also create an image that is always the latest version, but this is not recommended for production environments. It&rsquo;s rather recommended to create new images within ODIN Fleet for each new version of your gameserver. This gives much better control. You&rsquo;ll find more of these topics in the guides section.</p>
</div>
</div>

<p>Next, we&rsquo;ll need to create the server config. This is the most complex part as in this step you define everything that defines your gameserver. Many games have different modes, maps, mods, etc. and you can define all of that here.</p>
<h2 id="creating-a-server-configuration">Creating a server configuration</h2>
<p>Navigate to <strong>Server Configs</strong> in the left sidebar and click on <strong>Create Config</strong>. You&rsquo;ll see a fairly complex editor
but we&rsquo;ll guide you through it.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>As there are a lot of settings you might risk to loose your data if you don&rsquo;t save it. We have implemented a feature that will constantly (on any change) store the current settings in your browsers local storage. If you accidentally close the browser or tab you can just open the tab again you&rsquo;ll be notified that there are unsaved changes and you can restore them.</p>
</div>
</div>

<h3 id="basic-information">Basic information</h3>
<p>In the first part of the editor, you can provide basic information about the image like it&rsquo;s name and which image should be used in this server configuration. Later, when you want to deploy a new version of your gameserver, all you need to do is to change the image of the server configuration and then that image will be rolled out in all deployments using this server configuration. We&rsquo;ll come to that later.</p>
<p>So, let&rsquo;s enter this data into the first couple of fields:</p>
<ul>
<li><strong>Name</strong>: <code>Minecraft Tutorial</code></li>
<li><strong>Image</strong>: <code>Minecraft Tutorial</code> (the image we have just created)</li>
<li><strong>Restart</strong>: <code>Always</code></li>
</ul>
<p>You can leave out <strong>CMD</strong> and <strong>Entrypoint</strong> empty. This allows you to override the fields from the docker image, i.e. if you want to start a different entrypoint script than defined in the docker container. This can be very useful for development but is typically not used in production.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-config-step-1.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-config-step-1.png"
         alt="Create Server Config" width="800"/></a>
</figure>

<p>Scrolling down a bit and you&rsquo;ll see a block with tabs and quite a lot of settings. We go through them one by one.</p>
<h3 id="ports">Ports</h3>
<p>Setting up ports is very important if your server should be reached from the public internet. Within the container, which encapsulates the gameserver from everything else, you can define which ports should be exposed to the outside world. In this case, we need to expose the Minecraft port <code>25565</code> and it needs to <code>TCP</code>.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-config-step-2.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-config-step-2.png"
         alt="Setting up ports" width="800"/></a>
</figure>

<p>For every port that you define here our runtime will assign an available port and map that to the internal port. This way you can run multiple gameservers on the same machine without port conflicts.</p>
<p>This diagrams shows what&rsquo;s going on under the hood. It shows multiple containers (i.e. gameservers running in docker containers) and how they are mapped to the public internet. Container 4 has two ports described in the server config and as such
two ports are published to the internet.</p>
<pre><code class="language-mermaid">flowchart TB
    Internet((Internet))
    
    subgraph Machine
        direction LR
        P1[&quot;Published Port 30001&quot;] --&gt; G1
        P2[&quot;Published Port 30002&quot;] --&gt; G2
        P3[&quot;Published Port 30003&quot;] --&gt; G3
        P4[&quot;Published Port 30004&quot;] --&gt; G4
        P5[&quot;Published Port 30005&quot;] --&gt; G5
        P6[&quot;published Port 30006&quot;] --&gt; R4
        
        subgraph Gameserver1[&quot;Container 1&quot;]
            direction TB
            G1[&quot;Gameserver Port 25565&quot;]
        end
        subgraph Gameserver2[&quot;Container 2&quot;]
            direction TB
            G2[&quot;Gameserver Port 25565&quot;]
        end
        subgraph Gameserver3[&quot;Container 3&quot;]
            direction TB
            G3[&quot;Gameserver Port 25565&quot;]
        end
        subgraph Gameserver4[&quot;Container 4&quot;]
            direction TB
            G4[&quot;Gameserver Port 25565&quot;]
            R4[&quot;RCON Port 25566&quot;]
        end
        subgraph Gameserver5[&quot;Container 5&quot;]
            direction TB
            G5[&quot;Gameserver Port 25565&quot;]
        end
    end

    Internet --&gt; |Port 30001| P1
    Internet --&gt; |Port 30002| P2
    Internet --&gt; |Port 30003| P3
    Internet --&gt; |Port 30004| P4
    Internet --&gt; |Port 30005| P5
    Internet --&gt; |Port 30006| P6
</code></pre>
<h3 id="resources">Resources</h3>
<p>In the next tab we need to define the resources that we want to allow this gameserver to consume. This is very important as it defines how much of the underlying machine the gameserver can use. For Minecraft as <strong>Small</strong> tier with 1 CPU and 2 GB RAM is enough. If you don&rsquo;t know what to choose, we suggest to start with a higher tier, run the server through its paces and then check the stats (described later) to see the peak usage of the server. You should always choose a tier that has a bit of spare but not too much. If you have too much spare, you are wasting money. If you have too little, the server might be slow or even crash. We&rsquo;ll do an experiment in another guide.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-config-step-3.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-config-step-3.png"
         alt="Setting up resources" width="800"/></a>
</figure>





<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>We have two types of resources: <strong>Shared</strong> and <strong>Dedicated</strong>. Shared resources are shared between all gameservers on the machine. Our backend tries to minimize the &ldquo;noisy neighbour&rdquo; problem but that is not always easy to do. If you decide to use shared resources, we might &ldquo;overbook&rdquo; the machine a bit. This means that we might assign more resources to the gameservers than the machine actually has. This is not a problem as long as the gameservers don&rsquo;t use all the resources at the same time. If they do, the machine might become slow and the gameservers might crash. This is why we have the dedicated resources. If you choose dedicated resources, the resources are reserved for your gameserver and no other gameserver can use them. This is more expensive but also more reliable.</p>
</div>
</div>

<h3 id="environment-variables">Environment Variables</h3>
<p>The next very important part are environment variables. Many gameservers are configured via environment variables. This is also the case for the Minecraft server. The Minecraft server has a lot of environment variables that you can set. Only one is really required: <code>EULA</code>. However, in this tutorial we have defined a bit more as that also shows why we have server configuration. In this example we have set the <code>DIFFICULTY</code> to <code>hard</code>. You might have another server config that is <code>soft</code> and this way you can deploy different server configurations with different settings.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-config-step-4.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-config-step-4.png"
         alt="Setting up environment variables" width="800"/></a>
</figure>

<p>There are two types of variables:</p>
<ul>
<li><strong>Static</strong>: These are variables that have a fixed value. This is the most common type of variable.</li>
<li><strong>Dynamic</strong>: These are variables that are calculated at runtime. This is not used very often but can be very powerful.</li>
</ul>
<p>Sometimes your gameserver might need to know on which IP and port it is running, i.e. for telemetry or to connect to a database. In this case you can use dynamic variables. You ca create a dynamic variable and set the type to &ldquo;Port&rdquo;. Then choose the game port that you have defined earlier. At runtime the environment variable will have the value of the published port. The same applies to the IP address which is also a dynamic variable.</p>
<h3 id="config-files">Config Files</h3>
<p>There is not much to do here for Minecraft. But instead of configuring your gameserver with environment variables you can also just use a config file. You define the content of the config file in the Dashboard and it will then be mounted into the specified path and filename in the container.</p>
<h3 id="secret-files">Secret Files</h3>
<p>These are basically the same as config files, but these are encrypted. This is useful if you have a config file that contains sensitive data like passwords or API keys. You can create a secret file and then use it in the same way as a config file.</p>
<h3 id="mounts">Mounts</h3>
<p>Minecraft is a stateful server. This means that it stores data on the disk. This data is important and should not be lost. In this case, we mount a volume to the <code>/data</code> folder in the container. This way the data is stored on the host machine and not in the container. This is important as the container can be deleted at any time and the data would be lost.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-config-step-5.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-config-step-5.png"
         alt="Setting up mounts" width="800"/></a>
</figure>

<h3 id="saving-and-moving-on">Saving and moving on</h3>
<p>Click on <strong>Save</strong> (scroll up) to save the server config. Next, we can finally deploy our configures server to the world.</p>
<h2 id="creating-a-deployment">Creating a Deployment</h2>
<p>Navigate to <strong>Deployments</strong> on the left side. You&rsquo;ll notice a world map where you can see all available locations where you can deploy your gameserver. Click on <strong>Add Deployment</strong> to start the process.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-deployment-step-2.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-deployment-step-2.png"
         alt="Create Deployment" width="800"/></a>
</figure>

<p>You&rsquo;ll need to enter a few details:</p>
<ul>
<li><strong>Name</strong>: <code>Minecraft Tutorial</code> (This is the name of the deployment to keep track of it)</li>
<li><strong>Location</strong>: <code>Limburg</code> (Choose the location where you want to deploy the gameserver)</li>
<li><strong>Config</strong>: <code>Minecraft Tutorial</code> (This is the server config that you have created earlier)</li>
<li><strong>Auto-Scaler</strong>: <code>Off</code> (This is a feature that automatically scales the deployment based on the number of players. We&rsquo;ll come to that later)</li>
<li><strong>Num Instances</strong>: <code>1</code> (This is the number of servers that you want to deploy)</li>
</ul>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>When creating a deployment a cost estimation is displayed which is based on the resources you have chosen. This is only an estimation and the actual costs might be different. You can also see the costs in the dashboard.</p>
</div>
</div>

<p>After you saved your deployments the screen changes a bit and shows the deployment that we have created just yet.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-create-deployment-step-3.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-create-deployment-step-3.png"
         alt="Deployment created" width="800"/></a>
</figure>

<p>That&rsquo;s it. ODIN Fleet will do the rest. Depending on your restart settings (we had it on <code>Always</code>) you will not have to do anything. No babysitting, no cost control, no manual restarts. ODIN Fleet will take care of everything.</p>
<h2 id="monitoring">Monitoring</h2>
<p>You can monitor your deployment in the dashboard. You can see the state of the server, the logs, the resources used and much more. You can also create backups of the persistent folders that you have defined in the server config.</p>
<p>First, let&rsquo;s navigate to <strong>Analytics</strong>. Here you can see how many servers ran throughout the billing period, within the last hours, etc. It&rsquo;s an easy to use cost control as this is what we charge you. The peak number of running instances per day.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-analytics-1.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-analytics-1.png"
         alt="Analytics" width="800"/></a>
</figure>

<p>As you can see, it&rsquo;ll show one instance running.</p>
<p>But, we want to dig deeper and understand which servers have been deployed and how many resources they are consuming. Click on <strong>Servers</strong> on the sidebar and you&rsquo;ll see a list with all running servers from all deployments. Click on the server to see more details.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-1.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-1.png"
         alt="Servers" width="800"/></a>
</figure>

<p>Click on the (i) icon on the right side of the list to reveal more details of the specific server. You can see the logs, the resources used, the environment variables, the mounts and much more. Click through the gallery to see some screenshots of that.</p>
<div id="servers" class="carousel slide" data-bs-ride="false" style="max-width: 800px">
    <div class="carousel-inner">
        
<div class="carousel-item active">
    <img src="/images/fleet/getting-started-servers-2.png" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/fleet/getting-started-servers-3.png" class="d-block w-100">
</div>

<div class="carousel-item">
    <img src="/images/fleet/getting-started-servers-4.png" class="d-block w-100">
</div>


    </div>
    <button class="carousel-control-prev" type="button" data-bs-target="#servers" data-bs-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Previous</span>
    </button>
    <button class="carousel-control-next" type="button" data-bs-target="#servers" data-bs-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="visually-hidden">Next</span>
    </button>
</div>

<h3 id="checking-server-stats">Checking server stats</h3>
<p>Let&rsquo;s get to the server stats and see how much resources the server is using. Click on the <strong>Stats</strong> tab to see the resource usage of the server. You can see the CPU, Memory, Disk and Network usage. This is very important to determine if the server is running smoothly or if it needs more resources.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-5.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-5.png"
         alt="Server Stats" width="800"/></a>
</figure>

<p>As you can see, CPU is using the core available (we have set it to one) at the beginning to 1 and then drops to 0.1. Which means the average load is 10%. Memory slowly moves up to 820 MB which is 40% of the available memory. It seems that we could reduce the resources. Let&rsquo;s fire up our Minecraft client and connect to the server to see if stats are changing if the server has something todo.</p>
<h3 id="connect-to-the-server">Connect to the server</h3>
<p>In the <strong>Info</strong> tab you can see the IP address and the port of the server. You can use this information to connect to the server. In this case, we have a Minecraft server running on <code>51.77.85.52:30121</code>.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-6.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-6.png"
         alt="Understanding where to find IP and Port" width="800"/></a>
</figure>

<p>In the Minecraft game I choose <strong>Multiplayer</strong> and click on <strong>Add Server</strong>. I enter the IP and the port like this:</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-7.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-7.png"
         alt="Adding Server in Minecraft" width="800"/></a>
</figure>

<p>After clicking on <strong>Done</strong> you&rsquo;ll see the server in the list (I have highlighted the server that I just added):</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-8.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-8.png"
         alt="Server in Minecraft" width="800"/></a>
</figure>

<p>Click on <strong>Join Server</strong> and you&rsquo;ll be right in Minecraft and can start playing. Yes, you have deployed your own Minecraft within a few minutes!</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-9.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-9.png"
         alt="Playing Minecraft" width="800"/></a>
</figure>

<h3 id="checking-server-stats-again">Checking server stats again</h3>
<p>Let&rsquo;s run around a bit on the server, create and remove some blocks. After a couple of minutes playing, let&rsquo;s check our Server Stats again:</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-10.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-10.png"
         alt="Server Stats after playing" width="800"/></a>
</figure>

<p>Let&rsquo;s see what we have here:</p>
<ul>
<li>CPU is now at 1 which is quite different to before. The CPU is at 100%, which does not mean that we need to have more CPU. But we should test the server with more players to see if the CPU is the bottleneck.</li>
<li>Memory is now at 1053 MB which is 52% of the available memory. However, it&rsquo;s more than 1024 MB that we would have in the <strong>Tiny</strong> tier. So, it&rsquo;s very likely that the server will crash and in fact if you change the tier to <strong>Tiny</strong> the server will crash after a short period of playtime. Feel free to try it out.</li>
<li>Network Egress (i.e. server sending data) is expected and is not a problem. The server is sending data to the clients and this is what we want.</li>
<li>Data Write is expected, too. The server is writing data to the disk. This is the world data that is stored on the disk.</li>
</ul>
<p>This way you can easily determine the resources required by your gameserver and adjust the resources accordingly.</p>
<h2 id="scale-up-or-down">Scale Up or Down</h2>
<p>Let&rsquo;s say you need another set of servers in the USA and you need to scale up the servers in Germany to handle the load. You can easily do that by scaling the deployment. Navigate to the deployment in Limburg and click on <strong>Edit</strong>. You can change the number of instances and click on <strong>Save</strong>.</p>
<p>Next, click on <strong>Add Deployment</strong> and add 1 Server in Seattle (USA). You can also choose another location if you want. After that, your servers list in the <strong>Servers</strong> part of the Dashboard will look like this:</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-servers-11.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-servers-11.png"
         alt="Servers after scaling up" width="800"/></a>
</figure>

<p>You can see that we have 2 servers in Limburg and 1 server in Seattle.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It depends on how you do any up- or downscaling. We have customers that review weekly the usage of their servers and scale them up or down manually in the Dashboard. We have others that have a fixed number of servers and only scale them up if they see that the servers are overloaded. And we have customers that have written scripts that automatically check the load of the servers and scale them up or down via script using our <a href="https://github.com/4Players/fleet-cli">Fleet CLI</a> or within a script using one of our SDKs (i.e. NodeJS).</p>
</div>
</div>

<h2 id="cost-control">Cost Control</h2>
<p>After scaling up and waiting for 1 or 2 minutes (until servers are up and running) navigate back to <strong>Analytics</strong>. You&rsquo;ll see that the number of running instances has increased. You can also see the costs of the deployment.</p>
<figure style="max-width: 800px"><a href="/images/fleet/getting-started-analytics-2.png" title="Click to enlarge" data-lity><img src="/images/fleet/getting-started-analytics-2.png"
         alt="Analytics after scaling up" width="800"/></a>
</figure>

<p>That is basically all there is for cost control. No hidden costs, no super complex charts, tables with hundreds of non-understandable invoice positions with literally no chance to understand what you are paying for. With us it&rsquo;s simple, in this case we would charge you the 3 instances running today, if it&rsquo;s a <strong>Small</strong> tier it would be 0.43€ per instance per day, i.e. in this case we would charge you 1,29€ for this day and 38,7€ per month. That&rsquo;s it, that&rsquo;s the price.</p>
<h2 id="clean-up">Clean Up</h2>
<p>Navigate to the <strong>Deployments</strong> and remove the deployments. This will stop the servers and remove all resources that are associated with the deployment.</p>
<h2 id="next-steps">Next Steps</h2>
<p>This was a very basic example of how to deploy a Minecraft server with ODIN Fleet. You can now start to experiment with different server configurations, different images, different locations, etc. You can also start to automate the deployment process with our API or CLI.</p>
`}),e.add({id:3844,href:"https://www.4players.io/examples/odin/sdk/unity/getting-started-unity/",title:"Getting Started with Unity Piece",section:"Examples",description:"",content:`
<div><div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
</div>



<p>ZEUGS!</p>
`}),e.add({id:3845,href:"https://www.4players.io/examples/odin/sdk/unity/getting-started-unreal/",title:"Getting Started with Unreal",section:"Examples",description:"",content:`<p>HUHU</p>
`}),e.add({id:3846,href:"https://www.4players.io/examples/fleet/global-flags/",title:"Global CLI Flags",section:"Examples",description:"A list of global flags that can be used with the ODIN CLI.",content:`<p>The following flags can be used with any ODIN CLI command:</p>
<ul>
<li>
<p><strong><code>--api-key=&lt;string&gt;</code></strong><br>
The API key to use for authentication. If omitted, the CLI will use the api-key stored in the configuration file on
your system. Use <a href="/fleet/cli/login/">odin login</a> to store the API key for subsequent commands.</p>
</li>
<li>
<p><strong><code>--app-id=&lt;string&gt;</code></strong><br>
The ID of the app to use for the command. If omitted, the CLI will use the currently selected app. Use
<a href="/fleet/cli/apps/select/">odin apps select</a> to select an app interactively.</p>
</li>
<li>
<p><strong><code>--format=&lt;string&gt;</code></strong><br>
The output format to use for the command. Supported formats are <code>json</code>, <code>value</code>, <code>flattened</code> and <code>table</code>. If omitted,
the CLI will use the default format specified in the configuration file. Learn more about <a href="/fleet/cli/usage/output-formatting/">output formatting</a>.</p>
</li>
<li>
<p><strong><code>--force</code></strong><br>
Forces the command to execute without prompting for confirmation. Use with caution.</p>
</li>
<li>
<p><strong><code>--quiet</code></strong><br>
Suppresses all informational output except for errors. Useful for scripting and automation.</p>
</li>
</ul>
`}),e.add({id:3847,href:"https://www.4players.io/partials/odin-introduction/how-it-works/",title:"How it works",section:"Partials",description:"",content:`<p>ODIN is a standalone client server architecture. 4Players hosts the servers, handles the network and all the audio
processing that is required for great voice communication. From your perspective, ODIN is a pur client integration, you
don&rsquo;t need to do any server side processing or maintenance.</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    OR2[Odin Room]
    OR[Odin Room]    
  end
  subgraph Gameserver
    GS[Game Server]
  end
  subgraph Game
    ClientA[Player A] --&gt; OR[ODIN Room]
    ClientB[Player B] --&gt; OR[ODIN Room] 
    ClientB[Player B] --&gt; GS[Game Server]   
    ClientC[Player C] --&gt; GS[Game Server]
    ClientC[Player C] --&gt; OR[ODIN Room] 
    ClientD[Player D] --&gt; GS[Game Server]
  end
  subgraph Lobby
    ClientE[Players E] --&gt; OR2[ODIN Room]
    ClientF[Players F] --&gt; OR2[ODIN Room]
  end      
</code></pre>
<p>This graph outlines how ODIN works in a multiplayer environment. You build the client application (i.e. the game)
and the server component (game server) as usual. Once ODIN is integrated into your game, the players device will
connect to the game server as usual, but in addition to that to ODIN servers that route all voice packets to all
other players joined to the same ODIN room. Players may choose not to use voice chat. Those players will not connect
to ODIN and will not be able to listen or talk to other players (like Player D). On the other side, other players
might only join the voice server, without playing - for example if they are in the lobby, or the angry mum yelling
that the player should stop playing and doing his homework (player A).</p>
<p>You can integrate ODIN in single player games with a community element, virtual or augmented reality based video
conferencing solutions, the meta verse, virtual homeschooling and training applications and of course multiplayer
games (peer to peer or dedicated servers) from simple shooters to massive multiplayer online games with thousands of
players in the same room.</p>
<p>As ODIN supports cross play you can even connect a mobile application or website directly
with players in the game. A battle net like launcher application based on Electron where players can meet and chat
and directly start a shared game with automatic hand-over.</p>
<p>The possibilities are endless, and you don&rsquo;t need to be an audio or server expert! <a href="/odin/introduction/concepts/">We have compiled a couple of
use-cases</a> if you are still unsure if ODIN fits for needs.</p>
`}),e.add({id:3848,href:"https://www.4players.io/examples/odin/sdk/unity/install-sdk/",title:"Install Unity SDK",section:"Examples",description:"Install Unity Example",content:`<div class="alert alert-warning d-flex elevation-01dp border-elevation-06dp rounded-3 text-high-emphasis border" role="alert">
  <div class="flex-shrink-1 alert-icon">⚠️ </div>
  
    
      <div class="w-100"> <strong>Important: Please remove files of previous versions before installing a new version. Unity does not remove old
files from the installation and this causes issues sometimes. So just remove the package and install the latest one.</strong>
4Players ODIN also supports Apple Silicon. Check out our
<a href="/odin/faq/unity/#does-4players-odin-support-apple-silicon">FAQ to learn more on prerequisites for running ODIN with Apple Silicon</a>.</div>
    
  
</div>

<p>ODIN Voice supports Unity 2019.4 or any later version. The latest version is always available <a href="https://github.com/4Players/odin-sdk-unity/releases/latest">in our GitHub
repository</a> or in the
<a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.</p>
<p>There are numerous ways to install ODIN into your project. We recommend <a href="#package-manager">using Package Manager</a>.</p>
<h3 id="install-via-asset-store">Install via Asset Store</h3>
<p>Acquire the plugin from the <a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store</a>.
Press the button <code>Open in Unity</code> or just open your Unity project and use the Package Manager to go to <code>My Assets</code> and
select <code>Odin Voice Chat</code> to download and import it.</p>
<h3 id="install-via-unity-package">Install via Unity Package</h3>
<p>Please download the latest version of the ODIN Unity SDK as a <code>.unitypackage</code> from the [Github releases page]
(<a href="https://github.com/4Players/odin-sdk-unity/releases)">https://github.com/4Players/odin-sdk-unity/releases)</a>. Just double-click the <code>.unitypackage</code> to import it into your
current Unity editor project.</p>
<h3 id="package-manager">Package Manager</h3>
<p>Using the Package Manager will ensure that all dependencies are set up correctly and that you will have the most up-to-
date version of the SDK. In most cases, using the Package Manager is the way to go.</p>
<p>To open the Package Manager, navigate to <code>Window</code> and then click <code>Package Manager</code> in your Unity Editor menu bar.</p>
<h5 id="using-our-git-repository">Using our Git Repository</h5>
<p>Click the + button in the upper left and select <code>Add package from git URL</code>. Next, enter this URL and hit enter to import the package:</p>
<p><a href="https://github.com/4Players/odin-sdk-unity.git">https://github.com/4Players/odin-sdk-unity.git</a></p>
<h5 id="using-a-tarball-archive">Using a Tarball Archive</h5>
<p>Click the + button in the upper left and select <code>Add package from tarball</code>. Next, select the odin.tgz archive you&rsquo;ve downloaded from the <a href="https://github.com/4Players/odin-sdk-unity/releases">GitHub releases</a> page to import the package.</p>
`}),e.add({id:3849,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/joinroom/",title:"JoinRoom",section:"Examples",description:"OnMediaAdded Example",content:`<p>ODIN does not require any bookkeeping from your side. ODIN automatically creates a room when a user joins it (by
name) and deletes the room once the last user has left the room.</p>
<p>Provide a room name as a string in <code>roomName</code>. It can be anything you like. Remember, that all users that have
joined the same room can talk to each other (or at least listen to what others are saying). If you have two teams of
users in your game, and each team should only talk to other team members, you could have two rooms: <code>Team_A</code> and
<code>Team_B</code>. We have created a couple of use-cases explaining various methods of defining room names in <a href="/odin/introduction/concepts/">this document</a>.</p>
<p><code>userData</code> is of type <span class="external-reference">UserData <a href="/odin/sdk/unity/classes/userdata/"><i class="fas fa-external-link-alt"></i></a></span>
 and is basically just a byte array. You can set any user data you
like. The best way is to create a class and serialize that class to whatever you like. We provide a sample of such a
class in the guide <a href="/odin/guides/unity/user-data/">Understanding User Data</a>.</p>
<p>Use the <code>setup</code> callback to adjust <span class="external-reference">room settings <a href="/odin/sdk/unity/classes/odinroomconfig/"><i class="fas fa-external-link-alt"></i></a></span>
 before data is sent to ODIN and the room is created on the ODIN
servers.</p>
<pre><code class="language-C#">public class Radio: MonoBehaviour
{
    private string _currentRoom;
    public int currentChannel = 1;
    
    void Start()
    {
        UpdateRadioConnection();
    }
    
    public void ChangeChannel(newChannel) 
    {
        currentChannel = newChannel;
        UpdateRadioConnection();
    }
    
    void UpdateRadioConnection()
    {
        // Leave the current radio room
        if (_currentRoom) {
            OdinHandler.Instance.LeaveRoom(_currentRoom);
        }
        
        _currentRoom = &quot;Radio_&quot; + currentChannel.ToString();
        OdinHandler.Instance.JoinRoom(_currentRoom, null, room =&gt; {
            // Activate Voice Activity Detection 
            room.Config.ApmConfig.VadEnable = true;
        });
    }
}
</code></pre>
`}),e.add({id:3850,href:"https://www.4players.io/partials/kicked-event-summary/unity/",title:"Kicked Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnRoomLeft <a href="/odin/sdk/unity/classes/odinhandler/onroomleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerLeft <a href="/odin/sdk/unity/classes/odinhandler/onpeerleft/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user has been kicked from a room</td>
</tr>
</tbody>
</table>
`}),e.add({id:3851,href:"https://www.4players.io/odin/hosting/cloud/",title:"Managed Cloud Hosting",section:"ODIN Documentation",description:"Experience seamless, global managed cloud hosting for your ODIN project with our worldwide server network. Benefit from the latest technology, high-speed networking, powerful hardware, and exceptional support from our experienced team. Register your access key and choose from our diverse gateway locations for optimal performance.",content:`<p>When using ODIN manage cloud hosting, you can leverage our global server network. With over 20 years of experience in the industry, our team of experts is ready to handle all the technical details, allowing you to focus on your business.</p>
<p>ODIN cloud servers are available in different locations all over the world, ensuring that you have the resources you need to serve your customers, no matter where they are located. With our managed cloud hosting, you can take advantage of the latest technology, including high-speed networking and powerful hardware, all backed by our top-notch support team.</p>
<p><img src="/images/server-locations.webp" alt=""></p>
<h2 id="register-your-access-key">Register your Access Key</h2>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note that you need to have an active ODIN subscription to use our managed cloud hosting and the following features. You can <a href="/products/voice-chat#pricing">purchase a subscription</a> on our website.</p>
</div>
</div>

<p>When working with a hosted ODIN project, you need to register your access key to be able to use the service with more than 25 users. To do this, navigate to our customer control panel and select your project.</p>
<p><a href='https://app.netplay-config.4players.de/odin' target='' class="btn btn-primary">Open Control Panel</a></p>
<figure><img src="/images/odin-cp-hosted.jpg"
         alt="Manage Access Keys of an On-Premise Project"/><figcaption>
            <p>Manage Access Keys of an On-Premise Project</p>
        </figcaption>
</figure>
<p>Next, click the <strong>Add access key</strong> button to either generate a new access key, or register an existing key you previously created using our <a href="/odin/introduction/access-keys/#with-odin-command-line-utility">command-line utility</a>.</p>
<h2 id="available-gateways">Available Gateways</h2>
<p>Currently, we provide ODIN Gateways in the following regions for you to choose from:</p>
<dl>
<dt>Europe</dt>
<dd><code>https://gateway.odin.4players.io</code></dd>
<dt>US Central</dt>
<dd><code>https://us-central.gateway.odin.4players.io</code></dd>
<dt>US East</dt>
<dd><code>https://us-east.gateway.odin.4players.io</code></dd>
<dt>US West</dt>
<dd><code>https://us-west.gateway.odin.4players.io</code></dd>
<dt>South America</dt>
<dd><code>https://southamerica.gateway.odin.4players.io</code></dd>
<dt>Asia North East</dt>
<dd><code>https://asia-northeast.gateway.odin.4players.io</code></dd>
<dt>Oceania</dt>
<dd><code>https://oceania.gateway.odin.4players.io</code></dd>
</dl>
<p>If you need ODIN servers in additional locations, please <a href="/company/contact_us">contact us</a>.</p>
<h2 id="firewall-settings">Firewall settings</h2>
<p>ODIN uses a proprietary protocol built on QUIC/HTTP3. As this is latest technology, not all Office IT administrators
have made the necessary adjustments to their firewalls to allow this traffic. If you are experiencing connection
issues please ensure that your firewall allows traffic on these ports:</p>
<h3 id="gateway">Gateway</h3>
<p><code>gateway.odin.4players.io</code>
<code>*.gateway.odin.4players.io</code></p>
<table>
<thead>
<tr>
<th>Port</th>
<th>Protocol</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>443</td>
<td>TCP</td>
<td>HTTPS for client authorization (JSON RPC)</td>
</tr>
</tbody>
</table>
<h3 id="voicedata-server">Voice/Data Server</h3>
<p><code>*.server.4netplayers.com</code></p>
<table>
<thead>
<tr>
<th>Port</th>
<th>Protocol</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>4433</td>
<td>UDP</td>
<td>HTTP/3 (QUIC) connections for native ODIN clients</td>
</tr>
<tr>
<td>4433</td>
<td>TCP</td>
<td>Secure WebSocket connections for web-based ODIN clients</td>
</tr>
<tr>
<td>8844</td>
<td>UDP</td>
<td>WebRTC data channel for web-based ODIN clients</td>
</tr>
</tbody>
</table>
`}),e.add({id:3854,href:"https://www.4players.io/odin/",title:"ODIN Documentation",section:"ODIN Documentation",description:"A cross-platform SDK to integrate real-time chat into games, apps and websites",content:`<p><img src="/odin/odin_1200x630_social.png" alt="4Players ODIN"></p>
<p>ODIN is a cross-platform software development kit (SDK) that enables developers to integrate real-time chat technology into multiplayer games, apps and websites.</p>




<div class="box dark highlight">

<div class="box-content elevation-01dp border-elevation-06dp rounded-3 border"><p>Did you just <a href="/products/voice-chat/#pricing">purchase</a> ODIN and arrived here? Please generate an <a href="/odin/introduction/access-keys/">Access Key</a>, if you not already have done so.</p>
</div>
</div>

<h2 id="easy-integration">Easy integration</h2>
<p>ODIN can be easily integrated in all your apps, websites, games and experiences with a couple lines of code. As
4Players handels servers and maintenance for you, you&rsquo;ll have a production ready voice-chat and data synchronization
layer implemented in your app in no-time.</p>
<p>These examples give you an idea how easy it is to implement ODIN in various programming languages. Please note that
these are simplified examples, in real-world implementations you&rsquo;ll have a couple of lines more for error handling.</p>



    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
    
        <div class="tabs-module">
    
    <ul class="nav nav-tabs mt-3 border-elevation-08dp justify-content-left mt-5" role="tablist">
        
            
            
            <li class="nav-item" role="presentation">
                <button class="btn btn-grey active"
                    id="pills--0-tab" data-bs-toggle="pill"
                    data-bs-target="#pills--0" type="button" role="tab"
                    aria-controls="pills--0" aria-selected="true">Unity</button>
            </li>
            
            <li class="nav-item" role="presentation">
                <button class="btn btn-grey "
                    id="pills--1-tab" data-bs-toggle="pill"
                    data-bs-target="#pills--1" type="button" role="tab"
                    aria-controls="pills--1" aria-selected="true">Unreal Engine</button>
            </li>
            
            <li class="nav-item" role="presentation">
                <button class="btn btn-grey "
                    id="pills--2-tab" data-bs-toggle="pill"
                    data-bs-target="#pills--2" type="button" role="tab"
                    aria-controls="pills--2" aria-selected="true">C/C&#43;&#43;</button>
            </li>
            
            <li class="nav-item" role="presentation">
                <button class="btn btn-grey "
                    id="pills--3-tab" data-bs-toggle="pill"
                    data-bs-target="#pills--3" type="button" role="tab"
                    aria-controls="pills--3" aria-selected="true">Web</button>
            </li>
            
            <li class="nav-item" role="presentation">
                <button class="btn btn-grey "
                    id="pills--4-tab" data-bs-toggle="pill"
                    data-bs-target="#pills--4" type="button" role="tab"
                    aria-controls="pills--4" aria-selected="true">NPM</button>
            </li>
            
        </ul>
        <div class="tab-content rounded-3 py-4 bg-transparent" id="pills-tabContent">
            
            <div class="tab-pane fade show active" id="pills--0"
                role="tabpanel" aria-labelledby="pills--0-tab">
                
                    
    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
        <div class="image-module">
    <figure class="text-center mx-auto" >
        <img  src="/images/odin/odin_unity_editor.jpg" >

        

    </figure>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module">
    
    <p ><p>Our ODIN SDK is deeply integrated into Unity and features <strong>automatic 3D spatial audio</strong>. Use the tools you know like <code>AudioSource</code> and <code>AudioListener</code> or the built-in Unity <code>AudioMixer</code> for your voice chat integration.</p>
<p>Manage all aspects of our Voice SDK within Unity and integrate it in a couple of hours into your game or XR experience.</p>
</p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
        <div class="button-module">
    
    <a href="/odin/guides/unity" class="btn btn-primary btn-lg me-3" type="button">Get Started for Free</a>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module mt-4">
    
    <p ><a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V">Watch video tutorial</a> | <a href="/odin/sdk/unity">Explore the docs</a> | <a href="/odin/sdk/unity">Download SDK</a></p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>


                    
            </div>
            
            <div class="tab-pane fade show" id="pills--1"
                role="tabpanel" aria-labelledby="pills--1-tab">
                
                    
    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
        <div class="image-module">
    <figure class="text-center mx-auto" >
        <img  src="/images/odin/unreal_editor.png" >

        

    </figure>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module">
    
    <p ><p>Our ODIN SDK is deeply integrated into Unreal Engine 4 (UE4) and Unreal Engine 5 (UE5) and features <strong>Blueprint</strong> support and  <strong>automatic 3D spatial audio</strong>. Our Voice SDK leverages Unreal Engines audio processing so that you can use the tools you know and love!</p>
<p>Manage all aspects of our Voice SDK within the Unreal Engine Editor and integrate it in a couple of hours into your game or XR experience.</p>
</p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
        <div class="button-module">
    
    <a href="/odin/guides/unreal" class="btn btn-primary btn-lg me-3" type="button">Get Started for Free</a>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module mt-4">
    
    <p ><a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Watch video tutorial</a> | <a href="/odin/sdk/unreal">Explore the docs</a> | <a href="https://github.com/4Players/odin-sdk-unreal">Download SDK</a></p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>


                    
            </div>
            
            <div class="tab-pane fade show" id="pills--2"
                role="tabpanel" aria-labelledby="pills--2-tab">
                
                    
    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module">
    
    <p >Add ODIN to your C or C++ projects with our simple to use ODIN Core SDK. Our Core SDK is the foundation of all other SDKs and features an easy-to-use interface.</p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        <pre class="mt-0 mb-0"><code class="hljs dark language-c">// Generate access token - should be done on a server
char room_token[512];
OdinTokenGenerator* generator = odin_token_generator_create(&#34;__YOUR_ACCESS_KEY__&#34;);
odin_token_generator_create_token(generator, &#34;My Room&#34;, &#34;John Doe&#34;, room_token, sizeof(room_token));
odin_token_generator_destroy(generator);

// Setup event handler and join a room.
OdinRoomHandle room = odin_room_create();
odin_room_set_event_callback(room, handle_odin_event, NULL);
odin_room_join(room, gateway_url, room_token);
</code></pre>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module mt-4">
    
    <p ><a href="/odin/sdk/c">Explore the docs</a> | <a href="https://github.com/4Players/odin-sdk">Download SDK</a></p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>


                    
            </div>
            
            <div class="tab-pane fade show" id="pills--3"
                role="tabpanel" aria-labelledby="pills--3-tab">
                
                    
    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module">
    
    <p >Integrating our Voice SDK in any website with vanilla JavaScript is seamless, effortless, and easy. Add our script and join a room, that&rsquo;s it.</p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        <pre class="mt-0 mb-0"><code class="hljs dark language-js">&lt;html&gt;
    &lt;head&gt;
        &lt;script type=&#34;text/javascript&#34; src=&#34;https://4npcdn.com/2355/odin/javascript/latest/odin.min.js&#34;&gt;&lt;/script&gt;
        &lt;script type=&#34;text/javascript&#34;&gt;
            var connectOdin = async function(room, user) {
                const token = await getToken(room, user);
                const odinRoom = await ODIN.OdinClient.initRoom(token);
                await odinRoom.join();
                return odinRoom;
            }
            connectOdin(&#34;My Room&#34;, &#34;John Doe&#34;).then(odinRoom =&gt; {
               console.log(&#34;Connected to room&#34;, odinRoom);
            });
        &lt;/script&gt;
    &lt;/head&gt;
&lt;/html&gt;
</code></pre>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module mt-4">
    
    <p ><a href="/odin/sdk/web">Explore the docs</a> | <a href="/odin/sdk/web">Download SDK</a></p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>


                    
            </div>
            
            <div class="tab-pane fade show" id="pills--4"
                role="tabpanel" aria-labelledby="pills--4-tab">
                
                    
    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module">
    
    <p >Adding our Voice SDK to any modern JavaScript framework like <code>Angular</code>, <code>Svelve</code>, <code>Vue</code>, <code>React</code> is super easy. Just add our <strong>npm package</strong> <code>@4players/odin</code> to your <code>package.json</code> and connect a room. That&rsquo;s it.</p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        <pre class="mt-0 mb-0"><code class="hljs dark language-js">import { OdinClient } from &#39;@4players/odin&#39;;
import { TokenGenerator } from &#34;@4players/odin-tokens&#34;;

const generator = new TokenGenerator(apiKey);
const token = generator.createToken(&#34;My Room&#34;, &#34;John Doe&#34;);
const odinRoom = await OdinClient.initRoom(token);
await odinRoom.join();
</code></pre>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
        <div class="paragraph-module mt-4">
    
    <p ><a href="/odin/sdk/web">Explore the docs</a> | <a href="/odin/sdk/web">Download SDK</a></p>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>


                    
            </div>
            
        </div>
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>



<h2 id="why-4players">Why 4Players?</h2>
<p>4Players is hosting game and voice servers globally for decades. We know what developers need. We know what gamers want.
We know how essential reliability, awesome voice quality, low CPU usage and zero FPS hit, noise suppression and low
latency are for a great voice chat experience, especially in immersive real-time applications like games.</p>
<p>VoIP veterans, server admins, gamers and mod makers came together to create the essential in-game voice
chat solution for Unity and Unreal Engine built on latest software technologies like QUIC and HTTP3. You don&rsquo;t have to
worry about maintenance, server hosting or day-to-day operations. You don&rsquo;t have to learn anything new. You just
leverage your Unity skills and focus on delivering the best game possible.</p>
<p>With support for spatial 3D audio support as well as massive scalability, zero configuration or bookkeeping it has
never been easier to utilize best-in-class voice chat for your games, video conferencing and XR applications.</p>
<p>In addition to that, we also provide SDKs for various other platforms including the web with TypeScript and
Vanilla JavaScript support and even console clients for automatic data processing. This ODIN, all your real-time
data synchronization are solved and implemented in no time, being it pure data and/or voice.</p>
<h2 id="give-it-a-try">Give it a try</h2>
<p>We have created a couple of simple multiplayer experiences that allow you to play around with ODIN together with your
friends and colleagues. Download the samples for Windows, Mac or Linux and experience cross-platform 3D voice chat in a
dynamic environment.</p>
<div class="row gx-4 d-flex flex-column">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/multiplayer-sample">
<img class="teaser-image" src="/images/odin/multiplayer_sample.jpg">
</a>
<h4 class="teaser-title">Open Source Sample</h4>
<div class="teaser-content">
 <p>Download and test our PUN based multiplayer sample built with Unity complete with source and documentation. The sample
also features many scripts for audio effects like damping and general bookkeeping stuff.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/multiplayer-sample">Download Sample</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/showcase">
<img class="teaser-image" src="/images/odin/showcase_header.jpg">
</a>
<h4 class="teaser-title">Multiplatform Showcase</h4>
<div class="teaser-content">
 <p>Talk to other players with 3D positional voice and a walkie-talkie in multiple channels. We also feature a web-based
commander that you can use to interact with players directly from your browser.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/showcase">Play now</a>
</div>
</div>
</div>
</div>
<div class="row gx-4 d-flex flex-column">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/fps-shooter">
<img class="teaser-image" src="/images/odin/fps_shooter_header.jpg">
</a>
<h4 class="teaser-title">FPS Shooter</h4>
<div class="teaser-content">
 <p>A simple but fun FPS shooter on desert style maps. ODIN 3D positional voice is integrated so that you can
talk to other players with voice or radio broadcast in a real game. Have fun!</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/fps-shooter">Play Now</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/examples/swiftui-sample">
<img class="teaser-image" src="/images/odin/odin_swift_sample.jpg">
</a>
<h4 class="teaser-title">SwiftUI Sample</h4>
<div class="teaser-content">
 <p>A simple but fully functional SwiftUI sample that leverages <a href="/odin/sdk/swift/">OdinKit</a> to build an
iOS app that allows you to chat with friends in no time.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/examples/swiftui-sample">Download Now</a>
</div>
</div>
</div>
</div>
<h2 id="first-steps">First Steps</h2>
<p>Begin with our <a href="/odin/introduction/">Introduction</a> to learn more about ODIN, how it works, which
benefits and key features we provide.</p>
<h2 id="game-engine-integration">Game Engine Integration</h2>
<p>If you are more into just experimenting, then choose your game engine and get started quickly with our quick and
easy onboarding guides. You&rsquo;ll have a running example to experiment with in less than 20 minutes without any
registration!</p>
<div class="row gx-4">
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unity/getting-started-unity">
<img class="teaser-image" src="/images/unity_sdk.jpg">
</a>
<h4 class="teaser-title">Unity</h4>
<div class="teaser-content">
 <p>Use our deep Unity integration to add the most immersive in-game voice chat to your product with minimal development overhead.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unity/getting-started-unity">Learn more</a>
</div>
</div>
</div>
<div class="col-md">
<div class="teaser-container">
<a href="/odin/guides/unreal">
<img class="teaser-image" src="/images/unreal_sdk.jpg">
</a>
<h4 class="teaser-title">Unreal Engine</h4>
<div class="teaser-content">
 <p>Our upcoming Unreal Engine plugin will feature full support for all available platforms and come with Blueprint and C++ support.</p>
</div>
<div class="teaser-content">
<a class="teaser-call-to-action" href="/odin/guides/unreal">Learn more</a>
</div>
</div>
</div>
</div>
<h2 id="webapps-integration">Web/Apps Integration</h2>
<p>ODIN is also available for the web. You can implement real-time voice with a couple lines of code in your web based
applications and websites. Just add our NPM package with <code>npm install @4players/odin</code> to install. We also support
vanilla JavaScript for those who don&rsquo;t like frameworks like Angular, React or React Native.</p>
<p>More info can be found in our <a href="/odin/sdk/web/">JavaScript SDK</a>.</p>
<h2 id="swiftswiftui-integration">Swift/SwiftUI Integration</h2>
<p><a href="/odin/sdk/swift/">OdinKit</a> provides easy real-time voice integration for iOS and macOS apps.
Integration is as easy as a couple lines of code. You can also use our
<a href="/odin/examples/swiftui-sample/">SwiftUI sample</a> to get started quickly.</p>
`}),e.add({id:3856,href:"https://www.4players.io/fleet/",title:"ODIN Fleet Documentation",section:"ODIN Fleet Documentation",description:"ODIN Fleet is your gateway to deploying and managing game servers across our global network. Optimized for real-time, stateful game server hosting essential for world-building games and versatile enough for short-term, stateless server tasks typical in match-based games.",content:`<p><img src="/images/fleet/odin-fleet-header_background.jpg" alt="4Players Fleet"></p>
<p>ODIN Fleet is your gateway to deploying and managing game servers across our global network. Optimized for real-time, stateful game server hosting, it&rsquo;s essential for world-building games and versatile enough for short-term, stateless server tasks typical in match-based games.</p>
<h2 id="easy-integration-and-server-deployment">Easy Integration and Server Deployment</h2>
<p>ODIN Fleet simplifies the deployment and management of game servers across our global network. Whether you are using any game engine or platform, ODIN Fleet ensures easy deployment and management of game servers. It is optimized for real-time, stateful game server hosting, making it ideal for world-building games and versatile enough for short-term, stateless server tasks typical in match-based games.</p>
<h2 id="features">Features</h2>
<ul>
<li><strong>Global Network</strong>: Deploy game servers across our global network of data centers.</li>
<li><strong>Real-Time, Stateful Game Server Hosting</strong>: Optimized for real-time, stateful game server hosting, ideal for world-building games.</li>
<li><strong>Versatile</strong>: Handles short-term, stateless server tasks typical in match-based games.</li>
<li><strong>Easy Integration</strong>: Simplifies the deployment and management of game servers.</li>
<li><strong>Game Engine Agnostic</strong>: Supports all major game engines, making deployment easy regardless of the platform.</li>
<li><strong>Scalable</strong>: Easily add or remove game servers as needed.</li>
<li><strong>Secure</strong>: Ensures your game servers are protected from unauthorized access.</li>
<li><strong>Reliable</strong>: Built for reliability, ensuring game servers are always available.</li>
<li><strong>Cost-Effective</strong>: Designed to be cost-effective without compromising quality.</li>
<li><strong>Support</strong>: Comes with dedicated support for deploying and managing game servers.</li>
<li><strong>API</strong>: Provides a powerful API for automating game server deployment and management.</li>
<li><strong>CLI Tool</strong>: Includes a CLI tool for easy game server management from the command line.</li>
<li><strong>Documentation</strong>: Comprehensive documentation to help you get started.</li>
<li><strong>Updates</strong>: Regularly updated with new features and improvements.</li>
<li><strong>Feedback</strong>: Welcomes user feedback to improve the platform.</li>
<li><strong>Roadmap</strong>: Outlines the future direction and planned features of the platform.</li>
</ul>
<h2 id="process">Process</h2>
<ol>
<li><strong>Create an Image of Your Game Server</strong>: Create your own Docker image or provide your Steamworks appId, branch, and password for automatic image creation. Contact support if needed.</li>
<li><strong>Create a Server Configuration</strong>: Define the resources your game server needs, such as CPU, memory, environment variables, and persistent folders. Create multiple configurations for different stages or types of game servers.</li>
<li><strong>Create a Deployment</strong>: Define the number of servers, deployment location, and the image and server configuration to use. Scale, update, or delete deployments as needed.</li>
<li><strong>Monitor Your Deployment</strong>: Use the dashboard to monitor servers, view logs, and manage backups. Integrate a server browser in your game using our API.</li>
<li><strong>Scale Your Deployment</strong>: Easily scale up or down based on player numbers. Use our API to automate scaling.</li>
</ol>
<p>For advanced use cases, automate game server deployment and management with our API. Our CLI tool integrates seamlessly into CI/CD workflows, allowing automated server releases alongside client releases.</p>
<h2 id="getting-started">Getting Started</h2>
<p>To begin with ODIN Fleet, create an account on our platform. Once registered, you can start deploying and managing game servers across our global network.</p>
<p><a href='guides/getting-started' target='' class="btn btn-primary">Get Started for Free</a></p>
`}),e.add({id:3857,href:"https://www.4players.io/odin/hosting/on-premise/gateway/",title:"ODIN Gateway",section:"ODIN Documentation",description:"Gateway to regulate access by spreading ODIN clients over available servers based on current and future usage",content:`<p>This ODIN gateway server is written in Deno. It regulates access by spreading ODIN clients over available ODIN servers based on current and future usage. It also performs basic checks on customer license conditions.</p>
<pre><code class="language-mermaid">sequenceDiagram
  participant Client
  participant Gateway
  participant Server

  Server -&gt;&gt; Gateway: sfu.GridConfig RPC
  activate Gateway
  Gateway --&gt;&gt; Server: Receive recommended settings
  deactivate Gateway

  loop every n seconds
  Server -&gt;&gt; Gateway: sfu.Report RPC
  activate Gateway
  Gateway --&gt;&gt; Server: Receive enqueued tasks
  deactivate Gateway
  end

  autonumber 1

  Client -&gt;&gt; Gateway: Connect RPC
  activate Gateway
  Gateway --&gt;&gt; Client: Receive signed room token 
  deactivate Gateway

  Client -&gt;&gt; Server: Join Room
</code></pre>
<h2 id="setup-development-environment">Setup Development Environment</h2>
<p>The following prerequisites are necessary to start development:</p>
<ul>
<li><a href="https://deno.land/#installation">Deno</a></li>
</ul>
<h2 id="configuration">Configuration</h2>
<p>The gateway is configured using a TypeScript configuration file (<a href="https://github.com/4Players/odin-gateway/blob/main/config.ts">config.ts</a>). In addition, the following optional command-line arguments are available to enforce specific options:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Option</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>--host</code></td>
<td style="text-align:left">The IP address to listen on</td>
</tr>
<tr>
<td style="text-align:left"><code>--port</code></td>
<td style="text-align:left">The TCP port number to listen on</td>
</tr>
<tr>
<td style="text-align:left"><code>--ssl</code></td>
<td style="text-align:left">Enable HTTPS</td>
</tr>
<tr>
<td style="text-align:left"><code>--certificate</code></td>
<td style="text-align:left">The certificate file to use</td>
</tr>
<tr>
<td style="text-align:left"><code>--privatekey</code></td>
<td style="text-align:left">The private key file to use</td>
</tr>
</tbody>
</table>
<p><strong>Note:</strong> For local testing, using <a href="https://github.com/FiloSottile/mkcert">mkcert</a> is recommended.</p>
<h3 id="importing-customer-keys">Importing Customer Keys</h3>
<p>Instead of providing a static list of customer keys in the gateway configuration file, you can also write your own custom import function, which needs to return a <code>Promise&lt;Customer[]&gt;</code> value.</p>
<pre><code class="language-typescript">customerApi: {
  updateFunction: myFunction, // async function returning a list of customers
  updateInterval: 300,        // interval in seconds
},
</code></pre>
<p>This function can be used to either fetch your customer keys from a RESTful API or a reload file on disk. Here&rsquo;s an example:</p>
<pre><code class="language-typescript">async function myFunction(): Promise&lt;Customer[]&gt; {
  try {
    const response = await fetch(&quot;https://domain.tld/api/customer-keys&quot;);
    if (response.status !== 200) {
      throw &quot;something went wrong&quot;;
    }
    return await response.json();
  } catch (_e) {
    // handle error
  }
  return [];
}
</code></pre>
<h2 id="how-to-start">How to Start</h2>
<pre><code class="language-shell"># start a HTTP server on port 7000
deno run --unstable --allow-net --import-map=imports.json main.ts

# start a HTTPS server on port 7000
deno run --unstable --allow-net --allow-read=. --import-map=imports.json main.ts --ssl
</code></pre>
<p><strong>Note:</strong> If you don&rsquo;t want to install Deno on the target system, you can also compile the scripts into a self-containing executable. Click <a href="https://deno.land/manual/tools/compiler">here</a> for details.</p>
<h2 id="public-api">Public API</h2>
<h3 id="authentication">Authentication</h3>
<p>Authentication for the public API is done using a <code>Bearer</code> token signed with an ODIN access key. When specified, the <a href="https://www.rfc-editor.org/rfc/rfc7519#section-4.1.3">audience</a> claim (aud) in the token must be set to <code>gateway</code>. The payload of a decoded JWT looks like this:</p>
<pre><code class="language-json">{
  &quot;rid&quot;: &quot;foo&quot;,
  &quot;uid&quot;: &quot;bar&quot;,
  &quot;aud&quot;: &quot;gateway&quot;,
  &quot;sub&quot;: &quot;connect&quot;,
  &quot;exp&quot;: 1669852860,
  &quot;nbf&quot;: 1669852800
}
</code></pre>
<p>For details on generating tokens, please refer to <a href="https://github.com/4Players/odin-tokens">@4players/odin-tokens</a>.</p>
<h3 id="rpc-methods">RPC Methods</h3>
<p>To use any of the following methods, the JWT used to authorize must have its name listed in the <a href="https://www.rfc-editor.org/rfc/rfc7519#section-4.1.2">subject</a> claim (sub).</p>
<h4 id="connect">Connect</h4>
<p>Authorizes ODIN clients to access the room specified in the <code>Bearer</code> token and responds with a new JWT signed with the gateway master key, which can be used to join a room on an attached ODIN server.</p>
<pre><code class="language-shell">curl --request POST \\
  --url http://localhost:7000/ \\
  --header 'Authorization: Bearer \${JWT}' \\
  --header 'Content-Type: application/json' \\
  --data '{
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;method&quot;: &quot;Connect&quot;,
    &quot;params&quot;: {},
    &quot;id&quot;: 1
  }'
</code></pre>
<h4 id="roomclose">RoomClose</h4>
<p>Closes the specified room (if available) and prevents it from being joined again until <code>ban_time</code> is expired.</p>
<pre><code class="language-shell">curl --request POST \\
  --url http://localhost:7000/ \\
  --header 'Authorization: Bearer \${JWT}' \\
  --header 'Content-Type: application/json' \\
  --data '{
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;method&quot;: &quot;RoomClose&quot;,
    &quot;params&quot;: {
      &quot;room_id&quot;: &quot;\${ROOM_ID}&quot;,
      &quot;ban_time&quot;: \${OPTIONAL_TIME_IN_SECONDS},
    },
    &quot;id&quot;: 1
  }'
</code></pre>
<h4 id="roomupdate">RoomUpdate</h4>
<p>Updates the global user data of the specified room using the given <code>user_data</code> byte array.</p>
<pre><code class="language-shell">curl --request POST \\
  --url https://localhost:7000/ \\
  --header 'Authorization: Bearer \${JWT}' \\
  --header 'Content-Type: application/json' \\
  --data '{
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;method&quot;: &quot;RoomUpdate&quot;,
    &quot;params&quot;: {
      &quot;room_id&quot;: &quot;\${ROOM_ID}&quot;,
      &quot;user_data&quot;: \${ARRAY_OF_BYTES}
    },
    &quot;id&quot;: 1
  }'
</code></pre>
<h4 id="roombanclient">RoomBanClient</h4>
<p>Kicks all clients matching the specified <code>user_id</code> from the specified room and prevents them from joining again until <code>ban_time</code> is expired.</p>
<pre><code class="language-shell">curl --request POST \\
  --url http://localhost:7000/ \\
  --header 'Authorization: Bearer \${JWT}' \\
  --header 'Content-Type: application/json' \\
  --data '{
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;method&quot;: &quot;RoomBanClient&quot;,
    &quot;params&quot;: {
      &quot;room_id&quot;: &quot;\${ROOM_ID}&quot;,
      &quot;user_id&quot;: &quot;\${PEER_USER_ID}&quot;,
      &quot;ban_time&quot;: \${OPTIONAL_TIME_IN_SECONDS},
    },
    &quot;id&quot;: 1
  }'
</code></pre>
<h4 id="roomsendmessage">RoomSendMessage</h4>
<p>Sends arbitrary data to all clients matching the specified <code>user_id</code> in the specified room.</p>
<pre><code class="language-shell">curl --request POST \\
  --url https://localhost:7000/ \\
  --header 'Authorization: Bearer \${JWT}' \\
  --header 'Content-Type: application/json' \\
  --data '{
    &quot;jsonrpc&quot;: &quot;2.0&quot;,
    &quot;method&quot;: &quot;RoomSendMessage&quot;,
    &quot;params&quot;: {
      &quot;room_id&quot;: &quot;\${ROOM_ID}&quot;,
      &quot;user_id&quot;: &quot;\${PEER_USER_ID}&quot;,
      &quot;message&quot;: \${ARRAY_OF_BYTES}
    },
    &quot;id&quot;: 1
  }'
</code></pre>
`}),e.add({id:3858,href:"https://www.4players.io/odin/hosting/on-premise/server/",title:"ODIN Server",section:"ODIN Documentation",description:"Selective Forwarding Unit (SFU) to connects users in mutual rooms by acting as a relay for media and data",content:`<p>The ODIN server is a Selective Forwarding Unit (SFU), which connects users in mutual rooms by acting as a relay for media and data.</p>
<pre><code class="language-mermaid">graph BT
  subgraph ODIN Server
    OR2[Odin Room 1]
    OR[Odin Room 2]        
  end
  subgraph Mobile
    ClientA[Client D] &lt;--&gt; OR
    ClientB[Client C] &lt;--&gt; OR
  end
  subgraph Desktop 
    ClientB[Client C] &lt;--&gt; OR2   
    ClientC[Client B] &lt;--&gt; OR2
  end
  subgraph Consoles*
    ClientD[Client A] &lt;--&gt; OR2
  end
</code></pre>
<h2 id="configuration">Configuration</h2>
<p>The server is configured using a configuration file and optional command-line arguments.</p>
<p><strong>Note:</strong> For local testing, using <a href="https://github.com/FiloSottile/mkcert">mkcert</a> is recommended to generate certificates.</p>
<h3 id="command-line-arguments">Command-Line arguments</h3>
<table>
<thead>
<tr>
<th style="text-align:left">Option</th>
<th style="text-align:left">Description</th>
<th style="text-align:left">Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><code>--config</code></td>
<td style="text-align:left">Path to the config file</td>
<td style="text-align:left"><code>config.toml</code></td>
</tr>
<tr>
<td style="text-align:left"><code>--license</code></td>
<td style="text-align:left">Path to the license file</td>
<td style="text-align:left"><code>license.toml</code></td>
</tr>
</tbody>
</table>
<p>Here&rsquo;s an example on how to start the server using a custom config path.</p>
<pre><code class="language-bash">./grid --config /etc/grid/config.toml
</code></pre>
<h3 id="the-configtoml-file">The <code>config.toml</code> file</h3>
<p>You can change the behavior of your ODIN server by modifying its configuration file called <code>config.toml</code>, which uses the <a href="https://github.com/toml-lang/toml">TOML</a> format.</p>
<h4 id="verbosity"><code>verbosity</code></h4>
<p>The verbosity level <code>[0-3]</code> to define how much information should be written to logs.</p>
<pre><code class="language-toml">verbosity = 1
</code></pre>
<h4 id="public_address-subsuprequiredsubsup"><code>public_address</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The FQDN and port number where the server can be reached from the Internet.</p>
<pre><code class="language-toml">public_address = &quot;localhost:4433&quot;
</code></pre>
<h3 id="the-supervisor-section">The <code>[supervisor]</code> section</h3>
<p>The <code>[supervisor]</code> section allows you to attach your server instance to an external <a href="https://github.com/4Players/odin-gateway">gateway</a>, which can be used for scalability in your hosting infrastructure. It is expected to be specified on the root level.</p>
<h4 id="url-subsuprequiredsubsup"><code>url</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The full web address of the supervisor to contact and send reports to.</p>
<pre><code class="language-toml">url = &quot;http://localhost:7000/internal&quot;
</code></pre>
<h4 id="report_interval"><code>report_interval</code></h4>
<p>The time in milliseconds between consecutive reports to the supervisor.</p>
<pre><code class="language-toml">report_interval = 5_000
</code></pre>
<h4 id="no_warmup"><code>no_warmup</code></h4>
<p>When true, the server wait for one report cycle before starting to send reports to the supervisor.</p>
<pre><code class="language-toml">no_warmup = false
</code></pre>
<h4 id="version"><code>version</code></h4>
<p>A freely pickable number to send with reports. This is currently unused, but reserved for future usage.</p>
<pre><code class="language-toml">version = 123456
</code></pre>
<h3 id="the-authorization-section">The <code>[authorization]</code> section</h3>
<p>The ODIN server uses JSON Web Tokens (JWT) with EdDSA/Ed25519 signature for client authorization. The <code>[authorization]</code> section can be used to change the behavior of this process.</p>
<h4 id="allow_unsigned"><code>allow_unsigned</code></h4>
<p>Then true, the server will accept logins using unsigned tokens. It is strongly recommended, that you do <strong>NOT</strong> enable this in a production environment.</p>
<pre><code class="language-toml">allow_unsigned = false
</code></pre>
<h4 id="leeway"><code>leeway</code></h4>
<p>The number of milliseconds a login token can be before or beyond its valid time period and still pass.</p>
<pre><code class="language-toml">leeway = 5_000
</code></pre>
<h3 id="the-authorizationkeys-section">The <code>[[authorization.keys]]</code> section</h3>
<p>The <code>[[authorization.keys]]</code> section is used to define a list of keys allowed to sign login tokens. When using a <code>[supervisor]</code>, this section can be omitted as it will be automatically generated by the <a href="https://github.com/4Players/odin-gateway">gateway</a>.</p>
<pre><code class="language-toml">[[authorization.keys]]
kid = &quot;Afkwfu4BVHDh&quot;
kty = &quot;OKP&quot;
crv = &quot;Ed25519&quot;
x = &quot;a5J2bhmU7vsY0LrW1zt56iUdmhRUNz7Pl9eBoCy29d8&quot;
d = &quot;5FYw1qdABjE0qEKEe821L7UPl_DZfO-PavpaiLsGDR0&quot;
</code></pre>
<p><strong>Note:</strong> You can use the <a href="https://www.npmjs.com/package/@4players/odin-cli">@4players/odin-cli</a> package to generate this section for you.</p>
<h3 id="the-quic-section">The <code>[quic]</code> section</h3>
<p>The <code>[quic]</code> section is used to enable and configure the HTTP/3 socket listener for native ODIN core SDK clients.</p>
<h4 id="binding-subsuprequiredsubsup"><code>binding</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The socket where incoming connections are accepted from.</p>
<pre><code class="language-toml">binding = &quot;0.0.0.0:4433&quot;
</code></pre>
<h4 id="certificate_file-subsuprequiredsubsup"><code>certificate_file</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The path to a PEM-encoded leaf certificate followed by optional intermediate certificates.</p>
<pre><code class="language-toml">certificate_file = &quot;fullchain.pem&quot;
</code></pre>
<h4 id="privatekey_file-subsuprequiredsubsup"><code>privatekey_file</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The path to a PEM-encoded private key.</p>
<pre><code class="language-toml">privatekey_file = &quot;privkey.pem&quot;
</code></pre>
<h4 id="migration"><code>migration</code></h4>
<p>When enabled, the server accept IP address changes from clients.</p>
<pre><code class="language-toml">migration = true
</code></pre>
<h4 id="keep_alive_interval"><code>keep_alive_interval</code></h4>
<p>Time in milliseconds between keep-alive packets sent by the server.</p>
<pre><code class="language-toml">keep_alive_interval = 5_000 # ms
</code></pre>
<h4 id="idle_timeout"><code>idle_timeout</code></h4>
<p>Drop a connection if no packets have been received in this time span in milliseconds.</p>
<pre><code class="language-toml">idle_timeout = 30_000 # ms
</code></pre>
<h4 id="pre_send_timeout"><code>pre_send_timeout</code></h4>
<p>The maximum time the sender waits for a packet to be inserted into the send buffer.</p>
<pre><code class="language-toml">pre_send_timeout = 500 # ms
</code></pre>
<h4 id="connect_timeout"><code>connect_timeout</code></h4>
<p>The maximum time in milliseconds a connection can take to finish the HTTP/3 setup, until a client is created.</p>
<pre><code class="language-toml">connect_timeout = 1_000 # ms
</code></pre>
<h4 id="no_peers_timeout"><code>no_peers_timeout</code></h4>
<p>The maximum time in milliseconds a client can stay connected, after leaving all rooms.</p>
<pre><code class="language-toml">no_peers_timeout = 1_000 # ms
</code></pre>
<h3 id="the-http-section">The <code>[http]</code> section</h3>
<p>The <code>[http]</code> section is used to enable and configure the socket listener for ODIN web SDK clients.</p>
<h4 id="binding-subsuprequiredsubsup-1"><code>binding</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The socket where incoming connections are accepted from.</p>
<pre><code class="language-toml">binding = &quot;0.0.0.0:4433&quot;
</code></pre>
<h4 id="certificate_file-subsuprequiredsubsup-1"><code>certificate_file</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The path to a PEM-encoded leaf certificate followed by optional intermediate certificates.</p>
<pre><code class="language-toml">certificate_file = &quot;fullchain.pem&quot;
</code></pre>
<h4 id="privatekey_file-subsuprequiredsubsup-1"><code>privatekey_file</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The path to a PEM-encoded private key.</p>
<pre><code class="language-toml">privatekey_file = &quot;privkey.pem&quot;
</code></pre>
<h4 id="webrtc_candidates"><code>webrtc_candidates</code></h4>
<p>The list of IP addresses to be offered as candidates.</p>
<pre><code class="language-toml">webrtc_candidates = [&quot;127.0.0.1&quot;, &quot;::1&quot;]
</code></pre>
<h4 id="webrtc_binding"><code>webrtc_binding</code></h4>
<p>The socket where WebRTC connections are accepted from.</p>
<pre><code class="language-toml">webrtc_binding = &quot;0.0.0.0:5000&quot;
</code></pre>
<h4 id="timeout"><code>timeout</code></h4>
<p>Drop connections after this much inactivity in milliseconds.</p>
<pre><code class="language-toml">timeout = 10_000 # ms
</code></pre>
<h4 id="ping_interval"><code>ping_interval</code></h4>
<p>Send a ping to the client using this interval in milliseconds.</p>
<pre><code class="language-toml">ping_interval = 5_000 # ms
</code></pre>
<h3 id="the-metrics-section">The <code>[metrics]</code> section</h3>
<p>The <code>[metrics]</code> section is used to enable and configure a <a href="https://prometheus.io">Prometheus</a> metrics listener.</p>
<h4 id="binding-subsuprequiredsubsup-2"><code>binding</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The socket where incoming connections are accepted from.</p>
<pre><code class="language-toml">binding = &quot;0.0.0.0:9000&quot;
</code></pre>
<h4 id="idle_timeout-1"><code>idle_timeout</code></h4>
<p>How long after the last change a metric value is reported.</p>
<pre><code class="language-toml">idle_timeout = 3_600_000 # ms
</code></pre>
<h4 id="global_labels"><code>global_labels</code></h4>
<p>Labels that are added to all reported metrics.</p>
<pre><code class="language-toml">global_labels = {deployment = &quot;foo&quot;}
</code></pre>
<h4 id="allowed"><code>allowed</code></h4>
<p>List of IP subnets that are allowed to query metrics from the server.</p>
<pre><code class="language-toml">allowed = [&quot;0.0.0.0/0&quot;]
</code></pre>
<h3 id="the-limit-section">The <code>[limit]</code> section</h3>
<p>The <code>[limit]</code> section is used to configure concurrency limits.</p>
<h4 id="max_clients"><code>max_clients</code></h4>
<p>The maximum number of concurrent clients accepted by the server.</p>
<pre><code class="language-toml">max_clients = 25
</code></pre>
<h4 id="max_rooms"><code>max_rooms</code></h4>
<p>The maximum number of concurrent rooms accepted by the server.</p>
<pre><code class="language-toml">max_rooms = 25
</code></pre>
<h4 id="max_peers"><code>max_peers</code></h4>
<p>The maximum number of concurrent peers accepted by the server.</p>
<pre><code class="language-toml">max_peers = 25
</code></pre>
<h3 id="the-limitnetwork-section">The <code>[limit.network]</code> section</h3>
<p>The <code>[limit.network]</code> section is used to configure network rate limits.</p>
<h4 id="incoming_media_packets"><code>incoming_media_packets</code></h4>
<p>The number of packets a media can send to the server every second.</p>
<pre><code class="language-toml">incoming_media_packets = {rate = 50, capacity = 100}
</code></pre>
<h3 id="the-limitpeer-section">The <code>[limit.peer]</code> section</h3>
<p>The <code>[limit.peer]</code> section is used to configure limits per individual peer.</p>
<h4 id="incoming_messages"><code>incoming_messages</code></h4>
<p>The number of command packets of a peer that are processed by the server every second.</p>
<pre><code class="language-toml">incoming_messages = {rate = 10, capacity = 50, overflow = 20}
</code></pre>
<h4 id="medias"><code>medias</code></h4>
<p>The number of medias a peer can create.</p>
<pre><code class="language-toml">medias = 5
</code></pre>
<h3 id="the-telemetry-section">The <code>[telemetry]</code> section</h3>
<p>The <code>[telemetry]</code> section is used to enable a telemetry client used for licensing.</p>
<h4 id="address-subsuprequiredsubsup"><code>address</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The web address of the telemetry server to contact and send reports to.</p>
<pre><code class="language-toml">address = &quot;http://localhost/&quot;
</code></pre>
<h4 id="interval"><code>interval</code></h4>
<p>The interval in milliseconds how often the telemetry data is being sent.</p>
<pre><code class="language-toml">interval = 5_000 # ms
</code></pre>
<h4 id="max_consecutive_failures"><code>max_consecutive_failures</code></h4>
<p>When set, this defines the maximum number of times sending telemetry data can fail before the server shuts down.</p>
<pre><code class="language-toml">max_consecutive_failures = 4
</code></pre>
<h4 id="data"><code>data</code></h4>
<p>Data from the <code>[license]</code> section to send to the telemetry server.</p>
<pre><code class="language-toml">data = [&quot;LicenseValidUntil&quot;, &quot;LicenseLicensee&quot;, &quot;LicenseSerialNumber&quot;, &quot;LicenseIssuer&quot;]
</code></pre>
<h3 id="the-license-section">The <code>[license]</code> section</h3>
<p>The optional <code>[license]</code> section is used to identify the licensee of the ODIN server. This section is used in a separate <code>license.toml</code> file.</p>
<h4 id="signature-subsuprequiredsubsup"><code>signature</code> <sub><sup><em>Required</em></sub></sup></h4>
<p>The signature of the license used to verify its validity.</p>
<pre><code class="language-toml">signature = &quot;&quot;
</code></pre>
<h4 id="issuer"><code>issuer</code></h4>
<p>An optional field to identify the issuer of the license.</p>
<pre><code class="language-toml">issuer = &quot;4Players&quot;
</code></pre>
<h4 id="licensee"><code>licensee</code></h4>
<p>An optional field to identify the licensee. Usually, this is your 4Players customer number (CID).</p>
<pre><code class="language-toml">licensee = &quot;622012345&quot;
</code></pre>
<h4 id="serial_number"><code>serial_number</code></h4>
<p>An optional serial number of the license. Usually, this is the ID of your on-premise hosting subscription project.</p>
<pre><code class="language-toml">serial_number = &quot;b0FBTWZ2Rj3OY25uZWtYRlpoekVBUT09&quot;
</code></pre>
<h4 id="valid_until"><code>valid_until</code></h4>
<p>An optional expiration date for the license. When set, the server can&rsquo;t be used after his date.</p>
<pre><code class="language-toml">valid_until = 1987-07-05T17:45:00Z
</code></pre>
<h3 id="the-internal-section">The <code>[internal]</code> section</h3>
<p>The <code>[internal]</code> section is used to configure internal settings for debugging.</p>
<h4 id="log_hanging_api_calls"><code>log_hanging_api_calls</code></h4>
<p>A debug option to emit warnings if RPC calls take longer then the threshold in milliseconds.</p>
<pre><code class="language-toml">log_hanging_api_calls = 1_000 # ms
</code></pre>
<h2 id="examples">Examples</h2>
<p>Create a configuration file and use the <code>grid</code> executable to start the ODIN server.</p>
<h3 id="minimal-configtoml-for-supervised-server">Minimal <code>config.toml</code> for Supervised Server</h3>
<p>When running the ODIN server in combination with a <a href="https://github.com/4Players/odin-gateway">gateway</a>, you only need to specify the web address of the supervisor. The server will register with the supervisor and automatically receive recommended settings, which will be used to extend the local <code>config.toml</code> file.</p>
<p>The recommended configuration of the gateway can be defined <a href="https://github.com/4Players/odin-gateway/blob/main/gridConfig.ts">here</a>.</p>
<pre><code class="language-toml">[supervisor]
url = &quot;http://localhost:7000/internal&quot;
</code></pre>
<h3 id="minimal-configtoml-for-standalone-server">Minimal <code>config.toml</code> for Standalone Server</h3>
<p>When running the ODIN server in standalone mode, you need to specify at least one JWK used for authorization pair as well as the binding and certificate configuration for incoming client connections.</p>
<pre><code class="language-toml">[[authorization.keys]]
kid = &quot;Afkwfu4BVHDh&quot;
kty = &quot;OKP&quot;
crv = &quot;Ed25519&quot;
x = &quot;a5J2bhmU7vsY0LrW1zt56iUdmhRUNz7Pl9eBoCy29d8&quot;
d = &quot;5FYw1qdABjE0qEKEe821L7UPl_DZfO-PavpaiLsGDR0&quot;

[quic]
binding = &quot;0.0.0.0:4433&quot;
certificate_file = &quot;fullchain.pem&quot;
privatekey_file = &quot;privkey.pem&quot;

[http]
binding = &quot;0.0.0.0:4433&quot;
certificate_file = &quot;fullchain.pem&quot;
privatekey_file = &quot;privkey.pem&quot;
</code></pre>
`}),e.add({id:3859,href:"https://www.4players.io/odin/sdk/swift/classes/odinaccesskey/",title:"OdinAccessKey",section:"ODIN Documentation",description:"Swift Class to handle ODIN access keys",content:`<pre><code class="language-swift">public class OdinAccessKey
</code></pre>
<p>Class to handle ODIN access keys.</p>
<p>An access key is a 44 character long Base64-String, which consists of a version, random bytes and a checksum.</p>
<h2 id="properties">Properties</h2>
<h3 id="rawvalue"><code>rawValue</code></h3>
<pre><code class="language-swift">public let rawValue: String
</code></pre>
<p>The underlying access key as a string.</p>
<h3 id="id"><code>id</code></h3>
<pre><code class="language-swift">public var id: String
</code></pre>
<p>The key ID of the access key. This is included in room tokens, making it possible to identify which public key
must be used for verification.</p>
<h3 id="publickey"><code>publicKey</code></h3>
<pre><code class="language-swift">public var publicKey: String
</code></pre>
<p>The public key of the access key. The public key is based on the Ed25519 curve and must be submitted to 4Players
so that a generated room token can be verified.</p>
<h3 id="secretkey"><code>secretKey</code></h3>
<pre><code class="language-swift">public var secretKey: String
</code></pre>
<p>The secret key of the access key. The secret key is based on the Ed25519 curve and used to sign a generated room
token to access the ODIN network.</p>
<h2 id="methods">Methods</h2>
<h3 id="init"><code>init()</code></h3>
<pre><code class="language-swift">public convenience init()
</code></pre>
<p>Initializes a new access key instance.</p>
<h3 id="init_"><code>init(_:)</code></h3>
<pre><code class="language-swift">public init(_ string: String?) throws
</code></pre>
<p>Initializes an access key instance using an existing access key string.</p>
<h3 id="deinit"><code>deinit</code></h3>
<pre><code class="language-swift">deinit
</code></pre>
<p>Destroys the underlying token generator instance.</p>
<h3 id="generatetokenroomiduserid"><code>generateToken(roomId:userId:)</code></h3>
<pre><code class="language-swift">public func generateToken(roomId: String, userId: String? = &quot;&quot;) throws -&gt; OdinToken
</code></pre>
<p>Uses the internal token generator to create a signed JWT based of this access key, which can be used by a client
to join a room.</p>
`}),e.add({id:3860,href:"https://www.4players.io/odin/sdk/swift/classes/odinaudio/",title:"OdinAudio",section:"ODIN Documentation",description:"Class to help managing the core audio functionality.",content:`<pre><code class="language-swift">public class OdinAudio
</code></pre>
<p>Class to help managing the core audio functionality.</p>
<p>The <code>AVAudioEngine</code> instance manages audio nodes, controls playback and configures rendering constraints.</p>
<h2 id="properties">Properties</h2>
<h3 id="engine"><code>engine</code></h3>
<pre><code class="language-swift">public let engine: AVAudioEngine
</code></pre>
<p>The underlying <code>AVAudioEngine</code> instance.</p>
<h3 id="devices"><code>devices</code></h3>
<pre><code class="language-swift">@Published public private(set) var devices: [String: OdinAudioDevice] = [:]
</code></pre>
<p>A list of audio devices available.</p>
<h3 id="inputdevices"><code>inputDevices</code></h3>
<pre><code class="language-swift">public var inputDevices: [String: OdinAudioDevice]
</code></pre>
<p>An list of audio input devices.</p>
<h3 id="outputdevices"><code>outputDevices</code></h3>
<pre><code class="language-swift">public var outputDevices: [String: OdinAudioDevice]
</code></pre>
<p>An list of audio output devices.</p>
<h3 id="isrunning"><code>isRunning</code></h3>
<pre><code class="language-swift">public var isRunning: Bool
</code></pre>
<p>Indicates the status of the underlying <code>AVAudioEngine</code> instance.</p>
<h2 id="methods">Methods</h2>
<h3 id="deinit"><code>deinit</code></h3>
<pre><code class="language-swift">deinit
</code></pre>
<p>Destroys room and closes the connection to the server if needed.</p>
<h3 id="start"><code>start()</code></h3>
<pre><code class="language-swift">public func start() throws
</code></pre>
<p>Starts the underlying <code>AVAudioEngine</code> instance.</p>
<h3 id="stop"><code>stop()</code></h3>
<pre><code class="language-swift">public func stop()
</code></pre>
<p>Stops the underlying <code>AVAudioEngine</code> instance.</p>
<h3 id="connect_"><code>connect(_:)</code></h3>
<pre><code class="language-swift">public func connect(_ room: OdinRoom) throws
</code></pre>
<p>Attaches the specified room to the underlying <code>AVAudioEngine</code> instance and connects it.</p>
<h3 id="disconnect_"><code>disconnect(_:)</code></h3>
<pre><code class="language-swift">public func disconnect(_ room: OdinRoom) throws
</code></pre>
<p>Detaches the specified room from the underlying <code>AVAudioEngine</code> instance.</p>
<h3 id="connect_-1"><code>connect(_:)</code></h3>
<pre><code class="language-swift">public func connect(_ media: OdinMedia) throws
</code></pre>
<p>Attaches the specified media to the underlying <code>AVAudioEngine</code> instance and connects it.</p>
<h3 id="disconnect_-1"><code>disconnect(_:)</code></h3>
<pre><code class="language-swift">public func disconnect(_ media: OdinMedia) throws
</code></pre>
<p>Detaches the specified media from the underlying <code>AVAudioEngine</code> instance.</p>
<h3 id="sharedinstance"><code>sharedInstance()</code></h3>
<pre><code class="language-swift">public class func sharedInstance() -&gt; OdinAudio
</code></pre>
<p>Returns a shared instance of the audio engine.</p>
`}),e.add({id:3861,href:"https://www.4players.io/odin/sdk/swift/enums/odinaudioautopilotmode/",title:"OdinAudioAutopilotMode",section:"ODIN Documentation",description:"Collection of possible audio autopilot modes for a room.",content:`<pre><code class="language-swift">public enum OdinAudioAutopilotMode
</code></pre>
<p>Collection of possible audio autopilot modes for a room.</p>
<h2 id="cases">Cases</h2>
<h3 id="off"><code>off</code></h3>
<pre><code class="language-swift">case off
</code></pre>
<p>Remote medias need to be handled manually.</p>
<h3 id="room"><code>room</code></h3>
<pre><code class="language-swift">case room
</code></pre>
<p>Remote medias will be added to the capture/playback mix as a single mixed stream.</p>
<h3 id="media"><code>media</code></h3>
<pre><code class="language-swift">case media
</code></pre>
<p>Remote medias will be added to the capture/playback mix individually.</p>
`}),e.add({id:3862,href:"https://www.4players.io/odin/sdk/swift/structs/odinaudiodevice/",title:"OdinAudioDevice",section:"ODIN Documentation",description:"Struct for audio device handling.",content:`<pre><code class="language-swift">public struct OdinAudioDevice: Equatable, Hashable
</code></pre>
<p>Struct for audio device handling.</p>
<h2 id="properties">Properties</h2>
<h3 id="uid"><code>uid</code></h3>
<pre><code class="language-swift">public let uid: String
</code></pre>
<p>The UID of the audio device.</p>
<h3 id="id"><code>id</code></h3>
<pre><code class="language-swift">public var id: UInt32
</code></pre>
<p>The ID of the audio device.</p>
<h3 id="name"><code>name</code></h3>
<pre><code class="language-swift">public var name: String
</code></pre>
<p>The name of the audio device.</p>
<h3 id="samplerate"><code>sampleRate</code></h3>
<pre><code class="language-swift">public var sampleRate: Double
</code></pre>
<p>The sample rate of the audio device.</p>
<h3 id="inputchannels"><code>inputChannels</code></h3>
<pre><code class="language-swift">public var inputChannels: UInt32
</code></pre>
<p>The number of input channels provided by this audio device.</p>
<p>Note: On iOS, this will just return the channel count of the current <code>AVAudioSession</code> input node to identify a
device as being able to handle input.</p>
<h3 id="outputchannels"><code>outputChannels</code></h3>
<pre><code class="language-swift">public var outputChannels: UInt32
</code></pre>
<p>The number of output channels provided by this audio device.</p>
<p>Note: On iOS, this will just return the channel count of the current <code>AVAudioSession</code> output node to identify a
device as being able to handle output.</p>
<h3 id="isinput"><code>isInput</code></h3>
<pre><code class="language-swift">public var isInput: Bool
</code></pre>
<p>Indicates whether or not this is an input device.</p>
<h3 id="isoutput"><code>isOutput</code></h3>
<pre><code class="language-swift">public var isOutput: Bool
</code></pre>
<p>Indicates whether or not this is an output device.</p>
`}),e.add({id:3863,href:"https://www.4players.io/examples/odin/sdk/web/types/odinaudiostatsevent/",title:"OdinAudioStatsEvent",section:"Examples",description:"OdinAudioStatsEvent Example",content:`<p>The <code>OdinAudioStatsEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances every second and provides access to internal Opus encoder/decoder statistics, which can be used for diagnostic purposes.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinAudioStatsEventPayload <a href="/odin/sdk/web/interfaces/iodinaudiostatseventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3864,href:"https://www.4players.io/examples/odin/sdk/web/types/odinconnectionstatechangedevent/",title:"OdinConnectionStateChangedEvent",section:"Examples",description:"OdinConnectionStateChangedEvent Example",content:`<p>The <code>OdinConnectionStateChangedEvent</code> event is emitted on <span class="external-reference">OdinClient <a href="/odin/sdk/web/classes/odinclient/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when the internal connection state of the underlying main/room stream is updated. You can use the event to determine when your connection is closed unexpectedly (e.g. timeout or server shutdown).</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinConnectionStateChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinconnectionstatechangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinClientEvents <a href="/odin/sdk/web/interfaces/iodinclientevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3865,href:"https://www.4players.io/odin/sdk/swift/enums/odincustomdata/",title:"OdinCustomData",section:"ODIN Documentation",description:"Collection of helper functions to handle ODIN user data.",content:`<pre><code class="language-swift">public enum OdinCustomData
</code></pre>
<p>Collection of helper functions to handle ODIN user data.</p>
<h2 id="methods">Methods</h2>
<h3 id="encode_"><code>encode(_:)</code></h3>
<pre><code class="language-swift">public static func encode(_ string: String) -&gt; [UInt8]
</code></pre>
<p>Converts a string to a byte array.</p>
<h3 id="decode_"><code>decode(_:)</code></h3>
<pre><code class="language-swift">public static func decode(_ bytes: [UInt8]) -&gt; String
</code></pre>
<p>Converts a byte array to a string.</p>
<h3 id="encode_-1"><code>encode(_:)</code></h3>
<pre><code class="language-swift">public static func encode&lt;T: Encodable&gt;(_ codable: T) -&gt; [UInt8]
</code></pre>
<p>Converts a codable type to a byte array.</p>
<h3 id="decode_-1"><code>decode(_:)</code></h3>
<pre><code class="language-swift">public static func decode&lt;T: Decodable&gt;(_ bytes: [UInt8]) -&gt; T?
</code></pre>
<p>Converts a byte array to a codable type.</p>
`}),e.add({id:3866,href:"https://www.4players.io/odin/sdk/swift/enums/odingatewayurl/",title:"OdinGatewayUrl",section:"ODIN Documentation",description:"Collection pre-defined ODIN gateway URLs.",content:`<pre><code class="language-swift">public enum OdinGatewayUrl: String
</code></pre>
<p>Collection pre-defined ODIN gateway URLs.</p>
<h2 id="cases">Cases</h2>
<h3 id="production"><code>production</code></h3>
<pre><code class="language-swift">case production = &quot;https://gateway.odin.4players.io&quot;
</code></pre>
`}),e.add({id:3867,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/",title:"OdinHandler",section:"Examples",description:"OdinHandler Example",content:`<p>The <code>OdinHandler</code> class is the global ODIN manager within Unity. It&rsquo;s built as a singleton. Create an empty game object
in your scene and add this script to it. <code>OdinHandler</code> uses <code>DontDestroyOnLoad</code>
 to keep the singleton
alive even if the scene changes.</p>
<p>You can access the global singleton instance with the <span class="external-reference">Instance <a href="/odin/sdk/unity/classes/odinhandler/instance/"><i class="fas fa-external-link-alt"></i></a></span>
 property.</p>
`}),e.add({id:3868,href:"https://www.4players.io/odin/sdk/swift/classes/odinmanager/",title:"OdinManager",section:"ODIN Documentation",description:"Class to help managing a collection of ODIN rooms.",content:`<pre><code class="language-swift">public class OdinManager
</code></pre>
<p>Class to help managing a collection of ODIN rooms.</p>
<h2 id="properties">Properties</h2>
<h3 id="rooms"><code>rooms</code></h3>
<pre><code class="language-swift">@Published public private(set) var rooms: [String: OdinRoom] = [:]
</code></pre>
<p>An array of current room instances.</p>
<h2 id="methods">Methods</h2>
<h3 id="sharedinstance"><code>sharedInstance()</code></h3>
<pre><code class="language-swift">public class func sharedInstance() -&gt; OdinManager
</code></pre>
<p>Returns a shared instance of the manager.</p>
`}),e.add({id:3869,href:"https://www.4players.io/odin/sdk/swift/classes/odinmedia/",title:"OdinMedia",section:"ODIN Documentation",description:"Class to handle ODIN media.",content:`<pre><code class="language-swift">public class OdinMedia: Hashable, ObservableObject
</code></pre>
<p>Class to handle ODIN media.</p>
<p>A media represents an audio stream that was added to an ODIN room by a peer.</p>
<h2 id="properties">Properties</h2>
<h3 id="streamhandle"><code>streamHandle</code></h3>
<pre><code class="language-swift">public internal(set) var streamHandle: OdinMediaStreamHandle
</code></pre>
<p>The underlying media stream handle to interact with.</p>
<h3 id="audionode"><code>audioNode</code></h3>
<pre><code class="language-swift">public internal(set) var audioNode: AVAudioNode!
</code></pre>
<p>The underlying object that supplies/receives audio data on the media stream.</p>
<h3 id="activitystatus"><code>activityStatus</code></h3>
<pre><code class="language-swift">@Published public internal(set) var activityStatus: Bool = false
</code></pre>
<p>Indicates for whether or not the media stream is sending/receiving data.</p>
<h3 id="id"><code>id</code></h3>
<pre><code class="language-swift">public var id: UInt16
</code></pre>
<p>The ID of the media stream.</p>
<h3 id="peerid"><code>peerId</code></h3>
<pre><code class="language-swift">public var peerId: UInt64
</code></pre>
<p>The ID of the peer that owns the media stream.</p>
<p>Note: This will always be <code>0</code> if the media is owned by your own peer.</p>
<h3 id="remote"><code>remote</code></h3>
<pre><code class="language-swift">public var remote: Bool
</code></pre>
<p>Indicates whether or not this media is owned by a remote peer.</p>
<h3 id="type"><code>type</code></h3>
<pre><code class="language-swift">public var type: OdinMediaStreamType
</code></pre>
<p>The type of the specified media stream.</p>
<h2 id="methods">Methods</h2>
<h3 id="deinit"><code>deinit</code></h3>
<pre><code class="language-swift">deinit
</code></pre>
<p>Destroys the media stream if necessary.</p>
<h3 id="hashinto"><code>hash(into:)</code></h3>
<pre><code class="language-swift">public func hash(into hasher: inout Hasher)
</code></pre>
<p>Hashes the essential components of the media by feeding them into the given hasher.</p>
<h3 id="__"><code>==(_:_:)</code></h3>
<pre><code class="language-swift">public static func ==(lhs: OdinMedia, rhs: OdinMedia) -&gt; Bool
</code></pre>
<p>Returns a value indicating whether two type-erased hashable instances wrap the same media.</p>
`}),e.add({id:3870,href:"https://www.4players.io/examples/odin/sdk/web/types/odinmediaactivitychangedevent/",title:"OdinMediaActivityChangedEvent",section:"Examples",description:"OdinMediaActivityChangedEvent Example",content:`<p>The <code>OdinMediaActivityChangedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
, <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinMedia <a href="/odin/sdk/web/classes/odinmedia/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when a media is sending/receiving data. This can be used to determine when a user starts/stops speaking.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinMediaActivityChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinmediaactivitychangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinMediaEvents <a href="/odin/sdk/web/interfaces/iodinmediaevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3871,href:"https://www.4players.io/examples/odin/sdk/web/types/odinmediastartedstoppedevent/",title:"OdinMediaStartedStoppedEvent",section:"Examples",description:"OdinMediaStartedStoppedEvent Example",content:`<p>The <code>OdinMediaStartedStoppedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 instances whenever a remote peer started/stopped a media in the room. Usually, you would want to call the <code>start</code> or <code>stop</code> method on such media to start/stop the Opus decoder for audio playback.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinMediaStartedStoppedEventPayload <a href="/odin/sdk/web/interfaces/iodinmediastartedstoppedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3872,href:"https://www.4players.io/examples/odin/sdk/web/types/odinmessagereceivedevent/",title:"OdinMessageReceivedEvent",section:"Examples",description:"OdinMessageReceivedEvent Example",content:`<p>The <code>OdinMessageReceivedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when receiving a message from another peer in the room. Note that this event only provides the ID of the peer as <code>senderId</code>. This is because the invoking peer might not be in proximity due to server-side culling.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinMessageReceivedEventPayload <a href="/odin/sdk/web/interfaces/iodinmessagereceivedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3873,href:"https://www.4players.io/odin/sdk/swift/classes/odinpeer/",title:"OdinPeer",section:"ODIN Documentation",description:"Class to handle ODIN peers.",content:`<pre><code class="language-swift">public class OdinPeer: Hashable, ObservableObject
</code></pre>
<p>Class to handle ODIN peers.</p>
<p>A peer represents a client that has joined an ODIN room.</p>
<h2 id="properties">Properties</h2>
<h3 id="id"><code>id</code></h3>
<pre><code class="language-swift">public internal(set) var id: UInt64
</code></pre>
<p>The ID of the peer.</p>
<h3 id="userid"><code>userId</code></h3>
<pre><code class="language-swift">public internal(set) var userId: String
</code></pre>
<p>The user identifier of the peer specified during authentication.</p>
<h3 id="userdata"><code>userData</code></h3>
<pre><code class="language-swift">@Published public internal(set) var userData: [UInt8]
</code></pre>
<p>A byte array with arbitrary user data attached to the peer.</p>
<h3 id="medias"><code>medias</code></h3>
<pre><code class="language-swift">@Published public internal(set) var medias: [OdinMediaStreamHandle: OdinMedia] = [:]
</code></pre>
<p>An array of current medias of the peer.</p>
<h3 id="activemedias"><code>activeMedias</code></h3>
<pre><code class="language-swift">public var activeMedias: [OdinMediaStreamHandle: OdinMedia]
</code></pre>
<p>An array of current active medias of the peer.</p>
<h2 id="methods">Methods</h2>
<h3 id="hashinto"><code>hash(into:)</code></h3>
<pre><code class="language-swift">public func hash(into hasher: inout Hasher)
</code></pre>
<p>Hashes the essential components of the peer by feeding them into the given hasher.</p>
<h3 id="__"><code>==(_:_:)</code></h3>
<pre><code class="language-swift">public static func ==(lhs: OdinPeer, rhs: OdinPeer) -&gt; Bool
</code></pre>
<p>Returns a value indicating whether two type-erased hashable instances wrap the same peer.</p>
`}),e.add({id:3874,href:"https://www.4players.io/examples/odin/sdk/web/types/odinpeerdatachangedevent/",title:"OdinPeerDataChangedEvent",section:"Examples",description:"OdinPeerDataChangedEvent Example",content:`<p>The <code>OdinPeerDataChangedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 and <span class="external-reference">OdinPeer <a href="/odin/sdk/web/classes/odinpeer/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when the user data of a remote peer changed.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinPeerDataChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinpeerdatachangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
<li><span class="external-reference">IOdinPeerEvents <a href="/odin/sdk/web/interfaces/iodinpeerevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3875,href:"https://www.4players.io/examples/odin/sdk/web/types/odinpeerjoinedleftevent/",title:"OdinPeerJoinedLeftEvent",section:"Examples",description:"OdinPeerJoinedLeftEvent Example",content:`<p>The <code>OdinPeerJoinedLeftEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when a remote peer joins or leaves the room.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinPeerJoinedLeftEventPayload <a href="/odin/sdk/web/interfaces/iodinpeerjoinedlefteventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3876,href:"https://www.4players.io/odin/sdk/swift/enums/odinresult/",title:"OdinResult",section:"ODIN Documentation",description:"Collection of functions to handle ODIN return codes.",content:`<pre><code class="language-swift">public enum OdinResult: Error, CustomStringConvertible
</code></pre>
<p>Collection of functions to handle ODIN return codes.</p>
<h2 id="cases">Cases</h2>
<h3 id="success"><code>success</code></h3>
<pre><code class="language-swift">case success
</code></pre>
<p>A function completed successfully.</p>
<h3 id="error_"><code>error(_:)</code></h3>
<pre><code class="language-swift">case error(String)
</code></pre>
<p>A function aborted with an error.</p>
<h3 id="value_"><code>value(_:)</code></h3>
<pre><code class="language-swift">case value(UInt32)
</code></pre>
<p>A function returned an integer value.</p>
<h2 id="properties">Properties</h2>
<h3 id="description"><code>description</code></h3>
<pre><code class="language-swift">public var description: String
</code></pre>
<p>A string representation of the result.</p>
<h2 id="methods">Methods</h2>
<h3 id="format_"><code>format(_:)</code></h3>
<pre><code class="language-swift">public static func format(_ code: UInt32) -&gt; OdinResult
</code></pre>
<p>Helper function that formats a specified return code using a set of pre-defined cases.</p>
<h3 id="validate_"><code>validate(_:)</code></h3>
<pre><code class="language-swift">public static func validate(_ code: UInt32) throws
</code></pre>
<p>Helper function that validates a specified return code and throws an error if necessary.</p>
`}),e.add({id:3877,href:"https://www.4players.io/odin/sdk/swift/classes/odinroom/",title:"OdinRoom",section:"ODIN Documentation",description:"Class to handle ODIN rooms.",content:`<pre><code class="language-swift">public class OdinRoom: Hashable, ObservableObject
</code></pre>
<p>Class to handle ODIN rooms.</p>
<p>A room is the virtual space where clients can communicate with each other.</p>
<h2 id="properties">Properties</h2>
<h3 id="roomhandle"><code>roomHandle</code></h3>
<pre><code class="language-swift">public internal(set) var roomHandle: OdinRoomHandle
</code></pre>
<p>The underlying room handle to interact with.</p>
<h3 id="ownpeer"><code>ownPeer</code></h3>
<pre><code class="language-swift">public let ownPeer: OdinPeer = .init()
</code></pre>
<p>An instance of your own peer in the room.</p>
<h3 id="gateway"><code>gateway</code></h3>
<pre><code class="language-swift">public private(set) var gateway: String = &quot;&quot;
</code></pre>
<p>The gateway URL used for authentication.</p>
<h3 id="audioautopilot"><code>audioAutopilot</code></h3>
<pre><code class="language-swift">public private(set) var audioAutopilot: OdinAudioAutopilotMode = .room
</code></pre>
<p>Indicates how and if medias will be added to the capture/playback mix automatically.</p>
<h3 id="audionode"><code>audioNode</code></h3>
<pre><code class="language-swift">public internal(set) var audioNode: AVAudioSourceNode!
</code></pre>
<p>The underlying object that receives mixed audio data from remote medias in the room.</p>
<h3 id="audioconfig"><code>audioConfig</code></h3>
<pre><code class="language-swift">public private(set) var audioConfig: OdinApmConfig = .init(
    voice_activity_detection: true,
    voice_activity_detection_attack_probability: 0.9,
    voice_activity_detection_release_probability: 0.8,
    volume_gate: false,
    volume_gate_attack_loudness: -30,
    volume_gate_release_loudness: -40,
    echo_canceller: false,
    high_pass_filter: false,
    pre_amplifier: false,
    noise_suppression_level: OdinNoiseSuppressionLevel_Moderate,
    transient_suppressor: false
)
</code></pre>
<p>The audio processing module settings of the room.</p>
<h3 id="id"><code>id</code></h3>
<pre><code class="language-swift">@Published public private(set) var id: String = &quot;&quot;
</code></pre>
<p>The name of the room.</p>
<h3 id="customer"><code>customer</code></h3>
<pre><code class="language-swift">@Published public private(set) var customer: String = &quot;&quot;
</code></pre>
<p>The identifier of the customer the room is assigned to.</p>
<h3 id="userdata"><code>userData</code></h3>
<pre><code class="language-swift">@Published public private(set) var userData: [UInt8] = []
</code></pre>
<p>A byte array with arbitrary user data attached to the room.</p>
<h3 id="connectionstatus"><code>connectionStatus</code></h3>
<pre><code class="language-swift">@Published public private(set) var connectionStatus = (
    state: OdinRoomConnectionState_Disconnected,
    reason: OdinRoomConnectionStateChangeReason_ClientRequested
)
</code></pre>
<p>A tuple with current connection status of the room including a reason identifier for the last update.</p>
<h3 id="peers"><code>peers</code></h3>
<pre><code class="language-swift">@Published public private(set) var peers: [UInt64: OdinPeer] = [:]
</code></pre>
<p>An array of current peers in the room.</p>
<h3 id="medias"><code>medias</code></h3>
<pre><code class="language-swift">@Published public private(set) var medias: [OdinMediaStreamHandle: OdinMedia] = [:]
</code></pre>
<p>An array of current medias in the room.</p>
<h3 id="delegate"><code>delegate</code></h3>
<pre><code class="language-swift">public weak var delegate: OdinRoomDelegate?
</code></pre>
<p>An optional delegate with custom event callbacks.</p>
<h3 id="remotepeers"><code>remotePeers</code></h3>
<pre><code class="language-swift">public var remotePeers: [UInt64: OdinPeer]
</code></pre>
<p>An array of current remote peers in the room.</p>
<h3 id="localmedias"><code>localMedias</code></h3>
<pre><code class="language-swift">public var localMedias: [OdinMediaStreamHandle: OdinMedia]
</code></pre>
<p>An array of current local medias in the room, which can be used for capture.</p>
<h3 id="remotemedias"><code>remoteMedias</code></h3>
<pre><code class="language-swift">public var remoteMedias: [OdinMediaStreamHandle: OdinMedia]
</code></pre>
<p>An array of current remote medias in the room, which can be used for playback.</p>
<h3 id="isconnected"><code>isConnected</code></h3>
<pre><code class="language-swift">public var isConnected: Bool
</code></pre>
<p>Indicates wether or not the room handle is connected.</p>
<h3 id="isconnecting"><code>isConnecting</code></h3>
<pre><code class="language-swift">public var isConnecting: Bool
</code></pre>
<p>Indicates wether or not the room handle is connecting.</p>
<h3 id="isdisconnected"><code>isDisconnected</code></h3>
<pre><code class="language-swift">public var isDisconnected: Bool
</code></pre>
<p>Indicates wether or not the room handle is disconnected.</p>
<h2 id="methods">Methods</h2>
<h3 id="init"><code>init()</code></h3>
<pre><code class="language-swift">public convenience init()
</code></pre>
<p>Initializes a new room instance.</p>
<h3 id="initgateway"><code>init(gateway:)</code></h3>
<pre><code class="language-swift">public init(gateway: String) throws
</code></pre>
<p>Initializes a new room instance using a custom gateway URL.</p>
<h3 id="deinit"><code>deinit</code></h3>
<pre><code class="language-swift">deinit
</code></pre>
<p>Destroys the room handle and closes the connection to the server if needed.</p>
<h3 id="jointoken"><code>join(token:)</code></h3>
<pre><code class="language-swift">public func join(token: String) throws -&gt; UInt64
</code></pre>
<p>Joins a room on an ODIN server and returns the ID of your own peer on success. This function takes a signed room
token obtained externally that authorizes the client to establish the connection.</p>
<h3 id="jointoken-1"><code>join(token:)</code></h3>
<pre><code class="language-swift">public func join(token: OdinToken) throws -&gt; UInt64
</code></pre>
<p>Joins a room on an ODIN server and returns the ID of your own peer on success. This function takes a signed room
token obtained externally that authorizes the client to establish the connection.</p>
<h3 id="leave"><code>leave()</code></h3>
<pre><code class="language-swift">public func leave() throws
</code></pre>
<p>Leaves the room and closes the connection to the server if needed.</p>
<h3 id="updateaudioconfig_"><code>updateAudioConfig(_:)</code></h3>
<pre><code class="language-swift">public func updateAudioConfig(_ config: OdinApmConfig) throws
</code></pre>
<p>Updates the settings of the audio processing module for the room. This includes everything from noise reduction
to smart voice activity detection.</p>
<h3 id="updategatewayurl_"><code>updateGatewayUrl(_:)</code></h3>
<pre><code class="language-swift">public func updateGatewayUrl(_ gateway: String) throws
</code></pre>
<p>Updates the gateway URL used for authentication.</p>
<h3 id="setaudioautopilotmode_"><code>setAudioAutopilotMode(_:)</code></h3>
<pre><code class="language-swift">public func setAudioAutopilotMode(_ mode: OdinAudioAutopilotMode) throws
</code></pre>
<p>Enables or disables the audio autopilot. This is a simple flag to control whether or not medias in the room will
be added to the default capture/playback mix automatically.</p>
<h3 id="updateuserdatauserdatatarget"><code>updateUserData(userData:target:)</code></h3>
<pre><code class="language-swift">public func updateUserData(userData: [UInt8], target: OdinUserDataTarget) throws
</code></pre>
<p>Updates the custom user data for either your own peer or the specified room itself. This data is synced between
clients automatically, which allows storing of arbitrary information for each individual peer and even globally
for the room if needed.</p>
<p>Note: Use this with target peer before calling <code>OdinRoom.join</code> to set initial peer user data upon connect.</p>
<h3 id="updatepeeruserdatauserdata"><code>updatePeerUserData(userData:)</code></h3>
<pre><code class="language-swift">public func updatePeerUserData(userData: [UInt8]) throws
</code></pre>
<p>Updates the custom user data for your own peer. This data is synced between clients automatically.</p>
<p>Note: Use this before calling <code>OdinRoom.join</code> to set initial peer user data upon connect.</p>
<h3 id="updateroomuserdatauserdata"><code>updateRoomUserData(userData:)</code></h3>
<pre><code class="language-swift">public func updateRoomUserData(userData: [UInt8]) throws
</code></pre>
<p>Updates the custom user data for the current room. This data is synced between clients automatically.</p>
<h3 id="updatepositionxy"><code>updatePosition(x:y:)</code></h3>
<pre><code class="language-swift">public func updatePosition(x: Float, y: Float) throws
</code></pre>
<p>Updates the two-dimensional position of your own peer. The server will use the specified coordinates for each
peer in the same room to apply automatic culling based on unit circles with a radius of <code>1.0</code>. This is ideal for
any scenario, where you want to put a large numbers of peers into the same room and make them only &lsquo;see&rsquo; each
other while being in proximity. Additionally, you can use <code>setPositionScale</code> to adjust the distance multiplier
for position updates if needed.</p>
<p>Note: Use this before calling <code>OdinRoom.join</code> to set the initial peer position upon connect.</p>
<h3 id="setpositionscalescale"><code>setPositionScale(scale:)</code></h3>
<pre><code class="language-swift">public func setPositionScale(scale: Float) throws
</code></pre>
<p>Sets the scaling used for all coordinates passed to <code>updatePosition</code>. This allows adapting to the individual
needs of your game coorinate system if necessary. Only peers within a unit circle with a radius of <code>1.0</code> are
able to &lsquo;see&rsquo; each other. When changing the position of a peer, the position must be scaled such as that the
maximum distance is one or less. The scaling can be done either manually or by setting the multiplicative scale
here.</p>
<p>Note: Please make sure that all of your client apps use the same scaling.</p>
<h3 id="addmediatype"><code>addMedia(type:)</code></h3>
<pre><code class="language-swift">public func addMedia(type: OdinMediaStreamType) throws -&gt; OdinMediaStreamHandle
</code></pre>
<p>Creates a new input stream of the specified type, adds it to the room and returns the media ID on success.</p>
<h3 id="addmediaaudioconfig"><code>addMedia(audioConfig:)</code></h3>
<pre><code class="language-swift">public func addMedia(audioConfig: OdinAudioStreamConfig) throws -&gt; OdinMediaStreamHandle
</code></pre>
<p>Creates new audio input stream using the specified config, adds it to the room and returns the media ID on
success. The new audio media can be used to transmit audio samples captured from a local microphone.</p>
<h3 id="removemediastreamhandle"><code>removeMedia(streamHandle:)</code></h3>
<pre><code class="language-swift">public func removeMedia(streamHandle: OdinMediaStreamHandle) throws
</code></pre>
<p>Removes the media instance matching the specified ID from the room and destroys it.</p>
<h3 id="removemediamedia"><code>removeMedia(media:)</code></h3>
<pre><code class="language-swift">public func removeMedia(media: OdinMedia) throws
</code></pre>
<p>Removes the specified media instance from the room and destroys it.</p>
<h3 id="sendmessagedatatargetids"><code>sendMessage(data:targetIds:)</code></h3>
<pre><code class="language-swift">public func sendMessage(data: [UInt8], targetIds: [UInt64] = []) throws
</code></pre>
<p>Sends a message with arbitrary data to all other peers in the same room. Optionally, you can provide a list of
target IDs to send the message to specific peers only.</p>
<h3 id="hashinto"><code>hash(into:)</code></h3>
<pre><code class="language-swift">public func hash(into hasher: inout Hasher)
</code></pre>
<p>Hashes the essential components of the room by feeding them into the given hasher.</p>
<h3 id="__"><code>==(_:_:)</code></h3>
<pre><code class="language-swift">public static func ==(lhs: OdinRoom, rhs: OdinRoom) -&gt; Bool
</code></pre>
<p>Returns a value indicating whether two type-erased hashable instances wrap the same room.</p>
`}),e.add({id:3878,href:"https://www.4players.io/examples/odin/sdk/web/types/odinroomdatachangedevent/",title:"OdinRoomDataChangedEvent",section:"Examples",description:"OdinRoomDataChangedEvent Example",content:`<p>The <code>OdinRoomDataChangedEvent</code> event is emitted on <span class="external-reference">OdinRoom <a href="/odin/sdk/web/classes/odinroom/"><i class="fas fa-external-link-alt"></i></a></span>
 instances when the global user data of a room changed by a remote peer.</p>
<p>Events are inheriting from <span class="external-reference">IOdinEvent <a href="/odin/sdk/web/interfaces/iodinevent/"><i class="fas fa-external-link-alt"></i></a></span>
 and provide an object described by <span class="external-reference">IOdinRoomDataChangedEventPayload <a href="/odin/sdk/web/interfaces/iodinroomdatachangedeventpayload/"><i class="fas fa-external-link-alt"></i></a></span>
 in the <code>payload</code> property of the event.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3879,href:"https://www.4players.io/odin/sdk/swift/protocols/odinroomdelegate/",title:"OdinRoomDelegate",section:"ODIN Documentation",description:"Protocols to handle ODIN events",content:`<pre><code class="language-swift">public protocol OdinRoomDelegate: AnyObject
</code></pre>
<h2 id="methods">Methods</h2>
<h3 id="onroomconnectionstatechangedroomoldstatenewstatereason"><code>onRoomConnectionStateChanged(room:oldState:newState:reason:)</code></h3>
<pre><code class="language-swift">func onRoomConnectionStateChanged(
    room: OdinRoom,
    oldState: OdinRoomConnectionState,
    newState: OdinRoomConnectionState,
    reason: OdinRoomConnectionStateChangeReason
)
</code></pre>
<p>Callback for internal room connectivity state changes.</p>
<h3 id="onroomjoinedroom"><code>onRoomJoined(room:)</code></h3>
<pre><code class="language-swift">func onRoomJoined(
    room: OdinRoom
)
</code></pre>
<p>Callback for when a room was joined and the initial state is fully available.</p>
<h3 id="onroomuserdatachangedroom"><code>onRoomUserDataChanged(room:)</code></h3>
<pre><code class="language-swift">func onRoomUserDataChanged(
    room: OdinRoom
)
</code></pre>
<p>Callback for room user data changes.</p>
<h3 id="onpeerjoinedroompeer"><code>onPeerJoined(room:peer:)</code></h3>
<pre><code class="language-swift">func onPeerJoined(
    room: OdinRoom,
    peer: OdinPeer
)
</code></pre>
<p>Callback for peers joining the room.</p>
<h3 id="onpeeruserdatachangedroompeer"><code>onPeerUserDataChanged(room:peer:)</code></h3>
<pre><code class="language-swift">func onPeerUserDataChanged(
    room: OdinRoom,
    peer: OdinPeer
)
</code></pre>
<p>Callback for peer user data changes.</p>
<h3 id="onpeerleftroompeer"><code>onPeerLeft(room:peer:)</code></h3>
<pre><code class="language-swift">func onPeerLeft(
    room: OdinRoom,
    peer: OdinPeer
)
</code></pre>
<p>Callback for peers leaving the room.</p>
<h3 id="onmediaaddedroompeermedia"><code>onMediaAdded(room:peer:media:)</code></h3>
<pre><code class="language-swift">func onMediaAdded(
    room: OdinRoom,
    peer: OdinPeer,
    media: OdinMedia
)
</code></pre>
<p>Callback for medias being added to the room.</p>
<h3 id="onmediaactivestatechangedroompeermedia"><code>onMediaActiveStateChanged(room:peer:media:)</code></h3>
<pre><code class="language-swift">func onMediaActiveStateChanged(
    room: OdinRoom,
    peer: OdinPeer,
    media: OdinMedia
)
</code></pre>
<p>Callback for media activity state changes.</p>
<h3 id="onmediaremovedroompeermedia"><code>onMediaRemoved(room:peer:media:)</code></h3>
<pre><code class="language-swift">func onMediaRemoved(
    room: OdinRoom,
    peer: OdinPeer,
    media: OdinMedia
)
</code></pre>
<p>Callback for medias being removed from the room.</p>
<h3 id="onmessagereceivedroomsenderiddata"><code>onMessageReceived(room:senderId:data:)</code></h3>
<pre><code class="language-swift">func onMessageReceived(
    room: OdinRoom,
    senderId: UInt64,
    data: [UInt8]
)
</code></pre>
<p>Callback for incoming arbitrary data messages.</p>
`}),e.add({id:3880,href:"https://www.4players.io/examples/odin/sdk/web/types/odinroomjoinedleftevent/",title:"OdinRoomJoinedLeftEvent",section:"Examples",description:"OdinRoomJoinedLeftEvent Example",content:`<p>The <code>OdinRoomJoinedLeftEvent</code> event is emitted <strong>internally</strong> when a room was joined/left. It is reserved for future use.</p>
<p>To get notifications about your own client joining/leaving a room, use the <span class="external-reference">OdinConnectionStateChangedEvent <a href="/odin/sdk/web/types/odinconnectionstatechangedevent/"><i class="fas fa-external-link-alt"></i></a></span>
 event instead.</p>
<h3 id="event-scopes">Event Scopes</h3>
<ul>
<li><span class="external-reference">IOdinRoomEvents <a href="/odin/sdk/web/interfaces/iodinroomevents/"><i class="fas fa-external-link-alt"></i></a></span>
</li>
</ul>
`}),e.add({id:3881,href:"https://www.4players.io/odin/sdk/swift/classes/odintoken/",title:"OdinToken",section:"ODIN Documentation",description:"Class to handle ODIN tokens.",content:`<pre><code class="language-swift">public class OdinToken
</code></pre>
<p>Class to handle ODIN tokens.</p>
<p>A room token is a JWT given to clients that allows them to connect to a chat room in the ODIN network.</p>
<h2 id="properties">Properties</h2>
<h3 id="rawvalue"><code>rawValue</code></h3>
<pre><code class="language-swift">public let rawValue: String
</code></pre>
<p>The underlying JWT as a string.</p>
<h3 id="userid"><code>userId</code></h3>
<pre><code class="language-swift">public var userId: String
</code></pre>
<p>The user ID that was encoded in the token.</p>
<h3 id="roomid"><code>roomId</code></h3>
<pre><code class="language-swift">public var roomId: String
</code></pre>
<p>The room ID that was encoded in the token.</p>
<h2 id="methods">Methods</h2>
<h3 id="init_"><code>init(_:)</code></h3>
<pre><code class="language-swift">public init(_ string: String) throws
</code></pre>
<p>Initializes a new token instance using a specified JWT string.</p>
`}),e.add({id:3882,href:"https://www.4players.io/odin/hosting/on-premise/",title:"On-Premise Hosting",section:"ODIN Documentation",description:"Gain complete control and flexibility with ODIN on-premise hosting solutions, tailored to meet your business needs. Configure your gateway and server instances effortlessly through our customer control panel, and ensure optimal performance with our optional on-premise gateway for load distribution. Trust ODIN to provide the resources your business needs to thrive.",content:`<p>ODIN is the result from years of expertise and experience. We combined business and industry insight with a very modern technology stack to drive growth for your projects. We understand the importance of having a stable and reliable hosting environment for your business. That&rsquo;s why we offer on-premise hosting of the ODIN server software, giving you the control and flexibility you need to run your business smoothly.</p>
<p>To ensure that your ODIN servers can handle even the most demanding workloads, we also offer an optional gateway that can be installed on your premises. The gateway helps distributing clients and rooms across multiple servers, ensuring that your system remains stable and responsive, even during peak usage times.</p>
<p>With our on-premise hosting solutions, you can trust that your business will have the resources it needs to succeed.</p>
<pre><code class="language-mermaid">graph BT
    S[Standalone Server]

    G[Gateway]
    S1[Server 1] --&gt; G
    S2[Server 2] --&gt; G
    S3[Server 3] --&gt; G
    S4[Server 4] --&gt; G
</code></pre>
<h2 id="setup-your-project">Setup your Project</h2>
<p>When working with an on-premise ODIN project, you need to configure your gateway and server instances accordingly so your signed JWT are accepted when joining rooms. To do this, navigate to our customer control panel and select your project.</p>
<p><a href='https://app.netplay-config.4players.de/odin' target='' class="btn btn-primary">Open Control Panel</a></p>
<h3 id="generate-server-configuration">Generate Server Configuration</h3>
<p>To generate a code snippet to add to your ODIN server configuration file (<code>config.toml</code>), simply enter your access key and hit the <strong>Server</strong> tab below.</p>
<figure><img src="/images/odin-cp-on-premise-server.jpg"
         alt="Generate Configuration for On-Premise Servers"/><figcaption>
            <p>Generate Configuration for On-Premise Servers</p>
        </figcaption>
</figure>
<p><a href='/odin/hosting/on-premise/server/' class="btn btn-primary">Open Server Documentation</a></p>
<h3 id="generate-gateway-configuration">Generate Gateway Configuration</h3>
<p>To generate a code snippet to add to your ODIN gateway configuration file (<code>config.ts</code>), simply enter your access key and hit the <strong>Gateway</strong> tab below.</p>
<figure><img src="/images/odin-cp-on-premise-gateway.jpg"
         alt="Generate Configuration for On-Premise Gateways"/><figcaption>
            <p>Generate Configuration for On-Premise Gateways</p>
        </figcaption>
</figure>
<p><a href='/odin/hosting/on-premise/gateway/' class="btn btn-primary">Open Gateway Documentation</a></p>
<h2 id="system-requirements">System Requirements</h2>
<p>To run ODIN on-premise, you need to meet the following system requirements:</p>
<h3 id="windows">Windows</h3>
<ul>
<li><strong>Operating System</strong>: Windows 7 (64-bit) or later</li>
<li><strong>Processor</strong>: Intel Pentium 4 with EM64T support or AMD Athlon 64</li>
<li><strong>Memory</strong>: 25 MB RAM</li>
<li><strong>Storage</strong>: 15 MB available hard disk space</li>
<li><strong>Microsoft Visual C++ Redistributable</strong>: Latest version</li>
</ul>
<h3 id="linux">Linux</h3>
<ul>
<li><strong>Operating System</strong>: Linux distribution (64-bit) with kernel version 3.2 or later</li>
<li><strong>Processor</strong>: Intel Pentium 4 with EM64T support or AMD Athlon 64</li>
<li><strong>Memory</strong>: 25 MB RAM</li>
<li><strong>Storage</strong>: 15 MB available hard disk space</li>
<li><strong>GLIBC</strong>: 2.23 or later</li>
</ul>
<h3 id="macos">macOS</h3>
<ul>
<li><strong>Operating System</strong>: macOS High Sierra 10.13 or later</li>
<li><strong>Memory</strong>: 25 MB RAM</li>
<li><strong>Storage</strong>: 15 MB available hard disk space</li>
</ul>
`}),e.add({id:3883,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/",title:"OnCreatedMediaObject",section:"Examples",description:"OnCreatedMediaObject Example",content:`<p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) has joined a room and starts sending audio data (i.e. has activated the
microphone) this event is triggered after <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
<p>You can respond to this event and call the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the <span class="external-reference">OdinHandler.Instance <a href="/odin/sdk/unity/classes/odinhandler/instance/"><i class="fas fa-external-link-alt"></i></a></span>
 like shown in the example below.</p>
<p>Your callback function must have this structure and contains information about the room, peer and the media object.</p>
<pre><code class="language-C#">public class UnityCreatedMediaObject : UnityEvent&lt;string, ulong, int&gt;;
</code></pre>
<p>Whenever this callback is triggered, imagine a new player comes in the arena and the game master needs to give him a
Walky Talky so that he can listen and talk to the other players.</p>
`}),e.add({id:3884,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/onmediaadded/",title:"OnMediaAdded",section:"Examples",description:"OnMediaAdded Example",content:`<p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) has joined a room and starts sending audio data (i.e. has activated the
microphone) this event is triggered.</p>
<p>You need to respond to this event and call the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 function of the <span class="external-reference">OdinHandler.Instance <a href="/odin/sdk/unity/classes/odinhandler/instance/"><i class="fas fa-external-link-alt"></i></a></span>

like shown in the example below.</p>
<p>Your callback function must have this structure. <span class="external-reference">MediaAddedEventArgs <a href="/odin/sdk/unity/classes/mediaaddedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 contains information about the
peer and the media added to the room:</p>
<pre><code class="language-C#">public void OnMediaAdded(object sender, MediaAddedEventArgs eventArgs);
</code></pre>
<p>Whenever this callback is triggered, imagine a new player comes in the arena and the game master needs to give him a
Walky Talky so that he can listen and talk to the other players.</p>
`}),e.add({id:3885,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/onmediaremoved/",title:"OnMediaRemoved",section:"Examples",description:"OnMediaRemoved Example",content:`<p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) stops sending audio data (i.e. has deactivated the microphone) this
event is triggered.</p>
<p>Your callback function must have this structure. <span class="external-reference">MediaRemovedEventArgs <a href="/odin/sdk/unity/classes/mediaremovedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 contains information about the
peer and the media removed from the room:</p>
<pre><code class="language-C#">public void OnMediaRemoved(object sender, MediaRemovedEventArgs eventArgs);
</code></pre>
<p>You need to respond to this event and you need to remove the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 that you have attached
to a game object before in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 callback. You also need to remove the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>

from the Game Object which has been created by ODIN automatically.</p>
`}),e.add({id:3886,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/onpeerjoined/",title:"OnPeerJoined",section:"Examples",description:"OnPeerJoined Example",content:`<p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) joins a room, this event is triggered in all clients. You can listen
to this event in your own code as shown in the example above. You can use this to fill an array with active players/users
in your game.</p>
<p>The structure of the function looks like this (<span class="external-reference">PeerJoinedProxy <a href="/odin/sdk/unity/classes/peerjoinedproxy/"><i class="fas fa-external-link-alt"></i></a></span>
):</p>
<pre><code class="language-C#">public class PeerJoinedProxy : UnityEvent&lt;object, PeerJoinedEventArgs&gt;
</code></pre>
<p>In this example, taken from our <a href="/odin/guides/unity/unity-mirror/">Integration guide</a> user data is stored in a
<span class="external-reference">CustomUserDataJsonFormat <a href="/odin/guides/unity/user-data/"><i class="fas fa-external-link-alt"></i></a></span>
 format (you can use any format you like). See our guides for
more info on this topic.</p>
`}),e.add({id:3887,href:"https://www.4players.io/examples/odin/sdk/unity/classes/playbackcomponent/onplaybackplayingstatuschanged/",title:"OnPlaybackPlayingStatusChanged",section:"Examples",description:"Callback function toggled whenever audio state changes. Can be used to implement a talking indicator",content:`<p>This callback allows you to receive notifications whenever the audio state of the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>

changes.</p>
<p>The callback function needs to have this structure:</p>
<pre><code class="language-C#">public delegate void IsPlayingCallback(PlaybackComponent component, bool isPlaying);
</code></pre>
<p>Please note, that this notification is one-shot, it is only triggered if the state of <code>isPlaying</code> changes.</p>
`}),e.add({id:3888,href:"https://www.4players.io/examples/odin/sdk/unity/classes/odinhandler/onroomleft/",title:"OnRoomLeft",section:"Examples",description:"OnRoomLeft Example",content:`<p>Whenever a &ldquo;user (in ODIN language it&rsquo;s a <em>peer</em>) leaves a room, this event is triggered on the local client. You
need to listen to this event and doing some cleanup work as some <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 elements created
in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
 event might be linked to this room and will stop working once the user left the
room.</p>
<p>You can use the <span class="external-reference">DestroyPlaybackComponents <a href="/odin/sdk/unity/classes/odinhandler/destroyplaybackcomponents/"><i class="fas fa-external-link-alt"></i></a></span>
 convenience function to remove all
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
 linked to this room.</p>
`}),e.add({id:3889,href:"https://www.4players.io/partials/",title:"Partials",section:"Partials",description:"",content:""}),e.add({id:3890,href:"https://www.4players.io/examples/odin/sdk/unity/classes/peerjoinedproxy/",title:"PeerJoinedProxy",section:"Examples",description:"PeerJoinedProxy Example",content:`<p>Defines the structure of the <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 event. See <span class="external-reference">PeerJoinedEventArgs <a href="/odin/sdk/unity/classes/peerjoinedeventargs/"><i class="fas fa-external-link-alt"></i></a></span>
 for more info
on the payload sent with this event.</p>
<p><code>sender</code> is typically an instance of the <span class="external-reference">Room <a href="/odin/sdk/unity/classes/room/"><i class="fas fa-external-link-alt"></i></a></span>
 class.</p>
<p>You need to create a function with this prototype and then link the <span class="external-reference">OnPeerJoined <a href="/odin/sdk/unity/classes/odinhandler/onpeerjoined/"><i class="fas fa-external-link-alt"></i></a></span>
 that you can find
in the inspector of the Odin Handler Prefab or use code to attach a listener to that event of your <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>

instance like so:</p>
<pre><code class="language-C#">OdinHandler.Instance.OnPeerJoined.AddListener(OnPeerJoined);
</code></pre>
`}),e.add({id:3891,href:"https://www.4players.io/examples/odin/sdk/unity/classes/playbackcomponent/",title:"PlaybackComponent Example",section:"Examples",description:"PlaybackComponent Example",content:`<p>The <code>PlaybackComponent</code> is the heart of ODIN within Unity. It connects a Unity <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
 with an ODIN room which runs on ODIN servers either hosted by 4Players or self-hosted.</p>




<div class="box dark warning">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">    <i class="fas fa-exclamation-triangle"></i>  Warning   </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p><strong>Important</strong>: Don&rsquo;t create this component yourself and don&rsquo;t attach it in the Unity editor manually to components.
Use the method <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
from <code>OdinHandler.Instance</code>
to
create this component.</p>
</div>
</div>

<p>The component receives the audio stream of the server and &ldquo;injects&rdquo; it into the <span class="external-reference">AudioSource <a href="https://docs.unity3d.com/ScriptReference/AudioSource.html" target="_blank"><i class="fas fa-external-link-alt"></i></a></span>
.</p>
`}),e.add({id:3893,href:"https://www.4players.io/odin/sdk/swift/protocols/",title:"Protocols",section:"ODIN Documentation",description:"Protocols for Swift iOS/iPadOS/macOS/tvOS/watchOS SDK",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/protocols/odinroomdelegate/">OdinRoomDelegate</a></li>
</span>
</ul>
`}),e.add({id:3897,href:"https://www.4players.io/examples/odin/sdk/unity/2.0.0/classes/room/",title:"Room",section:"Examples",description:"Room class extended discussion",content:`<p>The <code>Room</code> class is the entry point of the low-level API of the ODIN SDK. It provides methods to join and leave a room,
send and receive messages, and manage media streams. The 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 class is also responsible for managing the connection
state and the room configuration.</p>
<p>If don&rsquo;t want to develop everything yourself, it is recommended to use 










<span class="external-reference">OdinRoom <a href="/odin/sdk/unity/2.0.0/classes/odinroom"><i class="fas fa-external-link-alt"></i></a></span>


 instead which is a higher level API
and is easier to use.</p>
<p>The basic flow is to use 













<span class="external-reference">Room.Create <a href="/odin/sdk/unity/2.0.0/classes/room/create"><i class="fas fa-external-link-alt"></i></a></span>


 to create a 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 object, configure it with event handlers, and
then join the room. Once joined, you can attach a media stream to the room and start sending and receiving media (i.e.
microphone). You need to listen on the 













<span class="external-reference">Room.OnMediaStarted <a href="/odin/sdk/unity/2.0.0/classes/room/onmediastarted"><i class="fas fa-external-link-alt"></i></a></span>


 event to receive media streams from other peers in the room and to
create playback components for them.</p>
<p>See the <a href="#example">example</a> below for a basic usage of the 










<span class="external-reference">Room <a href="/odin/sdk/unity/2.0.0/classes/room"><i class="fas fa-external-link-alt"></i></a></span>


 class.</p>
`}),e.add({id:3898,href:"https://www.4players.io/products/rooms/",title:"Rooms - Secure, Decentralized Video Conferencing",section:"Products",description:"Rooms, powered by ODIN, offers a fully decentralized, browser-based video conferencing solution with robust end-to-end encryption, no need for accounts or downloads, and full control over your data. Ideal for corporate, educational, and non-profit sectors.",content:`


    
    <div class="row justify-content-center mt-5 pt-5" style="">
        <div class="col">
    
    
    
    
    
    
        <div class="imagesection-module">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">

            <div class="title-module">
    
    
    
</div>


            <div class="text-center">
                <div class="image-module">
    <figure class="text-center mx-auto" >
        <img class="mt-4 border border-0 w-50"  src="/images/rooms/logo_light.svg"  data-dark-src="/images/rooms/logo_dark.svg">

        

    </figure>
</div>

            </div>

        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
        <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100 text-muted" >
        Trusted Communication Made Simple
        
    </h1>
    
    
    
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center mt-5" style="">
        <div class="col">
    
    
    
    
    
    
        <div class="imagesection-module">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">

            <div class="title-module">
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Rooms is the next step in secure and decentralized browser-based video conferencing. Eliminate the need for accounts or downloads and ensure your communications are protected with robust end-to-end encryption.</p>
    
    
</div>


            <div class="text-center">
                <div class="image-module">
    <figure class="text-center mx-auto" >
        <img class="mt-4 border border-0"  src="/images/rooms/rooms-ui.png" >

        

    </figure>
</div>

            </div>

        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
        <div class="button-module d-flex justify-content-center mb-5">
    
    <a href="#pricing" class="btn btn-primary mt-4 btn-lg me-3" type="button">Get Started for Free</a>
    
</div>
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        <div class="youtube-module">
    <div class="row">
        <div class="col-16 mx-auto">
            <div class="ratio ratio-16x9">
                <iframe src="https://www.youtube-nocookie.com/embed/nWTPvfBBbic?rel=0" title="YouTube Video" frameborder="0"
                    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
                    allowfullscreen></iframe>
            </div>
        </div>
    </div>
</div>
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        <div class="top-partners py-5">
    <div class="row justify-content-center">
        <div class="col col-md-16 col-lg-16 col-xl-16">
            <div class="title-module">
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Built-on our ODIN Voice SDK, trusted by developers and studios all around the world.</p>
    
    
</div>

            <div class="top-partners">
                
                <div class="top-partner border-elevation-08dp rounded-3">
                    <a href="https://www.aerosoft.com" target="_blank">
                        <img src="/images/partners/light/aerosoft.png" class="partner-logo-light img-fluid" alt="Aerosoft">
                        <img src="/images/partners/dark/aerosoft.png" class="partner-logo-dark img-fluid" alt="Aerosoft">
                    </a>
                </div>
                
                <div class="top-partner border-elevation-08dp rounded-3">
                    <a href="https://eslfaceitgroup.com" target="_blank">
                        <img src="/images/partners/light/efg.png" class="partner-logo-light img-fluid" alt="ESL FACEIT Group">
                        <img src="/images/partners/dark/efg.png" class="partner-logo-dark img-fluid" alt="ESL FACEIT Group">
                    </a>
                </div>
                
                <div class="top-partner border-elevation-08dp rounded-3">
                    <a href="https://www.bmwgroup.com" target="_blank">
                        <img src="/images/partners/light/bmw_mini_group.png" class="partner-logo-light img-fluid" alt="BMW Group">
                        <img src="/images/partners/dark/bmw_mini_group.png" class="partner-logo-dark img-fluid" alt="BMW Group">
                    </a>
                </div>
                
                <div class="top-partner border-elevation-08dp rounded-3">
                    <a href="https://ghostsoftabor.com" target="_blank">
                        <img src="/images/partners/light/ghosts_of_tabor.png" class="partner-logo-light img-fluid" alt="Ghosts of Tabor">
                        <img src="/images/partners/dark/ghosts_of_tabor.png" class="partner-logo-dark img-fluid" alt="Ghosts of Tabor">
                    </a>
                </div>
                
                <div class="top-partner border-elevation-08dp rounded-3">
                    <a href="https://www.htxlabs.com" target="_blank">
                        <img src="/images/partners/light/htx_labs.png" class="partner-logo-light img-fluid" alt="HTX Labs">
                        <img src="/images/partners/dark/htx_labs.png" class="partner-logo-dark img-fluid" alt="HTX Labs">
                    </a>
                </div>
                
                <div class="top-partner border-elevation-08dp rounded-3">
                    <a href="https://www.madfingergames.com" target="_blank">
                        <img src="/images/partners/light/madfinger_games.png" class="partner-logo-light img-fluid" alt="Madfinger Games">
                        <img src="/images/partners/dark/madfinger_games.png" class="partner-logo-dark img-fluid" alt="Madfinger Games">
                    </a>
                </div>
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features mb-0">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        Decentralized, Ultra-Secure Video Conferencing
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Experience the ultimate in secure, customizable, and high-quality video conferencing with Rooms. Here’s why Rooms is the superior choice for your communication needs:</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-2 row-cols-lg-2 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Cross-Platform End-to-End Encryption</h5>
                            
                            <p class="">Ensure your communications are private and secure with robust, always-on encryption.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/2_end-to-end_light.png"  data-dark-src="/images/rooms/2_end-to-end_dark.png" 
                            alt="Cross-Platform End-to-End Encryption" class="ps-4">
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Host Yourself or Get Hosted</h5>
                            
                            <p class="">Our software runs in the highly optimized 4Players Cloud or you can host servers yourself in any cloud you want or on-premise on your own hardware.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/2_hosting_light.png"  data-dark-src="/images/rooms/2_hosting_dark.png" 
                            alt="Host Yourself or Get Hosted" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features mb-0">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        &hellip; and much more
        
    </h1>
    
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-3 row-cols-lg-3 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Full Web Browser Support</h5>
                            
                            <p class="">Access Rooms directly from any major web browser without the need for additional software or apps.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_browser_support_light.png"  data-dark-src="/images/rooms/3_browser_support_dark.png" 
                            alt="Full Web Browser Support" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Self-Hosting Possibilities</h5>
                            
                            <p class="">Take control of your data by hosting Rooms on your own server infrastructure, ensuring maximum security and privacy.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_self_hosting_light.png"  data-dark-src="/images/rooms/3_self_hosting_dark.png" 
                            alt="Self-Hosting Possibilities" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Managed Cloud Hosting</h5>
                            
                            <p class="">Enjoy seamless performance with our managed cloud hosting, including traffic, powered by ODIN Fleet.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_managed-cloud_light.png"  data-dark-src="/images/rooms/3_managed-cloud_dark.png" 
                            alt="Managed Cloud Hosting" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Scalable to 5000&#43; Users</h5>
                            
                            <p class="">Hold large meetings with ease, supporting over 5,000 participants per room.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_user_light.png"  data-dark-src="/images/rooms/3_user_dark.png" 
                            alt="Scalable to 5000&#43; Users" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Unparalleled Voice Quality</h5>
                            
                            <p class="">Benefit from crystal-clear audio, ensuring every word is heard with Hi-Res Audio.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_voice_quality_light.png"  data-dark-src="/images/rooms/3_voice_quality_dark.png" 
                            alt="Unparalleled Voice Quality" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Customizable Interface &amp; Corporate Identity</h5>
                            
                            <p class="">Tailor the platform to reflect your brand’s identity without any coding required.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_custom_interface_light.png"  data-dark-src="/images/rooms/3_custom_interface_dark.png" 
                            alt="Customizable Interface &amp; Corporate Identity" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Super Sharp Screen Sharing</h5>
                            
                            <p class="">Share your screen with unmatched clarity, ensuring nothing is lost in translation.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_supersharp_light.png"  data-dark-src="/images/rooms/3_supersharp_dark.png" 
                            alt="Super Sharp Screen Sharing" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">No Metadata Storage</h5>
                            
                            <p class="">Rest easy knowing that Rooms doesn’t store any metadata, protecting your privacy.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_no-metadata_light.png"  data-dark-src="/images/rooms/3_no-metadata_dark.png" 
                            alt="No Metadata Storage" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Integrated Whiteboard Solution</h5>
                            
                            <p class="">Collaborate in real-time with an interactive whiteboard, perfect for brainstorming sessions.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/3_whiteboard_light.png"  data-dark-src="/images/rooms/3_whiteboard_dark.png" 
                            alt="Integrated Whiteboard Solution" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
            </div>
            
            <div class="row justify-content-center mt-5">
                <div class="col-8">
                    <div class="button-module d-flex justify-content-center mb-5">
    
    <a href="/rooms/manual" class="btn btn-primary mt-4 btn-lg me-3" type="button">Read the Manual</a>
    
</div>
                </div>
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features mb-0">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        Getting Started with Rooms
        
    </h1>
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Rooms is designed to provide a seamless, secure, and customizable video conferencing experience. With just a few simple steps, you can set up and host secure meetings that ensure the privacy of your communications, whether you’re connecting with colleagues, clients, or partners across the globe.</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-2 row-cols-lg-2 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">1. Sign Up and Get Your Private Rooms Instance</h5>
                            
                            <p class="">After signing up, you’ll receive your own secure rooms instance under the domain <code>XYZ.rooms.chat</code>. This instance is your gateway to creating and managing meetings effortlessly.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/2_step1_light.png"  data-dark-src="/images/rooms/2_step1_dark.png" 
                            alt="1. Sign Up and Get Your Private Rooms Instance" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">2. Join or Create a Room with Ease</h5>
                            
                            <p class="">Simply type the name of the room you want to join (e.g., “All-Team”) in your instance. If the room doesn’t exist yet, Rooms will automatically create it for you. You can always revisit the same room later by typing the same name, making it a perfect virtual space for recurring meetings or casual chats.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/2_step2_light.png"  data-dark-src="/images/rooms/2_step2_dark.png" 
                            alt="2. Join or Create a Room with Ease" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">3. Invite Others Instantly</h5>
                            
                            <p class="">Simply type the name of the room you want to join (e.g., “All-Team”) in your instance. If the room doesn’t exist yet, Rooms will automatically create it for you. You can always revisit the same room later by typing the same name, making it a perfect virtual space for recurring meetings or casual chats.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/2_step3_light.png"  data-dark-src="/images/rooms/2_step3_dark.png" 
                            alt="3. Invite Others Instantly" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light card-custom-img-bottom h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">4. Join Meetings with a Simple Click</h5>
                            
                            <p class="">When your invitees click the link, they’ll instantly join the meeting in their browser—no downloads or sign-ups needed. This frictionless entry ensures that everyone can connect quickly and efficiently.</p>
                            
                        </div>
                        
                        
                        <img src="/images/rooms/2_step4_light.png"  data-dark-src="/images/rooms/2_step4_dark.png" 
                            alt="4. Join Meetings with a Simple Click" >
                        
                        
                        
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center" >
        <div class="col">
    
    
    
    
    
    
    
        <div class="py-5"></div>

<div class="features mb-5">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">
            <div class="content-text text-high-emphasis">
                <div class="title-module">
    
    
    <p class="text-high-emphasis fs-4 text-center w-100">Advanced Room Management &amp; Customization</p>
    
    
</div>

            </div>
            <div
                class="row row-cols-1 row-cols-md-3 row-cols-lg-3 g-4 justify-content-center">
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Automatic Room Management</h5>
                            
                            <p class="">Once the meeting is over and all participants have left, Rooms will automatically destroy the room and all its metadata, leaving no trace behind. This ensures full GDPR compliance and respects your privacy by keeping data usage minimal.</p>
                            
                        </div>
                        
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Persistent &amp; Temporary Rooms</h5>
                            
                            <p class="">You can create persistent rooms for ongoing use, such as a “coffee break” room for casual conversations that’s always available to your team. Alternatively, generate temporary rooms with unique, unguessable IDs for private meetings, ensuring maximum security for sensitive discussions.</p>
                            
                        </div>
                        
                        
                        
                        
                    </div>
                    
                </div>
                
                
                
                <div class="col mt-5">
                    
                    <div class="card elevation-02dp m-0  bg-light h-100 flex align-items-center">
                        
                        
                        
                        <div class="card-body px-4 mx-2 bg-transparent">
                            
                            <h5 class="card-title ">Fully Customizable and Integratable</h5>
                            
                            <p class="">Rooms is built on the robust ODIN Voice SDK, allowing for easy customization and integration with existing systems like Active Directory or LDAP. Plus, with open-source clients available, you can tweak the platform to meet your specific needs.</p>
                            
                        </div>
                        
                        
                        
                        
                    </div>
                    
                </div>
                
                
            </div>
            
        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>

    
    <div class="row justify-content-center rounded-3 pt-4 mt-4" style="">
        <div class="col">
    
    
    
    
    
    
    
    
    
    
    
        <div class="pricing-module rounded-3 pb-5 mb-0">
    <div class="row justify-content-center">
        <div class="col col-md-14 col-lg-14 col-xl-14">

            <div class="title-module">
    
    <h1 class="text-uppercase text-on-surface fw-bold ls-wide m-0 display-5 text-center w-100" >
        Pricing
        
    </h1>
    
    
    <div class="paragraph-module">
    
    <p class="fs-4 text-center mt-5 mb-5 pb-4">Utilize our global infrastructure for maintenance, scaling, and operations or host ODIN servers yourself without extra costs for enhanced data security and privacy, customized configurations, and direct infrastructure control.</p>
    
</div>
    
</div>

            <a id="pricing"></a>

            <div class="card-group">
                
                
                <div
                        class="card pb-4 text-dark ">
                    <div
                            class="card-header fs-1 text-center elevation-08dp text-on-surface">
                        Free License
                    </div>
                    <div
                            class="pricing  border border-0 card-header fs-1 text-center pb-0 pt-4 text-on-surface bg-transparent">
                        
                        <span class="price">Free</span>
                        
                        
                    </div>
                    
                    <div class="text-center ps-2 pe-2 fs-6 fst-italic text-muted">
                        Ideal for friends and small teams
                    </div>
                    
                    
                    <div class="card-body py-0">
                        <div class="card-text">
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Up to 20 participants
                            </li>
                            
                        </ul>
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Unlimited meetings
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                No time limits
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                All users can create and join rooms
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Public/private rooms available
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Create your own breakout rooms
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                End-to-end encryption
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Works in all modern browsers
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Use your own domain
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Cloud-Hosting only
                            </li>
                            
                        </ul>
                        
                        </div>
                    </div>
                    
                    <div class="card-body py-0">
                        <p class="card-text">
                        <ul class="">
                            
                            
                        </ul>
                        </p>
                    </div>
                    <div class="card-body py-0">
                        <p class="card-text">
                        <ul class="">
                            
                            
                        </ul>
                        </p>
                    </div>
                    
                    <div class="card-footer pt-0 border border-0 bg-transparent">
                        
                        <div class="text-center">
                            <div class="button-module">
    
    <a href="https://app.tarif-config.4players.de/config/206/en_GB" class="btn btn-primary btn-lg me-3" type="button">Start now</a>
    
</div>
                        </div>
                        
                    </div>
                    
                </div>
                
                
                
                <div
                        class="card pb-4 text-dark rounded shadow pricing-featured border-0 my-n3">
                    <div
                            class="card-header fs-1 text-center rounded-top bg-accent text-on-primary">
                        Business Partner
                    </div>
                    <div
                            class="pricing mt-3 border border-0 card-header fs-1 text-center pb-0 pt-4 text-on-surface bg-transparent">
                        <span class="currency">EUR</span>
                        <span class="price">59,99</span>
                        <span class="period">/mo</span>
                        
                    </div>
                    
                    <div class="text-center ps-2 pe-2 fs-6 fst-italic text-muted">
                        Ideal for medium-sized and larger businesses
                    </div>
                    
                    
                    <div class="card-body py-0">
                        <div class="card-text">
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Starting at 25 participants
                            </li>
                            
                        </ul>
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Unlimited meetings
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                No time limits
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                All users can create and join rooms
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Public/private rooms available
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Create your own breakout rooms
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                End-to-end encryption
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Works in all modern browsers
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Use your own domain
                            </li>
                            
                        </ul>
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                <strong>Cloud- &amp; self-hosting options</strong>
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                <strong>Fully customizable (company branding)</strong>
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                <strong>Persistent chat data (optional)</strong>
                            </li>
                            
                        </ul>
                        
                        </div>
                    </div>
                    
                    <div class="card-body py-0">
                        <p class="card-text">
                        <ul class="">
                            
                            
                        </ul>
                        </p>
                    </div>
                    <div class="card-body py-0">
                        <p class="card-text">
                        <ul class="">
                            
                            
                        </ul>
                        </p>
                    </div>
                    
                    <div class="card-footer pt-0 border border-0 bg-transparent">
                        
                        <div class="d-flex flex-column">
                            <div class="button-module">
    
    <a href="https://app.tarif-config.4players.de/config/206/en_GB?config=%7B%22219%22:%7B%22FolderDomain%22:%22rooms.chat%22,%22FolderServicetype%22:%22business%22,%22FolderSlots%22:%2225%22,%22FolderLaufzeitOnce%22:%221%22%7D%7D&amp;prepaid=false" class="btn btn-primary w-100 btn-lg me-3" type="button">Purchase Now</a>
    
</div>
                            <div class="button-module">
    
    <a href="/company/contact_us#sales" class="btn btn-secondary w-100 mt-3 btn-lg me-3" type="button">Request On Premise</a>
    
</div>
                        </div>
                        
                    </div>
                    
                </div>
                
                
                
                <div
                        class="card pb-4 text-dark ">
                    <div
                            class="card-header fs-1 text-center elevation-08dp text-on-surface">
                        NGO &amp; Education
                    </div>
                    <div
                            class="pricing  border border-0 card-header fs-1 text-center pb-0 pt-4 text-on-surface bg-transparent">
                        
                        <span class="price">Free</span>
                        
                        
                    </div>
                    
                    <div class="text-center ps-2 pe-2 fs-6 fst-italic text-muted">
                        For schools, universities, and non-profits
                    </div>
                    
                    
                    <div class="card-body py-0">
                        <div class="card-text">
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Up to 250 participants
                            </li>
                            
                        </ul>
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Unlimited meetings
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                No time limits
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                All users can create and join rooms
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Public/private rooms available
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Create your own breakout rooms
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                End-to-end encryption
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Works in all modern browsers
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                Use your own domain
                            </li>
                            
                        </ul>
                        
                        <ul class="mt-4">
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                <strong>Cloud- &amp; self-hosting options</strong>
                            </li>
                            
                            <li class="feature-included text-on-surface bg-transparent border border-0">
                                <strong>Fully customizable (company branding)</strong>
                            </li>
                            
                        </ul>
                        
                        </div>
                    </div>
                    
                    <div class="card-body py-0">
                        <p class="card-text">
                        <ul class="">
                            
                            
                        </ul>
                        </p>
                    </div>
                    <div class="card-body py-0">
                        <p class="card-text">
                        <ul class="">
                            
                            
                        </ul>
                        </p>
                    </div>
                    
                    <div class="card-footer pt-0 border border-0 bg-transparent">
                        
                        <div class="text-center">
                            <div class="button-module">
    
    <a href="/company/contact_us#sales" class="btn btn-secondary btn-lg me-3" type="button">Get in Touch</a>
    
</div>
                        </div>
                        
                    </div>
                    
                </div>
                
                
            </div>
            
            <div class="footnotes">
                
            </div>

        </div>
    </div>
</div>

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        </div>
    </div>



`}),e.add({id:3899,href:"https://www.4players.io/rooms/",title:"Rooms Documentation",section:"Rooms Documentation",description:"Explore the ODIN Rooms documentation. Learn how to get started, customize your experience, and make the most of ODIN Rooms’ secure, decentralized video conferencing platform. Find user manuals and setup guides here.",content:`<p><img src="/images/rooms/rooms-header.jpg" alt="Rooms"></p>
<p>Welcome to the Rooms documentation! Here, you’ll find all the information you need to get started and explore the
powerful features of our decentralized video conferencing platform.</p>
<p>Rooms is fully GDPR compliant, ensuring that user privacy and data protection meet the highest European standards.
With no metadata storage and secure, decentralized architecture, ODIN Rooms provides a safe environment for all users,
making it suitable for organizations that require adherence to strict privacy regulations.</p>
<p>Rooms is built on <a href="/odin/">ODIN Voice</a>, our real-time voice chat SDK renowned for its low latency and
crystal-clear audio, and powered by <a href="/fleet/">ODIN Fleet</a>, our server hosting solution that provides
global scalability and high availability. These technologies ensure a seamless and secure video conferencing experience.
To learn more, check out <a href="/odin/">ODIN Voice</a> and <a href="/fleet/">ODIN Fleet</a>.</p>
<h2 id="features-overview">Features Overview</h2>
<ul>
<li><strong>Decentralized Architecture</strong>: Secure and private communications without data storage.</li>
<li><strong>End-to-End Encryption</strong>: Ensures complete privacy for your meetings.</li>
<li><strong>Custom Branding</strong>: Tailor the look and feel to match your identity.</li>
<li><strong>Self-Hosting Option</strong>: Full control over your data by hosting the platform yourself.</li>
<li><strong>Free for Small Businesses &amp; NGOs</strong>: Accessible without cost for qualifying users.</li>
<li><strong>GDPR Compliant</strong>: Fully compliant with European data privacy regulations, protecting user data and privacy.</li>
</ul>
<h2 id="getting-started">Getting Started</h2>
<ul>
<li>
<p><a href="/rooms/getting-started/sign-up/">Sign Up for Rooms</a>: Create your account with an email and
password to get started.
Choose a unique
subdomain under which your Rooms service will be available.</p>
</li>
<li>
<p><a href="/rooms/getting-started/concepts/">Bssic Concepts</a>: Learn more about the unique features of ODIN Rooms
and how to use them.</p>
</li>
<li>
<p><a href="/rooms/getting-started/first-call/">Your first Call</a>: Setup your first call and invite participants
to join.</p>
</li>
</ul>
<h2 id="user-manual">User Manual</h2>
<ul>
<li><a href="/rooms/manual/user-interface/">User Interface</a>: Learn about the user interface of ODIN Rooms and how
to navigate through the different areas.</li>
<li><a href="/rooms/manual/text-chat/">Text Chat</a>: Learn how to use the text chat in ODIN Rooms.</li>
<li><a href="/rooms/manual/whiteboard/">Whiteboard</a>: Learn how to use the whiteboard in ODIN Rooms.</li>
</ul>
<p>For further support, visit us on <a href="https://4np.de/discord">Discord</a> or contact us at <a href="mailto:support@4players.io">support@4players.io</a>.</p>
`}),e.add({id:3900,href:"https://www.4players.io/partials/send-message-event-summary/unity/",title:"Send Message Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnMessageReceived <a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnMessageReceived <a href="/odin/sdk/unity/classes/odinhandler/onmessagereceived/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered after receiving a message</td>
</tr>
</tbody>
</table>
`}),e.add({id:3902,href:"https://www.4players.io/partials/start-media-event-summary/unity/",title:"Start Media Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnCreatedMediaObject <a href="/odin/sdk/unity/classes/odinhandler/oncreatedmediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once the media has been added to the room on the server</td>
</tr>
</tbody>
</table>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to handle the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
callbacks. Whenever you receive this event, you need to call
the <span class="external-reference">AddPlaybackComponent <a href="/odin/sdk/unity/classes/odinhandler/addplaybackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
method on your <span class="external-reference">OdinHandler <a href="/odin/sdk/unity/classes/odinhandler/"><i class="fas fa-external-link-alt"></i></a></span>
instance which will create a
<span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
and assign to a GameObject that corresponds to this peer in Odin.</p>
</div>
</div>

`}),e.add({id:3903,href:"https://www.4players.io/partials/stop-media-event-summary/unity/",title:"Stop Media Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnDeleteMediaObject <a href="/odin/sdk/unity/classes/odinhandler/ondeletemediaobject/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once the media has been added to the room on the server</td>
</tr>
</tbody>
</table>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to handle the <span class="external-reference">OnMediaRemoved <a href="/odin/sdk/unity/classes/odinhandler/onmediaremoved/"><i class="fas fa-external-link-alt"></i></a></span>
callbacks as it&rsquo;s up to you to remove the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
from the corresponding GameObject that you used initially when adding the <span class="external-reference">PlaybackComponent <a href="/odin/sdk/unity/classes/playbackcomponent/"><i class="fas fa-external-link-alt"></i></a></span>
in the <span class="external-reference">OnMediaAdded <a href="/odin/sdk/unity/classes/odinhandler/onmediaadded/"><i class="fas fa-external-link-alt"></i></a></span>
callback.</p>
</div>
</div>

`}),e.add({id:3904,href:"https://www.4players.io/odin/sdk/swift/structs/",title:"Structs",section:"ODIN Documentation",description:"Structs for Swift iOS/iPadOS/macOS/tvOS/watchOS SDK",content:`<ul class="children children-li">
<span><li>
		<a href="https://www.4players.io/odin/sdk/swift/structs/odinaudiodevice/">OdinAudioDevice</a></li>
</span>
</ul>
`}),e.add({id:3905,href:"https://www.4players.io/tags/",title:"Tags",section:"Tags",description:"",content:""}),e.add({id:3906,href:"https://www.4players.io/partials/dedicated-server-export/unity/",title:"Unity Dedicated Server Export",section:"Partials",description:"",content:`<p>If you are building a server using Mirror Networking or Photon or MLAPI, you can export a headless dedicated server
via the Build Settings in Unity. If possible, always choose Linux binary, as we prefer Linux binaries.</p>
<p>In Unity 2021.1 and later, the Build Settings look a bit different and you can choose <code>Dedicated Server</code> as a build
target on the left side. In earlier versions, you need to choose Linux or Windows build and then activate the
checkbox &ldquo;Headless&rdquo; in the options on the right side to activate a headless server build.</p>
`}),e.add({id:3907,href:"https://www.4players.io/partials/connection-event-summary/unreal/",title:"Unreal Connection Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">On Room Joined <a href="/odin/sdk/unreal/blueprint-reference/events/on-room-joined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">On Peer Joined <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-joined/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user joined a room</td>
</tr>
</tbody>
</table>
<p>ODIN does not require any bookkeeping. A room is created automatically for the first connection and will be removed
whenever the last user left the room. You join a room by calling the <span class="external-reference">Join Room <a href="/odin/sdk/unreal/blueprint-reference/room/join-room/"><i class="fas fa-external-link-alt"></i></a></span>
 function in your
blueprint.</p>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>Please note: To join a room you need to create an access token. The whole process is described in the
<a href="/odin/sdk/unreal/">Unreal Engine Manual</a>.</p>
</div>
</div>

<p>Joining a room looks like this:</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_join_room.jpg"
         alt="Joining a room"/><figcaption>
            <p>Joining a room</p>
        </figcaption>

    
    
</figure>

<p>Event handling looks like this:</p>
<figure style="max-width: 600px"><a href="/images/odin/unreal/bp_on_peer_joined_example.jpg" title="Click to enlarge" data-lity><img src="/images/odin/unreal/bp_on_peer_joined_example.jpg"
         alt="The wired up peer joined event handler" width="600"/></a><figcaption>
            <p>The wired up peer joined event handler</p>
        </figcaption>
</figure>

`}),e.add({id:3908,href:"https://www.4players.io/partials/dedicated-server-export/unreal/",title:"Unreal Dedicated Server Export",section:"Partials",description:"",content:`<p>In Unreal you need to package your dedicated server in the Menu <strong>File &gt; Package Project &gt; Build Target</strong>. Follow
this <a href="https://docs.unrealengine.com/4.26/en-US/InteractiveExperiences/Networking/HowTo/DedicatedServers/">guide</a> on
how to build a dedicated server for your game.</p>
`}),e.add({id:3909,href:"https://www.4players.io/partials/kicked-event-summary/unreal/",title:"Unreal Kicked Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>-</td>
<td><span class="external-reference">On Peer Left <a href="/odin/sdk/unreal/blueprint-reference/events/on-peer-left/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered if user left a room</td>
</tr>
</tbody>
</table>
`}),e.add({id:3910,href:"https://www.4players.io/partials/start-media-event-summary/unreal/",title:"Unreal Start Media Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">On Add Media To Room Success <a href="/odin/sdk/unreal/blueprint-reference/events/on-add-media-to-room-success/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">On Media Added <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once the media has been added to the room on the server</td>
</tr>
</tbody>
</table>




<div class="box dark info">

<div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top">     <i class="fa fa-info-circle"></i>  Info  </div>

<div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom"><p>It&rsquo;s important to handle the <span class="external-reference">On Media Added <a href="/odin/sdk/unreal/blueprint-reference/events/on-media-added/"><i class="fas fa-external-link-alt"></i></a></span>
event. Whenever you receive this event, you need to
assign the media to an <code>Odin Synth Component</code> that is either part of the asset (added at design time) or you can
also create that component with <span class="external-reference">Add Odin Synth Component <a href="/odin/sdk/unreal/blueprint-reference/functions/add-odin-synth-component/"><i class="fas fa-external-link-alt"></i></a></span>
in your blueprint. The
<code>Odin Synth Component</code> generates audio output from the incoming media stream.</p>
</div>
</div>

<p>Adding a media looks like this:</p>
<figure class="blueprint "><img src="/images/odin/unreal/bp_event_setup.jpg"
         alt="Handling On Media Added events"/><figcaption>
            <p>Handling On Media Added events</p>
        </figcaption>

    
    
</figure>

`}),e.add({id:3911,href:"https://www.4players.io/partials/update-user-data-event-summary/unity/",title:"Update User Data Event Summary",section:"Partials",description:"",content:`<table>
<thead>
<tr>
<th>Local</th>
<th>Remote</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td><span class="external-reference">OnPeerUserDataChanged <a href="/odin/sdk/unity/classes/odinhandler/onpeeruserdatachanged/"><i class="fas fa-external-link-alt"></i></a></span>
</td>
<td>Triggered once for every updated peer user data</td>
</tr>
</tbody>
</table>
`}),e.add({id:3913,href:"https://www.4players.io/4netplayers/vouchers/api/",title:"Voucher REST-API",section:"Free Server Hosting",description:"Documentation for the 4Netplayers Voucher REST-API",content:`<p>The 4Netplayers Voucher System REST API allows partners to generate and retrieve voucher codes. This API is designed for ease of use and flexibility, with methods to manage voucher codes efficiently.</p>
<h2 id="base-url">Base URL</h2>
<p><code>https://secure.4players.de/public/api/v1/vouchers/{VOUCHER-ID}</code></p>
<ul>
<li><strong>{VOUCHER-ID}:</strong> Replace with the Voucher-ID provided to you by 4Netplayers.</li>
</ul>
<h2 id="authentication">Authentication</h2>
<p>All API requests require an <code>Authorization</code> header with your API-Key:</p>
<pre><code class="language-http">Authorization: your-api-key
</code></pre>
<h2 id="endpoints">Endpoints</h2>
<h3 id="retrieve-voucher-codes">Retrieve Voucher Codes</h3>
<ul>
<li><strong>Method:</strong> <code>GET</code></li>
<li><strong>URL:</strong> <code>https://secure.4players.de/public/api/v1/vouchers/{VOUCHER-ID}[?externalId=EXTERNAL-ID]</code></li>
<li><strong>Description:</strong> Retrieves a list of all voucher codes generated under the specified Voucher-ID and optionally filtered by an external ID.</li>
<li><strong>Response Format:</strong></li>
</ul>
<pre><code class="language-json">[
	{
		&quot;id&quot;: &quot;bjBucDdab3pDc0dITkFWNTVjWLlEZz09&quot;,
		&quot;code&quot;: &quot;POE-A5E-F9F-641-NIX&quot;,
		&quot;amount&quot;: 1500,
		&quot;created&quot;: &quot;2024-08-23 10:50:16&quot;,
		&quot;externalId&quot;: &quot;12385&quot;,
        &quot;isUsed&quot;: false
	},
	{
		&quot;id&quot;: &quot;ajBucDaab3pCc0dIHkFWNTHjWTlEZz09&quot;,
		&quot;code&quot;: &quot;POE-3B6-1BD-A04-NIX&quot;,
		&quot;amount&quot;: 500,
		&quot;created&quot;: &quot;2024-08-23 10:50:57&quot;,
		&quot;externalId&quot;: &quot;12384&quot;,
        &quot;isUsed&quot;: true
	}
]
</code></pre>
<ul>
<li>
<p><strong>Request Parameters:</strong></p>
<ul>
<li><code>VOUCHER-ID</code>: The unique identifier assigned to the partner for managing voucher codes.</li>
<li><code>EXTERNAL-ID</code>: (Optional) Filter the vouchers by an external identifier provided by the partner.</li>
</ul>
</li>
<li>
<p><strong>Response Details:</strong></p>
<ul>
<li><code>id</code>: The unique identifier for the voucher.</li>
<li><code>code</code>: The actual voucher code that users can enter during the rental service order process.</li>
<li><code>amount</code>: The value of the voucher in Eurocents (e.g., 1500 represents 15.00€).</li>
<li><code>created</code>: The date and time when the voucher was created.</li>
<li><code>externalId</code>: An optional identifier provided by the partner to link the voucher to their internal systems (e.g., user IDs).</li>
<li><code>isUsed</code>: Indicates whether the voucher has been redeemed.</li>
</ul>
</li>
</ul>
<h3 id="create-a-voucher">Create a Voucher</h3>
<ul>
<li><strong>Method:</strong> <code>POST</code></li>
<li><strong>URL:</strong> <code>https://secure.4players.de/public/api/v1/vouchers/{VOUCHER-ID}</code></li>
<li><strong>Description:</strong> Creates a new voucher code under the specified Voucher-ID.</li>
<li><strong>Request Payload:</strong></li>
</ul>
<pre><code class="language-json">{
	&quot;prefix&quot;: &quot;MYGAME&quot;,
	&quot;suffix&quot;: &quot;2024&quot;,
	&quot;amount&quot;: 500,
	&quot;externalId&quot;: &quot;12384&quot;
}
</code></pre>
<ul>
<li>
<p><strong>Request Details:</strong></p>
<ul>
<li><code>prefix</code>: (Optional) A prefix to be added to the generated voucher code.</li>
<li><code>suffix</code>: (Optional) A suffix to be added to the generated voucher code.</li>
<li><code>amount</code>: The value of the voucher in Eurocents. Must be a positive integer, with a maximum of 25000 (i.e., 250.00€).</li>
<li><code>externalId</code>: (Optional) A string that partners can use to associate the voucher with their internal user IDs or other identifiers.</li>
</ul>
</li>
<li>
<p><strong>Response:</strong></p>
<ul>
<li>On success, the API will return the newly created voucher code in a format similar to the GET response.</li>
</ul>
</li>
</ul>
<h3 id="error-handling">Error Handling</h3>
<ul>
<li><strong>401 Unauthorized:</strong> If the API-Key is missing or invalid.</li>
<li><strong>400 Bad Request:</strong> If required parameters are missing or invalid (e.g., <code>amount</code> exceeds the maximum allowed value).</li>
<li><strong>404 Not Found:</strong> If the Voucher-ID does not exist.</li>
</ul>
<h3 id="example-use-cases">Example Use Cases</h3>
<ul>
<li>
<p><strong>Retrieve all vouchers for a game:</strong></p>
<pre><code class="language-bash">curl -H &quot;Authorization: your-api-key&quot; https://secure.4players.de/public/api/v1/vouchers/ajBucDdab3pDc0dITkFWN
</code></pre>
</li>
<li>
<p><strong>Create a new voucher:</strong></p>
<pre><code class="language-bash">curl -X POST -H &quot;Authorization: your-api-key&quot; \\
-H &quot;Content-Type: application/json&quot; \\
-d '{&quot;prefix&quot;:&quot;MYGAME&quot;, &quot;amount&quot;:1500, &quot;externalId&quot;:&quot;user123&quot;}' \\
https://secure.4players.de/public/api/v1/vouchers/ajBucDdab3pDc0dITkFWN
</code></pre>
</li>
</ul>
<h3 id="conclusion">Conclusion</h3>
<p>This REST API documentation provides the necessary details to integrate the 4Netplayers voucher system into your applications. It offers a straightforward method for managing voucher codes, enabling you to enhance your game or application with voucher-based server rentals.</p>
`}),e.add({id:3914,href:"https://www.4players.io/4netplayers/vouchers/",title:"Vouchers",section:"Free Server Hosting",description:"Learn more about how you can integrate our voucher system into your game to allow your community to get our game servers at discounted prices or integration into your in-game currency system.",content:`<p>The 4Netplayers voucher system is a powerful tool designed for influencers, game developers, and partners to offer their users a seamless way to purchase game server rentals using vouchers. These vouchers can be distributed as rewards, purchased with in-game currency, or integrated into various promotional strategies.</p>
<p>This system provides a flexible way to manage voucher codes through a REST API, allowing partners to create and retrieve voucher codes linked to their products or services.</p>
<h2 id="how-the-voucher-system-works">How the Voucher System Works</h2>
<ul>
<li><strong>Vouchers as Payment:</strong> Vouchers can be generated with a monetary value of up to 250€ and can be redeemed by users to rent game servers on 4Netplayers.</li>
<li><strong>Partner Billing:</strong> The sum of generated vouchers is billed monthly to the partner (influencers, game developers, etc.).</li>
<li><strong>Voucher-ID:</strong> Partners are assigned a unique Voucher-ID. This ID acts as the domain in which all voucher codes are generated and managed. Partners can request multiple Voucher-IDs if they have more than one game or need to segregate their vouchers for different purposes.</li>
</ul>
<h2 id="typical-use-case">Typical Use Case</h2>
<p>Game developers can integrate the voucher system into their games, allowing users to purchase vouchers using in-game currency or in-app purchases. These vouchers can then be used by players to rent game servers on 4Netplayers, enhancing the gaming experience.</p>
<h2 id="prerequisites-for-access">Prerequisites for Access</h2>
<p>To access and use the voucher system, partners must meet the following prerequisites:</p>
<ol>
<li><strong>4Players Account:</strong> Partners must have a 4Players account. If they do not have one, they can create it <a href="https://secure.4players.de/public/user/en_GB/4netplayers/register">here</a>.</li>
<li><strong>Partner Account:</strong> Partners need a partner account, which can be obtained by contacting our team via <a href="https://www.4players.io/company/contact_us/">Discord or our sales team</a>. Once approved, they will receive a Voucher-ID and an API-Key.
<ul>
<li><strong>Voucher-ID:</strong> The domain where codes are generated. Partners may request multiple Voucher-IDs.</li>
<li><strong>API-Key:</strong> Used to authenticate requests to the voucher system.</li>
</ul>
</li>
</ol>
<h2 id="authentication">Authentication</h2>
<p>All API requests must include the <code>Authorization</code> header with the API-Key as the value. This ensures that only authorized partners can generate and manage voucher codes.</p>
<h2 id="api-endpoints">API Endpoints</h2>
<p>Learn more about the available API endpoints and how to interact with the voucher system by referring to the
<a href="./api">Voucher System API documentation</a>.</p>
`}),search!==null&&search.addEventListener("input",t,!0),suggestions!==null&&suggestions.addEventListener("click",n,!0);function t(){const n=5;var s=this.value,o=e.search(s,{limit:n,enrich:!0});suggestions.classList.remove("d-none"),suggestions.innerHTML="";const t={};o.forEach(e=>{e.result.forEach(e=>{t[e.doc.href]=e.doc})});for(const s in t){const o=t[s],e=document.createElement("div");if(e.innerHTML="<a href><span></span><span></span></a>",e.querySelector("a").href=s,e.querySelector("span:first-child").textContent=o.title,e.querySelector("span:nth-child(2)").textContent=o.description,suggestions.appendChild(e),suggestions.childElementCount==n)break}}function n(){for(;suggestions.lastChild;)suggestions.removeChild(suggestions.lastChild);return!1}})()