Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

TravelEar for Big Walk

TravelEar is a Big Walk mod that lets you hear and record your own voice the way other players in your session hear it.

Big Walk runs your microphone through Opus, then through the game’s own processing on every listener’s machine: makeup gain, distance and angle filtering, occlusion, reverb, and item effects like the megaphone. You never hear any of that yourself. TravelEar renders that processed voice from your own position and streams it to a separate Windows audio source that OBS records as its own track.

Status: design complete, implementation in progress. Nothing here is released yet.

Source and issues: github.com/SaberMage/travelear.

Install and record with OBS

You need Big Walk on Windows with BepInEx 6 (IL2CPP) already installed, and OBS Studio 28 or newer on Windows 10 2004 or Windows 11.

1. Install the mod

  1. Download TravelEar-vX.Y.Z.zip from the latest release.
  2. Extract it into the Big Walk folder (the one that contains Big Walk.exe and BepInEx\). The zip carries its own BepInEx\ tree, so you end up with BepInEx\plugins\TravelEar\TravelEar.dll, BepInEx\plugins\TravelEar\TravelEar.Core.dll and BepInEx\TravelEar.Helper\TravelEar.Helper.exe. The Helper sits outside plugins on purpose (BepInEx would otherwise scan it as a plugin); Sink.HelperPath points elsewhere if you move it.
  3. Launch Big Walk once. The mod writes BepInEx\config\com.sabermage.travelear.cfg and starts the Helper. A minimized window titled TravelEar for Big Walk appears in your taskbar.

2. Add the track in OBS

  1. In OBS, add a source: Application Audio Capture.
  2. Set Window to TravelEar for Big Walk and tick Match by executable.
  3. Open Advanced Audio Properties and route the new source to its own track (for example track 3). Record with that track enabled.

Speak in a session. The new source’s meter moves about 200 ms after your own mic meter.

3. Choose whether you hear it

By default the Helper plays to your system default output device, so you hear your processed voice with a short delay. To record it silently, set SinkEndpoint in the config to part of the name of a playback device you are not listening to, such as a spare HDMI output, VB-CABLE, or a VoiceMeeter input. Restart the game after changing it.

To monitor on demand instead, leave SinkEndpoint empty, set Audio Monitoring on the OBS source to Monitor Off, and switch it to Monitor and Output when you want to hear yourself.

Testing the OBS capture without the game

Run the Helper by hand with a test tone to confirm your OBS source hears it before you set up a session:

TravelEar.Helper.exe --tone
TravelEar.Helper.exe --tone --endpoint "CABLE Input"

--endpoint takes part of a playback device name, exactly like SinkEndpoint. If no device matches, the Helper lists the active devices in its window and in %LOCALAPPDATA%\TravelEar\Helper.log, then exits. Close the Helper window to stop the tone.

4. Align with your raw mic track

TravelEar’s track trails your raw mic by the Offset the mod measures continuously. Read it from the Helper’s window (TravelEar offset: N ms; restore “TravelEar for Big Walk” from the taskbar; measuring until the Helper has streamed) or from BepInEx\LogOutput.log (a line like Offset: 203 ms rolling 10 s average), and enter that value as the Sync Offset on your raw mic source if you want both tracks sample-aligned for editing. Expect roughly 200 ms.

Settings

All settings live in Big Walk\BepInEx\config\com.sabermage.travelear.cfg. If you have the ModSettingsMenu mod installed, the same settings appear in the pause menu.

KeyDefaultMeaning
General.EnabledtrueRender your processed voice and stream it to the Helper.
Sink.SpawnHelpertrueLaunch the Helper automatically with the game. Set to false if you start TravelEar.Helper.exe yourself.
Sink.SinkEndpointemptyPart of the name of the playback device the Helper renders to. Empty means the system default device.
Sink.HelperPathemptyFull path to TravelEar.Helper.exe. Empty means the copy under BepInEx\TravelEar.Helper.
Sink.DownmixfalseForce mono output. By default the stream keeps the channel count the game produces.
Fidelity.SinkFeedEncoderWhere your voice is taken from. Encoder processes the decoded outbound voice on the game’s mic thread and sends it straight to the Helper: lowest delay, and immune to the game’s audio-thread hiccups. VoicePlayer is the older path through an in-game voice player, kept for comparison.
Fidelity.MixerStagetrueRe-synthesize the game’s mixer-stage effects (reverb sends, dry/high trims, megaphone character). Master switch for the Mixer* toggles below. Turn off to hear only the exactly reproduced part.
Fidelity.MixerDrytrueThe game’s per-voice dry level. 0 dB at your own ears; kept for comparison.
Fidelity.MixerHightrueThe game’s occlusion high cut, approximated as a 3 kHz shelf. Nothing to cut at your own ears; kept for comparison.
Fidelity.MixerReverbFallfalseThe game’s fall reverb send, applied to Local Voice. Off by default: that send belongs to a voice receding from the listener, and your own voice never recedes from your own ears. Kept for comparison.
Fidelity.MixerReverbBoosttrueThe game’s reverb boost send. Silent at your own ears by the game’s own formula; kept for comparison.
Fidelity.ReverbDecaySeconds1.5Decay time of the approximate reverb, in seconds. Tune by ear against a recording from a second player.
Fidelity.MegaphoneVoicetrueRender the megaphone’s output while you hold and use one, as a listener beside you hears it. Master switch for the Megaphone* toggles.
Fidelity.MegaphoneCrushertrueThe megaphone’s sample-hold crusher. Exact port of the game’s.
Fidelity.MegaphoneHighPasstrueThe megaphone’s 300 Hz high-pass. Exact port.
Fidelity.MegaphoneCompressorstrueThe megaphone mixer’s compressor (10 ms / 1 s) and its Duck Volume (-15 dB, 5:1, 0.25 s). Approximate.
Fidelity.MegaphoneMixAddAdd puts the megaphone output on top of your direct voice, which is what a listener beside you hears. Replace keeps only the megaphone output while you broadcast.
Fidelity.EnvironmentReverbtrueThe room reverb a listener beside you hears on your voice (the game’s dynamic reverb: hallways, caves, almost nothing outdoors), driven by the same live parameters the game writes each frame. Master switch for the EnvironmentReverb* toggles. Levels, onsets and decay are exact targets; the reverb network is approximate.
Fidelity.EnvironmentReverbDryCopytrueThe reverb’s own un-reverbed copy of your voice, which the game mixes on top of the direct path. It is what makes a nearby voice sit in the room rather than beside it.
Fidelity.EnvironmentReverbBusGainstrueThe fixed bus trims a voice meets on a listener’s machine (-3 dB voice group, -6 dB dry bus). Off = both at 0 dB, louder than the game.
Fidelity.EnvironmentReverbVoiceSliderfalseMultiply by the listener’s voice volume slider as the game does. Off by default: the Sink level already follows your own slider.
Fidelity.IndoorAttenuationtrueThe game’s indoor voice attenuation: a listener hears every voice at Outdoorness * 0.5 + 0.5, 6 dB down fully indoors. Uses your own outdoorness at the Self-Ear.
Fidelity.SpeechlessVolumetrueThe red bells’ voice fade: a speaker inside a speechless zone is heard at 1 - speechlessness, silent at the centre. The zone’s pitch drop and super-wet bloom are not rendered yet.
Fidelity.SpeechlessPitchtrueThe red bells’ pitch drop: the voice mixer’s pitch shifter at the VoicePitch the game writes for the listener (1 - speechlessness * the zone's deduction). Pitch without tempo, as in the game; adds 16 ms of latency inside Local Voice. Off = no shifter in the chain.
Fidelity.SpeechlessBloomtrueThe red bells’ super-wet bloom: the 6.8 s dark reverb and chorus that opens as the listener nears a zone (SuperWet_Speechlessness, pitched by SuperWetPitch, both read from the game). Approximate reverb and chorus.
Fidelity.MasterLimitertrueThe game’s master limiter, the last thing a listener’s mix goes through: -3 dB threshold, 10:1, 0.125 s release, 20 dB knee. Approximate detector.
Fidelity.MegaphoneMixertrueThe megaphone mixer’s fixed effects beside its dynamics: 5 kHz low-pass, 2.5 kHz +8 dB EQ, a 2 s -10 dB reverb and a 100 ms echo. Approximate reverb.
Fidelity.TransmitGatetrueRender your voice only while other players would receive it: not muted, and the game’s voice activation hears speech or a radio/megaphone room is open. Off renders everything the mic encodes, noise floor included.
Fidelity.TransmitFadeOutMs0Fade-out of Local Voice when the game’s voice activation stops hearing you, in ms. 0 = the game’s own channel fade, read from its voice-activation trigger and logged as Transmit fade:. Raise it if speech still chops between words.
Fidelity.TransmitHoldMs0How long Local Voice keeps rendering after the game’s voice activation stops hearing you, before the fade-out starts, in ms. 0 = automatic (the fade-out plus 60 ms, at least 100; logged as gate hold). Raise it if the quiet ends of words get cut.
Fidelity.OutputTrimDb0Gain applied to Local Voice last, just before the Helper, in dB. Calibration only: the chain’s level is the game’s (a listener beside you gets the -6 dB dry bus plus the reverb’s own dry copy, about +1 dB together). Negative = quieter.
Fidelity.ReadHeadMarginFrames1.5VoicePlayer feed only. Buffer margin at the start of each talk burst, in 60 ms frames. Lower for less delay; raise it if the log’s stats line shows read-head resyncs climbing.
Fidelity.SelfEarEqDryWet0Wet mix (0 to 1) of the game’s 400 Hz voice EQ. 0 is the dry voice a listener standing next to you hears.
Calibration.CapturefalseReference capture for calibrating the mod against a real listener (M3-PLAN T4a): records the decoded outbound voice, the Local Voice output, every frame’s gate disposition and every mixer float the game writes under %LOCALAPPDATA%\TravelEar\calibration\<timestamp>. Off unless you are measuring.
Calibration.CaptureDeviceemptyPart of the name of the Windows capture device carrying the other machine’s audio output (an HDMI capture card, line-in). With Capture on, a second Helper records it to peer.wav beside the capture; tools/calibrate.py compares the three. Empty = record it yourself.
Ear.SelfEarForwardMeters0.0762How far in front of your in-game ears the voice is placed, in metres (3 inches).

Sink.Downmix applies live. Restart the game after changing any other key.

Offset

The Helper’s window (“TravelEar for Big Walk”, minimized to the taskbar) shows TravelEar offset: N ms: the delay between your voice leaving the mic and reaching the Helper’s output, as a rolling 10 s average. It reads measuring until the first frames have streamed. The same figure is logged as Offset: every 10 s. TravelEar adds nothing to the game’s own menus.

How TravelEar hears you

Big Walk’s voice chat is built on Dissonance with the Opus codec. When you speak, the game preprocesses your mic (noise suppression, push-to-talk gating), encodes it with Opus, and sends the packets to every other player. Each of their machines decodes your voice and runs it through the game’s playback processing before it reaches their speakers. That processing happens in two places.

The filter stage: captured exactly

The first place is a chain of filters on the voice’s own audio source: the Opus decode, a compressor and soft clipper, the per-player makeup gain that levels quiet microphones, an EQ shaped by distance and facing angle, occlusion filtering when a wall sits between you, and the megaphone’s own colouring when you hold one.

TravelEar copies the exact packets the game sends, decodes them with the game’s own decoder, and runs them through the same processing the game applies for other players, ported step for step from the game’s code and checked against it: the compressor, soft clipper and makeup gain, and the voice EQ. It is configured as if the listener stood at your own position: zero distance, facing you, nothing in the way. All of this happens on the game’s microphone thread, the same thread that encodes your voice for other players, and the result goes straight to the Helper. Nothing is played inside the game, so you never hear it through the game itself, and the game’s own audio hiccups cannot reach the recording any more than they reach other players.

The mixer stage: re-synthesized

The second place is Unity’s audio mixer. The game sets per-voice mixer parameters every frame: how much of a voice goes to the valley or room reverb, dry and high-frequency trims, and the megaphone’s wet/dry blend and compression. Unity offers no way to read a single voice back out of the mixer, so TravelEar cannot capture this part.

Instead it reads the same parameters the game writes and applies equivalent processing itself. Gains, filters, and compressors match closely. Reverb is an approximation tuned by comparing against recordings made on a real second client. Every re-synthesized effect can be switched off individually with the Fidelity settings, so you can hear exactly which part is captured and which is reproduced.

What is deliberately left out

  • Walkie-talkie voice. The game already plays your own voice through nearby paired walkie-talkies, so you hear it without TravelEar.
  • Radio. The radio plays music, not player voice.
  • Distance and occlusion. TravelEar renders from your own position. It does not try to guess how far away or behind which wall any particular listener is.

The separate audio source

Everything the mod renders inside the game process would be captured by OBS together with the rest of the game’s audio, because OBS separates audio by process. TravelEar therefore sends the processed voice to a small Helper process that plays it to a Windows playback device of your choice. OBS captures the Helper with Application Audio Capture and gets its own track, with no virtual audio cable driver required.