Few tiny cleanups
[SugarCubes.git] / _MIDI.pde
index b75556c8bba2a92dd7032c8b0c213e6422afabc7..562aa869a3d3193b1294219ffb84355ac3b47920 100644 (file)
--- 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<LXParameter> 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<LXParameter> parameters = glucose.getSelectedEffect().getParameters();
+      // TODO(mclsee): fix selected effect
+      List<LXParameter> 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<LXParameter> 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;