Strudelify

Your Place or Mine

Rene Froger

KeyC majorTempo128 bpm
0:00/0:00
// Your Place or Mine — Rene Froger
// 128 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 12 "#WARM BELL" Warm Bell -> pad bowed
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@12 A@12 B C B C D C D C E F C A@2 F C A G H@2 I@2 H@2 I@2 A@3 J A@8 B C B C D C D C E F C A@2 F C A G H@2 I@2 H@2
  I@2 A@8 B C B C D C D C K L M N@2 L M N@2 L M N@2 L M N@2 L M N@2 L M N@2 L M N@2 L M N@2 ~
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~", B: "d2 ~ d2 ~ d2 ~ d2 ~", C: "g2 ~ g2 ~ g2 ~ g2 ~", D: "f2 ~ f2 ~ f2 ~ f2 ~", E: "g2 ~@7",
  F: "f2 ~ f2 ~ f2 ~ c2 ~", G: "c2 ~ c2 ~ c2 ~ b1 ~", H: "a1 ~ b1 ~ c2 ~ e2 ~", I: "g1 ~ a1 ~ b1 ~ d2 ~",
  J: "c2@2 ~@2 c2@2 ~@2 a#1@3 ~ a1@3 ~", K: "g#2 ~@7", L: "f#2 ~ f#2 ~ f#2 ~ c#2 ~", M: "g#2 ~ g#2 ~ g#2 ~ g#2 ~",
  N: "c#2 ~ c#2 ~ c#2 ~ c#2 ~",
})).s("gm_electric_bass_finger").gain(0.29)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@12 A B A B A B A B A B A B C D C D C D C D E F D A@2 F D A G H@2 I@2 H@2 I@2 A B A J A B A B A B A B C D C D C D C D
  E F D A@2 F D A G H@2 I@2 H@2 I@2 A B A B A B A B C D C D C D C D K L M N@2 L M N@2 L M N@2 L M N@2 L M N@2 L M N@2 L
  M N@2 L M N@2 ~
>`.pickRestart({
  A: "[g3,c4,e4]@2 ~ [g3,c4,e4] ~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2", // C
  B: "[a3,c4,f4]@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2", // F
  C: "[a3,c4,f4]@2 ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2", // F
  D: "[b3,d4,g4]@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", E: "[b3,d4,g4] ~@15",
  F: "[a3,c4,f4]@2 ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~", // F
  G: "[g3,c4,e4]@2 ~ [g3,c4,e4] ~@2 [g3,c4,e4] ~ [g3,c4,e4]@3 ~ [g3,b3,d4]@3 ~", // C G
  H: "[[a2,e3,a3,c4]@29 ~ [a2,a3,c4,e4] ~]/2", I: "[g2,g3,b3,d4]",
  J: "[a3,c4,f4]@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~ [f3,a#3,d4]@3 ~ [f3,a3,c4]@3 ~", K: "[c4,d#4,g#4] ~@15",
  L: "[a#3,c#4,f#4]@2 ~ [a#3,c#4,f#4] ~@2 [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4]@3 ~", // F#
  M: "[c4,d#4,g#4]@3 [c4,d#4,g#4] ~@2 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~@2 [c4,d#4,g#4] ~@2", // G#
  N: "[g#3,c#4,f4]@2 ~ [g#3,c#4,f4] ~@2 [g#3,c#4,f4] ~@3 [g#3,c#4,f4] ~@2 [g#3,c#4,f4] ~@2", // C#
})).s("gm_piano").gain(0.1)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@12 A B A C D E F G@2 E F H I J K L M N M O P Q R S T U V W X Y@4 Z@2 AA@2 AB AC AD AE AF E F G@2 E F H I AG K L M N
  M O P Q R S T U V W X AH@4 AI@2 AA@2 AB AC AD AE A B A C I AG K L M N M O AJ AK AL AM AN AK AL AM AN AK AL AM AN AK AL
  AM AN AK AL AM AN AK AL AM AN AK AL AM AN AK AL AM AN ~
>`.pickRestart({
  A: "[c3,g3]@15 ~", B: "[c3,a3]@15 ~", C: "[c3,a3]", D: "~ g3@3 ~ g3@3, c3, c4@7 ~ c4@8",
  E: "~@3 g3, c3@15 ~, f3 f4, ~ c4@5 ~@2", F: "~@3 g3, c3@15 ~, g3@3 ~, ~ c4",
  G: "[~@2 c4@5 ~@11 g3@6 ~@2 g3@6, c3@12 ~@4 c3@15 ~, f3@7 ~ c4@7 ~ c4@7 ~ c4@8, ~@2 [f3,f4] c5@2 ~@3, ~@5 g4@5 ~@6]/2", // F
  H: "~@2 c4@2 d4!2 ~ d4 d4@2 d4@2 ~@2 f3@2, [c3,f3] ~@2 c4", I: "d3@4 ~ [a3,f4]@3, [a3,d4]@5 ~@3, ~ c3",
  J: "d4@2 ~ d4@3 ~ [d4,g4,b4], d3@15 ~, g3@3 g3, ~ g4@2 ~", K: "[d3,a3,f4]@4 [d3,a3,c4,f4]!2 ~@2",
  L: "[g3,d4]@3 [g3,d4,g4]@5, d3", M: "[c3,f3,c4]", N: "d3@3 ~@3 [g3,d4]@2, [g3,d4]@3 ~, ~@3 d3@5",
  O: "[g3,d4]!2 [g3,d4]@2, d3", P: "~ [c3,c#3,f#3] [a#2,b2,e3,f3] [a2,d3,d#3] ~@12, [d3,g3,d4,g4,b4] ~@7",
  Q: "[a3,c4]@2 [a3,c4,f4]@2 c3@4 [a3,c4,f4] [c4,f4] [a3,c4,f4]@2 c3@4, [c3,f3] ~@3", // Am F F5 F F5
  R: "[d3,g3,d4]@2 [b3,d4,g4]@2 d3@4 [g3,b3,d4] [b3,d4] [g3,b3,d4]@2 d3@4", // G5 G Bm G
  S: "[g3,c4,e4]@2 ~@2 g4 a4 g4@2 e4@4 [g4,c5] ~ c5 ~, ~@3 [g3,c4]@5 [g3,c4]@8, ~@4 e4@3 ~@5 e4@3 ~, ~@13 [g4,d5]@2 ~", // C C5 G5
  T: "[g3,c4,e4]@3 e4@3 c3@2 [g3,c4,e4]@4 [g3,c4,e4]@4, ~@3 [g3,c4]@5 [g4,c5]@8", // C C5
  U: "[c3,f3,c4]@2 [a3,c4,f4]@2 c3@4 [a3,c4,f4] [c4,f4] [a3,c4,f4]@2 ~@4", // F5 F F5 F
  V: "[d3,g3,d4]@2 [b3,d4,g4]@2 ~@4 [d3,g3,d4] [d3,d4] [d3,g3,d4]@2 ~@4", // G5 G G5 D G5
  W: "[g3,c4,e4]@3 e4@3 c3@2 [g4,c5]!2 [g4,c5]@2 ~@4, ~@3 [g3,c4]@5 [g3,c4,e4]@8", // C C5 C
  X: "[e4,g4,d5]@2 [e4,g4,c5]@2 [g3,c4,g4]@2 ~ g4, [g3,c4]@2 ~ [b3,d4]", // Em7 C C5 Bm
  Y: "[[a2,e3,a3,c4]@14 [a2,a3,c4]@2 d4@2 [d4,g4,e5] ~ [d4,g4,d5]@4 [d4,e5] ~ [d4,d5] ~ [d4,g4,d5] ~ [d4,g4,d5] ~, ~@7 e3@7 ~@2, ~@8 [g2,d3,g3]@2 ~@2 g4!2 ~@2]/4", // Am Em7 G5 Dsus2 D G5
  Z: "[c4@24 d4 e4 ~@2 [e3,a3]@4, a2, [e3,a3]@7 ~, ~@13 d4@3]/2", AA: "[[d3,g3,d4]@23 ~ [d3,g3,d4]@8]/2",
  AB: "g3@4 [g3,e4]@4 [g3,d4]@3 ~ [g3,d4]@4, c3", AC: "a3@4 [a3,d4]@3 ~ [a3,d4]@3 ~ [a3,d4]@4, c3",
  AD: "[c3,g3]@4 [c4,e4,g4]@2 g4@2 g4@2 ~ a4 c5@3 ~, ~@2 c5@2 ~ g4 ~@2, ~@6 [c4,e4]@4 [c4,e4]@5 ~", // C5 C
  AE: "c3@3 ~ [c3,d4]@4 [f3,a#3,d4,f4,c5]@3 ~ [c3,f3,c4,f4,c5]@4, g3 ~", AF: "~ g3@3 ~ g3@3, c3@15 ~, c4 ~ c4@2",
  AG: "d4@2 ~ d4@3 ~ [d4,g4,b4], d3@15 ~, g3@2 ~ g3, ~ g4@2 ~", // G
  AH: "[~@20 [e4,a4,e5]!2 ~@2 [e4,a4,d5]!2 ~@2 [e4,a4,c5]!2 ~@2 d4@4 [d4,g4,e5]@2 ~@2 [d4,g4,d5]@8 [d4,e5]@2 ~@2 [d4,d5]@2 ~@2 [d4,g4,d5]@2 ~@2 [d4,g4,d5]@2 ~@2, [a2,e3,a3,c4]@7 e3@7 ~@2, ~@7 [a2,a3,c4] [g2,d3,g3]@2 ~@2 g4!2 ~@2]/4", // A5 Dsus2 Am Em7 G5 Dsus2 D G5 …
  AI: "[~@20 [e4,a4,e5]!2 ~@2 [e4,a4,d5]!2 ~@2 [e4,a4,c5]!2 ~@2, a2, [e3,a3]@7 [e3,a3], c4@3 ~]/2", // A5 Dsus2 Am A5
  AJ: "~ [c#3,d3,g3] [b2,c3,f3,f#3] [a#2,d#3,e3] ~@12, [d#3,g#3,d#4,g#4,c5] ~@7", // G D# G#
  AK: "~ [f#3,a#3]@3 [f#2,c#3,f#3,a#3]@2 [f#2,c#3,g#3]@2, [f#2,c#3]@7 ~@9", // F# F#sus2 F#5
  AL: "[g#2,d#3,g#3,c4]@8 [g#2,d#3]@2 [g#3,c4,d#4]@3 ~@3", AM: "[c#3,g#3,c#4]@3 [c#3,g#3,c#4]@5",
  AN: "[c#3,g#3,c#4]@5 ~ [c#3,g#3]@6 [c#3,g#3]@4, ~@3 c#4@5", // C#5
})).s("gm_overdriven_guitar").gain(0.15).pan(0.2)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@12 A@12 B C B C D C E C ~ F G H@2 F G H@2 I@2 G@2 I@2 G@2 A@12 B C B C D C D C ~ F G H@2 F G H@2 I@2 G@2 I@2 G@2 A@8
  B C B C D C D C ~ J K L@2 J K L@2 J K L@2 J K L@2 J K L@2 J K L@2 J K L@2 J K L@2 ~
>`.pickRestart({
  A: "~@2 c3!2 ~@2 c3!2 ~@2 c3!2 ~@2 c3!2", B: "~@2 d3!2 ~@2 d3!2 ~@2 d3!2 ~@2 d3!2",
  C: "~@2 g3!2 ~@2 g3!2 ~@2 g3!2 ~@2 g3!2", D: "~@2 f3!2 ~@2 f3!2 ~@2 f3!2 ~@2 f3!2",
  E: "~@2 d3!2 ~@2 f3!2 ~@2 f3!2 ~@2 f3!2", F: "~@2 [f3,a3] f3 a3!2 [f3,a3] f3 ~@2 [f3,a3]!2 ~@2 [f3,a3]!2",
  G: "~@2 [d3,g3]!2 ~@2 [d3,g3]!2 ~@2 [d3,g3]!2 ~@2 [d3,g3]!2", // G5
  H: "~@2 [c3,g3]!2 ~@2 [c3,g3]!2 ~@2 [c3,g3]!2 ~@2 [c3,g3]!2", I: "~@2 a2!2 ~@2 b2!2 ~@2 c3!2 ~@2 e3!2",
  J: "~@2 [f#3,a#3] f#3 a#3!2 [f#3,a#3] f#3 ~@2 [f#3,a#3]!2 ~@2 [f#3,a#3]!2", // F#
  K: "~@2 [d#3,g#3]!2 ~@2 [d#3,g#3]!2 ~@2 [d#3,g#3]!2 ~@2 [d#3,g#3]!2", // G#5
  L: "~@2 [c#3,g#3]!2 ~@2 [c#3,g#3]!2 ~@2 [c#3,g#3]!2 ~@2 [c#3,g#3]!2", // C#5
})).s("gm_electric_guitar_muted").gain(0.17)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@12 A B ~ C ~@12 D E F G ~@4 H I J ~ K ~@3 L ~@3 M ~ B ~ N ~@12 D E F G ~@4 H I J ~ K ~@3 L ~@3 M ~ B ~ O ~ B ~@6 D E
  F G ~@4 P Q R ~ S Q R ~ P Q R ~ S Q R ~ P Q R ~ S Q R ~ P Q R ~ S ~
>`.pickRestart({
  A: "[c4,c5,c6]@3 ~@13", B: "~@5 [c4,c5,c6] ~ [c4,c5,c6]", C: "~@10 [c4,c5,c6] ~ [c4,c5] ~@3, ~@6 c6 ~",
  D: "[c4,c5]@7 ~", E: "[d4,d5]@7 ~", F: "[f4,f5]@7 ~", G: "g5 ~ [g4,g5] ~ [g4,g5] ~@3, g4 ~@15",
  H: "[d4,d5]@3 [e4,e5] ~@2 [e4,e5]@7 ~@3", I: "~@2 f4 e4", J: "d4@13 ~@3",
  K: "~@2 g4@2 [a3,a4]@2 [c4,c5] ~ [e4,e5]@3 [e4,e5] ~@4", // A C E
  L: "~ [g3,g4] [a3,a4] [c4,c5] [e4,e5] ~ [d4,d5] [e4,e5] [d4,d5] [c4,c5] [a3,a4] [g3,g4] [c4,c5] ~ [c4,c5] [a3,a4]", // G A C E D E D C …
  M: "~@2 a4@4 g4 ~ e4@2 g4 ~ d4@2 c4 ~", N: "~@8 [a#3,a#4,a#5]@2 b4 [a#4,b5] [a3,a4,a5,a#5] ~@3",
  O: "~@8 [a#4,d5,a#5]@2 b4 [a#4,b5] [a4,c#5,a5,a#5] ~@3", P: "[d#4,d#5]@3 [f4,f5] ~@4 c#5@5 ~@3, ~@6 [f4,f5]@7 ~@3",
  Q: "~@8 f#4@3 ~ f4@4", R: "d#4@13 ~@3",
  S: "~ [g#3,g#4] [a#3,a#4] [c#4,c#5] [f4,f5] ~ [d#4,d#5] [f4,f5] [d#4,d#5] [c#4,c#5] [a#3,a#4] [g#3,g#4] [c#4,c#5] ~ [c#4,c#5] [a#3,a#4]", // G# A# C# F D# F D# C# …
})).s("gm_brass_section").gain(0.56)

// other · brass section · "BRASS 1" · soft notes
const brass_section_soft = note(`<
  ~@12 A ~ B ~@25 C ~@10 B D ~@24 C ~@10 B E ~@2 B ~@13 F ~@7 F ~@7 F ~@7 F ~@5
>`.pickRestart({
  A: "~@2 [b4,b5] [a3,a#3,b3,a4,a#4,a5,a#5] [g#3,g#4,g#5] ~@11", // B G#
  B: "[b4,b5] [a3,a#3,b3,a4,a#4,a5,a#5] [g#3,g#4,g#5] ~@13", C: "~ g3 ~@6", D: "~@11 [a#3,b3] ~@4",
  E: "~@11 [d5,d#5] ~@4", F: "~@8 g#4@5 ~@3",
})).s("gm_brass_section").gain(0.24)

// chords · synth brass 2 · "+SYNBRAS 4"
const synth_brass_2 = note(`<
  ~@12 A B A B ~@6 C@2 D E D E D E F G ~ H I J@2 K I L@2 ~@8 A M A N ~@8 O P O P Q R S T ~ U I J@2 V I L@2 ~@8 A B A M A
  B A B O P O P Q R S T ~ W X Y@2 Z X AA@2 W X Y@2 Z X AA@2 W X Y@2 Z X AA@2 W X Y@2 Z X AA@2 ~
>`.pickRestart({
  A: "~@5 g4 c5 g4", B: "a4 f4 ~@2", C: "[~@12 e4@2 f4@17 ~]/2", D: "f4", E: "d4", F: "c4 d4 f4 a4", G: "g4",
  H: "[a3,c4,f4]@7 ~ [a3,c4,f4]@3 ~ [a3,c4,e4]@3 ~", I: "[g3,b3,d4]@15 ~", J: "[[g3,c4,e4]@31 ~]/2",
  K: "[a3,c4,f4]@8 [a3,c4,f4]@3 ~ [a3,c4,e4]@3 ~", L: "[[g3,c4,e4]@23 ~ [c4,e4,g4]@4 [b3,d4,g4]@4]/2",
  M: "a4@4 f4@5 ~@7", N: "a4 f4 [a#3,d4] [f3,c4]", O: "[a3,c4]", P: "[g3,d4]@15 ~", Q: "[a3,c4]@15 ~", R: "[g3,d4]",
  S: "[a3,c4] [d3,d4] [f3,f4] [a3,a4]", T: "[g3,g4]", U: "[a3,c4,f4]@7 ~ [a3,c4,f4]@3 ~ [g3,c4,e4]@3 ~",
  V: "[a3,c4,f4]@8 [a3,c4,f4]@3 ~ [g3,c4,e4]@3 ~", W: "[a#3,c#4,f#4]@7 ~ [a#3,c#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~",
  X: "[g#3,c4,d#4]@15 ~", Y: "[[g#3,c#4,f4]@31 ~]/2", Z: "[a#3,c#4,f#4]@8 [a#3,c#4,f#4]@3 ~ [g#3,c#4,f4]@3 ~",
  AA: "[g#3,c#4,f4]/2", // C#
})).s("gm_synth_brass_2").gain(0.25)

// other · alto sax
const alto_sax = note("<A B C ~@9 D E F G ~@33 D E H@2 ~@36 I J K L M ~@42>".pickRestart({
  A: "~@10 d#4 f4 ~@2 f4 ~", B: "[f4,f#4] ~@2 f4@2 g4 ~@10", C: "~@4 d#5 ~ f5 ~ f5@4 ~@4", D: "~@10 g4@2 c5 ~ g4@2",
  E: "a4 f4 ~@2", F: "a4@3 ~ g4@4 ~@2 g4@2 c5@2 g4@2", G: "a4@3 ~ f4@4 ~@8",
  H: "[a4@3 ~ g4@4 ~@4 c5 d5 ~ d5@5 ~ c5 a4@2 ~@8]/2", I: "~@12 d5@2 ~ c5", J: "~ e5@5 d5 c5 a4@4 ~ d#5 d5 ~",
  K: "d5@2 c5 ~", L: "~ g4 a4 c5 d5 e5 g5 a5, ~@14 g#5 ~", M: "b5 c6@15",
})).s("gm_alto_sax").gain(0.48)

// other · alto sax · soft notes
const alto_sax_soft = note("<[~@13 d#4 ~@2] ~ [~@3 c5 ~@3 d#5 ~@8] ~@48 [~@10 g4 a#4 ~@4] [~@4 d5 ~@11] ~@83>")
  .s("gm_alto_sax").gain(0.24)

// other · pad poly · "POLYSYNTH"
const pad_poly = note("<A@5 B@7 ~@124>".pickRestart({
  A: "[~ [c2,c3]@54 ~ [a#1,a#2]@24]/5", B: "[~@3 c2@27 [c2,c3]@82, ~@2 c3@27 ~@83]/7",
})).s("gm_pad_poly").gain(0.48)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<A@5 B@7 ~@124>".pickRestart({
  A: "[~ [g3,g4]@27 [f3,f4]@27 [g#3,d#4]@25, ~ c4@79]/5", // G F G#5
  B: "[~@43 g4@14 [a3,f4]@27 ~@14 g#4@13 ~, ~@2 g4@41 ~@69, ~@2 g3@27 g3@27 ~@28 [g#3,d#4]@27 ~, ~@11 c4@44 ~]/7", // Dm G#5
})).s("gm_synth_strings_2").gain(0.13)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A@5 B@7 ~@124>".pickRestart({
  A: "[~ c6@27 f5@28 d#5@24]/5", B: "[~@3 c6@27 g5@27 f5@27 d#5@14 g#5@14]/7",
})).s("gm_string_ensemble_2").gain(0.14)

// other · pad bowed · "#WARM BELL"
const pad_bowed = note("<~@2 A@2 ~@5 B ~@126>".pickRestart({
  A: "[~@13 g4 ~@3 c5 g4@2 ~@12, ~@15 f4@2 ~@15, ~@8 a#4 ~@7]/2", B: "~@13 c5 ~ c4",
})).s("gm_pad_bowed").gain(0.05).pan(0.9)

// other · pad bowed · "#WARM BELL" · soft notes
const pad_bowed_soft = note("<~@9 [~@2 c5 ~ g4 ~@6 g4 d#4 ~@3] ~@126>").s("gm_pad_bowed").gain(0.03).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~@12 [x!4]!123 ~>").gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~@12 A@3 B A@3 B A@3 B A@7 C D A@3 B A@3 B A@7 E A@3 B A@3 B A@3 F A@7 C D A@3 B A@3 G A@7 H A@3 B A@3 B A@7 C D A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x ~ x!2", C: "~@4 x ~@7 x!4", D: "x ~@9 x ~ x ~ x!2", E: "~@4 x ~@6 x!5",
  F: "~@4 x ~@5 x!2 ~@2 x!2", G: "~@4 x ~@7 x ~ x!2", H: "~@4 x ~@3 x!8",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B C@8 A B A B A B A B A B A B A B A B A B A B ~ A B A B A
  B A B C@8 A B A B A B A B A B A B A B A B ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!4",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A B@8 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A
  ~ A B@8 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x", B: "~ x ~ x ~ x ~ x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 A@4 B@16 ~ A@8 C@8 A@4 B@16 ~ A@8 C@8 A@8 B@8 ~ A@32 ~>".pickRestart({
  A: "x!16", B: "x!4", C: "~ x ~ x ~ x ~ x",
})).gain(0.32)
// … 11 more lines

More by Rene Froger