From fc73be4851c6adb4d259869adb7f93498da64212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=27=C3=A9lectron=20rare?= <108685187+electron-rare@users.noreply.github.com> Date: Tue, 30 Jun 2026 00:06:08 +0200 Subject: [PATCH] feat(presets): hand-authored pattern families Add explicit 6-colour style families to the pattern bank so genre presets feel musically distinct (merged SP-C2). All colours hand-written following the role convention (base/busier/broken/double/sparse/fill), velocity- humanized; existing families and every default stay untouched. Changes: - MEL: dub (reese/pad/chord/bells/melody), psy (sub/reese/arp/lead/stab), house (pad/chord/stab/bells/lead/melody), ambient (pad/bells/melody/ sub/reese) - 21 families x 6 motifs. - DRUMS: percu-voice + style-completion families for ride/shaker/crash/ rim/fx/sweep/perc (techno/house/breaks/dnb/trance/ambient). Impact: vocabulary for the genre presets; wired per preset in a later task. test_families.py PASS (validity + >=4 distinct + coverage). --- .../data_only/matrix_presets/patterns.py | 216 ++++++++++++++++++ 1 file changed, 216 insertions(+) diff --git a/sound_algo/data_only/matrix_presets/patterns.py b/sound_algo/data_only/matrix_presets/patterns.py index d24a1a8..df13e40 100644 --- a/sound_algo/data_only/matrix_presets/patterns.py +++ b/sound_algo/data_only/matrix_presets/patterns.py @@ -341,6 +341,222 @@ MEL = { }, } +# === SP-C2 hand-authored style families (6 colours each, following the colour-role +# convention base/busier/broken/double/sparse/fill, velocity-humanized). Existing +# families and every `default` stay untouched; these are pure additions. === + +# -- dub mel: deep, sparse, off-beat skank stabs, long rests (A-minor degrees) -- +MEL["reese"]["dub"] = [ + _mel([(0,.85),N,N,N,(0,.5),N,N,N,(3,.6),N,N,N,(0,.5),N,N,N]), + _mel([(0,.85),N,(0,.4),N,(0,.6),N,(3,.45),N,(3,.6),N,(0,.4),N,(0,.55),N,(3,.45),N]), + _mel([N,N,(0,.7),N,N,(0,.5),N,N,(3,.6),N,N,(0,.45),N,N,(5,.55),N]), + _mel([(0,.8),N,(0,.5),N,(3,.6),N,(3,.5),N,(5,.6),N,(5,.5),N,(3,.6),N,(0,.5),N]), + _mel([(0,.7),N,N,N,N,N,N,N,(3,.5),N,N,N,N,N,N,N]), + _mel([(0,.8),N,(0,.5),(3,.5),(3,.6),(5,.5),(5,.6),(7,.6),(7,.7),N,(5,.5),N,(3,.6),(3,.5),(0,.7),(0,.6)]), +] +MEL["pad"]["dub"] = [ + _mel([(0,.55),N,N,N,N,N,N,N,(3,.5),N,N,N,N,N,N,N]), + _mel([(0,.55),N,N,N,(7,.45),N,N,N,(3,.5),N,N,N,(7,.45),N,N,N]), + _mel([N,N,N,(0,.55),N,N,N,(7,.45),N,N,N,(5,.5),N,N,N,(3,.45)]), + _mel([(0,.55),N,(7,.4),N,(3,.5),N,(10,.4),N,(5,.5),N,(12,.4),N,(7,.5),N,(3,.4),N]), + _mel([(0,.5),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([(0,.55),N,N,N,(3,.5),N,N,N,(5,.55),N,N,N,(7,.6),N,(10,.5),(12,.6)]), +] +MEL["chord"]["dub"] = [ + _mel([N,N,(0,.6),N,N,N,(0,.5),N,N,N,(3,.55),N,N,N,(0,.5),N]), + _mel([N,N,(0,.6),N,N,(3,.45),(0,.5),N,N,N,(3,.55),N,N,(5,.45),(0,.5),N]), + _mel([N,(0,.6),N,N,(3,.5),N,N,(5,.45),N,(3,.55),N,N,(7,.5),N,N,(0,.45)]), + _mel([(0,.6),N,(0,.4),(3,.5),N,(0,.4),(5,.55),N,(0,.4),(7,.5),N,(0,.4),(3,.55),N,(0,.4),(5,.5)]), + _mel([N,N,(0,.55),N,N,N,N,N,N,N,(3,.5),N,N,N,N,N]), + _mel([N,N,(0,.6),N,(3,.5),N,(5,.55),N,(7,.6),N,(5,.5),(3,.55),(0,.6),(3,.5),(5,.55),(7,.6)]), +] +MEL["bells"]["dub"] = [ + _mel([(12,.6),N,N,N,N,N,N,N,N,N,(7,.45),N,N,N,N,N]), + _mel([(12,.6),N,N,N,(7,.4),N,N,N,(10,.5),N,N,N,(7,.4),N,N,N]), + _mel([N,N,N,(12,.55),N,N,(7,.4),N,N,N,(10,.5),N,N,(5,.4),N,N]), + _mel([(12,.6),N,(7,.4),N,(10,.5),N,(5,.4),N,(12,.55),N,(7,.4),N,(8,.5),N,(3,.4),N]), + _mel([(12,.55),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([(12,.6),N,(10,.5),N,(7,.5),N,(5,.5),N,(7,.55),N,(10,.5),N,(12,.6),(10,.5),(7,.5),(12,.65)]), +] +MEL["melody"]["dub"] = [ + _mel([N,N,N,N,(7,.6),N,N,N,N,N,N,N,(5,.5),N,N,N]), + _mel([N,N,(7,.5),N,(7,.6),N,N,(5,.45),N,N,(3,.5),N,(5,.55),N,N,N]), + _mel([N,(7,.55),N,N,(5,.5),N,N,(3,.45),N,(7,.5),N,N,(10,.5),N,N,(5,.45)]), + _mel([(7,.6),N,(5,.45),N,(3,.5),N,(5,.45),N,(7,.55),N,(10,.45),N,(7,.5),N,(5,.45),N]), + _mel([N,N,N,N,(7,.5),N,N,N,N,N,N,N,N,N,N,N]), + _mel([(7,.6),N,(10,.5),N,(12,.55),N,(10,.5),(7,.5),(5,.55),N,(7,.5),N,(10,.55),(7,.5),(5,.55),(3,.6)]), +] + +# -- psy mel: rolling 16th basslines, fast tight arps, minor -- +MEL["sub"]["psy"] = [ + _mel([_bass(0,.9),N,N,_bass(0,.5),N,N,_bass(0,.55),N,N,_bass(3,.6),N,N,_bass(0,.55),N,N,_bass(2,.5)]), + _mel([_bass(0,.9),N,_bass(0,.45),_bass(0,.55),N,_bass(0,.45),_bass(3,.6),N,_bass(0,.45),_bass(0,.55),N,_bass(0,.45),_bass(5,.6),N,_bass(0,.45),_bass(2,.5)]), + _mel([_bass(0,.85),N,N,_bass(7,.5),N,_bass(0,.45),N,N,_bass(3,.6),N,_bass(0,.45),N,_bass(5,.55),N,N,_bass(2,.5)]), + _mel([_bass(0,.9),_bass(0,.5),_bass(0,.6),_bass(0,.5)]*4), + _mel([_bass(0,.85),N,N,N,N,N,_bass(0,.55),N,N,N,N,N,_bass(3,.55),N,N,N]), + _mel([_bass(0,.9),_bass(0,.5),_bass(3,.6),_bass(0,.5),_bass(5,.6),_bass(0,.5),_bass(7,.6),_bass(0,.5),_bass(8,.6),_bass(0,.5),_bass(7,.6),_bass(5,.55),_bass(3,.6),_bass(2,.55),_bass(0,.7),_bass(0,.55)]), +] +MEL["reese"]["psy"] = [ + _mel([(0,.85),N,N,(0,.5),N,N,(3,.55),N,N,(0,.5),N,N,(5,.55),N,N,(0,.5)]), + _mel([(0,.85),(0,.45),N,(0,.5),(3,.55),N,(0,.45),(3,.5),N,(0,.45),(5,.55),N,(0,.45),(5,.5),N,(0,.5)]), + _mel([(0,.8),N,(7,.5),N,(0,.45),N,(3,.55),(0,.45),N,(5,.55),N,(0,.45),(7,.5),N,(0,.45),(2,.5)]), + _mel([(0,.85),(0,.5),(3,.55),(0,.5),(5,.55),(0,.5),(7,.55),(0,.5),(8,.55),(0,.5),(7,.55),(0,.5),(5,.55),(0,.5),(3,.55),(0,.5)]), + _mel([(0,.8),N,N,N,(0,.5),N,N,N,(3,.55),N,N,N,(0,.5),N,N,N]), + _mel([(0,.85),(0,.5),(3,.6),(5,.55),(7,.6),(5,.55),(3,.6),(0,.5),(2,.55),(3,.6),(5,.55),(7,.6),(8,.6),(7,.55),(3,.6),(0,.7)]), +] +MEL["arp"]["psy"] = [ + _mel([(0,.7),N,(7,.6),N,(12,.65),N,(7,.6),N,(0,.7),N,(7,.6),N,(12,.65),N,(7,.6),N]), + _mel([(0,.7),(3,.55),(7,.6),(10,.55),(12,.65),(10,.55),(7,.6),(3,.55),(0,.7),(3,.55),(7,.6),(10,.55),(12,.65),(10,.55),(7,.6),(3,.55)]), + _mel([(0,.7),N,(12,.6),(7,.55),N,(10,.6),(3,.55),N,(0,.65),(7,.6),N,(12,.6),(5,.55),N,(7,.6),(3,.55)]), + _mel([(0,.7),(12,.6),(7,.6),(12,.6),(3,.65),(12,.6),(7,.6),(12,.6),(5,.65),(12,.6),(7,.6),(12,.6),(8,.65),(12,.6),(7,.6),(12,.6)]), + _mel([(0,.65),N,N,N,(7,.6),N,N,N,(12,.6),N,N,N,(7,.6),N,N,N]), + _mel([(0,.7),(7,.6),(12,.65),(14,.6),(15,.7),(14,.6),(12,.65),(7,.6),(10,.65),(12,.6),(14,.65),(15,.6),(17,.7),(15,.6),(12,.65),(0,.75)]), +] +MEL["lead"]["psy"] = [ + _mel([(0,.75),N,N,N,(3,.6),N,N,N,(7,.65),N,N,N,(5,.6),N,N,N]), + _mel([(0,.75),N,(3,.55),N,(7,.6),N,(5,.55),N,(8,.6),N,(7,.55),N,(5,.6),N,(3,.55),N]), + _mel([N,(0,.7),N,(7,.55),N,N,(3,.6),N,(5,.55),N,N,(7,.6),N,(8,.55),N,(5,.6)]), + _mel([(0,.7),(7,.55),(3,.6),(7,.55),(5,.6),(7,.55),(8,.6),(7,.55),(10,.6),(7,.55),(8,.6),(7,.55),(5,.6),(3,.55),(2,.6),(0,.6)]), + _mel([(0,.7),N,N,N,N,N,N,N,(7,.6),N,N,N,N,N,N,N]), + _mel([(0,.75),(3,.6),(5,.6),(7,.65),(8,.6),(10,.65),(12,.7),(10,.6),(8,.65),(7,.6),(5,.65),(3,.6),(2,.6),(0,.65),(0,.55),(12,.75)]), +] +MEL["stab"]["psy"] = [ + _mel([(0,.7),N,N,N,N,N,(0,.6),N,N,N,(3,.6),N,N,N,(0,.55),N]), + _mel([(0,.7),N,(0,.5),N,N,(3,.55),(0,.5),N,N,N,(3,.6),N,(5,.55),N,(0,.55),N]), + _mel([N,N,(0,.65),N,(3,.55),N,N,(5,.5),N,(0,.55),N,N,(7,.55),N,(0,.5),N]), + _mel([(0,.65),(0,.45),N,(3,.55),(0,.45),N,(5,.55),(0,.45),N,(7,.55),(0,.45),N,(3,.55),(0,.45),(0,.55),N]), + _mel([N,N,N,N,N,N,(0,.6),N,N,N,N,N,N,N,(3,.55),N]), + _mel([(0,.7),N,(3,.55),N,(5,.6),N,(7,.55),N,(8,.6),(7,.55),(5,.6),(3,.55),(0,.6),(3,.55),(5,.6),(7,.65)]), +] + +# -- house mel: chord stabs on off-beats, syncopated, soulful -- +MEL["pad"]["house"] = [ + _mel([N,N,(0,.55),N,N,N,(3,.5),N,N,N,(5,.55),N,N,N,(3,.5),N]), + _mel([N,N,(0,.55),N,(7,.45),N,(3,.5),N,(10,.45),N,(5,.55),N,(7,.45),N,(3,.5),N]), + _mel([N,(0,.55),N,N,(3,.5),N,(5,.45),N,N,(7,.5),N,(5,.45),N,(3,.5),N,(0,.45)]), + _mel([(0,.55),(7,.4),(3,.5),(10,.4),(5,.55),(12,.4),(3,.5),(10,.4),(5,.55),(12,.4),(7,.5),(14,.4),(5,.55),(12,.4),(3,.5),(10,.4)]), + _mel([N,N,(0,.5),N,N,N,N,N,N,N,(5,.5),N,N,N,N,N]), + _mel([N,N,(0,.55),N,(3,.5),N,(5,.55),N,(7,.5),N,(5,.55),(3,.5),(0,.55),(3,.5),(5,.55),(7,.6)]), +] +MEL["chord"]["house"] = [ + _mel([N,N,(0,.6),N,(0,.55),N,N,N,(5,.6),N,(5,.55),N,N,N,(3,.55),N]), + _mel([N,(0,.45),(0,.6),N,(0,.55),N,(3,.5),N,(5,.55),(5,.45),(5,.6),N,(3,.55),N,(0,.5),N]), + _mel([N,N,(0,.6),(3,.5),N,(5,.55),N,N,(7,.55),N,(5,.5),N,(3,.55),N,(0,.5),N]), + _mel([(0,.6),N,(0,.45),(3,.55),N,(0,.45),(5,.6),N,(0,.45),(7,.55),N,(0,.45),(5,.6),N,(0,.45),(3,.55)]), + _mel([N,N,(0,.55),N,N,N,N,N,(5,.55),N,N,N,N,N,N,N]), + _mel([N,N,(0,.6),N,(3,.55),N,(5,.6),N,(7,.6),(5,.55),(3,.6),N,(0,.6),(3,.55),(5,.6),(7,.65)]), +] +MEL["stab"]["house"] = [ + _mel([N,N,(0,.65),N,N,N,(0,.6),N,N,N,(5,.65),N,N,N,(3,.6),N]), + _mel([N,(0,.5),(0,.65),N,(3,.55),N,(0,.6),N,(5,.55),N,(5,.65),N,(3,.6),N,(0,.55),N]), + _mel([N,N,(0,.65),(3,.5),N,(5,.6),N,N,(7,.6),N,(5,.5),N,(3,.6),N,(0,.55),(0,.5)]), + _mel([(0,.6),N,(3,.55),(5,.6),N,(3,.55),(7,.6),N,(5,.55),(8,.6),N,(5,.55),(7,.6),N,(3,.55),(0,.6)]), + _mel([N,N,(0,.6),N,N,N,N,N,N,N,(5,.6),N,N,N,N,N]), + _mel([N,N,(0,.65),N,(3,.6),N,(5,.65),N,(7,.65),(8,.6),(7,.65),(5,.6),(3,.65),(2,.6),(0,.65),(7,.7)]), +] +MEL["bells"]["house"] = [ + _mel([(12,.6),N,N,N,(7,.55),N,N,N,(10,.6),N,N,N,(12,.6),N,N,N]), + _mel([(12,.6),N,(7,.5),N,(7,.55),N,(10,.5),N,(10,.6),N,(12,.5),N,(12,.6),N,(15,.55),N]), + _mel([N,(12,.6),N,(7,.5),N,N,(10,.55),N,(12,.6),N,N,(15,.5),N,(12,.55),N,(10,.5)]), + _mel([(12,.6),(7,.45),(10,.55),(12,.45),(15,.6),(12,.45),(10,.55),(7,.45),(12,.6),(15,.45),(17,.55),(15,.45),(12,.6),(10,.45),(7,.55),(12,.5)]), + _mel([(12,.55),N,N,N,N,N,N,N,(10,.55),N,N,N,N,N,N,N]), + _mel([(12,.6),N,(10,.55),N,(7,.55),N,(10,.6),N,(12,.6),(15,.55),(12,.6),(10,.55),(7,.6),(10,.55),(12,.6),(17,.65)]), +] +MEL["lead"]["house"] = [ + _mel([N,N,(7,.65),N,N,N,(5,.6),N,N,N,(3,.6),N,N,N,(5,.6),N]), + _mel([N,(7,.5),(7,.65),N,(10,.55),N,(5,.6),N,(8,.55),N,(3,.6),N,(5,.55),N,(7,.6),N]), + _mel([N,N,(7,.65),(10,.5),N,(12,.6),N,N,(10,.6),N,(7,.5),N,(5,.6),N,(3,.55),N]), + _mel([(7,.6),(5,.5),(3,.6),(5,.5),(7,.6),(10,.5),(12,.6),(10,.5),(8,.6),(7,.5),(5,.6),(3,.5),(2,.6),(0,.5),(3,.6),(5,.5)]), + _mel([N,N,(7,.6),N,N,N,N,N,N,N,(5,.6),N,N,N,N,N]), + _mel([(7,.65),N,(10,.6),N,(12,.65),N,(10,.6),(8,.6),(7,.65),(5,.6),(3,.65),(5,.6),(7,.65),(10,.6),(12,.65),(15,.7)]), +] +MEL["melody"]["house"] = [ + _mel([(7,.6),N,N,N,(10,.55),N,N,N,(7,.6),N,N,N,(5,.55),N,N,N]), + _mel([(7,.6),N,(10,.5),N,(10,.6),N,(12,.5),N,(7,.6),N,(5,.5),N,(5,.6),N,(3,.5),N]), + _mel([N,(7,.6),N,(10,.5),N,N,(12,.55),N,(10,.6),N,N,(7,.5),N,(5,.55),N,(3,.5)]), + _mel([(7,.6),(10,.5),(12,.6),(10,.5),(7,.6),(5,.5),(3,.6),(5,.5),(7,.6),(10,.5),(12,.6),(14,.5),(15,.6),(14,.5),(12,.6),(10,.5)]), + _mel([(7,.55),N,N,N,N,N,N,N,(10,.55),N,N,N,N,N,N,N]), + _mel([(7,.6),N,(10,.55),N,(12,.6),N,(15,.6),N,(12,.6),(10,.55),(7,.6),(5,.55),(3,.6),(5,.55),(7,.6),(12,.65)]), +] + +# -- ambient mel: very sparse, long-feel, few notes, wide -- +MEL["pad"]["ambient"] = [ + _mel([(0,.45),N,N,N,N,N,N,N,(7,.4),N,N,N,N,N,N,N]), + _mel([(0,.45),N,N,N,(7,.4),N,N,N,(3,.45),N,N,N,(10,.4),N,N,N]), + _mel([N,N,N,N,(0,.45),N,N,N,N,N,N,N,(5,.4),N,N,N]), + _mel([(0,.45),N,N,N,(3,.42),N,N,N,(5,.44),N,N,N,(7,.42),N,N,N]), + _mel([(0,.4),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([(0,.45),N,N,N,(3,.42),N,N,N,(7,.45),N,N,N,(10,.42),N,(12,.45),N]), +] +MEL["bells"]["ambient"] = [ + _mel([(12,.5),N,N,N,N,N,N,N,N,N,N,N,(7,.4),N,N,N]), + _mel([(12,.5),N,N,N,N,N,(7,.4),N,N,N,N,N,(10,.45),N,N,N]), + _mel([N,N,N,N,(12,.5),N,N,N,N,N,N,(7,.4),N,N,N,N]), + _mel([(12,.5),N,N,(7,.4),N,N,(10,.45),N,N,(5,.4),N,N,(12,.45),N,N,N]), + _mel([(12,.45),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([(12,.5),N,N,N,(10,.4),N,N,N,(7,.45),N,N,N,(10,.4),N,(12,.5),N]), +] +MEL["melody"]["ambient"] = [ + _mel([N,N,N,N,(7,.45),N,N,N,N,N,N,N,N,N,N,N]), + _mel([(7,.45),N,N,N,N,N,(5,.4),N,N,N,N,N,(3,.42),N,N,N]), + _mel([N,N,N,(7,.45),N,N,N,N,(10,.4),N,N,N,N,N,(5,.4),N]), + _mel([(7,.45),N,N,(10,.4),N,N,(12,.42),N,N,(10,.4),N,N,(7,.42),N,N,N]), + _mel([N,N,N,N,N,N,N,N,(7,.42),N,N,N,N,N,N,N]), + _mel([(7,.45),N,N,N,(10,.4),N,N,N,(12,.45),N,N,N,(10,.4),N,(7,.45),N]), +] +MEL["sub"]["ambient"] = [ + _mel([_bass(0,.55),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([_bass(0,.55),N,N,N,N,N,N,N,_bass(3,.5),N,N,N,N,N,N,N]), + _mel([N,N,N,N,_bass(0,.55),N,N,N,N,N,N,N,N,N,N,N]), + _mel([_bass(0,.55),N,N,N,N,N,N,N,_bass(5,.5),N,N,N,_bass(3,.5),N,N,N]), + _mel([_bass(0,.5),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([_bass(0,.55),N,N,N,_bass(3,.5),N,N,N,_bass(5,.5),N,N,N,_bass(7,.55),N,N,N]), +] +MEL["reese"]["ambient"] = [ + _mel([(0,.5),N,N,N,N,N,N,N,(7,.42),N,N,N,N,N,N,N]), + _mel([(0,.5),N,N,N,(7,.4),N,N,N,(3,.45),N,N,N,(5,.4),N,N,N]), + _mel([N,N,N,N,(0,.5),N,N,N,N,N,N,N,(7,.4),N,N,N]), + _mel([(0,.5),N,N,(3,.4),N,N,(5,.42),N,N,(7,.4),N,N,(5,.42),N,N,N]), + _mel([(0,.45),N,N,N,N,N,N,N,N,N,N,N,N,N,N,N]), + _mel([(0,.5),N,N,N,(3,.42),N,N,N,(5,.45),N,N,N,(7,.42),N,(10,.45),N]), +] + +# -- drum style families for the percu voices + style completions -- +DRUMS["ride"]["techno"] = ["x.x.x.x.x.x.x.x.", "xXx.xXx.xXx.xXx.", "x..x.x.x..x.x.x.", + "xxxxxxxxxxxxxxxx", "x...x...x...x...", "x.x.x.x.x.x.xXXX"] +DRUMS["ride"]["house"] = ["..x...x...x...x.", "..X.o.X.o.X.o.X.", "..x...x.x...x..x", + ".x.x.x.x.x.x.x.x", "..x.......x.....", "..x...x...x.xXXX"] +DRUMS["ride"]["dnb"] = ["x.x.x.xxx.x.x.xx", "xXxxxXxxxXxxxXxx", "x.xx.x.xx.xx.x.x", + "xxxxxxxxxxxxxxxx", "x...x...x...x...", "x.xxx.xxx.xxxXXX"] +DRUMS["shaker"]["techno"] = ["oxoxoxoxoxoxoxox", "oXoxoXoxoXoxoXox", "ox.xoxo.ox.xoxo.", + "xxxxxxxxxxxxxxxx", "o.o.o.o.o.o.o.o.", "oxoxoxoxoxoxoXXX"] +DRUMS["shaker"]["house"] = ["o-x-o-x-o-x-o-x-", "o-X-o-x-o-X-o-x-", "o.x-o.x-o.x-o.x-", + "oxxxoxxxoxxxoxxx", "o---o---o---o---", "o-x-o-x-o-x-oXXX"] +DRUMS["shaker"]["breaks"] = ["x.o.xxo.x.o.xxo.", "xXo.xxo.xXo.xxo.", "x.oxx.o.x.oxx.o.", + "xoxoxoxoxoxoxoxo", "x...x...x...x...", "x.o.xxo.x.o.xXXX"] +DRUMS["shaker"]["dnb"] = ["xoxoxoxoxoxoxoxo", "xXxoxXxoxXxoxXxo", "xo.xxoxo.xoxxo.x", + "xxxxxxxxxxxxxxxx", "x...x...x...x...", "xoxoxoxoxoxoXXXX"] +DRUMS["crash"]["techno"] = ["X.......X.......", "X...o...X...o...", "..X.......X.....", + "X...X...X...X...", "X...............", "X.......X...xXXX"] +DRUMS["crash"]["breaks"] = ["X.......-.......", "X...-...X...-...", "..X...-...X.....", + "X...X...X...X...", "X...............", "X.......-...xXXX"] +DRUMS["rim"]["techno"] = ["....x.......x...", "..o.x...o.o.x...", "...x..x...x.x...", + "x.x.x.x.x.x.x.x.", "....x...........", "....x.......xoXX"] +DRUMS["rim"]["dnb"] = ["....x......x.x..", "..o.x..o.ox.x.o.", ".x..x.x..x.x..x.", + "oxoxoxoxoxoxoxox", "....x...........", "....x..x.x.oxXXX"] +DRUMS["fx"]["techno"] = ["X.......o.......", "X...o...o...o...", "....X.......o...", + "X...X...X...X...", "X...............", "o.o.o.o.oxoxoXXX"] +DRUMS["fx"]["ambient"] = ["X...............", "X.............o.", "........X.......", + "X.......o.......", "o...............", "o...o...o..oo.XX"] +DRUMS["sweep"]["trance"] = ["o.....-.....x...", "o...-...-...x...", "..o.....-...x...", + "o.-.x.o.-.x.o.-.", "o...............", "o...-...x..xXXXX"] +DRUMS["sweep"]["ambient"] = ["o...............", "o.......-.......", "....o...........", + "o.......o.......", "o...............", "o...-...x..-.oXX"] +DRUMS["perc"]["breaks"] = ["..x...x...x.x...", "..X.o.x...X.x.o.", ".x..x..x.x..x.x.", + "x.x.x.x.x.x.x.x.", "..x..........x..", "..x...x...x.xXXX"] +DRUMS["perc"]["dnb"] = ["..x...x.x.x...x.", "..X.o.x.x.X.o.x.", ".x.x..x.x..x.x.x", + "xoxoxoxoxoxoxoxo", "..x..........x..", "..x...x.x.xoxXXX"] + # preset name -> (drum family, melodic family) PRESET_FAMILY = { "techno_drive": ("techno", "default"), "detroit_soul": ("house", "default"),