# Audio

Configure one-way and two-way audio streaming.

Last validated: 2026-05-05

Oden audio streaming is configured in the Streamer `Output` panel and in the Player `Remote Streamer` entity. Use `Send` on the side with the microphone and `Receive` on the side with the speakers.

## Configure vehicle audio to the operator

Use this for the common one-way setup where the Streamer sends vehicle audio to the Player.

1.  On the Streamer, open `Output`.
    
2.  Open `Audio Streaming`.
    
3.  In `Send`, enable `Auto Start` if the microphone should start when the project opens.
    
4.  Enable `Use Default` or select the capture `Device`. When the build exposes `Capture Source`, use `System` for normal operating-system audio devices and a project-specific source only when that source has been validated.
    
5.  Keep `Period` at `10.0 ms, 480 frames` when using `Audio Processing`.
    
6.  Keep `Mode` as `VBR` unless a fixed audio bitrate is required.
    
7.  Set `Target Bitrate`; the default `64 kbps` is enough for most speech and ambient audio.
    
8.  Select `Start Sending`.
    
9.  On the Player, select the `Remote Streamer` entity.
    
10.  Open `Audio`.
     
11.  In `Receive`, enable `Auto Start` if playback should start when the project opens.
     
12.  Select `Start Receiving`.
     
13.  Adjust `Volume` while receiving.
     

The receiver uses the default audio playback device. Change the operating-system default output device before starting Oden when the wrong speakers are used.

## Configure two-way audio

Use two-way audio when the operator must talk back to the vehicle.

1.  Configure vehicle-to-operator audio as above.
    
2.  On the Player `Remote Streamer` entity, open `Audio`.
    
3.  In `Send`, select the operator microphone and select `Start Sending`.
    
4.  On the Streamer, open `Output` then `Audio Streaming`.
    
5.  In `Receive`, select `Start Receiving`.
    
6.  Test both directions separately before enabling `Auto Start` on both sides.
    

Two-way audio uses the same network links as video. If one direction works and the other does not, check the responder ports, firewall rules, and link mode on both projects.

## Tune audio processing

Open `Audio Processing` on the sending side.

-   Enable `Audio Processing` for microphone audio where echo, noise, or level changes are expected.
    
-   Set `Echo Cancellation` to `Moderate` first; raise it only if speaker echo remains.
    
-   Set `Noise Suppression` to `Low` first; higher values can make machinery or speech sound unnatural.
    
-   Increase `Compression Gain` only when the microphone is consistently too quiet.
    

> **NOTE**
> Audio processing requires `Period` to be `10.0 ms, 480 frames`. Oden shows a warning when audio processing is enabled with another period.

## Tune receive stability

Use these settings when playback is choppy or the network reorders packets.

1.  Increase `Receive Buffer` first; the default is `90 ms`. Larger values tolerate jitter but add latency.
    
2.  Enable `Reorder Buffer` only when packet reordering is suspected.
    
3.  Increase `Reorder Packets` gradually from the default `5`.
    
4.  Increase `Max Invalid Packets In A Row` only when streams restart or reorder heavily and valid audio is rejected. Invalid packets are usually packets that are too old for the current audio timeline.
    
5.  Re-test with `Show Stats` enabled and watch period, decode time, and bitrate.
    

Prefer fixing network loss and jitter before adding large audio buffers.

## Linux audio setup

On Linux, Oden uses PulseAudio and normally follows the desktop user’s default audio input and output devices. Configure those devices in the operating system sound settings before starting Oden.

The default audio latency is `10 ms`. If a Linux setup needs a different PulseAudio latency, set `PULSE_LATENCY_MSEC` before launching the application:

```shell
PULSE_LATENCY_MSEC=20 oden-vr
```

If Player or Streamer is intentionally running as `root`, PulseAudio may need to run system-wide. That is a system administration choice with security tradeoffs; prefer running the Player as a normal user unless the deployment requires root. For the upstream PulseAudio guidance, see [PulseAudio system-wide mode](https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/).

## Project-file names

Audio settings are stored as `RealtimeAudioSettings`. In Streamer projects, the output audio settings are under `audio_streamer_settings`. In Player projects, the `Remote Streamer` entity stores them under `realtime_audio_settings`.

```libconfig
audio_streamer_settings : {
    auto_start_sender : true;
    auto_start_receiver : false;
    enable_audio_processing : true;
    buffer_limit_ms : 90;
    encoder_settings : {
        bitrate : 64000;
        period : "p_e_r_i_o_d_480";
    };
};
```

Prefer changing audio settings in the Oden UI. Edit `.vproj` files directly only when applying the same known settings to many projects.
