feat(diag): --debug ASIO routing diagnostics in static bundle#852
Merged
Conversation
Song playback runs through the renderer, which WASAPI-exclusive (and ASIO) output silences. Route single-mix feedpaks (stem-less original_audio packs AND single-stem packs) onto the engine's backing transport when the output device type is exclusive-style, and migrate back to HTML5 when it isn't. Extends /api/audio-local-path to resolve /api/sloppak/.../file/... URLs via the same containment guards as serve_sloppak_file. Multi-stem packs stay on the WebAudio path (Phase 2). Includes [feedpak-route] transition-gated diagnostics logging. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e output (Phase 2) Under exclusive-style output the native backing transport (Phase 1, #824) carries loose /audio/ songs and feedpak full-mixes, but not the stems plugin's multi-stem WebAudio graph or tracks JUCE rejected. The feeder taps the renderer-side master with an AudioWorklet, re-points the owning AudioContext at a null sink so it keeps rendering without a device, and pushes ~10 ms chunks over IPC into the desktop engine's renderer bus (feedBack-desktop#90 follow-up). Inert in the Docker sphere and in shared mode. Validated by the fix12 tester spike: null-sink rendering works, clocks hold, no overflow. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gated on window.feedBackDesktop.audio.debugEnabled() (desktop --debug); inert in the Docker sphere and normal desktop runs. - [asio-diag] getCurrentDevice= full device object on outputType change (catches ASIO drivers reporting a non-'ASIO' type name) - [asio-diag] renderer-bus: full feeder decision vector, change-gated (running/exclusive/stems/juceMode/elementSong/want/mode) - [asio-diag] setSink: every sink flip with ctx state + rate Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
📝 WalkthroughWalkthroughAdds a shared debug gate for audio routing diagnostics, logs JUCE device payloads on output-type changes, logs renderer sink flips, and records changed renderer-bus decision vectors to suppress duplicate diagnostics. ChangesAudio routing diagnostics
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
main already contains the renderer-bus Phase 2 feeder; conflicts were the [asio-diag] insertions vs identical upstream context — kept ours. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Testers report song/game audio on the default WASAPI device while the guitar rides the selected ASIO output. The routing-watcher / renderer-bus-feeder logs are change-gated and terse; these verbose lines make tester logs decisive.
(
feat/renderer-bus-phase2is already inmain— after mergingorigin/mainthis PR is diagnostics-only.)What
All gated on
window.feedBackDesktop.audio.debugEnabled()(desktop--debug; see companion desktop PR got-feedBack/feedBack-desktop#95). Inert in the Docker sphere and normal desktop runs.[asio-diag] getCurrentDevice=— full device object on every outputType change; catches an ASIO driver reporting a type name other than exact'ASIO'(the unconfirmed half of the exclusive predicate)[asio-diag] renderer-bus:— feeder decision vector (running / exclusive / stems / juceMode / elementSong / want / mode), change-gated[asio-diag] setSink:— every null-sink/default sink flip with context state + rateCompanion
got-feedBack/feedBack-desktop#95 (
debug:isEnabledIPC + preloadaudio.debugEnabled()).Verification
26/26 tests pass (
renderer_bus_feeder.test.js+juce_engine_reroute.test.js— the feeder tests brace-parse the edited IIFE, so structure breakage would fail them).🤖 Generated with Claude Code
Summary by CodeRabbit