Files
BuboQuark/Classes/EventShortener.sc

134 lines
3.1 KiB
Python

EventShortener {
*process {
arg pattern, key, type, time;
var new_pattern;
var additionalKeys = Dictionary.newFrom([
\midi, [
type: \midi,
midiCmd: \noteOn,
],
\buboEvent, [
type: \buboEvent,
],
\looper, [
type: \buboLoopEvent,
legato: 1, time: time
],
\pmono, [],
]);
new_pattern = this.findShortcuts(pattern);
new_pattern = this.functionsToNdef(new_pattern, key);
new_pattern = new_pattern ++ additionalKeys[type];
if (pattern.includes('pat'), {
new_pattern = this.patternize(new_pattern, type);
});
^new_pattern
}
*patternize {
arg pattern, type;
var new_pattern = List();
pattern.doAdjacentPairs({
arg a, b, index;
if (index % 2 == 0, {
if (a === 'pat', {
var temp = Pmini(b);
var additionalKeys;
if (type == 'midi', {
additionalKeys = [\trig, \delta, \dur, \str];
new_pattern = new_pattern ++ [\type, 'midi'];
}, {
additionalKeys = [\trig, \delta, \dur, \str, \num];
});
new_pattern = new_pattern ++ [additionalKeys, temp];
new_pattern = new_pattern ++ [
degree: Pfunc({ |e|
if (e.trig > 0, {
e.str.asInteger
}, {
\rest
}
)});
];
if (type !== 'midi', {
if (pattern.includes('i') || pattern.includes('instrument') == false, {
new_pattern = new_pattern ++ [
sp: Pfunc { |e| e.str ? "kick" },
nb: Pfunc { |e| e.num ? 0 },
instrument: Pfunc { |e| e.str.isNil && e.num.isNil ? "default" },
fast: 1,
];
});
})
}, {
new_pattern = new_pattern ++ [a, b];
});
})
});
^new_pattern
}
*functionsToNdef {
arg pattern, key;
var new_pattern = List.new();
pattern.do({
| element, i |
if (element.isKindOf(Function), {
new_pattern.add(Ndef((key ++ pattern[i - 1]).asSymbol, element))
}, {
new_pattern.add(element)
});
})
^new_pattern
}
*findShortcuts {
arg pattern;
var short, correctedPattern;
correctedPattern = List.new();
short = Dictionary.newFrom([
// Instrument
\i, \instrument,
// Notes
\n, \note,
\mn, \midinote,
\vel, \velocity,
\deg, \degree,
\off, \timingOffset,
\o, \octave,
\f, \freq,
\det, \detune,
// Durations
\d, \dur,
\l, \legato,
// Amplitude
\p, \pan,
// Envelope
\a, \attack,
\d, \decay,
\s, \sustain,
\r, \release,
// Filter control
\r, \resonance,
\ff, \ffreq,
// Modulation
\m, \mod,
\mo, \midout,
\c, \midichan,
\st, \stretch,
\rt, \root,
\scl, \scale,
]);
pattern.do({| element, i |
if (short.includesKey(element),
{correctedPattern.add(short[element])},
{correctedPattern.add(element)}
);
});
^correctedPattern;
}
}