A huge drum machine library for tidal (71 drum machines)

tidal-drum-machines


A huge collection of Drum Machines for SuperDirt and Tidal

List of drum machines

See the full list of drum machines here.


How to use

Run the custom SuperCollider bootup found in tdm-sc-boot.scd, or add the necessary parts to your own bootup. Then run the haskell/tidal code found in tdm-hs-setup.tidal, or just copy and paste it from here:

let drumMachine name ps = stack 
                    (map (\ x -> 
                        (# s (name ++| (extractS "s" (x)))) $ x
                        ) ps)
    drumFrom name drum = s (name ++| drum)
    drumM = drumMachine
    drumF = drumFrom

Examples

Here are some examples of how to use the drum machines:

drumMachines

d1 $ drumMachine "bossdr220" [
    s "[~perc]*2" # note 7
    ,s "bd:4(3,8)"
    ,s "~[cp,sd]"
    ,s "hh*8"
]

The drum machine can be pattern'd:

d1 $ drumMachine "<bossdr220 rolandtr808>" [
    s "[~perc]*2" # note 7
    ,s "bd:4(3,8)"
    ,s "~[cp,sd]"
    ,s "hh*8"
]

drumFrom

You can also just call one percussive element:

d1 $ drumFrom "linn9000" "bd*2"

This method could be useful for live performance:

do
 let dm = "linn9000"
 d1 $ drumFrom dm "bd*2"

Drum names abbreviations:

Drum Abbreviation
Bass drum, Kick drum bd
Snare drum sd
Rimshot rim
Clap cp
Closed hi-hat hh
Open hi-hat oh
Crash cr
Ride rd
Shakers (and maracas, cabasas, etc) sh
High tom ht
Medium tom mt
Low tom lt
Cowbell cb
Tambourine tb
Other percussions perc
Miscellaneous samples misc
Effects fx

Repost from the repo's readme:

25 Likes

Much love!

1 Like

a minimal exploration from the sclang side:


SuperDirt.default = ~dirt;

~path = "path/to/tidal-drum-machines-main/machines"; 

~dirt.soundLibrary.loadSoundFiles(~path ++ "/*/*");

p = pathMatch("/Volumes/data/archiv/ton/tidal/tidal-drum-machines-main/machines/*/*");

x = p.collect { |x| x.split($/).drop(-1).last.asSymbol };

(
Tdef(\x, { 
	var w = x.choose, dt = 1, dt0 = 0.1;
	loop {
		if(0.004.coin) { w = x.choose };
		if((dt/3).coin) { dt =  [1, 1/2, 1/3, 2].choose };
		wait(dt * dt0);
		(
			type: \dirt, 
			s: w,
			n: 10.rand, 
			pan: -0.5, 
			amp: rrand(-20, -30).dbamp, 
			ring: 1.0.rand, 
			ringf: 3000.rand
		).play;
	}
}).play
)
3 Likes

ooohhh cool stuff. I was going to try the "/* /*" thing since I learned it recently while learning cool bash stuff. (I'm getting used to my first own 100% linux computer, and hence learning more bash stuff, like dir */*)

what's the Tdef thing? plays a random sample or something like that? I'd try playing it but my supercollider install is broken at the moment... trying to fix it rn heh

A Tdef is a routine that you can rewrite at runtime. In its function you can have wait statements and arbitary other code.

1 Like

… and in this particular case, it just picks random sample folders and and varies the parameters every once in a while. Just to get an "overview"...

1 Like