use of de.mossgrabers.controller.ni.maschine.mk3.command.continuous.TouchstripCommand in project DrivenByMoss by git-moss.
the class MaschineControllerSetup method registerContinuousCommands.
/**
* {@inheritDoc}
*/
@Override
protected void registerContinuousCommands() {
final MaschineControlSurface surface = this.getSurface();
final ModeManager modeManager = surface.getModeManager();
final ViewManager viewManager = surface.getViewManager();
final IHwRelativeKnob knob = this.addRelativeKnob(ContinuousID.MASTER_KNOB, "Encoder", new MainKnobRowModeCommand(this.model, surface), MaschineControlSurface.ENCODER);
knob.bindTouch((event, velocity) -> {
final IMode mode = modeManager.getActive();
if (mode != null && event != ButtonEvent.LONG)
mode.onKnobTouch(8, event == ButtonEvent.DOWN);
}, surface.getMidiInput(), BindType.CC, 0, MaschineControlSurface.ENCODER_TOUCH);
if (this.maschine.hasMCUDisplay()) {
for (int i = 0; i < 8; i++) {
final int index = i;
final IHwRelativeKnob modeKnob = this.addRelativeKnob(ContinuousID.get(ContinuousID.KNOB1, i), "Knob " + (i + 1), new KnobRowModeCommand<>(i, this.model, surface), MaschineControlSurface.MODE_KNOB_1 + i);
modeKnob.bindTouch((event, velocity) -> {
final IMode mode = modeManager.getActive();
if (mode != null && event != ButtonEvent.LONG)
mode.onKnobTouch(index, event == ButtonEvent.DOWN);
}, surface.getMidiInput(), BindType.CC, 0, MaschineControlSurface.MODE_KNOB_TOUCH_1 + i);
modeKnob.setIndexInGroup(i);
}
}
final TouchstripCommand touchstripCommand = new TouchstripCommand(this.model, surface);
this.addFader(ContinuousID.CROSSFADER, "Touchstrip", touchstripCommand, BindType.CC, MaschineControlSurface.TOUCHSTRIP, false);
surface.getContinuous(ContinuousID.CROSSFADER).bindTouch(touchstripCommand, surface.getMidiInput(), BindType.CC, 0, MaschineControlSurface.TOUCHSTRIP_TOUCH);
// Enable aftertouch
final Views[] views = { Views.PLAY, Views.DRUM };
for (final Views viewID : views) {
final IView view = viewManager.get(viewID);
view.registerAftertouchCommand(new AftertouchViewCommand<>(view, this.model, surface));
}
if (this.maschine == Maschine.STUDIO) {
final IHwAbsoluteKnob masterKnob = this.addAbsoluteKnob(ContinuousID.MONITOR_KNOB, "Encoder", null, MaschineControlSurface.MONITOR_ENCODER);
this.encoderManager = new StudioEncoderModeManager(masterKnob, this.model, surface);
masterKnob.bind(this.encoderManager);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandMaster = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.MASTER_VOLUME, this.model, surface);
this.addButton(ButtonID.ROW4_1, "MST", encoderCommandMaster, MaschineControlSurface.MONITOR_MST, encoderCommandMaster::isLit);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandSelectedTrack = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.SELECTED_TRACK_VOLUME, this.model, surface);
this.addButton(ButtonID.ROW4_2, "GRP", encoderCommandSelectedTrack, MaschineControlSurface.MONITOR_GRP, encoderCommandSelectedTrack::isLit);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandMetronome = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.METRONOME_VOLUME, this.model, surface);
this.addButton(ButtonID.ROW4_3, "SND", encoderCommandMetronome, MaschineControlSurface.MONITOR_SND, encoderCommandMetronome::isLit);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandCue = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.CUE_VOLUME, this.model, surface);
this.addButton(ButtonID.ROW4_4, "CUE", encoderCommandCue, MaschineControlSurface.MONITOR_CUE, encoderCommandCue::isLit);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandMasterPan = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.MASTER_PANORAMA, this.model, surface);
this.addButton(ButtonID.ROW4_5, "IN1", encoderCommandMasterPan, MaschineControlSurface.MONITOR_IN1, encoderCommandMasterPan::isLit);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandSelectedTrackPan = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.SELECTED_TRACK_PANORAMA, this.model, surface);
this.addButton(ButtonID.ROW4_6, "IN2", encoderCommandSelectedTrackPan, MaschineControlSurface.MONITOR_IN2, encoderCommandSelectedTrackPan::isLit);
final MaschineMonitorEncoderCommand<MaschineControlSurface, MaschineConfiguration> encoderCommandCueMix = new MaschineMonitorEncoderCommand<>(this.encoderManager, EncoderMode.CUE_MIX, this.model, surface);
this.addButton(ButtonID.ROW4_8, "IN4", encoderCommandCueMix, MaschineControlSurface.MONITOR_IN4, encoderCommandCueMix::isLit);
this.addButton(ButtonID.TOGGLE_VU, "IN3", (event, value) -> {
if (event == ButtonEvent.UP)
this.encoderManager.toggleMode();
}, MaschineControlSurface.MONITOR_IN3, this.encoderManager::isParameterMode);
// Activate the default mode
this.encoderManager.setActiveEncoderMode(EncoderMode.MASTER_VOLUME);
}
}
use of de.mossgrabers.controller.ni.maschine.mk3.command.continuous.TouchstripCommand in project DrivenByMoss by git-moss.
the class RibbonCommand method execute.
/**
* {@inheritDoc}
*/
@Override
public void execute(final ButtonEvent event, final int velocity) {
if (event != ButtonEvent.DOWN)
return;
final MaschineConfiguration configuration = this.surface.getConfiguration();
final RibbonMode ribbonMode = configuration.getRibbonMode();
RibbonMode m = this.activeMode;
// If the current mode is part of these modes select the next one
int index = this.modes.indexOf(ribbonMode);
if (index >= 0) {
index++;
if (index >= this.modes.size())
index = 0;
m = this.modes.get(index);
}
this.activeMode = m;
this.surface.getDisplay().notify(m.getName());
configuration.setRibbonMode(m);
((TouchstripCommand) this.surface.getContinuous(ContinuousID.CROSSFADER).getTouchCommand()).resetRibbonValue(m);
}
use of de.mossgrabers.controller.ni.maschine.mk3.command.continuous.TouchstripCommand in project DrivenByMoss by git-moss.
the class MaschineControllerSetup method flush.
/**
* {@inheritDoc}
*/
@Override
public void flush() {
super.flush();
final MaschineControlSurface surface = this.getSurface();
final TouchstripCommand command = (TouchstripCommand) surface.getContinuous(ContinuousID.CROSSFADER).getCommand();
if (command != null)
command.updateValue();
if (this.maschine == Maschine.STUDIO) {
// Update main VU
final IMidiOutput midiOutput = surface.getMidiOutput();
final int value;
if (this.encoderManager.isParameterMode()) {
final EncoderMode activeEncoderMode = this.encoderManager.getActiveEncoderMode();
switch(activeEncoderMode) {
case MASTER_VOLUME:
value = this.valueChanger.toMidiValue(this.model.getMasterTrack().getVolume());
break;
case MASTER_PANORAMA:
value = this.valueChanger.toMidiValue(this.model.getMasterTrack().getPan());
break;
case SELECTED_TRACK_VOLUME:
case SELECTED_TRACK_PANORAMA:
final ITrack track;
final Optional<ITrack> trackOptional = this.model.getTrackBank().getSelectedItem();
if (trackOptional.isPresent())
track = trackOptional.get();
else
track = EmptyTrack.INSTANCE;
value = this.valueChanger.toMidiValue(activeEncoderMode == EncoderMode.SELECTED_TRACK_VOLUME ? track.getVolume() : track.getPan());
break;
case CUE_VOLUME:
value = this.valueChanger.toMidiValue(this.model.getProject().getCueVolume());
break;
case CUE_MIX:
value = this.valueChanger.toMidiValue(this.model.getProject().getCueMix());
break;
case METRONOME_VOLUME:
value = this.valueChanger.toMidiValue(this.model.getTransport().getMetronomeVolume());
break;
default:
value = 0;
break;
}
} else {
final ITrack track;
if (this.encoderManager.isActiveEncoderMode(EncoderMode.SELECTED_TRACK_VOLUME)) {
final Optional<ITrack> trackOptional = this.model.getTrackBank().getSelectedItem();
if (trackOptional.isPresent())
track = trackOptional.get();
else
track = EmptyTrack.INSTANCE;
} else
track = this.model.getMasterTrack();
value = this.valueChanger.toMidiValue(track.getVu());
}
midiOutput.sendCC(MaschineControlSurface.MONITOR_ENCODER, value);
}
}
Aggregations