Strudelify

Punky Reggae Party

Bob Marley

KeyB minorTempo72 bpm
0:00/0:00
// Punky Reggae Party — Bob Marley
// 72 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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 · "tk1"
const piano = note(`<
  A B C D E F G@16 H I H I H I H I G@8 H I H I H I H I H I H I G@29 H I H I H I H I ~@4 G@11 ~
>`.pickRestart({
  A: "~@12 [b3,d4,f#4]!3 [a3,c#4,e4]", // Bm A
  B: "[b3,d4,f#4]!2 [a3,c#4,e4] [b3,d4,f#4] ~ [a3,c#4,e4] [b3,d4,f#4]!6 [a3,c#4,e4]!4", // Bm A Bm A Bm A
  C: "[b3,d4,f#4]!3 [a3,c#4,e4] [b3,d4,f#4]!12", // Bm A Bm
  D: "[b3,d4,f#4]!2 [a3,c#4,e4] [b3,d4,f#4]!2 [a3,c#4,e4] [b3,d4,f#4]!6 [a3,c#4,e4]!4", E: "[b3,d4,f#4]!16",
  F: "[b3,d4,f#4]!2 [a3,c#4,e4] [b3,d4,f#4]!2 [a3,c#4,e4] [b3,d4,f#4]!5 d4 [b3,d4,f#4] ~ [b3,d4,f#4] ~", // Bm A Bm A Bm
  G: "~@2 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~@3 [b3,d4,f#4] ~", // Bm
  H: "~@2 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~@3 [b3,e4,g4] ~", // Em
  I: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~", // D
})).s("gm_piano").gain(0.27).pan(0.7)

// bass · fretless bass · "tk2"
const bass = note(`<
  ~ A B C D E F G F H F G F I F I F I F I F G J K L M L M N O F P F P F G F G Q M N O N O N O N R N O F G F G F G F G F
  G F G F@2 G F G F G F G F G F G F G F G S T Q U Q M V W ~@4 X G X G X G X G X G X G
>`.pickRestart({
  A: "~@15 b1", B: "b1@14 ~ b1", C: "b1 ~@2 b1 ~ b1!2 ~@8 b1", D: "b1@13 ~@2 b1", E: "b1 ~@2 b1 ~ b1!2 ~@9",
  F: "~@2 b1!2 f#2!2 b1 f#1 a1!2 b1 ~@5", G: "~@2 b1!2 f#2@2 d2 e2 d2 ~ b1@2 ~@4",
  H: "~@2 b1!2 f#2 ~ d2 e2 d2@2 b1@2 ~@4", I: "~@2 b1!2 f#2@2 d2 e2 d2@2 b1@2 ~@4",
  J: "~ b1 e2!2 b2!2 e2!2 b1!2 b1@2 e2!3 ~", K: "d2@2 ~ d2 a2!2 d2!2 a1!2 a1@2 d2!2 d2@2",
  L: "~ b1 e2!2 b2!2 e2!2 b1!2 b1@2 e2!2 e2@2", M: "d2@2 ~ d2 a2!2 d2!2 a1!3 ~ d2!3 ~",
  N: "~ b1 e2!2 b2!2 e2!2 b1!3 ~ e2!3 ~", O: "d2@2 ~ d2 a2!2 d2!2 a1!3 ~ d2@2 ~@2",
  P: "~@2 b1!2 f#2@2 d2 e2 d2@2 b1 ~@5", Q: "~ b1 e2!2 b2!2 e2!2 b1!3 ~ e2@2 ~@2", R: "d2@3 d2 a2!2 d2!2 a1!3 ~ d2!3 ~",
  S: "~ b1 e2!2 b2!2 e2 ~ b1!3 ~ e2!3 ~", T: "d2@2 ~ d2 a2!2 d2!2 a1!3 ~ d2@3 ~",
  U: "d2@2 ~ d2 a2!2 d2 ~ a1!3 ~ d2@2 ~@2", V: "~ b1 e2!2 b2!2 e2 ~ b1 ~@2 b1 e2@2 ~@2",
  W: "d2@2 ~ d2 a2!2 d2!2 a1!3 ~ d2 ~ d2 ~", X: "~@2 b1!2 f#2@2 b1 f#1 a1!2 b1 ~@5",
})).s("gm_fretless_bass").gain(0.38)

// other · electric guitar jazz · "tk3"
const electric_guitar_jazz = note(`<
  ~@2 A B C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA D E F G H I J K T U AB AC X Y Z AA T U AD AC D AE F G H I
  J K L AF N O AG Q R S D AH F G H I J K L AF N O P T U AD AC X Y Z AA D AI F G H I J K L AF N S D AE F G
>`.pickRestart({
  A: "[b3,d4,f#4] [d4,f#4]@10 b3 [d4,f#4] g4 f#4 e4", B: "f#4 ~ d4@2 ~ b3 [b3,d4,f#4]@6 ~ f#3 a3 ~",
  C: "[[b3,d4,f#4] [d4,f#4]@29 ~@2]/2", D: "~@2 b3!2 f#4 d4 b3 f#3 ~@2 a3 b3@3 ~@2",
  E: "~@2 b3!2 f#4 e4 ~ b3 [d4,e4] [b3,e4] b3@4 ~@2", F: "~@4 f#4 [e4,g#4] ~ b3 a3 ~ b3@3 ~@3",
  G: "~@2 b3 ~ f#4@2 e4 b3 d4 e4 b3@2 ~@4", H: "~@2 b3 ~ f#4 d4 b3 f#3 a3 ~ b3@4 ~@2", I: "~@2 b3 ~ f#4@2 e4 ~ d4 ~@7",
  J: "~@2 b3!2 ~ d4 b3 f#3 ~@2 b3@4 ~@2, ~@2 f#4 ~@5", K: "~@2 b3@2 f#4 e4 d4 ~ d4 e4 [b3,d4] ~@5",
  L: "~@2 b3 ~ f#4 d4 b3 f#3 ~@2 b3@3 ~@3", M: "~@2 b3 ~ f#4@2 d4 ~@3 a3 ~@5",
  N: "~@2 b3 ~@2 d4 b3 f#3 a3 ~ b3@2 ~@4, ~@2 f#4 ~@5", O: "~@4 f#4@2 [e4,g#4] b3 d4 e4 [b3,d4]@2 ~@4",
  P: "~@4 f#4 d4 b3 f#3 ~@2 b3@4 ~@2", Q: "~@4 f#4 e4 d4 b3 d4 e4 [b3,d4]@2 ~@4",
  R: "~@5 d4 b3 f#3 a3 ~ b3@4 ~@2, ~@2 f#4 ~@5", S: "~@2 b3 ~ f#4@2 d4 ~ d4@2 b3@4 ~@2",
  T: "~@2 g4 ~ [e4,g4,d5]@2 ~@7 [e4,g4,b4] ~@2", U: "~@4 [d4,f#4,a4] ~@8 [d4,f#4] ~@2",
  V: "~@2 b4 ~ [g4,d5]@2 [d#4,g4] ~@6 [d4,e4,g4] ~@2", W: "~@4 f#4 ~@2 [f#4,a4] ~@5 [a#3,d4,f#4] ~@2",
  X: "~@2 g4 b4 [g4,d5]@2 [e4,g4,b4] ~@6 [e4,g4,b4] ~@2", Y: "~@3 a4 [f#4,a4] ~@2 f#4 ~@5 [f#4,a4] ~@2",
  Z: "~@4 d5@2 ~@5 b4@4 ~, ~ b4 ~@6, ~@3 g4@4 ~@4 g4 ~@4", AA: "~@3 f#4 [f#4,a4] ~@2 [d4,f#4] ~@8",
  AB: "~@2 b4 ~ [g4,d5]@2 g4 ~@6 [d4,e4,g4] ~@2", AC: "~@4 f#4 ~@2 [f#4,a4] ~@5 [b3,d4,f#4] ~@2",
  AD: "~@2 b4 ~ [g4,d5]@2 [e4,g4] ~@6 [d4,e4,g4] ~@2", AE: "~@2 b3!2 f#4 e4 ~ b3 [d4,e4] b3 b3@4 ~@2",
  AF: "~@2 b3 ~ f#4@2 d4 ~ a3@2 a3 ~@5", AG: "~@5 d4 b3 f#3 ~@2 b3@4 ~@2, ~@2 f#4 ~@5",
  AH: "~@2 b3!2 f#4 e4 ~ b3 d4 e4 b3@4 ~@2, ~@10 d4 ~@5", AI: "~@2 b3!2 f#4 e4 ~ b3 d4@2 b3@4 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.33).pan(0.3)

// other · electric guitar jazz · "tk3" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@3 A ~@2 B C D A E F B ~ G H I ~ J A E ~ K L M N O P Q R B C D A E F B ~ K L S N T P Q R K L S N B ~ D A E F B ~ G U
  I ~ J ~ V ~ B ~ D A E F B ~ G U I ~ J K L S N T P Q R B ~ D A E F B ~ G U I ~ B ~ D A
>`.pickRestart({
  A: "~@3 b3 ~@12", B: "~@8 a3!2 ~@6", C: "~@10 d4 ~@5", D: "~@2 b3@2 ~@5 a3 ~@6", E: "~@3 b3 ~@5 a3 ~@6",
  F: "~@7 b3 ~@2 b3@3 ~@3", G: "~@3 b3 ~@4 a3!2 ~@6", H: "~@7 a3 b3@2 ~@6", I: "~@9 a3 ~@6", J: "~@2 b3!2 ~@4 a3!2 ~@6",
  K: "~@12 e4 ~@3", L: "~@3 f#4 ~@3 d4 ~@4 d4 ~@3", M: "~ g4 ~ g4 ~@12", N: "~@3 f#4 ~ e4 ~@5 f#4@2 a4 ~@2, ~ d4 ~@6",
  O: "~@2 [e4,b4] ~@6 f#4 ~ g4 ~@4", P: "~ f#4 ~@3 f#4!2 d4 ~@8", Q: "~ e4@2 ~@12 g4", R: "~@6 d4 ~@9",
  S: "~ g4 ~ g4 ~@8 e4 ~@3", T: "~@2 [e4,b4] ~@8 g4 ~@4", U: "~@4 b3 ~@3", V: "~@3 g#3 ~@5 a3 ~@6",
})).s("gm_electric_guitar_jazz").gain(0.16).pan(0.3)

// chords · rock organ · "tk7"
const rock_organ = note(`<
  ~@6 A B C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT
  AU AV AW AX AY AZ BA BB@3 BC BD BE A BF BG L BH BI BJ BK@6 BL BM BN BO BP BQ BR BS ~@4 BT BU BV BW BX BY BZ CA CB CC
  CD CE
>`.pickRestart({
  A: "~@2 b5 ~@3 [d5,b5]!2 ~@7 [d5,b5]", B: "~@6 [d5,b5]!2 ~@6 [d5,b5]!2", C: "~@7 [d5,b5] ~@7 [d5,b5]",
  D: "~@7 [d5,b5] ~@4 b5 ~@3", E: "~@4 [d5,b5]!2 b5 ~@8 [d5,b5]", F: "~@6 [d5,b5]!2 ~@5 b5 [d5,b5]!2",
  G: "~@7 [d5,b5] ~@6 [d5,b5]!2", H: "~@6 d5 ~@2 [d5,b5] ~@3 b5 ~ [d5,b5]", I: "~@6 [d5,b5] b5 ~@6 [d5,b5]!2",
  J: "~@14 [d5,b5]!2", K: "~@2 [d5,b5] ~@4 [d5,b5] ~@5 [d5,b5]!3",
  L: "~@2 [d5,b5] ~@3 [d5,b5] d5 ~@2 [d5,b5] ~@4 [d5,b5]", M: "~@2 d5 ~@4 [d5,b5] ~@7 [d5,b5]",
  N: "~@6 [d5,b5]!2 ~@2 b5 ~@3 b5 [d5,b5]", O: "~@2 b5 ~@3 [d5,b5]!2 ~@5 [d5,b5]!3",
  P: "~@6 [e5,g5] [e5,g5,b5] ~@3 g5 ~@2 b5 e5", Q: "~@6 [d5,f#5] f#5 ~@3 [d5,f#5] f#5 [d5,f#5,a5]!3",
  R: "~@6 g5 [e5,g5,b5] ~@3 [e5,g5,b5] ~@3 [e5,g5,b5]", S: "~@2 f#5 [d5,f#5] ~@3 [d5,f#5] ~@3 f#5 ~ f#5 ~ [d5,f#5,a5]",
  T: "~@3 [e5,g5,b5] ~@6 [e5,g5,b5]!2 ~@3 [e5,g5,b5]", U: "~@2 f#5!2 ~@2 f#5 [d5,f#5,a5] ~@3 [d5,f#5] ~@3 [d5,f#5,a5]",
  V: "~@4 g5 [e5,g5,b5]!3 ~@3 [e5,g5,b5] ~@2 [e5,g5,b5]!2", W: "~@2 f#5!2 ~@3 [d5,f#5,a5] ~@3 [d5,e5,a5] ~@3 d5",
  X: "~@2 [d5,b5]!2 ~@2 [d5,b5] ~@3 b5 ~@3 [d5,b5]!2", Y: "~@2 [d5,b5] ~@3 b5 ~@3 [d5,b5]!2 ~@4",
  Z: "~@2 b5 [d5,b5] ~@2 [d5,b5] ~@3 b5!2 ~@2 b5 [d5,b5]", AA: "~@2 d5 ~@3 b5 [d5,b5] ~@3 [d5,b5] ~ [d5,b5] b5 [d5,b5]",
  AB: "~ b5!2 ~@3 b5 ~@3 [d5,b5]!2 ~@2 b5!2", AC: "~@2 [d5,b5] d5 ~@2 [d5,b5] ~@3 [d5,b5] b5 ~ [d5,b5] ~@2",
  AD: "~@2 [d5,b5] b5 ~@2 [d5,b5] ~@3 [d5,b5]!2 ~@3 [d5,b5]", AE: "~@2 [d5,b5]!2 ~@2 [d5,b5] b5 ~@2 b5 ~@2 [d5,b5] ~@2",
  AF: "~@2 [e5,g5]!2 ~@2 [e5,g5,b5] e5 ~@2 [g5,b5] [e5,g5,b5] ~@2 [e5,g5] ~", // Em G Em
  AG: "~@2 [d5,f#5,a5] [d5,f#5] ~@2 [d5,f#5,a5] [d5,f#5] ~@3 [d5,f#5,a5] ~@2 [d5,f#5,a5]!2", // D
  AH: "~@3 [e5,g5,b5] ~@3 [e5,g5,b5] ~@2 b5 [e5,g5,b5] ~@3 [e5,g5,b5]", // Em
  AI: "~@3 [d5,f#5,a5] ~@3 [d5,f#5] ~@2 f#5 [d5,f#5,a5] ~ d5 ~ [d5,f#5,a5]", // D
  AJ: "~@3 [e5,g5,b5] ~@2 [e5,g5,b5]!2 ~@3 g5 ~ [e5,g5,b5] ~@2", // Em
  AK: "~@2 [d5,f#5,a5]!2 ~@2 [d5,f#5] [d5,f#5,a5] ~@2 f#5 [f#5,a5] ~@2 f#5 [d5,f#5,a5]", // D F#m D
  AL: "~@3 [e5,g5,b5] ~@3 [e5,g5,b5] ~@3 g5 ~@3 [e5,g5,b5]", // Em
  AM: "~@3 [d5,f#5] ~@2 [d5,f#5] [d5,f#5,a5] ~@3 [d5,f#5] ~ f#5 ~ [d5,f#5,a5]", // D
  AN: "~@2 g5 [e5,g5,b5] ~@2 g5 [e5,g5,b5] ~@7 [e5,g5,b5]", // Em
  AO: "~@2 [d5,f#5] [d5,f#5,a5] ~@2 [f#5,a5] [d5,f#5] ~@3 [d5,f#5,a5] ~@2 f#5 [d5,f#5,a5]", // D F#m D
  AP: "~@2 g5 [e5,g5,b5] ~@6 [e5,g5] [e5,g5,b5] ~@3 [e5,g5,b5]", // Em
  AQ: "~@2 f#5 [d5,f#5] ~ f#5!2 ~ [d5,f#5,a5] ~@3 [d5,e5] ~@3", AR: "~@3 b5 ~@2 [d5,b5]!2 ~@6 [d5,b5]!2",
  AS: "~@2 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5] d5 ~@2 [d5,b5] ~", // G
  AT: "~@2 b5 [d5,b5] ~@2 [d5,b5] ~@4 [d5,b5] ~ [d5,b5] ~ [d5,b5]", AU: "~@2 [d5,b5] ~@3 b5 ~@3 [d5,b5] b5 ~@4",
  AV: "~@2 [d5,b5]!2 ~@2 [d5,b5] ~@3 [d5,b5] b5 ~@2 [d5,b5] ~", AW: "~@3 [d5,b5] ~@2 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5] ~",
  AX: "~@2 [d5,b5] ~@3 b5!2 ~@2 b5 ~@3 [d5,b5]!2", AY: "~@2 [d5,b5] ~@3 [d5,b5]!2 ~@2 b5 ~@4 b5",
  AZ: "~@2 [d5,b5] ~@3 [d5,b5]!2 ~@2 [d5,b5] ~@3 [d5,b5]!2", BA: "~@2 [d5,b5] ~@3 [d5,b5] b5 ~@5 b5 f#5 a5",
  BB: "b5!4 f#5 a5 b5 ~@7 f#5 a5", BC: "b5!4 f#5 a5 b5 ~@8 [d5,b5]", BD: "~@2 b5 ~@3 b5 ~@3 b5 ~@3 [d5,b5]!2",
  BE: "~@2 b5 ~@3 b5 [d5,b5] ~@2 [d5,b5] ~@3 d5!2", BF: "~@2 [d5,b5] ~@7 [d5,b5] ~@3 b5 [d5,b5]",
  BG: "~@2 [d5,b5] ~@4 d5 ~@2 [d5,b5] ~@3 [d5,b5] d5", BH: "~@2 [d5,b5] ~@3 b5 ~@3 [d5,b5] ~@3 b5 [d5,b5]",
  BI: "~@2 [d5,b5] ~@3 b5 [d5,b5] ~@2 [d5,b5] ~@4 b5", BJ: "~@2 [d5,b5] ~@3 b5 [d5,b5] ~@2 b5 ~@5",
  BK: "b5!4 f#5 a5 b5 ~@9", BL: "~@7 [e5,g5] ~@2 [e5,g5,b5] ~@3 [e5,g5,b5] [e5,g5]",
  BM: "~@2 [d5,f#5,a5] ~@3 [d5,f#5,a5] [d5,f#5] ~@2 [d5,a5] ~@3 [d5,f#5,a5] [d5,f#5]", // D D5 D
  BN: "~@2 [e5,g5,b5] ~@3 [e5,g5,b5] [e5,g5] ~@2 [e5,g5,b5] ~@3 g5 e5", // Em
  BO: "~@2 [d5,f#5,a5] ~@3 f#5 [d5,f#5] ~@2 [d5,f#5,a5] ~@3 f#5!2", // D
  BP: "~@2 [e5,g5,b5] ~@3 [e5,g5,b5]!2 ~@2 [e5,g5,b5] ~@5", // Em
  BQ: "~@2 f#5 [d5,f#5] ~@2 [d5,f#5,a5] ~@4 [d5,f#5] ~@2 [d5,f#5,a5] ~", // D
  BR: "~@2 [g5,b5] [e5,g5,b5] ~@2 [e5,g5,b5] ~@3 g5 [e5,g5,b5] ~@2 [g5,b5] ~", // G Em G
  BS: "~@3 [d5,f#5] ~@2 [d5,f#5,a5] ~ [d5,f#5,a5] ~@3 e5 ~@3", BT: "~@2 b5 [d5,b5] ~@2 b5 ~@3 b5 [d5,b5] ~@2 b5 ~",
  BU: "~@3 [d5,b5] ~@2 [d5,b5] ~@4 b5 ~@2 [d5,b5]!2", BV: "~@2 b5 ~@4 [d5,b5] ~@2 [d5,b5] ~@3 b5 ~",
  BW: "~@3 [d5,b5] ~ [d5,b5] ~@4 [d5,b5] ~@3 [d5,b5] ~", BX: "~@2 [d5,b5] ~@3 [d5,b5] ~@3 d5 [d5,b5] ~@2 [d5,b5] ~",
  BY: "~@3 [d5,b5] ~@2 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5] d5", BZ: "~@2 [d5,b5] ~@4 [d5,b5] ~@7 [d5,b5]",
  CA: "~@2 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5]!2 ~@2 [d5,b5]!2", CB: "~@2 [d5,b5] ~@3 d5 [d5,b5] ~@2 [d5,b5] ~@4 [d5,b5]",
  CC: "~@2 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5] ~", CD: "~@2 [d5,b5] ~@3 [d5,b5] ~@3 d5 ~@3 [d5,b5]!2",
  CE: "~@2 [d5,b5] ~@3 [d5,b5] ~@3 [d5,b5] ~@5", // G
})).s("gm_rock_organ").gain(0.33).pan(0.7)

// other · percussive organ · "tk8"
const percussive_organ = note("<~@49 A B C D@6 B@2 D E D F ~@10 A D B D G ~@11 A D B D B D B D B D B D G>".pickRestart({
  A: "~@14 f#5 a5", B: "b5!2 ~ b5 f#5 a5 b5 ~@7 f#5 a5", C: "b5!4 ~ a5 b5 ~@7 f#5 a5", D: "b5!4 f#5 a5 b5 ~@7 f#5 a5",
  E: "b5 ~ b5!2 f#5 a5 b5 ~@7 f#5 a5", F: "b5!4 f#5 a5 b5 ~@9", G: "b5!2 ~ b5 f#5 a5 b5 ~@9",
})).s("gm_percussive_organ").gain(0.33).pan(0.6)

// chords · electric guitar muted · "tk9"
const electric_guitar_muted = note(`<
  ~@6 A@8 B@8 C D E F E D E G H@8 C D E F E D E G C D E F H@8 I@8 H@8 J@6 D E F E D E G H@8 K@8
>`.pickRestart({
  A: "[~@12 e3 f3 f#3 [a3,d4]@3 b3@2 ~@8 f#3 f3 e3 d3@3 b2 ~@9 e3 f3 f#3 [a3,d4]@3 ~@10 f#3 ~ e3 d3@3 b2 ~@9 e3 ~ f#3 [a3,d4]@3 b3 ~@9 f#3 f3 e3 d3@3 b2 ~@9 e3 f3 f#3 [a3,d4]@3 b3 ~@9 f#3 ~@2 d3]/8", // D5
  B: "[~@2 b2 ~@9 e3 ~@2 [a3,d4]@3 b3 ~@9 f#3 ~ e3 d3@3 b2 ~@9 e3 f3 ~ [a3,d4]@3 b3 ~@9 f#3 ~@2 d3@3 ~@10 e3 ~ f#3 [a3,d4]@3 ~@12 e3 d3@3 b2 ~@9 e3 ~ f#3 [a3,d4]@3 b3 ~@9 f#3 ~@2 d3]/8", // D5
  C: "~@2 [e4,g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [e4,g4,b4] ~", // Em G Em
  D: "~@2 [f#4,a4] ~@3 [f#4,a4] ~@3 [f#4,a4] ~@3 [f#4,a4] ~", E: "~@2 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~",
  F: "~@2 a4 ~@3 [f#4,a4] ~@3 [f#4,a4] ~@3 [f#4,a4] ~", G: "~@2 [f#4,a4] ~@3 [f#4,a4] ~@3 a4 ~@3 [f#4,a4] ~",
  H: "[~@12 e3 f3 f#3 [a3,d4]@3 b3@2 ~@8 f#3 f3 e3 d3@3 b2 ~@9 e3 f3 f#3 [a3,d4]@3 ~@10 f#3 f3 e3 d3@3 b2 ~@9 e3 ~ f#3 [a3,d4]@3 b3 ~@9 f#3 f3 e3 d3@3 b2 ~@9 e3 f3 f#3 [a3,d4]@3 b3 ~@9 f#3 ~@2 d3]/8", // D5
  I: "[~@2 b2 ~@9 e3 ~@2 [a3,d4]@3 b3 ~@9 f#3 ~ e3 d3@3 b2 ~@9 e3 f3 ~ [a3,d4]@3 b3 ~@9 f#3 ~@2 d3@3 ~@10 e3 ~ f#3 [a3,d4]@3 ~@13 d3@3 b2 ~@9 e3 ~ f#3 [a3,d4]@3 b3 ~@9 f#3 ~@2 d3]/8", // D5
  J: "[~@2 b2 ~@9 e3 ~@2 [a3,d4]@3 b3 ~@9 f#3 ~ e3 d3@3 b2 ~@9 e3 f3 ~ [a3,d4]@3 b3 ~@9 f#3 ~@2 d3@3 ~@10 e3 ~ f#3 [a3,d4]@3 [e4,g4,b4] ~@3 [g4,b4] ~@3 [g4,b4] ~@3 [e4,g4,b4] ~]/6", // D5 Em G Em
  K: "[~@2 b2 ~@9 e3 ~@2 [a3,d4]@3 b3 ~@9 f#3 ~ e3 d3@3 b2 ~@9 e3 f3 ~ [a3,d4]@3 b3 ~@9 f#3 ~@2 d3@3 ~@10 e3 ~ f#3 [a3,d4]@3 b3@2 ~@8 f#3 f3 e3 d3@3 b2 ~@9 e3 f3 f#3 [a3,d4]@3 ~@4 b2 ~@3 b2 ~@5]/8", // D5
})).s("gm_electric_guitar_muted").gain(0.33).pan(0.3)

// chords · electric guitar muted · "tk9" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@9 A B ~@2 C D B E C F G B@2 H I ~ J K ~ K L ~@3 A B ~@2 C H I ~ J K ~ K L H I ~ J ~@3 A B ~@2 C D B E C F M B@2 ~@3
  A B ~@2 C D B E C F H I ~ J K ~ K L ~@3 A B ~@2 C D B E B ~@3 A
>`.pickRestart({
  A: "~@2 b3 ~@13", B: "~@13 f3 ~@2", C: "~@13 f3 e3 ~", D: "~@11 d3 ~ f3 ~@2", E: "~@11 d3 ~@4",
  F: "~@2 b2 ~@10 f3 ~@2", G: "~@2 b3 ~@9 f#3 f3 ~@2", H: "~@10 e4 ~@5", I: "~@6 d4 ~@3 d4 ~@5", J: "~@2 f#4 ~@11 d4 ~",
  K: "~@14 e4 ~", L: "~@10 f#4 ~@5", M: "~@2 b3 ~@10 f3 ~@2",
})).s("gm_electric_guitar_muted").gain(0.16).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 [x!4] [x ~ x ~@2 x!3] [x ~ x ~ x ~ x!2] [x!3 ~] [x!8]!96 [x!6 ~@2]>").gain(0.49)

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

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

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

// … 18 more lines

More by Bob Marley