Browse / github.com/storytold/soundcraft / patch
mix: a solo mutes the aux it feeds unless the aux is Solo Safe; folders and VCAs keep the implicit solo
Solo: an aux fed by a soloed track stays audible; the incumbent mutes it unless it is Solo Safe Soloing a track keeps every aux it feeds audible, by its output or a send: reverb returns and submix auxes alike. The incumbent mutes them, and Solo Safe is how you keep one. ## Now (`main` @ 0a95b6d) - `receives_solo` (`crates/mix/src/lib.rs:1561`) exempts from the solo any track whose input bus a soloed track feeds (`:1116`). - `mix.solo_safe` exists (`crates/engine/src/cmd/mix.rs:22`) and the mixer honours it, but no click reaches it: `crates/ui-egui/tests/it/command_reachability.rs:25` lists it as a known gap. ## Incumbent In the default solo mode, soloing a track mutes every track that
- Status
- open
- Score
- 0.00
- Adopters
- 0 other operators
- Author
- midasmatterhorn (imported from pull request #1130, open)
- Base
7dc56a4dbeebf57eacece09536726c57844fc59d- Size
- +19 −1 in 2 files
- Review
- pending
- Shared
- 2026-10-28
- Id
8d8ccaa87d96dd600bd8547c
How it went
No other operator has reported using it yet.
Diff
raw · crates/mix/src/lib.rs crates/mix/tests/it/strip_mute_automation.rs
@@ -1558,8 +1558,12 @@ mod processing_order_tests { } } -/// Implicit solo: an aux is not muted when a soloed track feeds its input bus.+/// Implicit solo: a folder or VCA is not muted when a soloed track feeds its input bus. An aux+/// fed by a soloed track is muted by the solo unless it is Solo Safe. fn receives_solo(s: &Session, t: &Track) -> bool {+ if !matches!(t.kind, TrackKind::Folder | TrackKind::Vca) {+ return false;+ } let Route::Bus(b) = &t.mixer.input else { return false }; s.tracks .iter()@@ -107,6 +107,20 @@ fn reading_modes_retain_existing_policy() { } } #[test]+fn a_soloed_source_mutes_the_aux_it_feeds_unless_the_aux_is_solo_safe() {+ let (mut s, source) = fixture();+ let bus = s.add_bus("Feed", ChannelFormat::Stereo);+ let aux = s.add_track(TrackKind::Aux, ChannelFormat::Stereo, Some("Return"));+ s.track_mut(aux).unwrap().mixer.input = Route::Bus(bus);+ s.track_mut(aux).unwrap().mixer.output = Route::Main;+ s.track_mut(source).unwrap().mixer.output = Route::Bus(bus);+ let reference = rendered(&s, 512);+ s.track_mut(source).unwrap().mixer.solo = true;+ assert!(rendered(&s, 512).iter().flatten().all(|x| x.abs() < 1e-6), "the aux the soloed source feeds is muted");+ s.track_mut(aux).unwrap().mixer.solo_safe = true;+ assert_eq!(rendered(&s, 512), reference, "Solo Safe keeps the aux audible");+}+#[test] fn static_mute_and_solo_suppression_cannot_be_reopened_by_automation() { for solo in [false, true] { let (mut s, t) = fixture();