Oh yes, this is a nice topic!
Btw. @geikha I love your drum machine a lot! And because you asked for use cases (yeah!)
I implemented a custom drum bank mapping for my setup (which is indeed pretty dirty implemented
).
And I am not sure whether this is applicable, but I have three use cases in total for this:
- The "classical" sample bank. I.e. when I use the sample bank
chiptune
then I play a specific set of samples (like the drum machine is doing)
- I use a multi sample pack with the Kontakt vst sampler in combination with TidalVST.
- I simply send midi to an external drum machine.
As a parameters of the s
function I only use values like bd
, sn
, hh
, tom
etc. to reduce the mental load during a performance. But I can switch between samples, midi and vst plugins, if needed.
Edit: TidalVST is using midi internally so it's a similar use case. But for a little bit more context: I need to map a midi notes to a sample name i.e.
~dirt.soundLibrary.addSynth( \modernbd, (play: {
var event = ();
var result = ();
eventmapper.value(event, result);
notemapper.value(event, result, 0, -36, 1);
result.play;
}));
~dirt.soundLibrary.addSynth( \modernsn, (play: {
var event = ();
var result = ();
eventmapper.value(event, result);
// i.e. 5 different play styles
notemapper.value(event, result, 0, -34, 5);
notemapper.value(event, result, 1, -33, 5);
notemapper.value(event, result, 2, -32, 5);
notemapper.value(event, result, 3, -31, 5);
notemapper.value(event, result, 4, -30, 5);
result.play;
}));
~dirt.soundLibrary.addSynth( \moderntom, (play: {
var event = ();
var result = ();
eventmapper.value(event, result);
// i.e. 4 different toms
notemapper.value(event, result, 0, -27, 4);
notemapper.value(event, result, 1, -25, 4);
notemapper.value(event, result, 2, -23, 4);
notemapper.value(event, result, 3, -21, 4);
result.play;
}));