Search in sources :

Example 6 with Resolution

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);
    }
}
Also used : ArpeggiatorMode(de.mossgrabers.framework.daw.midi.ArpeggiatorMode) FlexiHandlerException(de.mossgrabers.controller.generic.flexihandler.utils.FlexiHandlerException) GenericFlexiConfiguration(de.mossgrabers.controller.generic.GenericFlexiConfiguration) Scales(de.mossgrabers.framework.scale.Scales) Resolution(de.mossgrabers.framework.daw.constants.Resolution)

Aggregations

Resolution (de.mossgrabers.framework.daw.constants.Resolution)6 INoteRepeat (de.mossgrabers.framework.daw.midi.INoteRepeat)5 PushConfiguration (de.mossgrabers.controller.ableton.push.PushConfiguration)2 RibbonMode (de.mossgrabers.controller.ni.maschine.core.RibbonMode)2 ITrack (de.mossgrabers.framework.daw.data.ITrack)2 GenericFlexiConfiguration (de.mossgrabers.controller.generic.GenericFlexiConfiguration)1 FlexiHandlerException (de.mossgrabers.controller.generic.flexihandler.utils.FlexiHandlerException)1 MaschineConfiguration (de.mossgrabers.controller.ni.maschine.mk3.MaschineConfiguration)1 IllegalParameterException (de.mossgrabers.controller.osc.exception.IllegalParameterException)1 UnknownCommandException (de.mossgrabers.controller.osc.exception.UnknownCommandException)1 ArpeggiatorMode (de.mossgrabers.framework.daw.midi.ArpeggiatorMode)1 INoteInput (de.mossgrabers.framework.daw.midi.INoteInput)1 Scales (de.mossgrabers.framework.scale.Scales)1