X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_MIDI.pde;h=4e1f20acbcf9a03bab451300007e87f394f376e7;hb=ab65d40b549a354ba5f70b08c29d35d0971243cf;hp=99c60d2bb5efb5a535532df39ee102be1a2e9461;hpb=5c3620000613b6d6e40e80f93cde2e8fd688cf5d;p=SugarCubes.git diff --git a/_MIDI.pde b/_MIDI.pde index 99c60d2..4e1f20a 100644 --- a/_MIDI.pde +++ b/_MIDI.pde @@ -218,6 +218,16 @@ public abstract class SCMidiInput extends AbstractScrollItem { getTargetPattern().noteOff(note); } } + + protected void setNormalized(LXParameter parameter, float value) { + if (parameter != null) { + if (parameter instanceof BasicParameter) { + ((BasicParameter)parameter).setNormalized(value); + } else { + parameter.setValue(value); + } + } + } // Subclasses may implement these to map top-level functionality protected boolean handleProgramChange(ProgramChange pc) { return false; } @@ -411,31 +421,44 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 7: switch (channel) { case 0: - effects.colorFucker.hueShift.setValue(value); + uiSpeed.speed.setNormalized(0.5 - value*0.5); return true; case 1: - effects.colorFucker.desat.setValue(value); + effects.colorFucker.desat.setNormalized(value); return true; case 2: - effects.colorFucker.sharp.setValue(value); + effects.colorFucker.desat.setNormalized(value); return true; case 3: - effects.blur.amount.setValue(value); + effects.blur.amount.setNormalized(value); return true; case 4: - effects.quantize.amount.setValue(value); + effects.quantize.amount.setNormalized(value); return true; } break; // Master bright case 14: - effects.colorFucker.level.setValue(value); + effects.colorFucker.level.setNormalized(value); return true; // Crossfader case 15: - lx.engine.getDeck(GLucose.RIGHT_DECK).getFader().setValue(value); + lx.engine.getDeck(GLucose.RIGHT_DECK).getFader().setNormalized(value); + return true; + + // Cue level + case 47: + float val = effects.colorFucker.hueShift.getValuef(); + int cv = cc.getValue(); + if (cv < 64) { + cv = 64 + cv; + } else { + cv = cv - 64; + } + val += (cv - 64) / 500.; + effects.colorFucker.hueShift.setNormalized((val+1) % 1); return true; } @@ -448,7 +471,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { if (parameterIndex >= 0) { List parameters = getTargetPattern().getParameters(); if (parameterIndex < parameters.size()) { - parameters.get(parameterIndex).setValue(value); + setNormalized(parameters.get(parameterIndex), value); return true; } } @@ -457,7 +480,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { int effectIndex = number - 20; List parameters = glucose.getSelectedEffect().getParameters(); if (effectIndex < parameters.size()) { - parameters.get(effectIndex).setValue(value); + setNormalized(parameters.get(effectIndex), value); return true; } } @@ -483,10 +506,10 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 49: // SOLO/CUE switch (nChan) { case 4: - effects.colorFucker.mono.setValue(1); + effects.colorFucker.mono.setNormalized(1); return true; case 5: - effects.colorFucker.invert.setValue(1); + effects.colorFucker.invert.setNormalized(1); return true; case 6: lx.cycleBaseHue(60000); @@ -594,10 +617,10 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 49: // SOLO/CUE switch (nChan) { case 4: - effects.colorFucker.mono.setValue(0); + effects.colorFucker.mono.setNormalized(0); return true; case 5: - effects.colorFucker.invert.setValue(0); + effects.colorFucker.invert.setNormalized(0); return true; case 6: lx.setBaseHue(lx.getBaseHue()); @@ -657,7 +680,7 @@ class KorgNanoKontrolMidiInput extends GenericDeviceMidiInput { int parameterIndex = number - 16; List parameters = midiEngine.getFocusedPattern().getParameters(); if (parameterIndex < parameters.size()) { - parameters.get(parameterIndex).setValue(cc.getValue() / 127.); + setNormalized(parameters.get(parameterIndex), cc.getValue() / 127.); return true; } } @@ -687,7 +710,7 @@ class KorgNanoKontrolMidiInput extends GenericDeviceMidiInput { } } -class APC40MidiOutput implements LXParameter.Listener, GridOutput { +class APC40MidiOutput implements LXParameterListener, GridOutput { private final MidiEngine midiEngine; private final MidiOutput output; @@ -840,7 +863,11 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { } private void sendKnob(int i, LXParameter p) { - sendKnob(i, (int) (p.getValuef() * 127.)); + float pv = constrain(p.getValuef(), 0, 1); + if (p instanceof LXNormalizedParameter) { + pv = ((LXNormalizedParameter)p).getNormalizedf(); + } + sendKnob(i, (int) (pv * 127.)); } private void sendKnob(int i, int value) { @@ -893,6 +920,12 @@ class ArturiaMinilabMidiInput extends GenericDeviceMidiInput { case 18: parameterIndex = 5; break; case 19: parameterIndex = 6; break; case 16: parameterIndex = 7; break; + + case 75: + float val = effects.colorFucker.hueShift.getValuef(); + val += (cc.getValue() - 64) / 256.; + effects.colorFucker.hueShift.setNormalized((val+1) % 1); + break; } if (parameterIndex >= 0) { List parameters = midiEngine.getFocusedPattern().getParameters(); @@ -900,7 +933,7 @@ class ArturiaMinilabMidiInput extends GenericDeviceMidiInput { LXParameter p = parameters.get(parameterIndex); float curVal = p.getValuef(); curVal += (cc.getValue() - 64) / 127.; - p.setValue(constrain(curVal, 0, 1)); + setNormalized(p, constrain(curVal, 0, 1)); } } return false;