<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>4Players Blog</title><link>https://odin.4players.io/blog/</link><description>Latest news about 4Players, SDK releases, success stories, tutorials and development in general.</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><copyright>Copyright (c) 4Players GmbH</copyright><image><url>https://odin.4players.io/images/favicon-32x32.png</url><title>4Players Blog</title><link>https://odin.4players.io/blog/</link><width>32</width><height>32</height></image><atom:link href="https://odin.4players.io/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Fleet DNS: Clean, Secure Service Addresses in ODIN Fleet</title><link>https://odin.4players.io/blog/odin-fleet-dns/</link><pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/odin-fleet-dns/</guid><description>&lt;h2 id="ip-port-to-service-link--fleet-dns-enables-clear-addresses">IP port to service link – Fleet DNS enables clear addresses&lt;/h2>
&lt;p>IP addresses and ports are a nightmare for teams. Players forget the ports, testers share incorrect links, and communities document non-professional addresses. To eliminate this technical hassle, we have integrated DNS into ODIN Fleet. This makes your services easier to access, safer and easier to manage.&lt;/p>
&lt;h3 id="technology-holding-you-back">Technology holding you back?&lt;/h3>
&lt;p>Anyone who’s ever wanted to run a game server, a dashboard or an admin panel will be familiar with this: instead of making things easier, technology slows you down. Players, for example, have to memorize IP addresses and ports, or fail to join because they’ve entered the wrong details. To prevent this, communities take it upon themselves to document the addresses on Discord, in launchers or on websites. However, these are so complicated and cumbersome that nobody can really remember them. Even development teams waste valuable time repeatedly answering the same questions: “What was the IP and port again?” or “Why isn’t the link working?”&lt;/p>
&lt;p>Technology should work without needing to be constantly explained. It should run in the background whilst users can concentrate on what matters most, whether that’s playing, testing or managing servers.&lt;/p>
&lt;p>But more importantly you need secure connections for your users and your team. If anyone who remembers the access to a port or enters by chance the correct number can join, you have clearly a security problem, especially when your connection isn’t secured with the HTTPS standard.&lt;/p>
&lt;h3 id="opening-the-curtain-for-fleet-dns">Opening the curtain for Fleet DNS&lt;/h3>
&lt;p>With Fleet DNS, technical server ports are transformed into simple service addresses. No more chaos of numbers and protocols, just clear links that anyone can share, remember and integrate into workflows. What does this mean in practice? Every access point gets its own, clean address, whether it’s a game port, dashboard or API.&lt;/p>
&lt;p>For UDP services, you can now enable Service DNS in the Server Config. This creates a kind of hybrid link with a port, e.g. &amp;lt;id&amp;gt;.fleet.4players.services:27015. Without Service DNS, the UDP port remains accessible only via the traditional IP:port combination. In the case of TCP ports (e.g. web dashboards), the port is omitted entirely: instead of 123.45.67.89:8080, you have addresses such as &amp;lt;id&amp;gt;.fleet.4players.services.&lt;/p>
&lt;h3 id="where-fleet-dns-makes-the-difference">Where Fleet DNS makes the difference&lt;/h3>
&lt;h4 id="dashboard">Dashboard&lt;/h4>
&lt;p>If you run a server and want to share the web dashboard with your team or friends, you’ve currently had to rely on the IP address and port. With Fleet DNS, you simply enable HTTPS DNS for the dashboard port and share a standard link such as https://&amp;lt;id&amp;gt;.fleet.4players.services. This link can be securely opened in the browser straight away, requiring no technical knowledge and triggering no browser warnings. Everyone can access it with a single click, and once bookmarked, it’s easy to come back.&lt;/p>
&lt;h4 id="community-servers">Community servers&lt;/h4>
&lt;p>A community wants to document its server on Discord, on its website or in the launcher. For TCP ports (e.g. for web services), this results in a clear address without a port number – professional and easy to remember. For game/UDP ports, Service DNS generates a link such as &amp;lt;id&amp;gt;.fleet.4players.services:27015. Both variants are easier to remember than a raw IP address and can be shared in any channel. No guesswork, no need to ask for details, and it just works.&lt;/p>
&lt;h4 id="test-server-for-teams">Test server for Teams&lt;/h4>
&lt;p>Developers, modders and QA teams are all familiar with the problem: test builds need to be shared quickly and easily. Without Fleet DNS, this often involves a back-and-forth exchange of IP addresses and ports that nobody ever manages to keep track of. With Fleet DNS, every test build gets its own address. The web dashboard runs over HTTPS (without a port), the game port is accessible via Service DNS with a port, and everything is ready to use straight away.&lt;/p>
&lt;h3 id="but-fleet-dns-is-more-than-just-a-subdomain">But Fleet DNS is more than just a subdomain&lt;/h3>
&lt;p>Other providers promote ‘free subdomains’ or ‘dedicated IPs’. This is well known and understandable. However, Fleet DNS offers not just a single address for the entire server, but individual addresses for every port and every use case. It is not just a subdomain, rather it is DNS per port, HTTPS for web services and service DNS for UDP ports.&lt;/p>
&lt;p>So the most important part here, is that you are making your whole access a lot more secure. Fleet DNS now delivers encrypted connections via SSL which will not only protect your ports even better but will raise trust. Current browsers often warn users when visiting pages without SSL encryption. Fleet DNS has this on board naturally.&lt;/p>
&lt;p>If you also want to restrict external access, you can use the Private DNS feature. When activated in the ServerConfig for a port, that port is no longer directly accessible from external IP:Port, but only via the Fleet DNS address. This limits the vulnerability and gives you full power of who can enter. Particularly with HTTPS links, this provides the advantage that communication is encrypted and protected against tampering, which is a crucial difference compared to unencrypted HTTP connections.&lt;/p>
&lt;p>Whilst other providers give you subdomains, Fleet DNS gives you control over every service, every port and every use case.&lt;/p>
&lt;p>Although Fleet DNS is extremely powerful, there are clear limitations that you should be aware of. For instance, Fleet DNS does not allow you to use your own custom domain, such as my-server.com, nor does it replace authentication or a firewall: whilst private ports reduce the attack surface by preventing direct IP:port access, they do not provide complete protection.&lt;/p>
&lt;h3 id="less-technology-more-focus-on-the-essentials">Less technology, more focus on the essentials&lt;/h3>
&lt;p>But ultimately, the benefits outweigh the drawbacks. Players want to play. Teams want to test. Communities want to grow. Admins want to manage. Nobody wants to mess around with IPs, ports or connection details. Fleet DNS takes that burden off your shoulders.&lt;/p>
&lt;p>&lt;a href='https://console.4players.io/' class="btn btn-primary">Check out Fleet DNS for yourself&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-fleet-dns.png"/></item><item><title>Bringing ODIN Voice Chat to FMOD: A Complete Toolkit for Studio and Runtime</title><link>https://odin.4players.io/blog/fmod-odin-complete-toolkit/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/fmod-odin-complete-toolkit/</guid><description>&lt;h2 id="bringing-odin-voice-chat-to-fmod-a-complete-toolkit-for-studio-and-runtime">Bringing ODIN Voice Chat to FMOD: A Complete Toolkit for Studio and Runtime&lt;/h2>
&lt;p>Voice chat is a must-have for modern multiplayer games—but integrating it into FMOD? That’s like trying to fit a square peg in a round hole.
Real-time peer audio isn’t your average baked asset. You can’t import a sound file, preview an event in the editor, or even find a clear spot for your audio team to tweak it like the rest of your mix. Until now.&lt;/p>
&lt;p>With the release of our &lt;strong>FMOD Studio Plugin&lt;/strong>, ODIN&amp;rsquo;s FMOD toolkit is now feature-complete across both the design-time and runtime sides of the pipeline. This post walks through every component, who it&amp;rsquo;s for, and when to reach for it.&lt;/p>
&lt;h2 id="tldr-why-use-odin-voice">TL;DR Why use ODIN Voice?&lt;/h2>
&lt;p>You&amp;rsquo;re using FMOD. You want to add voice chat. Most voice SDKs treat audio output as a black box and push you back to Unity&amp;rsquo;s or Unreal&amp;rsquo;s built-in audio engine — undoing the pipeline your team has built around FMOD. ODIN is different:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Voice chat lives inside FMOD.&lt;/strong> On both Unreal and Unity, peer audio routes through FMOD — so your mix bus structure, effects, attenuation, and spatialization apply to each single voice the same way they apply to every other sound in the game.&lt;/li>
&lt;li>&lt;strong>Your audio team mixes voice in FMOD Studio.&lt;/strong> Our new Studio Plugin lets sound designers join a live ODIN room and tune the mix in the tool they already know — before a single line of game code is touched.&lt;/li>
&lt;li>&lt;strong>Built for real-time games.&lt;/strong> Low-latency, managed voice service with SDKs for every major engine and platform.&lt;/li>
&lt;li>&lt;strong>Open-source integration code.&lt;/strong> Every FMOD integration is published on GitHub — fork it, extend it, or ship it as-is.&lt;/li>
&lt;/ul>
&lt;h2 id="the-toolkit-at-a-glance">The Toolkit at a Glance&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tool&lt;/th>
&lt;th>Target&lt;/th>
&lt;th>Stage&lt;/th>
&lt;th>Best For&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>FMOD Studio Plugin&lt;/strong>&lt;/td>
&lt;td>Engine-agnostic&lt;/td>
&lt;td>Design-time&lt;/td>
&lt;td>Audio engineers previewing ODIN streams inside FMOD Studio&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>FMOD Adapter Plugin (Unreal)&lt;/strong>&lt;/td>
&lt;td>Unreal&lt;/td>
&lt;td>Runtime&lt;/td>
&lt;td>Teams that want a drop-in plugin with Blueprint support&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>FMOD Integration Guide (Unreal)&lt;/strong>&lt;/td>
&lt;td>Unreal&lt;/td>
&lt;td>Runtime&lt;/td>
&lt;td>Teams that want full source control over the DSP path&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>FMOD Integration Guide (Unity)&lt;/strong>&lt;/td>
&lt;td>Unity&lt;/td>
&lt;td>Runtime&lt;/td>
&lt;td>Unity teams that use FMOD as their audio solution&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p> &lt;/p>
&lt;h3 id="1-fmod-studio-plugin-new">1. FMOD Studio Plugin (New)&lt;/h3>
&lt;p>The newest addition to our toolkit, the &lt;a href="https://github.com/4Players/odin-fmod-studio">ODIN FMOD Studio Plugin&lt;/a>
is a DSP-based plugin that connects FMOD Studio directly to ODIN rooms.&lt;/p>
&lt;p>&lt;strong>Why this matters for audio engineers:&lt;/strong> until now, the only way to hear what voice chat sounds like through your project&amp;rsquo;s FMOD mix was to run the game. With the Studio Plugin, you can join a live ODIN room from inside FMOD Studio, route peer audio through your event&amp;rsquo;s signal chain, and apply the same DSP, mixing, and spatialization you would for any other sound source.&lt;/p>
&lt;p>&lt;strong>How it works:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Drop the &lt;strong>ODIN Playback Plugin&lt;/strong> into an FMOD event&amp;rsquo;s signal chain.&lt;/li>
&lt;li>Enable &lt;strong>Persistent&lt;/strong> on the event.&lt;/li>
&lt;li>In the &lt;strong>Deck&lt;/strong>, enter your &lt;code>Access Key&lt;/code>, &lt;code>Room Id&lt;/code>, and an optional &lt;code>User Id&lt;/code>.&lt;/li>
&lt;li>Hit &lt;strong>Connect&lt;/strong>, then &lt;strong>Play&lt;/strong> — remote peers are mixed live into the event output.&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Cross-platform testing:&lt;/strong> pair it with the &lt;a href="https://4players.app/">4Players Web App&lt;/a>
to join the same room from a browser and validate your mix against real input, without needing a build.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Studio-only by design.&lt;/strong> This plugin is intended for design-time work. Do not ship it in console, mobile, or web runtime builds — keep Studio-only event variants so your runtime banks don&amp;rsquo;t depend on the Studio DSP. For runtime, use the engine-specific integrations below.&lt;/p>
&lt;/blockquote>
&lt;h3 id="2-fmod-adapter-plugin-unreal">2. FMOD Adapter Plugin (Unreal)&lt;/h3>
&lt;p>The &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-adapter-unreal/">FMOD Adapter Plugin for Unreal&lt;/a>
is the fastest path to voice chat in an Unreal project that already uses FMOD. Under the hood it uses the same &lt;strong>DSP Plugin&lt;/strong> and &lt;strong>Programmer Sound&lt;/strong> techniques covered in the integration guide below — packaged as a ready-to-use plugin so your team doesn&amp;rsquo;t have to build them from scratch.&lt;/p>
&lt;p>The plugin ships two key parts:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>UOdinFmodAdapterComponent&lt;/code>&lt;/strong> — a drop-in replacement for the default &lt;code>UOdinSynthComponent&lt;/code>. It routes peer audio from ODIN Voice through FMOD instead of built-in audio engine.&lt;/li>
&lt;li>&lt;strong>&lt;code>UFmodOdinSubsystem&lt;/code>&lt;/strong> — starts ODIN with FMOD&amp;rsquo;s configured sample rate automatically.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>For audio engineers:&lt;/strong> the FMOD Event is defined in FMOD Studio with any effects, sends, and 3D attenuation your project needs. The Unreal side just plays it. Your audio team owns the sonic behavior of voice chat the same way they own everything else in the mix.&lt;/p>
&lt;p>&lt;strong>For developers:&lt;/strong> drop the component on a Player Character, call &lt;code>Play Odin Voice&lt;/code> from your &lt;code>OnMediaAdded&lt;/code> event handler, and you&amp;rsquo;re done. No custom DSP code to maintain.&lt;/p>
&lt;p>This is the recommended path for most Unreal teams.&lt;/p>
&lt;h3 id="3-fmod-integration-guide-unreal">3. FMOD Integration Guide (Unreal)&lt;/h3>
&lt;p>If you need full control over the DSP path — custom mixing logic, per-peer channel groups, specialized spatialization — the &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-unreal/">FMOD Integration Guide for Unreal&lt;/a>
walks through building a &lt;code>UOdinFmodAdapter&lt;/code> from scratch using the same two techniques the Adapter Plugin is built on:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>DSP Plugin (recommended):&lt;/strong> writes ODIN audio directly to the master channel group via a custom DSP. Low latency, full control over the signal flow.&lt;/li>
&lt;li>&lt;strong>Programmer Sound (alternative):&lt;/strong> uses FMOD&amp;rsquo;s Programmer Sound API. Easier to wire up, but adds roughly 500ms of latency — generally not acceptable for live voice.&lt;/li>
&lt;/ul>
&lt;p>The accompanying &lt;a href="https://github.com/4Players/odin-unreal-fmod">sample project&lt;/a>
is a working reference implementation, including the &lt;code>UOdinFmodAdapter&lt;/code> source, a Pan DSP for spatialization, and attenuation parameters exposed to Blueprints.&lt;/p>
&lt;p>Reach for this option when the Adapter Plugin&amp;rsquo;s behavior doesn&amp;rsquo;t match your needs and you&amp;rsquo;d rather fork the implementation than work around it.&lt;/p>
&lt;h3 id="4-fmod-integration-guide-unity">4. FMOD Integration Guide (Unity)&lt;/h3>
&lt;p>The &lt;a href="https://docs.4players.io/voice/unity/guides/odin-fmod/">FMOD Integration Guide for Unity&lt;/a>
shows how to wire ODIN into a Unity project that uses FMOD — whether alongside Unity&amp;rsquo;s built-in audio or as the sole audio engine.&lt;/p>
&lt;p>The centerpiece is &lt;code>FMODMicrophoneReader&lt;/code>, a drop-in replacement for ODIN&amp;rsquo;s default &lt;code>MicrophoneReader&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>Captures microphone audio through FMOD&amp;rsquo;s &lt;code>recordStart&lt;/code> API in &lt;code>PCMFLOAT&lt;/code> format.&lt;/li>
&lt;li>Reads the recording buffer continuously and pushes the data to the ODIN servers.&lt;/li>
&lt;li>Handles sample rate and channel count matching between FMOD&amp;rsquo;s recording device and ODIN&amp;rsquo;s media streams.&lt;/li>
&lt;/ul>
&lt;p>Paired with &lt;code>FMODPlaybackComponent&lt;/code> for output, this gives Unity teams a complete capture-and-playback path through FMOD.&lt;/p>
&lt;blockquote>
&lt;p>Heads up: the Unity playback path is based on FMOD Programmer Sounds and adds roughly 500ms of latency. If lower latency is critical, the FMOD Studio Plugin above is a great place to prototype your mix while we expand the runtime options.&lt;/p>
&lt;/blockquote>
&lt;h3 id="which-one-should-you-use">Which One Should You Use?&lt;/h3>
&lt;p>A quick decision tree:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Audio engineer prototyping the mix?&lt;/strong> → FMOD Studio Plugin.&lt;/li>
&lt;li>&lt;strong>Unreal team shipping production voice chat?&lt;/strong> → FMOD Adapter Plugin (Unreal).&lt;/li>
&lt;li>&lt;strong>Unreal team that needs custom DSP behavior?&lt;/strong> → FMOD Integration Guide (Unreal), forked from the sample project.&lt;/li>
&lt;li>&lt;strong>Unity team using FMOD for audio?&lt;/strong> → FMOD Integration Guide (Unity).&lt;/li>
&lt;/ul>
&lt;p>These are not mutually exclusive. Your audio team can iterate inside the Studio Plugin while your engineers integrate the runtime plugin in parallel — both connect to the same ODIN rooms with the same access key, so the mix your audio engineer signs off on in FMOD Studio is the mix that ships.&lt;/p>
&lt;h3 id="getting-started">Getting Started&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>FMOD Studio Plugin&lt;/strong> → &lt;a href="https://docs.4players.io/voice/fmod/fmod-studio-plugin/">docs.4players.io/voice/fmod/fmod-studio-plugin&lt;/a>
&lt;/li>
&lt;li>&lt;strong>FMOD Adapter Plugin (Unreal)&lt;/strong> → &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-adapter-unreal/">docs.4players.io/voice/unreal/guides/odin-fmod-adapter-unreal&lt;/a>
&lt;/li>
&lt;li>&lt;strong>FMOD Integration Guide (Unreal)&lt;/strong> → &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-unreal/">docs.4players.io/voice/unreal/guides/odin-fmod-unreal&lt;/a>
&lt;/li>
&lt;li>&lt;strong>FMOD Integration Guide (Unity)&lt;/strong> → &lt;a href="https://docs.4players.io/voice/unity/guides/odin-fmod/">docs.4players.io/voice/unity/guides/odin-fmod&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h2 id="using-another-audio-engine-or-sound-tool">Using another audio engine or sound tool?&lt;/h2>
&lt;p>Checkout our &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-wwise/">Wwise integration guide&lt;/a>
and &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-wwise-adapter/">Wwise adapter plugin&lt;/a>
for using ODIN with Wwise in Unreal
or our &lt;a href="https://docs.4players.io/voice/unity/guides/odin-atmoky/">atmoky guide with sample project&lt;/a>
for using ODIN with atmoky trueSpatial in Unity.&lt;/p>
&lt;p>These docs should give you a hint to integrate ODIN into any other audio engine or 3rd party sound tool.
Feel free to ask us about special development support for your custom integration!&lt;/p>
&lt;p>Questions, feedback, or feature requests? &lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Join us on Discord&lt;/a>
— we&amp;rsquo;d love to hear how you&amp;rsquo;re integrating voice into your project.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin_fmod_complete_toolkit.jpg"/></item><item><title>A Perfect Match: ODIN Fleet Meets Your Matchmaking System</title><link>https://odin.4players.io/blog/integrating-odin-fleet-with-external-matchmaking-systems/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/integrating-odin-fleet-with-external-matchmaking-systems/</guid><description>&lt;p>Modern multiplayer backends are modular. You might already use Amazon&amp;rsquo;s &lt;strong>GameLift Servers FlexMatch&lt;/strong>,
or build your matchmaking on Heroic Labs&amp;rsquo; &lt;strong>Nakama Server&lt;/strong>.&lt;/p>
&lt;p>Instead of replacing these systems, &lt;strong>ODIN Fleet&lt;/strong> integrates with them.&lt;/p>
&lt;p>This article explains:&lt;/p>
&lt;ol>
&lt;li>What becomes possible when you combine ODIN Fleet with external matchmaking systems&lt;/li>
&lt;li>How the architecture works on a high level&lt;/li>
&lt;li>Where to find full step-by-step implementation guides&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="whats-possible">What&amp;rsquo;s Possible&lt;/h2>
&lt;p>Modern multiplayer architectures don’t need to bundle everything into one provider.&lt;/p>
&lt;p>With ODIN Fleet, you can separate two core responsibilities:&lt;/p>
&lt;ul>
&lt;li>🧠 &lt;strong>Matchmaking system&lt;/strong> → decides who plays together&lt;/li>
&lt;li>🖥 &lt;strong>ODIN Fleet&lt;/strong> → runs the dedicated game servers&lt;/li>
&lt;/ul>
&lt;p>This separation gives you flexibility without sacrificing scalability.&lt;/p>
&lt;h3 id="why-this-matters-for-decision-makers-and-developers">Why This Matters for Decision Makers and Developers&lt;/h3>
&lt;p>&lt;strong>Infrastructure independence&lt;/strong>&lt;br>
Use AWS matchmaking features or Nakama logic — without being locked into their compute layer.&lt;/p>
&lt;p>&lt;strong>Clear cost control&lt;/strong>&lt;br>
Matchmaking and server infrastructure scale differently. Separating them gives better transparency and optimization potential.&lt;/p>
&lt;p>&lt;strong>Long-term flexibility&lt;/strong>&lt;br>
You can evolve or replace your matchmaking system without redesigning your server deployment model.&lt;/p>
&lt;p>&lt;strong>Clean architecture&lt;/strong>&lt;br>
Matchmaking stays in your backend.&lt;br>
Game servers run independently on ODIN Fleet.&lt;/p>
&lt;p>&lt;strong>Works with your stack&lt;/strong>&lt;br>
Already using:&lt;/p>
&lt;ul>
&lt;li>Amazon GameLift Anywhere&lt;/li>
&lt;li>Amazon GameLift FlexMatch&lt;/li>
&lt;li>Nakama&lt;/li>
&lt;/ul>
&lt;p>You don’t need to rewrite anything — you simply connect ODIN Fleet as the compute layer.&lt;/p>
&lt;h3 id="the-core-idea">The Core Idea&lt;/h3>
&lt;p>Across all setups:&lt;/p>
&lt;ul>
&lt;li>Matchmaking remains intelligent and provider-specific&lt;/li>
&lt;li>ODIN Fleet provides scalable, global compute&lt;/li>
&lt;li>Systems communicate through clearly defined interfaces&lt;/li>
&lt;li>Players connect directly to ODIN-hosted servers&lt;/li>
&lt;/ul>
&lt;p>This results in a modern multiplayer backend that is:&lt;/p>
&lt;p>&lt;strong>Composable. Replaceable. Scalable.&lt;/strong>&lt;/p>
&lt;hr>
&lt;h2 id="how-it-works-technically">How It Works Technically&lt;/h2>
&lt;p>Let’s look at the structure without diving too deep.&lt;/p>
&lt;h3 id="1-odin-fleet-as-the-compute-layer">1️⃣ ODIN Fleet as the Compute Layer&lt;/h3>
&lt;p>ODIN Fleet runs your dedicated game server as a Docker container.&lt;/p>
&lt;p>Each server:&lt;/p>
&lt;ul>
&lt;li>Exposes a public game port&lt;/li>
&lt;li>Can receive environment variables&lt;/li>
&lt;li>Can update metadata (e.g., idle/occupied)&lt;/li>
&lt;li>Can integrate SDKs like GameLift&lt;/li>
&lt;/ul>
&lt;p>ODIN Fleet does &lt;strong>not&lt;/strong> do matchmaking.&lt;br>
It runs your game reliably and globally.&lt;/p>
&lt;h3 id="2-external-matchmaking-layer">2️⃣ External Matchmaking Layer&lt;/h3>
&lt;p>Depending on your setup:&lt;/p>
&lt;h4 id="with-gamelift-anywhere--flexmatch">With GameLift Anywhere (+ FlexMatch)&lt;/h4>
&lt;p>FlexMatch handles via agents.
ODIN provides.&lt;/p>
&lt;ul>
&lt;li>Your game server includes the GameLift Server SDK&lt;/li>
&lt;li>A GameLift Agent runs inside the game server&amp;rsquo;s docker container&lt;/li>
&lt;li>AWS handles matchmaking and session placement&lt;/li>
&lt;li>ODIN provides the actual compute resources to run your game server&lt;/li>
&lt;li>Dynamic scaling based on real-time player counts to save costs&lt;/li>
&lt;/ul>
&lt;h4 id="with-nakama">With Nakama&lt;/h4>
&lt;p>Nakama matches via modules.&lt;br>
ODIN runs.&lt;/p>
&lt;ul>
&lt;li>Nakama implements matchmaking logic&lt;/li>
&lt;li>A FleetManager module connects Nakama to ODIN Fleet&lt;/li>
&lt;li>Nakama lists available servers&lt;/li>
&lt;li>Game servers update their state via metadata&lt;/li>
&lt;/ul>
&lt;h3 id="3-state-synchronization">3️⃣ State Synchronization&lt;/h3>
&lt;p>All integrations rely on simple state communication:&lt;/p>
&lt;ul>
&lt;li>Server becomes available → marked as &lt;code>idle&lt;/code>&lt;/li>
&lt;li>Match starts → marked as &lt;code>occupied&lt;/code>&lt;/li>
&lt;li>Match ends → marked as &lt;code>idle&lt;/code>&lt;/li>
&lt;li>Scale up or down on demand&lt;/li>
&lt;/ul>
&lt;p>This keeps orchestration deterministic and transparent.&lt;/p>
&lt;hr>
&lt;h2 id="full-implementation-guides">Full Implementation Guides&lt;/h2>
&lt;p>If you want to go deeper, we provide complete technical guides:&lt;/p>
&lt;h3 id="-gamelift-flexmatch-builds-on-anywhere--odin-fleet">🔹 GameLift FlexMatch (builds on Anywhere) + ODIN Fleet&lt;/h3>
&lt;p>Step-by-step setup including:&lt;/p>
&lt;ul>
&lt;li>Unreal Server SDK integration&lt;/li>
&lt;li>GameLift Agent in Docker&lt;/li>
&lt;li>Backend example&lt;/li>
&lt;li>Rule sets &amp;amp; Placement queues&lt;/li>
&lt;li>SNS notifications&lt;/li>
&lt;li>Client integration&lt;/li>
&lt;li>Autoscaling&lt;/li>
&lt;/ul>
&lt;p>👉 &lt;a href="https://docs.4players.io/fleet/guides/gamelift-flexmatch/">https://docs.4players.io/fleet/guides/gamelift-flexmatch/&lt;/a>
&lt;/p>
&lt;p>GitHub repository:
&lt;a href="https://github.com/4Players/OdinFleet_GameLift_Unreal">https://github.com/4Players/OdinFleet_GameLift_Unreal&lt;/a>
(Game Server)
&lt;a href="https://github.com/4Players/Odin_GameLift_GameBackendService">https://github.com/4Players/Odin_GameLift_GameBackendService&lt;/a>
(Agent &amp;amp; Autoscaling)&lt;/p>
&lt;h3 id="-nakama-fleet-manager">🔹 Nakama Fleet Manager&lt;/h3>
&lt;p>Includes:&lt;/p>
&lt;ul>
&lt;li>Go-based FleetManager module&lt;/li>
&lt;li>ODIN Fleet API integration&lt;/li>
&lt;li>Metadata-based orchestration&lt;/li>
&lt;li>Example implementation&lt;/li>
&lt;/ul>
&lt;p>👉 &lt;a href="https://docs.4players.io/fleet/guides/nakama-fleetmanager/">https://docs.4players.io/fleet/guides/nakama-fleetmanager/&lt;/a>
&lt;/p>
&lt;p>GitHub repository: &lt;a href="https://github.com/4Players/odin-nakama-fleet-manager">https://github.com/4Players/odin-nakama-fleet-manager&lt;/a>
&lt;/p>
&lt;h3 id="-other-matchmaking-system">🔹 Other Matchmaking System?&lt;/h3>
&lt;p>No worries - let&amp;rsquo;s talk!&lt;/p>
&lt;p>👉 &lt;a href="https://odin.4players.io/company/contact_us/">https://odin.4players.io/company/contact_us/&lt;/a>
&lt;/p>
&lt;h2 id="ready-to-build">Ready to Build?&lt;/h2>
&lt;p>Explore the full documentation:&lt;/p>
&lt;p>👉 &lt;a href="https://docs.4players.io/fleet/">https://docs.4players.io/fleet/&lt;/a>
&lt;/p>
&lt;p>Or talk to us about your backend architecture:&lt;/p>
&lt;p>👉 &lt;a href="https://odin.4players.io/company/contact_us/">https://odin.4players.io/company/contact_us/&lt;/a>
&lt;/p>
&lt;p>Let’s build scalable multiplayer systems —&lt;br>
with flexible matchmaking and independent infrastructure.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin_fleet_matchmaking_1600x800.jpg"/></item><item><title>Introducing ODIN Voice 2.0</title><link>https://odin.4players.io/blog/introducing-odin-voice-2.0/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-odin-voice-2.0/</guid><description>&lt;p>We&amp;rsquo;re pleased to introduce &lt;strong>ODIN Voice 2.0&lt;/strong> - a major update to our core SDK that simplifies integration, improves flexibility and provides a cleaner foundation for building multiplayer voice experiences. This release refines the way you work with channels and positional audio, updates the SDK core API and lays the groundwork for more advanced routing and spatial setups - all while staying true to ODIN&amp;rsquo;s minimal, low-overhead design.&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-sdk' target='_blank' rel="noopener" class="btn btn-primary">ODIN Voice Core SDK on GitHub&lt;/a>&lt;/p>
&lt;h2 id="shaped-by-developer-feedback">Shaped by Developer Feedback&lt;/h2>
&lt;p>When we launched ODIN, the goal was to make high-quality, low-latency voice chat straightforward to integrate into multiplayer games and applications. Over time, as developers built more complex systems - from proximity chat to dynamic team routing - we noticed recurring patterns and workarounds. Many of you were combining multiple rooms or implementing your own filtering layers just to achieve richer spatial behavior or more granular control.&lt;/p>
&lt;p>With version 2.0, we wanted to address these use cases directly. Instead of adding more surface area or more abstractions, we focused on simplifying the underlying model while making it more powerful. The result is a leaner core SDK that still does the heavy lifting, but gives developers more direct control over routing, proximity and audio behavior.&lt;/p>
&lt;h2 id="evolving-positional-audio-and-routing">Evolving Positional Audio and Routing&lt;/h2>
&lt;p>Previous versions of ODIN already offered a solid foundation for proximity chat and positional audio, enabling developers to build convincing spatial voice experiences out of the box. But as projects grew more ambitious, we saw opportunities to make this system even more flexible and easier to scale. &lt;strong>ODIN Voice 2.0&lt;/strong> builds on that foundation with a new channel mask–based architecture that simplifies routing and unlocks more advanced spatial setups without adding complexity.&lt;/p>
&lt;p>Each room now supports &lt;strong>up to 64 independent audio channels&lt;/strong>, represented by a 64-bit mask. Clients can transmit on multiple channels simultaneously, with each channel carrying its own 3D position and scaling. On the receiving end, peers can adjust their masks to decide exactly which peers and channels they want to hear. By clearing or setting individual bits, you can switch between global, team or proximity modes without spinning up multiple rooms or adding custom filtering layers.&lt;/p>
&lt;p>This new model makes it easy to combine localized spatial audio, team communication and broadcast voice within a single room. It&amp;rsquo;s a more scalable, cleaner approach that adapts well to large multiplayer environments, cooperative gameplay, social spaces and any scenario where audio context matters.&lt;/p>
&lt;h2 id="cleaning-up-the-edges">Cleaning Up the Edges&lt;/h2>
&lt;p>Alongside the new routing model, the SDK&amp;rsquo;s API has been streamlined to make integration more intuitive. Connection pooling is now handled internally - voice rooms automatically share underlying connections, removing the need for manual pool management. Signaling has moved to plain JSON, replacing the previous MessagePack RPC format, which makes it easier to debug and integrate ODIN with different languages, engines and frameworks. Audio encoders and decoders now play a central role in media handling and authentication supports both raw JWTs and JSON-based configuration, giving you more flexibility in how you structure tokens and initial state.&lt;/p>
&lt;h2 id="use-cases-and-integration-scenarios">Use Cases and Integration Scenarios&lt;/h2>
&lt;p>These improvements make it easier to build sophisticated communication systems without extra infrastructure. Competitive games can define separate team, squad and broadcast channels with server-enforced routing. All open world or social experiences can rely on positional audio to scale naturally as player counts increase. Simulation and training environments can define structured radio networks using the same primitives. Because channel masks and positions can be updated at runtime, developers can script complex routing behavior without touching the underlying transport layer.&lt;/p>
&lt;h2 id="a-note-of-thanks">A Note of Thanks&lt;/h2>
&lt;p>This release was guided by feedback from developers, studios and early adopters who built real projects with ODIN. Your experiences with proximity chat, routing and spatial voice at scale played an important role in refining the SDK&amp;rsquo;s direction. We always appreciate your input and support and we&amp;rsquo;re super excited to see what you&amp;rsquo;ll create with these new capabilities.&lt;/p>
&lt;h2 id="looking-ahead">Looking Ahead&lt;/h2>
&lt;p>2.0 is a foundational update. By simplifying the core and expanding routing capabilities, we&amp;rsquo;ve set the stage for new features, deeper integrations and more ambitious use cases. As the SDK evolves, we&amp;rsquo;ll continue refining it with a focus on real-world development needs and long-term stability.&lt;/p>
&lt;p>We&amp;rsquo;re excited to see how developers will use these new tools to push the boundaries of in-game communication. Whether it&amp;rsquo;s large-scale multiplayer worlds, tightly coordinated competitive play or immersive social spaces, ODIN is built to give you the control and performance you need to make voice a seamless part of your experience.&lt;/p>
&lt;p>&lt;em>We&amp;rsquo;re just getting started.&lt;/em>&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-sdk' target='_blank' rel="noopener" class="btn btn-primary">ODIN Voice Core SDK on GitHub&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-release-generic03.jpg"/></item><item><title>How to deploy your Unreal Engine game server to ODIN Fleet</title><link>https://odin.4players.io/blog/how-to-deploy-your-unreal-engine-game-server-to-odin-fleet/</link><pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/how-to-deploy-your-unreal-engine-game-server-to-odin-fleet/</guid><description>&lt;p>Is your multiplayer game project ready to start into the next phase, and now you need to host a couple of game server
instances or more, but you do not want to get caught up in infrastructure problems or intransparent pricing policies
with high operating costs after going into production phase?&lt;/p>
&lt;p>In our &lt;a href="https://docs.4players.io/fleet/guides/unreal-server/">new guide&lt;/a>
, we will show you how
to set up and build your Unreal Engine game server, upload it to a Docker Image Registry and configure it to deploy to
our server hosting platform ODIN Fleet, a comprehensive platform that combines cutting-edge voice communication with
reliable and scalable server hosting solutions.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/fleet/guides/unreal-server/' class="btn btn-primary">Checkout Our Guide&lt;/a>&lt;/p>
&lt;h2 id="easy--step-by-step">Easy &amp;amp; step by step&lt;/h2>
&lt;p>No knowledge about server administration or how to operate servers is necessary. Here is what we cover in our guide:&lt;/p>
&lt;h4 id="building-a-dedicated-server-distributablehttpsdocs4playersiofleetguidesunreal-serverbuilding-a-dedicated-server-distributable">&lt;a href="https://docs.4players.io/fleet/guides/unreal-server/#building-a-dedicated-server-distributable">Building a Dedicated Server Distributable&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Building the Unreal Engine from Source&lt;/li>
&lt;li>Switch Unreal Engine version to Source-Built&lt;/li>
&lt;li>Configuring the Project for Dedicated Server Builds&lt;/li>
&lt;li>For Windows: Installing the Linux Cross-Compile Chain&lt;/li>
&lt;li>(Cross-)Compile the Dedicated Server for Linux&lt;/li>
&lt;/ul>
&lt;h4 id="creating-a-docker-imagehttpsdocs4playersiofleetguidesunreal-servercreating-a-docker-image">&lt;a href="https://docs.4players.io/fleet/guides/unreal-server/#creating-a-docker-image">Creating a Docker Image&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Install Docker Desktop&lt;/li>
&lt;li>For Windows: Enable WSL (Windows Subsystem for Linux) or Hyper-V&lt;/li>
&lt;li>Create a Dockerfile&lt;/li>
&lt;li>Build the Docker Image&lt;/li>
&lt;li>Test Locally (Optional)&lt;/li>
&lt;li>Push to a Container Registry&lt;/li>
&lt;/ul>
&lt;h4 id="deploy-a-server-with-your-gamehttpsdocs4playersiofleetguidesunreal-serverdeploy-a-server-with-your-game">&lt;a href="https://docs.4players.io/fleet/guides/unreal-server/#deploy-a-server-with-your-game">Deploy a Server with your Game&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Create a Fleet Project on Odin&lt;/li>
&lt;li>Reference your Container Registry&lt;/li>
&lt;li>Create an Image Reference&lt;/li>
&lt;li>Create a Server Config&lt;/li>
&lt;li>Server Deployment&lt;/li>
&lt;/ul>
&lt;h4 id="connecting-to-your-serverhttpsdocs4playersiofleetguidesunreal-serverconnecting-to-your-server">&lt;a href="https://docs.4players.io/fleet/guides/unreal-server/#connecting-to-your-server">Connecting to your Server&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Testing with Command Line Options&lt;/li>
&lt;li>Creating an HTTP Request in Unreal&lt;/li>
&lt;li>Connect to a Server via Blueprint&lt;/li>
&lt;/ul>
&lt;h2 id="need-a-shortcut">Need a Shortcut?&lt;/h2>
&lt;p>Checkout how we deploy our &lt;a href="https://docs.4players.io/voice/unreal/samples/unreal-demo/">Unreal Tech Demo&lt;/a>
for
&lt;a href="https://odin.4players.io/voice-chat/">ODIN Voice&lt;/a>
to our own service and run a dedicated game server on ODIN Fleet:
&lt;a href="https://docs.4players.io/voice/unreal/samples/unreal-demo/#odin-fleet-online-subsystem">ODIN Fleet Online Subsystem&lt;/a>
&lt;/p>
&lt;h2 id="not-using-unreal-engine">Not using Unreal Engine?&lt;/h2>
&lt;p>The parts in the guide related to ODIN Fleet and its web app dashboard are pretty much the same, e.g. for a Unity game
server. If you need help setting up the game server with your engine or networking framework,
&lt;a href="https://odin.4players.io/company/contact_us/" title="https\://odin.4players.io/company/contact_us/">please contact us&lt;/a>
to see
how ODIN can support your game development journey.&lt;/p>
&lt;p>You can also visit our &lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Discord community&lt;/a>
server and talk to other developers already using ODIN.&lt;/p>
&lt;h2 id="what-is-odin-fleet">What is ODIN Fleet?&lt;/h2>
&lt;p>&lt;strong>&lt;a href="https://odin.4players.io/fleet/" title="https\://odin.4players.io/fleet/">ODIN Fleet&lt;/a>
&lt;/strong> is at the heart of our B2B offering. We view it as a partner designed to make the whole process of deploying and managing game servers on a global scale much easier. So, whatever you&amp;rsquo;re doing - whether you&amp;rsquo;re setting up stateful servers for those really immersive, world-building titles or you&amp;rsquo;re handling stateless deployments for match-based games - ODIN Fleet has got you covered, thanks to decades of hosting experience through our B2C service 4Netplayers.&lt;/p>
&lt;h2 id="empowering-the-next-generation-of-game-experiences">Empowering the Next Generation of Game Experiences&lt;/h2>
&lt;p>ODIN is an exciting step forward in the way game servers and communications are managed. Hey, we totally get it: your backend needs to scale globally, and you need to do it in a way that&amp;rsquo;s &lt;a href="https://odin.4players.io/pricing/" title="https\://odin.4players.io/pricing/">transparent and cost-effective&lt;/a>
. Well, let us help you!&lt;/p>
&lt;p>Paired with the state-of-the-art ODIN Voice Chat SDK, this means your players can enjoy lag-free, real-time interactions that bring every match, mission, or multiplayer session to life.&lt;/p>
&lt;p>We provide all the infrastructure, reliability, and support you need to focus on creative innovation rather than technical constraints. You&amp;rsquo;re either a seasoned game developer or you&amp;rsquo;re just starting out? Either way, it&amp;rsquo;s time to let your game&amp;rsquo;s potential speak for itself and we&amp;rsquo;ll be there to manage the rest!&lt;/p>
&lt;p>Discover more about our services, join our growing community, or schedule a &lt;a href="https://odin.4players.io/company/contact_us/" title="https\://odin.4players.io/company/contact_us/">consultation&lt;/a>
to see how ODIN can support your game development journey.&lt;/p>
&lt;p>&lt;em>Ready to explore more? Dive into our detailed &lt;a href="https://docs.4players.io/fleet/" title="https\://docs.4players.io/fleet/">developer documentation&lt;/a>
or check out our &lt;a href="https://odin.4players.io/use-cases/" title="https\://odin.4players.io/use-cases/">use cases&lt;/a>
&lt;/em>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal_game_server_deployment_to_odin_fleet.jpg"/></item><item><title>ODIN Voice from UE4.26 up to UE5.6</title><link>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.11.2-with-ue5.6-compatability/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.11.2-with-ue5.6-compatability/</guid><description>&lt;h2 id="continuous-development">Continuous development&lt;/h2>
&lt;p>Over the past several versions, the ODIN Voice Chat SDK has seen a wave of improvements focused on performance,
flexibility, and deeper Unreal Engine integration. From enhanced audio quality and loopback support to robust device
handling and expanded compatibility with UE 5.5, each update has refined the developer and end-user
experience.
Whether you&amp;rsquo;re building immersive in-game communication or a scalable voice solution for simulations or virtual worlds,
these updates bring increased control, reliability, and quality to your audio pipeline. Let’s walk through what’s new
and why it matters.&lt;/p>
&lt;h2 id="unreal-engine-56-and-odin-voice-v1112">Unreal Engine 5.6 and ODIN Voice v1.11.2&lt;/h2>
&lt;p>We improved performance by pushing audio data now in a separate audio push thread. After updating the Unreal plugin to
use the latest native Odin version, we also refactored internal subsystems and increased stability when using APMs
(Audio Processing Modules) for reported edge cases. Also, several bug fixes were incorporated for situations with
multiple audio captures, activating the pause function or using Apple&amp;rsquo;s AirPods on Mac platform.&lt;/p>
&lt;p>Many developers might be interested to know that we are now officially supporting &lt;strong>Unreal Engine 5.6&lt;/strong>.
You can download our latest version &lt;em>v1.11.2&lt;/em> of the ODIN Voice Unreal plugin from
&lt;a href="https://www.fab.com/listings/79d0a208-78e8-4bd7-9214-36f6cc190da2">fab&lt;/a>
or from
&lt;a href="https://github.com/4Players/odin-sdk-unreal/releases">GitHub&lt;/a>
.&lt;/p>
&lt;h2 id="what-is-odin-">What is ODIN !?&lt;/h2>
&lt;p>For more details on ODIN and how it powers real-time, low-latency voice communication across platforms, visit the
official &lt;a href="https://odin.4players.io/voice-chat/">ODIN Voice Chat product page&lt;/a>
. There you&amp;rsquo;ll find in-depth documentation,
platform integration guides, and everything you need to get started — whether you&amp;rsquo;re working in Unreal, Unity, web, or
native environments. Dive in and discover how ODIN can bring crystal-clear, scalable voice to your project.&lt;/p>
&lt;h2 id="overview-of-the-last-major-version-changes">Overview of the last major version changes&lt;/h2>
&lt;h3 id="versions-1100-to-1102">Versions 1.10.0 to 1.10.2&lt;/h3>
&lt;p>&amp;hellip; focused on improved audio stream handling, cleaner device management, and general stability
updates. The gain control system was simplified, and internal components were refined for better performance and
compatibility.&lt;/p>
&lt;h3 id="versions-190-to-193">Versions 1.9.0 to 1.9.3&lt;/h3>
&lt;p>&amp;hellip; introduced enhanced audio device control, new loopback playback capabilities, and better runtime
configurability. Stability and safety were improved with stricter thread management, while new interface support and
settings exposed more control to developers.&lt;/p>
&lt;h3 id="versions-183-to-1815">Versions 1.8.3 to 1.8.15&lt;/h3>
&lt;p>&amp;hellip; focused on audio quality improvements, expanded Unreal Engine support, and greater flexibility
in audio input. Stability was enhanced across platforms, with better error handling, improved echo cancellation, and new
utility features. Device management and async behavior were also made more robust.&lt;/p>
&lt;h2 id="complete-changes-in-detail-going-back-till-v184">Complete changes in detail going back till v1.8.4&lt;/h2>
&lt;h3 id="v1112-latest">v1.11.2 Latest&lt;/h3>
&lt;h4 id="fixes">Fixes&lt;/h4>
&lt;ul>
&lt;li>Fixed an issue with capturing Audio from Air Pods on Mac&lt;/li>
&lt;/ul>
&lt;h3 id="v1111">v1.11.1&lt;/h3>
&lt;h4 id="fixes-1">Fixes&lt;/h4>
&lt;ul>
&lt;li>Fixed an issue when using multiple UAudioCapture objects at the same time&lt;/li>
&lt;li>Corrected SetIsPaused logic in Audio Capture&lt;/li>
&lt;/ul>
&lt;h3 id="v1110">v1.11.0&lt;/h3>
&lt;h4 id="changes--improvements">Changes / Improvements&lt;/h4>
&lt;ul>
&lt;li>Pushing audio data is now performed in a seperate audio push thread&lt;/li>
&lt;li>Renamed internally used subsystems to better reflect functionality&lt;/li>
&lt;li>Improved submixer shutdown for echo cancellation. This should handle rare crashes during development.&lt;/li>
&lt;li>Updated Odin Native version&lt;/li>
&lt;/ul>
&lt;h3 id="v1102">v1.10.2&lt;/h3>
&lt;h4 id="changes">Changes&lt;/h4>
&lt;ul>
&lt;li>Fixed issue with Unreal Audio Capture Implementation not returning Device Ids on some Devices and UE4.X, aborting automatic device selection&lt;/li>
&lt;li>It is now possible to connect multiple Odin Synth Components to the same Playback Media Stream, without resulting in undersampling&lt;/li>
&lt;li>Improved Submix Listener cleanup&lt;/li>
&lt;li>Changed log verbosity where needed&lt;/li>
&lt;/ul>
&lt;h3 id="v1100">v1.10.0&lt;/h3>
&lt;h5 id="changes-1">Changes&lt;/h5>
&lt;ul>
&lt;li>Gain Controller is now controlled using an enum. Can now choose between &amp;ldquo;None&amp;rdquo;, &amp;ldquo;V1&amp;rdquo; and &amp;ldquo;V2&amp;rdquo;.&lt;/li>
&lt;li>Removed Pre Amplifier APM Setting&lt;/li>
&lt;li>Updated native Odin binaries&lt;/li>
&lt;li>Updated pointer references in SynthComponent&lt;/li>
&lt;li>Updated cleanup procedure in OdinRoom&lt;/li>
&lt;/ul>
&lt;h3 id="v193">v1.9.3&lt;/h3>
&lt;h4 id="changes-2">Changes&lt;/h4>
&lt;ul>
&lt;li>Can now set the Token Life Time when generating room tokens&lt;/li>
&lt;li>Updated comments of apm config structure&lt;/li>
&lt;li>Exposed current selected device and default device info in OdinAudioCapture&lt;/li>
&lt;li>Exposed StartCapturing success result to Blueprints in OdinAudioCapture&lt;/li>
&lt;li>Fixed issue with platform definitions in v1.9.2&lt;/li>
&lt;/ul>
&lt;h3 id="v191">v1.9.1&lt;/h3>
&lt;h4 id="added">Added&lt;/h4>
&lt;ul>
&lt;li>Added new Odin Audio Generator Loopback Component, which allows loopback of generated audio, such as voice capture, in the game.&lt;/li>
&lt;li>Can now switch to the System&amp;rsquo;s Default Capture Device by calling ChangeToDefaultCaptureDevice on the OdinAudioCapture object.&lt;/li>
&lt;li>Added possibility to change Global Min Pitch and Global Max Pitch values for the Loopback playback to resample mismatch between capture and playback correctly. Use the config file in Odin/Config/Odin.ini to change the values.&lt;/li>
&lt;/ul>
&lt;h4 id="improvements">Improvements&lt;/h4>
&lt;ul>
&lt;li>Capture Device Disconnect Recognition will now also notice if the format of a capture device has been changed and automatically reconnect&lt;/li>
&lt;/ul>
&lt;h3 id="v190">v1.9.0&lt;/h3>
&lt;h4 id="added-1">Added&lt;/h4>
&lt;ul>
&lt;li>Added IOdinAudioControl and implemented Interface in OdinAudioCapture and OdinCaptureMedia. The interface defines the Get/SetIsMuted and Get/SetVolumeMultiplier functions for both classes. Interface is also used in the PixelStreamingGenerator implementation.&lt;/li>
&lt;/ul>
&lt;h4 id="changes--improvements-1">Changes / Improvements&lt;/h4>
&lt;ul>
&lt;li>Deprecated Async GetCaptureDevices and ChangeCaptureDevice functions due to non-thread-safe code in the Unreal Audio Capture implementation&lt;/li>
&lt;li>Added checks to ensure non-thread-safe functions can only be called on Game Thread&lt;/li>
&lt;li>Deprecated Get/SetIsPaused functions of OdinAudioCapture&lt;/li>
&lt;/ul>
&lt;h3 id="1815">1.8.15&lt;/h3>
&lt;h4 id="changes-3">Changes&lt;/h4>
&lt;ul>
&lt;li>Updated Odin initialization settings to use 48khz stereo instead of 48khz mono. This should solve issues with sound quality on some devices.&lt;/li>
&lt;li>Audio Capture Mono Mixing is now disabled by default&lt;/li>
&lt;/ul>
&lt;h3 id="1814">1.8.14&lt;/h3>
&lt;h4 id="added-2">Added&lt;/h4>
&lt;ul>
&lt;li>Now compatible with UE 5.5&lt;/li>
&lt;/ul>
&lt;h4 id="changed">Changed&lt;/h4>
&lt;ul>
&lt;li>Improved error handling in OnGenerateAudio&lt;/li>
&lt;li>Fixed issue with compilation on Mac for Unreal Versions 5.1 and below&lt;/li>
&lt;/ul>
&lt;h3 id="1813">1.8.13&lt;/h3>
&lt;h4 id="added-3">Added&lt;/h4>
&lt;ul>
&lt;li>Odin Audio Capture: Can now deactivate automatic device disconnect recognition (i.e. to recognize when a player removes a USB microphone). Could be relevant on mac, as moving an application window on Mac can lead to very high frame time spikes, making a false positive more likely&lt;/li>
&lt;li>Odin Synth Component: Added logging to the GenerateAudio code, if odin_audio_read_data doesn&amp;rsquo;t work. Requires Log Verbosity Level &amp;ldquo;Verbose&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;h4 id="changes-4">Changes&lt;/h4>
&lt;ul>
&lt;li>Will now use default Odin initialization, making initialization independent of whether Unreal Audio Engine is enabled or not&lt;/li>
&lt;/ul>
&lt;h4 id="fixes-2">Fixes&lt;/h4>
&lt;ul>
&lt;li>Odin Audio Capture: increased time before a device disconnect will be recognized, this will help avoiding false positives.&lt;/li>
&lt;li>Odin Capture Media: Fixed an issue where the media was not correctly reset, if the channel count changed. Also avoids calling the reset stream function multiple times when detecting a situation where we have to reset&lt;/li>
&lt;/ul>
&lt;h3 id="1812">1.8.12&lt;/h3>
&lt;h4 id="improvements--bugfixes">Improvements / Bugfixes&lt;/h4>
&lt;ul>
&lt;li>Updated Destroy Room Handle logic to avoid logging errors when provided with invalid Room Handles. This will also remove Error Logs during the Packaging Process.&lt;/li>
&lt;li>Echo Cancellation will now use the correct Audio Device for Submix Listening. This will fix an issue with Echo Cancellation not being active after changing APM Settings or in certain scenarios after loading a new level.&lt;/li>
&lt;li>Generally improved error handling and error logging throughout the plugin&lt;/li>
&lt;/ul>
&lt;h4 id="changes-5">Changes&lt;/h4>
&lt;ul>
&lt;li>Can now use UAudioGenerator parent class for generating audio, instead of having to use UAudioCapture. This allows developers more flexibility to i.e. use soundfiles as input to an Odin audio capture stream&lt;/li>
&lt;li>Can now enable or disable mixing multiple channels into one mono channel on UOdinCaptureMedias before sending audio data to Odin.&lt;/li>
&lt;li>Echo Cancellation: APM Stream Delay is now initialized to 200ms when no custom value was set&lt;/li>
&lt;li>Added missing documentation to public api&lt;/li>
&lt;/ul>
&lt;h3 id="1811">1.8.11&lt;/h3>
&lt;h4 id="fixed">Fixed&lt;/h4>
&lt;ul>
&lt;li>Fixed issue occurring during User Data decoding in UE4.27&lt;/li>
&lt;/ul>
&lt;h4 id="added-4">Added&lt;/h4>
&lt;ul>
&lt;li>Added convenience function to access Playback Media stream generating data on an Odin Synth Component&lt;/li>
&lt;/ul>
&lt;h3 id="1810">1.8.10&lt;/h3>
&lt;h4 id="improvements--bugfixes-1">Improvements / Bugfixes&lt;/h4>
&lt;ul>
&lt;li>Improved Error Handling&lt;/li>
&lt;li>Improved Error Logs and Feedback&lt;/li>
&lt;li>Add Media is now performed on background thread&lt;/li>
&lt;li>Fixed String Casting and conversion&lt;/li>
&lt;/ul>
&lt;h3 id="189">1.8.9&lt;/h3>
&lt;h4 id="improvements--bugfixes-2">Improvements / Bugfixes&lt;/h4>
&lt;ul>
&lt;li>Updated Odin Synth Component to restart automatically after a Seamless Server Travel&lt;/li>
&lt;li>Fixed and improved error reporting of the Remove Media from Room Async function&lt;/li>
&lt;/ul>
&lt;h3 id="188">1.8.8&lt;/h3>
&lt;h4 id="improvements--bugfixes-3">Improvements / Bugfixes&lt;/h4>
&lt;ul>
&lt;li>Now allows disconnecting events to be fired, when manually calling destroy local room handle&lt;/li>
&lt;li>OdinRoom now recognizes reconnects after loosing connection temporarily and automatically sets up Capture Stream again.&lt;/li>
&lt;li>Fixed broken blueprint nodes issue, due to late loading of the plugin&lt;/li>
&lt;/ul>
&lt;h4 id="new-features">New Features&lt;/h4>
&lt;ul>
&lt;li>Added newer Room State Changed Event to also broadcast reason for disconnect. Old Event is marked as deprecated.&lt;/li>
&lt;li>Added IsConnected Function to Odin Room object&lt;/li>
&lt;/ul>
&lt;h3 id="187">1.8.7&lt;/h3>
&lt;h4 id="new-features-1">New Features&lt;/h4>
&lt;ul>
&lt;li>Added support for Unreal Engine 5.4 releases&lt;/li>
&lt;/ul>
&lt;h4 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h4>
&lt;ul>
&lt;li>Changed access to UOdinRoom references to avoid potential crashes with async event handling&lt;/li>
&lt;/ul>
&lt;h3 id="186">1.8.6&lt;/h3>
&lt;h4 id="bugfixes--improvements-1">Bugfixes / Improvements&lt;/h4>
&lt;ul>
&lt;li>Added world validity checks for async events synchronizing to game&lt;/li>
&lt;/ul>
&lt;h3 id="v185">v1.8.5&lt;/h3>
&lt;h4 id="general">General&lt;/h4>
&lt;ul>
&lt;li>Core SDK has been updated to version 1.6.5 (details)&lt;/li>
&lt;/ul>
&lt;h4 id="bugfixes--improvements-2">Bugfixes / Improvements&lt;/h4>
&lt;ul>
&lt;li>Fixed build issues on iOS with Unreal Engine 5.3&lt;/li>
&lt;/ul>
&lt;h3 id="184">1.8.4&lt;/h3>
&lt;h4 id="bugfixes--improvements-3">Bugfixes / Improvements&lt;/h4>
&lt;ul>
&lt;li>Fixed an issue where echo cancellation did not work on iOS and Android&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.11.2-ue5.6.jpg"/></item><item><title>FMOD and ODIN: using voice chat in a state-of-the-art audio engine</title><link>https://odin.4players.io/blog/fmod-odin-unreal-unity/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/fmod-odin-unreal-unity/</guid><description>&lt;h2 id="fmod-and-odin-voice">FMOD and ODIN Voice&lt;/h2>
&lt;p>Are you using Unreal or Unity with a state-of-the-art audio engine like FMOD and wondering if it works together with
our proximity voice chat ODIN? Yes, it does!
We offer a helper plugin and extensive guides to set everything up for using our voice chat together with FMOD - even letting
you stay independent of the built-in audio engine from Unreal or Unity.
Using the DSP plugin approach you can benefit from low latency and extended mixing flexibility.
This way you can take advantage of the high quality built-in features from FMOD and apply them to your voice chat signal,
e.g. spatial audio, sound occlusion or environmental effects.&lt;/p>
&lt;p>Read our &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-unreal/">Unreal Guide&lt;/a>
and the optional &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-adapter-unreal/">Unreal Adapter Plugin&lt;/a>
or our &lt;a href="https://docs.4players.io/voice/unity/guides/odin-fmod/">Unity Guide&lt;/a>
:&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/guides/odin-fmod-unreal/' class="btn btn-primary">FMOD Unreal Guide&lt;/a>&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unity/guides/odin-fmod/' class="btn btn-primary">FMOD Unity Guide&lt;/a>&lt;/p>
&lt;p>Check out our &lt;a href="https://github.com/4Players/odin-unreal-fmod/">Unreal Sample Project&lt;/a>
or the &lt;a href="https://github.com/4Players/odin-unity-fmod/">Unity Sample Project&lt;/a>
:&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-unreal-fmod/' class="btn btn-primary">FMOD Unreal Sample Project&lt;/a>&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-unity-fmod/' class="btn btn-primary">FMOD Unity Sample Project&lt;/a>&lt;/p>
&lt;h3 id="what-is-odin-voice">What is ODIN Voice?&lt;/h3>
&lt;p>If you are new to ODIN, read all about our flexible and dev-friendly voice chat solution here: &lt;a href="https://odin.4players.io/voice-chat/">https://odin.4players.io/voice-chat/&lt;/a>
&lt;/p>
&lt;p>If you want to know how to integrate ODIN Voice into your project, read this &amp;raquo;&lt;strong>&lt;a href="https://docs.4players.io/voice/unreal/guides/">Unreal Starter Guide&lt;/a>
&lt;/strong>&amp;laquo; or watch our &amp;raquo;&lt;strong>&lt;a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Unreal Video Tutorial Series&lt;/a>
&lt;/strong>&amp;laquo;
or this &amp;raquo;&lt;strong>&lt;a href="https://docs.4players.io/voice/unity/guides/">Unity Starter Guide&lt;/a>
&lt;/strong>&amp;laquo; or watch our &amp;raquo;&lt;strong>&lt;a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V&amp;amp;pp=gAQB">Unity Video Tutorial Series&lt;/a>
&lt;/strong>&amp;laquo;&lt;/p>
&lt;hr>
&lt;p>Using Wwise? We got you covered with this &amp;raquo;&lt;strong>&lt;a href="https://docs.4players.io/voice/unreal/guides/odin-wwise/">Guide for Wwise&lt;/a>
&lt;/strong>&amp;laquo;&lt;/p>
&lt;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 &lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Discord&lt;/a>
!&lt;/p>
&lt;p>&lt;a href='https://4np.de/discord' target='_blank' rel="noopener" class="btn btn-primary">Discord Community&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/fmod_odin_unreal_unity.png"/></item><item><title>The Engine Behind the Action: What is ODIN Fleet?</title><link>https://odin.4players.io/blog/the-engine-behind-the-action-what-is-odin-fleet/</link><pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/the-engine-behind-the-action-what-is-odin-fleet/</guid><description>&lt;p>Here at 4Players, we think that game development should be all about creativity and building amazing gaming experiences, not about getting caught up in infrastructure problems. That&amp;rsquo;s why we built ODIN, a comprehensive platform that combines cutting-edge voice communication with reliable and scalable server hosting solutions.&lt;/p>
&lt;h2 id="a-platform-designed-by-developers-for-developers">A Platform Designed by Developers, for Developers&lt;/h2>
&lt;p>&lt;strong>&lt;a href="https://odin.4players.io/fleet/" title="https\://odin.4players.io/fleet/">ODIN Fleet&lt;/a>
&lt;/strong> is at the heart of our B2B offering. We view it as a partner designed to make the whole process of deploying and managing game servers on a global scale much easier. So, whatever you&amp;rsquo;re doing - whether you&amp;rsquo;re setting up stateful servers for those really immersive, world-building titles or you&amp;rsquo;re handling stateless deployments for match-based games - ODIN Fleet has got you covered, thanks to decades of hosting experience through our B2C service 4Netplayers.&lt;/p>
&lt;h3 id="key-benefits-at-a-glance">Key Benefits at a Glance&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>No More Dev-Ops Worries:&lt;/strong> ODIN Fleet takes care of the heavy lifting. With a focus on service and an easy-to-use dashboard, you can leave the day-to-day server management to us and get on with what matters most: your game.&lt;/li>
&lt;li>&lt;strong>Rapid Scaling:&lt;/strong> Need to change your server capacity at short notice? You can easily scale up or down using our API integrations or manual intervention, making sure your game stays responsive during busy times without costing you more than you need to.&lt;/li>
&lt;li>&lt;strong>Global Reach &amp;amp; Transparent Pricing:&lt;/strong> ODIN Fleet has a global network of data centres, so you can deploy your servers wherever your players are. And our pricing model is straightforward: no extra fees for IPs, traffic, or storage. This way, you can keep a tight control on costs while making sure you&amp;rsquo;re always performing at your best.&lt;/li>
&lt;li>&lt;strong>Streamlined Integration:&lt;/strong> Whether you provide your custom server binaries or use our Docker-based workflows, ODIN Fleet makes integration a breeze. We&amp;rsquo;ve got you covered, from setting things up to fully automated CI/CD pipelines. Our process is designed to be efficient and reliable.&lt;/li>
&lt;/ul>
&lt;h2 id="how-odin-fleet-works-from-concept-to-launch">How ODIN Fleet Works: From Concept to Launch&lt;/h2>
&lt;p>The beauty of ODIN Fleet lies in its simplicity and flexibility:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Understanding Your Needs:&lt;/strong> We&amp;rsquo;ll start by having a chat to find out what your project needs and what your performance targets are. This makes sure that the final setup matches your game&amp;rsquo;s architectural needs perfectly.&lt;/li>
&lt;li>&lt;strong>Bringing Your Binaries &amp;amp; Configurations:&lt;/strong> No matter if you&amp;rsquo;re using your own binary or the images we provide, ODIN Fleet works perfectly with your development environment. Our team is here to help you with everything from setting up Steamworks integration to creating Dockerfiles.&lt;/li>
&lt;li>&lt;strong>Comprehensive Setup and Deployment:&lt;/strong> Once you&amp;rsquo;ve got your configurations sorted, the platform does the rest - like setting up servers all over the world, installing cost control tools, managing storage, and providing logs and stats as they happen.&lt;/li>
&lt;li>&lt;strong>Empowerment Through Control:&lt;/strong> At the end of the day, you decide how involved you want to be. You&amp;rsquo;ll have full control with our transparent dashboard, or we can take care of everything with a service contract that keeps your operations running smoothly when you need it most.&lt;/li>
&lt;/ol>
&lt;p>This end-to-end approach makes server management a lot less complicated, giving you more time and resources to focus on your creative vision.&lt;/p>
&lt;p>We know how important it is for developers to be able to create experiences that are as interconnected as they are innovative. That&amp;rsquo;s why ODIN Fleet works seamlessly with our ODIN Voice Chat SDK, delivering high-qualityvoice communication to your project.&lt;/p>
&lt;h2 id="empowering-the-next-generation-of-game-experiences">Empowering the Next Generation of Game Experiences&lt;/h2>
&lt;p>ODIN is an exciting step forward in the way game servers and communications are managed. Hey, we totally get it: your backend needs to scale globally, and you need to do it in a way that&amp;rsquo;s &lt;a href="https://odin.4players.io/pricing/" title="https\://odin.4players.io/pricing/">transparent and cost-effective&lt;/a>
. Well, let us help you!&lt;/p>
&lt;p>Paired with the state-of-the-art ODIN Voice Chat SDK, this means your players can enjoy lag-free, real-time interactions that bring every match, mission, or multiplayer session to life.&lt;/p>
&lt;p>We provide all the infrastructure, reliability, and support you need to focus on creative innovation rather than technical constraints. You&amp;rsquo;re either a seasoned game developer or you&amp;rsquo;re just starting out? Either way, it&amp;rsquo;s time to let your game&amp;rsquo;s potential speak for itself and we&amp;rsquo;ll be there to manage the rest!&lt;/p>
&lt;p>Discover more about our services, join our growing community, or schedule a &lt;a href="https://odin.4players.io/company/contact_us/" title="https\://odin.4players.io/company/contact_us/">consultation&lt;/a>
to see how ODIN can support your game development journey.&lt;/p>
&lt;p>&lt;em>Ready to explore more? Dive into our detailed &lt;a href="https://docs.4players.io/" title="https\://docs.4players.io/">developer documentation&lt;/a>
or check out our &lt;a href="https://odin.4players.io/use-cases/" title="https\://odin.4players.io/use-cases/">use cases&lt;/a>
&lt;/em>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/uploads/odinfleet.png"/></item><item><title>What’s Next for ODIN Voice</title><link>https://odin.4players.io/blog/whats-next-for-odin-voice/</link><pubDate>Fri, 16 May 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/whats-next-for-odin-voice/</guid><description>&lt;p>We’d like to kick things off by expressing our deepest gratitude to everyone in the ODIN Voice community - our early adopters, integration partners and beta testers - whose feedback and enthusiasm have driven us to push the boundaries of real-time voice chat SDKs. Our community has gone above and beyond, creating integrations for popular game engines like &lt;a href="https://github.com/corotdev/godot-odin">Godot&lt;/a>
alongside our official Unreal and Unity Engine plugins. These contributions demonstrate the power of collaboration and extend ODIN&amp;rsquo;s reach into even more development environments.&lt;/p>
&lt;p>We’re also thrilled to celebrate a major milestone: &lt;a href="https://ghostsoftabor.com">Ghosts of Tabor&lt;/a>
, the award-winning VR title from &lt;a href="https://combatwaffle.com">Combat Waffle Studios&lt;/a>
, was the first game to integrate ODIN Voice on PC and Meta Quest. On May 7th, this pioneering title has launched on &lt;strong>PlayStation VR2&lt;/strong> with ODIN Voice seamlessly integrated, marking the first &lt;strong>PS VR2&lt;/strong> release featuring our technology and highlighting Combat Waffle Studios&amp;rsquo; integral role in our journey from day one.&lt;/p>
&lt;div style="position: relative; padding-bottom: 58%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube-nocookie.com/embed/Q4QDwFr5AYw?rel=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;h2 id="building-toward-odin-voice-20">Building Toward ODIN Voice 2.0&lt;/h2>
&lt;p>Today, we&amp;rsquo;re proud to announce the availability of an updated ODIN Voice Core SDK - version &lt;strong>1.8&lt;/strong>, an intermediate milestone on the road to &lt;strong>ODIN Voice 2.0&lt;/strong>. With &lt;strong>1.8&lt;/strong>, you get early access to three cornerstone features that not only solve long-standing pain points but also pave the way for the even richer, more powerful &lt;strong>2.0&lt;/strong> experience that’s coming soon.&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-sdk' target='_blank' rel="noopener" class="btn btn-primary">ODIN Voice Core SDK on GitHub&lt;/a>&lt;/p>
&lt;p>Let’s dive into the technical details:&lt;/p>
&lt;h3 id="a-new-foundation-with-connection-pooling">A New Foundation with Connection Pooling&lt;/h3>
&lt;p>With &lt;strong>1.8&lt;/strong>, we&amp;rsquo;re introducing transparent pooling of connections. A &lt;strong>Connection Pool&lt;/strong> in ODIN is a core component that manages all communication between your application and the ODIN server infrastructure. Think of it as your networking command center - handling connections, routing voice data, dispatching control messages and joining multiple rooms - all in a thread-safe, efficient manner.&lt;/p>
&lt;p>In practice, this means you can:&lt;/p>
&lt;ul>
&lt;li>Share connections across multiple rooms, reducing overhead and complexity.&lt;/li>
&lt;li>Receive voice data and control messages through centralized callbacks, which makes it easier to scale and manage your app&amp;rsquo;s audio logic.&lt;/li>
&lt;li>Coordinate shutdowns safely, so you don’t have to micromanage cleanup routines.&lt;/li>
&lt;/ul>
&lt;p>Here’s how you’d typically initialize a new &lt;strong>Connection Pool&lt;/strong>:&lt;/p>
&lt;pre>&lt;code class="language-c">OdinConnectionPool* pool;
OdinConnectionPoolSettings settings = {
.on_datagram = &amp;amp;on_datagram, // Handles voice packets
.on_rpc = &amp;amp;on_rpc, // Handles control messages
.user_data = &amp;amp;state // Passes context to callbacks
};
odin_connection_pool_create(settings, &amp;amp;pool);
&lt;/code>&lt;/pre>
&lt;p>The &lt;code>on_datagram&lt;/code> and &lt;code>on_rpc&lt;/code> callbacks are your hooks into the ODIN world. Voice data packets and control messages (such as room events) are pushed here, and from there, you route them to the appropriate logic - like feeding packets into audio decoders or parsing incoming RPC messages.&lt;/p>
&lt;p>Once the pool is initialized, you can create and join a room like so:&lt;/p>
&lt;pre>&lt;code class="language-c">OdinRoom* room;
odin_room_create(pool, &amp;quot;&amp;lt;SERVER_URL&amp;gt;&amp;quot;, &amp;quot;&amp;lt;TOKEN&amp;gt;&amp;quot;, &amp;amp;room);
&lt;/code>&lt;/pre>
&lt;p>This immediately begins the &lt;strong>asynchronous&lt;/strong> process of joining the specified room via the provided token and server URI. Under the hood, ODIN automatically handles authentication, connection establishment, and resource synchronization across rooms that share the same pool.&lt;/p>
&lt;h3 id="customizable-audio-pipelines-and-effects">Customizable Audio Pipelines and Effects&lt;/h3>
&lt;p>In ODIN Voice, all audio capture and playback is handled by dedicated encoders and decoders, each responsible for transforming raw PCM data to and from compressed network datagrams. These components seamlessly integrate with ODIN&amp;rsquo;s runtime and automatically manage tasks like sample rate conversion and stream routing. But the real power lies in the audio pipeline that sits inside every encoder and decoder.&lt;/p>
&lt;p>An audio pipeline is a dynamic, modular chain of effects that process your audio in real time. Whether it’s suppressing background noise, detecting voice activity or fine-tuning gain levels, each effect in the pipeline contributes to delivering clean, intelligible voice communication - regardless of device or environment.&lt;/p>
&lt;p>Up until now, ODIN has shipped with powerful built-in filters like:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Voice Activity Detection (VAD)&lt;/strong> to intelligently decide when a user is speaking&lt;/li>
&lt;li>&lt;strong>Audio Processing Module (APM)&lt;/strong> to apply enhancements like echo cancellation, noise suppression and automatic gain control&lt;/li>
&lt;/ul>
&lt;p>These features continue to improve with each release. But with version &lt;strong>1.8&lt;/strong>, we’re giving developers even more flexibility with &lt;strong>Custom Effects&lt;/strong> - a new addition in ODIN Voice - to open the door to entirely new audio processing use cases.&lt;/p>
&lt;p>You can now inject your own signal processing logic directly into the ODIN audio pipeline. These callbacks run inline with the sample stream, allowing you to modify, analyze or monitor audio in real time - before it&amp;rsquo;s encoded for transmission or after it&amp;rsquo;s decoded for playback.&lt;/p>
&lt;p>Here’s what it looks like at a high level:&lt;/p>
&lt;pre>&lt;code class="language-c">void my_effect_callback(float* samples, uint32_t sample_count, bool* is_silent, const void* user_data) {
// Custom DSP logic here
}
uint32_t effect_id;
odin_pipeline_insert_custom_effect(pipeline, index, my_effect_callback, user_data, &amp;amp;effect_id);
&lt;/code>&lt;/pre>
&lt;p>This gives you total control over the audio stream - from building your own noise detection heuristics to logging silence thresholds or even experimenting with AI-based filters. Better yet, the effect chain is fully thread-safe and can be modified at runtime: insert, reorder or remove effects on the fly.&lt;/p>
&lt;p>Whether you&amp;rsquo;re prototyping experimental audio features or integrating with an in-house DSP engine, custom effects make ODIN more extensible than ever before.&lt;/p>
&lt;h3 id="built-in-privacy-without-server-trust">Built-In Privacy Without Server Trust&lt;/h3>
&lt;p>With version &lt;strong>1.8&lt;/strong>, ODIN Voice takes a major step forward in security and privacy by introducing native &lt;strong>End-to-End Encryption (E2EE)&lt;/strong> through a pluggable &lt;code>OdinCipher&lt;/code> module.&lt;/p>
&lt;p>This means your application can now encrypt all voice data, signaling messages and peer metadata with a shared room password - ensuring that no one but your users can decrypt the content, not even 4Players&amp;rsquo; servers.&lt;/p>
&lt;p>Here’s how it works:&lt;/p>
&lt;pre>&lt;code class="language-c">OdinCipher* cipher = odin_crypto_create(ODIN_CRYPTO_VERSION);
odin_crypto_set_password(cipher, (const uint8_t*)&amp;quot;secret&amp;quot;, strlen(&amp;quot;secret&amp;quot;));
odin_room_create_ex(pool, &amp;quot;&amp;lt;SERVER_URL&amp;gt;&amp;quot;, &amp;quot;&amp;lt;TOKEN&amp;gt;&amp;quot;, NULL, user_data, user_data_length, position, cipher, &amp;amp;room);
&lt;/code>&lt;/pre>
&lt;p>Behind the scenes, ODIN Voice derives a master key from your shared password. For each peer, it then generates unique session keys using random salts. These salts are exchanged within the room so that all participants can reconstruct each other&amp;rsquo;s keys - but crucially:&lt;/p>
&lt;ul>
&lt;li>The master password never leaves the device&lt;/li>
&lt;li>No long-term keys are stored or transmitted&lt;/li>
&lt;li>Keys are automatically rotated every 1 million packets or 2 GiB of data&lt;/li>
&lt;/ul>
&lt;p>This design minimizes the risk of both passive eavesdropping and active attacks. As long as your password stays secret, your communications remain private - without needing to trust the infrastructure or manage external key exchanges. Whether you&amp;rsquo;re building secure enterprise tools, private social spaces or games where confidentiality matters, E2EE in ODIN Voice gives you the cryptographic foundation you need - with minimal overhead and full control.&lt;/p>
&lt;h2 id="whats-next-for-you">What’s Next for You?&lt;/h2>
&lt;p>While &lt;strong>1.8&lt;/strong> delivers these foundational capabilities, &lt;strong>ODIN Voice 2.0&lt;/strong> will be a generational leap forward.&lt;/p>
&lt;p>We&amp;rsquo;ve re-architected our entire API to be fully &lt;strong>asynchronous and non-blocking&lt;/strong>, delivering performance boosts that will be immediately apparent in demanding, real-time environments. But most importantly, we’ve re-imagined ODIN&amp;rsquo;s voice routing from the ground up. We don’t want to spoil everything just yet, but let’s just say&amp;hellip; our upcoming &lt;strong>Channel Mask&lt;/strong> system opens up entirely new ways to control how, where and to whom audio is delivered. If you’ve ever wanted precise, layered, signal-aware communication - it&amp;rsquo;s coming.&lt;/p>
&lt;p>Over the coming weeks, we’ll share beta previews, tutorials, and migration guides to help you make the leap to &lt;strong>ODIN Voice 2.0&lt;/strong>. We’d love to hear what you think. Your insights today will shape what &lt;strong>2.0&lt;/strong> becomes tomorrow. Let’s keep building the future of real-time voice - together.&lt;/p>
&lt;p>&lt;em>Stay tuned!&lt;/em>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-release-generic03.jpg"/></item><item><title>atmoky trueSpatial and ODIN: voice chat with superb spatial audio in your Unity game</title><link>https://odin.4players.io/blog/atmoky-and-odin-for-unity/</link><pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/atmoky-and-odin-for-unity/</guid><description>&lt;h2 id="atmoky-truespatial-and-odin-voice">atmoky trueSpatial and ODIN Voice&lt;/h2>
&lt;p>Are you using ODIN with Unity and wondering if you can improve the proximity voice chat? Yes, you can!
There just some small additional steps to take, but they are worth it.
Take advantage of the high quality true spatial audio features from the &lt;a href="https://atmoky.com/products/true-spatial/">atmoky trueSpatial plugin&lt;/a>
and apply them to your
voice audio. In this special tech demo, we teamed up with the spatial audio experts at atmoky to integrate their
trueSpatial engine, enhancing our voice chat with advanced spatial audio rendering for a deeply immersive experience
that strengthens the sense of presence.&lt;/p>
&lt;p>Read our &lt;a href="https://docs.4players.io/voice/unity/guides/odin-atmoky/">guide&lt;/a>
and check our modified &lt;a href="https://github.com/4Players/odin-unity-demo/tree/atmoky">Unity tech demo&lt;/a>
:&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unity/guides/odin-atmoky/' class="btn btn-primary">atmoky Guide&lt;/a>&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-unity-demo/tree/atmoky' class="btn btn-primary">Tech Demo&lt;/a>&lt;/p>
&lt;p>If you are new to ODIN, read this &amp;raquo;&lt;strong>&lt;a href="https://docs.4players.io/voice/unity/guides/">Starter Guide&lt;/a>
&lt;/strong>&amp;laquo; or watch our &amp;raquo;&lt;strong>&lt;a href="https://www.youtube.com/watch?v=S3DFxkWut9c&amp;amp;list=PLAe4Im8mFTAsS12OyFfAVnSLoJ7kEFJ8V">Video Tutorial Series&lt;/a>
&lt;/strong>&amp;laquo;&lt;/p>
&lt;hr>
&lt;p>Using Unreal? We will release a guide for that soon. Stay tuned!&lt;/p>
&lt;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 &lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Discord&lt;/a>
!&lt;/p>
&lt;p>&lt;a href='https://4np.de/discord' target='_blank' rel="noopener" class="btn btn-primary">Discord Community&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/atmoky_unity_odin2.png"/></item><item><title>Why In-Game Voice Chat Matters: Lessons from Nintendo Switch 2</title><link>https://odin.4players.io/blog/why-in-game-voice-chat-matters-lessons-from-nintendo-switch-2/</link><pubDate>Thu, 01 May 2025 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/why-in-game-voice-chat-matters-lessons-from-nintendo-switch-2/</guid><description>&lt;p>Nintendo’s unveiling of the Switch 2 highlights a significant shift in gaming: the prioritization of universal in-game communication. With the introduction of the &lt;strong>C-Button&lt;/strong>, players can access features like voice chat, screensharing, and even video chatting - whether they’re playing the same game or entirely different ones. By embedding these tools directly into the system, Nintendo moves away from the usual dependency on external apps like Discord, opting for integration that spans across all gaming titles available on the system.&lt;/p>
&lt;p>This isn’t just about convenience; it underscores a growing demand for social interaction in games. For developers, the question isn’t whether in-game voice chat matters, it’s how to make it meaningful and easy to use for their audiences.&lt;/p>
&lt;h2 id="gamechat-redefining-connection-in-gameplay">GameChat: Redefining Connection in Gameplay&lt;/h2>
&lt;p>GameChat, accessible via the C-Button, offers players various ways to stay connected during gaming sessions:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Voice Chat Without Restrictions:&lt;/strong> Built into the console, GameChat allows players to communicate naturally without needing extra devices or third-party platforms.&lt;/li>
&lt;li>&lt;strong>Screensharing for Collaborative Play:&lt;/strong> Whether troubleshooting puzzles or strategizing victories, sharing gameplay in real time fosters collaboration.&lt;/li>
&lt;li>&lt;strong>Video Chat Integration:&lt;/strong> Through an optional USB-C camera, players can video chat while gaming, blending interaction and immersion into a single experience.&lt;/li>
&lt;/ul>
&lt;p>Unlike traditional voice solutions tied to specific games, GameChat expands beyond those boundaries, letting users communicate regardless of what they’re playing.&lt;/p>
&lt;h2 id="why-developers-should-prioritize-in-game-communication">Why Developers Should Prioritize In-Game Communication&lt;/h2>
&lt;p>The Switch 2’s focus on universal voice tools reflects an undeniable trend: players crave deeper social connectivity within their gaming experiences. Developers should consider the following impacts when evaluating voice chat integration:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Building Stronger Communities:&lt;/strong> Voice chat encourages real-time collaboration, strengthening player bonds and fostering inclusive communities.&lt;/li>
&lt;li>&lt;strong>Enhancing Gameplay Dynamics:&lt;/strong> Integrated communication, such as screensharing and strategy-focused chats, boosts the sense of teamwork in multiplayer environments.&lt;/li>
&lt;li>&lt;strong>Meeting Player Expectations:&lt;/strong> As systems like GameChat set new standards, games and gaming systems lacking communication tools may feel outdated and disconnected.&lt;/li>
&lt;/ol>
&lt;p>For developers, adding voice chat tools isn’t merely about staying relevant, it’s about cultivating spaces where players connect emotionally and socially through their games.&lt;/p>
&lt;h2 id="the-impact-of-shared-experiences">The Impact of Shared Experiences&lt;/h2>
&lt;p>Nintendo’s GameChat can be viewed as an acknowledgment of the central role that shared experiences play in gaming. Real-time voice and video features allow players to turn solitary activities into collaborative adventures, whether it’s coordinating strategies or simply chatting casually. This functionality serves as a reminder that gaming isn’t inherently isolating—it thrives on interaction and shared joy.&lt;/p>
&lt;p>At its core, in-game communication transcends gameplay; it becomes the fabric of lasting memories and stronger player relationships.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Nintendo’s approach with the Switch 2 highlights the power of built-in voice tools in shaping modern gaming experiences. However, developers have the flexibility to decide how they want to incorporate voice and social systems into their own titles. Whether through universal solutions or tailored add-ins, communication features have the potential to elevate gameplay, foster community, and deepen the connection between players.&lt;/p>
&lt;p>For developers looking to quickly integrate a comparable system into their own platforms or games, 4Players’ &lt;a href="https://odin.4players.io/" title="https\://odin.4players.io/">ODIN&lt;/a>
infrastructure provides all the necessary tools to make this a seamless reality. The &lt;a href="https://odin.4players.io/voice-chat/" title="https\://odin.4players.io/voice-chat/">ODIN Voice Chat SDK&lt;/a>
enables seamless integration of high-quality voice communication into games, while the &lt;a href="https://odin.4players.io/fleet/" title="https\://odin.4players.io/fleet/">ODIN Fleet&lt;/a>
platform provides robust and scalable server hosting to ensure smooth, lag-free experiences for players. Together, these tools equip developers with the resources to create exceptional social gaming systems to keep players engaged.&lt;/p>
&lt;p>Developers face a vital choice: adapt to the shift toward interactive social systems or risk being left behind in an increasingly connected gaming landscape. The possibilities for meaningful integration are endless, but the message is clear: voice chat isn’t just a feature anymore. It’s the foundation of the future of gaming.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/uploads/switch_2_c_button.jpg"/></item><item><title>ODIN Voice Chat now on Fab, Epic’s New Unified Content Marketplace</title><link>https://odin.4players.io/blog/odin-voice-chat-now-on-fab-former-unreal-marketplace/</link><pubDate>Wed, 30 Oct 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/odin-voice-chat-now-on-fab-former-unreal-marketplace/</guid><description>&lt;p>&lt;a href="https://odin.4players.io/voice-chat/">ODIN Voice Chat&lt;/a>
is now available on
&lt;a href="https://www.fab.com/listings/79d0a208-78e8-4bd7-9214-36f6cc190da2">Fab&lt;/a>
, former Unreal Engine Marketplace. Head over to
download and install the SDK for free on Epic’s New Unified Content Marketplace.&lt;/p>
&lt;p>You can &lt;a href="https://www.fab.com/listings/79d0a208-78e8-4bd7-9214-36f6cc190da2">download&lt;/a>
, install and use the SDK for free for up to &lt;strong>25&lt;/strong> concurrent users by either generating a free
access key in our &lt;a href="https://docs.4players.io/voice/introduction/access-keys/">developer documentation&lt;/a>
or directly in the
Unreal Editor using a simple blueprint.&lt;/p>
&lt;h2 id="using-the-plugin">Using the plugin&lt;/h2>
&lt;p>We have created a &lt;a href="https://docs.4players.io/voice/unreal/manual/">guide&lt;/a>
to get your started quickly.&lt;/p>
&lt;p>We also have an extensive &lt;a href="https://docs.4players.io/voice/unreal/blueprint-reference/">Blueprint Reference Documentation&lt;/a>
that describes every node that ODIN offers in
great detail.&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s next?&lt;/h2>
&lt;p>We will prepare our &lt;a href="https://docs.4players.io/voice/unreal/samples/unreal-demo/">Unreal Tech Demo&lt;/a>
and also SDKs for other engines on Fab, now that Epic made this possible. Stay tuned!&lt;/p>
&lt;p>&lt;strong>We can&amp;rsquo;t wait to see what you are developing with ODIN on the amazing Unreal Engine&lt;/strong>.&lt;/p>
&lt;p>Please &lt;a href="mailto:odin@4players.io">contact sales&lt;/a>
if you need additional information on pricing and get in touch with our
&lt;a href="https://odin.4players.io/company/contact_us/">Customer Success Team&lt;/a>
if you want to be part of our &amp;ldquo;Showcase&amp;rdquo;.&lt;/p>
&lt;p>&lt;a href='https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk' class="btn btn-primary">Get ODIN on Fab&lt;/a>&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/blog/odin-swiss-army-knife-voice-communication.jpeg" alt="ODIN, Swiss Army Knife for voice chats">&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin_fab_unreal.jpg"/></item><item><title>ODIN Voice Chat is back in Unity Asset Store</title><link>https://odin.4players.io/blog/voice-chat-sdk-odin-back-in-unity-asset-store/</link><pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/voice-chat-sdk-odin-back-in-unity-asset-store/</guid><description>&lt;h2 id="now-in-unity-asset-store">Now in Unity Asset Store!&lt;/h2>
&lt;p>ODIN Voice is now available again in the
&lt;a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">Unity Asset Store&lt;/a>
. Head over to
download and install the SDK for free!&lt;/p>
&lt;p>You can &lt;a href="https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568">download&lt;/a>
, install and use the SDK for free for up to &lt;strong>25&lt;/strong> peak concurrent users by either generating a free
access key in our &lt;a href="https://docs.4players.io/voice/introduction/access-keys/">developer documentation&lt;/a>
or directly in the
Unity Editor using the &lt;code>Odin Manager Prefab&lt;/code>.&lt;/p>
&lt;h2 id="4players-becomes-partner-of-unity">4Players becomes partner of Unity&lt;/h2>
&lt;p>We thank Unity for the frictionless and thorough verification process to make &lt;strong>ODIN Voice Chat&lt;/strong> a &lt;code>Verified Solution&lt;/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.&lt;/p>
&lt;h2 id="more-to-come">More to come&lt;/h2>
&lt;p>Our &lt;a href="https://docs.4players.io/voice/unity/samples/multiplayer-sample/">Unity Tech Demo&lt;/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.&lt;/p>
&lt;p>&lt;strong>We can&amp;rsquo;t wait to see what you are developing with ODIN on the amazing Unity Engine&lt;/strong>.&lt;/p>
&lt;p>Please &lt;a href="mailto:odin@4players.io">contact sales&lt;/a>
if you need additional information on pricing and get in touch with our
&lt;a href="https://odin.4players.io/company/contact_us/">Customer Success Team&lt;/a>
if you want to be part of our &amp;ldquo;Showcase&amp;rdquo;.&lt;/p>
&lt;p>&lt;a href='https://assetstore.unity.com/packages/tools/audio/odin-voice-chat-208568' class="btn btn-primary">Get ODIN from Unity Asset Store&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-unity-verified-solution.jpg"/></item><item><title>ODIN brings support for Unreal Engine 5.4</title><link>https://odin.4players.io/blog/4players-releases-odin-for-unreal-engine-5.4/</link><pubDate>Mon, 06 May 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-for-unreal-engine-5.4/</guid><description>&lt;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:&lt;/p>
&lt;p>&lt;strong>What’s New in v1.8.7?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Core SDK Upgrade&lt;/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 &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.5">release notes on our GitHub page&lt;/a>
.&lt;/li>
&lt;li>&lt;strong>iOS Build Fixes&lt;/strong>: We’ve addressed and fixed build issues that previously affected iOS, enhancing stability and
compatibility across all supported Apple devices.&lt;/li>
&lt;li>&lt;strong>Enhanced Asynchronous Event Handling&lt;/strong>: The update introduces world validity checks for asynchronous events to
ensure smooth synchronization with the game environment, minimizing disruptions during gameplay.&lt;/li>
&lt;li>&lt;strong>Improved Safety with &lt;code>UOdinRoom&lt;/code> References&lt;/strong>: Changes have been made to how &lt;code>UOdinRoom&lt;/code> references are accessed,
which now prevents potential crashes related to asynchronous event handling—boosting the overall robustness of the
SDK.&lt;/li>
&lt;li>&lt;strong>Support for Unreal Engine 5.4&lt;/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.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Why Update?&lt;/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&amp;rsquo;s performance and stability.&lt;/p>
&lt;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!&lt;/p>
&lt;p>&lt;strong>Download ODIN SDK v1.8.7&lt;/strong>
Download the latest version of ODIN SDK v1.8.7 from our &lt;a href="">GitHub repository&lt;/a>
or directly from the Unreal Engine
Marketplace. For more information on the ODIN SDK and its features, visit our &lt;a href="https://odin.4players.io">official website&lt;/a>
.&lt;/p>
&lt;p>&lt;a href='https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk' class="btn btn-primary">Go to Unreal Marketplace&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-unreal-engine-5.4.png"/></item><item><title>Revolutionizing gaming Communication: ODIN by 4Players supports Gray Zone Warfare with next-gen Voice Chat</title><link>https://odin.4players.io/blog/odin-by-4players-supports-gray-zone-warfare-with-next-gen-voice-chat/</link><pubDate>Mon, 29 Apr 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/odin-by-4players-supports-gray-zone-warfare-with-next-gen-voice-chat/</guid><description>&lt;p>&lt;strong>Hamburg, 29. April 2024&lt;/strong> - The globally operating software company 4Players GmbH announces its partnership with MADFINGER
Games, the developer behind the highly anticipated tactical first-person shooter Gray Zone Warfare. The collaboration
aims to level up in-game communication by integrating 4Players’ next generation Voice Chat SDK, ODIN, into MADFINGER
Games’ upcoming title.&lt;/p>
&lt;p>MADFINGER Games’ goal is to create a complex and realistic gaming experience that allows players to embark on an
adventure alone or in a team. To ensure excellent communication during tactical approaches, ODIN was the best choice for
MADFINGER Games’ Technical Director Johanny Clerc-Renaud:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Selecting ODIN as the voice chat in our upcoming title, Gray Zone Warfare, was a pivotal decision driven by both
technical and business considerations. Technically, ODIN ticks a lot of our criteria with its support for spatial audio,
a ready-to-deploy Unreal Engine 5 plugin and the ability to meet any player load thanks to their cloud hosting.
From a business perspective, the agility and openness of partnering with a company like 4Players meant we could work
hand-in-hand to tailor the solution to our specific needs. This includes a seamless integration with Wwise, allowing us
to modulate voice data for a more immersive and engaging player experience. Together, these factors made ODIN the
undeniable choice for Gray Zone Warfare, enabling us to make our game even more memorable.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>By natively integrating &lt;a href="https://docs.4players.io/voice/unreal/">ODIN Voice Chat into Unreal Engine 5&lt;/a>
,
MADFINGER Games&amp;rsquo; developers could focus on creating
ultra-realistic game content instead of managing complex data sets. By leveraging ODIN&amp;rsquo;s scalable cloud hosting,
MADFINGER Games can also ensure seamless service delivery to players worldwide, improving accessibility and the gaming
experience.&lt;/p>
&lt;p>With features such as real-time 3D spatial audio – including audio occlusion and ambient effects – for the global voice
chat as well as full-volume radio communication, ODIN sets a new standard for multiplayer engagement and promotes
immersive and crystal-clear interactions between players. This level of immersive communication not only enhances
gameplay, but also strengthens the social fabric in the gaming community.&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;ODIN represents the future of in-game communication. We combine cutting-edge technology with decades of expertise in
the gaming industry to create a product that is fun and designed to improve gamers’ communication,&amp;rdquo; says Phillip
Schuster, CEO at 4Players GmbH. &amp;ldquo;We are excited to be working with MADFINGER Games to further optimize the immersion of
Gray Zone Warfare. The partnership highlights our shared goal of driving social interaction and creating a unique gaming
experience.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>With the release of &lt;a href="https://store.steampowered.com/app/2479810/Gray_Zone_Warfare/">Gray Zone Warfare for Early Access on 30th April 2024&lt;/a>
,
players will experience unparalleled
realistic gaming communication with ODIN.&lt;/p>
&lt;h2 id="about-odin">About ODIN&lt;/h2>
&lt;p>4Players&amp;rsquo; next generation voice chat SDK, ODIN, offers unrivalled audio quality. ODIN supports full engine integration
for Unity, Unreal Engine (4.x/5.x) and web applications and works cross-platform. In addition, the voice chat provides
crystal-clear communication for more than s users per room simultaneously and can be scaled horizontally almost
indefinitely.&lt;/p>
&lt;h2 id="about-4players">About 4Players&lt;/h2>
&lt;p>4Players is a provider for multiplayer services and creates metaverse-ready, cross-platform, safe and interactive
experiences with ODIN, an ultra-immersive voice chat tool, including full 3D spatial audio support. The sub brand
4Netplayers is one of the largest game server providers in Europe and offers ultra-low latency hosting worldwide. The
server fleet is represented in 18 locations (USA, EU, Asia, Australia) and is always equipped with the latest server
technology.&lt;/p>
&lt;h2 id="about-madfinger-games">About MADFINGER Games&lt;/h2>
&lt;p>MADFINGER Games is a globally renowned independent game studio with a rich portfolio of award-winning titles played by
millions of people worldwide.&lt;br>
Gray Zone Warfare is an immersive tactical FPS with a maximum focus on realism. Join a Private Military Company and
navigate a vast open world setting alone or in a squad. Adapt to your surroundings, use tactics to your advantage, and
fight against other human operators and AI-controlled enemies.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/grayzone_warfare_odin.jpg"/></item><item><title>Encoding ODIN audio data to FLAC for realtime transcription</title><link>https://odin.4players.io/blog/encoding-odin-audio-data-to-flac-for-realtime-transcription/</link><pubDate>Tue, 30 Jan 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/encoding-odin-audio-data-to-flac-for-realtime-transcription/</guid><description>&lt;p>Leveraging AI tools for transcription is a great way to enhance voice chat applications. While some AI services like
Whisper from OpenAI use WAV, other services like Google Speech to Text recommend using FLAC instead.&lt;/p>
&lt;p>We already have provided a &lt;a href="https://docs.4players.io/voice/nodejs/samples/transcribe-audio/">sample on how to use our NodeJS SDK to transcribe audio streams in real-time using OpenAIs
whisper&lt;/a>
. It encodes the audio data to WAV. In this article, we will
show you how to encode audio data to FLAC for realtime transcription.&lt;/p>
&lt;h2 id="getting-started-with-odin">Getting started with ODIN&lt;/h2>
&lt;p>Please refer to the &lt;a href="https://docs.4players.io/voice/nodejs/samples/transcribe-audio/">Transcribe&lt;/a>
sample for the overall script and
how to get started with ODIN. Using the information provided here it should be easy to change it to use FLAC instead of
WAV.&lt;/p>
&lt;h2 id="why-flac">Why FLAC?&lt;/h2>
&lt;p>FLAC is a lossless audio format. This means that the audio data is compressed without any loss in quality. This is
important for transcription because the quality of the audio data is crucial for the transcription quality.&lt;/p>
&lt;h2 id="how-to-encode-audio-data-to-flac">How to encode audio data to FLAC&lt;/h2>
&lt;p>We will use the &lt;a href="https://www.npmjs.com/package/libflacjs">libflacjs&lt;/a>
module to encode the audio data to FLAC. The module is
a wrapper around the &lt;a href="https://xiph.org/flac/">libflac&lt;/a>
library. The library is written in C and compiled to WebAssembly.&lt;/p>
&lt;p>First thing we need to do import the module (in TypeScript - please refer to the
&lt;a href="https://www.npmjs.com/package/libflacjs">libflacjs&lt;/a>
Github page on how to import it in JavaScript):&lt;/p>
&lt;pre>&lt;code class="language-TypeScript">import * as Flac from 'libflacjs/dist/libflac';
import {Encoder} from &amp;quot;libflacjs/lib/encoder&amp;quot;;
&lt;/code>&lt;/pre>
&lt;p>Next, we need to create an instance of the &lt;code>Encoder&lt;/code> class. The constructor takes a &lt;code>Flac&lt;/code> object and an options object.&lt;/p>
&lt;pre>&lt;code class="language-TypeScript">const encoder = new Encoder(Flac, {
channels: 1,
sampleRate: 48000,
bitsPerSample: 16,
verify: false,
compression: 0
});
&lt;/code>&lt;/pre>
&lt;div class="box dark tip">
&lt;div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top"> &lt;i class="far fa-lightbulb">&lt;/i> Tip &lt;/div>
&lt;div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">&lt;p>Please remember the &lt;code>bitsPerSample&lt;/code> setting, as it will have an important part in the next section.&lt;/p>
&lt;/div>
&lt;/div>
&lt;h2 id="understanding-audio-data">Understanding audio data&lt;/h2>
&lt;p>Once you have created the encoder, you can start encoding audio data. The &lt;code>encode&lt;/code> method takes an &lt;code>ArrayBuffer&lt;/code> as input.
In ODIN, you subscribe to the &lt;code>AudioDataReceived&lt;/code> event and receive raw audio data there. Let&amp;rsquo;s have a look at the event
structure you get:&lt;/p>
&lt;pre>&lt;code class="language-TypeScript">/**
* The payload for the AudioDataReceived event.
*/
export declare interface OdinAudioDataReceivedEventPayload {
/**
* The ID of the peer that sent the audio data.
*/
peerId: number;
/**
* The ID of the media that sent the audio data.
*/
mediaId: number;
/**
* 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
*/
samples16: Uint8Array;
/**
* 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
*/
samples32: Uint8Array;
}
&lt;/code>&lt;/pre>
&lt;p>Most audio libraries expect the audio data to be in a specific format. But most formats are just different ways to express
the same thing. In the NodeJS SDK, we provide the audio data in two different formats: 16-bit PCM samples and 32-bit PCM
samples.&lt;/p>
&lt;div class="box dark info">
&lt;div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top"> &lt;i class="fa fa-info-circle">&lt;/i> Info &lt;/div>
&lt;div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">&lt;p>PCM stands for Pulse-Code Modulation. It is a method used to digitally represent sampled analog signals. The samples are
stored as a sequence of binary numbers. The number of bits used to represent each sample is called the bit depth. The
higher the bit depth, the more accurate the representation of the signal. The bit depth is also called the resolution or
the word length.&lt;/p>
&lt;p>The bit depth is important because it determines the dynamic range of the audio signal. The dynamic range is the ratio
between the loudest and the quietest sound. The higher the dynamic range, the more accurate the representation of the
signal. The dynamic range is also called the signal-to-noise ratio.&lt;/p>
&lt;p>The sample rate is the number of samples per second. The higher the sample rate, the more accurate the representation of
the signal. The sample rate is also called the sampling frequency.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>In our SDK, &lt;code>samples16&lt;/code> is a raw byte array with 2 bytes per sample. The samples are signed 16-bit integers. The range is
from -32768 to 32767. &lt;code>samples32&lt;/code> is a raw byte array with 4 bytes per sample. The samples are signed 32-bit floats. The
range is from -1 to 1.&lt;/p>
&lt;p>Some audio libraries - like the WAV encoder used in the example code accepts these &lt;code>Uint8array&lt;/code> objects directly. Others,
like the FLAC encoder - expect the audio data to be in a &lt;code>Int32Array&lt;/code>. So, how do we convert the &lt;code>Uint8Array&lt;/code> to a
&lt;code>Int32Array&lt;/code>?&lt;/p>
&lt;h2 id="converting-uint8array-to-int32array">Converting Uint8Array to Int32Array&lt;/h2>
&lt;p>The &lt;code>Int32Array&lt;/code> constructor takes an &lt;code>ArrayBuffer&lt;/code> as input. So, we need to create an &lt;code>ArrayBuffer&lt;/code> from the &lt;code>Uint8Array&lt;/code>
first. We can do that by using the &lt;code>buffer&lt;/code> property of the &lt;code>Uint8Array&lt;/code>:&lt;/p>
&lt;pre>&lt;code class="language-TypeScript">const samples32 = new Float32Array(event.samples32.buffer);
const samples16 = new Int16Array(event.samples16.buffer);
&lt;/code>&lt;/pre>
&lt;p>The Flac library expects the audio data to be in a &lt;code>Int32Array&lt;/code>. So, we need to scale the range of -1 to 1 to either
&lt;code>-32768&lt;/code> to &lt;code>32767&lt;/code> for 16 Bit (see &lt;code>256*256=65536&lt;/code> which split into half for positive and negative numbers is 32768)
or &lt;code>-8388608&lt;/code> to &lt;code>8388607&lt;/code> for 24 Bit. So, all we need to do is getting the samples as &lt;code>Float32Array&lt;/code> scale each sample
to the desired range and convert it to a &lt;code>Int32Array&lt;/code>:&lt;/p>
&lt;p>This is the function that does the heavy lifting for us:&lt;/p>
&lt;pre>&lt;code class="language-TypeScript"> convertAudioSamples = function(samples32: Uint8Array, bitDepth: number): Int32Array {
// Samples from Odin are 32 bit floats encoded in a Uint8Array, that is 4 elements of the Uint8Array form one sample
// which is a 32-bit float value. So we need to convert every 4 elements to one 32 bit float value. This can be
// done with a Float32Array view on the Uint8Array buffer
const floats = new Float32Array(samples32.buffer);
// We now have a Float32Array with the samples ranging from -1 to 1. We need to convert them to signed integers
// with the range of the bit depth. So for 16 bit, we need to convert the floats to integers in the range of
// -32768 to 32767. For 24 bit, we need to convert the floats to integers in the range of -8388608 to 8388607.
const scale = Math.pow(2, bitDepth - 1) - 1; // calculate scale based on bitdepth
// Create a new Int32Array with the same length as the Float32Array and convert the floats to integers using
// the scale calculated above
const intArray = new Int32Array(floats.length);
for (let i = 0; i &amp;lt; floats.length; i++) {
intArray[i] = Math.round(floats[i] * scale);
}
return intArray;
}
&lt;/code>&lt;/pre>
&lt;h2 id="encoding-the-audio-data">Encoding the audio data&lt;/h2>
&lt;p>Now that we have the audio data in the correct format, we can encode it to FLAC. The &lt;code>encode&lt;/code> method of the &lt;code>Encoder&lt;/code>
class takes an &lt;code>Int32Array&lt;/code> as input, so we can pass the result of the &lt;code>convertAudioSamples&lt;/code> function to it:&lt;/p>
&lt;pre>&lt;code class="language-TypeScript"> // Add an event filter for audio data received events and write the audio data to the file using the FLAC encoder
room.addEventListener('AudioDataReceived', (data) =&amp;gt; {
const intArray = convertAudioSamples(event.samples32, 16);
encoder.encode(intArray);
});
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Please note&lt;/strong>: You&amp;rsquo;ll need to use the same bit depth as you have used when creating the encoder. In our example, we have
used 16 bit. If you want to use 24 bit, you need to change the &lt;code>bitsPerSample&lt;/code> setting of the encoder to 24 and change
the &lt;code>convertAudioSamples&lt;/code> function to use 24 bit as well.&lt;/p>
&lt;p>As you can see that is pretty simple. Once you have finished encoding enough data, i.e. when the user stops talking, you
can call the &lt;code>encode&lt;/code> method of the &lt;code>Encoder&lt;/code> class to finish the encoding process:&lt;/p>
&lt;pre>&lt;code class="language-TypeScript">// Finalize the encoding process
encoder.encode();
//get the encoded data:
const encData = encoder.getSamples();
// Write file to disc
fs.writeFileSync(&amp;quot;./test.flac&amp;quot;, encData);
&lt;/code>&lt;/pre>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>In this article, we have shown you how to encode audio data to FLAC for realtime transcription. We have also shown you
how to convert the audio data from the ODIN SDK to the format required by the FLAC encoder. We hope this article was
helpful.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/audio-transcription.jpg"/></item><item><title>Unleashing the Power of Seamless Communication: 4Players ODIN SDK v1.8.2 for Unreal Engine</title><link>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.8.2/</link><pubDate>Mon, 22 Jan 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.8.2/</guid><description>&lt;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&amp;rsquo;s why we&amp;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.&lt;/p>
&lt;p>&lt;strong>What&amp;rsquo;s New in v1.8.2?&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Improved Plugin Compatibility:&lt;/strong> In our ongoing effort to ensure smooth integration with a wide range of Unreal
Engine projects, we&amp;rsquo;ve renamed the &lt;code>odin.h&lt;/code> core SDK header file. This change addresses and prevents naming conflicts
with other plugins, ensuring a more streamlined development process.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Crucial Bug Fix:&lt;/strong> We&amp;rsquo;ve addressed a significant bug related to the &lt;code>BytesToString&lt;/code> and &lt;code>StringToBytes&lt;/code> functions in
Unreal Engine, which previously disrupted the peer/room user data byte array format. This fix is based on detailed
community
feedback (&lt;a href="https://forums.unrealengine.com/t/bytestostring-conversion-issue/470458">see the forum post for more details&lt;/a>
).
Our commitment to community-driven improvements continues to shape the ODIN SDK, making it more robust and
developer-friendly.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Looking Back: v1.8.1 Enhancements&lt;/strong>&lt;/p>
&lt;p>While we didn&amp;rsquo;t announce it separately, version 1.8.1 also brought a subtle yet impactful change:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Streamlined Codebase:&lt;/strong> We removed the unused &lt;code>ConstructJsonValue&lt;/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.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Why Choose 4Players ODIN SDK for Unreal Engine?&lt;/strong>&lt;/p>
&lt;p>Our SDK stands at the forefront of real-time communication solutions, offering unparalleled voice communication
integration into your digital applications. Whether you&amp;rsquo;re working on a gaming project, an educational platform, or a
VR/AR application, the ODIN SDK empowers you with:&lt;/p>
&lt;ul>
&lt;li>Cutting-edge technology for superior communication experiences.&lt;/li>
&lt;li>Cross-platform compatibility, from desktop to mobile.&lt;/li>
&lt;li>A focus on privacy and security, respecting user data.&lt;/li>
&lt;li>Scalability to meet the needs of any project size.&lt;/li>
&lt;li>Comprehensive documentation and support for effortless implementation.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Embark on Your Next Project with Confidence&lt;/strong>&lt;/p>
&lt;p>We&amp;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.&lt;/p>
&lt;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.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.8.2.jpg"/></item><item><title>Unity SDK v1.6.0: Elevating Your Development Experience with Core SDK v1.6.4 and Essential Fixes</title><link>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-v1.6/</link><pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-v1.6/</guid><description>&lt;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.&lt;/p>
&lt;p>&lt;strong>Core SDK Integration: A Leap Forward&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Core SDK Version 1.6.4:&lt;/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.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Focused Bug Fixes and Improvements:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Serialization Build Error Resolution:&lt;/strong> In response to feedback from our developer community, we’ve addressed and
fixed the potential &lt;code>FindObjectOfType&lt;/code> serialization build errors. This fix significantly improves the build process,
providing a smoother and more reliable development experience.&lt;/li>
&lt;li>&lt;strong>UserData Handling Optimization:&lt;/strong> Another crucial fix in this update is the resolution of an issue where user data
was incorrectly replicated across multiple rooms when using &lt;code>OdinHandler.JoinRoom&lt;/code>. This fix ensures that user data is
handled accurately and securely, maintaining the integrity of room-based operations.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Implications for Developers:&lt;/strong>&lt;/p>
&lt;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.&lt;/p>
&lt;p>&lt;strong>Join the Evolution:&lt;/strong>&lt;/p>
&lt;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 &lt;a href="https://github.com/4Players/odin-sdk-unity">GitHub repository&lt;/a>
to download the update and start transforming the
way you integrate communication in your applications.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unity/' class="btn btn-primary">Get Started with Unity today&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unity-release-1.6.jpg"/></item><item><title>Wwise and ODIN: how to integrate a voice chat into your Unreal game using both plugins</title><link>https://odin.4players.io/blog/wwise-and-odin-for-unreal/</link><pubDate>Fri, 15 Dec 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/wwise-and-odin-for-unreal/</guid><description>&lt;h2 id="wwise-and-odin">Wwise and ODIN&lt;/h2>
&lt;p>Are you using Unreal with Wwise and wondering if it works together with our proximity voice chat ODIN? Yes, it does!
It&amp;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.&lt;/p>
&lt;p>Read our &lt;a href="https://docs.4players.io/voice/unreal/guides/odin-wwise/">guide&lt;/a>
and check our &lt;a href="https://github.com/4Players/odin-unreal-wwise">sample project&lt;/a>
:&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/guides/odin-wwise/' class="btn btn-primary">Wwise Guide&lt;/a>&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-unreal-wwise' class="btn btn-primary">Sample Project&lt;/a>&lt;/p>
&lt;p>If you are new to ODIN, read this &amp;raquo;&lt;strong>&lt;a href="https://docs.4players.io/voice/unreal/guides/">Starter Guide&lt;/a>
&lt;/strong>&amp;laquo; or watch our &amp;raquo;&lt;strong>&lt;a href="https://www.youtube.com/watch?v=7ZtC0WvX0c8&amp;amp;list=PLAe4Im8mFTAuFFrFKnnl_MMJi8de7dYHs">Video Tutorial Series&lt;/a>
&lt;/strong>&amp;laquo;&lt;/p>
&lt;hr>
&lt;p>Using FMOD? We got you covered with this &amp;raquo;&lt;strong>&lt;a href="https://docs.4players.io/voice/unreal/guides/odin-fmod-unreal/">Guide for FMOD&lt;/a>
&lt;/strong>&amp;laquo;&lt;/p>
&lt;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 &lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Discord&lt;/a>
!&lt;/p>
&lt;p>&lt;a href='https://4np.de/discord' target='_blank' rel="noopener" class="btn btn-primary">Discord Community&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/wwise_with_odin.jpg"/></item><item><title>Introducing Our AI-Powered Chatbot for ODIN SDK Support – Your 24/7 Development Companion</title><link>https://odin.4players.io/blog/introducing-our-ai-powered-chatbot-for-odin-sdk-support/</link><pubDate>Mon, 04 Dec 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-our-ai-powered-chatbot-for-odin-sdk-support/</guid><description>&lt;p>Dear Developers,&lt;/p>
&lt;p>We&amp;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 &lt;a href="https://www.4players.io/odin">4Players ODIN&lt;/a>
and is ready to
assist with Unreal, Unity, and Web SDK queries. Swift SDK support is on the horizon as well.&lt;/p>
&lt;h2 id="understanding-the-ai-chatbot">Understanding the AI Chatbot&lt;/h2>
&lt;p>Our AI assistant is not just any chatbot. It&amp;rsquo;s been meticulously trained with extensive ODIN documentation, SDK
references, guides, and sample code. This means that it&amp;rsquo;s equipped to offer detailed and specific support, mirroring the
expertise you&amp;rsquo;d expect from our developer team.&lt;/p>
&lt;h2 id="why-use-the-ai-chatbot">Why Use the AI Chatbot?&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>24/7 Availability:&lt;/strong> Whether you&amp;rsquo;re burning the midnight oil or working in a different time zone, our AI chatbot is
always on standby to help you out.&lt;/li>
&lt;li>&lt;strong>Instant Support:&lt;/strong> Get immediate answers to your queries without waiting for human support, enabling a smoother and
faster development process.&lt;/li>
&lt;li>&lt;strong>Comprehensive Knowledge Base:&lt;/strong> With training based on our vast repository of ODIN documentation, the chatbot can
handle a wide array of questions, from basic to complex.&lt;/li>
&lt;/ol>
&lt;h2 id="your-feedback-matters">Your Feedback Matters&lt;/h2>
&lt;p>As exciting as this beta release is, we acknowledge that perfection is a journey. That&amp;rsquo;s why we&amp;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&amp;rsquo;s
capabilities.&lt;/p>
&lt;h2 id="continuous-improvement">Continuous Improvement&lt;/h2>
&lt;p>We&amp;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.&lt;/p>
&lt;h2 id="future-plans">Future Plans&lt;/h2>
&lt;p>Expanding the AI chatbot&amp;rsquo;s support to include other SDKs is a priority for us. We&amp;rsquo;re working diligently to extend its
capabilities so that no matter which part of the ODIN ecosystem you&amp;rsquo;re working with, expert assistance is always a chat
away.&lt;/p>
&lt;h2 id="get-started">Get Started&lt;/h2>
&lt;p>Experience the future of developer support now. Head over to our &lt;a href="https://www.4players.io/odin">ODIN documentation&lt;/a>
and
start chatting with the AI assistant. We can&amp;rsquo;t wait to hear about your experiences and look forward to growing together
in this exciting new chapter of development support.&lt;/p>
&lt;p>Thank you for being a part of our community and for joining us in this innovative journey.&lt;/p>
&lt;p>Happy Developing!&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/ai-assistant-launch.png"/></item><item><title>ODIN Unreal SDK 1.8.0: New API Features and Critical Improvements</title><link>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.8.0/</link><pubDate>Thu, 16 Nov 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.8.0/</guid><description>&lt;p>Hello ODIN Developers!&lt;/p>
&lt;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:&lt;/p>
&lt;p>&lt;strong>Core SDK Update&lt;/strong>&lt;/p>
&lt;ul>
&lt;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 &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.4">here&lt;/a>
.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>API Enhancements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>RestartCapturing&lt;/code> in &lt;code>UOdinAudioCapture&lt;/code>:&lt;/strong> This new addition allows for a more flexible control over audio
capturing, enabling developers to restart capturing with ease.&lt;/li>
&lt;li>&lt;strong>&lt;code>GetIsPaused&lt;/code> and &lt;code>SetIsPaused&lt;/code> in &lt;code>UOdinAudioCapture&lt;/code>:&lt;/strong> These functions provide greater control over audio capture
management, allowing for a pause and resume mechanism.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Bugfixes and Improvements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Unreal Engine 5.3 Compatibility:&lt;/strong> We&amp;rsquo;ve addressed build issues and deprecation warnings associated with Unreal
Engine 5.3, ensuring smoother integration.&lt;/li>
&lt;li>&lt;strong>Crash Fix on Capturing Restart:&lt;/strong> Resolved a potential crash that could occur when trying to restart capturing after
stopping it.&lt;/li>
&lt;li>&lt;strong>&lt;code>CanContainContent&lt;/code> Disabled:&lt;/strong> In response to community feedback (as noted in issue #1), we&amp;rsquo;ve
disabled &lt;code>CanContainContent&lt;/code>, focusing on enhancing user experience.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Join Us in Shaping the Future&lt;/strong>&lt;/p>
&lt;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.&lt;/p>
&lt;p>Together, let&amp;rsquo;s continue to push the boundaries of real-time communication in game development!&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/guides/' class="btn btn-primary">Download the Unreal SDK today&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.8.0.jpg"/></item><item><title>Introducing ODIN Unreal SDK 1.7.0: A Leap Forward in Real-Time Communication</title><link>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.7.0/</link><pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.7.0/</guid><description>&lt;p>Hello ODIN Community!&lt;/p>
&lt;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&amp;rsquo;s take a look at the journey from 1.6.1 to our latest 1.7.0 update:&lt;/p>
&lt;p>&lt;strong>1.6.1 &amp;amp; 1.6.2: Core SDK Updates and Stability Enhancements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Core SDK Progression:&lt;/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 &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.1">here for 1.6.1&lt;/a>
and &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.2">here for 1.6.2&lt;/a>
.&lt;/li>
&lt;li>&lt;strong>1.6.2 Specific Improvements:&lt;/strong>
&lt;ul>
&lt;li>Resolved build issues related to missing includes in Unreal Engine 5.3.&lt;/li>
&lt;li>Addressed a bug causing crashes with invalid reference handling during &lt;code>MediaRemoved&lt;/code> events.&lt;/li>
&lt;li>Fixed potential crashes during seamless travel, ensuring smoother transitions and reliability.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>1.6.3: Direct API Access and Bug Fixes&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Enhanced API Functionality:&lt;/strong> Updated the API to allow direct access to the internal media sound generator, offering
more control and flexibility.&lt;/li>
&lt;li>&lt;strong>Audio Capture Optimization:&lt;/strong> Fixed a bug where &lt;code>UAudioCapture&lt;/code> was initialized with an invalid sample rate or
channel count, ensuring more accurate audio processing.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>1.7.0: A New Milestone with Enhanced Audio Control&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Input Volume Adjustment:&lt;/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.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Moving Forward Together&lt;/strong>&lt;/p>
&lt;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.&lt;/p>
&lt;p>We encourage you to explore these new updates and share your experiences. Your feedback is instrumental in guiding our
future developments.&lt;/p>
&lt;p>Thank you for being a part of our journey. Here&amp;rsquo;s to many more milestones with ODIN!&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/guides/' class="btn btn-primary">Download the Unreal SDK today&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.7.0.jpg"/></item><item><title>Introducing Unreal SDK 1.6.1: New features, many bugfixes, some small API changes</title><link>https://odin.4players.io/blog/introducing-odin-voice-unreal-sdk-1.6.1/</link><pubDate>Tue, 17 Oct 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-odin-voice-unreal-sdk-1.6.1/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;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.&lt;/p>
&lt;h2 id="whats-new-in-unreal-sdk-_161_-compared-to-_156_-">What&amp;rsquo;s new in Unreal SDK &lt;em>1.6.1&lt;/em> compared to &lt;em>1.5.6&lt;/em> ?&lt;/h2>
&lt;h3 id="general">General&lt;/h3>
&lt;ul>
&lt;li>The Core SDK has been updated to version 1.6.1.&lt;/li>
&lt;/ul>
&lt;h3 id="new-features">New Features&lt;/h3>
&lt;ul>
&lt;li>Added &lt;strong>Pause Playback Media&lt;/strong> to instruct the server to pause the specified media stream, ceasing the reception of data&lt;/li>
&lt;li>Added &lt;strong>Resume Playback Media&lt;/strong> to instruct the server to resume the specified media stream, re-initiating the reception of data&lt;/li>
&lt;li>Added &lt;strong>Get Output Media Peer ID&lt;/strong>&lt;/li>
&lt;li>Added &lt;strong>Set Room APM Stream Delay&lt;/strong> for scenarios where audio output and input are not synchronized to ensure that the echo canceller can align both streams&lt;/li>
&lt;/ul>
&lt;h3 id="api-changes">API Changes&lt;/h3>
&lt;ul>
&lt;li>Updated &lt;strong>Join Room&lt;/strong> and &lt;strong>Update Peer Position&lt;/strong> to support 3D coordinates&lt;/li>
&lt;li>Removed &lt;strong>Update Room User Data&lt;/strong> (use RoomUpdate RPC on an ODIN gateway instead)&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h3>
&lt;ul>
&lt;li>Fixed build issues and deprecation warnings with Unreal Engine 5.3&lt;/li>
&lt;li>Fixed a potential crash when switching capture devices&lt;/li>
&lt;li>Added functions to allow listening to audio buffer changes in OdinMediaSoundGenerator&lt;/li>
&lt;li>Update default build settings for compatibility with engine versions 4.24 or later&lt;/li>
&lt;li>Updated include path in OdinMediaSoundGenerator&lt;/li>
&lt;li>Fixed an issue where stereo output interfered with the functioning of echo cancellation&lt;/li>
&lt;li>Updated initial APM settings
&lt;ul>
&lt;li>Enabled Voice Activity Detection&lt;/li>
&lt;li>Enabled Noise Suppression&lt;/li>
&lt;li>Enabled Gain Controller&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Updated static library format on iOS and macOS for Unreal Engine Marketplace compliance&lt;/li>
&lt;li>Fixed a bug where capture device selection always picked the default device&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;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.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/4Players/odin-sdk-unreal/releases/tag/v1.6.1">Download Odin Voice SDK 1.6.1&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">ODIN SDK @ Unreal Marketplace&lt;/a>
(update available soon!)&lt;/li>
&lt;li>&lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Join our Discord&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://docs.4players.io/voice/unreal/">Read the Documentation&lt;/a>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.6.1.jpg"/></item><item><title>Unveiling New Enhancements: ODIN Unreal SDK Update from 1.5.6 to 1.6.0</title><link>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.6.0/</link><pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-v1.6.0/</guid><description>&lt;p>Greetings, ODIN Developers!&lt;/p>
&lt;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&amp;rsquo;s dive into the details:&lt;/p>
&lt;p>&lt;strong>1.5.7: Streamlined Compliance and Device Selection&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Browser Clients Update:&lt;/strong> It&amp;rsquo;s important to update your browser clients to version 0.15.0 or later of
the &lt;a href="https://www.npmjs.com/package/@4players/odin">@4players/odin&lt;/a>
package.&lt;/li>
&lt;li>&lt;strong>Core SDK Update:&lt;/strong> Upgraded to version 1.5.7. Check
the &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.5.7">details here&lt;/a>
.&lt;/li>
&lt;li>&lt;strong>iOS and macOS Enhancements:&lt;/strong> We&amp;rsquo;ve updated the static library format for better compliance with Unreal Engine
Marketplace standards.&lt;/li>
&lt;li>&lt;strong>Capture Device Selection Fix:&lt;/strong> Resolved an issue to ensure the correct capture device is selected, rather than
defaulting to the system&amp;rsquo;s choice.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>1.5.8: Advanced Audio Processing and Echo Cancellation&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Core SDK Update:&lt;/strong> Progressed to version 1.5.8. Full details are
available &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.5.8">here&lt;/a>
.&lt;/li>
&lt;li>&lt;strong>New Features:&lt;/strong>
&lt;ul>
&lt;li>&lt;code>Set Room APM Stream Delay&lt;/code>: This feature assists in syncing audio output and input, vital for effective echo
cancellation.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Stereo Output and Echo Cancellation:&lt;/strong> Fixed a crucial issue where stereo output was impacting echo cancellation.&lt;/li>
&lt;li>&lt;strong>APM Settings Update:&lt;/strong> We&amp;rsquo;ve enabled Voice Activity Detection, Noise Suppression, and Gain Controller for optimized
audio processing.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>1.5.9: Audio Buffer Enhancements and Engine Compatibility&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>OdinMediaSoundGenerator Updates:&lt;/strong> Added functions for monitoring audio buffer changes and updated include paths for
improved usability.&lt;/li>
&lt;li>&lt;strong>Engine Compatibility:&lt;/strong> Ensured default build settings are compatible with Unreal Engine versions 4.24 and later.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>1.6.0: Pioneering Media Stream Control and API Enhancements&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Server Requirements:&lt;/strong> This update necessitates ODIN server version 1.3.0 or newer. Cloud-hosted servers are updated
automatically.&lt;/li>
&lt;li>&lt;strong>Core SDK Update:&lt;/strong> Advanced to version 1.6.0. Full release notes can be
found &lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.6.0">here&lt;/a>
.&lt;/li>
&lt;li>&lt;strong>New Features:&lt;/strong>
&lt;ul>
&lt;li>&lt;code>Pause Playback Media&lt;/code> &amp;amp; &lt;code>Resume Playback Media&lt;/code>: These commands allow for precise control over media stream
reception.&lt;/li>
&lt;li>&lt;code>Get Output Media Peer ID&lt;/code>: A new addition for enhanced media stream management.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>API Updates:&lt;/strong>
&lt;ul>
&lt;li>&lt;code>Join Room&lt;/code> and &lt;code>Update Peer Position&lt;/code> now support 3D coordinates.&lt;/li>
&lt;li>&lt;code>Update Room User Data&lt;/code> has been removed in favor of
the &lt;a href="https://github.com/4Players/odin-gateway#roomupdate">&lt;code>RoomUpdate&lt;/code>&lt;/a>
RPC.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Compatibility and Stability Improvements:&lt;/strong> Fixed build issues and addressed deprecation warnings with Unreal Engine
5.3. Also resolved a potential crash related to capture device switching.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Join Us in This Exciting Journey&lt;/strong>&lt;/p>
&lt;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.&lt;/p>
&lt;p>Stay tuned for more updates, and happy developing with ODIN!&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/guides/' class="btn btn-primary">Download the Unreal SDK today&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.6.0.jpg"/></item><item><title>Introducing Unreal SDK 1.5.6: Expanding iOS Support and Enhanced Stability</title><link>https://odin.4players.io/blog/introducing-odin-voice-unreal-sdk-1.5.6/</link><pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-odin-voice-unreal-sdk-1.5.6/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;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.&lt;/p>
&lt;h2 id="whats-new-in-unreal-sdk-156">What&amp;rsquo;s New in Unreal SDK 1.5.6?&lt;/h2>
&lt;h3 id="general">General&lt;/h3>
&lt;ul>
&lt;li>The Core SDK has been updated to version 1.5.5.&lt;/li>
&lt;li>We&amp;rsquo;ve now switched to static linking on iOS and macOS, making your development process more streamlined.&lt;/li>
&lt;/ul>
&lt;h3 id="new-features">New Features&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>iOS Support&lt;/strong>: We have expanded our platform reach to include iOS, enabling more users to experience high-quality
voice communication.&lt;/li>
&lt;li>&lt;strong>Reset Function&lt;/strong>: The new Reset function resets media handles on ODIN synth components, offering greater control
over media handling.&lt;/li>
&lt;li>&lt;strong>Room User Data Changed Event&lt;/strong>: The SDK now broadcasts a &amp;lsquo;Room User Data Changed&amp;rsquo; event, providing real-time
information about changes in user data.&lt;/li>
&lt;li>&lt;strong>Support for Unreal Engine 5.3&lt;/strong>: We are ensuring your projects stay ahead of the curve with support for the
upcoming Unreal Engine 5.3 releases.&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Unreal Engine Build Issues&lt;/strong>: Fixed potential build issues with Unreal Engine 5.1 and later.&lt;/li>
&lt;li>&lt;strong>Garbage Collection of Handles&lt;/strong>: Resolved an issue where handles were unexpectedly garbage collected, resulting in
closed connections.&lt;/li>
&lt;li>&lt;strong>Invalidated Structures Access&lt;/strong>: Fixed issues causing application crashes due to accessing pointers linked to
invalidated structures.&lt;/li>
&lt;li>&lt;strong>Asynchronous Access Violations&lt;/strong>: Resolved crashes resulting from asynchronous access violations.&lt;/li>
&lt;li>&lt;strong>Game-Thread Synchronization&lt;/strong>: Enhanced system stability by wrapping each event with game-thread synchronization
tasks.&lt;/li>
&lt;li>&lt;strong>Event Handling Update&lt;/strong>: Event handling now uses task-launching on a per-event basis, offering more efficient
processing.&lt;/li>
&lt;li>&lt;strong>AVAudioSession Configuration&lt;/strong>: To mitigate potential crash issues on iOS, we&amp;rsquo;ve ensured the proper
configuration of &lt;code>AVAudioSession&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Linker Issues&lt;/strong>: Fixed linker issues caused by the use of a newer clang version in Unreal Engine 5 projects.&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;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.&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/4Players/odin-sdk-unreal/releases/tag/v1.5.6">Download Odin Voice SDK 1.5.6&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">ODIN SDK @ Unreal Marketplace&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Join our Discord&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://docs.4players.io/voice/unreal/">Read the Documentation&lt;/a>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.5.6.jpg"/></item><item><title>Announcing Unity SDK 1.5.5: Enhanced Audio Performance and Android Support</title><link>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-v1.5.5/</link><pubDate>Sat, 17 Jun 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-v1.5.5/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;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.&lt;/p>
&lt;h2 id="whats-new-in-unity-sdk-155">What&amp;rsquo;s New in Unity SDK 1.5.5?&lt;/h2>
&lt;h3 id="general-update">General Update&lt;/h3>
&lt;ul>
&lt;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.&lt;/li>
&lt;/ul>
&lt;h3 id="new-features">New Features&lt;/h3>
&lt;ul>
&lt;li>Android ARMv7a Support: We&amp;rsquo;ve broadened our Android device support with the inclusion of ARMv7a, expanding the
reach of your voice communication capabilities to even more users.&lt;/li>
&lt;/ul>
&lt;h3 id="api-changes">API Changes&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>SilenceCapturedAudio Addition&lt;/strong>: We&amp;rsquo;ve introduced the &lt;code>SilenceCapturedAudio&lt;/code> method on the audio sender, giving you
more control over the audio capture process.&lt;/li>
&lt;li>&lt;strong>Deprecated Properties Removal&lt;/strong>: To streamline our API, we&amp;rsquo;ve removed the &lt;code>IsPaused&lt;/code> and &lt;code>IsMuted&lt;/code> deprecated properties
from media streams.&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes-and-improvements">Bugfixes and Improvements&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Device Reset Fallback&lt;/strong>: To ensure smoother recovery, we&amp;rsquo;ve added a fallback to the default device during reset.&lt;/li>
&lt;li>&lt;strong>OnMediaActiveStateChanged Event Update&lt;/strong>: We&amp;rsquo;ve fixed the update for this event for input streams, ensuring accurate
status updates.&lt;/li>
&lt;li>&lt;strong>Echo Cancellation&lt;/strong>: Echo cancellation has been improved for enhanced audio clarity during conversations.&lt;/li>
&lt;li>&lt;strong>PlaybackStream Connection Reset&lt;/strong>: We&amp;rsquo;ve ensured that the media handle resets upon connecting to the &lt;code>PlaybackStream&lt;/code>
for a clean state.&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;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.&lt;/p>
&lt;p>Upgrade to Unity SDK 1.5.5 today and unlock enhanced voice communication features in your projects!&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unity/' class="btn btn-primary">Get Started with Unity today&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unity-release-1.5.5.jpg"/></item><item><title>Revolutionizing Multiplayer Gaming with ODIN: AI-Driven NPCs for Immersive Experiences</title><link>https://odin.4players.io/blog/revolutionizing-multiplayer-gaming-with-odin-ai-driven-npcs-for-immersive-experiences/</link><pubDate>Fri, 21 Apr 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/revolutionizing-multiplayer-gaming-with-odin-ai-driven-npcs-for-immersive-experiences/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>In the world of multiplayer gaming, one of the biggest challenges faced by developers and players alike is the lack of
real human interaction in the gaming environment. This often leads to a &amp;ldquo;chicken and egg&amp;rdquo; situation, where the absence
of other players makes a game uninteresting, resulting in fewer players joining in. But what if we could change that
with the power of AI-driven NPCs (non-player characters)?&lt;/p>
&lt;h2 id="introducing-odin-the-real-time-voice-and-data-sync-sdk">Introducing ODIN: The Real-Time Voice and Data Sync SDK&lt;/h2>
&lt;p>We&amp;rsquo;ve already made &lt;a href="https://docs.4players.io/voice/">SDKs&lt;/a>
available for C, C#, Unity, Unreal Engine 4 and 5, the Apple
ecosystem, and the web. Our most recent addition is the &lt;a href="https://docs.4players.io/voice/nodejs/">NodeJS SDK&lt;/a>
,
enabling server-side data and audio reception, which can be used for recording, transcribing, and interacting with
other peers via data channels.&lt;/p>
&lt;h2 id="ai-driven-npcs-a-new-era-of-immersive-gaming">AI-Driven NPCs: A New Era of Immersive Gaming&lt;/h2>
&lt;p>Today&amp;rsquo;s NPCs in multiplayer games are typically limited in their capabilities, not networked, and unable to replace real
players. By leveraging AI-driven NPCs, we can create more interactive and engaging gaming environments that attract and
retain players.&lt;/p>
&lt;p>For example, imagine a barkeeper in a metaverse-like application. This AI-driven bot could receive and transcribe nearby
players&amp;rsquo; audio, feed it into a language model like ChatGPT, generate a response, and play it back via text-to-speech in
the game.&lt;/p>
&lt;p>&lt;a href="https://www.linkedin.com/posts/tompascoe_videogames-vr-ai-ugcPost-7054408392555003904-zA28/">While there have been experiments&lt;/a>
using this approach, most have been limited to client-side, single-player experiences. In multiplayer environments,
you need a solution that works for all users in the same area.&lt;/p>
&lt;p>That&amp;rsquo;s where ODIN comes in. With our cross-platform real-time voice and data
sync SDK, every player in the same room can talk and interact with each other. And now, with the NodeJS SDK, a
player can also be an AI-driven bot, with the full potential of a human player. These bots are lightweight,
horizontally scalable, and receive individual audio streams and the same data as human players.&lt;/p>
&lt;p>When a server spawns an NPC, it can trigger the launch of a corresponding bot running ODIN&amp;rsquo;s NodeJS SDK, listening to
audio and data channels to interact with nearby players. If the NPC is killed or removed from the game, the bot will be
stopped. As it&amp;rsquo;s just a simple NodeJS script, you can run them in a Kubernetes cluster.&lt;/p>
&lt;h2 id="get-started-with-odin-today">Get Started with ODIN Today&lt;/h2>
&lt;p>If you&amp;rsquo;re interested in exploring these next-generation applications and experiments, download our
&lt;a href="https://docs.4players.io/voice/">SDK&lt;/a>
and get started for free. Our free tier includes up to 25 concurrent users, more than
enough for your experiments. Don&amp;rsquo;t miss the opportunity to revolutionize multiplayer gaming with AI-driven NPCs and
immersive experiences powered by ODIN.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/ai-driven-npcs.jpg"/></item><item><title>Introducing the ODIN Node.js SDK: Unlock Server-Side Capabilities for Voice Communication</title><link>https://odin.4players.io/blog/introducing-the-odin-nodejs-sdk-unlock-server-side-capabilities-for-voice-communication/</link><pubDate>Fri, 14 Apr 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-the-odin-nodejs-sdk-unlock-server-side-capabilities-for-voice-communication/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;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.&lt;/p>
&lt;h2 id="odin-nodejs-sdk-overview">ODIN Node.js SDK Overview&lt;/h2>
&lt;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.&lt;/p>
&lt;h3 id="key-differences-between-odin-nodejs-sdk-and-web-sdk">Key Differences between ODIN Node.js SDK and Web SDK&lt;/h3>
&lt;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:&lt;/p>
&lt;ul>
&lt;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.&lt;/li>
&lt;li>The Node.js SDK is optimized for server-side use cases, while the Web SDK is tailored for browser-based applications.&lt;/li>
&lt;/ul>
&lt;h3 id="prerequisites-and-dependencies">Prerequisites and Dependencies&lt;/h3>
&lt;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.&lt;/p>
&lt;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.&lt;/p>
&lt;h2 id="usage-examples">Usage Examples&lt;/h2>
&lt;p>We have created two simple usage examples that you can find in the &lt;code>tests&lt;/code> folder of the NPM package.&lt;/p>
&lt;h3 id="audio-recording-and-transcription">Audio Recording and Transcription&lt;/h3>
&lt;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.&lt;/p>
&lt;h3 id="sending-music">Sending Music&lt;/h3>
&lt;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.&lt;/p>
&lt;p>Detailed instructions on how to run the music sending example can be found in the &lt;code>tests/sending-audio&lt;/code> folder of
the NPM package.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;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.&lt;/p>
&lt;p>Get started with the ODIN Node.js SDK today and explore the incredible potential of server-side voice communication in
your applications!&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.npmjs.com/package/@4players/odin-nodejs">ODIN Node.js SDK on NPM&lt;/a>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/node-js-release-0.7.3.jpg"/></item><item><title>Introducing ODIN Voice SDK 1.5.0: Enhancing 3D Spatial Voice Communication for Unreal Engine Games</title><link>https://odin.4players.io/blog/introducing-odin-voice-sdk-1.5.0-enhancing-3d-spatial-voice-communication-for-unreal-engine-games/</link><pubDate>Tue, 04 Apr 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-odin-voice-sdk-1.5.0-enhancing-3d-spatial-voice-communication-for-unreal-engine-games/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;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.&lt;/p>
&lt;h2 id="whats-new-in-odin-voice-sdk-150">What&amp;rsquo;s new in ODIN Voice SDK 1.5.0&lt;/h2>
&lt;h3 id="general">General&lt;/h3>
&lt;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.&lt;/p>
&lt;h3 id="new-features">New Features&lt;/h3>
&lt;ul>
&lt;li>Unreal Engine 5.2 Support
We&amp;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.&lt;/li>
&lt;li>Reverse Stream Processing for Echo Cancellation
To provide an even clearer communication experience, we&amp;rsquo;ve added reverse stream processing for echo cancellation. This
feature uses the engine master submix to minimize echo and improve overall audio quality.&lt;/li>
&lt;li>&lt;code>UOdinAudioCapture&lt;/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.&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h3>
&lt;ul>
&lt;li>Audio Attenuation Settings Fix
We&amp;rsquo;ve fixed a bug where audio attenuation settings were not being applied correctly, ensuring that distance-based
audio adjustments work as intended.&lt;/li>
&lt;li>Active Media Stream Objects Garbage Collection Fix
We&amp;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.&lt;/li>
&lt;li>Blueprint Only Builds on Linux Fix
Developers working on Linux can now rejoice as we&amp;rsquo;ve resolved the issue with blueprint-only builds, making it
easier to develop and deploy projects across platforms.&lt;/li>
&lt;/ul>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;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.&lt;/p>
&lt;p>We&amp;rsquo;re committed to continuously improving and expanding our SDK, and we can&amp;rsquo;t wait to see the incredible projects our
community will build using these new capabilities. Don&amp;rsquo;t hesitate to share your feedback and experiences with us, as we
value your input in shaping the future of ODIN Voice SDK.&lt;/p>
&lt;p>Get started with ODIN Voice SDK 1.5.0 today and elevate your in-game voice communication like never before!&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/4Players/odin-sdk-unreal/releases/tag/v1.5.0">Download ODIN Voice SDK 1.5.0&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">ODIN SDK @ Unreal Marketplace&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Join our Discord&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://docs.4players.io/voice/unreal/">Read the Documentation&lt;/a>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.5.0.jpg"/></item><item><title>Introducing Web SDK 0.15.1</title><link>https://odin.4players.io/blog/introducing-web-sdk-0151-enhanced-cross-platform-interoperability-for-real-time-voice-communication/</link><pubDate>Tue, 14 Mar 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/introducing-web-sdk-0151-enhanced-cross-platform-interoperability-for-real-time-voice-communication/</guid><description>&lt;h1 id="introduction">Introduction&lt;/h1>
&lt;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.&lt;/p>
&lt;h2 id="whats-new-in-web-sdk-0151">What&amp;rsquo;s new in Web SDK 0.15.1&lt;/h2>
&lt;h3 id="bugfixes">Bugfixes&lt;/h3>
&lt;p>Speech Detection Settings in VAD Processor: We&amp;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.&lt;/p>
&lt;h3 id="improvements">Improvements&lt;/h3>
&lt;p>Updated QoS Metrics for Native Client Compatibility: In this update, we&amp;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.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;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.&lt;/p>
&lt;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.&lt;/p>
&lt;p>Upgrade to Web SDK 0.15.1 today and unlock the full potential of cross-platform voice communication in your projects!&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.npmjs.com/package/@4players/odin">Install Odin Web SDK 0.15.1&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://4np.de/discord" target="_blank" rel="noopener noreferrer">Join our Discord&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://docs.4players.io/voice/web/">Read the Documentation&lt;/a>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/web-release-0.15.1.jpg"/></item><item><title>Announcing Partnership with Combat Waffle Studios</title><link>https://odin.4players.io/blog/announcing-partnership-with-combat-waffle-studios/</link><pubDate>Sat, 04 Mar 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/announcing-partnership-with-combat-waffle-studios/</guid><description>&lt;p>We are excited to announce our partnership with &lt;a href="https://combatwaffle.com">Combat Waffle Studios Inc&lt;/a>
, who will be launching their latest game - &lt;a href="https://ghostsoftabor.com">Ghosts of Tabor&lt;/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.&lt;/p>
&lt;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&amp;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.&lt;/p>
&lt;br />
&lt;div style="position: relative; padding-bottom: 60%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube-nocookie.com/embed/Lolq5yaIbWo?rel=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />
&lt;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.&lt;/p>
&lt;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&amp;rsquo;s launch. We can&amp;rsquo;t wait to hear from the players about their experiences and how they fought their way through the island of Tabor.&lt;/p>
&lt;p>In conclusion, if you&amp;rsquo;re a fan of survival games, first-person shooters, and immersive VR experiences, you won&amp;rsquo;t want to miss Ghosts of Tabor. Get ready to explore, loot, and shoot your way to survival, and don&amp;rsquo;t forget to let us know how you fared!&lt;/p>
&lt;p>&lt;a href='https://lnkd.in/eHum2cyV' target='_blank' rel="noopener" class="btn btn-primary">Join the Ghosts of Tabor Discord Server&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/partnership_combatwaffle.jpg"/></item><item><title>Announcing Partnership with SpecPixel Entertainment</title><link>https://odin.4players.io/blog/announcing-partnership-with-specpixel-entertainment/</link><pubDate>Tue, 28 Feb 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/announcing-partnership-with-specpixel-entertainment/</guid><description>&lt;p>Today, we&amp;rsquo;re thrilled to announce our exciting new partnership with &lt;a href="https://www.specpixel.com">SpecPixel Entertainment&lt;/a>
, in which we will be supporting their latest game - &lt;a href="https://www.specpixel.com/games/new-citizen">New Citizen&lt;/a>
- with our state-of-the-art ODIN in-game voice chat and high-performance servers from 4Netplayers!&lt;/p>
&lt;p>New Citizen is the highly anticipated RPG multiplayer sim revival set to launch in 2023, and we can&amp;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!&lt;/p>
&lt;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&amp;rsquo;ll feel like you&amp;rsquo;re truly a part of this thrilling new world.&lt;/p>
&lt;p>Check out the latest trailer for New Citizen right here:&lt;/p>
&lt;br />
&lt;div style="position: relative; padding-bottom: 60%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube-nocookie.com/embed/_PKeKQhMA6g?rel=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />
&lt;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&amp;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&amp;rsquo;re honored to be a part of this partnership and can&amp;rsquo;t wait to see what the future holds!&lt;/p>
&lt;p>&lt;a href='https://discord.com/invite/bpwDzZSFeE' target='_blank' rel="noopener" class="btn btn-primary">Join the New Citizen Discord Server&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/partnership_specpixel.jpg"/></item><item><title>Why should game developers offer dedicated game servers to their players?</title><link>https://odin.4players.io/blog/why-should-game-developers-offer-dedicated-game-servers-to-their-players/</link><pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/why-should-game-developers-offer-dedicated-game-servers-to-their-players/</guid><description>&lt;p>We all love multiplayer games, and we can’t get enough of the thrill they give us. However, we also can’t ignore all the
troubles they pose for developers and players. For most teams, creating a top-tier multiplayer experience requires years
of dedication, as well as a larger team, with more comprehensive knowledge.&lt;/p>
&lt;p>Today, we would like to discuss how developers can offer a simple solution to players, improving their gaming experience
and their safety, without excessively increasing their production costs: premium dedicated game servers. Over time,
dedicated game servers have changed from being the only option for playing games to being an option only players
interested in avoiding public servers would use. As a result, the games scene has evolved, and not always in a positive
way. Unfortunately, the level of exposure the players are subjected to often means they are subject to harassment and
trolling as well as psychological and physical threats. As a result of these behaviors, a very negative image of games
can be projected onto parents all over the world. This is also a huge deterrent for many prospects when it comes to
choosing the games they want to play. It also disrupts the benefits of playing multiplayer games. Even though several
games offer dedicated server capabilities directly, the majority (&amp;gt;90%) of game servers currently rented by gamers are
public servers (i.e. not password protected).&lt;/p>
&lt;p>Moreover, players’ profiles changed significantly, with more players interested in understanding the inner workings of
their favorite games, as well as having more control over their gameplay experiences. Players moved from their passive
roles as mere spectators to being part of an active community, interested in being heard, respected, and sometimes even
influencing design and business decisions.&lt;/p>
&lt;p>With the current state of the games industry, it is not advisable to alienate your player base. Therefore, offering
private dedicated servers for your community and informing them about their benefits is not only simple but also a
monetization opportunity for developers and publishers.&lt;/p>
&lt;p>Private dedicated game servers can be a helpful tool to help fight harassment in online games. This is because they can
provide a more secure and controlled environment where the community itself can enforce rules and policies. For example,
dedicated servers allow players to block or filter out toxic or harassing messages, and they additionally can ban
players that violate the rules. When done properly (i.e. using server-side input validation), cheating can also be
prevented quite effectively. It is also imperative for game developers and administrators to have clear policies in
place. This will enable them to educate players about appropriate behaviour and how to report harassment when it occurs.&lt;/p>
&lt;h2 id="why-not-use-only-peer-to-peer-servers">Why not use ONLY peer-to-peer servers?&lt;/h2>
&lt;p>Although the peer-to-peer configuration allows for fast development iteration and its operation is cheap and requires
zero maintenance, there are an array of issues that would need to be taken into consideration:&lt;/p>
&lt;ul>
&lt;li>As servers are temporary, there is a lot of bookkeeping involved (i.e. lobbies, friend lists, matchmaking).&lt;/li>
&lt;li>Any form of persistence must be implemented in separate cloud services&lt;/li>
&lt;li>Networking issues (firewalls, NAT, etc) might be difficult to solve&lt;/li>
&lt;li>Risk of low performance (bandwidth and CPU issues on the host)&lt;/li>
&lt;li>Anti-cheat measures are very difficult to implement&lt;/li>
&lt;li>The game might be blamed for the issues, instead of the host&lt;/li>
&lt;li>Works only for a handful of simultaneous players&lt;/li>
&lt;/ul>
&lt;p>Moreover, peer-to-peer hosting limits the options for game design, including the number of players and persistence. To
work around those limitations, game developers are faced with complex workloads. Even though it is a cheaper solution
than dedicated servers, there are ways to decrease costs by working with server hosts.&lt;/p>
&lt;h2 id="why-use-dedicated-servers">Why use dedicated servers?&lt;/h2>
&lt;p>Although developers can use peer-to-peer mode (local network) as a base, there are several additional reasons why game
developers should consider deploying dedicated game servers once in production:&lt;/p>
&lt;h3 id="improved-performance">Improved performance&lt;/h3>
&lt;p>Dedicated game servers can provide a more stable and higher-quality experience for players due to devoted resources like
CPUs, memory and bandwidth (headless). In addition to preventing rage quitting, this will improve game retention and
increase gameplay time. Dedicated game servers can improve game performance in many ways:&lt;/p>
&lt;h3 id="improved-stability">Improved stability&lt;/h3>
&lt;p>Dedicated game servers are dedicated machines specifically designed to run the game, which means they are less prone to
performance issues such as lag, dropped connections, and other disruptions. There are no networking issues, as clients
connect to the server with exposed and stable IP addresses or domains.&lt;/p>
&lt;h3 id="better-hardware">Better hardware&lt;/h3>
&lt;p>Dedicated game servers are often equipped with more powerful hardware than a player&amp;rsquo;s personal computer, which can
result in a smoother, more stable experience for players.&lt;/p>
&lt;h3 id="optimised-network-infrastructure">Optimised network infrastructure&lt;/h3>
&lt;p>Dedicated game servers are typically hosted in data centres with optimized network infrastructure, which can help reduce
latency and improve the overall performance of the game.&lt;/p>
&lt;h3 id="fully-customizable">Fully Customizable&lt;/h3>
&lt;p>Dedicated servers give developers the option to offer a more extensive level of customizability to players, such as the
ability to mod the game or change certain gameplay settings.&lt;/p>
&lt;h3 id="modding">Modding&lt;/h3>
&lt;p>Many games allow players to create and install mods, which are custom modifications to the game that can add customized
features, change gameplay mechanics, or alter the visual appearance of the game. Dedicated game servers can make it
easier for players to install and use mods because they do not have to worry about compatibility issues with their
personal computers.&lt;/p>
&lt;h4 id="custom-game-modes-and-maps">Custom game modes and maps&lt;/h4>
&lt;p>Dedicated servers can allow developers to offer custom game modes or settings that are not available in the official
retail version of the game. For example, a developer could create a &amp;ldquo;hardcore&amp;rdquo; mode that increases the difficulty of the
game, or a &amp;ldquo;creative&amp;rdquo; mode that allows players to build and create without the constraints of normal gameplay.&lt;/p>
&lt;h3 id="community-building">Community building&lt;/h3>
&lt;p>Dedicated game servers can foster a sense of community among players by providing a central location for them to play
and interact. Additionally, it encourages players to do the admin work on their own servers, reducing the workload for
developers.&lt;/p>
&lt;p>Some other ways in which dedicated game servers can contribute to community building include:&lt;/p>
&lt;h3 id="in-game-chat">In-game chat&lt;/h3>
&lt;p>Many games with dedicated servers include an in-game chat function that allows players to communicate with each other
while playing in a more private environment. This can help foster a sense of community and encourage players to form
friendships and connections with one another. Dedicated game servers also offer the option to use TeamSpeak for
communication, creating a more private environment for discussion.&lt;/p>
&lt;h3 id="clan-or-guild-support">Clan or guild support&lt;/h3>
&lt;p>Some games with dedicated servers offer support for clans or guilds, groups of players that come together to play and
socialise. This can help players feel like they are part of a larger community and give them a sense of belonging.&lt;/p>
&lt;h3 id="server-specific-events">Server-specific events&lt;/h3>
&lt;p>Some dedicated game servers may host special events or tournaments that are only available to players on that server.
This can help bring players together and create a sense of community around the server.&lt;/p>
&lt;h3 id="full-control">Full Control&lt;/h3>
&lt;p>By hosting their own dedicated game servers, players have better control over their experience and can manage difficult
and/or disturbing situations in a safe and fast manner.&lt;/p>
&lt;h3 id="balancing">Balancing&lt;/h3>
&lt;p>Dedicated game servers allow developers to fine-tune the game&amp;rsquo;s balance, ensuring that it is fair and enjoyable for all
players.&lt;/p>
&lt;h3 id="cheating-prevention">Cheating prevention&lt;/h3>
&lt;p>Dedicated game servers can help prevent cheating by giving developers more control over the game environment. If done
right (i.e. server-side input validation) cheating can be prevented quite effectively. This can create a more fair and
more enjoyable experience for all players.&lt;/p>
&lt;h3 id="more-players">More players&lt;/h3>
&lt;p>Dedicated servers can help attract more players to a game because they offer a more stable and smoother gaming
experience, compared to playing on a shared server. Additionally, dedicated servers allow for more customization and can
handle larger player capacities. This can make the game more attractive to players who are looking for a more immersive
and scalable experience. It can also keep them engaged for a longer period of time&lt;/p>
&lt;p>Another benefit of dedicated servers is that they can provide a more secure environment for players, which can be
especially relevant for games that involve in-game purchases or other sensitive information.&lt;/p>
&lt;h2 id="cloud-services-vs-server-hosts">Cloud services vs. Server Hosts&lt;/h2>
&lt;p>As explained previously, the use of dedicated game servers can lead to a more stable, high-quality gameplay experience
for players. And happier players mean better retention, more spending, and longer gameplay sessions.&lt;/p>
&lt;p>Although cloud services in general offer dedicated servers, using server hosts not only decreases operational complexity
exponentially but also allows developers to avoid a surprise increase in their expenses. This is because most hosts have
fixed pricing.&lt;/p>
&lt;p>Additionally, the server hosts:&lt;/p>
&lt;ul>
&lt;li>Are experts in hosting game servers&lt;/li>
&lt;li>Handle all the extensive work of deploying updated versions of the server&lt;/li>
&lt;li>Typically have specialized web interfaces and APIs for setting up game servers&lt;/li>
&lt;li>Most have built-in DDoS protection (not an easy task as most game servers use UDP which is difficult to protect)&lt;/li>
&lt;li>Take care of all GDPR issues&lt;/li>
&lt;li>Are much cheaper than cloud services as the infrastructure and pricing models are specialized in 24/7 server
operations&lt;/li>
&lt;li>Work for many simultaneous players&lt;/li>
&lt;li>Typically provide support for (Admin-) mods&lt;/li>
&lt;li>Most allow gamers to rent their own servers (bringing in that community character)&lt;/li>
&lt;/ul>
&lt;p>Are you developing or publishing multiplayer games and would like to offer premium, dedicated game servers to your
players? We would love to support you in this! Our
product, &lt;a href="https://www.4netplayers.com/">4NetPlayers&lt;/a>
, offers VIP dedicated game servers, powered
by a global network, including TeamSpeak server and SinusBot.&lt;/p>
&lt;p>Additionally, we might even be able to help you monetize your dedicated servers. Yes, you can earn money working with
4NetPlayers!&lt;/p>
&lt;p>Interested? Let’s talk and take your games to the next level together.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/4np_streamer_800.jpg"/></item><item><title>ODIN: What the new SDK can do for you</title><link>https://odin.4players.io/blog/odin-what-the-new-sdk-can-do-for-you/</link><pubDate>Thu, 05 Jan 2023 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/odin-what-the-new-sdk-can-do-for-you/</guid><description>&lt;p>Last year 4Players launched its latest offering, ODIN, revolutionizing gaming experiences with cutting-edge spatial
audio features. ODIN is an audio SDK that offers crystal-clear voice chat. It can be seamlessly integrated into apps and
games built with Unity and Unreal Engine 4 and 5. Native Swift support for Apple devices and a web SDK for use on
websites and web-based applications are available as well.&lt;/p>
&lt;p>The ODIN SDK doesn’t only offer immersive experiences in the world of gaming, but it’s also metaverse-ready, supporting
voice experiences for the new age of interactive media. ODIN’s prestige is bolstered by the team of veterans who created
it - seasoned developers with a true passion and understanding of the games and tech landscapes.&lt;/p>
&lt;h2 id="the-next-generation-of-in-game-audio">The next generation of in-game audio&lt;/h2>
&lt;p>Following the success of 4NetPlayers, our high-end, low-latency server hire service, ODIN’s tech levels up in-game
multiplayer communications, with spatial audio that makes voice chat feel more real than ever before. These unique
features allow users to integrate 3D spatial real-time voice in no time, and without complicated state management. Of
course, voice functionality like full-volume radio communication independent of players&amp;rsquo; position is also possible with
ease, and can even be combined with 3D spatial audio.&lt;/p>
&lt;p>Cross-platform functionality and low latency are two of the key tenets that ODIN holds over other voice services.
Developers are encouraged to take full advantage of this. With ODIN, users can also select the zero maintenance solution
with hosted services in the 4Players Cloud at 14 locations worldwide. However, if you want to host ODIN servers yourself
in MS Azure, Google Cloud, AWS, Digital Ocean or any other known service provider, this is possible too.&lt;/p>
&lt;h2 id="pricing-structure">Pricing structure&lt;/h2>
&lt;p>Self-server hosting can be incredibly valuable for developers with cross-platform game creation in mind. This service is
possible for a monthly fee, based on the running instances in that month (€350 per instance and month plus taxes). ODIN
servers report their state - for billing reasons - to 4Players. If a developer wants to run servers in an isolated
environment - without the need for an internet connection - this can be done via the perpetual license, a one-time
payment of €10,000 per instance.&lt;/p>
&lt;p>ODIN’s price is flexible and scalable depending on the scope of the game you are using it for. Not only this, but it is
cheaper than leading competitors. For indie projects, such as a small-scale MMO, the price for incorporating ODIN in a
cloud hosting capacity is a tenth of that of a competitor, amounting to only €1,200.&lt;/p>
&lt;h2 id="ease-of-use">Ease of use&lt;/h2>
&lt;p>Dedicated to privacy and security, ODIN offers end-to-end encryption and is fully GDPR compliant. Truly
developer-friendly and quick to integrate, with the process taking under a day to complete - the game engine does the
work. With a generic API, the SDK is flexible in its integration, giving ultimate freedom to the developer.&lt;/p>
&lt;p>Using the tool is as simple as attaching it to an in-game environment, and then ODIN takes care of the rest. ODIN is not
a layer on top of or beside the game engine that developers need to constantly feed with data. Instead, it is deeply
integrated into Unity and Unreal, leveraging the native Unity AudioSource API for playback so that voice is part of the
game engines´ scene. This, in turn, enables developers to use standard Unity tools like AudioMixer. ODIN is also fully
integrated into the Unreal engine&amp;rsquo;s sound. The ODIN SDK for Unreal enables you to add real-time VoIP communication to
your Unreal Engine 4/5 game, thus making it more social and interactive. The audio is played via a synth component and
thus integrates natively into the entire Unreal Audio Engine with all the features that come with it.&lt;/p>
&lt;p>ODIN also comes with custom-built audio occlusion APIs that will simulate the effect of thick walls and direction. The
tool’s servers are horizontally scalable and are a single binary, available for all server platforms such as Windows and
Linux (x84 and ARM). Developers can download the server and add a custom license in your dashboard, after this, 4Players
will provide extensive documentation on how to run the server.&lt;/p>
&lt;p>ODIN is currently being used by developers all over the world, on both small-scale independent games and large-scale,
ambitious titles. Make ODIN integration one of your New Year’s resolutions for 2023!&lt;/p>
&lt;div class="box dark highlight">
&lt;div class="box-content elevation-01dp border-elevation-06dp rounded-3 border">&lt;p>To learn more about ODIN’s technical applications, you can visit our GitHub page &lt;a href="https://github.com/4Players">here&lt;/a>
.&lt;/p>
&lt;/div>
&lt;/div></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-feature-chart.jpg"/></item><item><title>Visualizing occlusion in real-time in Unity</title><link>https://odin.4players.io/blog/visualizing-occlusion-in-unity/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/visualizing-occlusion-in-unity/</guid><description>&lt;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 - ODIN Voice.
Users could enjoy one of our demos in real-time and talk to each other enjoying the 3D spatial audio.&lt;/p>
&lt;p>But, it&amp;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.&lt;/p>
&lt;p>So, we decided to create a video to show-off what ODIN is all about and what 3D spatial audio is. It&amp;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.&lt;/p>
&lt;p>Here is the video we came up with:&lt;/p>
&lt;div style="position: relative; padding-bottom: 77%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube-nocookie.com/embed/k-3BSbxCfAE?rel=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen="" title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;p>A very important part of ODIN is its effortless 3D spatial audio system with audio occlusion. So, what does that mean:&lt;/p>
&lt;ul>
&lt;li>If you are standing next to someone, you hear them loud and clear.&lt;/li>
&lt;li>If you are standing behind someone, you hear them less loud.&lt;/li>
&lt;li>If you are standing behind a wall, you hear them even less loud or you don&amp;rsquo;t hear them at all, depending on
thickness and material of the wall.&lt;/li>
&lt;li>If someone stands right next to you, you&amp;rsquo;ll hear them on your right ear&lt;/li>
&lt;li>If someone walks away volume decreases with the distance until you don&amp;rsquo;t hear them anymore.&lt;/li>
&lt;/ul>
&lt;p>So, it&amp;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.&lt;/p>
&lt;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&amp;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&amp;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&amp;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.&lt;/p>
&lt;h2 id="preparing-the-video">Preparing the video&lt;/h2>
&lt;p>When creating a video, it&amp;rsquo;s always important to have a good idea of the goal. In this case, we had these goals:&lt;/p>
&lt;ul>
&lt;li>Visualize audio volume fall-off (i.e. full volume close and silent &amp;ldquo;far&amp;rdquo; away)&lt;/li>
&lt;li>Visualizing the nature of voice&lt;/li>
&lt;li>Visualize audio occlusion&lt;/li>
&lt;li>Make users hear the voice of the person simulated in the video&lt;/li>
&lt;/ul>
&lt;p>We came up with this idea to achieve these goals:&lt;/p>
&lt;ul>
&lt;li>We have a simple scene in a Tron-style like look &amp;amp; feel&lt;/li>
&lt;li>Our player (i.e. the player that &amp;ldquo;simulates&amp;rdquo; the viewer of the video) is located at the bottom center of the screen.&lt;/li>
&lt;li>Another player is running around and talking at the same time&lt;/li>
&lt;li>A few cubes are distributed around our scene acting as walls dampening the sound if between the player and the
listener.&lt;/li>
&lt;li>We try to visualize the audio and audio effects&lt;/li>
&lt;/ul>
&lt;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&amp;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 &lt;a href="https://docs.4players.io/voice/unity/">ODIN Unity SDK&lt;/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.&lt;/p>
&lt;p>We also used our Audio Occlusion system that is part of our &lt;a href="https://github.com/4Players/odin-unity-demo#audio">Unity demo&lt;/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 &lt;code>OcclusionAudioListener&lt;/code> script to the listener player
at the bottom of the screen and attached &lt;code>AudioObstacle&lt;/code> script to the cubes with various different
&lt;code>AudioEffectDefition&lt;/code> assets like concrete, and fully silence.&lt;/p>
&lt;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 &amp;ldquo;joystick&amp;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.&lt;/p>
&lt;div class="box dark info">
&lt;div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top"> &lt;i class="fa fa-info-circle">&lt;/i> Info &lt;/div>
&lt;div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">&lt;p>One important thing to remember. In Unity you have the &lt;code>Audio Listener&lt;/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 &lt;code>Audio Listener&lt;/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.&lt;/p>
&lt;/div>
&lt;/div>
&lt;h2 id="visualizing-audio-volume-fall-off">Visualizing audio volume fall-off&lt;/h2>
&lt;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 &amp;ldquo;fall-off&amp;rdquo; setting that you lets you adjust
in detail how this works. Here is an image of the settings of the &lt;code>Audio Source&lt;/code>:&lt;/p>
&lt;figure style="max-width: 400px">&lt;a href="https://odin.4players.io/images/blog/visualizing-occlusion-unity-audio-source.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/visualizing-occlusion-unity-audio-source.jpg" width="400"/>&lt;/a>
&lt;/figure>
&lt;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&amp;rsquo;s basically the same as a point light that attenuates over distance until it has no effect.&lt;/p>
&lt;p>To do that, we created these game objects within Unity:&lt;/p>
&lt;ul>
&lt;li>Player (center of the player)
&lt;ul>
&lt;li>Plane (with our audio visualization shader and materials)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;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&amp;rsquo;s attached to the plane.&lt;/p>
&lt;p>The plane has a standard scale of &lt;code>1,1,1&lt;/code> and therefore is &lt;code>10 units long&lt;/code> and &lt;code>10 units&lt;/code> wide and thus extends &lt;code>5 units&lt;/code>
from center. As you may have noticed, we set the audio falloff to &lt;code>5 units&lt;/code>, so that&amp;rsquo;s a good fit. Our plane is large
enough to visualize the audio volume fall-off.&lt;/p>
&lt;p>This is the simple Shader Graph for this shader and what it looks like:&lt;/p>
&lt;figure style="max-width: 700px">&lt;a href="https://odin.4players.io/images/blog/simple-audio-occlusion-shader.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/simple-audio-occlusion-shader.jpg" width="700"/>&lt;/a>
&lt;/figure>
&lt;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&amp;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 &lt;code>radius&lt;/code> which we set to 5 to be corresponding with the planes width and the fall-off settings of the
&lt;code>Audio Source&lt;/code>. Calculating the &lt;code>On Minus&lt;/code> of that value we have a nice alpha value which is &lt;code>1.0&lt;/code> in
the center of the plane and linearly falls-off to &lt;code>0.0&lt;/code> at the radius of the audio circle which is also the outer edge
of the plane.&lt;/p>
&lt;h2 id="visualizing-the-nature-of-voice">Visualizing the nature of voice&lt;/h2>
&lt;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 &amp;ldquo;fog of war&amp;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:&lt;/p>
&lt;figure>&lt;img src="https://odin.4players.io/images/blog/soundwaves.jpg"/>
&lt;/figure>
&lt;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:&lt;/p>
&lt;ul>
&lt;li>Sample audio in real-time and create a heightmap of the audio. Loud pieces will be white, while silent pieces will
be black.&lt;/li>
&lt;li>Feed that shader into the shader to visualize the audio ripples.&lt;/li>
&lt;/ul>
&lt;p>How do we do that:&lt;/p>
&lt;ul>
&lt;li>Create a texture of &lt;code>128x1&lt;/code> and make it writable.&lt;/li>
&lt;li>Create an array of floats of size &lt;code>128&lt;/code> that will hold the heightmap (you&amp;rsquo;ll see later why)&lt;/li>
&lt;li>Every few frames
&lt;ul>
&lt;li>move the texture by one pixel to the right - this will create the impression of waves moving to
the outside&lt;/li>
&lt;li>sample the current audio loundness in the range of &lt;code>0.0&lt;/code> to &lt;code>1.0&lt;/code> and write it to the texture at
position &lt;code>0,0&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;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.&lt;/p>
&lt;div class="box dark info">
&lt;div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top"> &lt;i class="fa fa-info-circle">&lt;/i> Info &lt;/div>
&lt;div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">&lt;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&amp;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.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>Here are a few snippets:&lt;/p>
&lt;div class="example">
&lt;div class="example-title">
&lt;span>
&lt;i class="fas fa-code">&lt;/i>
&lt;span class="method"> AudioVisualizer script &lt;/span>
&lt;/span>
&lt;/div>
&lt;div class="example-content">&lt;pre>&lt;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 &amp;lt; 128; i++)
{
loundness[i] = Color.black;
}
if (!audioSource)
{
audioSource = GetComponent&amp;lt;AudioSource&amp;gt;();
if (!audioSource)
{
Debug.LogError(&amp;quot;Voice Texture needs to have an AudioSource assigned or must be part of the Component&amp;quot;);
}
}
clipSampleData = new float[sampleDataLength];
}
private void Start()
{
if (!plane)
{
plane = GetComponentInChildren&amp;lt;AudioVisualizerPlane&amp;gt;();
if (!plane)
{
Debug.LogError(&amp;quot;You need to create a plane as children and assign the AudioVisualizerPlane component to it&amp;quot;);
}
if (sampleAudio)
{
var renderer = plane.GetComponent&amp;lt;Renderer&amp;gt;();
renderer.material.SetTexture(&amp;quot;_RippleTexture&amp;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&amp;gt;=nextUpdate){
//Debug.Log(Time.time+&amp;quot;&amp;gt;=&amp;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 &amp;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;
}
}
&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>Sampling audio gives you quite small float values. I used a scale of &lt;code>10.0f&lt;/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 &lt;code>100&lt;/code> samples.&lt;/p>
&lt;p>This is what the texture looks like:&lt;/p>
&lt;figure>&lt;img src="https://odin.4players.io/images/blog/ripple-texture.jpg"/>
&lt;/figure>
&lt;p>Looks great, doesn&amp;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:&lt;/p>
&lt;ul>
&lt;li>We already have a value from &lt;code>0.0&lt;/code> to &lt;code>1.0&lt;/code> indicating the radius ratio from the center to the outside, meaning
that we are close to the center at &lt;code>0.0&lt;/code> and close to the outside at &lt;code>1.0&lt;/code>.&lt;/li>
&lt;li>Remember that ripple texture with the hightmap moving from left to write. Well, our radius ratio is the x coordinate
of the texture.&lt;/li>
&lt;li>So, this is basically the &lt;code>u&lt;/code> of the texture sample vector. We just feed that value in the texture sampler and
multiple that value (which is from &lt;code>0.0&lt;/code> to &lt;code>1.0&lt;/code>) with a color of the ripples.&lt;/li>
&lt;li>We put that value in the &lt;code>emission&lt;/code> slot of our fragment shader&lt;/li>
&lt;/ul>
&lt;p>That&amp;rsquo;s it. Looks great, doesn&amp;rsquo;t it:&lt;/p>
&lt;figure style="max-width: 700px">&lt;a href="https://odin.4players.io/images/blog/visualize-audio-volume-ripples.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/visualize-audio-volume-ripples.jpg" width="700"/>&lt;/a>
&lt;/figure>
&lt;h2 id="visualizing-audio-occlusion">Visualizing audio occlusion&lt;/h2>
&lt;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 &amp;ldquo;audio-shadow&amp;rdquo; to be casted by the cubes.&lt;/p>
&lt;p>I try to explain my solution to that in this ugly, little scribble:&lt;/p>
&lt;figure>&lt;img src="https://odin.4players.io/images/blog/audio-occlusion-scribble.jpg"/>
&lt;/figure>
&lt;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&amp;rsquo;t got a direct line of sight, as the center of the plance is blocked by
the occluders.&lt;/p>
&lt;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 &lt;strong>is a custom 360° depth buffer around the center of our plane holding the distance to
occluders.&lt;/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&amp;rsquo;t render anything. If not, we can render our audio circle with the fall-off and audio ripples as we
did before.&lt;/p>
&lt;h3 id="creating-the-distance-buffer">Creating the distance buffer&lt;/h3>
&lt;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 &lt;code>Player&lt;/code> game object. Our hierarchy will
look like this:&lt;/p>
&lt;ul>
&lt;li>Player (center of the player)
&lt;ul>
&lt;li>Occlusion Camera&lt;/li>
&lt;li>Plane (with our audio visualization shader and materials)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>We create a new script and attach it to our occlusion camera:&lt;/p>
&lt;div class="example">
&lt;div class="example-title">
&lt;span>
&lt;i class="fas fa-code">&lt;/i>
&lt;span class="method"> AudioVisualizer script &lt;/span>
&lt;/span>
&lt;/div>
&lt;div class="example-content">&lt;pre>&lt;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&amp;lt;Camera&amp;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 &amp;lt;&amp;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);
}
}
&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>We create a new &lt;code>RenderTexture&lt;/code> and set it to a cubemap. We set the format to &lt;code>R32_SFloat&lt;/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.&lt;/p>
&lt;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 &lt;a href="https://forum.unity.com/members/bgolus.163285/">bgolus&lt;/a>
always show this
image which shows that very good and that has been very helpful for me:&lt;/p>
&lt;figure>&lt;img src="https://odin.4players.io/images/blog/zdepthvsdistance.png"/>
&lt;/figure>
&lt;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.&lt;/p>
&lt;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&amp;rsquo;t figure
it out!&lt;/p>
&lt;p>But, I didn&amp;rsquo;t need to:&lt;/p>
&lt;ul>
&lt;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 &amp;ldquo;object space&amp;rdquo;, which makes things a lot easier.&lt;/li>
&lt;li>So, we don&amp;rsquo;t need all those transforms and matrix stuff, both pixel spaces will be the same for the occlusion
camera and the plane.&lt;/li>
&lt;/ul>
&lt;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.&lt;/p>
&lt;p>I finally came up with this solution:&lt;/p>
&lt;ul>
&lt;li>Create a new Shader Graph for the occlusion camera&lt;/li>
&lt;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&lt;/li>
&lt;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!&lt;/li>
&lt;/ul>
&lt;p>So, I created a new renderer asset and set that as the renderer of our occlusion camera. I also created a new Layer
&lt;code>Audio Occluder&lt;/code> and made the camera to only render audio occluders.&lt;/p>
&lt;figure style="max-width: 500px">&lt;a href="https://odin.4players.io/images/blog/occlusion-camera-settings.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/occlusion-camera-settings.jpg" width="500"/>&lt;/a>
&lt;/figure>
&lt;p>Next, we have to create our &amp;ldquo;Depth Shader&amp;rdquo; in Shader Graph. It looks like this:&lt;/p>
&lt;figure style="max-width: 500px">&lt;a href="https://odin.4players.io/images/blog/depth-shader.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/depth-shader.jpg" width="500"/>&lt;/a>
&lt;/figure>
&lt;p>As you can see, it&amp;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&amp;rsquo;ll be &lt;code>5&lt;/code> as we set that in our shader before. In this case, we don&amp;rsquo;t put in a shader variable but we
just set the far plane of the camera to &lt;code>5&lt;/code> and use that value in the depth shader. Setting the far value of the
camera made also sense because we don&amp;rsquo;t need to render the whole scene, just what is in our radius.&lt;/p>
&lt;p>Then, we feed that shader in our Render Depth pipeline like this:&lt;/p>
&lt;figure style="max-width: 500px">&lt;a href="https://odin.4players.io/images/blog/render-depth-shader.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/render-depth-shader.jpg" width="500"/>&lt;/a>
&lt;/figure>
&lt;p>So, what this does, is overriding all materials in the scene with our depth shader and rendering the audio occluders
into our cubemap.&lt;/p>
&lt;p>The cubemap looks like that:&lt;/p>
&lt;figure style="max-width: 300px">&lt;a href="https://odin.4players.io/images/blog/depth-cubemap.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/depth-cubemap.jpg" width="300"/>&lt;/a>
&lt;/figure>
&lt;p>The top and bottom is black, because we don&amp;rsquo;t render them. In our script we had this line:&lt;/p>
&lt;pre>&lt;code class="language-csharp">cam.RenderToCubemap(cubemap, 51);
&lt;/code>&lt;/pre>
&lt;p>&lt;code>51&lt;/code> is the bitflag for front, back, left and right. The typical value you see in the Unity documentation and many
examples is &lt;code>63&lt;/code> which is the bitflag for all six sides. But we only render into a plane, so we don&amp;rsquo;t care about top
and bottom.&lt;/p>
&lt;h3 id="using-the-distance-buffer">Using the distance buffer&lt;/h3>
&lt;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&amp;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 &lt;code>0.0&lt;/code> to &lt;code>1.0&lt;/code> distance range that we use to calculate fall-off and ripple intensity. Here is the relevant
part of the shader:&lt;/p>
&lt;figure style="max-width: 700px">&lt;a href="https://odin.4players.io/images/blog/shader-with-occlusion.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/shader-with-occlusion.jpg" width="700"/>&lt;/a>
&lt;/figure>
&lt;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.&lt;/p>
&lt;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.&lt;/p>
&lt;figure>&lt;img src="https://odin.4players.io/images/blog/shader-complete.jpg"/>
&lt;/figure>
&lt;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 &amp;ldquo;audio shadows&amp;rdquo; generated by the occluders.&lt;/p>
&lt;figure style="max-width: 700px">&lt;a href="https://odin.4players.io/images/blog/occlusion-result.jpg" title="Click to enlarge" data-lity>&lt;img src="https://odin.4players.io/images/blog/occlusion-result.jpg" width="700"/>&lt;/a>
&lt;/figure>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>It&amp;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 &lt;a href="https://twitter.com/ursuppe">@ursuppe&lt;/a>
.&lt;/p>
&lt;p>When I created that, I thought that it&amp;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&amp;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 &amp;ldquo;fire&amp;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&amp;rsquo;s inspiration for many other use cases.&lt;/p>
&lt;p>Universal Rendering Pipeline in Unity is great for these kind of things. It&amp;rsquo;s easy to create your own renderers can do
a lot more than in the built-in render pipeline.&lt;/p>
&lt;p>Last but not least I want to link a few resources that have been very useful for me:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.cyanilux.com/tutorials/depth/#eye-depth">https://www.cyanilux.com/tutorials/depth/#eye-depth&lt;/a>
&lt;/li>
&lt;li>&lt;a href="https://forum.unity.com/threads/computing-world-position-from-depth.760421/">https://forum.unity.com/threads/computing-world-position-from-depth.760421/&lt;/a>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/visualizing-occlusion.jpg"/></item><item><title>Creating technology based on players’ motivations: why in-game communication?</title><link>https://odin.4players.io/blog/why-in-game-communication/</link><pubDate>Fri, 16 Dec 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/why-in-game-communication/</guid><description>&lt;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.&lt;/p>
&lt;p>There are
roughly &lt;a href="https://www.statista.com/statistics/293304/number-video-gamers/">3.2 billion gamers across the globe&lt;/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.&lt;/p>
&lt;p>&lt;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.&lt;/a>
&lt;/p>
&lt;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.&lt;/p>
&lt;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.&lt;/p>
&lt;p>&lt;strong>The importance of communication in multiplayer gaming&lt;/strong>&lt;/p>
&lt;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.&lt;/p>
&lt;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.&lt;/p>
&lt;p>&lt;strong>What part have we played?&lt;/strong>&lt;/p>
&lt;p>When developing ODIN, some of the key focal points we had in mind were:&lt;/p>
&lt;p>&lt;strong>We wanted to create game communication that was the closest to life-like as possible.&lt;/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.&lt;/p>
&lt;p>&lt;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.&lt;/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.&lt;/p>
&lt;p>&lt;strong>We also made sure that everything was cross-platform, using the same code and with high performance.&lt;/strong> This is so the
developers can work in peace and the players can enjoy it everywhere.&lt;/p>
&lt;p>At 4Players we always keep players&amp;rsquo; safety and data protection in mind. Players care about this and so do we - so we
make sure our tool doesn&amp;rsquo;t require any personal data to work properly, making it safe for both developers and the
community.&lt;/p>
&lt;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.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/why-in-game-chat.jpg"/></item><item><title>Introducing ODIN Server for On-Premise Hosting</title><link>https://odin.4players.io/blog/4players-releases-odin-server-for-on-premise-hosting/</link><pubDate>Fri, 09 Dec 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-server-for-on-premise-hosting/</guid><description>&lt;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.&lt;/p>
&lt;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.&lt;/p>
&lt;p>That&amp;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.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/server/on-premise/' class="btn btn-primary">On-Premise Hosting Documentation&lt;/a>&lt;/p>
&lt;p>Downloads for the on-premise version of the ODIN server software are now available right within our &lt;a href="https://app.netplay-config.4players.de/odin/en">customer control panel&lt;/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.&lt;/p>
&lt;figure>&lt;img src="https://odin.4players.io/images/odin-cp-on-premise-server.jpg"
alt="Generate Configuration for On-Premise Servers"/>&lt;figcaption>
&lt;p>Generate Configuration for On-Premise Servers&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;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&amp;rsquo;t have the in-house expertise to do so.&lt;/p>
&lt;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&amp;rsquo;t hesitate to reach out to our &lt;a href="https://odin.4players.io/company/contact_us/">sales team&lt;/a>
.&lt;/p>
&lt;p>We are always happy to help!&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-release-generic03.jpg"/></item><item><title>ODIN Version 1.3.0 is Available</title><link>https://odin.4players.io/blog/4players-releases-odin-core-sdk-v1.3.0/</link><pubDate>Fri, 11 Nov 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-core-sdk-v1.3.0/</guid><description>&lt;p>We&amp;rsquo;ve just published version &lt;strong>1.3.0&lt;/strong> of the ODIN SDK. We have some exciting updates to share with you.&lt;/p>
&lt;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.&lt;/p>
&lt;p>The new builds are available on &lt;a href="https://github.com/4Players/odin-sdk/releases">GitHub&lt;/a>
.&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-sdk/releases/tag/v1.3.0' class="btn btn-primary">Download Version 1.3.0&lt;/a>&lt;/p>
&lt;p>In terms of API changes, we have updated the &lt;code>OdinAudioStreamStats&lt;/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 &lt;code>odin_audio_data_len&lt;/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&amp;rsquo;t hesitate to reach out if you have any questions or feedback.&lt;/p>
&lt;p>Updates to both our &lt;a href="https://github.com/4Players/odin-sdk-unity">Unity&lt;/a>
and &lt;a href="https://github.com/4Players/odin-sdk-unreal">Unreal Engine&lt;/a>
plugins will be available within a few days.&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/odin_blog04.jpg" alt="4Players ODIN">&lt;/p>
&lt;p>Here&amp;rsquo;s the full changelog for this update:&lt;/p>
&lt;h3 id="new-features">New Features&lt;/h3>
&lt;ul>
&lt;li>Added support for Windows on ARM&lt;/li>
&lt;li>Refactored internal jitter buffer for improved overall reliability&lt;/li>
&lt;/ul>
&lt;h3 id="api-changes">API Changes&lt;/h3>
&lt;ul>
&lt;li>Updated &lt;code>OdinAudioStreamStats&lt;/code> struct
&lt;ul>
&lt;li>Renamed &lt;code>jitter_packets_processed&lt;/code> to &lt;code>packets_processed&lt;/code>&lt;/li>
&lt;li>Renamed &lt;code>jitter_packets_dropped_too_early&lt;/code> to &lt;code>packets_arrived_too_early&lt;/code>&lt;/li>
&lt;li>Renamed &lt;code>jitter_packets_dropped_too_late&lt;/code> to &lt;code>packets_arrived_too_late&lt;/code>&lt;/li>
&lt;li>Renamed &lt;code>jitter_packets_lost&lt;/code> to &lt;code>packets_lost&lt;/code>&lt;/li>
&lt;li>Added &lt;code>packets_total&lt;/code>&lt;/li>
&lt;li>Added &lt;code>packets_invalid&lt;/code>&lt;/li>
&lt;li>Added &lt;code>packets_repeated&lt;/code>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Removed &lt;code>odin_audio_data_len&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h3>
&lt;ul>
&lt;li>Enabled FEC feature for Opus encoder/decoder&lt;/li>
&lt;li>Switched Opus encoder application mode from Audio to VoIP when working with single channel streams&lt;/li>
&lt;li>Fixed initial values for time and sequence number in audio datagrams&lt;/li>
&lt;li>Fixed a bug where malformed audio datagrams could lead to delayed audio playbck&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-release-generic02.jpg"/></item><item><title>ODIN Version 1.2.0 is Available</title><link>https://odin.4players.io/blog/4players-releases-odin-core-sdk-v1.2.0/</link><pubDate>Sun, 16 Oct 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-core-sdk-v1.2.0/</guid><description>&lt;p>We&amp;rsquo;ve just published version &lt;strong>1.2.0&lt;/strong> of the ODIN SDK. With this release, we&amp;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&amp;rsquo;re able to constantly improve our services and make ODIN even better.&lt;/p>
&lt;p>The new builds are available on &lt;a href="https://github.com/4Players/odin-sdk/releases">GitHub&lt;/a>
.&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-sdk/releases/tag/v1.2.0' class="btn btn-primary">Download Version 1.2.0&lt;/a>&lt;/p>
&lt;p>In terms of stability, we&amp;rsquo;ve refactored our internal reconnect mechanism, which will now re-establish connections in a faster, more effective way. In addition, we&amp;rsquo;ve fixed a rare but nasty bug where an ODIN room handle could become unresponsive in case of a connection timeout.&lt;/p>
&lt;p>Also, we&amp;rsquo;ve added the user identifier of the local peer to the &lt;code>Joined&lt;/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.&lt;/p>
&lt;p>Updates to both our &lt;a href="https://github.com/4Players/odin-sdk-unity">Unity&lt;/a>
and &lt;a href="https://github.com/4Players/odin-sdk-unreal">Unreal Engine&lt;/a>
plugins will be released later this week.&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/odin_blog05.jpg" alt="4Players ODIN">&lt;/p>
&lt;p>Here&amp;rsquo;s the full changelog for this update:&lt;/p>
&lt;h3 id="general">General&lt;/h3>
&lt;ul>
&lt;li>Updated &lt;a href="https://github.com/4Players/odin-sdk/tree/master/test">test console client&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h3 id="api-changes">API Changes&lt;/h3>
&lt;ul>
&lt;li>Added &lt;code>OdinRoomConnectionState_Disconnecting&lt;/code>&lt;/li>
&lt;li>Added &lt;code>own_user_id&lt;/code> and &lt;code>own_user_id_len&lt;/code> to &lt;code>OdinEvent_JoinedData&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h3>
&lt;ul>
&lt;li>Improved internal shutdown process to prevent media handles from being removed too soon&lt;/li>
&lt;li>Fixed an issue where a room handle could become unresponsive after a timeout&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-release-generic01.jpg"/></item><item><title>ODIN Version 1.1.1 is Available</title><link>https://odin.4players.io/blog/4players-releases-odin-core-sdk-to-v1.1.1/</link><pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-core-sdk-to-v1.1.1/</guid><description>&lt;p>Happy release Tuesday! 🎉&lt;/p>
&lt;p>The 4Players ODIN development team is please to announce the immediate availability of ODIN version &lt;strong>1.1.1&lt;/strong>. This
release focuses on addressing your feedback as well as bug reports and feature requests.&lt;/p>
&lt;p>You can see the full changelog for more details:&lt;/p>
&lt;h3 id="general">General&lt;/h3>
&lt;ul>
&lt;li>Updated &lt;a href="https://github.com/4Players/odin-sdk/tree/master/test">test console client&lt;/a>
&lt;/li>
&lt;/ul>
&lt;h3 id="new-features">New Features&lt;/h3>
&lt;ul>
&lt;li>Added gain controller to bring the input audio signal to an appropriate range when it&amp;rsquo;s either too loud or too quiet&lt;/li>
&lt;/ul>
&lt;h3 id="api-changes">API Changes&lt;/h3>
&lt;ul>
&lt;li>Added &lt;code>gain_controller&lt;/code> boolean to &lt;code>OdinApmConfig&lt;/code> struct&lt;/li>
&lt;li>Updated &lt;code>odin_error_format&lt;/code> to make error messages more specific&lt;/li>
&lt;li>Updated &lt;code>odin_room_update_user_data&lt;/code> to return an error when trying to set user data of the room while not being connected&lt;/li>
&lt;/ul>
&lt;h3 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h3>
&lt;ul>
&lt;li>Fixed a bug where peer user data was not set after re-connecting to a room&lt;/li>
&lt;li>Fixed a bug where peer position was not set correctly before joining a room&lt;/li>
&lt;li>Fixed an issue where iOS clients were unable to access local root certificates&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/release-1.1.1.jpg"/></item><item><title>4Players Releases SwiftUI Sample App</title><link>https://odin.4players.io/blog/4players-releases-swiftui-sample/</link><pubDate>Mon, 12 Sep 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-swiftui-sample/</guid><description>&lt;p>After releasing our &lt;a href="https://docs.4players.io/voice/swift/">OdinKit&lt;/a>
Swift package for iOS and macOS, we now pushed the code
for a very basic SwiftUI sample application to &lt;a href="https://github.com/4Players/odin-example-swiftui">GitHub&lt;/a>
.&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/xcode_odin_kit.jpg" alt="Xcode Screenshot">&lt;/p>
&lt;p>The app is built around &lt;strong>OdinKit&lt;/strong> and implements all APIs required to provide real-time voice communication for
your users. It also shows how to use an &lt;code>OdinRoom&lt;/code> instance to synchronize data between all users in the room.&lt;/p>
&lt;p>Learn more about the sample and how to get started in our example description:&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/swift/samples/swiftui-sample/' class="btn btn-primary">Get Started with Swift&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-swift-sample.jpg"/></item><item><title>4Players Releases ODIN Swift Package</title><link>https://odin.4players.io/blog/4players-releases-odin-swift-sdk-v1.0.0/</link><pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-swift-sdk-v1.0.0/</guid><description>&lt;p>Now that our team is on a release spree, here you have &lt;strong>OdinKit&lt;/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.&lt;/p>
&lt;p>With &lt;strong>OdinKit&lt;/strong>, we&amp;rsquo;re not only following Apples naming convention for APIs. We&amp;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.&lt;/p>
&lt;p>The package is open-source and available on &lt;a href="https://github.com/4Players/odin-wrapper-swift">GitHub&lt;/a>
.&lt;/p>
&lt;h2 id="swift-playground">Swift Playground&lt;/h2>
&lt;p>The project contains a macOS &lt;a href="https://github.com/4Players/odin-wrapper-swift/blob/master/Playgrounds/macOS.playground/Contents.swift">playground&lt;/a>
to demonstrate how to use OdinKit in your your apps, but the same code will also work on iOS and iPadOS.&lt;/p>
&lt;h2 id="getting-started">Getting Started&lt;/h2>
&lt;p>After adding the package to your project, import &lt;code>OdinKit&lt;/code> into your application:&lt;/p>
&lt;pre>&lt;code class="language-swift">import OdinKit
&lt;/code>&lt;/pre>
&lt;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:&lt;/p>
&lt;pre>&lt;code class="language-swift">let room = OdinRoom()
&lt;/code>&lt;/pre>
&lt;h2 id="handling-events">Handling events&lt;/h2>
&lt;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.&lt;/p>
&lt;p>So, we create a class implementing the &lt;code>OdinRoomDelegate&lt;/code> protocol:&lt;/p>
&lt;pre>&lt;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(&amp;quot;Connection status changed from \(oldState.rawValue) to \(newState.rawValue)&amp;quot;)
}
// Callback for when a room was joined and the initial state is fully available
func onRoomJoined(room: OdinRoom) {
print(&amp;quot;Room joined successfully as peer \(room.ownPeer.id)&amp;quot;)
}
// Callback for room user data changes
func onRoomUserDataChanged(room: OdinRoom) {
print(&amp;quot;Global room user data changed to: \(room.userData)&amp;quot;)
}
// Callback for peers joining the room
func onPeerJoined(room: OdinRoom, peer: OdinPeer) {
print(&amp;quot;Peer \(peer.id) joined the room with ID '\(peer.userId)'&amp;quot;)
}
// Callback for peer user data changes
func onPeerUserDataChanged(room: OdinRoom, peer: OdinPeer) {
print(&amp;quot;Peer \(peer.id) updated its user data to: \(peer.userData)&amp;quot;)
}
// Callback for peers leaving the room
func onPeerLeft(room: OdinRoom, peer: OdinPeer) {
print(&amp;quot;Peer \(peer.id) left the room&amp;quot;)
}
// Callback for medias being added to the room
func onMediaAdded(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
print(&amp;quot;Peer \(peer.id) added media \(media.id) to the room&amp;quot;)
}
// Callback for media activity state changes
func onMediaActiveStateChanged(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
print(&amp;quot;Peer \(peer.id) \(media.activityStatus ? &amp;quot;started&amp;quot; : &amp;quot;stopped&amp;quot;) talking on media \(media.id)&amp;quot;)
}
// Callback for medias being removed from the room
func onMediaRemoved(room: OdinRoom, peer: OdinPeer, media: OdinMedia) {
print(&amp;quot;Peer \(peer.id) removed media \(media.id) from the room&amp;quot;)
}
// Callback for incoming arbitrary data messages
func onMessageReceived(room: OdinRoom, senderId: UInt64, data: [UInt8]) {
print(&amp;quot;Peer \(senderId) sent a message with arbitrary data: \(data)&amp;quot;)
}
}
&lt;/code>&lt;/pre>
&lt;p>Next, we assign that delegate to our room instance:&lt;/p>
&lt;pre>&lt;code class="language-swift">// Create an instance of your delegate
let delegate = YourCustomDelegate()
// Add the delegate to the room
room.delegate = delegate
&lt;/code>&lt;/pre>
&lt;p>We also provide a set of published properties for typical use cases so you don&amp;rsquo;t have to handle these events yourself.
This is ideal if you&amp;rsquo;re using SwiftUI, as your views will notice any changes automatically.&lt;/p>
&lt;pre>&lt;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()
}
}
}
&lt;/code>&lt;/pre>
&lt;h2 id="joining-a-room">Joining a Room&lt;/h2>
&lt;p>That&amp;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 (&lt;a href="https://jwt.io">JWT&lt;/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).&lt;/p>
&lt;pre>&lt;code class="language-swift">// Create a new local access key
let accessKey = try OdinAccessKey(&amp;quot;__YOUR_ACCESS_KEY__&amp;quot;)
// Generate a token to authenticate with
let authToken = try accessKey.generateToken(roomId: &amp;quot;Meeting Room&amp;quot;, userId: &amp;quot;Swift is great!&amp;quot;)
&lt;/code>&lt;/pre>
&lt;p>The &lt;code>roomId&lt;/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 &lt;code>userId&lt;/code> is a string that can be used to refer to
an existing record in your particular service.&lt;/p>
&lt;div class="box dark info">
&lt;div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top"> &lt;i class="fa fa-info-circle">&lt;/i> Info &lt;/div>
&lt;div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">&lt;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.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>For your own security, we strongly recommend that you &lt;strong>NEVER&lt;/strong> put an access key in your client-side code. We&amp;rsquo;ve
created a very basic &lt;a href="https://docs.4players.io/voice/token-server/">Node.js server&lt;/a>
, to showcase how to issue ODIN
tokens to your client apps without exposing your access key.&lt;/p>
&lt;p>We provide both &lt;a href="https://packagist.org/packages/4players/odin-tokens">PHP&lt;/a>
and &lt;a href="https://www.npmjs.com/package/@4players/odin-tokens">NPM&lt;/a>
packages to make the process of generating tokens as easy as possible for you.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/introduction/access-keys/' class="btn btn-primary">Generate an Access Key for FREE&lt;/a>&lt;/p>
&lt;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:&lt;/p>
&lt;pre>&lt;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
))
&lt;/code>&lt;/pre>
&lt;div class="box dark warning">
&lt;div class="box-title elevation-01dp text-high-emphasis border-elevation-06dp rounded-top"> &lt;i class="fas fa-exclamation-triangle">&lt;/i> Warning &lt;/div>
&lt;div class="box-content elevation-01dp border-elevation-06dp border-start border-end border-bottom rounded-bottom">&lt;p>As &lt;strong>OdinKit&lt;/strong> will request access to your microphone you need to set a special key in your &lt;code>Info.plist&lt;/code> file. Add
a key called &lt;code>NSMicrophoneUsageDescription&lt;/code> (&lt;em>Privacy - Microphone usage description&lt;/em>) and set a text that describes
why your app wants to have microphone access. Otherwise your app won&amp;rsquo;t be able to capture audio samples from your
input device.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>That&amp;rsquo;s it! Congratulations! You have added real-time voice communication to your app!&lt;/p>
&lt;h2 id="whats-next">What&amp;rsquo;s Next&lt;/h2>
&lt;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:&lt;/p>
&lt;pre>&lt;code class="language-swift">// Encode a string so we can send it as a message
let yourMessage = OdinCustomData.encode(&amp;quot;So Long, and Thanks for All the Fish&amp;quot;)
// Send the message everyone else in the room
try room.sendMessage(data: yourMessage)
&lt;/code>&lt;/pre>
&lt;h2 id="sample-app">Sample App&lt;/h2>
&lt;p>Download our sample to get started quickly and learn how to use the APIs:&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/swift/samples/swiftui-sample/' class="btn btn-primary">Show SwiftUI Sample&lt;/a>&lt;/p>
&lt;h2 id="documentation">Documentation&lt;/h2>
&lt;p>We have extensive documentation and a reference of all available classes and APIs provided by &lt;strong>OdinKit&lt;/strong>.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/swift/' class="btn btn-primary">Open OdinKit Documentation&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-swift-release-1.0.jpg"/></item><item><title>Announcing ODIN Networking</title><link>https://odin.4players.io/blog/4players-releases-odin-networking/</link><pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-networking/</guid><description>&lt;p>Today we are releasing what we have been working on for a couple of months now: &lt;strong>ODIN Networking&lt;/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.&lt;/p>
&lt;p>So, we went out to solve that, and we came up with &lt;strong>ODIN Networking&lt;/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.&lt;/p>
&lt;h2 id="what-is-odin-networking">What is ODIN Networking?&lt;/h2>
&lt;p>ODIN Networking is built on top of the &lt;a href="https://docs.4players.io/voice/unity/">ODIN Unity SDK&lt;/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.&lt;/p>
&lt;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.&lt;/p>
&lt;p>&lt;strong>One important aspect&lt;/strong>: While ODIN Networking is a powerful and easy to use system, it&amp;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.&lt;/p>
&lt;h2 id="how-does-it-work">How does it work?&lt;/h2>
&lt;p>&lt;a href="https://docs.4players.io/voice/unity/">The ODIN SDK&lt;/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
(&lt;code>PeerUserData&lt;/code>), each room can have its own data (&lt;code>RoomUserData&lt;/code>) and each peer can send messages with arbitrary
data to all or selected peers.&lt;/p>
&lt;p>ODIN Networking packages the current state of a player into the players &lt;code>PeerUserData&lt;/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.&lt;/p>
&lt;p>Every player can also spawn objects into the world. The state of these objects are added to the &lt;code>PeerUserData&lt;/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.&lt;/p>
&lt;p>Of course, players should be part of a living world, so how do you handle objects that are &amp;ldquo;owned&amp;rdquo; by the world you
might ask? It&amp;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 &lt;code>RoomUserData&lt;/code>. This way, peers entering later will
become the same state of the world as every one else, and it&amp;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.&lt;/p>
&lt;p>As it&amp;rsquo;s decentralized you don&amp;rsquo;t need to worry about a central server that might go down, and you also don&amp;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&amp;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&amp;rsquo;t want to be the next eSports hit.&lt;/p>
&lt;p>But, ODIN Networking, and the ODIN Unity SDK are open-source. We are happy to merge your contributions!&lt;/p>
&lt;h2 id="how-do-i-get-started">How do I get started?&lt;/h2>
&lt;p>All you have to do is to derive your &amp;ldquo;Player&amp;rdquo; script (i.e. that script that controls your local player object) from
&lt;code>OdinPlayer&lt;/code> instead of &lt;code>MonoBehaviour&lt;/code>. Distribute at least one &lt;code>OdinNetworkSpawnPosition&lt;/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.&lt;/p>
&lt;h2 id="how-much-does-it-cost">How much does it cost?&lt;/h2>
&lt;p>As ODIN Networking uses the ODIN stack under the hood, the same pricing applies. So no extra costs if you use ODIN
Networking!.&lt;/p>
&lt;h2 id="interested">Interested?&lt;/h2>
&lt;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&amp;rsquo;ll be doing some tests and will then integrate the
project into the ODIN Unity SDK.&lt;/p>
&lt;p>&lt;a href='https://github.com/4Players/odin-networking-demo' class="btn btn-primary">Download ODIN Networking SDK&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-networking-0.1.jpg"/></item><item><title>ODIN Unity SDK updated to v1.1</title><link>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-v1.1/</link><pubDate>Thu, 01 Sep 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-v1.1/</guid><description>&lt;p>ODIN Unity SDK 1.1.0 was released on September 1st 2022. You&amp;rsquo;ll find the latest version of the SDK in our
&lt;a href="https://github.com/4Players/odin-sdk-unity/releases">Github repository&lt;/a>
.&lt;/p>
&lt;h2 id="general">General&lt;/h2>
&lt;ul>
&lt;li>Core SDK has been updated to version &lt;strong>1.0.1&lt;/strong> (&lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.0.1">details&lt;/a>
)&lt;/li>
&lt;li>Added options to adjust microphone input volume&lt;/li>
&lt;li>URL to 4Players admin panel has been updated&lt;/li>
&lt;/ul>
&lt;h2 id="api-changes">API Changes&lt;/h2>
&lt;ul>
&lt;li>Added &lt;code>MicrophoneReader.GetVolumeScale&lt;/code>&lt;/li>
&lt;li>Added &lt;code>MicrophoneReader.GetAveragedVolume&lt;/code>&lt;/li>
&lt;li>Added &lt;code>MicrophoneReader.SetVolume&lt;/code>&lt;/li>
&lt;li>Renamed &lt;code>MediaStream.IsMuted&lt;/code> to &lt;code>MediaStream.IsPaused&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Fixed an issue where the activity state of the local media stream was not updated&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unity/' class="btn btn-primary">Get Started with Unity today&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unity-release-1.1.jpg"/></item><item><title>Voice-Chat SDK ODIN in Unreal Marketplace</title><link>https://odin.4players.io/blog/voice-chat-sdk-odin-available-in-unreal-marketplace/</link><pubDate>Wed, 31 Aug 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/voice-chat-sdk-odin-available-in-unreal-marketplace/</guid><description>&lt;p>&lt;a href="https://odin.4players.io/">ODIN&lt;/a>
is now available in the
&lt;a href="https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk">Unreal Marketplace&lt;/a>
. Head over to
download and install the SDK for free.&lt;/p>
&lt;p>You can download, install and use the SDK for free for up to &lt;strong>25&lt;/strong> concurrent users by either generating a free
access key in our &lt;a href="https://docs.4players.io/voice/introduction/access-keys/">developer documentation&lt;/a>
or directly in the
Unreal Editor using a simple blueprint.&lt;/p>
&lt;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.&lt;/p>
&lt;p>&lt;a href='https://www.unrealengine.com/marketplace/en-US/product/4players-odin-sdk' class="btn btn-primary">Download in Unreal Engine Marketplace&lt;/a>&lt;/p>
&lt;h2 id="using-the-plugin">Using the plugin&lt;/h2>
&lt;p>The source-code of the plugin is freely available in our &lt;a href="">Github repository&lt;/a>
and we have created a guide to get
your started quickly.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/manual/' class="btn btn-primary">Unreal Engine Manual&lt;/a>&lt;/p>
&lt;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;amp; Paste into your existing project.&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/blueprint-reference/' class="btn btn-primary">Unreal Engine Blueprint Reference&lt;/a>&lt;/p>
&lt;p>&lt;strong>We can&amp;rsquo;t wait to see what you are developing with ODIN on the amazing Unreal Engine&lt;/strong>. Please
&lt;a href="mailto:odin@4players.io">contact sales&lt;/a>
if you need additional information on pricing and get in touch with our
&lt;a href="https://odin.4players.io/company/contact_us/">Customer Success Team&lt;/a>
if you want to be part of our &amp;ldquo;Showcase&amp;rdquo;.&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-unreal-marketplace.jpg"/></item><item><title>ODIN Core SDK updated to v1.0.1</title><link>https://odin.4players.io/blog/4players-releases-odin-core-sdk-to-v1.0.1/</link><pubDate>Wed, 10 Aug 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-core-sdk-to-v1.0.1/</guid><description>&lt;p>Today we released version 1.0.1 of the &lt;a href="https://odin.4players.io/">Core SDK&lt;/a>
.&lt;/p>
&lt;h2 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h2>
&lt;ul>
&lt;li>Fixed an issue with conflicting symbols for Unreal Engine builds&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/release-1.0.1.jpg"/></item><item><title>ODIN Unreal Engine SDK Is Available</title><link>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-to-production/</link><pubDate>Wed, 27 Jul 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unreal-sdk-to-production/</guid><description>&lt;p>We are thrilled to announce that we released our ODIN &lt;a href="https://docs.4players.io/voice/unreal/">Unreal Engine SDK&lt;/a>
completing support for all major public game engines used in production today.&lt;/p>
&lt;p>You can download the latest release right here:&lt;/p>
&lt;p>&lt;a href="https://github.com/4Players/odin-sdk-unreal/releases">https://github.com/4Players/odin-sdk-unreal/releases&lt;/a>
&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/odin_blog06.jpg" alt="4Players ODIN">&lt;/p>
&lt;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.&lt;/p>
&lt;p>That is all you have to do to add ODIN to your game. Hover over the image, click the &lt;code>Copy&lt;/code> button and paste it into
your Level Blueprint. &lt;a href="https://docs.4players.io/voice/introduction/access-keys/">Set your own Access Key&lt;/a>
in the &lt;code>Access Key&lt;/code>
variable and press Play.&lt;/p>
&lt;figure class="blueprint ">&lt;img src="https://docs.4players.io/img/odin/unreal/bp_sample_complete.jpg"
alt="The blueprint that we&amp;amp;rsquo;ll create"/>&lt;figcaption>
&lt;p>The blueprint that we&amp;rsquo;ll create&lt;/p>
&lt;/figcaption>
&lt;/figure>
&lt;p>Check out our &lt;a href="https://docs.4players.io/voice/unreal/">Unreal Engine SDK&lt;/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&amp;rsquo;ll be up and running in a couple of minutes!&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unreal/guides/' class="btn btn-primary">Get Started with Unreal today&lt;/a>&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unreal-release-1.0.jpg"/></item><item><title>ODIN Unity SDK Is Available</title><link>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-to-production/</link><pubDate>Fri, 08 Jul 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-unity-sdk-to-production/</guid><description>&lt;p>A few days after launching our &lt;a href="https://docs.4players.io/voice/core/">Core SDK&lt;/a>
to &lt;a href="https://odin.4players.io/blog/4players-releases-odin-to-production/">production&lt;/a>
,
we also launch version &lt;strong>1.0&lt;/strong> of our &lt;a href="https://docs.4players.io/voice/unity/">Unity SDK&lt;/a>
. Its battle-tested, stable and super easy to integrate into new or existing games.&lt;/p>
&lt;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.&lt;/p>
&lt;p>We have guides for adding &lt;a href="https://docs.4players.io/voice/unity/guides/pun-sample/">it to Photon based games&lt;/a>
or &lt;a href="https://docs.4players.io/voice/unity/guides/unity-mirror/">games built with Mirror Networking&lt;/a>
.&lt;/p>
&lt;p>Download our &lt;a href="https://docs.4players.io/voice/unity/">Unity SDK&lt;/a>
today and give it a shot! You&amp;rsquo;ll not regret it.&lt;/p>
&lt;p>&lt;a href="https://github.com/4Players/odin-sdk-unity/releases">https://github.com/4Players/odin-sdk-unity/releases&lt;/a>
&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/odin_unity_editor.jpg" alt="4Players ODIN">&lt;/p>
&lt;p>Here&amp;rsquo;s a full list of changes and improvements:&lt;/p>
&lt;h2 id="general">General&lt;/h2>
&lt;ul>
&lt;li>Core SDK has been updated to version &lt;strong>1.0.0&lt;/strong> (&lt;a href="https://github.com/4Players/odin-sdk/releases/tag/v1.0.0">details&lt;/a>
)&lt;/li>
&lt;li>Native bindings where updated to reflect the latest SDK changes&lt;/li>
&lt;li>Internal media IDs were removed from the API in favor of media stream handles&lt;/li>
&lt;li>Overall audio quality and performance has been improved dramatically&lt;/li>
&lt;/ul>
&lt;h2 id="api-changes">API Changes&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Added &lt;code>Room.UpdateRoomUserData&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Updated functions to use &lt;code>IUserData&lt;/code> interface more effectively&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Renamed &lt;code>Room.UpdateUserData&lt;/code> to &lt;code>Room.UpdatePeerUserData&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Renamed &lt;code>ApmConfig&lt;/code> option &lt;code>OdinNoiseSuppressionLevel&lt;/code> to &lt;code>NoiseSuppressionLevel&lt;/code> for sake of consistency&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Replaced &lt;code>MediaId&lt;/code> with &lt;code>MediaStreamId&lt;/code> in &lt;code>OnMediaAdded&lt;/code>, &lt;code>OnMediaRemoved&lt;/code> and &lt;code>OnMediaActiveStateChanged&lt;/code> event arguments&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Added &lt;code>OnConnectionStateChanged&lt;/code> event&lt;/p>
&lt;p>&lt;a href='https://docs.4players.io/voice/unity/' class="btn btn-primary">Get Started with Unity today&lt;/a>&lt;/p>
&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/unity-release-1.0.jpg"/></item><item><title>ODIN Is With Us!</title><link>https://odin.4players.io/blog/4players-releases-odin-to-production/</link><pubDate>Wed, 06 Jul 2022 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/4players-releases-odin-to-production/</guid><description>&lt;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 &lt;strong>1.0&lt;/strong>. Major updates to our engine integration plugins
for &lt;a href="https://docs.4players.io/voice/unity/">Unity&lt;/a>
and both &lt;a href="https://docs.4players.io/voice/unreal/">Unreal Engine&lt;/a>
4 and 5 will be
released to production within the next couple of days.&lt;/p>
&lt;p>The latest version can be found here:&lt;/p>
&lt;p>&lt;a href="https://github.com/4Players/odin-sdk/releases">https://github.com/4Players/odin-sdk/releases&lt;/a>
&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/odin_blog01.jpg" alt="4Players ODIN">&lt;/p>
&lt;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.&lt;/p>
&lt;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&amp;rsquo;t
need to spend valuable resources designing a comms solution on their own.&lt;/p>
&lt;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.&lt;/p>
&lt;p>Don&amp;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 &lt;a href="https://www.github.com/4players/odin-sdk">Github&lt;/a>
.&lt;/p>
&lt;p>Many thanks to all our partners, beta testers and supporters!&lt;/p>
&lt;p>ODIN &lt;strong>1.0&lt;/strong> comes with numerous improvements and new features such as:&lt;/p>
&lt;h2 id="general">General&lt;/h2>
&lt;ul>
&lt;li>Improved overall reliability by adding an internal mechanism to re-establish a connection to the ODIN server on timeouts&lt;/li>
&lt;li>Updated &lt;a href="https://github.com/4Players/odin-sdk/tree/master/test">test console client&lt;/a>
to properly handle reconnects&lt;/li>
&lt;li>Removed the internal media ID from the API in favor of media handles (internal IDs can still be retrieved using
&lt;code>odin_media_stream_media_id&lt;/code> for reference while the media stream is added to a connected room)&lt;/li>
&lt;/ul>
&lt;h2 id="new-features">New Features&lt;/h2>
&lt;ul>
&lt;li>Added a generic resampler for situations where your audio pipeline doesn&amp;rsquo;t support 48 kHz (one resampler instance
should be used exclusively per audio stream)&lt;/li>
&lt;/ul>
&lt;h2 id="api-changes">API Changes&lt;/h2>
&lt;ul>
&lt;li>Added &lt;code>odin_resampler_create&lt;/code>&lt;/li>
&lt;li>Added &lt;code>odin_resampler_process&lt;/code>&lt;/li>
&lt;li>Added &lt;code>odin_resampler_destroy&lt;/code>&lt;/li>
&lt;li>Added &lt;code>odin_room_close&lt;/code> to ensure a clean disconnect before calling &lt;code>odin_room_destroy&lt;/code>&lt;/li>
&lt;li>Changed type of &lt;code>OdinReturnCode&lt;/code> from unsigned to signed integers&lt;/li>
&lt;li>Replaced &lt;code>media_id&lt;/code> and &lt;code>stream&lt;/code> properties with &lt;code>media_handle&lt;/code> in &lt;code>Media*&lt;/code> event data&lt;/li>
&lt;li>Removed unused &lt;code>None&lt;/code> event tag&lt;/li>
&lt;/ul>
&lt;h2 id="bugfixes--improvements">Bugfixes / Improvements&lt;/h2>
&lt;ul>
&lt;li>Fixed a bug where &lt;code>odin_audio_mix_streams&lt;/code> was only outputting the last media stream&lt;/li>
&lt;li>Fixed a possible deadlock when calling API functions within event handlers&lt;/li>
&lt;li>Added missing null terminator to room ID and customer strings&lt;/li>
&lt;/ul></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/release-1.0.jpg"/></item><item><title>In-game Voice. Redefined. 4Players releases communication software ODIN</title><link>https://odin.4players.io/blog/in-game-voice-redefined-4players-releases-communication-software-odin/</link><pubDate>Fri, 17 Sep 2021 00:00:00 +0000</pubDate><guid>https://odin.4players.io/blog/in-game-voice-redefined-4players-releases-communication-software-odin/</guid><description>&lt;p>&lt;strong>Hamburg, Germany, October 13, 2021&lt;/strong> – German middleware and service provider 4Players announces the Early Access
release of its communication software 4Players ODIN. Developed by veterans responsible for the renowned globally successful
TeamSpeak software, ODIN represents the next generation of in-game voice tools.&lt;/p>
&lt;p>&lt;strong>The main features of 4Players ODIN:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>comprehensive software solution&lt;/li>
&lt;li>ultra-low latency, crystal-clear voice transmission&lt;/li>
&lt;li>native support for Unity Engine (support for Unreal will follow at the end of October)&lt;/li>
&lt;li>integrated ‘Spatial Audio’ support and 3D sound&lt;/li>
&lt;li>deep engine integration instead of superficial voice layers&lt;/li>
&lt;li>no restrictions on creativity: ODIN offers maximum flexibility for developers&lt;/li>
&lt;li>fully customizable user interface&lt;/li>
&lt;li>cross-platform compatibility&lt;/li>
&lt;li>easy integration into existing projects&lt;/li>
&lt;li>uniform code base for all engines, platforms and systems&lt;/li>
&lt;li>encrypted and fully GDPR-compliant service&lt;/li>
&lt;li>performance guarantee, optionally on your own or 4Players servers&lt;/li>
&lt;li>fully scalable: ODIN knows no limit, no matter if 10 or more than 10,000 users&lt;/li>
&lt;/ul>
&lt;p>4Players ODIN is a comprehensive software solution with ultra-low latency and crystal-clear voice transmission. It is
easy to deploy or modify thanks to native engine integration, so game designers can focus on the essentials rather
than complicated tools: The creative realization of their game ideas, no matter what system they are developing for.&lt;/p>
&lt;p>&lt;img src="https://odin.4players.io/images/odin/odin_map.jpg" alt="4Players ODIN 3D Spatial Audio">&lt;/p>
&lt;p>An example how ODIN’s special capabilities can be used to lift immersion to a new level.
ODIN goes further than other SDKs, redefining in-game voice: With spatial audio, 3D sound as well as a chat integration
of the gamers‘ characters into the game environment, which has not been seen before in this form, new paths are broken
in the area of in-game communication. In contrast to many of its competitors, ODIN does not superimpose a superficial
voice channel on the game. Instead, you are directly connected to your fellow players, opponents as well as other parts
of the game world via native engine integration. Voice communication becomes an integral part of the gaming experience.
The SDK is fully GDPR-compliant with its encrypted communication transmission, whether you run it on your own servers or
on 4Players servers.&lt;/p>
&lt;p>For the Early Access launch, ODIN is fully compatible with Unity. Further engine integrations such as Unreal as well as
console support are an integral part of the development roadmap and will be rolled out with coming updates.&lt;/p>
&lt;p>&lt;strong>Phillip Schuster, CEO 4Players GmbH&lt;/strong>: “&lt;em>ODIN was developed from scratch by passionate gamers specifically for the
different needs of gamers, developers and publishers. We are very proud of the result, which not only connects our
passion for games with our almost 20 years of experience with voice software and servers. ODIN is also one of the few
communication solutions that transcends system or engine boundaries and enables a more immersive gaming experience with
new features. Nevertheless, it is very easy to integrate into projects and, thanks to its open structure, can be easily
adapted or modified to meet specific requirements. We are convinced that ODIN is the best solution for communication in
gaming.&lt;/em>”&lt;/p>
&lt;p>“&lt;em>Once you hear the difference, you don’t want to go back to standard communication,&lt;/em>” adds &lt;strong>Sven Paulsen, Project
Lead of 4Players ODIN&lt;/strong> and former TeamSpeak-CTO. “&lt;em>Our SDK, with its focus on the essentials, is not only one of the
most powerful but also one of the most scalable solutions for in-game speech. For us it was enormously important
that our tool does not distract from the development process, but helps the developer to realize his creative ideas.
And we have achieved this goal with ODIN.&lt;/em>”&lt;/p></description><enclosure type="image/jpeg" url="https://odin.4players.io/images/blog/odin-launch.jpg"/></item></channel></rss>