Skip to content

Recording: drop dry/wet Source choice, always write dry sidecar alongside wet #92

Description

@Cheesewizard

Goal

Remove the dry-vs-wet Source choice from recording. Every take records the wet game mix; a dry .dry.wav sidecar is written automatically alongside it whenever the dry input is ready. Simplifies both UIs and the flags plumbing, and means the dry take is always available (re-amping, NBN corpus) without deciding up front.

Why

  • The Source selector is a per-take decision the user rarely wants to make, and picking dry means silently losing the wet take.
  • Both signals are already observed live; only the file-writing side is mutually exclusive today.
  • Removes UI + cross-process plumbing rather than adding it.

Current state (as of this ticket)

  • Two orthogonal choices mirrored in the GUI Recording page (GUI/Audio/AudioRoutingPanel.cs) and the in-game overlay (DLL/Menu.cpp): Source (Game mix / Dry guitar) and Format (Audio WAV / Video MP4).
  • Wet = output tap; dry = DrySignalRecording fed from Player 1's input hook (post-pitch-shift, pre-tone).
  • On the ASIO path wet and dry share a single GameAudioRecorder slot (DLL/Audio/SharedOutput.cpp ~L377-401): op 2 opens it tagged "wet", op 14 opens it tagged "dry" and attaches the input tap, so they are mutually exclusive.
  • Overlay flags word (DLL/Keybindings.cpp ~L75): bit 0x100 = override present, bit 1 = dry, bit 2 = video.

Proposed change

  1. Recorder layer: add a second GameAudioRecorder slot so the output-fed (wet) and input-fed (dry) recorders can write concurrently. Wet is primary; dry is best-effort.
  2. Readiness gating: only open the dry sidecar when DrySignalRecording::IsReady() (48k input packets within the last 1s). In cable mode / before the input hook is feeding, just write wet. Not lockstep with wet.
  3. File naming: take.wav + take.dry.wav. TakeList should not clutter — group the sidecar under its parent or hide .dry.wav from the top level.
  4. Video: unchanged — MP4 muxes the wet source; dry remains a sidecar wav.
  5. UI removal: drop the Source segmented control (AudioRoutingPanel.cs), the Source radios (Menu.cpp), the RecordingSource persistence, overlay flags bit 1, and the wet/dry status strings.

Caveats / must-verify

  • Confirm live that both recorders can write at once with no contention (two different sources: output tap vs input hook, so expected to be fine, but verify on a real ASIO session).
  • Define behavior clearly when dry is not ready: wet-only take, no error surfaced as a failure.
  • No functional loss: users who previously picked dry-only now also get the wet file (extra file, not a regression).

Notes

Request 1 (default recording to Video in both UIs) is already done in the working tree (uncommitted): Menu.cpp recFormat = 1, AudioRoutingPanel.cs new CaptureMode setting defaulting to Video. This ticket is the follow-up simplification.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions