X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_MIDI.pde;h=18fa5a3437f4153d74fc092fe35c8a1ee0af4984;hb=e037f60f518373c3bb952f79a2ae66950e55a52f;hp=b75556c8bba2a92dd7032c8b0c213e6422afabc7;hpb=581d7d58054e5d6d8e539824f4af6b60d294555f;p=SugarCubes.git diff --git a/_MIDI.pde b/_MIDI.pde index b75556c..18fa5a3 100644 --- a/_MIDI.pde +++ b/_MIDI.pde @@ -115,7 +115,7 @@ public interface SCMidiInputListener { public void onEnabled(SCMidiInput controller, boolean enabled); } -public abstract class SCMidiInput extends AbstractScrollItem { +public abstract class SCMidiInput extends UIScrollList.AbstractItem { protected boolean enabled = false; private final String name; @@ -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,31 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 7: switch (channel) { case 0: - uiSpeed.speed.setValue(0.5 - value*0.5); + 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 @@ -448,7 +458,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { cv = cv - 64; } val += (cv - 64) / 500.; - effects.colorFucker.hueShift.setValue((val+1) % 1); + effects.colorFucker.hueShift.setNormalized((val+1) % 1); return true; } @@ -461,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; } } @@ -470,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; } } @@ -496,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); @@ -607,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()); @@ -670,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; } } @@ -700,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; @@ -853,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) { @@ -910,7 +924,7 @@ class ArturiaMinilabMidiInput extends GenericDeviceMidiInput { case 75: float val = effects.colorFucker.hueShift.getValuef(); val += (cc.getValue() - 64) / 256.; - effects.colorFucker.hueShift.setValue((val+1) % 1); + effects.colorFucker.hueShift.setNormalized((val+1) % 1); break; } if (parameterIndex >= 0) { @@ -919,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;