Skip to content

Commit 2d2f5a5

Browse files
committed
Revert update for NI Keyboards
1 parent c8df184 commit 2d2f5a5

23 files changed

Lines changed: 313 additions & 139 deletions

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/ClipSceneCursor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ public ClipSceneCursor(final ControllerHost host, final NavigationState navigati
3030
sceneBank = singleTrackBank.sceneBank();
3131
sceneBank.cursorIndex().markInterested();
3232
sceneBank.setIndication(false);
33-
singleTrackBank.canScrollChannelsDown().addValueObserver(navigationState::setCanGoTrackRight);
34-
sceneBank.canScrollBackwards().addValueObserver(navigationState::setCanScrollSceneUp);
35-
sceneBank.canScrollForwards().addValueObserver(navigationState::setCanScrollSceneDown);
33+
singleTrackBank.canScrollChannelsUp().addValueObserver(v -> navigationState.setCanGoTrackLeft(v));
34+
singleTrackBank.canScrollChannelsDown().addValueObserver(v -> navigationState.setCanGoTrackRight(v));
35+
sceneBank.canScrollBackwards().addValueObserver(v -> navigationState.setCanScrollSceneUp(v));
36+
sceneBank.canScrollForwards().addValueObserver(v -> navigationState.setCanScrollSceneDown(v));
3637
}
3738

3839
public CursorTrack getCursorTrack() {

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/DataStringUtil.java

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

33
import java.util.ArrayList;
44
import java.util.List;
5+
import java.util.stream.Collectors;
56

67
public class DataStringUtil {
78

@@ -12,7 +13,7 @@ public static String toString(final byte[] data) {
1213
for (final byte d : data) {
1314
values.add("%02x".formatted(d));
1415
}
15-
return String.join("", values);
16+
return values.stream().collect(Collectors.joining());
1617
}
1718

1819
public static byte[] toTempo10nsData(final double tempo) {
@@ -30,6 +31,7 @@ public static double toTempo(final int[] data) {
3031
for (int i = 0; i < 5; i++) {
3132
nsPerMinute |= (long) data[i] << (i * 7);
3233
}
33-
return TEN_NS_PER_MINUTE / nsPerMinute;
34+
final double bpm = TEN_NS_PER_MINUTE / nsPerMinute;
35+
return bpm;
3436
}
3537
}

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/KompleteKontrolAExtension.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ public void init() {
4848
final MidiIn midiIn2 = host.getMidiInPort(1);
4949
final NoteInput noteInput =
5050
midiIn2.createNoteInput(
51-
"MIDI", "80????", "90????", "D0????", "E0????", "B001??", "B040??", "B042??",
52-
"B1????");
51+
"MIDI", "80????", "90????", "D0????", "E0????", "B001??", "B040??", "B042??", "B1????");
5352
noteInput.setShouldConsumeEvents(true);
5453

5554
initTrackBank();
@@ -116,7 +115,7 @@ protected void initNavigation() {
116115

117116
final ModeButton knobPressed = controlElements.getKnobPressed();
118117
final ModeButton knobShiftPressed = controlElements.getKnobShiftPressed();
119-
mainLayer.bindPressed(knobPressed.getHwButton(), clipSceneCursor::launch);
118+
mainLayer.bindPressed(knobPressed.getHwButton(), () -> clipSceneCursor.launch());
120119
mainLayer.bindPressed(knobShiftPressed.getHwButton(), () -> handle4DShiftPressed(rootTrack, cursorTrack));
121120
}
122121

@@ -126,6 +125,11 @@ protected void initJogWheel() {
126125
mainLayer.bind(fourKnob, midiProcessor.createIncAction(this::handleTransportScroll));
127126
}
128127

128+
@Override
129+
public void exit() {
130+
midiProcessor.exit();
131+
}
132+
129133
@Override
130134
public void flush() {
131135
midiProcessor.doFlush();
@@ -144,7 +148,9 @@ protected void setUpChannelControl(final int index, final Track channel) {
144148
});
145149
channel.exists().markInterested();
146150

147-
channel.addIsSelectedInMixerObserver(v -> midiProcessor.sendValueCommand(ValueCommand.SELECT, index, v));
151+
channel.addIsSelectedInMixerObserver(v -> {
152+
midiProcessor.sendValueCommand(ValueCommand.SELECT, index, v);
153+
});
148154
channel.mute().addValueObserver(v -> midiProcessor.sendValueCommand(ValueCommand.MUTE, index, v));
149155
channel.solo().addValueObserver(v -> midiProcessor.sendValueCommand(ValueCommand.SOLO, index, v));
150156
channel.arm().addValueObserver(v -> midiProcessor.sendValueCommand(ValueCommand.ARM, index, v));

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/KompleteKontrolExtension.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public abstract class KompleteKontrolExtension extends ControllerExtension {
4646
static final String KONTAKT_8_VST3_ID = "5653544E694B386B6F6E74616B742038";
4747
static final String MASCHINE_3_VST3_ID = "5653544E694D336D61736368696E6520";
4848

49+
private static final DateTimeFormatter DF = DateTimeFormatter.ofPattern("hh:mm:ss SSS");
50+
4951
protected HardwareSurface surface;
5052
private final List<RelativeHardwareControlBinding> knobBindings = new ArrayList<>();
5153

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/KompleteKontrolSMk2Extension.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public void setUpChannelDisplayFeedback(final int index, final Track channel) {
7070

7171
@Override
7272
protected void initNavigation() {
73+
KompleteKontrolExtension.println(" INIT NAVIGATION");
7374
final Clip cursorClip = getHost().createLauncherCursorClip(8, 128);
7475
final Clip arrangerClip = getHost().createArrangerCursorClip(8, 128);
7576

@@ -126,13 +127,20 @@ protected void initNavigation() {
126127
.setValueSupplier(() -> cursorTrack.canHoldNoteData().get() && cursorClip.exists().get());
127128
final ModeButton knobPressed = controlElements.getKnobPressed();
128129
final ModeButton knobShiftPressed = controlElements.getKnobShiftPressed();
129-
mainLayer.bindPressed(knobPressed.getHwButton(), clipSceneCursor::launch);
130+
mainLayer.bindPressed(knobPressed.getHwButton(), () -> clipSceneCursor.launch());
130131
mainLayer.bindPressed(knobShiftPressed.getHwButton(), () -> handle4DShiftPressed(rootTrack, cursorTrack));
131132
}
132133

134+
135+
@Override
136+
public void exit() {
137+
midiProcessor.exit();
138+
}
139+
133140
@Override
134141
public void flush() {
135142
midiProcessor.doFlush();
136143
}
137144

145+
138146
}

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/KontrolSMk3Extension.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.bitwig.extension.controller.api.ScrollbarModel;
1313
import com.bitwig.extension.controller.api.SettableBeatTimeValue;
1414
import com.bitwig.extension.controller.api.Track;
15-
import com.bitwig.extensions.controllers.nativeinstruments.komplete.binding.EncoderParameterBinding;
1615
import com.bitwig.extensions.controllers.nativeinstruments.komplete.control.ModeButton;
1716
import com.bitwig.extensions.controllers.nativeinstruments.komplete.definition.AbstractKompleteKontrolExtensionDefinition;
1817
import com.bitwig.extensions.controllers.nativeinstruments.komplete.device.DeviceControl;
@@ -70,16 +69,10 @@ public void init() {
7069
}
7170

7271
protected void initScrubZoomControl() {
73-
final RelativeHardwareKnob fourDKnob = controlElements.getFourDKnob();
72+
final RelativeHardwareKnob fourDKnob = controlElements.getFourDKnobMixer();
7473
final RelativeHardwarControlBindable binding = midiProcessor.createIncAction(this::handleFourDInc);
7574
mainLayer.bind(fourDKnob, binding);
7675

77-
final CursorTrack cursorTrack = viewControl.getCursorTrack();
78-
final RelativeHardwareKnob daw4dKnob = controlElements.getFourDKnobMixer();
79-
mainLayer.addBinding(new EncoderParameterBinding(daw4dKnob, cursorTrack.volume()));
80-
final RelativeHardwareKnob daw4dPan = controlElements.getFourDKnobPan();
81-
mainLayer.addBinding(new EncoderParameterBinding(daw4dPan, cursorTrack.pan()));
82-
8376
final RelativeHardwareKnob loopKnob = controlElements.getLoopModKnob();
8477
mainLayer.bind(loopKnob, midiProcessor.createIncAction(this::handleLoop));
8578
}
@@ -225,9 +218,15 @@ private void handleLayoutChange(final String v) {
225218
midiProcessor.sendLayoutCommand(currentLayoutType);
226219
}
227220

221+
@Override
222+
public void exit() {
223+
midiProcessor.exit();
224+
}
225+
228226
@Override
229227
public void flush() {
230228
midiProcessor.doFlush();
231229
}
232230

231+
233232
}
Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
package com.bitwig.extensions.controllers.nativeinstruments.komplete;
22

33
public enum LayoutType {
4-
LAUNCHER("MIX"), //
5-
ARRANGER("ARRANGE");
6-
7-
private final String name;
8-
9-
LayoutType(final String name) {
10-
this.name = name;
11-
}
12-
13-
public static LayoutType toType(final String layoutName) {
14-
for (final LayoutType layoutType : LayoutType.values()) {
15-
if (layoutType.name.equals(layoutName)) {
16-
return layoutType;
17-
}
18-
}
19-
return LAUNCHER;
20-
}
21-
4+
LAUNCHER("MIX"), //
5+
ARRANGER("ARRANGE");
6+
7+
private String name;
8+
9+
LayoutType(final String name) {
10+
this.name = name;
11+
}
12+
13+
public static LayoutType toType(final String layoutName) {
14+
for (final LayoutType layoutType : LayoutType.values()) {
15+
if (layoutType.name.equals(layoutName)) {
16+
return layoutType;
17+
}
18+
}
19+
return LAUNCHER;
20+
}
21+
2222
}

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/NavigationState.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,49 @@
33
public class NavigationState {
44
private boolean canScrollSceneDown = false;
55
private boolean canScrollSceneUp = false;
6+
private boolean canGoTrackLeft = false;
67
private boolean canGoTrackRight = false;
78
protected boolean sceneNavMode = false;
9+
private Runnable stateChangeHandler;
810

11+
public void setStateChangeListener(final Runnable stateChange) {
12+
this.stateChangeHandler = stateChange;
13+
fireStateChange();
14+
}
915

1016
public void setCanScrollSceneDown(final boolean canScrollSceneDown) {
1117
this.canScrollSceneDown = canScrollSceneDown;
18+
fireStateChange();
1219
}
1320

1421
public void setCanScrollSceneUp(final boolean canScrollSceneUp) {
1522
this.canScrollSceneUp = canScrollSceneUp;
23+
fireStateChange();
1624
}
1725

26+
public void setCanGoTrackLeft(final boolean canGoTrackLeft) {
27+
this.canGoTrackLeft = canGoTrackLeft;
28+
fireStateChange();
29+
}
1830

1931
public void setCanGoTrackRight(final boolean canGoTrackRight) {
2032
this.canGoTrackRight = canGoTrackRight;
33+
fireStateChange();
2134
}
2235

2336
public void setSceneNavMode(final boolean sceneNavMode) {
2437
this.sceneNavMode = sceneNavMode;
38+
fireStateChange();
2539
}
2640

2741
public boolean isSceneNavMode() {
2842
return sceneNavMode;
2943
}
3044

45+
public boolean canGoTrackLeft() {
46+
return canGoTrackLeft;
47+
}
48+
3149
public boolean canGoTrackRight() {
3250
return canGoTrackRight;
3351
}
@@ -40,4 +58,18 @@ public boolean canScrollSceneUp() {
4058
return canScrollSceneUp;
4159
}
4260

61+
public int getSceneValue() {
62+
return (canScrollSceneDown ? 0x2 : 0x0) | (canScrollSceneUp ? 0x1 : 0x0);
63+
}
64+
65+
public int getTrackValue() {
66+
return (!sceneNavMode ? 0x1 : 0x0) | (canGoTrackRight ? 0x2 : 0x0);
67+
}
68+
69+
private void fireStateChange() {
70+
if (stateChangeHandler == null) {
71+
return;
72+
}
73+
stateChangeHandler.run();
74+
}
4375
}

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/TrackType.java

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,32 @@
44
* The track types as recognized by KK.
55
*/
66
public enum TrackType {
7-
NONE(0, ""), //
8-
UNSPECIFIED(1, "Unspec"), //
9-
INSTRUMENT(2, "Instrument"), //
10-
AUDIO(3, "Audio"), //
11-
GROUP(4, "Group"), //
12-
RETURN_BUS(5, "Effect"), //
13-
MASTER(6, "Master"); //
14-
15-
private final int id;
16-
private final String type;
17-
18-
TrackType(final int id, final String type) {
19-
this.id = id;
20-
this.type = type;
21-
}
22-
23-
public int getId() {
24-
return id;
25-
}
26-
27-
public static TrackType toType(final String type) {
28-
for (final TrackType trackType : TrackType.values()) {
29-
if (trackType.type.equals(type)) {
30-
return trackType;
31-
}
32-
}
33-
return UNSPECIFIED;
34-
}
7+
NONE(0, ""), //
8+
UNSPECIFIED(1, "Unspec"), //
9+
INSTRUMENT(2, "Instrument"), //
10+
AUDIO(3, "Audio"), //
11+
GROUP(4, "Group"), //
12+
RETURN_BUS(5, "Effect"), //
13+
MASTER(6, "Master"); //
14+
15+
private int id;
16+
private String type;
17+
18+
private TrackType(final int id, final String type) {
19+
this.id = id;
20+
this.type = type;
21+
}
22+
23+
public int getId() {
24+
return id;
25+
}
26+
27+
public static TrackType toType(final String type) {
28+
for (final TrackType trackType : TrackType.values()) {
29+
if (trackType.type.equals(type)) {
30+
return trackType;
31+
}
32+
}
33+
return UNSPECIFIED;
34+
}
3535
}

src/main/java/com/bitwig/extensions/controllers/nativeinstruments/komplete/control/ControlElements.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public class ControlElements {
3636
private final HardwareSurface surface;
3737
private final RelativeHardwareKnob fourDKnob;
3838
private final RelativeHardwareKnob loopModKnob;
39-
private final RelativeHardwareKnob fourDKnobPan;
4039

4140
private final Map<CcAssignment, ModeButton> modeButtons = new HashMap<>();
4241
private final KontrolLightButton leftNavButton;
@@ -57,9 +56,9 @@ public ControlElements(final HardwareSurface surface, final MidiProcessor midiPr
5756

5857
Arrays.stream(CcAssignment.values()) //
5958
.filter(CcAssignment::isMapped) //
60-
.forEach(ccAssignment -> modeButtons.put(
61-
ccAssignment,
62-
new ModeButton(midiProcessor, ccAssignment.getName(), ccAssignment)));
59+
.forEach(ccAssignment -> {
60+
modeButtons.put(ccAssignment, new ModeButton(midiProcessor, ccAssignment.getName(), ccAssignment));
61+
});
6362

6463
muteSelectedButton = surface.createHardwareButton("MUTE_SELECTED_BUTTON");
6564
muteSelectedButton.pressedAction().setActionMatcher(CcAssignment.MUTE_CURRENT.createActionMatcher(midiIn, 1));
@@ -81,10 +80,6 @@ public ControlElements(final HardwareSurface surface, final MidiProcessor midiPr
8180
fourDKnobMixer.setAdjustValueMatcher(midiIn.createRelative2sComplementCCValueMatcher(0xF, 0x64, 4096));
8281
fourDKnobMixer.setStepSize(1 / 128.0);
8382

84-
fourDKnobPan = surface.createRelativeHardwareKnob("4D_WHEEL_MIX_MODE_PAN");
85-
fourDKnobPan.setAdjustValueMatcher(midiIn.createRelative2sComplementCCValueMatcher(0xF, 0x65, 4096));
86-
fourDKnobPan.setStepSize(1 / 128.0);
87-
8883
fourDKnob = surface.createRelativeHardwareKnob("4D_WHEEL_PLUGIN_MODE");
8984
fourDKnob.setAdjustValueMatcher(midiIn.createRelative2sComplementCCValueMatcher(0xF, 0x34, 128));
9085
fourDKnob.setStepSize(1 / 128.0);
@@ -106,7 +101,7 @@ public ControlElements(final HardwareSurface surface, final MidiProcessor midiPr
106101
}
107102

108103
private HardwareButton createOnOffButton(final String name, final int ccNr) {
109-
final HardwareButton button = surface.createHardwareButton(name);
104+
final HardwareButton button = surface.createHardwareButton("SHIFT_BUTTON");
110105
button.pressedAction().setActionMatcher(midiProcessor.getMidiIn().createCCActionMatcher(0xF, ccNr, 1));
111106
button.releasedAction().setActionMatcher(midiProcessor.getMidiIn().createCCActionMatcher(0xF, ccNr, 0));
112107
return button;
@@ -161,10 +156,6 @@ public RelativeHardwareKnob getFourDKnobMixer() {
161156
return fourDKnobMixer;
162157
}
163158

164-
public RelativeHardwareKnob getFourDKnobPan() {
165-
return fourDKnobPan;
166-
}
167-
168159
public RelativeHardwareKnob getLoopModKnob() {
169160
return loopModKnob;
170161
}

0 commit comments

Comments
 (0)