use of de.mossgrabers.framework.daw.constants.Resolution in project DrivenByMoss by git-moss.
the class NoteInputHandler method handle.
/**
* {@inheritDoc}
*/
@Override
public void handle(final FlexiCommand command, final KnobMode knobMode, final MidiValue value) {
final boolean isButtonPressed = this.isButtonPressed(knobMode, value);
final GenericFlexiConfiguration configuration = this.surface.getConfiguration();
final Resolution[] resolutions = Resolution.values();
final Scales scales = this.model.getScales();
final double val = value.isHighRes() ? value.getValue() / 128.0 : value.getValue();
switch(command) {
// Note Repeat: Toggle Active
case NOTE_INPUT_REPEAT_ACTIVE:
if (isButtonPressed) {
configuration.toggleNoteRepeatActive();
this.mvHelper.delayDisplay(() -> "Repeat: " + (configuration.isNoteRepeatActive() ? "On" : "Off"));
}
break;
// Note Repeat: Set Period
case NOTE_INPUT_REPEAT_PERIOD:
final int selPeriod;
if (isAbsolute(knobMode))
selPeriod = (int) Math.min(Math.round(val / 127.0 * resolutions.length), resolutions.length - 1L);
else
selPeriod = Resolution.change(Resolution.getMatch(configuration.getNoteRepeatPeriod().getValue()), this.isIncrease(knobMode, value));
configuration.setNoteRepeatPeriod(resolutions[selPeriod]);
this.mvHelper.delayDisplay(() -> "Repeat Period: " + configuration.getNoteRepeatPeriod().getName());
break;
// Note Repeat: Set Length
case NOTE_INPUT_REPEAT_LENGTH:
if (this.model.getHost().supports(Capability.NOTE_REPEAT_LENGTH)) {
final int selLength;
if (isAbsolute(knobMode))
selLength = (int) Math.min(Math.round(val / 127.0 * resolutions.length), resolutions.length - 1L);
else
selLength = Resolution.change(Resolution.getMatch(configuration.getNoteRepeatLength().getValue()), this.isIncrease(knobMode, value));
configuration.setNoteRepeatLength(resolutions[selLength]);
this.mvHelper.delayDisplay(() -> "Repeat Length: " + configuration.getNoteRepeatLength().getName());
}
break;
case NOTE_INPUT_REPEAT_MODE:
if (this.host.supports(Capability.NOTE_REPEAT_MODE)) {
final List<ArpeggiatorMode> modes = configuration.getArpeggiatorModes();
final int newIndex;
if (isAbsolute(knobMode)) {
if (val >= modes.size())
return;
newIndex = (int) val;
} else {
final ArpeggiatorMode arpMode = configuration.getNoteRepeatMode();
final int modeIndex = configuration.lookupArpeggiatorModeIndex(arpMode);
final boolean increase = this.isIncrease(knobMode, value);
newIndex = Math.max(0, Math.min(modes.size() - 1, modeIndex + (increase ? 1 : -1)));
}
configuration.setNoteRepeatMode(modes.get(newIndex));
this.mvHelper.delayDisplay(() -> "Repeat Mode: " + modes.get(newIndex).getName());
}
break;
case NOTE_INPUT_REPEAT_OCTAVE:
if (this.host.supports(Capability.NOTE_REPEAT_OCTAVES)) {
final int octave;
if (isAbsolute(knobMode))
octave = (int) val;
else
octave = configuration.getNoteRepeatOctave() + (this.isIncrease(knobMode, value) ? 1 : -1);
configuration.setNoteRepeatOctave(octave);
this.mvHelper.delayDisplay(() -> "Repeat Octave: " + octave);
}
break;
case NOTE_INPUT_TRANSPOSE_OCTAVE_UP:
if (isButtonPressed) {
scales.incOctave();
this.updateOctave(scales);
}
break;
case NOTE_INPUT_TRANSPOSE_OCTAVE_DOWN:
if (isButtonPressed) {
scales.decOctave();
this.updateOctave(scales);
}
break;
default:
throw new FlexiHandlerException(command);
}
}
Aggregations