Strudelify
Wuthering Heights cover art

1978 · The Kick Inside

Wuthering Heights

Kate Bush

KeyD♭ majorTempo61 bpm
0:00/0:00
// Wuthering Heights — Kate Bush
// 61 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 12 "BOWEDGLASS" pad bowed (copy of ch 4 "NYLON GTR" acoustic guitar nylon)
// note: Full arrangement: all 57 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(61/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 · "FINGERDBAS"
const bass = note(`<
  ~@11 A B C D E C F G H I J K L M N O P Q R S T U S V W X Y Z AA AB B C D E C AC E C AC B C D E C AC AD
>`.pickRestart({
  A: "f3@7 ~", B: "gb2@3 f2 eb2@2 ~ eb2 ab1@5 eb2 ab2@2", C: "db2@2 ~ db2 gb2@5 db2 gb2 db2 gb1@2 ~ gb1",
  D: "ab1@2 ~ ab1 db2@2 ~ db2 gb2@7 db2", E: "gb2@3 f2 eb2@2 ~ eb2 ab1@5 eb2 ab2 c2",
  F: "ab1@2 ~ ab1 db2@2 ~ db2 gb2@5 ~ gb2@2", G: "a2@5 e2@3 a1@4 a2@2 g2 gb2", H: "f2@6 c3 f2 e2@5 ~ e2@2",
  I: "db2@4 ~ db2@3 a1@5 e2 a2@2", J: "f2@6 c3 f2 e2@6 e2@2", K: "db2@5 ~ db2@2 a1@5 e2 a2 g2", L: "f2@3 f2 e2@3 e2",
  M: "db2@4 ~ db2 ab2 db2 ab2@5 eb2 ab1@2", N: "eb2@2 ~ eb2 gb2@2 ~ gb2 f2@3 c3@2 f3 c3 f2",
  O: "eb2@2 ~ eb2 gb2@2 ~ gb2 ~ f2 c3 f3@2 f2 c3 f2", P: "eb2@2 ~ eb2 gb2@2 ~ gb2 f2@3 f3@3 f2@2",
  Q: "~ f3@2 f2@2 f3 f2@2 gb2@3 f2 eb2@2 ~ eb2", R: "ab1@5 eb2 ab2@2 db2@2 ~ db2 gb2@4",
  S: "~ db2 gb2 db2 gb1@2 ~ gb1 ab1@2 ~ ab1 db2@2 ~ db2", T: "gb2@7 db2 gb2@3 f2 eb2@2 ~ eb2",
  U: "ab1@5 eb2 ab2 c2 db2@2 ~ db2 gb2@4", V: "gb2@4 ~ gb2@2 ab2 bb2@4 ~ bb2 ~ bb2",
  W: "ab2 ~ ab2@3 eb3@2 ab2 gb2 ~ gb2@3 gb2 ~ f2", X: "eb2@2 ~ eb2 db2 ab2 db3@2 bb2@5 f3@2 bb2",
  Y: "ab2@3 f3@2 eb3 bb2@2 gb2@5 ~ gb2@2", Z: "eb2@2 ~ eb2 db2@4 bb1@5 ~ bb1@2", AA: "bb2@5 ~ bb2@2 gb3@8", AB: "bb2",
  AC: "ab1@2 ~ ab1 db2@2 ~ db2 gb2@4 ~ gb2@2 db2", AD: "gb2@3 f2 eb2@2 ~ eb2 ab1@5 ~@3",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E F G H I J K L M N O M N O P@3 Q R S T U@3 V W@2 X W@2 Y Z AA Z AB AC AD M N O M N O AE AF AG AE AH AG AE AI
  AG AJ
>`.pickRestart({
  A: "~@5 a5!3, [a3,e4], e6@2 b5@2 db6@2 e6@2 e6@7 ~, ~ db6@2 e6@2 b5@2 db6@2 db6@6 ~", // A5
  B: "~@10 a6@5 ~, [a3,e4]@15 ~, e7@2 b6@2 db7@2 e7@2 e7@7 ~, ~ db7@2 e7@2 b6@2 db7@2 db7@6 ~", // A5
  C: "~ db5@4 ~@2 db5 [f4,c5]@5 f4 a4 f3, [a3,e4]@3 b4 ~@3 [f4,c5], a4@4 ~ a4@2 ~ [f3,a4]@7 ~", // F5 A5 F5 F
  D: "[e3,e4,ab4,b4]@8 db4 ~ e4 ~@4 db4, ~@8 db3@7 ~, ~@8 [f4,ab4]@3 f4@2 f4@2 ~, ~@9 db4@5 ab3@2, ~@3 ab4", // E Fm
  E: "[a4,db5]@5 ~@2 db5 [f3,f4,a4,c5]@5 f4 [a4,c5] f3, [a3,e4] ~, ~@5 a4@2 ~@7 f4@2, ~@3 b4 ~@4", // A F Am A5
  F: "~ b4@7 db4 ~ e4 f4 ~@3 db4, [e3,e4,ab4]@4 db3@3 ab3, ~@8 [f4,ab4]@3 ~ ab4@4, ~@9 db4@4 f4@2 ~", // E Fm
  G: "[a2,e4,a4]@6 g2@2 ~ c5@7, ~@8 [f2,f4,a4]@7 ~", H: "[e3,e4,ab4,b4]@8 ~ ab4@7, ~@8 [db3,db4,f4]@7 ~",
  I: "eb4@6 eb4 db4 ~@3 eb2 ~ bb3 ~ gb2, ab2@15 ~, [c4,ab4]@4 eb2 [eb4,gb4] gb2 ~, ~@9 bb3@4 ~ [bb3,eb4,gb4]@2", // Fm Ebm
  J: "~ bb3 ~ f2 ~ bb3 ~ f2 ~ bb3 ~ eb2 ~ bb3 ~ gb2, f2@2 [bb3,c4,f4]@2 f2@2 f5@4 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@2, ~@5 [bb5,c6]@6 ~@5, ~@6 [bb3,c4,f4]@2 eb2@3 ~ gb2@2 ~@2", // Bbsus2 Ebm Bbsus2
  K: "~ bb3 ~ f2 ~ bb3 ~ f2 ~ bb3 ~ eb2 ~ bb3 ~ gb2, f2@2 [bb3,c4,f4]@2 f2@2 f5@5 ~ gb2@2 ~@2, ~@5 [bb5,c6]@6 ~@5, ~@6 [bb3,c4,f4]@2 eb2@2 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@2", // Bbsus2 Ebm
  L: "~ bb3 ~ f2 ~ bb3 ~ f2 ~ bb3 ~ f2 ~ bb3 ~ f2, ~ [bb3,c4,f4] f2 [bb3,c4,f4] f2 [bb3,c4,f4] f2 [bb3,c4,f4]", // Bbsus2
  M: "[gb4,bb4] ~@3 gb5 ~ bb5 [gb3,db5] eb5 ~@2 ab5 ~ c5 ~ ab3, gb3@3 bb5@2 ~@4 c5@3 ab3@3 ~, db5@2 db5@2 ~ [gb3,db5]@2 ~ [ab3,ab5]@2 eb5@2 ~@2 [ab4,c5,eb5]@2", // Gb Gb5 Ab
  N: "db4@2 ~ db4 [gb3,bb4,db5]@2 ~@3 bb4 ~ gb3 ~ bb4 [bb4,db5] gb3, [db5,f5]@4 gb5@5 ~@5 gb5@2, ab4 ~ ab4@2 ~@2 bb4@2 gb3@2 ~@2 gb3@2 ~@2, ~@7 db5@2 ~ [bb4,db5,gb5]@3 ~@3", // Gb Bbm Db Gb
  O: "[ab3,eb5]@2 [c5,eb5] ab3 [db4,db5,f5]@2 ab4 db4 [gb3,db5]@2 ~ gb3 ~@2 db5 gb3, ab4@6 ~@2 bb4 ~ bb4@2 gb3@2 ~@2, c5 ~@7 gb5@7 ~, ~@11 db5@2 bb4@2 ~", // Ab5 Cm Db Gb5
  P: "[b4 ~@4 a4 b4 db5 a4@2 ~@3 b5 ~ a3 c5@2 ~@3 a4 ~ f3 [e3,b4]@2 ~@3 ab4 [b4,e5] ~@3 e4 ~@2 db4 ab3 db4 [a3,a4]@2 ~@5 a3, [a3,e5]@4 a3@4 [a3,db5]@5 ~@3 [f3,a4,f5]@4 f3@3 ~@5 e3@2 ~ e3@2 ~@10 a4@2 e4@3, a4@2 b4@3 ~@6 a4@2 ~ db6@4 ~@9 b4@2 ~@3 db3@7 ~@9, ~ db5@4 ~@7 a3@2 ~@5 [a4,f5]@3 [a4,c5,f5]@2 ab4 ~ ab4@2 ~@2 ab4@3 db4@3 ab4@4 db5@5 ~ [a4,db5]@2, ~@3 a4@2 ~ [a4,e5]@2 e4 ~ e4@3 ~@2 a5@3 c5@4 ~@2 e5@5 ~@6 f4@5 e4 ~ e4@2 a3@3 ~]/3", // E5 A A5 A F Dm F A …
  Q: "[f3,a4,c5]@2 f4 ~ [f4,g4] ~ f4 f3 [e3,e4,ab4]@2 ~@3 e4 [e4,ab4] e3, f4 ~@2 f3@4 ~@4 ab4@2 ~@3, ~@4 c5@3 ~ b4@5 ~ b4@2, ~@5 a4@2 ~@3 e4@2 e3@2 ~@2", // F Fsus2 E
  R: "[db4,f4] ~ e4 ~@2 db4 ~ db4 ~@7 db5, db3@4 ~@3 a3, ab4@3 f4@5 ~ e4@3 e4@3 ~, ~ db4@3 ab4@4 ~@2 [a4,db5]@5 ~, ~@6 ab3@2 a3@3 a3@2 b4@3", // Db A
  S: "~@2 g4 ~@2 f4!2 f3 [e3,ab4]@2 ~@3 e4 ~ e3, f3@3 a4@2 ~ [a4,c5]@2 e4 ~ e4@2 e3@3 ~, ~ f4@3 f3@2 ~@5 ab4@2 ~ [e4,ab4,b4]@2, ~@2 c5@3 ~@3 b4@5 ~@3", // E Am E
  T: "[db3,db4,f4]@2 ~@3 db4 [db4,f4,ab4] db3 [ab2,eb4]@2 ~@3 c4 ~ ab2, ab4@5 ~@3 ab4@5 ~@3, ~@2 db4@2 db3@2 ~@5 eb4@2 ~ [c4,eb4,ab4]@2, ~@3 f4@2 ~@3 c4 ~ c4@2 ab2@2 ~@2", // Db Ab5 Ab
  U: "[~@3 eb2 ~ bb3 ~ gb2 ~ bb3 ~ f2 ~ bb3 ~ f2 ~ bb3 ~ eb2 ~ bb3 ~ gb2 ~ bb3 ~ f2 ~ bb3 ~ f2 ~ bb3 ~ eb2 ~ bb3 ~ gb2 ~ bb3 ~ f2 ~ bb3 ~ f2, eb2@2 [eb4,gb4]@2 gb2@2 ~@2 f2@2 ~@2 f2@2 f5@4 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~ [bb3,c4,f4]@3 ~ f5@5 ~ gb2@2 ~@6 f2@2 ~@2, ~ bb3@4 ~ [bb3,eb4,gb4]@2 ~@2 [bb3,c4,f4]@3 [bb5,c6]@6 ~@10 [bb5,c6]@6 ~@13, ~@14 [bb3,c4,f4]@2 eb2@3 ~ gb2@2 ~@2 f2@2 ~@2 f2@2 [bb3,c4,f4]@2 eb2@2 [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@2 ~@2 [bb3,c4,f4]@3 ~ [bb3,c4,f4]@2]/3", // Ebm Bbsus2 Ebm Bbsus2 Ebm Bbsus2
  V: "~ bb3 ~ f2 ~ bb3 ~ f2 [gb4,bb4] ~@3 gb5 ~ bb5 [gb3,db5], f2@2 [bb3,c4,f4]@2 f2@2 [bb3,c4,f4]@2 gb3@3 bb5@2 ~@3, ~@8 db5@2 db5@2 ~ [gb3,db5]@2 ~", // Gb Gb5 Bbsus2 Gb5
  W: "[eb5 ~@2 ab5 ~ c5 ~ ab3 db4@2 ~ db4 [gb3,bb4,db5]@2 ~@3 bb4 ~ gb3 ~ bb4 [bb4,db5] gb3 [ab3,eb5]@2 [c5,eb5] ab3 [db4,db5,f5]@2 ab4 db4, [ab3,ab5]@2 eb5@2 ~@2 [ab4,c5,eb5]@2 [db5,f5]@4 gb5@5 ~@5 gb5@2 c5 ~@7, ~ c5@3 ab3@3 ~ ab4 ~ ab4@2 ~@2 bb4@2 gb3@2 ~@2 gb3@2 ~@10, ~@15 db5@2 ~ [bb4,db5,gb5]@3 ~@3 ab4@6 ~@2]/2", // Gb Bbm Ab5 Cm Db Ab Db Gb
  X: "[gb3,db5]@2 ~ gb3 ~@2 db5 gb3 [gb4,bb4] ~@3 gb5 ~ bb5 [gb3,db5], gb5@7 ~@4 bb5@2 ~@3, bb4 ~ bb4@2 gb3@2 ~@2 gb3@4 ~ [gb3,db5]@2 ~, ~@3 db5@2 bb4@2 ~ db5@2 db5@2 ~@4", // Gb5 Gb Gb5
  Y: "[gb3,db5]@2 ~ gb3 ~@2 db5 gb3 [bb2,f4]@2 ~@3 db4 ~ bb2, gb5@7 ~@4 f4@2 ~ [db4,f4,bb4]@2, bb4 ~ bb4@2 gb3@2 ~@2 db4 ~ db4@2 bb2@2 ~@2, ~@3 db5@2 bb4@2 ~ bb4@5 ~@3", // Gb5 Bb5 Bbm
  Z: "[ab2,eb4,ab4]@2 c4!2 ~ c4 ~ ab2 [gb2,db4]@2 ~@3 bb3 [bb3,db4,gb4] gb2, c4 ~@2 [eb4,ab4]@2 ~ [c4,eb4,ab4]@2 gb4@5 ~@3, ~@4 ab2@2 ~@2 bb3 ~ bb3@2 gb2@2 ~@2, ~@11 db4@2 ~@3", // Ab5 Gb5 Gb Ab5 Ab
  AA: "[bb3,db4] bb3 [bb3,db4,gb4] eb2 [db4,f4,ab4] db4!2 db2 [bb2,f4]@2 ~@3 db4 ~ bb2, [eb2,gb4]@2 ~@2 db2@2 [f4,ab4]@2 bb4@5 ~@3, ~@8 db4 ~ db4@2 bb2@2 ~@2, ~@11 f4@2 ~ [db4,f4,bb4]@2", // Bbm Gb Db Bb5 Ebm Fm Bbm
  AB: "[bb3,db4,gb4] bb3 [bb3,db4,gb4] eb2 [db4,f4,ab4] db4 ~ db2 [db4,f4]@2 ~@3 db4 ~ bb2, eb2@2 ~@2 db2@2 [db4,f4,ab4]@2 [bb2,bb4]@5 ~@3, ~@5 db4 bb2 ~, ~@11 f4@2 ~ [db4,f4,bb4]@2", // Gb Db Bb Bbm
  AC: "[bb2,eb4,ab4]@2 c4!2 ~ c4 ~ bb2 bb5 ab5 db5 bb5 ab5 db5 bb5 ab5, c4 ~@2 [eb4,ab4]@2 ~ [c4,eb4,ab4]@2 ~@8, ~@2 bb2 ~@5", // Ebsus4 Ab5 Ab
  AD: "~ f5 eb5 db6 ~ f5 eb5 db6 ~ f5 eb5 db6 ~ f5 eb5 db6, db6 ~ db6 ~ db6 ~ db6 ~",
  AE: "db5@2 ~@2 gb5 ~ bb5 [gb3,db5] eb5 ~@2 ab5 ~ c5 ~ ab3, gb3@3 bb5@2 ~@4 c5@3 ab3@3 ~, bb4 ~ db5@2 ~ [gb3,db5]@2 ~ [ab3,ab5]@2 eb5@2 ~@2 [c5,eb5]@2", // Gb5 Ab Cm
  AF: "db4@2 ~ db4 [gb3,bb4]@2 ~@3 bb4 ~ gb3 ~ bb4 db5 gb3, f5@4 gb5@5 ~@5 gb5@2, ab4 ~ ab4@2 ~@2 bb4@2 gb3@2 ~@2 gb3@2 ~@2, ~@7 db5@2 ~ [db5,gb5]@3 ~@3", // Gb Gb5
  AG: "[ab3,eb5]@2 [c5,eb5] ab3 [db4,db5,f5]@2 ab4 db4 [gb3,db5]@2 ~ gb3 ~@2 db5 gb3, c5 ~@7 gb5@7 ~, ~@5 bb4 gb3 ~, ~@11 db5@2 bb4@2 ~", // Ab5 Cm Db Gb5
  AH: "db4@2 ~ db4 [gb3,db5]@2 ~@3 bb4 ~ gb3 ~ bb4 db5 gb3, f5@4 gb5@5 ~@5 gb5@2, ab4 ~ ab4@2 ~@2 bb4@2 gb3@2 ~@2 gb3@2 ~@2, ~@7 db5@2 ~ [db5,gb5]@3 ~@3", // Gb5
  AI: "db4@2 ~ db4 [gb3,db5]@2 ~@3 bb4 ~ gb3 ~ bb4 db5 gb3, [db5,f5]@4 gb5@5 ~@5 gb5@2, ~ ab4 ~ bb4 gb3 ~ gb3 ~, ~@7 db5@2 ~ [db5,gb5]@3 ~@3", // Gb5 Db Gb5
  AJ: "db5@2 ~@2 gb5 ~ bb5 [gb3,db5] eb5 ~@2 ab5 ~@4, gb3@3 bb5@2 ~@4 c5@3 ~@4, bb4 ~ db5@2 ~ [gb3,db5]@2 ~ [ab3,ab5]@2 eb5@2 ~@4", // Gb5 Ab
})).s("gm_piano").gain(0.29).pan(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A@3 ~@8 B ~@6 C@5 D@2 E@4 F@3 G@3 ~@6 H I J@2 I K L I K H I J@2 I K M>".pickRestart({
  A: "[~@15 [e6,e7]@26 ~@7]/3", B: "[f2,f3]",
  C: "[~ [db4,e4] [c4,f4] [b3,e4] [f3,db4] [db4,e4] [c4,f4] [b3,e4] [f3,db4] [db4,e4,a4], ~ a3@2 ab3@2 a3@2 ab3@2 ~]/5", // Dbm F5 E5 Db Dbm F5 E5 Db …
  D: "[[c4,f4,a4]@8 [b3,e4]@8 [db4,f4]@8 [c4,eb4,ab4]@7 ~, ~ ab4@2 ~]/2", // F E5 Db Ab
  E: "[[eb2,eb3] [gb2,gb3] [f2,f3,c4]@2 [eb2,eb3] [gb2,gb3] [f2,f3,c4]@2 [eb2,eb3] [gb2,gb3] [f2,f3,c4]@4 [gb3,bb3,db4,db5]@2, bb3@7 ~, db4 ~ db4 ~ db4 ~@3]/4", // Eb Gb F5 Eb Gb F5 Eb Gb …
  F: "[eb5@6 f5 gb5 f5@2 ab4@2 bb4@8 db5@4 [ab3,c4,eb4,c5]@4 [ab3,db4,f4]@4 ~@8 db5@8, [ab3,c4,eb4]@2 [ab3,db4,f4] [gb3,bb3,db4]@3 ~ db5@3 ~@2, ~@2 [gb3,bb3,db4]]/3", // Ab Db Ab Db Gb
  G: "[eb5@6 f5 gb5 f5@2 ab4@2 bb4@8 db5@4 [c4,eb4,c5]@4 [db4,f4]@4 [gb3,bb3,db4]@8 ~@8, [ab3,c4,eb4]@2 [ab3,db4,f4] [gb3,bb3,db4]@3 ab3@2 ~@4, ~@7 db5@3 ~@2]/3", // Cm Db Gb Ab Db Gb
  H: "[gb3,bb3,db4,db5]@8 eb5@6 f5 gb5, ~ [ab3,c4,eb4]", I: "f5 ab4 bb4@4 db5@2, [ab3,db4,f4] [gb3,bb3,db4]@3",
  J: "[[ab3,c4,eb4,c5]@4 [ab3,db4,f4]@4 ~@8 db5@8 eb5@6 f5 gb5, ~ db5@3 ~@4, ~ [gb3,bb3,db4]@2 [ab3,c4,eb4]]/2", // Ab Db Gb Ab
  K: "[c4,eb4,c5] [db4,f4] [gb3,bb3,db4]@2, ab3 ~, ~ db5@3", L: "db5@8 eb5@6 f5 gb5, ~ [ab3,c4,eb4]",
  M: "[gb3,bb3,db4,db5] [ab3,c4,eb4], ~@4 eb5@3 ~", // Gb Ab
})).s("gm_string_ensemble_1").gain(0.27).pan(0.1)

// other · harpsichord · "HARPSICHRD"
const harpsichord = note("<~@8 A B C D ~@13 E F@2 G ~@28>".pickRestart({
  A: "~@9 bb4 ~ bb4 db5 bb4 gb4 bb4, ~@4 db5 gb4 ~@2",
  B: "c5 bb4 ~ bb4 c5 bb4 f4 bb4 db5 bb4 gb4 bb4 db5 bb4 gb4 bb4, ~ f4 ~@6",
  C: "c5 bb4 f4 bb4 c5 bb4 f4 bb4 db5 bb4 gb4 bb4 db5 bb4 gb4 bb4",
  D: "c5 bb4 f4 bb4 c5 bb4 f4 bb4 c5 bb4 f4 bb4 c5 bb4 f4 bb4",
  E: "~ bb4 ~ bb4 db5 bb4 gb4 bb4 c5 bb4 ~ bb4 c5 bb4 f4 bb4, db5 gb4 ~@3 f4 ~@2",
  F: "db5 bb4 gb4 bb4 db5 bb4 gb4 bb4 c5 bb4 f4 bb4 c5 bb4 f4 bb4", G: "c5 bb4 f4 bb4 c5 bb4 f4 bb4 ~@8",
})).s("gm_harpsichord").gain(0.22).pan(0.7)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@6 A B C D E@2 F G H@2 G I ~@7 J@4 K@2 L K@2 M N@2 O@2 P ~ Q R S@2 R T U R V Q R S@2 R V Q
>`.pickRestart({
  A: "a4@3 g4 [f4,c5,f5]@4, e5 ~", B: "[e4,b4,e5] [db4,db5,f5]", C: "[ab4,eb5] [gb5,bb5,db6]",
  D: "[f5,c6] [gb5,db6], bb5", E: "[[f5,c6] [gb5,db6] [f5,c6]@2, bb5@31 ~]/2", F: "[db5,gb5,bb5] [eb5,ab5,c6]",
  G: "[f5,ab5,db6] [db5,gb5,bb5]@3", H: "[[eb5,ab5,c6] [f5,ab5,db6] [db5,gb5,bb5]@4 [eb5,ab5,c6]@2]/2",
  I: "[eb5,ab5,c6] [f5,ab5,db6] [db5,gb5,bb5]@2", // Ab Db Gb
  J: "[[gb5,bb5,db6] [f5,c6] [gb5,db6] [f5,c6] [gb5,db6] [f5,c6]@2 [db5,gb5,bb5], ~@8 bb5@16 bb5@31 ~@9]/4", // Gb F5 Gb5 F5 Gb5 F5 Gb
  K: "[[eb5,ab5,c6]@2 [f5,ab5,db6] [db5,gb5,bb5]@3 [eb5,ab5,c6] [f5,ab5,db6]]/2", L: "[db5,gb5,bb5]",
  M: "[db5,gb5,bb5] [bb5,db6,f6]", N: "[[ab5,c6,eb6]@2 [gb5,bb5]@3 [f5,ab5] [bb5,f6]@2, ~ db6@3]/2",
  O: "[[ab5,c6,eb6]@2 [gb5,bb5]@3 [f5,ab5] [bb5,db6]@2, ~@8 db6@16 f6 ~@7]/2", P: "[ab5,c6,eb6] ~",
  Q: "[gb5,bb5] [ab5,c6]", R: "[ab5,db6] [gb5,bb5]@3", S: "[[ab5,c6] [f5,db6] [db5,bb5]@4 [ab5,c6]@2]/2",
  T: "[ab5,c6] [ab5,db6] [db5,bb5]@2", U: "~ [eb5,c6]", V: "[ab5,c6] [f5,db6] [db5,bb5]@2",
})).s("gm_percussive_organ").gain(0.15).pan(0.4)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@45 A@2 B C D E F G H I J K>".pickRestart({
  A: "[~@12 db5@17 ~ db5 ~]/2", B: "db5@6 eb5 eb5@2 db5 eb5 eb5@2 db5 eb5@2", C: "db5@2 ab4 ~ ab4@2 db5@6 ~ ab5@2 gb5",
  D: "f5@2 eb5@2 eb5@2 db5 ab4 ab4@7 ~", E: "ab4@8 ~ ab4@2 gb4 f4@2 eb4@2", F: "eb4@2 db4 eb4 ab4@7 ~@5",
  G: "ab4 bb4 c5 ab4 db5@2 [ab4,db5] ~ ab4@8", H: "db5@5 ~ eb5@3 db5 eb5@3 db5 eb5@2", I: "db5@2 ab4 ~ ab4@10 ~@2",
  J: "db5@5 ~ db4@2 f4@4 db4@4", K: "b3@2 gb4 ~ gb4@2 f4@2 ab4@2 f4@2 ~@4",
})).s("gm_overdriven_guitar").gain(0.28).pan(0.3)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A@2 ~@6 B C D E F G H F G H I J K L K L M N@3 O P@2 Q P@2 R S T S U V W F X Y Z X Y Z X Y Z X Y Z X Y Z
>`.pickRestart({
  A: "[~@11 a5@2 a5@2 a5@2 ~@10 a6@5, ~ e6@2 b5@2 db6@2 e6@2 e6@7 ~ e7@2 b6@2 db7@2 e7@2 e7@7, ~ db6 e6 b5 db6 db6@3 ~ db7 e7 b6 db7 db7@3]/2",
  B: "~@9 bb5 ~ bb5 ~ bb5 ~ bb5, ~@4 db6 gb5 db6 gb5",
  C: "~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5, c6 f5 c6 f5 db6 gb5 db6 gb5",
  D: "~ bb5 ~ bb5 ~ bb5 f5 bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5, c6@2 f5@2 c6@3 ~ db6@2 gb5@2 db6@2 gb5@2",
  E: "~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5, c6 f5 c6 f5 c6 f5 c6 f5",
  F: "[db5,gb5,bb5]@7 ~ [eb5,ab5,c6]@7 ~", G: "[f5,ab5,db6]@3 ~ [db5,gb5,bb5]@7 ~ [db5,gb5,bb5]@3 ~",
  H: "[eb5,ab5,c6]@3 ~ [f5,ab5,db6]@3 ~ [db5,gb5,bb5]@7 ~", I: "~@8 [db4,e4,a4]@7 ~", J: "[c4,f4,a4]@7 ~ [b3,e4,ab4]@8",
  K: "[db4,f4,ab4]@7 ~ [db4,e4,a4]@7 ~", L: "[c4,f4,a4]@7 ~ [b3,e4,ab4]@7 ~", M: "[db4,f4,ab4]@7 ~ [c4,eb4,ab4]@6 ~@2",
  N: "~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5, db6 gb5 db6 gb5 c6 f5 c6 f5",
  O: "~ bb5 ~ bb5 ~ bb5 ~ bb5 [db5,gb5,bb5]@7 ~, c6 f5 c6 f5 ~@4", // Gb
  P: "[[eb5,ab5,c6]@7 ~ [f5,ab5,db6]@3 ~ [db5,gb5,bb5]@7 ~ [db5,gb5,bb5]@3 ~ [eb5,ab5,c6]@3 ~ [f5,ab5,db6]@3 ~]/2", // Ab Db Gb Ab Db
  Q: "[db5,gb5,bb5]@7 ~ [db5,gb5,bb5]@7 ~", R: "[db5,gb5,bb5]@7 ~ [db4,f4,bb4]@7 ~",
  S: "[c4,eb4,ab4]@7 ~ [bb3,db4,gb4]@7 ~", T: "[bb3,db4,gb4]@4 [ab3,db4,f4]@3 ~ [db4,f4,bb4]@7 ~",
  U: "[bb3,db4,gb4]@3 ~ [ab3,db4,f4]@3 ~ [db4,f4,bb4]@6 [db4,f4,bb4]@2", // Gb Db Bbm
  V: "[c4,eb4,ab4]@6 [c4,eb4,ab4]@2 bb5 ab5 db5 bb5 ab5 db5 bb5 ab5", // Ab
  W: "~ f5 eb5 db6 ~ f5 eb5 db6 ~ f5 eb5 db6 ~ f5 eb5 db6, db6 ~ db6 ~ db6 ~ db6 ~",
  X: "[f5,db6]@3 ~ [db5,bb5]@7 ~ [db5,bb5]@3 ~", Y: "[eb5,c6]@3 ~ [f5,db6]@3 ~ [db5,bb5]@7 ~",
  Z: "[db5,bb5]@7 ~ [eb5,c6]@7 ~", // Gb Cm
})).s("gm_epiano2").gain(0.25).pan(0.3)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@6 A B@2 ~@48>".pickRestart({
  A: "a3@3 g3 [f3,c4,f4]@4, e4 ~", B: "[[e3,b3,e4] [db3,db4] [ab3,eb4] ~, ~ ab4@2 ~]/2",
})).s("gm_string_ensemble_2").gain(0.17).pan(0.7)

// chords · synth strings 1 · "SYN STR 1" · A5 Dm E5 Db5 A5 Dm E5 Db5 …
const synth_strings_1 = note(`<
  ~@2
  [[a3,e4] [a3,f4]]
  [[b3,e4] [db4,ab4]]
  [[a3,e4] [a3,f4]]
  [[b3,e4] [db4,ab4]]
  [[a3,e4] ~]
  ~@50
>`).s("gm_synth_strings_1").gain(0.12)

// chords · church organ · "CHURCH ORG" · F5 E5 Db5 Ab5
const church_organ = note("<~@6 [a3@3 g3 [f3,c4]@4, e4 ~] [[b3,e4] [db4,ab4]] [[ab3,eb4] ~] ~@48>")
  .s("gm_church_organ").gain(0.06).pan(1)

// other · guitar harmonics · "GTHARMONIC"
const guitar_harmonics = note("<~@11 A@2 ~@15 B ~@11 A@2 ~@15>".pickRestart({
  A: "[~@2 f3@3 ~@3]/2", B: "f3@3 ~",
})).s("gm_guitar_harmonics").gain(0.23).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A B C D E C D F G H I J K L M N O P Q R S C T U V L I L K W X L Y Z C Y AA C D F C D F C D AB AC
>`.pickRestart({
  A: "~@15 x", B: "x ~@3 x ~@2 x!2 ~@7", C: "x ~@6 x!2 ~@6 x", D: "x ~@2 x!2 ~@6 x!2 ~@3", E: "~@3 x!2 ~@3 x ~@6 x",
  F: "~@3 x!2 ~@2 x!2 ~@6 x", G: "x ~ x ~ x ~ x ~ x ~@2 x ~@4", H: "x!2 ~ x ~@3 x!2 ~@2 x ~@3 x",
  I: "x ~@2 x ~@4 x ~@2 x ~@3 x", J: "x ~@2 x ~@3 x!2 ~@6 x", K: "x ~@7 x ~@2 x ~@3 x",
  L: "x ~@2 x ~@3 x!2 ~@2 x ~@3 x", M: "x ~@2 x ~@4 x ~@7", N: "x ~@6 x!2 ~@2 x ~@3 x", O: "x ~@6 x ~ x ~@5 x",
  P: "x ~ x!2", Q: "x ~@7 x ~@6 x", R: "x ~@2 x ~@3 x!2 ~@2 x!2 ~@3", S: "~@3 x!2 ~@7 x ~@3",
  T: "x ~@2 x ~@4 x ~@3 x ~@2 x", U: "~@3 x!2 ~@6 x!2 ~@3", V: "x!2", W: "x ~@2 x ~@4 x ~@6 x",
  X: "x ~@6 x!2 ~ x ~ x ~@3", Y: "x ~@2 x!2 ~@6 x!2 ~@2 x", Z: "~@4 x ~@2 x!2 ~@6 x", AA: "x ~@3 x ~@2 x!2 ~@6 x",
  AB: "~@3 x!2 ~@2 x!2 ~@7", AC: "x ~@6 x!2 ~@7",
})).gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@6 B ~@3 B ~ C ~@3 D ~@9 B ~ C ~@6 E ~@9>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@8", C: "~@14 x!2", D: "~@6 x!3 ~@7", E: "x",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A B C D A E D F@2 C G F E H I J K L M N E O P Q A C R S T F O E N O U R V W X F Y D V Z AA
// … 61 more lines

More by Kate Bush