Strudelify

Our Love Is the Sea

Nirvana

KeyD♭ majorTempo78 bpm
0:00/0:00
// Our Love Is the Sea — Nirvana
// 78 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 9 "accoustic guitar" acoustic guitar steel (copy of ch 3 "harpsistrings" tremolo strings); ch 8 "strings" string ensemble 1 (copy of ch 4 "choir" choir aahs); ch 7 "lead guitar" electric guitar muted (copy of ch 5 "synth lead" electric guitar clean)
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · piano · "piano left"
const piano = note(`<
  A B C D C E@3 F@7 G@2 H I J K L M L N O N P Q O R S T U@8 ~ V@6 W@7 X@2 Y@2 Z I AA K L M L ~ V@6 AB@8 AC@4 AD@8
>`.pickRestart({
  A: "~@2 f4@6 gb3@7 ~, f3 ~", B: "~ eb4@7, ab3", C: "~ f4@3 gb3@4, f3 ~", D: "ab3", E: "[~@2 ab3, ab3@2 ~, ~ b3@2]/3",
  F: "[~@49 f3@3 ~@4, ab2@20 bb3@30 f3@18 g3@28 f2@15 ~, ~@2 ab3@30 a2@20 ab3@28 gb2@31 ~, ~@16 bb2@20 a3@28 g2@16 gb3@2 db3@29 ~, ~@18 f3@16 f3@14 ab2@18 eb3@20 gb3@25 ~]/7",
  G: "[~@6 gb3@6 ~@4 ab2@15 ~, gb2@31 ~, ~@2 db3@29 ~, ~@12 gb3@19 ~]/2", H: "~ f3@4 f3@2 ~, bb2",
  I: "~@3 a3, a2, ~ f3@4 f3@3, ~@3 a3@3 ~@2", J: "~@4 ab3@11 ~, ab2@15 ~, ~@2 eb3@13 ~",
  K: "~@3 eb3, g2, ~ eb3@5 ~@2, ~@2 g3@5 ~", L: "gb2@15 ~", M: "~ f3@5 f3@2, f2", N: "ab2@15 ~",
  O: "~ f3@3 ~ gb3@3, f2 gb2", P: "~@2 f3@6 ~@2 gb3@5 ~, f2@8 gb2@7 ~", Q: "~@6 eb3@9 ~, ab2@15 ~, ~@2 ab3@13 ~",
  R: "~@3 bb2, ab2", S: "~@7 gb3, b2@3 b2, ~ gb3@6 ~, ~ b3@3", T: "~@6 eb3@9 ~, ab2@15 ~, ~ eb3@2 ~@5, ~@4 ab3@11 ~",
  U: "[~@18 f3@5 ~@3 f3@2 ~@16 a3@4 ~@4 ab3@11 ~@13 eb3@4 gb2@15 ~@3 f3@10 f3@4 gb2@15 ~, gb3, ab2@3 ~ g2 ~ f2 ~, ~@8 bb2@7 ~ a2@8 ~@10 g3@5 ~@25, ~@34 f3@4 a3@4 f3@6 ~@2 eb3@13 ~@3 eb3@10 ~@52]/8",
  V: "[~@2 f3@6 ~@26 f3@6 ~@14 eb3@9 ~@3 f3@6 ~@20 bb2@4, f2@8 gb2@8 ~@16 f2@8 gb2@7 ~@3 ab3@13 ~ f2@8 gb2@8 ~@16, ~@5 gb3@16 gb3@16 gb3@11]/6",
  W: "[~@32 bb2@15 ~@15 ab3@2 c2@10 ~@4 eb3@2 ~@14 bb2@2 eb2@8 f2@7 ~, b2@12 b2@4 ~@32 gb2@16 ~@10 c2@6 db2@7 eb3 f3@8 ~@16, ~ gb3@6 gb3@49, ~@2 b3@6 ~@17 db3@7 ~@6 ab2@18, ~@26 ab3 bb3@2 ab3 bb3@2 ~@11 db3@5 ~@8]/7",
  X: "[~@6 gb2@10 eb2@7 ~ f2@7 ~, ~ ab2@7]/2", Y: "[~ ab3@6 ~, ~ eb3@13 ~@2]/2", Z: "gb2 ~ f3@5 ~@3 f3@2 ~@4, bb2@7 ~",
  AA: "~@4 ab3@11 ~, ~@2 eb3@13 ~",
  AB: "[~@22 eb3@9 ~@3 f3@6 ~@26 f3@6 ~@14 eb3@9 ~@3 f3@6 ~@20 bb2@4, b2@12 b2@4 ~@2 eb3@4 ~@10 f2@8 gb2@8 ~@16 f2@8 gb2@7 ~@17 f2@8 gb2@8 ~@16, ~ gb3@6 gb3@14 gb3@16 gb3@16 gb3@11, ~@4 b3@12 ~@4 ab3@11 ~@51 ab3@13 ~@33]/8",
  AC: "[~@22 eb3@9 ~@17 ab3@15 ~, b2@6 b2@2 ~ eb3@2 ~@5 f3@8 ~@8, ~ gb3@6 gb3@13 gb3@12, ~@4 b3@12 ~@4 ab3@11 ~@3 f4@14 ~@16]/4",
  AD: "[~@80 ab3@16 ~@4 bb3@11 ~ [f3,c4]@15 ~, f3@15 ~ ab3@18 f4@6 gb3@87 ~, ~@2 f4@13 ~@3 eb4@30 ~@16 b3@32 ~@2 f3@13 ~@17, ~@8 gb3@24 f3@16 ab3@32 ~@16 bb2@15 ~@17, ~@5 ab4@7 ~ ab4@8 ~@11]/8", // F5
})).s("gm_piano").gain(0.32)

// chords · piano · "piano left" · soft notes
const piano_soft = note(`<
  ~@13 A B A C D ~@2 E ~@3 F ~@9 G ~@2 E ~@3 F ~@8 H ~@4 I ~@3 G ~@2 E ~@3 F ~@17 J ~@3 K@3 ~ L
>`.pickRestart({
  A: "~@2 gb3 ~@5", B: "~@8 f3@7 ~", C: "~@4 ab3@2 ab3@9 ~, ~@2 eb3@13 ~", D: "~@2 bb3 bb3@3 ~ f3, ~@3 bb3",
  E: "~@7 g3", F: "~@12 eb3@3 ~", G: "~@4 bb3 ~ bb3@4 ~@2 bb3@2 f3 ~", H: "~@4 bb3@11 ~, ~@2 f3@13 ~", I: "~ db3@7",
  J: "~@4 ab4@11 ~, ~@2 eb4@13 ~", K: "[~ eb4@16 ~@7]/3", L: "bb2@15 ~",
})).s("gm_piano").gain(0.16)

// chords · piano · "piano right"
const piano_2 = note(`<
  A@2 B@2 C@2 D@3 E F G H I J K L M N G O I P Q R S@2 T@2 U@2 V W@2 M N G O I P Q R S@2 T@2 U@2 V X Y@2 Z AA AB AC AD AE
  AF@2 N G O I P Q R S@2 T@2 U@2 V AG S@2 T@2 U@2 V AG AH@2 AI@2 AJ@2 AK@3 AL
>`.pickRestart({
  A: "[~@12 eb5@2 ~@6 db5@4 c5@7 ~, ~@6 bb5@8 eb5@11 ~@7]/2",
  B: "[~@3 bb5@2 ~ eb5 ~@3 db5@2 ~@3 eb4, ~@2 [db5,ab5]@3 ab4@4 ab4@3 eb4@3 ~, ~@7 eb5@5 c5@4, ~@7 bb4]/2", // Db5
  C: "[~@20 db5@4 ~@7 f5, ~ ab5@5 c5@2, ~@4 db5@10 eb5@11 ~@5 eb5@2, ~@6 bb5@19 ~@7, ~@10 ab4@2 eb5 f5@12 ~@7]/2",
  D: "[~@6 db5 ~@7 [eb5,f5] ~@8 f5, gb5@14 db5@17 ~@5 db5@12, db5@10 gb4@6 ~@2 gb4@13 ~@9 [ab4,c5]@8, ~ gb4@2 f5@5 ~@7 eb5@9, ~@4 b4@8 [b4,eb5]@4 ~@4 bb4@11 ~@17]/3", // Ebsus2 Ab B
  E: "bb3@6 ~ f4, db4, f4@7 ~, ~@3 bb3", F: "a3@6 a3 f4, [db4,f4]@15 ~", G: "[ab3,db4,f4]", H: "[f3,db4]",
  I: "[bb3,db4]@3 ~@4 gb3, f4@5 f4@3, gb3@2 ~ [bb3,db4]@5", // Bbm
  J: "a3@6 ~@6 [c4,eb4]@3 ~, [c4,eb4]@3 ~, ~@6 a3@9 ~, ~@8 [bb3,db4]@7 ~", K: "[gb3,bb3,db4,f4]", L: "[ab3,c4]",
  M: "bb3@3 ~@3 db4@2, db4@3 ~, f4@5 f4@3, ~@3 bb3@4 ~", N: "db4@7 db4, [a3,f4]", O: "[f3,db4]@15 ~",
  P: "a3@3 ~@3 [c4,eb4]@2, [c4,eb4]@3 ~, ~@3 a3@5, ~ [bb3,db4]", // Cm Bbm
  Q: "[gb3,bb3,db4]@6 [gb3,bb3,db4]@4 gb3@2 gb3@3 ~, f4@10 [bb3,db4,f4]@5 ~", // Gb Bbm
  R: "[ab3,c4,eb4]@6 [c4,eb4]@6 [bb3,c4,eb4]@2 ab3 ~, bb3@3 ~", // Ab Cm Cm7
  S: "[~@2 ab4 bb4@3 f4 ~@7 bb3@2, ~@2 db4@4 ab3@3 ab3@2 ~ c4@4, ~@7 eb4@9, ~@5 db4@3]/2",
  T: "[~@3 bb4@3 ~@7 eb4@3, ~@2 [db4,ab4]@4 f4@5 f4@5, ~@3 ab3@2 ab3@3, ~@14 eb4@11 ~@7]/2", // Db5
  U: "[~@6 bb4@6 ~@19 f4, ~@4 [db4,ab4]@8 f4@19 ~, ~@6 ab3@3 ab3@2 ~ c4@4, ~@7 eb4@8 eb4, ~@5 db4@3]/2", // Db5
  V: "~@7 bb3, [b3,gb4], db4@5 db4@3, ~ f4@3, ~@3 eb4@5", // B5
  W: "[~@7 bb3 ~@3 [c4,eb4]@5, gb4, bb3@3 db4 bb3@4, db4@3 eb4@5 db4 [c4,eb4] db4@6, ~ f4@7]/2", // Cm
  X: "~@3 eb4@3 ~@2 [ab3,c4]@8, gb4@15 ~, db4@5 ~ eb4@10, ~@2 f4@13 ~", // Ab
  Y: "[~@8 ab4@6 ~@17 gb4, ~@2 [f4,c5]@5 f4@8 f4, ~@2 db4@3 ~@2 db4@9, ~@17 ab4@15, ~@9 bb4@7]/2", // F5
  Z: "ab4@2 ab4 ab3@2 ~@2 db4, [ab3,eb4]@3 [eb4,ab4]@5, ~@5 ab3@3", // Ab5
  AA: "db4@4 ~@4 db4@7 ~, [gb4,bb4]@15 ~, ~@4 ab4@11 ~, ~@6 eb4@9 ~", // Gb
  AB: "[bb3,db4,gb4]@2 bb3!2 [ab3,db4,ab4]@2 ab3!2, ~ [db4,gb4] ~ [db4,ab4]", // Gb Db5 Gb5 Db5
  AC: "bb4@6 ~@4 db4@2 ~@3 db4, ~@3 gb4@5, ~@6 db4 bb3, ~@13 gb3@3",
  AD: "gb4@2 gb4 db4@3 db4@2, [bb3,db4]@3 [ab3,ab4]@5", AE: "[eb4,ab4,db5]",
  AF: "[~@8 bb3@3 ~@3 db4@2, [c4,eb4,ab4], ~@4 db4@3 ~, ~@8 f4@5 f4@3, ~@11 bb3@4 ~]/2", // Ab
  AG: "~@7 bb3, gb4, bb3@3 db4, db4@3 eb4@5, ~ f4@3",
  AH: "[~@7 bb4, ~@3 bb5@9 c5@4, ~@5 ab4@5 db5@6, ~@6 eb5 eb5@9, ~@13 f5@19]/2",
  AI: "[~@28 bb4@3 ~, ~@6 bb5@18 [ab4,c5]@7 ~, ~@10 ab4@8 c5@2 db5@11 ~, ~@13 f5@18 ~, ~@14 eb5@17 ~]/2", // Ab
  AJ: "[~@6 bb5@4 ~@14 c5@6 ~ f5, ~@2 ab5@3 ab4@4 ~ db5@5 ~, ~@7 eb5@8 eb5]/2",
  AK: "[~@12 [db5,eb5]@2 ~@4 eb4@2 gb4@2 ~ f5 ~@4 c5@2 ~@2 c4@6 ~@8 eb4@2, gb5@14 db5@7 ~@11 f4@8 db4@8, db5@10 gb4@5 ~ gb4@4 ~@12 ab4@10 eb4@2 f4@4, ~@2 gb4@4 f5@9 ~@17 db4@6 c4@10, ~@4 b4@11 ~@15 bb4@18]/3", // Dbsus2
  AL: "[c4,db4,f4]", // Dbmaj7
})).s("gm_piano").gain(0.32)

// chords · piano · "piano right" · soft notes
const piano_soft_2 = note(`<
  A@2 B@2 ~ C ~@7 D ~@2 E F ~@3 D ~@2 G ~ H ~ I ~ J ~@3 F ~@3 D ~@2 G ~ H ~ I ~ J ~ K L@2 ~ M ~ N ~@3 F ~@3 D ~@2 G ~ H
  ~ I ~ J ~@3 H ~ I ~ J ~@2 O@2 P@2 Q@2 ~ R ~ S
>`.pickRestart({
  A: "[~@13 f5 ~@10 ab4@7 ~, ~@2 [db5,ab5]@5 ~@9, ~@5 ab4@7 ~@4]/2", B: "[~@13 f5@11 ~@8]/2", C: "~@2 ab4@4 ab4@3 ~@7",
  D: "~@2 gb3@5 ~", E: "[bb3,eb4]", F: "~@7 bb3", G: "~@3 ab3@2 ab3@2 ~", H: "~@3 ab3@2 ab3@3",
  I: "~@9 eb4 ~@6, ~ db4@3", J: "~@3 ab3@5", K: "~@5 db4@10 ~, bb3@15 ~", L: "[~@5 db4@2 bb4@2 ~@7]/2",
  M: "~ ab4 db4@2 ~@4", N: "~@3 bb4@5", O: "[~@3 ab4, ~ ab5@7]/2", P: "[~@6 eb5 ~@9, ~@4 ab5@27 ~, ~ db5@4 ~@3]/2",
  Q: "[~@4 db5@7 ~@7 ab4@6 ab4@6 ~@2, ~@6 eb5 ~@9, ~@13 f5@17 ~@2]/2", R: "[db4,bb4]@5 ~ eb5 ~ [gb4,eb5]@2 db5@2 ~@4",
  S: "bb3",
})).s("gm_piano").gain(0.16)

// chords · tremolo strings · "harpsistrings"
const tremolo_strings = note(`<
  ~@25 A B C D E F G H I J K L M N O P Q R S T U T V W@3 X Y Z AA AB AC AD AE@2 K L M N O P Q R S T U T V AF@3 S T U T V
  AG@2 ~@10
>`.pickRestart({
  A: "~@6 db3@2 ~@4 gb3@2 gb2 ~, f2@4 gb2@3 ~, ~@2 db3@4 ~@4 db3@5 ~, ~ f3 ~@2",
  B: "~@7 ab3, ab2@5 ab3 db4@2, ~ eb3@7, ~ ab3 c4@2, ~@3 bb3@5",
  C: "~@3 db3 ~@3 gb2, f2@4 gb2@3 ~, ~ db3@2 ~@2 db3@3, ~ f3 ~ gb3",
  D: "~@7 eb3, ab2@3 c4, ~@2 eb3@5 c4@3 ab3@6, ~ ab3 db4@2, ~@3 bb3@5",
  E: "~@4 f3@2 db3 ~@7 db3@2, f2@7 ~ gb2@8, ~ db3@2 ~@2 db3@2 ~, ~@3 gb3",
  F: "~@12 c4@3 ~, ab2@10 ab3@5 ~, ~@2 eb3@13 ~, ~@4 ab3@3 c4 db4@7 ~, ~@6 bb3@9 ~",
  G: "~@3 gb3, b2, ~ gb3@5 ~@2, ~@2 b3@3 b3@2 ~, ~@3 db4@5", H: "~@3 ab3, ab2, ~ eb3@6 ~, ~ ab3@2 ~, ~@3 bb3@5",
  I: "~@3 c4@3 ~ ab3, ab2, ~ eb3@7, ~@2 ab3@5 ~, ~@3 c4", J: "~@3 bb3, bb2, ~ f3@7, ~@2 bb3@3 db4@3, ~@3 c4@5",
  K: "~@3 a3, a2, ~ f3@7, ~@2 a3@3 db4@3, ~@3 c4@5", L: "~@5 db4@3, ab2, ~ f3@7, ~ ab3@2 ~, ~@3 c4@5",
  M: "~@7 eb3, g2, ~ eb3@6 ~, ~ g3@2 g3, ~@3 bb3@5", N: "~@6 bb3@9 ~, gb2@15 ~, ~@2 db3@13 ~, ~@4 gb3@11 ~",
  O: "~@12 f3@3 ~, f2@15 ~, ~@2 db3@13 ~, ~ f3@2 ~, ~@10 ab3@5 ~",
  P: "~@3 gb3, gb2, ~ db3@7, ~@2 gb3@3 c4@3, ~@3 ab3@5",
  Q: "~@10 ab3@5 ~, ab2@15 ~, ~@2 eb3@13 ~, ~@4 ab3@4 c4@7 ~, ~@6 eb4@9 ~",
  R: "~@2 f3@2 ~@3 gb2, f2@4 gb2@3 ~, ~ db3@3 ~ db3@3, ~@3 gb3",
  S: "~@7 bb3, ab2, ~ eb3@7, ~@4 ab3@3 c4 db4@8, ~@3 bb3@3 ab3@2",
  T: "~@3 f2 ~@3 ab3, f2@3 ~ gb2@4, ~ db3@3 ~ db3@3, ~ f3 ~ gb3", U: "~@7 eb3, ab2, ~ ab3@3, ~@3 bb3@3 bb3@2, ~ c4",
  V: "~@12 bb3@3 ~, ab2@15 ~, ~ eb3@4 ~@3, ~@4 ab3@11 ~, ~@8 c4@7 ~",
  W: "[~@6 b2@2 ~@13 f4@3, b2@3 ~ ab2@3 ab3@5, ~ gb3@7 ~ eb3@7 ~@3 bb4@5, ~@2 b3@6 ~@2 ab3 bb3@2 c4@3 bb3@8, ~@3 db4@13 ~ f4@4 ~@3]/3",
  X: "~@12 gb4@3 ~, gb3@15 ~, ~@4 db4@11 ~, ~@3 ab4@4 ~, ~@10 bb4@5 ~",
  Y: "~@12 c4@3 ~, c3@15 ~, ~@2 ab3@13 ~, ~ c4@2 ~, ~@10 eb4@5 ~",
  Z: "~@12 db4@3 ~, db3@15 ~, ~@2 ab3@13 ~, ~@4 db4@6 eb4@5 ~, ~@6 f4@9 ~",
  AA: "~@4 eb4@2 bb3 ~@5 f4@2 db4 ~, eb3@7 ~ f3@7 ~, ~@5 db4@2 ~",
  AB: "~@12 gb4@3 ~, gb3@15 ~, ~@2 db4@13 ~, ~@4 gb4@6 ab4@5 ~, ~@6 bb4@9 ~",
  AC: "~@3 eb3 ~@2 f4@2, eb3@3 ~ f3@4, ~@2 eb4@2 ~ c4@3", AD: "~@3 eb5, ab3, ~ eb4@7, ~ ab4 bb4@2, ~@3 c5@5",
  AE: "[~@7 bb3, ab3@8 bb2@5 db4@3, ~@2 ab4@5 ab4@9, ~@4 c5@2 c5@2 ~ f3@7, ~@5 eb5@3 ~@2 bb3 c4@5]/2",
  AF: "[~@6 b2@2 ~@10 f3@2 ~@3 gb2, b2@3 ~ ab2@3 ab3@3 ~ gb3, ~ gb3@7 ~ eb3@7 f2@4 gb2@3 ~, ~@2 b3@6 ~@2 ab3 bb3@2 c4@3 ~ db3@3 ~ db3@3, ~@3 db4@13 ~@8]/3",
  AG: "[~@3 b2 ~@3 ab3, b2@3 ~ ab2@4, ~ gb3@7 ~ eb3@7, ~@2 b3@6 ~@2 ab3 bb3@2 c4@3, ~@3 db4@13]/2",
})).s("gm_tremolo_strings").gain(0.24)

// chords · tremolo strings · "harpsistrings" · soft notes
const tremolo_strings_soft = note(`<
  ~@28 A ~@2 B C D ~@2 E ~@4 F ~ G ~ H ~ I ~ J ~ K@2 ~ L ~ M N O ~@2 E ~@4 F ~ G ~ H ~ I ~ P@2 G ~ H ~ I ~ J ~@10
>`.pickRestart({
  A: "~@4 eb3@3 ~", B: "~@7 b3", C: "~@7 eb3", D: "~@5 db4@3, ~@5 bb3@11", E: "~@3 ab3", F: "~@12 bb3@3 ~",
  G: "~@5 c4@3", H: "~ eb3@4 eb3@2 ~", I: "~@10 eb3@5 ~, ~@3 bb3@3 ~@2", J: "~@7 bb3", K: "[~@14 ab4@17 ~]/2",
  L: "~ bb3@2 ~@5", M: "~ bb3@3 ~@4", N: "~@5 ab4@2 ab4", O: "~@3 bb4@5, ~ eb4@7", P: "[~@7 bb3@5 ~@4]/2",
})).s("gm_tremolo_strings").gain(0.08)

// other · electric guitar clean · "synth lead"
const electric_guitar_clean = note("<~@58 A B C D E F@2 G H ~@26>".pickRestart({
  A: "~@12 bb4@2 ab4 f4", B: "bb4 ab4 bb4@11 ~ bb4@2", C: "a4@11 ~ eb4 f4 ab4@2", D: "eb5@6 db5@8 bb4 ab4",
  E: "c5@4 db5 c5 bb4@6 ~@2 db4 eb4", F: "[eb4@2 db4 bb3@3 bb4@7 ~ c5 ~ a4@10 ~@2 bb3@2 db4 eb4, ~@15 bb4@2 ~@15]/2",
  G: "eb4@2 db4 bb3@3 bb4@5 ~ eb4 f4 ~ gb4",
  H: "gb5 f5 ~ [eb5,f5] gb5 [db5,eb5] c5 [bb4,eb5] eb5 [c5,db5] bb4 [c5,f5] db5 [ab4,bb4] f4 [gb4,ab4]", // Ebsus2 Dbsus2 Eb5 Dbmaj7 F5 Absus2 Gbsus2
})).s("gm_electric_guitar_clean").gain(0.4)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@17 A B C D E F E G H I H I H I J K L@2 M N O P Q R S T U V I W X Y G Z AA AB AC AD AE AF AG@2 AH AI AJ AK AL AM AA
  AN AO I H I AP AQ AR AS W AT AU I AV AW AR AX ~@10
>`.pickRestart({
  A: "bb1@9 ~@3 f2@4, ~@5 bb1@3", B: "a1@5 a1 f2 a1", C: "ab1", D: "~@5 eb2 g2@2, g1@3 ~", E: "gb1", F: "f1",
  G: "ab0@15 ~", H: "f0 gb0", I: "ab0", J: "b0@13 ~ b0@2", K: "ab0@7 ~", L: "[~@8 bb0@3 bb0@4 f1, ab0@11 ~@5]/2",
  M: "a0@3 a0@4 f1", N: "ab0@6 ab0@9 ~", O: "~@6 g1@6 eb1@3 ~, g0@3 ~", P: "~ db1 gb1@5 db1, gb0 ~@3",
  Q: "~@3 f1@4 ~, f0@7 ~", R: "gb0@2 db1 gb1@4 gb0", S: "ab0@3 eb1", T: "f0 f1@3 gb0 gb1@3", U: "ab0 ab1@6 ~",
  V: "f0@2 f1@5 ~ gb0@2 gb1@4 gb0@2", W: "f0 f1@3 gb0 gb1@2 gb0", X: "ab0@3 bb0", Y: "b0 gb1 b1@4 b0 gb1",
  Z: "bb0@6 ~ bb0", AA: "gb0@13 ~ gb0@2", AB: "c0@13 ~ c0@2", AC: "db0@13 ~ db0@2", AD: "eb1 f0",
  AE: "gb1@2 db1@2 ab0@2 gb0@9 ~", AF: "eb0 f0", AG: "[ab0@13 eb1 ab1@2]/2", AH: "bb0@13 ~ bb0@2", AI: "a0@3 f1",
  AJ: "ab0@13 ~@3", AK: "g0 eb1 g1@3 eb1@2 g1", AL: "gb0@7 ~", AM: "f0@4 f1@11 ~", AN: "ab0@12 eb1@3 ~",
  AO: "f0@2 f1@2 gb0@2 gb1 gb0", AP: "f0@7 ~ gb0@8", AQ: "ab0@11 ~ bb0@4", AR: "b0@11 ~ b0@2 gb1@2",
  AS: "ab0@5 ~ ab0@4 eb1@2 ab0@2 gb0@2", AT: "ab0@7 gb0", AU: "f0@8 gb0@5 ~ f0 gb0", AV: "f0@8 gb0@7 ~",
  AW: "ab0 eb1@5 bb0@2", AX: "ab0@11 ~ ab0@3 ~",
})).s("gm_electric_bass_finger").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@59 A@2 B C A@10 D B A@4 E F G F@2 ~@9>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~ x ~@2", C: "x ~@5 x ~@3 x!2 ~@4", D: "x ~@2 x ~ x ~ x", E: "x ~@3 x ~@2 x", F: "x",
  G: "x ~@6 x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@59 A@3 B A@3 C A@3 B A@11 C ~@10>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~ x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@59 A@3 B A@5 B A B A@2 C D A@3 B A@2 D A ~@10>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "~@2 x!6", D: "~@2 x!5 ~",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@58 A ~@3 B ~@3 A ~@5 C A D ~@5 E F G ~@10>".pickRestart({
  A: "~@12 x ~ x!2", B: "~@15 x", C: "~@9 x!2 ~ x ~@3", D: "~@10 x ~@2 x!2 ~", E: "~@5 x ~ x ~@4 x ~ x!2",
  F: "~@14 x!2", G: "~@6 x ~@2 x!2 ~@3 x ~",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@62 A ~@5 A ~ A ~@3 A ~@3 A ~@2 A ~@11>".pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@58 A ~@3 B ~@3 A ~@3 C ~ D E F ~@5 G H I ~@10>".pickRestart({
  A: "~@5 x!2 ~", B: "~@6 x!2", C: "~@15 x", D: "~@12 x ~@2 x", E: "~@11 x!2 ~@3", F: "~@3 x ~ x ~@2",
  G: "~ x!2 ~@2 x!2 ~", H: "~@10 x ~@2 x ~@2", I: "~@4 x ~ x ~@6 x ~@2",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@59 A ~@3 A ~@3 A ~@3 A ~ A@3 ~@5 A@3 ~@9>".pickRestart({
  A: "x",
})).gain(0.24)

// drums · high tom
// … 48 more lines

More by Nirvana