Skip to content

Commit 619e7e5

Browse files
committed
flag fix
1 parent 3fb3ec7 commit 619e7e5

6 files changed

Lines changed: 27 additions & 14 deletions

File tree

‎docs/todo.md‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
## Producer Control Bus
44

5-
Read /home/danny/github/downspout/docs/producer-control-bus.md and see what might need tweaking/implementing in the plugins to make this more intuitive and useful in /home/danny/github/transmission
5+
~~Read /home/danny/github/downspout/docs/producer-control-bus.md and see what might need tweaking/implementing in the plugins to make this more intuitive and useful in /home/danny/github/transmission~~
6+
7+
Assessment: contract is well-defined. Remaining gaps:
8+
- Bassops CC 34/35 overlay not active (needs `DISTRHO_PLUGIN_WANT_MIDI_INPUT 1` in its DistrhoPluginInfo.h and MIDI processing wired in the plugin)
9+
- Transmission should be able to read bus participation from each plugin's `profile.ttl` using `trn:busRole`, `trn:ccMapping`, and `trn:ccGate` — verify these are populated correctly in all bus-participant profiles (Mixgen, T-Mix, Loopdelay, Lightverb, Bassops)
610

711
## Campione
812

9-
High priority : it forgets its zones between loads.
13+
High priority : it forgets its zones between loads. (May be fixed — verify.)
1014

1115
~~The drum sound recognition part of plugins/campione doesn't find any matches when tested on samples lifted from a drum loop~~ Fixed: three-part acoustic fix + loop-slicing mode.
1216

@@ -24,7 +28,7 @@ Simplify UI, make sounds more varied.
2428

2529
## Lightverb
2630

27-
Remove the SIGNAL FLOW block - if it is only labels
31+
~~Remove the SIGNAL FLOW block - if it is only labels~~ Done: removed block, shifted remaining sections up 82px, reduced window height 650→568.
2832
Think about lightweight additions: spatial? Presets?
2933

3034
## Floozy
@@ -35,13 +39,15 @@ assignments, the generators will not follow. Consider exposing CC number paramet
3539
on the receiver side, or adding a note to the UI that CC numbers must match
3640
Conductor's settings.
3741

38-
### Pending — Conductor CC channel collision note
42+
### ~~Pending — Conductor CC channel collision note~~
3943

40-
The BassGen "MIDI Follow" system (Note On response for drum triggering) and the
44+
~~The BassGen "MIDI Follow" system (Note On response for drum triggering) and the
4145
"Conductor" system (CC response) operate on different MIDI message types, so they
4246
can coexist on the same channel. However, the UI should make this clearer — consider
4347
a tooltip or panel note explaining that Follow Ch and Conductor Ch serve different
44-
purposes and can differ.
48+
purposes and can differ.~~
49+
50+
Done: section labels now read "MIDI Follow · note-on triggers" and "Conductor · CC 20–24 from Mixgen".
4551

4652
## Newer plugins needing evaluation
4753

‎install.sh‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ fi
9999

100100
echo "Installing to $vst3_dir"
101101
cmake --install "$build_dir" --prefix "$vst3_dir"
102+
# cmake install(DIRECTORY) does not preserve execute bits; set them so hosts
103+
# (Carla, REAPER, Ardour) can dlopen the shared libraries.
104+
find "$vst3_dir" -name "*.so" -exec chmod +x {} \;
102105

103106
if compgen -G "$vst3_dir/*.vst3" > /dev/null; then
104107
echo "Installed VST3 bundles:"

‎plugins/bassgen/src/dpf/BassgenUI.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,15 +541,15 @@ class BassgenUI : public UI
541541

542542
// MIDI Follow group
543543
cy += 4.0f;
544-
drawSectionLabel(sx, cy, "MIDI Follow");
544+
drawSectionLabel(sx, cy, "MIDI Follow · note-on triggers");
545545
cy += 14.0f;
546546
selectorRects_[5] = {sx, cy, sw, selectorH};
547547
drawSelector(kSelectors[5], selectorRects_[5], static_cast<int>(std::lround(values_[kSelectors[5].index])));
548548
cy += step;
549549

550550
// Conductor group
551551
cy += 4.0f;
552-
drawSectionLabel(sx, cy, "Conductor");
552+
drawSectionLabel(sx, cy, "Conductor · CC 20–24 from Mixgen");
553553
cy += 14.0f;
554554
selectorRects_[6] = {sx, cy, sw, selectorH};
555555
drawSelector(kSelectors[6], selectorRects_[6], static_cast<int>(std::lround(values_[kSelectors[6].index])));

‎plugins/lightverb/src/dpf/DistrhoPluginInfo.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
#define DISTRHO_PLUGIN_WANT_FULL_STATE 1
1717
#define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Reverb"
1818
#define DISTRHO_UI_DEFAULT_WIDTH 1080
19-
#define DISTRHO_UI_DEFAULT_HEIGHT 650
19+
#define DISTRHO_UI_DEFAULT_HEIGHT 568
2020
#define DISTRHO_UI_USE_NANOVG 1
2121
#endif

‎plugins/lightverb/src/dpf/LightverbUI.cpp‎

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ class LightverbUI final:public GenerativePanelUI{
77
public:LightverbUI():GenerativePanelUI("Lightverb","Fast stereo space for Transmission · fixed-cost FDN · CC 32 mix / CC 33 space",downspout::lightverb::kParameterSpecs.data(),downspout::lightverb::kParameterCount,231,184,92){}
88
private:
99
void onNanoDisplay()override{using namespace downspout::lightverb;beginPanel();
10-
drawSection(24,102,1032,66,"SIGNAL FLOW","zero latency · stereo in / stereo out · use as insert or 100% wet send");drawReadout(38,120,1004,40,"RECOMMENDED MASTER CHAIN","T-Mix → Loopdelay → Lightverb → Guardian");
11-
drawSection(24,184,612,204,"SPACE","four delay lines; the same small workload at every setting");drawPercentSlider(kSpace,38,218,282,"Space","Changes the virtual room scale without adding processing cost.");drawSlider(kDecaySeconds,334,218,288,"Decay"," s","Time for the reverberant tail to fall by roughly 60 dB.",2);drawPercentSlider(kDamping,38,280,282,"Damping","Absorbs high frequencies in the tail; higher values sound darker.");drawSlider(kPreDelayMs,334,280,288,"Pre-delay"," ms","Separates the dry attack from the reverb onset.",0);
12-
drawSection(652,184,404,204,"BLEND","insert-friendly defaults; set Wet mix to 100% on a send");drawPercentSlider(kWidth,666,218,180,"Stereo width","Narrows or spreads the reverberant field.");drawPercentSlider(kMix,860,218,182,"Wet mix","Dry at 0%; effect-only at 100% for an auxiliary send.");drawSlider(kOutputDb,666,280,376,"Output trim"," dB","Level-match Lightverb with the next effect, normally Guardian.",1);
13-
drawSection(24,404,612,204,"PRODUCER CONTROL BUS","CC 19 lifecycle · MIDI passes through to the next effect");drawToggle(kMidiEnabled,38,438,176,"Accept MIDI control","Listen for the fixed Lightverb controller contract.");drawSlider(kControlChannel,226,435,190,"Control channel · 0 = Omni","","0 is Omni; 1–16 isolates this chain from other producer buses.",0);drawToggle(kRequireProducerGate,428,438,194,"Require CC 19 gate","Ignore CC 32/33 until the producer acquires this bus with CC 19.");drawReadout(38,492,282,46,"CC 32 · MIX","0–100% wet return");drawReadout(334,492,288,46,"CC 33 · SPACE","small–large space");drawLamp(38,554,136,"BUS ACTIVE",value(kStatusProducerActive)>=.5f);drawLamp(186,554,136,"MIX TAKEN",value(kStatusMixMidi)>=.5f);drawLamp(334,554,136,"SPACE TAKEN",value(kStatusSpaceMidi)>=.5f);drawAction(0,482,554,140,37,"RELEASE MIDI","Return Mix and Space to their saved panel values.");
14-
drawSection(652,404,404,204,"LIVE","effective values from the audio engine");char mix[20]{},space[20]{};std::snprintf(mix,sizeof(mix),"%d%%",static_cast<int>(std::lround(value(kStatusMix)*100)));std::snprintf(space,sizeof(space),"%d%%",static_cast<int>(std::lround(value(kStatusSpace)*100)));drawReadout(666,438,112,48,"MIX",mix);drawReadout(790,438,120,48,"SPACE",space);drawMeter(kStatusTail,922,438,120,"Tail");drawMeter(kStatusInputPeak,666,502,180,"Input level");drawMeter(kStatusOutputPeak,860,502,182,"Output level");drawReadout(666,554,376,38,"CHAIN STATUS",value(kStatusProducerActive)>=.5f?"Producer owns controls · MIDI thru on":"Manual controls · MIDI thru on");endPanel();}
10+
drawSection(24,102,612,204,"SPACE","four delay lines; the same small workload at every setting");drawPercentSlider(kSpace,38,136,282,"Space","Changes the virtual room scale without adding processing cost.");drawSlider(kDecaySeconds,334,136,288,"Decay"," s","Time for the reverberant tail to fall by roughly 60 dB.",2);drawPercentSlider(kDamping,38,198,282,"Damping","Absorbs high frequencies in the tail; higher values sound darker.");drawSlider(kPreDelayMs,334,198,288,"Pre-delay"," ms","Separates the dry attack from the reverb onset.",0);
11+
drawSection(652,102,404,204,"BLEND","insert-friendly defaults; set Wet mix to 100% on a send");drawPercentSlider(kWidth,666,136,180,"Stereo width","Narrows or spreads the reverberant field.");drawPercentSlider(kMix,860,136,182,"Wet mix","Dry at 0%; effect-only at 100% for an auxiliary send.");drawSlider(kOutputDb,666,198,376,"Output trim"," dB","Level-match Lightverb with the next effect, normally Guardian.",1);
12+
drawSection(24,322,612,204,"PRODUCER CONTROL BUS","CC 19 lifecycle · MIDI passes through to the next effect");drawToggle(kMidiEnabled,38,356,176,"Accept MIDI control","Listen for the fixed Lightverb controller contract.");drawSlider(kControlChannel,226,353,190,"Control channel · 0 = Omni","","0 is Omni; 1–16 isolates this chain from other producer buses.",0);drawToggle(kRequireProducerGate,428,356,194,"Require CC 19 gate","Ignore CC 32/33 until the producer acquires this bus with CC 19.");drawReadout(38,410,282,46,"CC 32 · MIX","0–100% wet return");drawReadout(334,410,288,46,"CC 33 · SPACE","small–large space");drawLamp(38,472,136,"BUS ACTIVE",value(kStatusProducerActive)>=.5f);drawLamp(186,472,136,"MIX TAKEN",value(kStatusMixMidi)>=.5f);drawLamp(334,472,136,"SPACE TAKEN",value(kStatusSpaceMidi)>=.5f);drawAction(0,482,472,140,37,"RELEASE MIDI","Return Mix and Space to their saved panel values.");
13+
drawSection(652,322,404,204,"LIVE","effective values from the audio engine");char mix[20]{},space[20]{};std::snprintf(mix,sizeof(mix),"%d%%",static_cast<int>(std::lround(value(kStatusMix)*100)));std::snprintf(space,sizeof(space),"%d%%",static_cast<int>(std::lround(value(kStatusSpace)*100)));drawReadout(666,356,112,48,"MIX",mix);drawReadout(790,356,120,48,"SPACE",space);drawMeter(kStatusTail,922,356,120,"Tail");drawMeter(kStatusInputPeak,666,420,180,"Input level");drawMeter(kStatusOutputPeak,860,420,182,"Output level");drawReadout(666,472,376,38,"CHAIN STATUS",value(kStatusProducerActive)>=.5f?"Producer owns controls · MIDI thru on":"Manual controls · MIDI thru on");endPanel();}
1514
void actionTriggered(int)override{using namespace downspout::lightverb;commitParameter(kResetMidi,1);commitParameter(kResetMidi,0);}
1615
};
1716
UI*createUI(){return new LightverbUI();}

‎scripts/package-release.sh‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ fi
140140

141141
echo "Installing release payload to $staging_dir"
142142
cmake --install "$build_dir" --config "$build_type" --prefix "$staging_dir"
143+
# cmake install(DIRECTORY) does not preserve execute bits; set them so the
144+
# .so files in the release zip are loadable by hosts on Linux.
145+
if [[ "$platform" == linux-* ]]; then
146+
find "$staging_dir" -name "*.so" -exec chmod +x {} \;
147+
fi
143148

144149
required_bundles=(campione.vst3 bassgen.vst3 p_mix.vst3 e_mix.vst3 m_mix.vst3 t_mix.vst3 mixgen.vst3 loopdelay.vst3 lightverb.vst3 melgen.vst3 rift.vst3 orchid.vst3 ambo.vst3 drumgen.vst3 drumkit.vst3 syrinx.vst3 cadence.vst3 arpgen.vst3 counterpointer.vst3 gremlin.vst3 gremlin_driver.vst3 ground.vst3 floozy.vst3 basilico.vst3 canticle.vst3 luma.vst3 paunchlad.vst3 lifeform.vst3 xoxolo.vst3 tuney_vst.vst3 harmonic_atlas.vst3 conductor.vst3 drift.vst3 mnemosyne.vst3 polymeter.vst3 oracle.vst3 mosaic.vst3 resonance_garden.vst3 orbit.vst3 guardian.vst3 skream.vst3)
145150
if [[ "$sidecar_build" == "ON" ]]; then

0 commit comments

Comments
 (0)