Strudelify
Waiting In Vain cover art

Exodus 40

Waiting In Vain

Bob Marley

KeyA♭ majorTempo78 bpm
0:00/0:00
// Waiting In Vain — Bob Marley
// 78 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 13 ms behind the beat; the grid follows it, so its parts stay together.
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, A@4 for four bars: edit a riff to change every repeat.

// chords · rock organ · "tk1"
const rock_organ = note(`<
  ~ A B C B C D E B F B C G H I J B J B K L M B J N C O P Q M R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ E AK AL AM
  AN AO AP AO AQ AR AS AO AT AU AV AW AL AX E AY AZ BA BB BC BD BE BF BG BH BC BI BJ BK BL BM ~
>`.pickRestart({
  A: "~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [eb4,c5]", // C5 Cm
  B: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4 [ab4,c5]", // Ab
  C: "~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [g4,c5]", // C5
  D: "~ [ab4,c5] [f4,ab4] [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4 [ab4,c5]", // Ab Fm Ab
  E: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [g4,c5]", // C5 Cm C5 Cm C5
  F: "~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5]", // C5
  G: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5]", // Ab
  H: "[ab4,c5] [g4,c5] eb4 [ab4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [g4,c5]", // Ab C5 Ab C5
  I: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ab4 [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5]", // Ab
  J: "~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 [eb4,c5] [g4,c5]", // C5 Cm C5
  K: "[g4,c5]!2 eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 [eb4,c5] [g4,c5]", // C5 Cm C5
  L: "~ [ab4,c5] f4 [ab4,c5] ab4 [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4 [ab4,c5]", // Ab
  M: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [g4,c5]", // C5 Cm C5
  N: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4!2 [ab4,c5]!2 f4 [ab4,c5]", // Ab
  O: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 ab4 ~ [ab4,c5] ~ f4 [ab4,c5]!2 f4 [ab4,c5]", // Ab
  P: "[g4,c5]!2 eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [g4,c5]", // C5
  Q: "[ab4,c5]!2 f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4 [ab4,c5]", // Ab
  R: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 ~", // Ab
  S: "[f4,ab4,db5]@5 ~ [g4,bb4,eb5]@10", // Db Eb
  T: "[g4,c5,eb5]@6 [bb4,db5,f5]@7 [g3,ab3,a3,bb3,b3] [c4,d4,e4,f4,gb4,g4,a4,b4] [c5,d5,e5,f5]", // Cm Bbm Cmaj7 Dm7
  U: "[f5,ab5,db6]@3 [g5,bb5,eb6]@5, g5 ~@15", V: "[c6,eb6,g6]@3 [bb5,db6,f6,ab6]@5",
  W: "~ [c5,eb5] g4 c5 ~ [c5,eb5] g4 [g4,c5,eb5] ~ [c5,eb5] g4 [g4,c5,eb5] ~ [c5,eb5] g4 [c5,eb5]", // Cm
  X: "d5 [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 ~ [ab4,c5]", // Ab Fm Ab Fm Ab
  Y: "~ [c5,eb5] g4 [c5,eb5] ~ [c5,eb5] g4 [g4,c5,eb5] ~ [c5,eb5] g4!2 [c5,eb5]!2 g4 [g4,c5,eb5]", // Cm
  Z: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [f4,ab4,c5] [ab4,c5] f4 [ab4,c5]", // Ab Fm Ab Fm Ab
  AA: "~ [c5,eb5] g4 [c5,eb5] ~ [c5,eb5] g4 [g4,c5,eb5] ~ [c5,eb5] ~ g4 [g4,c5,eb5] [db5,eb5] g4 [g4,c5,eb5]", // Cm Dbsus2 Cm
  AB: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] [f4,ab4,c5] f4 [f4,ab4,c5]!2", // Ab Fm Ab Fm
  AC: "~ [c5,eb5] g4 [g4,c5,eb5] ~ [c5,eb5] g4 [g4,c5,eb5] ~ [c5,eb5] g4!2 [g4,c5,eb5] [g4,c5] [g4,c5,eb5] g4", // Cm C5 Cm
  AD: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] ~ f4 [f4,ab4,c5] [ab4,c5] ~ [ab4,c5]!2 f4 [ab4,c5] [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm
  AE: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5] [g4,c5] eb4 [g4,c5]", // C5 Cm C5 Cm C5 Cm C5
  AF: "~ [ab4,c5] f4 [f4,ab4,c5] ab4 [ab4,c5] ~ [ab4,c5] ~ [ab4,c5] ~@2 [ab4,c5]!2 [f4,ab4] [ab4,c5]", // Ab Fm Ab Fm Ab
  AG: "~ [g4,c5] ~ [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [g4,c5]", // C5 Cm C5 Cm C5
  AH: "[ab4,c5]!2 f4 [f4,ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] ~ f4 [ab4,c5]!2 f4 [ab4,c5]", // Ab Fm Ab
  AI: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [eb4,g4,c5] eb4!2 [eb4,g4,c5] [g4,c5] eb4 [eb4,g4,c5]", // C5 Cm C5 Cm
  AJ: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4 [ab4,c5]", // Ab Fm Ab
  AK: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] ~ f4 [f4,ab4,c5]!2 f4 [f4,ab4,c5]", // Ab Fm Ab Fm
  AL: "~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5] [g4,c5] eb4 [g4,c5]", // Cm C5 Cm C5 Cm C5
  AM: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] ~ [f4,ab4,c5] ~ [ab4,c5] f4!2 [f4,ab4,c5] [ab4,c5] f4 [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm Ab Fm
  AN: "~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5] [g4,c5] eb4 [eb4,g4,c5]", // Cm C5 Cm C5 Cm C5 Cm
  AO: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [f4,ab4,c5] [ab4,c5] f4 [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm Ab Fm
  AP: "~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [g4,c5]", // Cm C5
  AQ: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [eb4,g4,c5] eb4!2 [g4,c5]!2 eb4 [eb4,g4,c5]", // C5 Cm C5 Cm C5 Cm
  AR: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] ~ f4 [f4,ab4,c5]!2 f4 [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm
  AS: "~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5]!2 [eb4,c5] [g4,c5]", // Cm C5 Cm C5 Cm C5
  AT: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 [eb4,c5] [eb4,g4,c5]", // C5 Cm C5 Cm C5 Cm
  AU: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4!2 [f4,ab4,c5] [ab4,c5] f4 [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm
  AV: "~ [g4,c5] eb4 [g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [g4,c5]!2 eb4 [eb4,g4,c5]", // C5 Cm C5 Cm
  AW: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 f4 [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm
  AX: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] ~ f4 [ab4,c5]!2 f4!2 [f4,ab4,c5]!2 f4 [ab4,c5]", // Ab Fm Ab Fm Ab
  AY: "~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] f4 [ab4,c5] ~ [ab4,c5] ~@2 [ab4,c5]!2 f4 [ab4,c5]", // Ab
  AZ: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5] [g4,c5] eb4 [eb4,g4,c5]", // C5 Cm C5 Cm C5 Cm C5 Cm
  BA: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] ~ [f4,ab4,c5] ~ [ab4,c5] ~ f4 [f4,ab4,c5] [ab4,c5] f4 [f4,ab4,c5]", // Ab Fm Ab Fm Ab Fm Ab Fm
  BB: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] ~ eb4 [eb4,g4,c5] [g4,c5] eb4 [g4,c5]", // C5 Cm C5 Cm C5 Cm C5
  BC: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [f4,ab4,c5]!2 f4 [ab4,c5]", // Ab Fm Ab Fm Ab Fm Ab
  BD: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5]!2 [g4,c5] ~ [eb4,g4,c5] ~ [g4,c5] eb4!2", // C5 Cm C5 Cm C5 Cm C5
  BE: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] ~ f4 [f4,ab4,c5] [ab4,c5] f4 ~ [f4,ab4,c5] [ab4,c5] f4 ab4", // Ab Fm Ab Fm Ab Fm Ab
  BF: "~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] ~ eb4 [eb4,g4,c5]!2 eb4 [eb4,g4,c5]", // Cm C5 Cm C5 Cm
  BG: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [f4,ab4,c5]!2 ~ [ab4,c5], ~@7 f4", // Ab Fm Ab Fm Ab Fm Ab
  BH: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] ~ [eb4,g4,c5] ~ [g4,c5] ~ [g4,c5] eb4 [eb4,c5] [eb4,g4,c5]!2", // C5 Cm C5 Cm C5 Cm
  BI: "~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5]!2 eb4 [g4,c5]", // C5 Cm C5 Cm C5 Cm C5
  BJ: "~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5]!2 ~ [ab4,c5], ~@6 f4!2", // Ab Fm Ab Fm Ab
  BK: "~ [eb4,g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4 [eb4,g4,c5] ~ [g4,c5] eb4!2 [eb4,g4,c5]!2 eb4 [g4,c5]", // Cm C5 Cm C5 Cm C5
  BL: "~ [ab4,c5] f4!2 [f4,ab4,c5]!2 f4 [f4,ab4,c5] ~ [ab4,c5] f4!2 [ab4,c5] ~ [f4,ab4,c5] ~, ~@6 f4 ~", // Ab Fm Ab Fm
  BM: "[g4,c5,eb5]", // Cm
})).s("gm_rock_organ").gain(0.27).pan(0.3)

// bass · electric bass finger · "tk2"
const bass = note(`<
  ~ A B A B A B A B A C A C A C A C A C A C A C A C A B A B A D E F E G A B A B A B A B A C A C A C A C A C A C A C A C
  A B A B A B A B A B A C A C A C A C A C A C A C H ~
>`.pickRestart({
  A: "ab1 ~@2 ab1 ~ bb1 ab1 ~@3 ab1!2 ~ ab1 ~ c2", B: "db2 ~@2 db2 ~ eb2 db2 ~@3 c3 ~ bb2 ab2 f2 eb2",
  C: "db2 ~@2 db2 ~ eb2 db2 ~@3 db2!2 ~ db2 ~ eb2", D: "db2 ~@2 db2 ~ eb2 db2!2 ~@2 c3 ~ bb2 ab2 f2 ~",
  E: "db2@6 eb2@4 bb1@2 eb2@2 db2 ~", F: "c2@3 bb1@5", G: "c2@3 bb1@3 ~@2", H: "ab1",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · electric guitar clean · "tk3"
const electric_guitar_clean = note(`<
  ~ A B A B A B C B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B D ~
>`.pickRestart({
  A: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Cm
  B: "~@2 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~@3 [db4,f4,ab4] ~", // Db
  C: "~@2 [c4,eb4,g4] ~@3 [eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", D: "[c4,eb4,g4]",
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.7)

// chords · synth brass 2 · "tk5"
const synth_brass_2 = note(`<
  ~@5 A B A B ~ C ~@3 D ~@3 E ~@3 F ~@2 A B A B ~@15 G ~ H I ~@4 J ~ K@5 A L A B A B ~@20
>`.pickRestart({
  A: "[ab4,eb5]!5 [bb4,f5] [c5,g5] [ab4,eb5]", B: "~ [f4,c5] ~ [g4,db5] [f4,c5]@2 ~@10",
  C: "[ab4,eb5]@2 ab4@2 db5@2 [eb4,c5] [ab4,eb5]@3 [f4,db5]@3 ~@3, ~@2 eb5 ~ f4 ~@11", // Ab5 Cm Ab5 Db
  D: "[ab4,eb5]@2 [ab4,eb5]@2 [f4,db5]@2 [eb4,c5] [ab4,eb5]@3 ~@6", // Ab5 Db Cm Ab5
  E: "[ab4,eb5] [ab4,eb5]@3 [f4,db5] [eb4,c5]@2 [ab4,eb5]@3 ~@6", // Ab5 Db Cm Ab5
  F: "[ab4,eb5] [ab4,eb5]@2 f4@2 [eb4,c5]@2 [ab4,eb5]@3 ~@6, ~@3 db5 ~@12", // Ab5 Cm Ab5
  G: "~@2 [ab4,eb5]!2 [f4,db5] [eb4,c5]@2 [ab4,eb5]@3 ~@6", H: "~@15 [db5,ab5]",
  I: "[c5,g5]@4 [ab4,eb5]@3 [db5,ab5] [c5,g5]@4 [ab4,eb5]@2 ~@2", // C5 Ab5 Db5 C5 Ab5
  J: "~@2 [ab4,eb5]@2 [f4,db5]@2 [eb4,c5] [ab4,eb5]@3 ~@6", // Ab5 Db Cm Ab5
  K: "[~@15 [ab4,db5]@3 [ab4,c5]@2 ab4@2 [ab4,c5]@3 ~ [ab4,db5]@3 ~@2 [ab4,db5]@3 c5@2 [ab4,db5] ~ [ab4,c5]@3 ~ [ab4,db5]@3 ab4@2 [g4,c5]@2 [ab4,db5]@2 [g4,c5] ~ [eb4,ab4]@2 [g4,c5]@2 [ab4,db5]@2 c5@2 [eb4,ab4]@2 [eb4,g4]@2 [db4,f4]@3 ~@7 ab4@2 ~@3, ~@20 db5 ~@13 ab4 ~@10 eb4 ~@13 g4 ~@20]/5", // Db5 Ab Db5 Ab Db5 C5 Db5 C5 …
  L: "~ [f4,c5] ~ g4 [f4,c5]@2 ~@10, ~ db5 ~@6", // F5
})).s("gm_synth_brass_2").gain(0.3)

// chords · synth brass 2 · "tk6"
const synth_brass_2_2 = note("<~@29 A B ~@34 C B A B D E D E D E D E D E D E ~@4>".pickRestart({
  A: "[ab4,c5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5] ~ [ab4,c5,eb5]@2 [bb4,db5,f5]@2 [eb5,g5] ~ [ab4,c5,eb5]@2, eb5 ~@2 eb5 ~@2 c5 ~", // Ab Bbm Eb Ab
  B: "~ [f4,ab4,c5] ~ [g4,bb4,db5] [f4,ab4,c5]@2 ~@10", // Fm Gdim Fm
  C: "[ab4,c5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5]@2 [bb4,db5,f5]@2 [eb5,g5]@2 [ab4,c5,eb5]@2, eb5@2 ~@10 c5 ~@3", // Ab Bbm Eb Ab
  D: "[g4,bb4,eb5]!12 [ab4,c5,f5]!4", E: "[f4,ab4,c5]!6 ~ [f4,ab4,c5] ~@8",
})).s("gm_synth_brass_2").gain(0.35)

// chords · clavinet · "tk7"
const clavinet = note(`<
  ~@9 A B C D E F G H A B C D E F G H C D E F G I ~@12 A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A
  B C D E F G H ~@2
>`.pickRestart({
  A: "[g3,c4,eb4] eb3!2 [g3,c4,eb4] ~ eb3 [g3,c4,eb4] ~@2 [g3,c4,eb4] ~ eb3 [g3,c4,eb4]!2 eb3 ~", // Cm
  B: "~ [c4,ab4] ab3 [c4,f4,ab4] ~ ab3 [c4,f4,ab4] ~@2 f4 ~ ab3 bb4 ab4 f4 eb4", // Fm
  C: "[g3,c4,eb4] eb3!2 [g3,c4,eb4] ~ eb3 [g3,c4,eb4] ~@2 [g3,c4,eb4] ~ eb3 [g3,c4,eb4]!2 ~@2", // Cm
  D: "[c4,f4,ab4]!2 ab3 [c4,f4,ab4] ~ bb4 c4 ~@5 bb4 ab4 f4 eb4", // Fm
  E: "[g3,c4,eb4] eb3!2 [g3,c4,eb4] ~ eb3 [g3,c4,eb4] ~@5 [g3,c4,eb4] c4 ~@2", // Cm
  F: "f4!2 ab3 [c4,f4,ab4] ~ ab3 [c4,f4,ab4] ~@5 bb4 ab4 f4 eb4", // Fm
  G: "[g3,c4,eb4] eb3!2 [g3,c4,eb4] ~ eb3 [g3,c4,eb4] ~@2 [g3,c4,eb4] ~@6", // Cm
  H: "[c4,f4,ab4] f4 ab3 [c4,f4,ab4] ~ bb4 c4 ~@5 bb4 ab4 f4 eb4", I: "[c4,f4,ab4] f4 ab3 [c4,f4,ab4] ~ bb4 c4 ~@9",
})).s("gm_clavinet").gain(0.27).pan(0.9)

// chords · steel drums · "tk8"
const steel_drums = note(`<
  ~ A B A C A B A B A B A B A B A B A B A B A B A B A B A B A B D E D F A B A B A B A C A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "~@2 [eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~@3 [eb4,g4] ~", // Eb
  B: "~@2 [f4,ab4] ~@3 [f4,ab4] ~@3 [f4,ab4] ~@3 [f4,ab4] ~", C: "[f4,ab4] ~@2 [f4,ab4] ~@2 [f4,ab4] ~@9",
  D: "f4 ~@5 g4 ~@9", E: "eb4 ~@5 f4 ~@9", F: "g4 ~@5 ab4 ~@9",
})).s("gm_steel_drums").gain(0.22).pan(0.1)

// other · reed organ · "tk9"
const reed_organ = note("<~@17 A@2 ~ B A@2 ~@12 C@2 D B C@2 D ~@9 E@2 ~ B A@2 ~@28>".pickRestart({
  A: "[eb4@5 ~@3, d4 ~@31]/2", B: "~@5 eb3 f3 ab3", C: "[eb4@22 db5 ~ c5 ~ bb4 ~@2 f4 ab4 bb4, d4 ~@31]/2",
  D: "c5 ~@2 [eb4,f4] eb4@8 ~@4", E: "[eb4@23 ~@9, d4 ~@31]/2",
})).s("gm_reed_organ").gain(0.33).pan(0.2)

// other · ocarina · "tk11" · F5
const ocarina = note(`<
  ~
  [g4@13 f4 ~ g4]
  [ab4@11 ~@2 bb4 ~ [f4,c5], ~@6 ab4 ~]
  [g4@12 ~ f4 ~ g4, gb4 ~@15]
  [ab4@13 ~@3]
  ~@80
>`).s("gm_ocarina").gain(0.33).pan(0.4)

// other · electric guitar jazz · "tk12"
const electric_guitar_jazz = note(`<
  ~@26 A B A B C D E@2 F G@2 H I J K L M ~ N O P Q R@2 S Q N T U V N T U V A B A B A B A B W X@4 Y Z AA AB AC AD AE Z AF
  AG AH ~
>`.pickRestart({
  A: "~@6 db5 ~ c5 ~ bb4 ~@3 ab4 bb4", B: "c5 ~ eb4 f4 eb4@2 ~@10",
  C: "~@3 ab4 ~ bb4 db5 ~ c5 ~ bb4 ~@3 ab4 bb4, ~ f4 ~@6",
  D: "[ab3,db4,f4]@4 ~@2 [g3,bb3,eb4,g4]@4 [bb3,eb4] ~@2 [eb4,f4] ~@2, ~@6 [bb3,eb4] ~", // Db Eb Eb5 Ebsus2 Eb5
  E: "[[c4,eb4]@4 ~@2 [bb3,db4]@4 [db4,f4] ~ [db4,eb4,f4] db4 ~@2 [ab3,db4,f4]@4 ~@2 [bb3,eb4,g4]@4 [eb4,g4] ~ [eb4,g4] [eb4,f4] ~@2, ~@15 f3@4 ~@2 g3@4 ~@7]/2", // Cm Bbm Db Eb Ebsus2
  F: "[c4,eb4]@2 ~ [bb3,db4]@5", G: "[~@3 e3@2 ab3 ~ b3@2 eb4 ~ e4@2 ab4 ~ bb4@10 ~@7]/2",
  H: "~ bb4 c5 db5 ~ eb5 ~ db5@2 bb4 c5 a4 ~ ab4@2 ~", I: "~ bb4@2 ab4 bb4 ab4 ~ ab4@7 ~@2",
  J: "~ f5 ~ eb5@3 ~@2 f5 eb5 c5 b4@2 eb5 c5 ~", K: "bb4 ~ bb4 ~ bb4 ab4 bb4 ab4@8 ~",
  L: "~ c4 eb4 [c4,eb4] f4 [eb4,f4] ab4 [f4,ab4] bb4 [ab4,bb4] c5 [bb4,c5] eb5 [c5,eb5] f5 [eb5,f5]", // Cm Ebsus2 Fm Absus2 Bbsus2 Cm Ebsus2
  M: "ab5 ~ ab5 ~ ab5 f5 ~@4 [c5,f5]!3 ~ [c5,f5] ~", N: "~@12 eb3 f3 ab3 bb3", O: "~ bb3@6 ~@9",
  P: "~@11 b3 ~ bb3 ~ f3", Q: "eb3@13 ~@3", R: "[~@12 eb3 f3 ab3 e4@3 eb4@12 ~@2]/2", S: "~@11 a3 ~ ab3 ~ f3",
  T: "~ bb3@13 ~@2", U: "~@11 b3 ~ ab3 ~ f3", V: "eb3@15 ~", W: "~@15 ab4",
  X: "[g4@4 ~@3 ab4 g4@2 ~@5 c5@5 ~@12 ab4 ~@6 g4 g4@3 ~@5 db5 ~@14 g4, ~@15 db5 ~@15 g4@4 ~@5 ab4 ~@6 c5@5 ~@12]/4",
  Y: "g4@4 ~@3 g4 g4@3 ~@4 [c5,db5], ab4 ~@7 ab4 ~@7", Z: "c5@3 ~@12 g4", AA: "g4@4 ~@3 [g4,ab4] g4@2 ~@5 c5, ab4 ~@15",
  AB: "[c5,db5]@2 ~@13 g4", AC: "g4@3 ~@12 c5, ab4 ~@15", AD: "c5@3 ~@12 g4, db5 ~@15",
  AE: "g4@3 ~@4 g4 g4@3 ~@4 [c5,db5], ab4 ~@7 ab4 ~@7", AF: "g4@4 ~@3 g4 [g4,ab4]@2 ~@5 [c5,db5], ab4 ~@15",
  AG: "c5@3 ~@11 ab4@2", AH: "g4",
})).s("gm_electric_guitar_jazz").gain(0.38).pan(0.6)

// other · woodblock · "tk13"
const woodblock = note("<~@46 [~@4 c6 ~ c6 ~@9]!5 [~@12 c6 ~ c6 ~]!32 ~@2>").s("gm_woodblock").gain(0.33)

// drums · kick
const kick = s("bd").struct("<~ A B@28 C D@3 E B@48 F ~>".pickRestart({
  A: "x!2 ~ x", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "x ~@2 x!2 ~ x ~@3 x ~ x ~ x ~", E: "x ~@2 x!2 ~ x ~@9", F: "x",
})).gain(0.55)

// drums · rim
const rim = s("rim").struct("<~ A@29 B ~@4 A C A D C@3 A C A@2 E A@3 C A@20 E A@6 D A@4 ~@2>".pickRestart({
// … 70 more lines

More by Bob Marley