Strudelify
The Logical Song cover art

Breakfast In America

The Logical Song

Supertramp

KeyE♭ majorTempo125 bpm
0:00/0:00
// The Logical Song — Supertramp
// 125 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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 · fretless bass · "bass"
const bass = note(`<
  A@4 ~@11 B C D E F B C D E F@2 G H G H G H I J G H G H G H K@4 L C D E F B C D E M N O C D E F B C D E F P G H G H G H
  I J G H G H G H Q@8 R S T@2 R S U@3 R S T@2 R S U@3 R S T@2 R S U@3 V
>`.pickRestart({
  A: "~@10 d3 [eb3,g3] bb3@4", B: "c3@4 ~@2 c3 ~ c3@4 ~@2 bb2 ~", C: "ab2@4 ~@2 ab2 ~ g2@4 ~@2 g2@2",
  D: "g2@2 ~@2 bb2@2 ~ bb2", E: "bb2@4 ~@2 a2 ~ ab2@4 ~@2 ab2 ~", F: "a2@2 ~ a2 a2@2 ~@2",
  G: "eb3@5 ~ eb3@2 ~@4 bb2 ~ c3 ~", H: "eb3@5 ~ eb3@2 ~@8", I: "db3@5 ~ c3@9 ~", J: "bb2@5 ~ ab2@10",
  K: "[db3@5 ~ c3@7 ~ bb2@7 ~ ab2@4 bb2@2 c3@2 db3@8 c3@7 ~ bb2@7 ~ ab2@10]/4", L: "c3@4 ~@2 c3@7 ~ bb2 ~",
  M: "a2@2 ~ bb2 c3@2 ~ d3", N: "eb3@2 ~ f3 g3@2 ~ bb3", O: "c4@4 ~@2 c3@4 g3 ~@3 bb2 ~", P: "a2@2 ~ a2 c3@2 ~ c3",
  Q: "[db3@5 ~ c3@7 ~ bb2@7 ~ ab2@4 bb2@2 c3@2 db3@8 c3@7 ~ bb2@7 ~ ab2@4 bb2@2 c3@2 db3@8 c3@7 ~ bb2@7 ~ ab2@4 bb2@2 c3@2 db3@8 c3@7 ~ bb2@7 ~ ab2@9 ~]/8",
  R: "g3 bb3 c4 ~@4 bb3", S: "c4 ~@2 eb4 e4 c4 ~@2", T: "[g3 bb3 c4 ~@2 g3 gb3 f3@9]/2",
  U: "[g3@2 bb3@2 c4@2 ~@4 g3 ~ gb3 ~ f3@8 eb3@4 f3@2 g3@2 ab3@17 ~]/3", V: "g3 bb3 c4 ~@5",
})).s("gm_fretless_bass").gain(0.72)

// chords · epiano2 · "el piano"
const epiano2 = note(`<
  A@4 B C@3 D B C@3 D@2 A E F G H A E F G H@2 I@2 J@2 K@2 L@2 I@2 J@2 K@2 L@4 A E F G H A E F G H@2 M N O P Q M N O P Q
  R I@2 J@2 K@2 L@2 I@2 J@2 K@2 L@8 S@2 T@2 S@2 U V@2 S@2 T@2 S@2 U V@2 S@2 T@2 S@2 W X@2 Y
>`.pickRestart({
  A: "[g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~", // Cm
  B: "[g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] ~, c3@5 ~ c3@4 c3@4 bb2@2", // Cm
  C: "[[ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [eb3,ab3,c4,eb4] ~ [eb3,ab3,c4,eb4] ~ [eb3,ab3,c4,eb4] ~ [eb3,ab3,c4,eb4] ~, ab2@4 ab2@4 g2@5 ~ g2@4 g2@2 a2@2 bb2@7 ~ bb2@4 ~@4 a2@2 ab2@4 ~@2 ab2@2]/3", // Abmaj7 Gm7 Bb Ab
  D: "[eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~, a2@5 ~ a2@10", // Adim
  E: "[ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~", // Abmaj7 Gm7
  F: "[g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~", // Gm7 Bb
  G: "[f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] ~ [eb3,ab3,c4,eb4] ~ [eb3,ab3,c4,eb4] ~ [eb3,ab3,c4,eb4] ~ [eb3,ab3,c4,eb4] ~", // Bb Ab
  H: "[eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~ [eb3,a3,c4,eb4] ~", // Adim
  I: "[g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~ [g3,bb3,eb4,g4] ~", // Eb
  J: "[a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~ [a3,c4,eb4,g4] ~", // Am7b5
  K: "[ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~ [ab3,c4,eb4,g4] ~", // Abmaj7
  L: "[f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~ [f3,ab3,db4,f4] ~", // Db
  M: "[g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~ [g4,c5,eb5,g5] ~", // Cm
  N: "[ab4,c5,eb5,g5] ~ [ab4,c5,eb5,g5] ~ [ab4,c5,eb5,g5] ~ [ab4,c5,eb5,g5] ~ [g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~", // Abmaj7 Gm7
  O: "[g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~ [g4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~", // Gm7 Bb
  P: "[f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [f4,bb4,d5,f5] ~ [eb4,ab4,c5,eb5] ~ [eb4,ab4,c5,eb5] ~ [eb4,ab4,c5,eb5] ~ [eb4,ab4,c5,eb5] ~", // Bb Ab
  Q: "[eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~ [eb4,a4,c5,eb5] ~", // Adim
  R: "[a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~ [a4,c5,eb5,g5] ~", // Am7b5
  S: "[c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~", // C7
  T: "[[c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,eb4,f4,ab4]@4 [c4,eb4,f4,ab4] ~ [c4,eb4,f4,ab4] ~ [c4,eb4,f4,ab4] ~ c4!2 [eb4,f4,ab4]@2 c4!2 [eb4,f4] ~, ~@15 ab4]/2", // C7 Fm7 Ebsus2
  U: "[c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,eb4,f4,ab4]@2", // C7 Fm7
  V: "[~@2 [c4,eb4,f4,ab4] ~ [c4,eb4,f4,ab4] ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [c4,eb4,ab4]@4 [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~]/2", // Fm7 Eb Ab
  W: "[c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~@5 [c4,e4,g4,bb4] ~ [c4,e4,g4,bb4] ~ [c4,eb4,f4,ab4]@2", // C7 Fm7
  X: "[~@2 [c4,eb4,f4,ab4] ~ [c4,eb4,f4,ab4] ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [c4,eb4,ab4]@6 [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~ [ab3,c4,eb4,ab4] ~]/2", // Fm7 Eb Ab
  Y: "[c4,e4,g4,bb4,c5] ~ [c4,e4,g4,bb4,c5] ~ [c4,e4,g4,bb4,c5] ~@11", // C7
})).s("gm_epiano2").gain(0.56)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note("<~@26 A@8 B@6 C@4 ~@22 A@8 D@4 E@8 ~@30>".pickRestart({
  A: "[bb4 a4 ~ [c5,f5], [eb5,g5]@3 ~, ~ ab4]/8", B: "[bb4 a4 ab4, [eb5,g5]]/6", C: "[c5,f5]/4",
  D: "[bb4 a4, [eb5,g5]]/4", E: "[~ [c5,f5]@3, ab4]/8",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.8)

// other · lead 8 bass lead · "synth 1"
const lead_8_bass_lead = note("<~@34 A@2 B@2 C@2 D@4 ~@30 A@2 B@2 C@2 D@4 ~@32>".pickRestart({
  A: "[bb3@14 d4 eb4]/2", B: "[c4@14 d4 eb4]/2", C: "[c4@14 ab3 g3]/2", D: "[f3@61 ~@3]/4",
})).s("gm_lead_8_bass_lead").gain(0.48).pan(0.9)

// chords · electric guitar clean · "e guitar"
const electric_guitar_clean = note(`<
  ~@26 A@2 B@2 C@2 D@2 A@2 B@2 C@2 E@4 ~@22 A@2 B@2 C@2 D@2 A@2 B@2 C@2 F@8 G H I@2 G H J@3 G H I@2 G H J@3 G H I@2 G H
  J@3 ~
>`.pickRestart({
  A: "[bb3,eb4,g4]@5 ~ [bb3,eb4,g4] ~@9", B: "[a3,eb4,g4]@5 ~ [a3,eb4,g4] ~@9", C: "[ab3,eb4,g4]@5 ~ [ab3,eb4,g4] ~@9",
  D: "[~@11 ab3@5, db4@6 c4@10 bb3@5 ~@11, ~@2 f4@7 ~ f4@6 ~@2 f4@13 ~, ~@4 ab4@7 ~ ab4@6 ~@2 ab4@12]/2",
  E: "[~@22 ab3@4 bb3@2 c4@2 ~@24 ab3@9 ~, db4@6 c4@7 ~ bb3@7 ~@9 db4@8 c4@8 bb3@7 ~@11, ~@2 f4@7 ~ f4@7 ~ f4@11 ~@5 f4@7 ~ f4@6 ~@2 f4@13 ~, ~@4 ab4@7 ~ ab4@6 ~@2 ab4@10 ~@6 ab4@6 ~@2 ab4@6 ~@2 ab4@11 ~]/4",
  F: "[~@22 ab3@4 bb3@2 c4@2 ~@24 ab3@4 bb3@2 c4@2 ~@24 ab3@4 bb3@2 c4@2 ~@24 ab3@9 ~, db4@6 c4@7 ~ bb3@7 ~@9 db4@8 c4@7 ~ bb3@7 ~@9 db4@8 c4@7 ~ bb3@7 ~@9 db4@8 c4@8 bb3@7 ~@11, ~@2 f4@7 ~ f4@7 ~ f4@11 ~@5 f4@7 ~ f4@7 ~ f4@11 ~@5 f4@7 ~ f4@7 ~ f4@11 ~@5 f4@7 ~ f4@6 ~@2 f4@13 ~, ~@4 ab4@7 ~ ab4@6 ~@2 ab4@10 ~@6 ab4@7 ~ ab4@6 ~@2 ab4@10 ~@6 ab4@7 ~ ab4@6 ~@2 ab4@10 ~@6 ab4@6 ~@2 ab4@6 ~@2 ab4@11 ~]/8",
  G: "g2 bb2 c3 ~@4 bb2", H: "c3@2 ~@4 eb3@2 e3@2 c3 ~@5", I: "[g2@2 bb2@2 c3@2 ~@4 g2@2 gb2@2 f2@17 ~]/2",
  J: "[g2 bb2 c3 ~@2 g2 gb2 f2@4 eb2@4 ab2@9]/3",
})).s("gm_electric_guitar_clean").gain(0.64).pan(0.3)

// chords · rock organ · "organ"
const rock_organ = note("<~@44 A@5 B@6 ~@61>".pickRestart({
  A: "[[c5,eb5,g5]@3 [bb4,d5,f5]@4 ab4 a4@2, ~@7 [c5,eb5]@3]/5", // Cm Bb Cm
  B: "[[c5,eb5,g5]@3 [bb4,d5,f5]@4 ab4 a4@4, ~@7 [c5,eb5]@5]/6", // Cm Bb Cm
})).s("gm_rock_organ").gain(0.56)

// other · tenor sax · "sax"
const tenor_sax = note("<~@55 A B@2 C D E F G H@2 I ~@31 J K L@2 M N O ~@2 P Q R S T U V@3 ~>".pickRestart({
  A: "~@2 g5@2 g5@2 eb5 c5", B: "[eb5@4 ~@4 g4@2 bb4@2 bb4@2 bb4@4 c5 ~ bb4@2 c5 ~@7 bb4 c5]/2",
  C: "eb5 c5 bb4 g4 f4 eb4 ~@2 ab4 [ab4,a4] gb4 ~ ab4 [ab4,a4] gb4 ~", D: "a4@2 ab4 gb4 ~@2 a4@2 ab4 gb4@3 ~@4",
  E: "~@2 eb5@8 ~@4 c5 eb5", F: "g5@6 f5 eb5 d5 eb5 f5@2 d5@4", G: "~@4 bb4@4 ~@2 bb4@2 g4@2 f4 ~",
  H: "[~ c5 eb5@4 c5 eb5@2 c5 eb5@2 c5 eb5@2 c5]/2", I: "eb5 c5 ~@6", J: "~@8 gb5@2 f5 ~ gb5@2 f5 ~",
  K: "gb5@2 f5 ~ gb5@2 f5 ~ gb5@2 f5 ~ gb5@2 f5 ~", L: "[gb5@2 f5 ~ gb5@2 f5 ~ gb5@2 f5 ~ eb5@2 c5@9 ~@9]/2",
  M: "~@6 c5 ~ c5 ~ c5 ~ c5 ~ c5 ~", N: "g5 ~@2 c5@3 c5@2", O: "f4 [f4,gb4] eb4 ~ f4 [f4,gb4] eb4 ~@9",
  P: "~@6 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4", Q: "g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4",
  R: "bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4",
  S: "gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 gb4 g4 bb4 ~", T: "~@4 e5@2 e5!2 f5@2 f5!2 gb5@2 gb5!2",
  U: "g5@6 ~@7 c5 ~@2", V: "[c5@4 c5 ~@5 g4 ~ gb4 ~ f4@7 ~ eb4@3 ~ f4 ~ g4 ~ ab4@8 ~@10]/3",
})).s("gm_tenor_sax").gain(0.56)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@15 A@11 B@5 C D E B@5 F D@3 G A@4 E A@5 H A@4 D A@6 B@5 C D E B@5 F D@6 A G A@2 I J A@2 G K L A@2 I J A@2 G K L A@2
  I J A@2 G M N G
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@10 x!3 ~@3", D: "~@2 x ~@2 x!2 ~", E: "~@4 x ~@5 x ~ x ~@2 x", F: "~@4 x ~@3 x!5 ~@3",
  G: "~ x ~@2", H: "~@4 x ~@7 x ~@2 x", I: "~@4 x ~@4 x!4 ~@3", J: "~@2 x!3 ~@11", K: "~@2 x!3 ~@5 x!3 ~@3", L: "~@7 x",
  M: "~@3 x!2 ~@2 x!2 ~@2 x!2 ~@3", N: "~@15 x",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@33 A ~@14 A ~@5 A ~@18 A ~@39 B A ~>".pickRestart({
  A: "~@7 x", B: "~ x ~ x ~ x ~@2",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@44 [~@5 x!2 ~] ~@71>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A@4 ~@11 B C@2 D C@4 D C@8 ~@2 C@5 E ~@13 F G ~@11 C@6 ~@2 C@5 E ~@8 C@2 G ~ C@2 H ~@2 C@2 H ~ C@2 H ~@2 C@2 H ~ B C I
  ~@3
>`.pickRestart({
  A: "~@7 x", B: "~ x!3", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x", F: "~@6 x!2", G: "x ~ x!3 ~@3", H: "x!3 ~",
  I: "x!2 ~@2",
})).gain(0.72)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@15 A@3 B C A@3 B C@2 ~@28 D ~@33 A@2 D ~ A@2 E ~@2 A@2 E ~ A@2 E ~@2 A@2 E ~ A@2 D ~@3
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~@3 x", D: "~ x ~@6", E: "~ x ~ x ~@4",
})).gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct("<~@19 A ~@4 A@2 ~@9 A ~ A ~ B ~@8 C ~@4 A C ~@20 A ~ A ~ B ~@36>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@2", C: "~@5 x!2 ~",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@14 [~ x] ~@101>").gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A ~@16 A ~@7 A B ~@2 A ~@4 A ~@5 A ~@8 C D ~@6 A ~@7 A B ~ B ~ B E F ~@2 B ~@3 B E B ~@2 B ~@3 B E B ~@2 B ~@4 G
  ~@2
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x", D: "~ x ~ x", E: "~@3 x ~@3 x", F: "~ x ~@2", G: "x ~@2 x ~ x ~ x",
})).gain(0.64)

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

stack(
  bass, epiano2, string_ensemble_1, lead_8_bass_lead, electric_guitar_clean, rock_organ, tenor_sax, kick, snare,
  snare_soft, clap, hihat, hihat_soft, low_tom, open_hat, mid_tom, crash, ride
)

More by Supertramp