You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
Plaintext
52 lines
1.2 KiB
Plaintext
~setupMidiForNdef = { |ndefName, midiChan = 0, ccMap|
|
|
var ndef = Ndef(ndefName);
|
|
|
|
// Remove old defs if they exist
|
|
MIDIdef.noteOn((ndefName ++ "_On").asSymbol).clear;
|
|
MIDIdef.noteOff((ndefName ++ "_Off").asSymbol).clear;
|
|
MIDIdef.cc((ndefName ++ "_CC").asSymbol).clear;
|
|
|
|
// Note on/off
|
|
MIDIdef.noteOn(
|
|
(ndefName ++ "_On").asSymbol,
|
|
{ |vel, note, chan|
|
|
ndef.put(
|
|
note,
|
|
ndef.source,
|
|
0,
|
|
[\freq, note.midicps, \gt, 1, \lev, vel / 127]
|
|
);
|
|
},
|
|
chan: midiChan
|
|
).fix;
|
|
|
|
MIDIdef.noteOff(
|
|
(ndefName ++ "_Off").asSymbol,
|
|
{ |vel, note, chan| ndef.removeAt(note) },
|
|
chan: midiChan
|
|
).fix;
|
|
|
|
// MIDI CC mapping
|
|
MIDIdef.cc(
|
|
(ndefName ++ "_CC").asSymbol,
|
|
{ |val, num|
|
|
var param = ccMap[num];
|
|
if (param.notNil) {
|
|
var spec = ndef.getSpec(param) ?? ControlSpec(0, 1);
|
|
ndef.set(param, spec.map(val / 127));
|
|
};
|
|
},
|
|
ccNum: ccMap.keys,
|
|
chan: midiChan
|
|
).fix;
|
|
};
|
|
|
|
~setupMidiForNdef.(
|
|
\,
|
|
0,
|
|
(
|
|
0: \freq, 60;
|
|
)
|
|
);
|
|
|