Strudelify

Luna

Berte

KeyA majorTempo97 bpm
0:00/0:00
// Luna — Berte
// 97 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 28.
setcpm(97/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
const bass = note(`<
  ~ A B C D E@2 C D F C D G H D I J K L G M@2 N D O@2 N D O@2 D I P Q D G R S T U V W T X Y Z AA AB AC AD AE AF AG AH AI
  AJ AK AL AM AN AK AO AP AK AL P AQ AK AO R S T U V W T X Y AR AA AB AC AD AS AT AU AV AS AW AX AY AZ BA BB BC AZ BA
  BD@2 ~
>`.pickRestart({
  A: "e1@2 ~@8 e2 b1 d2@4", B: "e1@2 ~@4 a1 ~ d2@4 a1@4", C: "e2", D: "d2", E: "[a1@7 b1]/2", F: "a1@3 b1", G: "a1",
  H: "~@2 e2 ~ a2@12", I: "a1@15 ~", J: "e2@2 ~ d2@2 ~ e2@9 ~", K: "e1", L: "d2@7 a1", M: "[g1@9 d2 g2 g2@2 a1 b1@2]/2",
  N: "e1@3 d2", O: "[a1@26 e1 a1 b1@4]/2", P: "e1@2 ~ d1@2 ~ e1@9 ~", Q: "e1@11 ~ a1 b1 d2 e2",
  R: "g1@6 g1@4 b1 d2 a2@4", S: "g2@10 d2 ~ g2@4", T: "b1@3 b1!2 ~ b1@9 ~", U: "f#1@2 ~ f#1!2 ~ f#1@7 ~ g#1 b1",
  V: "c#2@3 b1 ~@2 c#2@7 ~ g#1 b1", W: "c#2@3 b1 ~@2 c#2@9 ~", X: "f#1@2 ~ f#1!2 ~ f#1@7 ~ a1 e2",
  Y: "e1@3 e1@3 e1@7 ~ a1 e2", Z: "e1@3 e1 ~@2 e1@6 f#1@4", AA: "g#1@3 g#1!2 ~ g#1@8 g#1 g1",
  AB: "d#1@2 ~ d#1!2 ~ d#1@7 ~ f1 g#1", AC: "a#1@3 g#1 ~@2 a#1@4 a#1@2 c#2@2 f1 g#1",
  AD: "a#1@3 g#1 ~@2 a#1@4 a#1 c#2 d#2@4", AE: "g#1@3 g#1!2 ~ g#1@8 a#1@2", AF: "d#1@2 ~ d#1!2 ~ d#1@4 a#1@2 d#2@4",
  AG: "c#2@3 c#2 ~@2 c#2@7 ~ g#1@2", AH: "c#2@3 c#2 ~@2 c#2@2 c#1@8", AI: "c#2@15 ~", AJ: "e1@10 e1 ~ b1@4",
  AK: "d2@6 d2@9 ~", AL: "a1@6 a1@9 ~", AM: "a1@4 ~@2 a1@4 e1 a1 b1@4", AN: "e1@3 e2@5", AO: "a1@5 ~ a1@9 ~",
  AP: "a1@5 ~ a1@4 e1 a1 b1@4", AQ: "e1@5 ~ e1@5 ~ a1 b1 d2 e2", AR: "e1@3 e1 ~@2 e1@5 e1 f#1!4",
  AS: "f1@3 f1!2 ~ f1@9 ~", AT: "c2@2 ~ c2!2 ~ c2@7 ~ d1 f1", AU: "g1@3 f1 ~@2 g1@7 ~ d1 f1", AV: "g1@3 f1 ~@2 g1@9 ~",
  AW: "c2@2 ~ c2!2 ~ c2@7 ~ d#1 a#1", AX: "a#1@3 a#1@3 a#1@7 ~ d#2 a#2", AY: "a#1@3 a#1 ~@2 a#1@5 a#1 c2!4",
  AZ: "d2@3 d2!2 ~ d2@8 d2 c#2", BA: "a1@2 ~ a1!2 ~ a1@7 ~ b1 d2", BB: "e2@3 d2 ~@2 e2@4 e2@2 g2@2 b1 d2",
  BC: "e2@3 d2 ~@2 e2@4 e2 g2 a2@4", BD: "g1/2",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · rock organ
const rock_organ = note(`<
  ~@22 A@4 B C D@2 C D@2 ~@5 E@4 F@2 G@2 H@2 I@2 H@2 J@2 ~@9 K@2 L@2 K@2 L@2 E@4 F@2 G@2 H@2 I@2 M@4 N@2 O@2 P@2 Q@2 P@2
  R@2 ~
>`.pickRestart({
  A: "[~@8 e6 ~@7, ~ [a5,a6]@31]/4", B: "[e6,g6]", C: "[d6,f#6]", D: "[c#6,e6]/2",
  E: "[[d#5,b5] a#5 [e5,g#5]@2, f#5 ~, ~ c#5@3]/4", F: "[[d#5,b5] [c#5,a#5], f#5]/2", G: "[~ e6, [e5,g#5,b5]]/2",
  H: "[[g#5,c6] [g5,a#5], d#5]/2", I: "[f5,a#5,c#6]/2", J: "[f5,g#5,c#6]/2", K: "[[d5,f#5] [c#5,e5], a5]/2",
  L: "[e5,g5,b5]/2", M: "[[a5,f6] e6 [a#5,d6]@2, c6 ~, ~ g5@3]/4", N: "[[a5,f6] [g5,e6], c6]/2",
  O: "[~ a#6, [a#5,d6,f6]]/2", P: "[[d6,f#6] [c#6,e6], a5]/2", Q: "[b5,e6,g6]/2", R: "[g5,d6,g6]/2",
})).s("gm_rock_organ").gain(0.22).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@22 A B C D A B E F G D A H G D I J K L M@2 K L N@2 O P Q@2 O P R@3 ~ S C T U V W X G Y A Z G Y I AA K L M@2 K L N@2
  O P Q@2 AB AC AD@2 AB AE AF@2 AG AH AI@2 AG AH AJ@2 ~
>`.pickRestart({
  A: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  B: "d3 ~ [d3,a3] ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", // D5
  C: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // A5
  D: "a2 ~ [a2,e3] ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", // A5
  E: "[a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~ [a2,d3] ~", // D5
  F: "a2 ~ [a2,d3] ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", // D5
  G: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  H: "e3 ~ [e3,b3] ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", // E5
  I: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
  J: "g2 ~ [g2,d3] ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ [g2,d3]@2", K: "[b2,f#3,b3]", L: "[f#2,c#3,f#3]",
  M: "[[c#3,g#3,c#4]@28 [f#3,g#3] [c#3,d#3] [g#2,a#2] f#2]/2", N: "[[e2,b2,e3]@7 [f#2,c#3,f#3]]/2", O: "[g#2,d#3,g#3]",
  P: "[d#2,a#2,d#3]", Q: "[[a#2,f3,a#3]@28 [d#3,f3] [a#2,c3] [f2,g2] d#2]/2",
  R: "[[c#2,g#2,c#3]@36 [b3,c4,d4,e4,f4] [f3,g3,a3] [c3,d3,e3] [f2,g2,a2,b2] [a1,b1,c2,d2,e2] [e1,f1,g1] ~@6]/3", // C#5 Bdim F C G7 Am Em
  S: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ d3 ~ d3 ~ [d3,a3] ~ d3 ~ d3 ~", // D5
  T: "[a2,e3] ~ [a2,e3] ~ [f#3,a3,d4]@2 ~@2 [f#3,d4]@2 [e3,c#4]@5 ~, ~@8 a3@7 ~", // A5 D C#m
  U: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3]@6", // E5
  V: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ d3 ~ d3 ~ [d3,a3] ~ [d3,a3]@2 [d3,a3]@2", // D5
  W: "[e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4]@2 [e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4]@2 [e3,a3,e4] ~ [e3,a3,e4] ~", // A5
  X: "[e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4]@2 a3 ~ a3 ~ [e3,a3,e4]@2 [e3,a3,e4]@2 [e3,a3,e4]@2", // A5
  Y: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ a2 ~ a2 ~ [a2,e3] ~ a2 ~ a2 ~", // A5
  Z: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ e3 ~ e3 ~ [e3,b3] ~ e3 ~ e3 ~", // E5
  AA: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [d4,e4,f4,g4,a4] [a3,b3,c4] [e3,f3,g3] [b2,c3,d3] [f2,g2,a2] [b1,c2,d2,e2] [f1,g1,a1] [a#0,c1,d1,d#1]", // G5 Dm Am Em Bm F Cmaj7 F …
  AB: "[f2,c3,f3]", AC: "[c3,g3,c4]", AD: "[[g2,d3,g3]@28 [c3,d3] [g2,a2] [d2,e2] c2]/2", AE: "[c2,g2,c3]",
  AF: "[[a#2,f3,a#3]@7 [c2,g2,c3]]/2", AG: "[d2,a2,d3]", AH: "[a2,e3,a3]",
  AI: "[[e2,b2,e3]@28 [a2,b2] [e2,f#2] [b1,c#2] a1]/2", AJ: "[d2,g2,d3]/2",
})).s("gm_distortion_guitar").gain(0.21).pan(0.3)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@23 A ~ B ~ A ~ C ~ B ~ D ~ B ~ E ~@18 F ~@3 G ~ H ~ I ~ J ~ I ~@31
>`.pickRestart({
  A: "a3 ~@3 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~", B: "e3 ~@3 e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  C: "d3 ~@3 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", D: "b3 ~@3 b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~",
  E: "d3 ~@3 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~@3", F: "~@6 a3 ~ a3 ~@3 a3 ~ a3 ~", G: "~@6 a3 ~ a3 ~@7",
  H: "~@6 [e3,e4] ~ [e3,e4] ~@7", I: "~@6 e3 ~ e3 ~@3 e3 ~ e3 ~", J: "~@6 b3 ~ b3 ~@3 b3 ~ b3 ~",
})).s("gm_distortion_guitar").gain(0.15).pan(0.3)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  A B C@2 ~@2 D@2 ~@5 E F ~@6 G@2 ~@6 H@2 ~@5 I@2 J K L@2 J K M@2 N O P@2 N O Q@3 R ~@2 S T ~@2 E F ~@6 U J K L@2 J K
  M@2 N O P@2 V W X@2 V Y Z@2 AA AB AC@2 AA AB AD@2 ~
>`.pickRestart({
  A: "~@4 b2 d3 g3!2 d3@2 f3@2 a3 g3 e3@2", B: "[b2,e3]!2 ~@2 [b2,e3] ~ [b2,e3] ~@3 a3 ~@2 g3 e3@2, ~@6 a3 ~",
  C: "[[b2,e3] ~ [b2,e3]!4 [a3,d4]@25 ~]/2", D: "[~@10 a3 ~ a3 g3 e3@17 ~]/2", E: "~@4 c#3 [e3,a3] [f#3,a3] [e3,a3]",
  F: "[d3,a3]", G: "[~@2 a3@2 c4@2 g4@2 a4@2 g3@2 f3@2 d4@9 ~@9]/2", H: "[~ [e4,g4]@5 e4 e4@9]/2",
  I: "[[g3,d4,g4]@10 ~@4 g3@14 [f3,g3] [b2,c3,d3,e3] [g2,a2] [e2,f2], ~@5 d3@9 ~@2, ~@3 d4@4 ~]/2", J: "[b2,f#3,b3]",
  K: "[f#2,c#3,f#3]", L: "[[c#3,g#3,c#4]@28 [f3,g3] [c3,d3,e3] [g2,a2,b2] [e2,f2]]/2",
  M: "[[e2,b2,e3]@7 [f#2,c#3,f#3]]/2", N: "[g#2,d#3,g#3]", O: "[d#2,a#2,d#3]",
  P: "[[a#2,f3,a#3]@28 [d3,e3] [a2,b2,c#3] [e2,f#2,g#2] [c#2,d2]]/2", Q: "[[c#2,g#2,c#3]@41 a4@2 [d4,g#4]@4 ~]/3",
  R: "~@2 [d4,e4,f4,g4] [a3,b3,c4] [d3,e3,f3,g3] [b2,c3] [e2,f2,g2,a2] d2 ~@8", S: "~@10 a3 ~ a3 g3 e3 d3",
  T: "e3@15 ~",
  U: "~@4 [f4,g4] [c4,d4,e4] [a3,b3] [f3,g3] [c3,d3,e3] [a2,b2] [f2,g2] [c2,d2,e2] [b1,f3,g3] [b2,c3,d3,e3] [g2,a2] [e2,f2]", // Fsus2 C Asus2 Fsus2 C Asus2 Fsus2 C …
  V: "[f2,c3,f3]", W: "[c2,g2,c3]", X: "[[g2,d3,g3]@28 [b2,c#3] [f#2,g#2,a#2] [c#2,d#2,f2] [a#1,b1]]/2",
  Y: "[c3,g3,c4]", Z: "[[a#2,f3,a#3]@7 [c3,g3,c4]]/2", AA: "[d3,a3,d4]", AB: "[a2,e3,a3]",
  AC: "[[e2,b2,e3]@28 [g#2,a#2] [d#2,f2,g2] [a#1,c2,d2] [g1,g#1]]/2", AD: "[g2,d3,g3]/2",
})).s("gm_distortion_guitar").gain(0.48).pan(0.7)

// other · piano
const piano = note("<~@16 A B C ~@13 D E C ~@65>".pickRestart({
  A: "~@6 b5 c#6 d6 ~ b5 c#6 d6 ~ b5 ~", B: "d6 ~ b5 ~ d6 ~ b5 c#6 d6 ~ b5 ~ d6 ~@3", C: "d6 ~@3",
  D: "~@6 b5 c#6 d6 ~ b5 c#6 d6 ~ b5 c#6", E: "d6 ~ b5 c#6 d6 ~ b5 c#6 d6 ~ b5 c#6 d6 ~ b5 ~",
})).s("gm_piano").gain(0.17)

// other · piano · soft notes
const piano_soft = note("<~@16 [~@15 c#6] [~@3 c#6 ~@7 c#6 ~@2 b5 c#6] ~@15 [~@15 c#6] ~@66>").s("gm_piano").gain(0.08)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@37 A ~@2 B C ~@2 D@2 E ~ F@2 ~@2 G@2 H ~@15 A ~@2 I J K ~ L M N O P Q@2 R S T U ~ V@2 ~@2 W X Y ~@4
>`.pickRestart({
  A: "~@2 d5@2 ~@2 g5@9 ~, ~@4 b5@11 ~", B: "~@13 b4@2 g#4", C: "c#5@3 ~ d5 ~ c#5@8 ~@2", D: "[~@6 e2!2 e3@20 f#3@4]/2",
  E: "c4", F: "[~@5 f4@2 g#4@2 f4@3 d#4@4]/2", G: "[~@3 c#4@13]/2", H: "g#5@4 c#3@11 ~",
  I: "~@6 b4@3 ~ c#5@2 g#4@2 b4@2", J: "~@3 g#4 c#5@2 f#4 d#4 f#4 d#4 f#4@6, ~ b4 ~@6", K: "f#4@7 ~",
  L: "~@6 e2!2 e3@8", M: "g#3 b3 c#4 b3 [b3,e4]@2 [b3,e4]@2 g#3 b3 c#4 e4 f#4@2 a4@2",
  N: "[c5,d#5]@2 ~ d#4 c5@2 d#5@2 f#4@2 g#4@6, ~ f#4 ~@6", O: "~@2 c#5@4 b4@2 c#5 c5 d#5@3 g4 g#4 ~",
  P: "g#4@4 ~@2 f5@4 d#5@4 g#4 b4, ~@2 [f3,g#3]@3 ~@3", // Fm
  Q: "[c#5 b4 [c#4,c#5]@2 b4@2 g#4@6 ~ c4 d#4 g#4 f4@12 [e4,f4] [b3,c4,d4] [f3,g3,a3] e3, ~@6 [a#3,d#4] c4@7 ~@2]/2", // C# Fmaj7 Bm F D#5
  R: "c4@15 ~", S: "~@13 c4@2 a3", T: "d4 c4@2 a3 d4 c4@2 a3 d4 c4@2 a3 d4@4", U: "c4@7 ~",
  V: "[~@6 a#2!2 a#3@20 c4@3 ~]/2", W: "~@6 d5@3 ~ e5@2 b4@2 d5@2", X: "~@3 b4 e5@2 a4 f#4 a4 f#4 a4@6, ~ d5 ~@6",
  Y: "a4@7 ~",
})).s("gm_overdriven_guitar").gain(0.4)

// chords · electric guitar muted · A5 E5
const electric_guitar_muted = note(`<
  ~@28
  [e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~]!2
  ~@28
  [~@4 e3 ~ [a2,e3] ~ e3 ~ a2 ~ [a2,e3] ~ [a2,e3] ~]
  [~@12 [e3,b3] ~ [e3,b3] ~]
  ~@10
  [~@10 d3 ~ d3 ~ d3 ~]
  ~@29
>`).s("gm_electric_guitar_muted").gain(0.18)

// other · synth drum
const synth_drum = note("<~ A B A B A B A B A B C B C B A B A@2 B A B ~ D ~ D ~ D ~ D ~ D ~ D@2 ~ D ~@63>".pickRestart({
  A: "d2 ~@9 b3 ~ e4 ~ f3 ~", B: "d2 ~@5 f2 ~@9", C: "d2 ~@5 f2 ~@3 b3 ~ e4 ~ f3 ~", D: "~@10 b3 ~ e4 ~ f3 ~",
})).s("gm_synth_drum").gain(0.29)

// other · synth drum · soft notes
const synth_drum_soft = note("<~@3 A ~@3 A ~@7 A ~@15 A ~@68>".pickRestart({
  A: "~@6 b4 ~ e4 ~@7",
})).s("gm_synth_drum").gain(0.16)

// chords · pad warm
const pad_warm = note("<~@2 A@8 B@7 C@4 D@5 E@3 F@8 ~@17 D@5 E@3 F@8 ~@30>".pickRestart({
  A: "[~@15 [e3,g3,b3]@16 [d3,f#3]@16 c#3@32 [g3,b3]@16 [d3,f#3]@16 [c#3,e3]@16 [g3,b3], ~@31 a3@48 ~@16 a3@32 ~, ~@47 e3@48 ~@33]/8", // Em D G D C#m G
  B: "[~@15 [d3,f#3]@16 [c#3,e3]@32 [f#3,d4]@16 c#4@16 [g3,b3]@17, ~@15 a3@48 a3@32 ~@17, ~@79 e3@33]/7", // D C#m D G
  C: "[~@15 [f#3,d4]@16 [e3,c#4]@16 [g3,b3,d4]@17, ~@15 a3@32 ~@17]/4", // D C#m G
  D: "[~@15 [e3,g3,b3]@16 [d3,f#3]@16 [c#3,e3]@32 [e3,g3,b3], ~@31 a3@48 ~]/5", // Em D C#m Em
  E: "[~@15 [d3,f#3]@16 [c#3,e3]@17, ~@5 a3@11]/3", // D C#m
  F: "[~@15 [f#3,d4]@16 c#4@16 [g3,b3,g4]@32 [f#3,d4]@16 [e3,c#4]@16 [g3,b3,d4,g4]@17, ~@15 a3@32 ~@32 [a3,f#4]@32 ~@17, ~@31 e3@48 ~@49]/8", // D G D C#m G D
})).s("gm_pad_warm").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@21 B@15 C D E D F D E D A E@3 F E@3 D A G B@6 H B@3 I B@3 C D E D F D E D A E@3 J E@3 K D E D A E@3 J E L A ~@2
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~@6 x ~@8", D: "x ~@2 x ~@2 x ~@9", E: "x ~@2 x ~@2 x ~@3 x ~@5",
  F: "x ~@2 x ~@2 x ~@2 x!2 ~@5", G: "x ~@4 x ~@2", H: "x ~@2 x ~ x ~@2", I: "x ~ x!2 ~@2 x ~@9",
  J: "x ~@2 x ~ x!2 ~@3 x!2 ~@4", K: "x ~@2 x ~@2 x ~@4 x ~@4", L: "x ~ x!2 ~@2 x!2 ~@3 x ~@4",
})).gain(0.47)

// drums · rim
const rim = s("rim").struct("<~@23 A ~ A ~ A ~@3 A ~ A ~ A ~@64>".pickRestart({
  A: "~@3 x",
})).gain(0.53)

// drums · snare
const snare = s("sd").struct("<~@37 A B@7 C B@7 D ~ E B@14 A B@7 C B@3 F B@3 G B@3 C B@3 F B D ~@3>".pickRestart({
  A: "~@8 x ~@3 x!2 ~@2", B: "~ x ~ x", C: "~ x!2 ~", D: "~ x ~@2", E: "~@3 x", F: "~@4 x ~@4 x ~@2 x ~@2 x",
  G: "~@4 x ~@7 x ~@2 x",
})).gain(0.6)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~ B ~ A ~@2 A ~ A B ~@4 B ~ C ~@7 D ~@7 E ~@7 F ~@7 G ~@8 H ~@7 E ~@7 F ~@7 G ~@3 F ~@5 F ~@3
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@3 x", C: "~@5 x ~@2", D: "~@7 x", E: "~@10 x ~@3 x!2", F: "~@14 x!2", G: "~@13 x ~@2",
  H: "~@11 x ~@4",
})).gain(0.47)

// drums · hihat
const hihat = s("hh").struct("<~ A@36 B ~@18 C A D C A@2 D C A@2 D C A D B ~@29>".pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x!7 ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@7 B ~@7 C ~@7 D ~@7 E ~@16 C ~@7 D ~@7 E ~@3 D ~@5 F ~@3>".pickRestart({
// … 34 more lines

More by Berte