Skip to content

Commit e3b9951

Browse files
committed
* Maschine
* New: Shift+ARRANGE(R)/IDEAS activates Edit layout. * Maschine Mk2/Studio * New: CHORDS mode can now be accessed as well. To support it the behaviour of the PAD MODE button has been changed. Press it multiple times to toggle between PAD MODE, KEYBOARD and CHORDS mode. Use Shift+PAD MODE to access the settings of the respective mode. * MCU * New: Added new setting *Encoder Knob Slow Down* which allows to slow down the main encoder. * New: Renamed option *Off* to *None* for the settings 'Main display', 'Has a second display', 'VU Meters' and 'Display Colors'. * Fixed: VU meters can be toggled on/off with *Global View* again.
1 parent f944b92 commit e3b9951

File tree

17 files changed

+373
-73
lines changed

17 files changed

+373
-73
lines changed

DrivenByMoss-Manual.pdf

2.68 KB
Binary file not shown.

dependency-reduced-pom.xml

Lines changed: 6 additions & 6 deletions
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>26.2.1</version>
7+
<version>26.3.0</version>
88
<licenses>
99
<license>
1010
<name>LGPL-2.1-or-later</name>
@@ -35,7 +35,7 @@
3535
</plugin>
3636
<plugin>
3737
<artifactId>maven-compiler-plugin</artifactId>
38-
<version>3.14.0</version>
38+
<version>3.14.1</version>
3939
<executions>
4040
<execution>
4141
<id>default-testCompile</id>
@@ -68,7 +68,7 @@
6868
</plugin>
6969
<plugin>
7070
<artifactId>maven-shade-plugin</artifactId>
71-
<version>3.6.0</version>
71+
<version>3.6.1</version>
7272
<executions>
7373
<execution>
7474
<phase>package</phase>
@@ -156,7 +156,7 @@
156156
<plugin>
157157
<groupId>org.codehaus.mojo</groupId>
158158
<artifactId>versions-maven-plugin</artifactId>
159-
<version>2.19.0</version>
159+
<version>2.19.1</version>
160160
<configuration>
161161
<ignoredVersions>.*-M.*,.*-alpha.*,.*-beta.*,.*-ea.*,.*-rc.*</ignoredVersions>
162162
<generateBackupPoms>false</generateBackupPoms>
@@ -165,7 +165,7 @@
165165
<plugin>
166166
<groupId>org.codehaus.mojo</groupId>
167167
<artifactId>license-maven-plugin</artifactId>
168-
<version>2.6.0</version>
168+
<version>2.7.0</version>
169169
<executions>
170170
<execution>
171171
<id>add-third-party</id>
@@ -204,7 +204,7 @@
204204
</plugin>
205205
<plugin>
206206
<artifactId>maven-surefire-plugin</artifactId>
207-
<version>3.5.3</version>
207+
<version>3.5.4</version>
208208
</plugin>
209209
</plugins>
210210
</build>

pom.xml

Lines changed: 8 additions & 8 deletions
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>26.2.1</version>
9+
<version>26.3.0</version>
1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1212
</properties>
@@ -45,12 +45,12 @@
4545
<dependency>
4646
<groupId>net.java.dev.jna</groupId>
4747
<artifactId>jna</artifactId>
48-
<version>5.17.0</version>
48+
<version>5.18.0</version>
4949
</dependency>
5050
<dependency>
5151
<groupId>net.java.dev.jna</groupId>
5252
<artifactId>jna-platform</artifactId>
53-
<version>5.17.0</version>
53+
<version>5.18.0</version>
5454
</dependency>
5555
<dependency>
5656
<groupId>purejavahidapi</groupId>
@@ -104,7 +104,7 @@
104104
<plugin>
105105
<groupId>org.apache.maven.plugins</groupId>
106106
<artifactId>maven-compiler-plugin</artifactId>
107-
<version>3.14.0</version>
107+
<version>3.14.1</version>
108108
<configuration>
109109
<fork>true</fork>
110110
<source>21</source>
@@ -141,7 +141,7 @@
141141
<plugin>
142142
<groupId>org.apache.maven.plugins</groupId>
143143
<artifactId>maven-shade-plugin</artifactId>
144-
<version>3.6.0</version>
144+
<version>3.6.1</version>
145145
<executions>
146146
<execution>
147147
<phase>package</phase>
@@ -233,7 +233,7 @@
233233
<plugin>
234234
<groupId>org.codehaus.mojo</groupId>
235235
<artifactId>versions-maven-plugin</artifactId>
236-
<version>2.19.0</version>
236+
<version>2.19.1</version>
237237
<configuration>
238238
<ignoredVersions>.*-M.*,.*-alpha.*,.*-beta.*,.*-ea.*,.*-rc.*</ignoredVersions>
239239
<generateBackupPoms>false</generateBackupPoms>
@@ -244,7 +244,7 @@
244244
<plugin>
245245
<groupId>org.codehaus.mojo</groupId>
246246
<artifactId>license-maven-plugin</artifactId>
247-
<version>2.6.0</version>
247+
<version>2.7.0</version>
248248
<configuration>
249249
<sortArtifactByName>true</sortArtifactByName>
250250
<licenseMerges>
@@ -291,7 +291,7 @@
291291
<plugin>
292292
<groupId>org.apache.maven.plugins</groupId>
293293
<artifactId>maven-surefire-plugin</artifactId>
294-
<version>3.5.3</version>
294+
<version>3.5.4</version>
295295
</plugin>
296296

297297
</plugins>

src/main/java/de/mossgrabers/controller/mackie/mcu/MCUConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ public void init (final ISettingsUI globalSettings, final ISettingsUI documentSe
412412
this.activateZoomStateSetting (globalSettings);
413413
this.activateChannelTouchSetting (globalSettings);
414414
this.activateKnobSpeedSetting (globalSettings);
415+
this.activateEncoderKnobSpeedSetting (globalSettings);
415416
}
416417

417418

src/main/java/de/mossgrabers/controller/mackie/mcu/MCUControllerSetup.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import de.mossgrabers.framework.controller.hardware.BindType;
8484
import de.mossgrabers.framework.controller.hardware.IHwFader;
8585
import de.mossgrabers.framework.controller.hardware.IHwRelativeKnob;
86+
import de.mossgrabers.framework.controller.valuechanger.IValueChanger;
8687
import de.mossgrabers.framework.controller.valuechanger.RelativeEncoding;
8788
import de.mossgrabers.framework.controller.valuechanger.SignedBit2RelativeValueChanger;
8889
import de.mossgrabers.framework.daw.IApplication;
@@ -170,6 +171,7 @@ public class MCUControllerSetup extends AbstractControllerSetup<MCUControlSurfac
170171
private final int [] faderValues = new int [32];
171172
private int masterFaderValue = -1;
172173
private final int numMCUDevices;
174+
private IValueChanger encoderValueChanger;
173175
private JogWheelCommand<MCUControlSurface, MCUConfiguration> jogWheelCommand = null;
174176
private MasterVolumeMode<MCUControlSurface, MCUConfiguration> masterVolumeMode;
175177

@@ -195,6 +197,7 @@ public MCUControllerSetup (final IHost host, final ISetupFactory factory, final
195197

196198
this.colorManager = new MCUColorManager ();
197199
this.valueChanger = new SignedBit2RelativeValueChanger (16241 + 1, 10);
200+
this.encoderValueChanger = new SignedBit2RelativeValueChanger (16241 + 1, 10);
198201
this.configuration = new MCUConfiguration (host, this.valueChanger, numMCUDevices, factory.getArpeggiatorModes ());
199202
}
200203

@@ -446,7 +449,7 @@ protected void registerTriggerCommands ()
446449

447450
if (this.configuration.getDeviceType (index) == MCUDeviceType.MAIN)
448451
{
449-
this.jogWheelCommand = new JogWheelCommand<> (this.model, surface);
452+
this.jogWheelCommand = new JogWheelCommand<> (this.model, surface, this.encoderValueChanger);
450453

451454
// Navigation
452455
final MCUWindCommand rewindCommand = new MCUWindCommand (this.model, surface, false);

src/main/java/de/mossgrabers/controller/ni/maschine/jam/controller/MaschineJamControlSurface.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public class MaschineJamControlSurface extends AbstractMaschineControlSurface<Ma
186186
*
187187
* @param host The host
188188
* @param colorManager The color manager
189-
* @param maschine The maschine description
189+
* @param data.maschine The maschine description
190190
* @param configuration The configuration
191191
* @param output The MIDI output
192192
* @param input The MIDI input

src/main/java/de/mossgrabers/controller/ni/maschine/mk3/MaschineControllerSetup.java

Lines changed: 22 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@
2323
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.AddDeviceCommand;
2424
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.KeyboardCommand;
2525
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineCursorCommand;
26+
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineEncoderPressCommand;
27+
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineMk2PlayViewSwitchCommand;
2628
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineSelectButtonCommand;
2729
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineSendSelectCommand;
2830
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineStopCommand;
31+
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.MaschineTapMetroCommand;
2932
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.PadModeCommand;
3033
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.PageCommand;
3134
import de.mossgrabers.controller.ni.maschine.mk3.command.trigger.ProjectButtonCommand;
@@ -82,7 +85,6 @@
8285
import de.mossgrabers.framework.command.trigger.transport.ConfiguredRecordCommand;
8386
import de.mossgrabers.framework.command.trigger.transport.MetronomeCommand;
8487
import de.mossgrabers.framework.command.trigger.transport.PlayCommand;
85-
import de.mossgrabers.framework.command.trigger.transport.TapTempoCommand;
8688
import de.mossgrabers.framework.command.trigger.transport.ToggleLoopCommand;
8789
import de.mossgrabers.framework.command.trigger.view.ToggleShiftViewCommand;
8890
import de.mossgrabers.framework.command.trigger.view.ViewMultiSelectCommand;
@@ -157,7 +159,7 @@ public class MaschineControllerSetup extends AbstractControllerSetup<MaschineCon
157159
* @param factory The factory
158160
* @param globalSettings The global settings
159161
* @param documentSettings The document (project) specific settings
160-
* @param maschine The specific maschine model
162+
* @param maschine The specific Maschine model
161163
*/
162164
public MaschineControllerSetup (final IHost host, final ISetupFactory factory, final ISettingsUI globalSettings, final ISettingsUI documentSettings, final Maschine maschine)
163165
{
@@ -313,6 +315,7 @@ protected void registerTriggerCommands ()
313315
final ModeManager modeManager = surface.getModeManager ();
314316
final ViewManager viewManager = surface.getViewManager ();
315317
final ITransport t = this.model.getTransport ();
318+
this.mainKnobCommand = new MainKnobRowModeCommand (this.model, surface);
316319

317320
this.addButton (ButtonID.SHIFT, "SHIFT", new ToggleShiftViewCommand<> (this.model, surface), this.maschine == Maschine.STUDIO ? MaschineControlSurface.NAVIGATE_BACK : -1, () -> viewManager.isActive (Views.SHIFT) || surface.isShiftPressed ());
318321

@@ -324,19 +327,7 @@ protected void registerTriggerCommands ()
324327
this.addButton (ButtonID.STOP, "STOP", new MaschineStopCommand (this.model, surface), MaschineControlSurface.STOP, () -> !t.isPlaying ());
325328
this.addButton (ButtonID.LOOP, "LOOP", new ToggleLoopCommand<> (this.model, surface), MaschineControlSurface.RESTART, t::isLoop);
326329
this.addButton (ButtonID.DELETE, "ERASE", NopCommand.INSTANCE, MaschineControlSurface.ERASE);
327-
final MetronomeCommand<MaschineControlSurface, MaschineConfiguration> metroCommand = new MetronomeCommand<> (this.model, surface, false);
328-
final TapTempoCommand<MaschineControlSurface, MaschineConfiguration> tapTempoCommand = new TapTempoCommand<> (this.model, surface);
329-
this.addButton (ButtonID.TAP_TEMPO, "TAP/METRO", (event, velocity) -> {
330-
if (event != ButtonEvent.UP)
331-
return;
332-
if (surface.isShiftPressed ())
333-
{
334-
surface.setStopConsumed ();
335-
metroCommand.executeNormal (event);
336-
}
337-
else
338-
tapTempoCommand.execute (ButtonEvent.DOWN, velocity);
339-
}, MaschineControlSurface.TAP_METRO, t::isMetronomeOn);
330+
this.addButton (ButtonID.TAP_TEMPO, "TAP/METRO", new MaschineTapMetroCommand (this.model, surface), MaschineControlSurface.TAP_METRO, t::isMetronomeOn);
340331

341332
this.addButton (ButtonID.FLIP, this.maschine == Maschine.STUDIO || this.maschine == Maschine.MK2 ? "GRID" : "FOLLOW", (event, velocity) -> {
342333
if (event != ButtonEvent.UP)
@@ -373,24 +364,7 @@ protected void shiftedFunction ()
373364
this.addButton (ButtonID.F2, "MOD", new RibbonCommand (this.model, surface, RIBBON_MODES_CC), MaschineControlSurface.MOD, () -> this.isRibbonMode (new HashSet<> (RIBBON_MODES_CC)));
374365
this.addButton (ButtonID.F3, "PERFORM", new RibbonCommand (this.model, surface, RIBBON_MODES_MASTER_VOLUME), MaschineControlSurface.PERFORM, () -> this.isRibbonMode (new HashSet<> (RIBBON_MODES_MASTER_VOLUME)));
375366
this.addButton (ButtonID.F4, "NOTES", new RibbonCommand (this.model, surface, RIBBON_MODES_NOTE_REPEAT), MaschineControlSurface.NOTES, () -> this.isRibbonMode (new HashSet<> (RIBBON_MODES_NOTE_REPEAT)));
376-
377-
this.addButton (ButtonID.FADER_TOUCH_1, "ENCODER PRESS", (event, velocity) -> {
378-
379-
if (event != ButtonEvent.DOWN)
380-
return;
381-
382-
if (modeManager.getActiveID () == Modes.BROWSER)
383-
{
384-
this.model.getBrowser ().stopBrowsing (true);
385-
modeManager.restore ();
386-
}
387-
else
388-
{
389-
this.mainKnobCommand.toggleControlLastParamActive ();
390-
surface.getDisplay ().notify ("Last Param: " + (this.mainKnobCommand.isControlLastParamActive () ? " ON" : "OFF"));
391-
}
392-
393-
}, MaschineControlSurface.ENCODER_PUSH);
367+
this.addButton (ButtonID.FADER_TOUCH_1, "ENCODER PRESS", new MaschineEncoderPressCommand (this.model, surface, this.mainKnobCommand), MaschineControlSurface.ENCODER_PUSH);
394368

395369
// Encoder Modes
396370
this.addButton (ButtonID.VOLUME, "VOLUME", new VolumePanSendCommand (this.model, surface), MaschineControlSurface.VOLUME, () -> Modes.isTrackMode (modeManager.getActiveID ()));
@@ -444,7 +418,7 @@ protected boolean getCommit ()
444418
this.addButton (ButtonID.ACCENT, "ACCENT", new ToggleFixedVelCommand (this.model, surface), MaschineControlSurface.FIXED_VEL, this.configuration::isAccentActive);
445419

446420
this.addButton (ButtonID.SCENE1, "SCENE", new ViewMultiSelectCommand<> (this.model, surface, Views.SCENE_PLAY), MaschineControlSurface.SCENE, () -> viewManager.isActive (Views.SCENE_PLAY));
447-
this.addButton (ButtonID.CLIP, "PATTERN", new ViewMultiSelectCommand<> (this.model, surface, Views.SESSION), MaschineControlSurface.PATTERN, () -> viewManager.isActive (Views.CLIP_LENGTH));
421+
this.addButton (ButtonID.CLIP, "PATTERN", new ViewMultiSelectCommand<> (this.model, surface, Views.SESSION), MaschineControlSurface.PATTERN, () -> viewManager.isActive (Views.CLIP_LENGTH, Views.SESSION));
448422
this.addButton (ButtonID.NOTE, "EVENTS", new ModeSelectCommand<> (this.model, surface, Modes.NOTE, true), MaschineControlSurface.EVENTS, () -> modeManager.isActive (Modes.NOTE));
449423
this.addButton (ButtonID.TOGGLE_DEVICE, this.maschine == Maschine.STUDIO || this.maschine == Maschine.MK2 ? "NAVIGATE" : "VARIATION", new ViewMultiSelectCommand<> (this.model, surface, Views.DEVICE), MaschineControlSurface.VARIATION, () -> viewManager.isActive (Views.DEVICE));
450424
this.addButton (ButtonID.DUPLICATE, "DUPLICATE", NopCommand.INSTANCE, MaschineControlSurface.DUPLICATE);
@@ -476,13 +450,20 @@ protected boolean getCommit ()
476450
this.addButton (ButtonID.MUTE, "MUTE", new ViewMultiSelectCommand<> (this.model, surface, Views.TRACK_MUTE), MaschineControlSurface.MUTE, () -> viewManager.isActive (Views.TRACK_MUTE));
477451
}
478452

479-
final KeyboardCommand keyboardCommand = new KeyboardCommand (this.model, surface);
480-
this.addButton (ButtonID.ROW1_1, "PAD MODE", new PadModeCommand (keyboardCommand, this.model, surface), MaschineControlSurface.PAD_MODE, () -> viewManager.isActive (Views.DRUM));
481-
this.addButton (ButtonID.ROW1_2, "KEYBOARD", keyboardCommand, MaschineControlSurface.KEYBOARD, () -> viewManager.isActive (Views.PLAY));
482-
this.addButton (ButtonID.ROW1_3, "CHORDS", (event, velocity) -> {
483-
if (velocity == 0)
484-
((PlayView) viewManager.get (Views.PLAY)).toggleChordMode ();
485-
}, MaschineControlSurface.CHORDS, ((PlayView) viewManager.get (Views.PLAY))::isChordMode);
453+
if (this.maschine == Maschine.MK2 || this.maschine == Maschine.STUDIO)
454+
{
455+
this.addButton (ButtonID.ROW1_1, "PAD MODE", new MaschineMk2PlayViewSwitchCommand (this.model, surface), MaschineControlSurface.PAD_MODE, () -> viewManager.isActive (Views.DRUM, Views.PLAY));
456+
}
457+
else
458+
{
459+
final KeyboardCommand keyboardCommand = new KeyboardCommand (this.model, surface);
460+
this.addButton (ButtonID.ROW1_1, "PAD MODE", new PadModeCommand (keyboardCommand, this.model, surface), MaschineControlSurface.PAD_MODE, () -> viewManager.isActive (Views.DRUM));
461+
this.addButton (ButtonID.ROW1_2, "KEYBOARD", keyboardCommand, MaschineControlSurface.KEYBOARD, () -> viewManager.isActive (Views.PLAY));
462+
this.addButton (ButtonID.ROW1_3, "CHORDS", (event, velocity) -> {
463+
if (velocity == 0)
464+
((PlayView) viewManager.get (Views.PLAY)).toggleChordMode ();
465+
}, MaschineControlSurface.CHORDS, ((PlayView) viewManager.get (Views.PLAY))::isChordMode);
466+
}
486467

487468
final DrumView drumView = (DrumView) viewManager.get (Views.DRUM);
488469
this.addButton (ButtonID.ROW1_4, "STEP", (event, velocity) -> {
@@ -683,7 +664,6 @@ protected void registerContinuousCommands ()
683664
final ModeManager modeManager = surface.getModeManager ();
684665
final ViewManager viewManager = surface.getViewManager ();
685666

686-
this.mainKnobCommand = new MainKnobRowModeCommand (this.model, surface);
687667
final IHwRelativeKnob knob = this.addRelativeKnob (ContinuousID.MASTER_KNOB, "Encoder", this.mainKnobCommand, MaschineControlSurface.ENCODER);
688668
knob.bindTouch ( (event, velocity) -> {
689669
final IMode mode = modeManager.getActive ();
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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.controller.ni.maschine.mk3.command.trigger;
6+
7+
import de.mossgrabers.controller.ni.maschine.mk3.MaschineConfiguration;
8+
import de.mossgrabers.controller.ni.maschine.mk3.command.continuous.MainKnobRowModeCommand;
9+
import de.mossgrabers.controller.ni.maschine.mk3.controller.MaschineControlSurface;
10+
import de.mossgrabers.framework.command.core.AbstractTriggerCommand;
11+
import de.mossgrabers.framework.daw.IModel;
12+
import de.mossgrabers.framework.featuregroup.ModeManager;
13+
import de.mossgrabers.framework.mode.Modes;
14+
import de.mossgrabers.framework.utils.ButtonEvent;
15+
16+
17+
/**
18+
* Command to handle pressing the main encoder button.
19+
*
20+
* @author Jürgen Moßgraber
21+
*/
22+
public class MaschineEncoderPressCommand extends AbstractTriggerCommand<MaschineControlSurface, MaschineConfiguration>
23+
{
24+
final MainKnobRowModeCommand mainKnobCommand;
25+
26+
27+
/**
28+
* Constructor.
29+
*
30+
* @param model The model
31+
* @param surface The surface
32+
* @param mainKnobCommand
33+
*/
34+
public MaschineEncoderPressCommand (final IModel model, final MaschineControlSurface surface, final MainKnobRowModeCommand mainKnobCommand)
35+
{
36+
super (model, surface);
37+
38+
this.mainKnobCommand = mainKnobCommand;
39+
}
40+
41+
42+
/** {@inheritDoc} */
43+
@Override
44+
public void execute (final ButtonEvent event, final int velocity)
45+
{
46+
if (event != ButtonEvent.DOWN)
47+
return;
48+
49+
final ModeManager modeManager = this.surface.getModeManager ();
50+
if (modeManager.getActiveID () == Modes.BROWSER)
51+
{
52+
this.model.getBrowser ().stopBrowsing (true);
53+
modeManager.restore ();
54+
}
55+
else
56+
{
57+
this.mainKnobCommand.toggleControlLastParamActive ();
58+
this.surface.getDisplay ().notify ("Last Param: " + (this.mainKnobCommand.isControlLastParamActive () ? " ON" : "OFF"));
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)