Strudelify

Dodo Lurker

Genesis

KeyC minorTempo90 bpm
0:00/0:00
// Dodo   Lurker — Genesis
// 90 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 4/8 at bar 36, 4/4 at bar 37, 4/8 at bar 89, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 177 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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.

// chords · synth brass 1 · "SynthBras"
const synth_brass_1 = note(`<
  A@2 B@2 A@2 B@2 ~@54 C D E D F ~@34 G H G H G H G H A@2 B@2 A@2 B@2 ~@15 I J K J K L M J N ~@7 I J K J K L O J P Q P Q
  P L R Q S ~@12
>`.pickRestart({
  A: "~@2 [c5,ab5,c6] [c5,gb5,bb5]@4 ~", B: "~@2 [bb4,gb5,bb5] [bb4,e5,ab5]@4 ~", C: "~@4 [g4,a4,c5,e5]@3 [e4,g4,b4]",
  D: "[f4,a4,c5]@5 [e4,g4,b4]@3 [d4,f4,a4]@5 [e4,g4,b4]@3", E: "[f4,a4,c5]@2 [g4,b4,d5]@2 [g4,a4,c5,e5]@3 [e4,g4,b4]",
  F: "[f4,a4,c5] [g4,b4,d5] ~@2", G: "[g4,a4,c5,e5]@6 [e4,g4,b4]@2 [f4,a4,c5]@5 [e4,g4,b4]@3",
  H: "[d4,f4,a4]@5 [e4,g4,b4]@3 [f4,a4,c5]@4 [g4,b4,d5]@4", I: "~@6 [g4,c5,e5] [g4,c5,d5]",
  J: "[bb4,d5,f5]@11 ~ [c5,f5,a5]@2 [c5,f5,g5]@2", K: "[c5,e5,g5,c6]@11 ~ [g4,c5,e5]@2 [g4,c5,d5]@2",
  L: "[a4,d5,f5]@3 [b4,e5,g5]", M: "[a4,c5,e5,a5]@11 ~ [g4,c5,e5,g5]@2 [g4,c5,d5]@2", N: "[c5,e5,g5,c6]@7 ~",
  O: "[a4,c5,e5,a5]@11 ~ [g4,c5,e5,g5] ~ [g4,c5,d5]@2", P: "[c5,e5,g5,c6]@6 [g4,c5,e5] [g4,c5,d5]",
  Q: "[bb4,d5,f5]@6 [c5,f5,a5] [c5,f5,g5]", R: "[a4,c5,e5,a5]@6 [g4,c5,e5,g5] [g4,c5,d5]", S: "[c5,e5,g5,c6]",
})).s("gm_synth_brass_1").gain(0.46)

// chords · pad warm · "SynthDela" · A F Gb Ab
const pad_warm = note(`<
  ~@66
  [~@10 eb4 [e3,a3,db4]@2 eb4 [e3,a3,db4]@2]
  [~@2 eb4 [e3,a3,db4]@2 eb4 [e3,a3,db4]@2 ~@2 eb4 [e3,a3,db4]@2 eb4 [e3,a3,db4]@2]
  [~@2 eb4 [e3,a3,db4]@2 eb4 [e3,a3,db4]@2 ~@2 eb4 [a3,c4,f4]@2 eb4 [a3,c4,f4]@2]
  [~@2 eb4 [a3,c4,f4]@2 eb4 [a3,c4,f4]@2 ~@2 eb4 [bb3,db4,gb4]@2 eb4 [bb3,db4,gb4]@2]
  [~@2 eb4 [bb3,db4,gb4]@2 eb4 [c4,eb4,ab4]@2 ~@8]
  ~@106
>`).s("gm_pad_warm").gain(0.46)

// chords · pad poly · "SynthFx"
const pad_poly = note("<~@38 A@3 ~@21 B@5 ~@34 C@8 ~@68>".pickRestart({
  A: "[~ c4@2 c5@2 ~, ~ [eb4,f4,ab4]@4 ~]/3", B: "[~ [c4,e4,a4]@4 [c4,e4,a4]@4 ~]/5", C: "[c4,e4,a4]/2",
})).s("gm_pad_poly").gain(0.46)

// other · lead 1 square · "SynthCS80"
const lead_1_square = note(`<
  ~@14 A@4 ~@4 A@4 ~@4 A@4 ~@18 B C D@2 ~@18 E A@3 F ~@3 E A@3 F ~@4 G H I ~@26 J K L M N K L M N K L M O ~@7 J K L M N
  K L M O ~@28
>`.pickRestart({
  A: "~@2 db5 ~@3 db5 ~@3 db5 ~@3 db5 ~", B: "~ f4", C: "eb4 c4", D: "[bb3 c4@2 ~]/2", E: "~@10 db5 ~@3 db5 ~",
  F: "~@2 db5 ~@3 db5 ~@9", G: "f4 eb4", H: "c4 bb3", I: "c4", J: "~@10 g5@2 d5@2 e5 c5",
  K: "~@4 c5 ~@5 b4 c5 d5@2 b4 g4", L: "~@4 g4 ~@5 g4@2 a4@2 c5@2", M: "b4@2 g4 e4 ~@4 e4 ~@5 f4 g4",
  N: "ab4@2 g4@2 f4@2 d4@2 ~@2 g5@2 d5@2 e5 c5", O: "ab4 g4 f4 d4 ~@4",
})).s("gm_lead_1_square").gain(0.41)

// other · lead 1 square · "SynthCS80" · soft notes
const lead_1_square_soft = note("<~@14 A@4 ~@4 A@4 ~@4 A@4 ~@40 B A@3 C ~@3 B A@3 C ~@90>".pickRestart({
  A: "db4 ~@3 db4 ~@3 db4 ~@3 db4 ~@3", B: "~@8 db4 ~@3 db4 ~@3", C: "db4 ~@3 db4 ~@11",
})).s("gm_lead_1_square").gain(0.26)

// chords · synth strings 2 · "Strings"
const synth_strings_2 = note(`<
  ~@34 A@3 B C B C B C B C B C B D E F E G B C B C B D E F E H ~@24 I@2 B J B J B J B J E K E K ~@55 L M N M N O P Q R
  ~@12
>`.pickRestart({
  A: "[~@12 [ab3,c4,f4]@24 ~@6 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~]/3", // Fm
  B: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~", // Fm
  C: "~@2 [f4,ab4,c5] ~ [f4,bb4,d5]@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~", // Fm Bb Fm
  D: "~@2 [f4,ab4,c5] ~ [f4,bb4,d5]@2 [f4,ab4,c5] ~@3 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~", // Fm Bb Fm Cm
  E: "~@2 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~", // Cm
  F: "~@2 [g4,c5,eb5] ~ [a4,c5,f5]@2 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~", // Cm F Cm
  G: "~@2 [g4,c5,eb5] ~ [a4,c5,f5]@2 [g4,c5,eb5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~", // Cm F Cm Fm
  H: "~@2 [g4,c5,eb5] ~ [a4,c5,f5]@2 [g4,c5,eb5] ~@9", I: "[~ [ab3,c4,f4]@6 ~]/2",
  J: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~ [f4,bb4,d5]@2 [f4,ab4,c5] ~", // Fm Bb Fm
  K: "~@2 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~@3 [g4,c5,eb5] ~ [a4,c5,f5]@2 [g4,c5,eb5] ~", L: "~@6 e5 d5", M: "f5@6 a5 g5",
  N: "c6@6 e5 d5", O: "f5@3 g5", P: "a4@6 e5 d5", Q: "f5@11 ~ a5@2 g5@2", R: "c6@3 ~",
})).s("gm_synth_strings_2").gain(0.46)

// chords · synth strings 2 · "Strings" · soft notes
const synth_strings_2_soft = note(`<
  ~@36 A B C B C B C B C B C B D E F E G B C B C B D E F E H ~@26 B I B I B I B I E J E J ~@76
>`.pickRestart({
  A: "~@10 eb4 ~@3 eb4 ~", B: "~@2 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~", C: "~@2 eb4 ~ eb4@2 eb4 ~@3 eb4 ~@3 eb4 ~",
  D: "~@2 eb4 ~ eb4@2 eb4 ~@3 bb4 ~@3 bb4 ~", E: "~@2 bb4 ~@3 bb4 ~@3 bb4 ~@3 bb4 ~",
  F: "~@2 bb4 ~ bb4@2 bb4 ~@3 bb4 ~@3 bb4 ~", G: "~@2 bb4 ~ bb4@2 bb4 ~@3 eb4 ~@3 eb4 ~", H: "~@2 bb4 ~ bb4@2 bb4 ~@9",
  I: "~@2 eb4 ~@3 eb4 ~@3 eb4 ~ eb4@2 eb4 ~", J: "~@2 bb4 ~@3 bb4 ~@3 bb4 ~ bb4@2 bb4 ~",
})).s("gm_synth_strings_2").gain(0.2)

// chords · lead 2 sawtooth · "SynthLead"
const lead_2_sawtooth = note(`<
  ~@10 A@4 B C D E A@4 F G B H A@4 I J K L M@3 ~@33 N O@3 P@5 O@3 Q@5 R S ~@32 T@12 ~@8 T@8 ~@28
>`.pickRestart({
  A: "~@2 eb4 [gb4,bb4]@2 eb4 [ab4,db5]@2 ~@2 ab4 ~ [db5,gb5] ~ [bb4,eb5]@2", // Gb Db5 Gb5 Eb5
  B: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4@2, ~@6 db4@3 ~@3 db4@4", // Db7 Gb Db5
  C: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3@2, ~@6 db4@3 ~@3 db4@4", // Db7 Gb Db5
  D: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4 ~, ~@3 db4 ~@2 db4@2", // Db7 Gb Db5
  E: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3 ~, ~@6 db4@3 ~@3 db4@4", // Db7 Gb Db5
  F: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4@2, ~@3 db4 ~@2 db4@2", // Db7 Gb Db5
  G: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3@2, ~@3 db4 ~@2 db4@2", // Db7 Gb Db5
  H: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3 ~, ~@3 db4 ~@2 db4@2", // Db7 Gb Db5
  I: "[db4,b4]@2 [db4,bb4]@2 [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4 ~, ~@3 db4 ~@2 db4@2", // Db7 Gb Db5
  J: "[db4,b4]@2 [db4,bb4]@2 [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3 ~, ~@3 db4 ~@2 db4@2", // Db7 Gb Db5
  K: "[db4,b4]@2 [db4,bb4]@2 [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4@2, ~@6 db4@3 ~@3 db4@4", // Db7 Gb Db5
  L: "[db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ [db4,gb4]@2 db4 ~, ~@3 db4 ~@4", // Db7 Gb Db5 Gb5
  M: "[[db4,gb4]@2 eb4@2 ~@2 db4@2 ab4@2 f4@10 ~@2 eb4@2 [ab3,c4,ab4]@2 ~ [ab3,c4,f4]@13 ~@8]/3", // Gb5 Ab Fm
  N: "~@10 eb4 [gb4,bb4]@2 eb4 [ab4,db5]@2", O: "~@2 ab4 ~ [db5,gb5] ~ [bb4,eb5]@2 ~@2 eb4 [gb4,bb4]@2 eb4 [ab4,db5]@2",
  P: "[~@2 ab4 ~ [db5,gb5] ~ [bb4,eb5]@2 [db4,b4]@2 [db4,bb4]@2 [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4@2 [db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3 ~ [db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4 ~ [db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3 ~@3 eb4 [gb4,bb4]@2 eb4 [ab4,db5]@2, ~@14 db4@3 ~@3 db4@4 ~@6 db4@2 ~@4 db4@4 ~@6 db4@2 ~@4 db4@4 ~@6 db4@2 ~@4 db4@4 ~@8]/5", // Gb5 Eb5 Db7 Gb Db5 Db7 Gb Db5 …
  Q: "[~@2 ab4 ~ [db5,gb5] ~ [bb4,eb5]@2 [db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4 ~ [db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 b3 ~ [db4,b4]@2 [db4,bb4] ~ [db4,ab4]@2 ~ f4@2 db4@2 ~ gb4@2 ab4 ~ [db4,b4]@2 [db4,bb4]@2 [db4,ab4]@2 ~ f4@2 db4@2 ~ [db4,gb4]@2 db4 ~ [db4,gb4]@2 eb4@2 ~@2 db4@2, ~@14 db4@2 ~@4 db4@4 ~@6 db4@2 ~@4 db4@4 ~@6 db4@3 ~@3 db4@4 ~@6 db4@3 ~@15]/5", // Gb5 Eb5 Db7 Gb Db5 Db7 Gb Db5 …
  R: "ab4 f4@4 ~@2 eb4", S: "[ab3,c4,ab4]@2 ~ [ab3,c4,f4]@13", T: "[c2,c3] c2 c3 ~ c3 ~@3 [c2,c3] ~@5 c3 ~",
})).s("gm_lead_2_sawtooth").gain(0.41)

// chords · lead 2 sawtooth · "SynthLead" · soft notes
const lead_2_sawtooth_soft = note("<~@121 [~ c3 ~ c3 ~ c3!3 ~ c3!5 ~ c3]!12 ~@8 [~ c3 ~ c3 ~ c3!3 ~ c3!5 ~ c3]!8 ~@28>")
  .s("gm_lead_2_sawtooth").gain(0.26)

// other · overdriven guitar · "GuitarRift"
const overdriven_guitar = note(`<
  ~@2 A B C@2 D@2 ~@28 E F G F G F G F G F G F H I J I K F G F G F H I J I L@5 M@3 N ~@18 O P O P O P O P Q R Q R S@8
  C@2 T@2 C@2 A U ~@60
>`.pickRestart({
  A: "db5", B: "db6@2 d6 eb6@3 d6@2 db6@8", C: "c5/2", D: "[db5@18 d5@2 eb5@3 d5 db5@8]/2",
  E: "~@8 d3 eb3 ~ ab3 ~ f3 [eb3,ab3,c4] ~", F: "f3 ~ eb3 ~ f3 ~@3 d3 eb3 ~ ab3 ~ f3 [ab3,c4] f3",
  G: "[bb3,db4] ~ [ab3,c4] ~ f3 ~@3 d3 eb3 ~ ab3 ~ f3 [eb3,ab3,c4] ~", // Bbm Ab
  H: "[bb3,db4] ~ [ab3,c4] ~ f3 ~@3 a3 bb3 ~ eb4 ~ c4 [c4,eb4,g4] ~", // Bbm Ab Cm
  I: "c4 ~ bb3 ~ c4 ~@3 a3 bb3 ~ eb4 ~ c4 [eb4,g4] c4", // Eb
  J: "[f4,ab4] ~ [eb4,g4] ~ c4 ~@3 a3 bb3 ~ eb4 ~ c4 [c4,eb4,g4] ~", // Fm Eb Cm
  K: "[f4,ab4] ~ [eb4,g4] ~ c4 ~@3 d3 eb3 ~ ab3 ~ f3 [eb3,ab3,c4] ~", // Fm Eb Ab
  L: "[[f4,ab4] ~ [eb4,g4] ~ c4 ~@3 [a1,a2] ~ a2!2 [a1,a2] ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ [a1,a2]@2 [a1,a2] ~ a2!2 [a1,a2] ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ [a1,a2]@2 ~@2 eb5 eb4 ~ eb5 eb4 ~, ~@14 a1 ~@7 a1 ~@7 a1 ~@15 a1 ~@7 a1 ~@7 a1 ~@17]/5", // Fm Eb A
  M: "~@2 eb5 eb4 ~ eb5 eb4 ~@3 eb5 eb4 ~ eb5 eb4 ~", N: "~@2 eb5 eb4 ~ eb5 eb4 ~@9",
  O: "d3 eb3 ~ ab3 ~ f3 [eb3,ab3,c4] ~ f3 ~ eb3 ~ f3 ~@3", // Ab
  P: "d3 eb3 ~ ab3 ~ f3 [ab3,c4] f3 [bb3,db4] ~ [ab3,c4] ~ f3 ~@3", // Ab Bbm Ab
  Q: "a3 bb3 ~ eb4 ~ c4 [c4,eb4,g4] ~ c4 ~ bb3 ~ c4 ~@3", // Cm
  R: "a3 bb3 ~ eb4 ~ c4 [eb4,g4] c4 [f4,ab4] ~ [eb4,g4] ~ c4 ~@3", // Eb Fm Eb
  S: "[[a1,a2] ~ a2!2 [a1,a2] ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ [a1,a2]@2, ~@6 a1 ~@7 a1 ~@7 a1 ~@9]/2", // A
  T: "[db5@18 d5 eb5@3 d5@2 db5@8]/2", U: "~ d5 ~ eb5@4 d5 db5@8",
})).s("gm_overdriven_guitar").gain(0.46)

// chords · electric guitar jazz · "GuitarChor"
const electric_guitar_jazz = note(`<
  A@2 B@2 A@2 B@2 C@2 D@3 E F G F H D@3 E F G F H D@3 E F G F I J@3 ~@29 K@5 L@3 M F N F L@4 M F N F O P@2 ~@20 A@2 B@2
  A@2 B@2 Q@4 ~@12 R@4 S T R ~@9 U@4 V W U ~ U@4 V W U ~ X Y Z AA ~@8
>`.pickRestart({
  A: "~@2 [c5,ab5,c6] [c5,gb5,bb5]@4 ~", B: "~@2 [db5,gb5,bb5] [bb4,db5,e5,ab5]@4 ~",
  C: "[[eb3,gb3,bb3]@14 [db3,ab3] [d3,a3]]/2", D: "[eb3,bb3] ~ [eb3,gb3,bb3] ~@3 [db3,ab3] [d3,a3]",
  E: "[eb3,bb3] ~ [eb3,gb3,bb3] ~@3 [eb3,gb3,bb3]!2", F: "~@2 [db3,f3,ab3] ~@3 [db3,f3,ab3] ~",
  G: "~@2 [db3,f3,ab3] ~@4 [b2,eb3,gb3]", H: "~@2 [db3,f3,ab3] ~@3 [db3,ab3] [d3,a3]",
  I: "~@2 [db3,f3,ab3] ~@3 [db3,ab3]!2", J: "[~@4 [eb3,gb3,bb3]@2 ~@6 [f3,ab3,c4]@25 ~@11]/3",
  K: "[~@4 [db4,e4,a4]@16 [c4,f4,a4]@8 [db4,gb4,bb4]@7 [eb4,ab4,c5] [eb3,bb3] ~ [eb3,gb3,bb3] ~]/5", // A F Gb Ab Eb5 Ebm
  L: "~@2 [db3,ab3] [d3,a3] [eb3,bb3] ~ [eb3,gb3,bb3] ~", M: "~@2 [eb3,gb3,bb3]!2 ~@2 [db3,f3,ab3] ~",
  N: "~@3 [b2,eb3,gb3] ~@2 [db3,f3,ab3] ~", O: "~@2 [db3,ab3]!2 ~@2 [eb3,gb3,bb3] ~", P: "[~@4 [f3,ab3,c4]@25 ~@3]/2",
  Q: "[g3,c4]/4", R: "~ c3 ~@2", S: "d3 ~@2 e3", T: "a2 ~@3", U: "~ [c3,g3] ~@2", V: "[d3,a3] ~@2 [e3,b3]",
  W: "[a2,e3] ~@3", X: "e5@3 c5@3 g4@2", Y: "e5 c5 g4 e4 g4 c5 g4@2", Z: "e5@3 c5@3 g4@4 e5@2 c5@2 g4@2",
  AA: "e5@2 c5 e5@2 c5 g4@2",
})).s("gm_electric_guitar_jazz").gain(0.46)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A@2 B@2 C@2 B@2 D@2 E@2 F G H I J K F@3 G H I J K E@3 L H I J M N@3 O@11 P Q@3 R O@5 P Q@3 S T U@3 V@3 W X@3 Y J Z J X
  AA X@2 Y J Z J AB AC@2 O@8 Q@4 T@2 AD@2 T@2 AD@2 C@2 B@2 C@2 B@2 AE@4 AF@12 AG@4 AH AI AG AJ AF@8 AG@4 AH AI AG AJ
  AG@4 AH AI AK@2 AL@4 ~@8
>`.pickRestart({
  A: "~@6 c3 ~@9, c2", B: "[db3@3 ~@8 db3@5, db2 db2, ~@3 db3@8 ~@5]/2", C: "[c3@3 ~@8 c3@5, c2 c2, ~@3 c3@8 ~@5]/2",
  D: "[eb2@2 eb2@2 eb2@2 eb2@2 eb2@2 eb2@2 eb2@2 [db2,db3] [d2,d3], eb3@7 ~]/2", // Db D
  E: "[eb2,eb3]@2 ~@2 [eb2,eb3]@2 ~@6 [db2,db3]@2 [d2,d3] ~", F: "[eb2,eb3] ~ [eb2,eb3] ~@3 [db2,db3] [d2,d3]",
  G: "[eb2,eb3]@2 ~@2 [eb2,eb3]@2 ~@6 [eb2,eb3]@2 [eb2,eb3] ~", H: "[db2,db3] ~ [db2,db3] ~@3 [db2,db3] ~",
  I: "~@2 [db2,db3] ~@4 [b1,b2]", J: "~@2 [db2,db3] ~@3 [db2,db3] ~", K: "~@4 [db2,db3]@2 ~@6 [db2,db3]@2 [d2,d3] ~",
  L: "[eb2,eb3] ~ [eb2,eb3] ~@3 [eb2,eb3]!2", M: "~@4 [db2,db3]@2 ~@6 [db2,db3]@2 [db2,db3] ~",
  N: "[~@2 eb3 ~@3 [f3,c4,f4]@14 ~@2 [f2,f3] ~]/3", O: "~@2 [f2,f3] ~@3 [f2,f3] ~", P: "~@2 [f2,f3] ~@3 [c2,c3] ~",
  Q: "~@2 [c2,c3] ~@3 [c2,c3] ~", R: "~@2 [c2,c3] ~@3 [f2,f3] ~", S: "~@2 [c2,c3] ~ a2 a1 a2 a1",
  T: "a2 a1 a2 a1 a2 a1 a2 a1",
  U: "[a2@2 a1@2 a2@2 a1@2 [a1,a2] ~ a2!2 [a1,a2] ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@2 [eb1,eb2]@4 [eb2,eb3]@4, ~@14 a1 ~@7 a1 ~@7 a1 ~@7 a1 ~@9]/3", // A Eb
  V: "[eb1,eb2] [eb2,eb3] [eb1,eb2] [eb2,eb3]", W: "[eb1,eb2]@2 [eb2,eb3]@2 [eb2,eb3] ~ [eb2,eb3] ~",
  X: "~@4 [db2,db3]@2 [d2,d3] ~ [eb2,eb3]@2 ~@2 [eb2,eb3]@2 ~@2", // Db D Eb
  Y: "~@4 [eb2,eb3]@2 [eb2,eb3] ~ [db2,db3]@2 ~@2 [db2,db3]@2 ~@2", Z: "~@3 [b1,b2] ~@2 [db2,db3] ~",
  AA: "~@2 [db2,db3] [d2,d3] [eb2,eb3] ~ [eb2,eb3] ~", AB: "~@4 [db2,db3]@2 [db2,db3] ~@5 eb3@2 ~@2",
  AC: "[~ [f3,c4,f4]@7]/2", // F5
  AD: "[[a1,a2] ~ a2!2 [a1,a2] ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@4 [a1,a2] a2!2 ~ a2@2, ~@6 a1 ~@7 a1 ~@7 a1 ~@7 a1 ~]/2", // A
  AE: "[c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~ c3@4, [c1,c2]]/4", // C
  AF: "c2@2 c3!2 c2@2 c3!2 c2@2 c3!2 c2@2 c3!2", AG: "~ [c2,c3]@3", AH: "[d2,d3]@3 [e2,e3]", AI: "[a2,a3]",
  AJ: "[c2,c3]", AK: "[~ [c2,c3]@7]/2", AL: "[c2 c2, [c1,c3]]/4",
})).s("gm_electric_bass_pick").gain(0.46)

// other · tinkle bell · "Bells"
const tinkle_bell = note("<~@149 A B A B ~@2 A B C D E D F G E H ~@12>".pickRestart({
  A: "~ f4 d4 ~", B: "~ g4 e4 ~", C: "~ g4 f4 ~", D: "~ a4 g4 ~", E: "~ g4 f4 d4", F: "d5 ~@2 e5", G: "a5 ~@3",
  H: "c5 ~@3",
})).s("gm_tinkle_bell").gain(0.46)

// chords · acoustic guitar steel · "GuitarLiv"
const acoustic_guitar_steel = note("<~@66 A@5 ~@106>".pickRestart({
  A: "[~@8 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 ~ eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 ~ eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 ~ eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 eb4 ~ eb3 ~@9, ~@9 bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~@2 bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~@2 bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~@2 bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~@9]/5",
})).s("gm_acoustic_guitar_steel").gain(0.46)

// drums · rim
const rim = s("rim").struct(`<
  A B C B C B D B E@6 F@4 E@18 G H@25 I J K J L M N@2 O P@18 H@12 J B C B C B C B C B C B C B D B Q@4 R S R S R S R S R
  S R S N T U T U T N T R S R S R S R S N T U T U T N T N T R T U T N T N@4 ~@8
>`.pickRestart({
  A: "~@2 x ~@5 x ~ x!2 ~@4", B: "x ~ x!2 ~@4 x ~@2 x ~@4", C: "x ~ x ~@5 x ~ x!2 ~@4", D: "x ~ x ~@3 x ~ x ~ x!2 ~@4",
  E: "x!3 ~ x ~ x ~", F: "x ~ x ~@5 x ~@6 x", G: "x!3 ~@3 x ~", H: "~ x ~ x", I: "~@4 x ~@3 x ~ x!2 ~@4",
  J: "x ~ x!2 ~@4 x ~ x!2 ~@4", K: "x ~@2 x ~@4 x ~ x ~@5", L: "x ~@2 x ~@4 x ~@7", M: "x!2 ~@2 x ~@2 x",
  N: "x!2 ~@2 x ~@3", O: "x!2 ~@2 x!3 ~", P: "x ~ x ~ x!3 ~", Q: "x!4", R: "x!2", S: "x ~@3 x!2 ~@2",
// … 82 more lines

More by Genesis