Strudelify

Heroes and Villains

The Beach Boys

KeyA♭ majorTempo140 bpm
0:00/0:00
// Heroes and Villains — The Beach Boys
// 140 bpm, 4/4, key G# 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: duplicate parts dropped: ch 2 "Cello" contrabass (copy of ch 1 "Bass" acoustic bass)
// note: Full arrangement: all 134 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · acoustic bass · "Bass"
const bass = note("<~ A B A C D E F G F H A B A B A C D E F G F H A B ~@28 I@8 J@5 ~@68>".pickRestart({
  A: "db2@3 ab1 db2@3 ab1", B: "db2 db2@2 ab1 db2@3 ab1", C: "db2 db2@2 ab1 db2@3 bb1", D: "eb2@3 bb1 eb2@3 bb1",
  E: "eb2 eb2@2 bb1 eb2@3 bb1", F: "ab1@3 eb1 ab1@3 eb1", G: "ab1 ab1@2 eb1 ab1@3 eb1", H: "ab1 ab1@2 eb1 ab1@3 ab1",
  I: "[~@19 db2@9 ab1@3 db2@9 ab1@3 db2@3 db2@6 ab1@3 db2@9 ab1@3 db2@9 ab1@3 db2@9 ab1@3 db2@3 db2@6 ab1@3 db2@9 bb1@3 eb2@9 bb1@3 eb2@9 bb1@3 eb2@3 eb2@6 bb1@3 eb2@9 bb1@3 ab1@9 eb1@3 ab1@9 eb1@3 ab1@3 ab1@2]/8",
  J: "[~@4 eb1@3 ab1@9 eb1@3 ab1@9 eb1@3 ab1@9 eb1@3 ab1@3 ab1@6 eb1@3 ab1@9 ab1@3 db2@9 ab1@3 db2@9 ab1@3 db2@3 db2@6 ab1@3 db2@9 ab1@3 ~@5]/5",
})).s("gm_acoustic_bass").gain(0.67)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C A D E F G H I J K L J M A D N O P H F Q K ~@28 R S T U V W X Y Z@2 AA AB AC ~@68
>`.pickRestart({
  A: "[db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2", // Db
  B: "[db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~", // Db
  C: "[db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2", // Db
  D: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2 ~", // Eb
  E: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2", // Eb
  F: "[eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2", // Ab
  G: "[eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~", // Ab
  H: "[eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2", // Ab
  I: "[eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2", // Ab
  J: "[db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~", // Db
  K: "[db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2", // Db
  L: "[db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2", // Db
  M: "[db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2", // Db
  N: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2", // Eb
  O: "[eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2", // Ab
  P: "[eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2", // Ab
  Q: "[db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2", // Db
  R: "~@19 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Db
  S: "~ [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Db
  T: "~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Db
  U: "~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Db
  V: "~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [eb4,g4,bb4]@2 ~ [eb4,g4,bb4] ~", // Db Eb
  W: "~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~", // Eb
  X: "~ [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~", // Eb Ab
  Y: "~ [eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~", // Ab
  Z: "~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~", // Ab
  AA: "~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [eb4,ab4,c5] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Ab Db
  AB: "~ [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Db
  AC: "~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@2 ~ [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@7", // Db
})).s("gm_acoustic_guitar_steel").gain(0.2)

// other · french horn · "Horn"
const french_horn = note("<~ A B C@3 D E F G H I@3 J K L M@3 N O P Q R ~@28 S@8 T U@4 ~@68>".pickRestart({
  A: "db3@8 ~ ab2@3 db3@9 ab2@2 ~", B: "db3@6 ~@3 db3@4 ~@2 db3@5 ~ db3@2 ~",
  C: "[db3@8 ~ ab2@3 db3@9 ab2@2 db3@7 ab2@2 ~ db3@4 ~@2 db3@4 ~@2 db3@2 eb3@8 ~@2 eb3@4 ~@2 eb3@4 ~@2 eb3@3]/3",
  D: "~@3 eb3 ~@2 eb3@2 ~ eb3 ~@2 eb3@2 ~ eb3@4 ~@2 eb3@3", E: "~@3 ab2@4 ~@2 ab2@4 ~@2 ab2@4 ~@2 ab2@3",
  F: "~@2 ab2@4 ~@2 ab2@2 ~@2 ab2 ~@2 ab2@4 ~@2 ab2@2 ~", G: "ab2@6 ~@2 ab2@3 eb3@7 ~@2 eb3@3 ~",
  H: "ab2@3 eb3@5 ab2@2 ~@2 eb3@3 ab2@2 ~ eb3@3 ab2@3",
  I: "[~@9 ab2@3 db3@3 f3@3 ab3@3 b3@6 [db3,db4]@3 b3@3 ab3@3 db3@2 ~ db3@2 ~ db3@2 ~ db3@2 ~@2 d3 ~@7 ab2@2 ~ db3@9 ab2@2 ~, db3@12 ~@9 db3@4 ~@8 db3 ~@2 g3@6 ab3@12 ~@18, ~@6 db3 ~@2]/3", // Db
  J: "db3 ~@2 db3@4 ~@2 db3@4 ~@2 db3@5 ~ ab2@2 ~", K: "db3@8 ~ ab2@2 ~ db3@9 ab2 ~@2",
  L: "db3 ~@2 db3@4 ~@2 db3@4 ~@2 db3@6 ab2@2 ~",
  M: "[eb3@8 bb2@2 ~@2 eb3@9 bb2@2 eb3@2 ~ eb3@5 ~@2 eb3@5 ~ eb3@5 bb2@2 ~ ab2@8 ~@2 ab2@3 ~@2 ab2@4 ~@3 ab2 ~@2]/3",
  N: "ab2@3 eb3@5 ab2@5 ~@2 ab2@3 ~@2 ab2 ~@3", O: "ab2@7 ~@2 ab2 ~@2 ab2@7 ~@2 ab2 ~@2",
  P: "ab2 ~@2 ab2@4 ~@2 eb3@5 ~ ab2@3 eb3@3 ab2@2 ~", Q: "db3@9 db3@3 db3@7 ~@2 db3@3",
  R: "~@3 db3@4 ~@2 db3@4 ~@2 db3@2 ~ db3@4 ~@2",
  S: "[~@20 db3@7 ~ ab2@3 db3@2 ~ db3@5 ~ ab2@6 db3@6 ab2@3 db3@3 ab2@3 db3@3 ab2@3 ~ db3@8 ab2@2 ~ db3 ~@2 db3@6 ab2@6 db3@6 ab2@3 ~@3 ab2@3 db3@3 ab2@4 eb3@8 bb2@3 eb3@2 ~ eb3@4 ~@3 eb3@4 ~@2 eb3@5 bb2@3 eb3@3 bb2@3 ~ eb3@2 bb2@3 ab2@9 ~ ab2@2 ~ eb3@7 ~@2 eb3@3 ab2@4, ~@26 db3 ~@21]/8",
  T: "~@4 ab2@3 ~@3 ab2@3 ~@3 ab2@4 ~@2 ab2@2",
  U: "[~@4 ab2@2 ~ eb3@2 ~ eb3@4 ~@2 eb3@3 ab2@7 ~@3 ab2@3 eb3@2 ab2@3 eb3@3 ab2@2 ~ db3@9 [ab2,db3]@3 db3@3 f3@3 ab3@3 ab2@2 ~ db3@3 [ab2,db4]@3 b3@3 ~ ab2@2 ~@4 ab2@2 ~ db3@2 ~ db3@3 ~@4, ~@55 ab2@5 ~@4 b3@6 ~@6 ab3@3 g3@6 ab3@11]/4", // Db5
})).s("gm_french_horn").gain(0.2)

// other · church organ · "Organ"
const church_organ = note("<~@10 A B@2 ~@9 A B@2 ~@38 C D@2 ~@68>".pickRestart({
  A: "~@7 ab5", B: "[g5 ab5 b5 ab5 gb5 f5 b4 db5@9]/2", C: "~@16 ab5@3 g5@3 ab5@2",
  D: "[~ b5@3 ab5@3 gb5@3 f5@3 b4@3 db5@27 ~@5]/2",
})).s("gm_church_organ").gain(0.43)

// chords · drawbar organ · "Organ 2"
const drawbar_organ = note("<~@27 A@5 B@5 C@5 D@7 E@5 ~@26 F@4 G@5 H@4 ~@13 I@5 J@5 K@5 L@7 M@3 ~@3>".pickRestart({
  A: "[~@3 eb1@37]/5", B: "[~@11 ab0@109]/5", C: "[~@13 eb1@107]/5", D: "[~@15 ab0@122 f1@31]/7",
  E: "[~@30 eb1@31 gb0@55 ~@4, bb0@4 ~@11]/5",
  F: "[~ [f1,ab1]@11 ~@3 [gb1,bb1]@14 [f1,ab1]@14 [gb1,bb1]@14 [f1,ab1]@14 [gb1,bb1]@14 [f1,ab1]@11]/4", // Fm Gb Fm Gb Fm Gb Fm
  G: "[~@3 [gb1,bb1]@14 [f1,ab1]@14 [gb1,bb1]@16 [f1,ab1]@17 [gb1,bb1]@19 [f1,ab1]@20 [gb1,bb1]@17]/5", // Gb Fm Gb Fm Gb Fm Gb
  H: "[~@7 [f1,ab1]@26 [gb1,bb1]@59 ~@4]/4", I: "[~ eb1@9]/5", J: "[~@7 ab0@53]/5", K: "[~@2 eb1@13]/5",
  L: "[~@19 ab0@122 f1@27]/7", M: "[~@3 bb0@31 eb1@31 ~@7]/3",
})).s("gm_drawbar_organ").gain(0.24)

// chords · piano
const piano = note(`<
  ~ A B C@2 D@2 E F G H I@2 J@2 K L M@2 N O P Q R@2 ~@2 S T@7 U@6 V W@7 X@5 Y Z@2 AA AB AC AD@2 AE AF AG AH ~@14 AI@5
  AJ@2 AK@7 ~@12 AL@4 AM@5 AN@8 AO@8 ~@3
>`.pickRestart({
  A: "ab3 ~ ab3 ~ [ab3,db4,f4] ~ [ab3,db4] f4, f4@4 ~ f4@2 ~, db4@3 ~@5", // Db Db5
  B: "ab3 [db4,f4] ab3 db4 [ab3,db4] [db4,f4] ab3 db4", // Db Db5 Db
  C: "[ab3 ~ ab3 [ab3,f4] [db4,f4] ab3 [db4,f4] db4 ab3 [db4,f4] ab3 [db4,f4] [ab3,db4,f4] [ab3,db4] ab3!2, [db4,f4]@3 ~@4 f4@2 ~@4 f4@2 ~]/2", // Db Db5 Db
  D: "[[bb3,eb4,g4]@2 bb3 ~ bb3 [bb3,eb4] ~ [eb4,g4]@2 bb3@2 [eb4,g4] bb3 [eb4,g4]!2 bb3, ~@3 g4@3 ~ bb3 ~@8]/2", // Eb Eb5 Eb
  E: "ab3@2 [c4,eb4] ab3 [c4,eb4] ab3!2 [c4,eb4], ~@5 [c4,eb4]@2 ~", F: "ab3 [c4,eb4] ab3!2 [c4,eb4] ab3 [c4,eb4] ab3",
  G: "ab3@2 eb4 ab3 [ab3,eb4] [ab3,c4,eb4] [c4,eb4] ab3", // Ab5 Ab Cm
  H: "~ ab3 c4 ab3!2 [c4,eb4] ab3 [c4,eb4], eb4@2 ~ [c4,eb4]@2 ~@3", // Cm
  I: "[[db4,f4]@2 ab3 [db4,f4] [ab3,db4,f4] ab3 [db4,f4] [db4,f4]@2 ab3 [db4,f4] ab3 [db4,f4] ~ [db4,f4] ab3, ab3 ~@6 ab3 ~@8]/2", // Db
  J: "[ab3 ~ ab3!2 [db4,f4] ab3 [db4,f4] [db4,f4]@2 [db4,f4] ab3 f4 ab3 ~ ab3 f4, [db4,f4]@3 ~@4 ab3 ~@5 db4@3]/2", // Db
  K: "[db4,f4]@2 ab3 db4 [ab3,db4,f4] [db4,f4] ab3 [db4,f4], ab3 ~@7", // Db
  L: "ab3 [db4,f4] ab3 [db4,f4] [ab3,db4] [ab3,db4,f4] ab3 [db4,f4]", // Db Db5 Db
  M: "[[eb4,g4]@2 bb3 ~ bb3 eb4 bb3 [eb4,g4]@2 ~@2 g4 bb3 ~@2 g4, bb3 ~@2 g4@3 ~ bb3 ~ bb3@2 ~@3 bb3@2, ~@10 eb4@2 ~ eb4@2 ~]/2", // Eb
  N: "ab3@2 [ab3,c4,eb4] [c4,eb4] [ab3,c4] [c4,eb4] ~ [ab3,c4,eb4]", // Ab Cm Ab Cm Ab
  O: "~ [c4,eb4]@2 ab3 [c4,eb4] ~ [ab3,c4,eb4] ~, ~ ab3 ~@6", // Cm Ab
  P: "[c4,eb4]@2 [ab3,c4,eb4] [c4,eb4] ab3 [c4,eb4] ~ [c4,eb4], ab3 ~@7", // Cm Ab Cm
  Q: "~ [c4,eb4] ab3 ~ ab3 eb4 [ab3,c4,eb4] ~, ~@3 c4@3 ~@2", // Cm Ab
  R: "[[ab3,db4,f4] ~ [ab3,db4,f4] ab3 [db4,f4] ab3 [db4,f4] [db4,f4]@2 [ab3,db4,f4] ab3 [db4,f4] ab3 ~ ab3 ~, ~@7 ab3 ~@5 [db4,f4]@2 ~]/2", // Db
  S: "~@8 [db5,gb5,bb5]@3 ~, ~@3 eb4@5, ~@2 eb5", // Gb
  T: "[eb4@7 d4@8 ~@8 [db5,eb5,gb5,bb5]@7 ~@8 [db5,eb5,gb5,bb5]@8 ~@7 [db5,eb5,gb5,bb5]@8 eb4@8 d4@7 ~@8 [db5,eb5,gb5,bb5]@7 ~@8 [eb5,gb5,bb5]@8 ~@7 [c5,eb5,gb5,ab5]@8 ab3@8 g3@7 ~@8 [c5,eb5,gb5,ab5]@8 ~@7 [c5,eb5,gb5,ab5]@8, ~@15 eb4@15 bb3@15 ~ eb4@13 ~@17 eb4@15 bb3@15 ~ ab3@13 ~@17 ab3@15 ~ eb3@15, ~@33 db5@2 ~@21]/7", // Ebm7 Ebm Ab7
  U: "[~@7 [c5,eb5,gb5,ab5]@8 ab3@8 g3@7 ~@8 [c5,eb5,gb5,ab5]@8 ~@7 [c5,eb5,ab5]@8 ~@8 [db5,gb5,bb5]@6 ~ eb4@8 d4@7 ~@8 [db5,eb5,gb5,bb5]@8 ~@7 [db5,eb5,gb5,bb5]@8 ~@8 [db5,eb5,gb5,bb5]@7 eb4@7, ab3@13 ~@17 ab3@15 ~ eb3@15 eb4@13 ~@17 eb4@15 ~ bb3@15 eb4@13 ~@9, ~@53 gb5@6 ~@10 eb5@7 ~@68]/6", // Ab7 Ab Gb Ebm7
  V: "~ d4@8 ~@7 [db5,eb5,gb5,bb5]@8, ~@3 eb4@5", // Ebm7
  W: "[~@7 [eb5,gb5,bb5]@8 ~@8 [c5,eb5,gb5,ab5]@7 ab3@8 g3@8 ~@7 [c5,eb5,gb5,ab5]@8 ~@8 [c5,eb5,gb5,ab5]@7 ~@8 [c5,eb5,gb5,ab5]@7 ab3@8 g3@8 ~@7 [c5,eb5,gb5,ab5]@8 ~@8 [c5,eb5,ab5]@7 ~@8 [c5,f5,ab5]@6 ~@2 f4@7 e4@8, bb3@15 ab3@13 ~@18 ab3@15 eb3@15 ab3@13 ~@18 ab3@15 eb3@15 ~@31, ~@7 db5@6 ~@117 gb5@6 ~ f4@13 ~@18]/7", // Ebm Ab7 Ab Fm
  X: "[~@7 [c5,f5,ab5]@6 ~@10 [bb4,d5,f5]@7 ~@8 [bb4,eb5]@6 ~@2 eb4@6 ~ d4@8 ~@8 [bb4,eb5,gb5]@6 ~@9 [gb4,a4,db5]@29 ~@2 [db4,f4]@3 ab3@2, f4@15 bb3@15 eb4@15 ~@16 eb4@15 a3@39 ~@5, ~@19 gb5@4 ~@37]/5", // Fm Bb Eb5 Ebm Gbm Db
  Y: "~ [db4,f4]@3 ab3@3 [db4,f4]@3 [db4,f4]@3 ~@3 [db4,f4]@3 [db4,f4]@3 ab3@2, ~@13 ab3@6 ~@5", // Db
  Z: "~ [db4,f4]@3 ab3@3 [db4,f4]@3 [db4,f4]@6 ab3@3 [db4,f4]@3 ab3@2", // Db
  AA: "~ [db4,f4]@3 [db4,f4]@3 ~@3 [db4,f4]@3 ab3@3 [ab3,db4,f4]@3 [eb4,g4]@5, ~@19 bb3@3 ~@2", // Db Eb
  AB: "~ [bb3,eb4,g4]@3 bb3@3 [eb4,g4]@3 eb4@3 bb3@3 [eb4,g4]@3 ~@3 [eb4,g4]@2, ~@5 g4@3 ~@4", // Eb
  AC: "~ bb3@3 [eb4,g4]@3 [bb3,eb4,f4]@3 ~@3 [eb4,g4]@3 bb3@3 [ab3,c4,db4,eb4]@3 ~@2, ~@7 g4@6 ~@11", // Eb Bbsus4 Eb Ab
  AD: "[~ [c4,eb4]@3 ab3@3 [ab3,c4,eb4]@3 [c4,eb4]@3 ab3@3 [c4,eb4]@3 ab3@3 ~@3 ab3@3 ab3@3 [ab3,c4,eb4]@3 ab3@3 [c4,eb4]@3 ab3@3 [c4,eb4]@5, ~@22 [c4,eb4]@6 ~@15 ab3@3 ~@2]/2", // Cm Ab Cm Ab Cm
  AE: "~ [c4,eb4]@3 ab3@3 [c4,eb4]@3 [c4,eb4]@3 ab3@3 [c4,eb4]@3 ~@3 [c4,eb4]@2", // Cm
  AF: "~ ab3@3 [ab3,c4,eb4]@3 [c4,eb4]@3 ab3@3 [c4,eb4]@3 ab3@3 [ab3,db4,f4]@3 ~@2", // Ab Cm Db
  AG: "~ [ab3,db4,f4]@3 ab3@3 [db4,f4]@3 ab3@3 [db4,f4]@3 [ab3,db4,f4]@3 ~@3 [ab3,db4,f4]@2", // Db
  AH: "~ ab3@3 [db4,f4]@3 ~@3 [db4,f4]@3 [db4,f4]@3 ab3@3 ~@5, ~@7 ab3@6 ~@11", // Db
  AI: "[~@8 [ab5,ab6]@7 ~@7 bb6@7 db6@3 f6@3 ~ [ab5,ab6]@7 eb6@3 gb6@4 [bb5,bb6]@7 db6@3 f6@3 ~ [ab5,ab6]@7 eb6@3 gb6@3 ~ [bb5,bb6]@7 [db5,db6]@3 [f5,f6]@4 [ab5,ab6]@7 eb6@3 [gb5,gb6]@3 ~ [bb5,bb6]@7 [db5,db6]@3 [f5,f6]@4, ~ [db5,db6]@11 ~@3 eb5@11 ~@3 db5@7 ~@7 eb5@11 ~@3 db5@7 ~@7 eb5@7 ~@21 eb5@7 ~@14, ~@4 [f5,f6]@11 eb6@7 bb5@11 ~@87, ~@18 gb5@14 f5@11 ~@3 gb5@11 ~@3 f5@11 ~@3 gb5@11 ~@35, ~@18 gb6@11 ~@91]/5", // Ab Bb Ab Bb Db F Ab Gb …
  AJ: "[[ab5,ab6]@7 [eb5,eb6]@4 [gb5,gb6]@4 [bb5,bb6]@8 [db5,db6]@4 [f5,f6]@4 [ab5,ab6]@9 [eb5,eb6]@4 [gb5,gb6]@4]/2", // Ab Eb Gb Bb Db F Ab Eb …
  AK: "[~ [bb5,bb6]@10 [db5,db6]@5 [f5,f6]@5 [ab5,ab6]@10 eb6@6 gb5@6 [bb5,bb6]@12 db5@6 f5@6 [ab5,ab6]@14 ~@31 db6@34 ~@22, ~@31 eb5@11 ~ eb6@6 ~@6 db6@19 ~@7 eb5@65 ~@22, ~@37 gb6@18 ~@6 f6@20 eb6@15 [gb6,bb6]@16 db7@28 ~@28, ~@44 gb5@29 ~@11, ~@48 bb5@25 ~@11]/7", // Bb Db F Ab Bb Ab Gb
  AL: "[~@20 [db5,gb5,bb5]@6 ~ eb4@8 d4@8 ~@7 [db5,eb5,gb5,bb5]@8 ~@8 [db5,eb5,gb5,bb5]@7 ~@8 [db5,eb5,gb5,bb5]@7 eb4@8, ~@12 eb4@15 ~@16 eb4@15 bb3@15 eb4@13 ~@10, ~@20 eb5@7 ~@69]/4", // Gb Ebm7
  AM: "[d4@8 ~@7 [db5,eb5,gb5,bb5]@8 ~@8 [eb5,gb5,bb5]@7 ~@8 [c5,eb5,gb5,ab5]@8 ab3@7 g3@8 ~@7 [c5,eb5,gb5,ab5]@8 ~@8 [c5,eb5,gb5,ab5]@7 ~@8 [c5,eb5,gb5,ab5]@8 ab3@5, ~@8 eb4@15 bb3@15 ab3@13 ~@18 ab3@15 eb3@15 ab3@13 ~@8, ~@31 db5@6 ~@83]/5", // Ebm7 Ebm Ab7
  AN: "[~@2 g3@8 ~@8 [c5,eb5,gb5,ab5]@7 ~@8 [c5,eb5,ab5]@7 ~@8 [db5,gb5,bb5]@6 ~@2 eb4@7 d4@8 ~@8 [db5,eb5,gb5,bb5]@7 ~@8 [db5,eb5,gb5,bb5]@8 ~@7 [db5,eb5,gb5,bb5]@8 eb4@7 d4@8 ~@8 [db5,eb5,gb5,bb5]@7 ~@8 [eb5,gb5,bb5]@8 ~@7 [c5,eb5,gb5,ab5]@8 ab3@8 g3@6, ~@10 ab3@15 eb3@15 eb4@13 ~@18 eb4@15 bb3@15 ~ eb4@13 ~@17 eb4@15 bb3@15 ~ ab3@13 ~@16, ~@33 gb5@6 ~@9 eb5@8 ~@99 db5@6 ~@31]/8", // Ab7 Ab Gb Ebm7 Ebm Ab7
  AO: "[~@9 [c5,eb5,gb5,ab5]@7 ~@8 [c5,eb5,gb5,ab5]@8 ~@7 [c5,eb5,gb5,ab5]@8 ab3@8 g3@7 ~@8 [c5,eb5,gb5,ab5]@8 ~@7 [c5,eb5,ab5]@8 ~@7 [c5,f5,ab5]@6 ~@2 f4@8 e4@7 ~@8 [c5,f5,ab5]@6 ~@9 [bb4,d5,f5]@8 ~@8 [bb4,eb5]@6 ~@24, ~ ab3@15 eb3@15 ~ ab3@13 ~@17 ab3@15 ~ eb3@15 ~@46 bb3@15 ~@8 gb5@8 ~@22, ~@85 gb5@6 ~@2 f4@13 ~@17 f4@15 ~@16 eb4@15 ~@23]/8", // Ab7 Ab Fm Bb Eb5
})).s("gm_piano").gain(0.16)

// other · tubular bells · "Tubular B"
const tubular_bells = note(`<
  ~@27 A@2 B@3 C@3 D@2 E@2 ~ F@2 G@2 ~ H ~ I@2 ~ J@2 ~@54 K@2 ~ L@2 M@3 N@2 O@2 ~ P@2 Q@3 R ~ S@3 T@2 ~@3
>`.pickRestart({
  A: "[~@9 eb5@28 ~@11]/2", B: "[~@7 eb5@15 ~@2]/3", C: "[~@11 ab4@45 ~@16]/3", D: "[ab4@5 ~@3]/2",
  E: "[~@13 eb5@30 ~@5]/2", F: "[~@2 eb5@31 ~@15]/2", G: "[~@5 ab4@10 ~]/2", H: "~@4 ab4@15 ~@5", I: "[~@17 f5@31]/2",
  J: "[~@3 eb5@14 ~@7]/2", K: "[~@3 eb5@7 ~@2]/2", L: "[~ eb5@45 ~@2]/2", M: "[~@14 ab4@45 ~@13]/3",
  N: "[~ ab4@10 ~@5]/2", O: "[~@17 eb5@30 ~]/2", P: "[~@5 eb5@31 ~@12]/2", Q: "[~@19 ab4@30 ~@23]/3",
  R: "~@7 ab4@15 ~@2", S: "[~@20 f5@31 ~@21]/3", T: "[~@5 eb5@14 ~@5]/2",
})).s("gm_tubular_bells").gain(0.28)

// drums · kick
const kick = s("bd").struct("<~ A@5 B A B A@7 B A@8 ~@28 C D@10 E F ~@68>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x!2 ~ x!2 ~@2 x", C: "~@5 x", D: "~@4 x ~@2 x ~@8 x ~@2 x ~@4",
  E: "~@4 x ~@2 x ~@8 x ~@3 x ~@3", F: "~@5 x ~@2 x ~@15",
})).gain(0.19)

// drums · snare
const snare = s("sd").struct(`<
  ~
  [~ x ~ x]!23
  [~@6 x ~@12 x ~@4]
  ~@29
  [~ x ~@12 x ~@9]
  [~ x ~@11 x ~@10]!10
  [~ x ~@5 x ~@4]
  ~@68
>`).gain(0.33)

// drums · low tom
const low_tom = s("lt").struct("<~ [~ x ~ x]!24 ~@29 [~ x ~@12 x ~@9] [~ x ~@11 x ~@10]!10 [~ x ~@12 x ~@9] ~@68>")
  .gain(0.33)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@28 A B C D E F G H I J K L M N O P Q R E S T U V W ~@55 X ~ Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP G AQ
  AR ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@11 x", C: "~@17 x ~@3 x ~@2", D: "~ x ~@4", E: "~@11 x ~@12", F: "~@6 x ~@3 x ~@6 x ~@6",
  G: "~@3 x!2 ~", H: "x ~@18 x ~@3 x", I: "~@3 x ~@7 x", J: "x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~@10",
  K: "~@8 x ~@3 x ~@6 x ~@4", L: "~@7 x ~@7 x ~@2 x ~@5", M: "~@2 x ~@10 x ~@10", N: "~@3 x ~@4",
  O: "x ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~@8", P: "~@3 x ~@2 x ~@15 x ~", Q: "~@13 x ~@3 x ~@3 x ~@2",
  R: "~@4 x ~@14 x ~@3 x", S: "~@2 x ~@3 x ~@3 x ~@6 x ~@6", T: "~@3 x!2 ~@3", U: "x ~@14 x ~ x ~ x ~ x ~ x",
  V: "~ x ~ x!2 ~@5 x ~@3 x ~@7 x ~", W: "~ x ~@11 x ~@10", X: "~@19 x ~@4", Y: "~ x ~@18 x ~@3", Z: "x!2 ~",
  AA: "~@7 x ~@4", AB: "~@9 x ~@3 x ~@7 x ~@2", AC: "~@4 x!2", AD: "~@3 x ~@18 x ~", AE: "~ x ~@3 x ~@6",
  AF: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@7", AG: "~@12 x ~@2 x ~@7 x", AH: "~@5 x ~@3 x ~ x", AI: "~@6 x ~@10 x ~@6",
  AJ: "~ x", AK: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@4", AL: "~@3 x ~ x ~@6", AM: "~ x ~@14 x ~@3 x ~@3",
  AN: "x ~@7 x ~@14 x", AO: "~@3 x ~@10 x ~@9", AP: "~@6 x ~@2 x ~@3 x ~@7 x ~@2", AQ: "~@3 x ~@15 x ~ x!2 ~",
  AR: "x!5 ~@2 x ~ x ~@2",
})).gain(0.09)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@28 A B ~ C D E F ~ G ~ H I ~ J ~ B ~ C D K F ~@2 L ~@55 M N ~ O P Q ~ C R ~ S ~ T U ~ N ~ O P V ~ C ~@5
>`.pickRestart({
  A: "~@11 x ~@12", B: "~@3 x", C: "x", D: "~@7 x ~@16", E: "~@13 x ~@10", F: "~@5 x", G: "~ x ~@6", H: "~@2 x",
  I: "~@11 x", J: "~@5 x ~@18", K: "~@13 x ~ x ~@8", L: "~@3 x ~@4", M: "~@5 x ~@2", N: "~@7 x", O: "~ x ~@4",
  P: "~@5 x ~@6", Q: "~@17 x ~@6", R: "~ x ~@2", S: "~@19 x ~@4", T: "~ x ~@10", U: "~ x ~", V: "~@17 x ~ x ~@4",
})).gain(0.09)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@27 A B C D E F G H I J K L M N O P Q R S T U V W X Y ~@54 Z AA AB AC AD AE AF AG AH T AI AJ AK AL AM AN AO AP AQ AR
// … 90 more lines

More by The Beach Boys