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
- 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.
- 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.
- 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.
- Video: unchanged — MP4 muxes the wet source; dry remains a sidecar wav.
- 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.
Goal
Remove the dry-vs-wet Source choice from recording. Every take records the wet game mix; a dry
.dry.wavsidecar 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
Current state (as of this ticket)
GUI/Audio/AudioRoutingPanel.cs) and the in-game overlay (DLL/Menu.cpp): Source (Game mix / Dry guitar) and Format (Audio WAV / Video MP4).DrySignalRecordingfed from Player 1's input hook (post-pitch-shift, pre-tone).GameAudioRecorderslot (DLL/Audio/SharedOutput.cpp~L377-401):op 2opens it tagged"wet",op 14opens it tagged"dry"and attaches the input tap, so they are mutually exclusive.DLL/Keybindings.cpp~L75): bit 0x100 = override present, bit 1 = dry, bit 2 = video.Proposed change
GameAudioRecorderslot so the output-fed (wet) and input-fed (dry) recorders can write concurrently. Wet is primary; dry is best-effort.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.take.wav+take.dry.wav.TakeListshould not clutter — group the sidecar under its parent or hide.dry.wavfrom the top level.AudioRoutingPanel.cs), the Source radios (Menu.cpp), theRecordingSourcepersistence, overlay flags bit 1, and the wet/dry status strings.Caveats / must-verify
Notes
Request 1 (default recording to Video in both UIs) is already done in the working tree (uncommitted):
Menu.cpprecFormat = 1,AudioRoutingPanel.csnewCaptureModesetting defaulting to Video. This ticket is the follow-up simplification.