Skip to content

Instantly share code, notes, and snippets.

@kmorrill
Created February 2, 2025 16:30
Show Gist options
  • Save kmorrill/32039889d3c5f9698311c57fb11d58e3 to your computer and use it in GitHub Desktop.
Save kmorrill/32039889d3c5f9698311c57fb11d58e3 to your computer and use it in GitHub Desktop.
Mozaic Touché for OP-XY
@OnLoad
ShowLayout 0
gActiveChannel = 1
// Set initial knob and pad labels
Call @UpdateKnobLabels
Call @UpdatePadLabels
@End
@UpdateKnobLabels
LabelXY {Cutoff, Resonance}
LabelKnob 0, {Param 1}
LabelKnob 1, {Param 2}
LabelKnob 2, {Param 3}
LabelKnob 3, {Param 4}
LabelKnob 4, {Key Track}
LabelKnob 5, {Filter Env}
LabelKnob 6, {FX1}
LabelKnob 7, {FX2}
LabelKnob 8, {AmpSus}
LabelKnob 9, {FilterSus}
@End
@UpdatePadLabels
if ShiftPressed
LabelPad 0, {Ch 5}
LabelPad 1, {Ch 6}
LabelPad 2, {Ch 7}
LabelPad 3, {Ch 8}
else
LabelPad 0, {Ch 1}
LabelPad 1, {Ch 2}
LabelPad 2, {Ch 3}
LabelPad 3, {Ch 4}
endif
@End
@OnPadDown
if ShiftPressed
gActiveChannel = LastPad + 5
else
gActiveChannel = LastPad + 1
endif
Log {Active Channel:}
Log gActiveChannel
@End
@OnPadUp
@End
@OnShiftDown
Call @UpdatePadLabels
Log {Shift Pressed - Higher Channels Available}
@End
@OnShiftUp
Call @UpdatePadLabels
Log {Shift Released - Lower Channels Available}
@End
@OnXYChange
// Get X/Y values and calculate distance from center
delta1 = Abs(GetXValue - 64)
delta2 = Abs(GetYValue - 64)
pyt = Sqrt((delta1 * delta1) + (delta2 * delta2))
// Send the CC messages with updated CC numbers
SendMIDICC (gActiveChannel - 1), 32, GetXValue
SendMIDICC (gActiveChannel - 1), 33, GetYValue
// Log the values
Log {XY Position:}
Log {X (CC32):}
Log GetXValue
Log {Y (CC33):}
Log GetYValue
Log {Distance from center:}
Log pyt
@End
@OnKnobChange
knobvalue = GetKnobValue LastKnob
if LastKnob = 0
SendMIDICC (gActiveChannel - 1), 12, knobvalue // Param 1
Log {Param 1 (CC12) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 1
SendMIDICC (gActiveChannel - 1), 13, knobvalue // Param 2
Log {Param 2 (CC13) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 2
SendMIDICC (gActiveChannel - 1), 14, knobvalue // Param 3
Log {Param 3 (CC14) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 3
SendMIDICC (gActiveChannel - 1), 15, knobvalue // Param 4
Log {Param 4 (CC15) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 4
SendMIDICC (gActiveChannel - 1), 35, knobvalue // Key Tracking
Log {Key Tracking (CC35) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 5
SendMIDICC (gActiveChannel - 1), 34, knobvalue // Filter Envelope
Log {Filter Env (CC34) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 6
SendMIDICC (gActiveChannel - 1), 38, knobvalue // Key Tracking
Log {Key Tracking (CC38) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 7
SendMIDICC (gActiveChannel - 1), 39, knobvalue // FX 1
Log {FX 1 (CC39) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 8
SendMIDICC (gActiveChannel - 1), 22, knobvalue // FX 2
Log {FX 2 (CC22) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
elseif LastKnob = 9
SendMIDICC (gActiveChannel - 1), 26, knobvalue // PitchBend
Log {PitchBend (CC26) Channel:}
Log gActiveChannel
Log {Value:}
Log knobvalue
endif
SetKnobValue LastKnob, knobvalue
@End
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment