X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=_MIDI.pde;h=59c5f826f7eea8e88acc00c396efe00dc7885614;hb=d8239019a1824fd7c06d7adbc33ee4a5f035af77;hp=8f7145791cdd226f46e2acc84889f1b856dba61e;hpb=42a424d76b6ed74ffae8d72215e912d66a3d4bf6;p=SugarCubes.git diff --git a/_MIDI.pde b/_MIDI.pde index 8f71457..59c5f82 100644 --- a/_MIDI.pde +++ b/_MIDI.pde @@ -186,10 +186,8 @@ public abstract class SCMidiInput extends AbstractScrollItem { if (logMidi()) { println(getLabel() + " :: Controller :: " + cc.getChannel() + " :: " + cc.getCC() + ":" + cc.getValue()); } - if (!handleGridControllerChange(cc)) { - if (!getTargetPattern().controllerChange(cc)) { - handleControllerChange(cc); - } + if (!handleControllerChange(cc)) { + getTargetPattern().controllerChange(cc); } } @@ -200,10 +198,8 @@ public abstract class SCMidiInput extends AbstractScrollItem { if (logMidi()) { println(getLabel() + " :: Note On :: " + note.getChannel() + ":" + note.getPitch() + ":" + note.getVelocity()); } - if (!handleGridNoteOn(note)) { - if (!getTargetPattern().noteOn(note)) { - handleNoteOn(note); - } + if (!handleNoteOn(note)) { + getTargetPattern().noteOn(note); } } @@ -214,21 +210,16 @@ public abstract class SCMidiInput extends AbstractScrollItem { if (logMidi()) { println(getLabel() + " :: Note Off :: " + note.getChannel() + ":" + note.getPitch() + ":" + note.getVelocity()); } - if (!handleGridNoteOff(note)) { - if (!getTargetPattern().noteOff(note)) { - handleNoteOff(note); - } + if (!handleNoteOff(note)) { + getTargetPattern().noteOff(note); } } // Subclasses may implement these to map top-level functionality - protected boolean handleGridNoteOn(Note note) { return false; } - protected boolean handleGridNoteOff(Note note) { return false; } - protected boolean handleGridControllerChange(rwmidi.Controller cc) { return false; } - protected void handleProgramChange(ProgramChange pc) {} - protected void handleControllerChange(rwmidi.Controller cc) {} - protected void handleNoteOn(Note note) {} - protected void handleNoteOff(Note note) {} + protected boolean handleProgramChange(ProgramChange pc) { return false; } + protected boolean handleControllerChange(rwmidi.Controller cc) { return false; } + protected boolean handleNoteOn(Note note) { return false; } + protected boolean handleNoteOff(Note note) { return false; } } public class VirtualKeyMidiInput extends SCMidiInput { @@ -391,7 +382,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { return null; } - protected boolean handleGridNoteOn(Note note) { + private boolean handleGridNoteOn(Note note) { GridPosition p = getGridPosition(note); if (p != null) { return midiEngine.grid.gridPressed(p.row, p.col); @@ -399,7 +390,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { return false; } - protected boolean handleGridNoteOff(Note note) { + private boolean handleGridNoteOff(Note note) { GridPosition p = getGridPosition(note); if (p != null) { return midiEngine.grid.gridReleased(p.row, p.col); @@ -407,7 +398,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { return false; } - protected void handleControllerChange(rwmidi.Controller cc) { + protected boolean handleControllerChange(rwmidi.Controller cc) { int channel = cc.getChannel(); int number = cc.getCC(); float value = cc.getValue() / 127.; @@ -416,32 +407,32 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 7: switch (channel) { case 0: - EFF_colorFucker.hueShift.setValue(value); - break; + effects.colorFucker.hueShift.setValue(value); + return true; case 1: - EFF_colorFucker.desat.setValue(value); - break; + effects.colorFucker.desat.setValue(value); + return true; case 2: - EFF_colorFucker.sharp.setValue(value); - break; + effects.colorFucker.sharp.setValue(value); + return true; case 3: - EFF_blur.amount.setValue(value); - break; + effects.blur.amount.setValue(value); + return true; case 4: - EFF_quantize.amount.setValue(value); - break; + effects.quantize.amount.setValue(value); + return true; } break; // Master bright case 14: - EFF_colorFucker.level.setValue(value); - break; + effects.colorFucker.level.setValue(value); + return true; // Crossfader case 15: lx.engine.getDeck(GLucose.RIGHT_DECK).getFader().setValue(value); - break; + return true; } int parameterIndex = -1; @@ -454,6 +445,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { List parameters = getTargetPattern().getParameters(); if (parameterIndex < parameters.size()) { parameters.get(parameterIndex).setValue(value); + return true; } } @@ -462,8 +454,11 @@ public class APC40MidiInput extends GenericDeviceMidiInput { List parameters = glucose.getSelectedEffect().getParameters(); if (effectIndex < parameters.size()) { parameters.get(effectIndex).setValue(value); + return true; } } + + return false; } private long tap1 = 0; @@ -472,7 +467,11 @@ public class APC40MidiInput extends GenericDeviceMidiInput { return a >= b && a <= c; } - protected void handleNoteOn(Note note) { + protected boolean handleNoteOn(Note note) { + if (handleGridNoteOn(note)) { + return true; + } + int nPitch = note.getPitch(); int nChan = note.getChannel(); switch (nPitch) { @@ -480,40 +479,44 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 49: // SOLO/CUE switch (nChan) { case 4: - EFF_colorFucker.mono.setValue(1); - break; + effects.colorFucker.mono.setValue(1); + return true; case 5: - EFF_colorFucker.invert.setValue(1); - break; + effects.colorFucker.invert.setValue(1); + return true; case 6: lx.cycleBaseHue(60000); - break; + return true; } break; case 82: // scene 1 - EFF_boom.trigger(); - break; + effects.boom.trigger(); + return true; case 83: // scene 2 - EFF_flash.trigger(); - break; + effects.flash.trigger(); + return true; + + case 84: // scene 3 + getTargetPattern().reset(); + return true; case 90: // dan's dirty tapping mechanism lx.tempo.trigger(); tap1 = millis(); - break; + return true; case 91: // play case 97: // left bank midiEngine.setFocusedDeck(0); - break; + return true; case 93: // rec case 96: // right bank midiEngine.setFocusedDeck(1); - break; + return true; case 94: // up bank if (shiftOn) { @@ -521,28 +524,31 @@ public class APC40MidiInput extends GenericDeviceMidiInput { } else { getTargetDeck().goPrev(); } - break; + return true; + case 95: // down bank if (shiftOn) { glucose.incrementSelectedEffectBy(1); } else { getTargetDeck().goNext(); } - break; + return true; case 98: // shift shiftOn = true; - break; + return true; case 99: // tap tempo lx.tempo.tap(); - break; + return true; + case 100: // nudge+ lx.tempo.setBpm(lx.tempo.bpm() + (shiftOn ? 1 : .1)); - break; + return true; + case 101: // nudge- lx.tempo.setBpm(lx.tempo.bpm() - (shiftOn ? 1 : .1)); - break; + return true; case 62: // Detail View / red 5 releaseEffect = glucose.getSelectedEffect(); @@ -551,15 +557,21 @@ public class APC40MidiInput extends GenericDeviceMidiInput { } else { releaseEffect.toggle(); } - break; + return true; case 63: // rec quantize / red 6 glucose.getSelectedEffect().disable(); - break; + return true; } + + return false; } - protected void handleNoteOff(Note note) { + protected boolean handleNoteOff(Note note) { + if (handleGridNoteOff(note)) { + return true; + } + int nPitch = note.getPitch(); int nChan = note.getChannel(); @@ -568,14 +580,14 @@ public class APC40MidiInput extends GenericDeviceMidiInput { case 49: // SOLO/CUE switch (nChan) { case 4: - EFF_colorFucker.mono.setValue(0); - break; + effects.colorFucker.mono.setValue(0); + return true; case 5: - EFF_colorFucker.invert.setValue(0); - break; + effects.colorFucker.invert.setValue(0); + return true; case 6: lx.setBaseHue(lx.getBaseHue()); - break; + return true; } break; @@ -587,7 +599,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { presetManager.select(getTargetDeck(), nChan); } } - break; + return true; case 90: // SEND C long tapDelta = millis() - tap1; @@ -600,7 +612,7 @@ public class APC40MidiInput extends GenericDeviceMidiInput { tap1 = 0; println("Tap Set - " + bpm + " bpm"); } - break; + return true; case 63: // rec quantize / RED 6 if (releaseEffect != null) { @@ -608,12 +620,14 @@ public class APC40MidiInput extends GenericDeviceMidiInput { releaseEffect.disable(); } } - break; + return true; case 98: // shift shiftOn = false; - break; + return true; } + + return false; } } @@ -623,36 +637,39 @@ class KorgNanoKontrolMidiInput extends GenericDeviceMidiInput { super(midiEngine, d); } - protected void handleControllerChange(rwmidi.Controller cc) { + protected boolean handleControllerChange(rwmidi.Controller cc) { int number = cc.getCC(); if (number >= 16 && number <= 23) { int parameterIndex = number - 16; List parameters = midiEngine.getFocusedPattern().getParameters(); if (parameterIndex < parameters.size()) { parameters.get(parameterIndex).setValue(cc.getValue() / 127.); + return true; } } if (cc.getValue() == 127) { switch (number) { - // Left track - case 58: - midiEngine.setFocusedDeck(0); - break; - // Right track - case 59: - midiEngine.setFocusedDeck(1); - break; - // Left chevron - case 43: + + case 58: // Left track + midiEngine.setFocusedDeck(GLucose.LEFT_DECK); + return true; + + case 59: // Right track + midiEngine.setFocusedDeck(GLucose.RIGHT_DECK); + return true; + + case 43: // Left chevron midiEngine.getFocusedDeck().goPrev(); - break; - // Right chevron - case 44: + return true; + + case 44: // Right chevron midiEngine.getFocusedDeck().goNext(); - break; + return true; } } + + return false; } } @@ -677,6 +694,9 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { midiEngine.addListener(new MidiEngineListener() { public void onFocusedDeck(int deckIndex) { resetPatternParameters(); + for (int i = 0; i < 8; ++i) { + output.sendNoteOn(i, 52, 0); + } } }); } @@ -687,7 +707,9 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { }); LXDeck.Listener deckListener = new LXDeck.AbstractListener() { public void patternDidChange(LXDeck deck, LXPattern pattern) { - resetPatternParameters(); + if (deck == getTargetDeck()) { + resetPatternParameters(); + } } }; for (LXDeck d : lx.engine.getDecks()) { @@ -696,7 +718,7 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { } } presetManager.addListener(new PresetListener() { - public void onPresetLoaded(LXDeck deck, Preset preset) { + public void onPresetSelected(LXDeck deck, Preset preset) { if (deck == getTargetDeck()) { for (int i = 0; i < 8; ++i) { output.sendNoteOn(i, 52, (preset.index == i) ? 1 : 0); @@ -709,14 +731,7 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { } } public void onPresetStored(LXDeck deck, Preset preset) { - if (deck == getTargetDeck()) { - onPresetLoaded(deck, preset); - } - } - public void onPresetUnloaded() { - for (int i = 0; i < 8; ++i) { - output.sendNoteOn(i, 52, 0); - } + onPresetSelected(deck, preset); } }); resetParameters(); @@ -748,10 +763,7 @@ class APC40MidiOutput implements LXParameter.Listener, GridOutput { } protected LXDeck getTargetDeck() { - if (targetDeck != null) { - return targetDeck; - } - return midiEngine.getFocusedDeck(); + return (targetDeck != null) ? targetDeck : midiEngine.getFocusedDeck(); } private void resetParameters() {