fix(editor): soloing an audio track actually isolates it (master joins the audio-band solo rule) - #348
Conversation
|
Warning Review limit reached
Next review available in: 18 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (8)
📝 WalkthroughWalkthroughThe mixer now treats the Master Mix as part of the audio-band solo rule. Audio-track solos can mute the master, transcription solos keep the recording audible, and mute remains dominant. UI text, documentation, comments, changelog entries, and regression tests were updated. ChangesAudio solo rules
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 unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/mixer-panel.js`:
- Around line 424-433: Update the solo status message in the act === 'solo'
branch of the surrounding status logic, specifically the isAudio ternary, to say
that unsoloed audio tracks are silent instead of claiming the master mix is
always included. Preserve the existing guide-voice and recording-audibility
wording.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 8c3ff42d-b96e-4d11-93db-711f0efd2c12
📒 Files selected for processing (8)
CHANGELOG.mddocs/USER-GUIDE.mdsrc/audio.jssrc/mixer-panel.jssrc/stem-tracks.jssrc/track-session.jstests/mixer_panel.test.mjstests/stem_engine.test.mjs
…s the audio-band solo rule) The Master Mix strip was immune to every solo (_mixerPartAudiblePure's 'audio:master' carve-out framed it as the output bus). But the strip is the full-mix RECORDING — a peer audio track; the real output fader is the mixer's master BUS. So soloing a stem left the full mix playing over it: audio solo never isolated anything, and mute then read as inconsistent because the master ignored a solo that silenced its unmuted neighbours. Scope the immunity to what D5 actually decided: the master ignores TRANSCRIPTION-part solos (the recording is the reference you chart against) but joins the solo rule when the solo lives in its own band — soloing a stem mutes the master like any peer, and the master's own solo isolates the recording. Mute still always wins. New _mixerAnyAudioSoloPure feeds the scoped rule; strip titles, status lines, "Solo my source track" copy, the User Guide, and the stale comments follow. Runtime-verified with a 3-source fixture (master + 2 stems) through the real host: 18 matrix cells across drawer + Tracks-pane toggles, playing/stopped, and the audition slow path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0178CGdtptemWd4tUbjkYDhH
a0dad11 to
cac8ce2
Compare
What
Soloing an audio track now actually isolates it. The Master Mix strip used to be
immune to every solo (
_mixerPartAudiblePure's'audio:master'carve-out framedit as "the output bus"), so soloing a stem left the full-mix recording playing over
it — audio solo never isolated anything. It also made mute look broken: with any
solo active, unmuting a stem produced no sound (solo rule — correct) while the
master ignored the same solo, so the strips appeared to obey different laws.
Why the carve-out was wrong
The
audio:masterstrip is the full-mix recording — a peer audio track (thetrack-session/multitrack model treats it as one of the audio sources, swappable).
The actual output fader is the mixer's master bus in the bus band, a different
control entirely. Treating the recording strip as an output bus made it un-soloable-
against, which defeats stem isolation — the main reason stems exist.
The rule now
audio:*strip soloed): the audio band isolates to thesoloed strips — soloing a stem mutes the master like any peer; soloing the master
isolates the recording; soloing master + stem plays both.
arr:*): the master stays audible — charrette D5 ("solokeeps the reference audible") is untouched; it was decided for transcription-part
solos and still governs them. Stems keep their existing whole-map behavior.
_mixerAnyAudioSoloPure(new pure) scopes the rule. Strip tooltips, status lines,the "Solo my source track" copy, the User Guide, and the stale comments follow.
Verification
npm test— all suites pass exceptmixer_meter_teardown+song_fit, whichalready fail on main (pre-existing, noted in the session handoff).
npm run lint— 0 errors (3 pre-existing warnings in untouched files).(
mixer_panel.test.mjs), the peer-master cell + the live-Shook test through_mixerPartStripState— the exact seamapplyStemMix/_ensureStemGainrampgain nodes from (
stem_engine.test.mjs).Playwright, a synthesized 3-source pack: master 440+660 Hz, stems 440 / 660 Hz),
reading the post-gain mixer meters per strip: 18 matrix cells across the mixer
drawer and the Tracks-pane buttons, playing and stopped, plus the audition
slow path (MediaElement route) — mute/unmute correct everywhere before and after;
solo cells flip from "master bleeds over everything" (pre-fix, reproduced) to
correct isolation, with D5 part-solo behavior preserved.
🤖 Generated with Claude Code
https://claude.ai/code/session_0178CGdtptemWd4tUbjkYDhH
Summary by CodeRabbit
Bug Fixes
Documentation