X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_MIDI.pde;h=562aa869a3d3193b1294219ffb84355ac3b47920;hb=36e19b7b5b923666a56fd4a941fb0f1ada725093;hp=b75556c8bba2a92dd7032c8b0c213e6422afabc7;hpb=581d7d58054e5d6d8e539824f4af6b60d294555f;p=SugarCubes.git diff --git a/_MIDI.pde b/_MIDI.pde index b75556c..562aa86 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(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,16 +471,17 @@ 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; } } if (number >= 20 && number <= 23) { int effectIndex = number - 20; - List parameters = glucose.getSelectedEffect().getParameters(); + // TODO(mclsee): fix selected effect + List parameters = getSelectedEffect().getParameters(); if (effectIndex < parameters.size()) { - parameters.get(effectIndex).setValue(value); + setNormalized(parameters.get(effectIndex), value); return true; } } @@ -496,10 +507,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); @@ -527,7 +538,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 91: // play if (shiftOn) { - midiEngine.setFocusedDeck(GLucose.LEFT_DECK); + midiEngine.setFocusedDeck(LEFT_DECK); } else { uiCrossfader.setDisplayMode("A"); } @@ -539,7 +550,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 93: // rec if (shiftOn) { - midiEngine.setFocusedDeck(GLucose.RIGHT_DECK); + midiEngine.setFocusedDeck(RIGHT_DECK); } else { uiCrossfader.setDisplayMode("B"); } @@ -547,7 +558,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 94: // up bank if (shiftOn) { - glucose.incrementSelectedEffectBy(-1); + selectedEffect.setValue(selectedEffect.getValuei() - 1); } else { getTargetDeck().goPrev(); } @@ -555,7 +566,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 95: // down bank if (shiftOn) { - glucose.incrementSelectedEffectBy(1); + selectedEffect.setValue(selectedEffect.getValuei() + 1); } else { getTargetDeck().goNext(); } @@ -578,7 +589,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { return true; case 62: // Detail View / red 5 - releaseEffect = glucose.getSelectedEffect(); + releaseEffect = getSelectedEffect(); if (releaseEffect.isMomentary()) { releaseEffect.enable(); } else { @@ -587,7 +598,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { return true; case 63: // rec quantize / red 6 - glucose.getSelectedEffect().disable(); + getSelectedEffect().disable(); return true; } @@ -607,10 +618,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 +681,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; } } @@ -679,11 +690,11 @@ class KorgNanoKontrolMidiInput extends GenericDeviceMidiInput { switch (number) { case 58: // Left track - midiEngine.setFocusedDeck(GLucose.LEFT_DECK); + midiEngine.setFocusedDeck(LEFT_DECK); return true; case 59: // Right track - midiEngine.setFocusedDeck(GLucose.RIGHT_DECK); + midiEngine.setFocusedDeck(RIGHT_DECK); return true; case 43: // Left chevron @@ -700,7 +711,7 @@ class KorgNanoKontrolMidiInput extends GenericDeviceMidiInput { } } -class APC40MidiOutput implements LXParameter.Listener, GridOutput { +class APC40MidiOutput implements LXParameterListener, GridOutput { private final MidiEngine midiEngine; private final MidiOutput output; @@ -727,8 +738,8 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { } }); } - glucose.addEffectListener(new GLucose.EffectListener() { - public void effectSelected(LXEffect effect) { + selectedEffect.addListener(new LXParameterListener() { + public void onParameterChanged(LXParameter parameter) { resetEffectParameters(); } }); @@ -832,7 +843,7 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { } private void resetEffectParameters() { - LXEffect newEffect = glucose.getSelectedEffect(); + LXEffect newEffect = getSelectedEffect(); if (newEffect == focusedEffect) { return; } @@ -853,7 +864,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 +925,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 +934,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;