Skip to content

Commit 664a66d

Browse files
committed
* Requires Bitwig 5.3+
* Fire * New: Press Alt+SELECT knob to toggle thes window of the current device (was only SELECT). * New: Press Shift+Alt+SELECT knob to toggle the on/off state of the current device (was Alt+SELECT). * New: Press SELECT to toggle controlling the hovered parameter introduced in Bitwig 5.3. * Generic Flexi * New: Added new function 'Device: Last Parameter' which controls the hovered parameter introduced in Bitwig 5.3.. * MCU * New: The encoder can now control the hovered parameter introduced in Bitwig 5.3. To toggle the feature assign the *Last hovered/clicked parameter* to a function key or a footswitch. * OSC * New: Added new commands and values for /device/lastparam/. * Push 1-3 * New: The *Last Touched* setting of the ribbon controls now the hovered parameter introduced in Bitwig 5.3.
1 parent 63c35ea commit 664a66d

File tree

28 files changed

+567
-143
lines changed

28 files changed

+567
-143
lines changed

DrivenByMoss-Manual.pdf

1.82 KB
Binary file not shown.

dependency-reduced-pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>de.mossgrabers</groupId>
55
<artifactId>DrivenByMoss</artifactId>
66
<name>DrivenByMoss</name>
7-
<version>25.0.2</version>
7+
<version>25.1.0</version>
88
<licenses>
99
<license>
1010
<name>LGPL-2.1-or-later</name>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<artifactId>DrivenByMoss</artifactId>
77
<packaging>jar</packaging>
88
<name>DrivenByMoss</name>
9-
<version>25.0.2</version>
9+
<version>25.1.0</version>
1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1212
</properties>

resources/OSC/OSCTest.maxpat

Lines changed: 236 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,193 @@
3939
"subpatcher_template" : "",
4040
"assistshowspatchername" : 0,
4141
"boxes" : [ {
42+
"box" : {
43+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
44+
"bgfillcolor_angle" : 270.0,
45+
"bgfillcolor_autogradient" : 0.79,
46+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
47+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
48+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
49+
"bgfillcolor_proportion" : 0.39,
50+
"bgfillcolor_type" : "gradient",
51+
"fontname" : "Arial",
52+
"fontsize" : 12.0,
53+
"gradient" : 0,
54+
"id" : "obj-312",
55+
"maxclass" : "message",
56+
"numinlets" : 2,
57+
"numoutlets" : 1,
58+
"outlettype" : [ "" ],
59+
"patching_rect" : [ 1637.5, 907.0, 159.0, 22.0 ],
60+
"presentation_linecount" : 2,
61+
"text" : "/device/lastparam/touched 0",
62+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
63+
}
64+
65+
}
66+
, {
67+
"box" : {
68+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
69+
"bgfillcolor_angle" : 270.0,
70+
"bgfillcolor_autogradient" : 0.79,
71+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
72+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
73+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
74+
"bgfillcolor_proportion" : 0.39,
75+
"bgfillcolor_type" : "gradient",
76+
"fontname" : "Arial",
77+
"fontsize" : 12.0,
78+
"gradient" : 0,
79+
"id" : "obj-313",
80+
"maxclass" : "message",
81+
"numinlets" : 2,
82+
"numoutlets" : 1,
83+
"outlettype" : [ "" ],
84+
"patching_rect" : [ 1637.5, 881.0, 159.0, 22.0 ],
85+
"presentation_linecount" : 2,
86+
"text" : "/device/lastparam/touched 1",
87+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
88+
}
89+
90+
}
91+
, {
92+
"box" : {
93+
"bgcolor" : [ 0.835294, 0.858824, 0.541176, 1.0 ],
94+
"fontname" : "Arial",
95+
"fontsize" : 12.0,
96+
"id" : "obj-311",
97+
"maxclass" : "comment",
98+
"numinlets" : 1,
99+
"numoutlets" : 0,
100+
"patching_rect" : [ 1637.5, 705.424301382812473, 110.0, 20.0 ],
101+
"text" : "Last Parameter"
102+
}
103+
104+
}
105+
, {
106+
"box" : {
107+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
108+
"bgfillcolor_angle" : 270.0,
109+
"bgfillcolor_autogradient" : 0.79,
110+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
111+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
112+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
113+
"bgfillcolor_proportion" : 0.39,
114+
"bgfillcolor_type" : "gradient",
115+
"fontname" : "Arial",
116+
"fontsize" : 12.0,
117+
"gradient" : 0,
118+
"id" : "obj-304",
119+
"maxclass" : "message",
120+
"numinlets" : 2,
121+
"numoutlets" : 1,
122+
"outlettype" : [ "" ],
123+
"patching_rect" : [ 1637.5, 795.0, 133.0, 22.0 ],
124+
"presentation_linecount" : 2,
125+
"text" : "/device/lastparam/reset",
126+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
127+
}
128+
129+
}
130+
, {
131+
"box" : {
132+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
133+
"bgfillcolor_angle" : 270.0,
134+
"bgfillcolor_autogradient" : 0.79,
135+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
136+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
137+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
138+
"bgfillcolor_proportion" : 0.39,
139+
"bgfillcolor_type" : "gradient",
140+
"fontname" : "Arial",
141+
"fontsize" : 12.0,
142+
"gradient" : 0,
143+
"id" : "obj-305",
144+
"maxclass" : "message",
145+
"numinlets" : 2,
146+
"numoutlets" : 1,
147+
"outlettype" : [ "" ],
148+
"patching_rect" : [ 1637.5, 850.0, 157.0, 22.0 ],
149+
"text" : "/device/lastparam/indicate 0",
150+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
151+
}
152+
153+
}
154+
, {
155+
"box" : {
156+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
157+
"bgfillcolor_angle" : 270.0,
158+
"bgfillcolor_autogradient" : 0.79,
159+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
160+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
161+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
162+
"bgfillcolor_proportion" : 0.39,
163+
"bgfillcolor_type" : "gradient",
164+
"fontname" : "Arial",
165+
"fontsize" : 12.0,
166+
"gradient" : 0,
167+
"id" : "obj-306",
168+
"maxclass" : "message",
169+
"numinlets" : 2,
170+
"numoutlets" : 1,
171+
"outlettype" : [ "" ],
172+
"patching_rect" : [ 1637.5, 824.0, 157.0, 22.0 ],
173+
"text" : "/device/lastparam/indicate 1",
174+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
175+
}
176+
177+
}
178+
, {
179+
"box" : {
180+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
181+
"bgfillcolor_angle" : 270.0,
182+
"bgfillcolor_autogradient" : 0.79,
183+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
184+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
185+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
186+
"bgfillcolor_proportion" : 0.39,
187+
"bgfillcolor_type" : "gradient",
188+
"fontname" : "Arial",
189+
"fontsize" : 12.0,
190+
"gradient" : 0,
191+
"id" : "obj-309",
192+
"maxclass" : "message",
193+
"numinlets" : 2,
194+
"numoutlets" : 1,
195+
"outlettype" : [ "" ],
196+
"patching_rect" : [ 1637.5, 764.0, 158.0, 22.0 ],
197+
"presentation_linecount" : 2,
198+
"text" : "/device/lastparam/value 127",
199+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
200+
}
201+
202+
}
203+
, {
204+
"box" : {
205+
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
206+
"bgfillcolor_angle" : 270.0,
207+
"bgfillcolor_autogradient" : 0.79,
208+
"bgfillcolor_color" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
209+
"bgfillcolor_color1" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
210+
"bgfillcolor_color2" : [ 0.685, 0.685, 0.685, 1.0 ],
211+
"bgfillcolor_proportion" : 0.39,
212+
"bgfillcolor_type" : "gradient",
213+
"fontname" : "Arial",
214+
"fontsize" : 12.0,
215+
"gradient" : 0,
216+
"id" : "obj-310",
217+
"maxclass" : "message",
218+
"numinlets" : 2,
219+
"numoutlets" : 1,
220+
"outlettype" : [ "" ],
221+
"patching_rect" : [ 1637.5, 732.0, 151.0, 22.0 ],
222+
"presentation_linecount" : 2,
223+
"text" : "/device/lastparam/value 80",
224+
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
225+
}
226+
227+
}
228+
, {
42229
"box" : {
43230
"bgcolor" : [ 0.678431, 0.819608, 0.819608, 1.0 ],
44231
"bgfillcolor_angle" : 270.0,
@@ -57,7 +244,6 @@
57244
"numoutlets" : 1,
58245
"outlettype" : [ "" ],
59246
"patching_rect" : [ 651.0, 1148.743744611740112, 842.0, 22.0 ],
60-
"presentation_linecount" : 2,
61247
"text" : "/track/1/clip/1/insertFile \"C:/Users/mos/AppData/Local/Bitwig Studio/installed-packages/5.0/Bitwig/Classic Drum Machines/707 Back To 90s Beat 01 A.bwclip\"",
62248
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
63249
}
@@ -82,7 +268,6 @@
82268
"numoutlets" : 1,
83269
"outlettype" : [ "" ],
84270
"patching_rect" : [ 651.0, 1124.623141050338745, 792.0, 22.0 ],
85-
"presentation_linecount" : 10,
86271
"text" : "/clip/insertFile \"C:/Users/mos/AppData/Local/Bitwig Studio/installed-packages/5.0/Bitwig/Classic Drum Machines/707 Back To 90s Beat 01 A.bwclip\"",
87272
"textcolor" : [ 0.0, 0.0, 0.0, 1.0 ]
88273
}
@@ -8622,13 +8807,62 @@
86228807
"source" : [ "obj-303", 0 ]
86238808
}
86248809

8810+
}
8811+
, {
8812+
"patchline" : {
8813+
"destination" : [ "obj-1", 0 ],
8814+
"source" : [ "obj-304", 0 ]
8815+
}
8816+
8817+
}
8818+
, {
8819+
"patchline" : {
8820+
"destination" : [ "obj-1", 0 ],
8821+
"source" : [ "obj-305", 0 ]
8822+
}
8823+
8824+
}
8825+
, {
8826+
"patchline" : {
8827+
"destination" : [ "obj-1", 0 ],
8828+
"source" : [ "obj-306", 0 ]
8829+
}
8830+
8831+
}
8832+
, {
8833+
"patchline" : {
8834+
"destination" : [ "obj-1", 0 ],
8835+
"source" : [ "obj-309", 0 ]
8836+
}
8837+
86258838
}
86268839
, {
86278840
"patchline" : {
86288841
"destination" : [ "obj-1", 0 ],
86298842
"source" : [ "obj-31", 0 ]
86308843
}
86318844

8845+
}
8846+
, {
8847+
"patchline" : {
8848+
"destination" : [ "obj-1", 0 ],
8849+
"source" : [ "obj-310", 0 ]
8850+
}
8851+
8852+
}
8853+
, {
8854+
"patchline" : {
8855+
"destination" : [ "obj-1", 0 ],
8856+
"source" : [ "obj-312", 0 ]
8857+
}
8858+
8859+
}
8860+
, {
8861+
"patchline" : {
8862+
"destination" : [ "obj-1", 0 ],
8863+
"source" : [ "obj-313", 0 ]
8864+
}
8865+
86328866
}
86338867
, {
86348868
"patchline" : {

src/main/java/de/mossgrabers/bitwig/framework/daw/ModelImpl.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import java.util.HashMap;
88
import java.util.Map;
9+
import java.util.Optional;
910
import java.util.UUID;
1011

1112
import com.bitwig.extension.controller.api.Application;
@@ -17,6 +18,7 @@
1718
import com.bitwig.extension.controller.api.Device;
1819
import com.bitwig.extension.controller.api.DeviceBank;
1920
import com.bitwig.extension.controller.api.DeviceMatcher;
21+
import com.bitwig.extension.controller.api.LastClickedParameter;
2022
import com.bitwig.extension.controller.api.MasterTrack;
2123
import com.bitwig.extension.controller.api.PinnableCursorDevice;
2224
import com.bitwig.extension.controller.api.Project;
@@ -28,6 +30,7 @@
2830
import de.mossgrabers.bitwig.framework.daw.data.CursorTrackImpl;
2931
import de.mossgrabers.bitwig.framework.daw.data.DrumDeviceImpl;
3032
import de.mossgrabers.bitwig.framework.daw.data.EqualizerDeviceImpl;
33+
import de.mossgrabers.bitwig.framework.daw.data.FocusedParameterImpl;
3134
import de.mossgrabers.bitwig.framework.daw.data.KompleteDevice;
3235
import de.mossgrabers.bitwig.framework.daw.data.MasterTrackImpl;
3336
import de.mossgrabers.bitwig.framework.daw.data.SpecificDeviceImpl;
@@ -46,6 +49,7 @@
4649
import de.mossgrabers.framework.daw.data.ITrack;
4750
import de.mossgrabers.framework.daw.data.bank.ISceneBank;
4851
import de.mossgrabers.framework.daw.data.bank.ISlotBank;
52+
import de.mossgrabers.framework.parameter.IFocusedParameter;
4953
import de.mossgrabers.framework.scale.Scales;
5054
import de.mossgrabers.framework.utils.FrameworkException;
5155

@@ -64,9 +68,10 @@ public class ModelImpl extends AbstractModel
6468
private final CursorTrack bwCursorTrack;
6569
private final Track rootTrackGroup;
6670
private final BooleanValue masterTrackEqualsValue;
67-
private final Map<Integer, ISceneBank> sceneBanks = new HashMap<> (1);
68-
private final Map<Integer, ISlotBank> slotBanks = new HashMap<> (1);
71+
private final Map<Integer, ISceneBank> sceneBanks = HashMap.newHashMap (1);
72+
private final Map<Integer, ISlotBank> slotBanks = HashMap.newHashMap (1);
6973
private final SceneBank sceneBank;
74+
private FocusedParameterImpl focusedParameter = null;
7075

7176

7277
/**
@@ -142,6 +147,12 @@ public ModelImpl (final ModelSetup modelSetup, final DataSetup dataSetup, final
142147
//////////////////////////////////////////////////////////////////////////////
143148
// Create devices
144149

150+
if (this.modelSetup.wantsFocusedParameter ())
151+
{
152+
final LastClickedParameter lcp = this.controllerHost.createLastClickedParameter ("LastHoveredParam", "Last hovered");
153+
this.focusedParameter = new FocusedParameterImpl (this.valueChanger, lcp.parameter ());
154+
}
155+
145156
final int numDevicesInBank = this.modelSetup.getNumDevicesInBank ();
146157
final int numDeviceLayers = this.modelSetup.getNumDeviceLayers ();
147158
final int numDrumPadLayers = this.modelSetup.getNumDrumPadLayers ();
@@ -328,4 +339,14 @@ public void cleanup ()
328339
{
329340
// Nothing to do
330341
}
342+
343+
344+
/** {@inheritDoc} */
345+
@Override
346+
public Optional<IFocusedParameter> getFocusedParameter ()
347+
{
348+
if (this.focusedParameter == null)
349+
throw new FrameworkException ("No focused parameter created!");
350+
return Optional.of (this.focusedParameter);
351+
}
331352
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Written by Jürgen Moßgraber - mossgrabers.de
2+
// (c) 2017-2025
3+
// Licensed under LGPLv3 - http://www.gnu.org/licenses/lgpl-3.0.txt
4+
5+
package de.mossgrabers.bitwig.framework.daw.data;
6+
7+
import com.bitwig.extension.controller.api.Parameter;
8+
9+
import de.mossgrabers.framework.controller.valuechanger.IValueChanger;
10+
import de.mossgrabers.framework.parameter.IFocusedParameter;
11+
12+
13+
/**
14+
* Encapsulates the data of a parameter in focus, e.g. hovered by the mouse or last touched.
15+
*
16+
* @author Jürgen Moßgraber
17+
*/
18+
public class FocusedParameterImpl extends ParameterImpl implements IFocusedParameter
19+
{
20+
/**
21+
* Constructor.
22+
*
23+
* @param valueChanger The value changer
24+
* @param parameter The parameter
25+
*/
26+
public FocusedParameterImpl (final IValueChanger valueChanger, final Parameter parameter)
27+
{
28+
super (valueChanger, parameter, 0);
29+
}
30+
}

0 commit comments

Comments
 (0)