Strudelify
Three Little Birds cover art

1977 · Exodus

Three Little Birds

Bob Marley

KeyA majorTempo146 bpm
0:00/0:00
// Three Little Birds — Bob Marley
// 146 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(146/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 H I J K L M N L@2 O P L Q R S L I T U V W L O X Y L U Z AA AB AC I AD AE AF AG L N AH L@3 AI O AJ N@2
  L P AK L W@2 L@2 X AL L@2 W Z N AM AI L AK L@3 M N AJ AI L@2 AN AI AH S AI L AO AP AQ AP AR@2 AS AT AS@3 AU AR AV AS
  AW AX AY AZ BA BB
>`.pickRestart({
  A: "[a1,a2]@3 ~ [a1,a2,a5,c#6,e6]@3 ~ [a1,a2]@4 [a5,c#6,e6]@2 ~@2, ~@4 [a6,c#7] ~@7 [a6,c#7] ~@3", // A
  B: "~@4 [d#3,a5,c#6,e6,a6,c#7] ~@3 c#3@2 e7 ~ [e3,a5,c#6,e6]@3 ~, ~@4 e3@4 ~@4 [a6,c#7] ~@3", // A
  C: "[a1,a2]@2 [a1,a2]@2 [a5,c#6,e6,a6,c#7] ~ [a1,a2] ~ [a1,a2]@3 ~ [a5,c#6,e6]@3 ~, [a6,c#7] ~@7 [a6,c#7] ~@3 [a6,c#7] ~@3", // A
  D: "~@4 [a5,c#6,e6]@3 ~@3 e7 ~ [a5,c#6,e6]@3 ~, ~@4 [a6,c#7] ~@7 [a6,c#7] ~@3", // A
  E: "[a1,a2]@3 ~ [a1,a2,a5,c#6,e6]@3 ~ [a1,a2]@4 [a5,c#6,e6]@3 ~, [a6,c#7] ~@3 [a6,c#7] ~@3 [a6,c#7] ~@3 [a6,c#7] ~@3", // A
  F: "~@4 [d#3,a6,c#7] ~@3 c#3@2 e7 ~ [e3,a5,c#6,e6]@3 ~, ~ [e3,a5] ~@2, ~@4 [c#6,e6]@2 ~@6 [a6,c#7] ~@3", // D#m7b5 A A5 C#m A
  G: "[a1,a2]@2 [a1,a2]@2 [a5,a6,c#7] ~ [a1,a2] ~ [a1,a2]@2 ~@2 [a5,c#6,e6,a6,c#7] ~@3, [a6,c#7] ~@3 [c#6,e6]@2 ~@2 c#7 ~@7", // A C#m
  H: "~@4 [a5,c#6,e6]@3 ~@3 e7 ~ [a5,c#6,e6]@2 ~@2, ~@4 [a6,c#7] ~@7 [a6,c#7] ~@3", // A
  I: "~@4 [e4,a4,c#5]@2 ~@6 [a4,c#5] ~@3, ~@6 e4 ~", J: "~@4 [e4,a4,c#5]@2 ~@6 [e4,a4,c#5] ~@3",
  K: "~@4 [a4,c#5] ~@7 [e4,a4,c#5]@3 ~, ~@2 e4 ~@5", L: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~",
  M: "~@2 [f#4,a4,d5] ~@3 [f#4,d5] ~, ~@12 a4 ~@3", N: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~",
  O: "~@4 [e4,a4,c#5]@2 ~@6 [e4,a4,c#5]@3 ~", P: "~@2 [e4,a4,c#5] ~@3 [e4,c#5] ~, ~@12 a4 ~@3",
  Q: "~@2 [a4,c#5] ~@3 [e4,a4,c#5] ~, ~@4 e4 ~@11", R: "~@2 [f#4,d5] ~@3 [f#4,a4,d5] ~, ~@4 a4 ~@11",
  S: "~@4 [f#4,a4,d5]@2 ~@6 [f#4,a4,d5]@3 ~", T: "~@2 [e4,a4] ~@3 [e4,c#5] ~, ~@4 c#5 ~@7 a4 ~@3",
  U: "~@4 [a4,c#5] ~@7 [e4,a4,c#5]@2 ~@2, ~@2 e4 ~@5", V: "~@2 [g#4,b4,e5] ~@3 [g#4,b4] ~, ~@12 e5 ~@3",
  W: "~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~", X: "~@2 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~",
  Y: "~@4 [a4,d5,f#5]@3 ~@5 [a4,d5,f#5]@3 ~", Z: "~@2 [g#4,b4,e5] ~@3 [b4,e5] ~, ~@12 g#4 ~@3",
  AA: "~@2 [b4,e5] ~@3 [g#4,b4,e5] ~, ~@4 g#4 ~@11", AB: "~@4 [f#4,d5]@2 ~@6 [a4,d5] ~@3, ~@4 a4 ~@7 f#4@2 ~@2",
  AC: "~@2 [f#4,a4,d5] ~@3 [e4,a4,c#5] ~", AD: "~@4 [e4,c#5]@2 ~@6 [a4,c#5] ~@3, ~@4 a4 ~@7 e4@2 ~@2",
  AE: "~@2 [e4,a4] ~@3 [e4,a4] ~, ~@4 c#5 ~@7 c#5 ~@3", AF: "~@2 [e4,a4] ~@3 [e4,a4,c#5] ~, ~@4 c#5 ~@11",
  AG: "~@2 [e4,c#5] ~@3 [e4,c#5] ~, ~@4 a4 ~@7 a4 ~@3", AH: "~@4 [f#4,a4,d5]@3 ~@5 [f#4,a4,d5]@3 ~",
  AI: "~@4 [e4,a4,c#5]@3 ~@5 [e4,a4,c#5]@2 ~@2", AJ: "~@4 [e4,a4,c#5]@3 ~@5 [e4,a4,c#5]@3 ~",
  AK: "~@4 [a4,c#5] ~@7 [a4,c#5] ~@3, ~@2 e4 ~@3 e4 ~", AL: "~@4 [a4,d5,f#5]@3 ~@5 [a4,d5,f#5]@2 ~@2",
  AM: "~@4 [f#4,a4,d5]@2 ~@6 [e4,a4,c#5]@3 ~", AN: "~@4 [e4,a4,c#5]@2 ~@6 [e4,c#5]@3 ~, ~@12 a4 ~@3",
  AO: "~@2 [e4,a4,c#5,e5] ~@3 [e4,a4,c#5,e5] ~", AP: "~@4 [e4,a4,c#5,e5]@3 ~@5 [e4,a4,c#5,e5]@2 ~@2",
  AQ: "~@2 [e4,a4,c#5,e5] ~@3 [e4,a4,c#5] ~, ~@12 e5 ~@3", AR: "~@4 [f#4,a4,d5,f#5]@3 ~@5 [f#4,a4,d5,f#5]@3 ~",
  AS: "~@4 [e4,a4,c#5,e5]@3 ~@5 [e4,a4,c#5,e5]@3 ~", AT: "~@4 [e4,c#5,e5]@2 ~@6 [e4,a4,c#5,e5]@3 ~, ~@4 a4 ~@11",
  AU: "~@4 [e4,c#5,e5]@3 ~@5 [e4,a4,c#5,e5]@3 ~, ~@4 a4 ~@11", AV: "~@4 [f#4,a4,d5,f#5]@2 ~@6 [f#4,a4,d5,f#5]@3 ~",
  AW: "~@4 [e4,a4,c#5,e5]@3 ~@5 [e4,e5]@2 ~@2, ~@12 [a4,c#5] ~@3", // A E A
  AX: "~@4 [e4,a4,c#5,e5]@3 ~@5 [e4,a4,c#5]@2 ~@2, ~@12 e5 ~@3", // A
  AY: "~@4 [e4,a4,c#5]@3 ~@5 [e4,a4,c#5]@2 ~@2, ~@4 e5 ~@7 e5 ~@3", // A
  AZ: "~@4 [a4,c#5,e5] ~@7 [e4,e5]@2 ~@2, ~@4 e4@2 ~@6 [a4,c#5] ~@3", // A E A
  BA: "~@4 [e4,a4]@2 ~@6 [e4,a4,c#5,e5] ~@3, ~@4 [c#5,e5] ~@11", BB: "[a2,a3] ~ [a2,a3]@2 ~@2 [a2,a3] ~ [a2,a3]@2 ~@6",
})).s("gm_piano").gain(0.33).pan(0.6)

// bass · fretless bass · "tk2"
const bass = note(`<
  ~ A B C D A E F D A G H I J K L I A M N I J O A I L C P B Q L R S A L T U V W@2 X A B L B J Y A B N B N B J S Z B H AA
  AB B N@2 AC O A AD AE AF AG AH@2 AI A B L B J O A B N B N B J O Z B A B L B J O A B N B N B J O Z B A B A B N
>`.pickRestart({
  A: "a1@3 ~ a1@3 ~ a1@3 ~@5", B: "~@4 e2@4 c#2@4 e2@3 ~", C: "a1@2 a1@3 ~ a1 ~ a1@2 ~@6",
  D: "~@4 g1@2 a1@2 f#1@2 a1@2 f#1@3 ~", E: "~@4 e2@4 c#2@3 ~ e2@4", F: "a1@2 a1@3 ~ a1 ~ a1@2 a0 ~ a0@2 ~@2",
  G: "~@4 e2@4 c#2@3 ~@5", H: "a1@2 a1@2 ~@2 a1 ~ a1@2 ~@6", I: "~@4 e2@4 c#2@3 ~ e2@3 ~", J: "d2@3 ~ d2@3 ~ d2@3 ~@5",
  K: "~@4 a2@4 f#2@3 ~ a2@2 ~@2", L: "a1@2 a1@3 ~ a1 ~ a1@3 ~@5", M: "~ e2 c#2 e2", N: "a1 ~ a1@3 ~ a1 ~ a1@3 ~@5",
  O: "~@2 f#2 a2 f#2 a2 f#2 a2", P: "e2@2 e2@3 ~ e2 ~ e2@3 ~@5", Q: "a1 ~ a1@2 ~@2 a1 ~ a1@3 ~@5",
  R: "d2@2 d2@3 ~ d2 ~ d2@3 ~ d2@3 ~", S: "~@4 f#2@2 a2@2 f#2@2 a2@2 f#2@2 a2 ~", T: "e1 ~ e1@3 ~ e1 ~ e1@3 ~@5",
  U: "e1 ~ e1@3 ~ e1 ~ e1@4 d#1@3 ~", V: "d1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", W: "[c2@3 ~ c2@3 ~ b1@3 ~ a1@13 ~@7]/2",
  X: "~@8 e1@3 ~ g1@3 ~", Y: "~@4 f#2@2 a2@2 f#2@2 a2 ~ f#2@2 a2@2", Z: "a1@3 ~ a1@3 ~ a1@4 ~@4",
  AA: "a1 ~ a1@2 ~@2 a1 ~ a1@2 ~@6", AB: "e2@2 e2@2 ~@2 e2 ~ e2@2 ~@6", AC: "d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@6",
  AD: "a1 ~ a1@3 ~ a1 ~ a1@2 ~@6", AE: "e2@3 ~ e2@3 ~ e2@3 ~@5", AF: "e2@2 e2@3 ~ e2 ~ e2@4 d#2@3 ~",
  AG: "d2@4 a1@3 ~ a1@3 ~ a1@4", AH: "[c2@3 ~ c2@3 ~ b1@3 ~ a1@8 a1@5 ~ a1@6]/2", AI: "~@8 e1@3 ~ g1@2 ~@2",
})).s("gm_fretless_bass").gain(0.38)

// other · steel drums · "tk4"
const steel_drums = note(`<
  ~@8 A B C@2 D E F ~ G H I ~ D E F ~ J K L M N ~ O P Q R S T U V W X Y H C@2 D E Z ~ G H AA ~ D E F ~ J K AB M AC ~ O
  AD AE AF S T U V W AG Y H C@2 AH E F AI G H I AJ AK E F ~ AL AM C@2 D E F AN AO H I ~ D E Z ~@7
>`.pickRestart({
  A: "~@3 c#5", B: "b4 a4 ~@2", C: "[~@3 a4 c#5@2 e5 c#5@2 ~@7]/2", D: "~@12 a4@3 ~",
  E: "f#5 ~ f#5 ~ f#5 ~ f#5 ~ f#5@2 ~@6", F: "~@4 f#5 ~ f#5 ~ g5@2 f#5@3 ~ e5@2", G: "~@8 c#5@2 e5 ~ e5@3 ~",
  H: "e5@2 f#5 ~@5", I: "~@6 a4 ~ c#5@3 ~ e5@2 c#5@2", J: "~@8 a4@2 ~ b4@2 a4@2 ~", K: "c#5@3 ~ c#5@3 ~@9",
  L: "~@6 c#5@3 ~ d5@3 ~ c#5@2", M: "c#5@3 ~ b4@3 ~ b4@3 ~@5", N: "~@4 f#5!2 e5 f#5", O: "~@6 f#5 ~ f#5@3 ~ e5@3 ~",
  P: "f#5@3 ~ d5@3 ~@9", Q: "~@8 f#5 ~ a5@3 ~ f#5@2", R: "~@2 e5@3 ~@11", S: "~@6 c#5 ~ c#5@2 d5 ~ e5@3 ~",
  T: "e5@3 ~ d5@3 ~ b4@3 ~@5", U: "~@4 c#5 e5 ~@2", V: "~@2 a4 ~ a4 ~ a4 ~", W: "a4 ~ b4 ~ a4 ~ c#5 ~",
  X: "c#5 ~ a4@2 ~@4", Y: "~@8 c#5@2 e5 ~ e5@2 ~@2", Z: "~@2 f#5 ~ f#5 ~ f#5 ~ g5@2 f#5@3 ~ e5@2",
  AA: "~@8 c#5@3 ~ e5@2 c#5@2", AB: "~@6 c#5@5 ~ d5@2 c#5 ~", AC: "~@6 f#5@3 ~ f#5@2 e5@2 f#5@2",
  AD: "f#5@3 ~ d5@2 ~@10", AE: "~@8 f#5@2 a5@3 ~ f#5@2", AF: "~ e5 ~@6", AG: "c#5@2 ~@2 a4@3 ~@9",
  AH: "c#5 ~ c#5@2 e5@2 f#5 ~ g5@2 f#5@3 ~@3", AI: "~@10 f#5 ~ f#5@2 e5@2", AJ: "~@11 e5@2 f#5@2 ~",
  AK: "g5@2 ~ f#5@2 ~@7 a4@3 ~", AL: "~@12 e5@3 ~", AM: "e5@3 ~ f#5@3 ~@9", AN: "~@5 f#5 ~ f#5",
  AO: "f#5@2 e5@2 ~@8 e5@3 ~",
})).s("gm_steel_drums").gain(0.35)

// chords · piano · "tk5"
const piano_2 = note(`<
  ~@16 A B C ~@2 D E ~@14 F G H A I J ~@2 K L ~ M I N ~@2 K O ~@14 P Q R A S C ~@2 T L ~ M S N ~@2 U O ~ A S V ~@2 T L ~
  M S N ~@2 W O ~@7
>`.pickRestart({
  A: "~@3 [e4,a4]", B: "[d4,f#4,a4]@2 [c#4,e4,a4] ~@5",
  C: "~@6 [c#4,e4,a4]@2 [c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2", // A
  D: "[f#4,a4,d5]@2 [f#4,a4,d5] ~ [f#4,a4,d5]@2 [f#4,a4,d5] ~ [f#4,a4,d5]@2 ~@6", // D
  E: "~@4 [d4,f#4,a4]@2 [d4,a4] ~ [d4,f#4,a4]@2 [d4,f#4,a4]@2 ~@2 [c#4,e4,a4]@2, ~@3 f#4 ~@4", // D D5 D A
  F: "~@4 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [a3,d4,f#4]@3 ~", // D
  G: "[d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [e4,a4,c#5]@2 ~@2", H: "[e4,a4,c#5] ~ [c#4,e4,a4]@3 ~@3",
  I: "[d4,a4]@4 [c#4,a4]@3 ~@9", J: "~@6 [c#4,e4] ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2, ~@3 a4 ~@4",
  K: "[d4,f#4,a4]@2 [d4,f#4,a4] ~ [d4,f#4,a4]@2 [d4,f#4,a4] ~ [d4,f#4,a4]@2 ~@6", // D
  L: "~@4 [d4,f#4,a4] [d4,f#4,a4]@2 [c#4,e4,a4]", M: "~@3 e4", N: "~@8 [c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2",
  O: "~@8 [d4,f#4,a4]@2 [d4,f#4,a4]@3 ~ [c#4,e4,a4]@2", P: "~@4 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [a3,d4,f#4]@4",
  Q: "[d4,f#4,a4]@4 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [e4,a4,c#5]@3 ~", R: "[e4,a4,c#5]@4 [c#4,e4,a4]@7 ~@5",
  S: "[d4,a4]@2 [c#4,a4] ~@5", T: "[d4,f#4,a4] [d4,a4] [d4,f#4,a4]!3 ~@3, ~@2 f#4 ~@13",
  U: "[f#4,a4] ~ [d4,a4]@2 [d4,f#4,a4]@2 [d4,f#4,a4]@2 [d4,f#4,a4]@2 ~@6, d4@2 f#4 ~@13", // F#m D5 D
  V: "~@6 [c#4,a4]@2 [c#4,e4,a4]@3 ~ [c#4,e4,a4]@2 [c#4,e4,a4]@2, ~@6 e4 ~@9", // F#m A
  W: "[d4,f#4,a4]@2 [d4,f#4] ~ [d4,f#4,a4]@2 [d4,f#4] ~ [d4,f#4,a4]@2 ~@6, ~ a4 ~ a4 ~@4", // D
})).s("gm_piano").gain(0.22).pan(0.4)

// chords · rock organ · "tk6"
const rock_organ = note(`<
  ~ A@2 B@2 A B@3 A@3 B C D A@3 B A@2 C D A@2 E A F@2 G@2 H@2 G@2 F@2 I J@2 ~ A@4 C K A@6 L D A M A@2 F N O@2 H@2 G O F
  N I P@2 ~ Q A@3 C D A@4 B@2 R@2 A@2 S B@3 C K A B A B A@2 R K T A@2 B@2 U V
>`.pickRestart({
  A: "~@4 [a4,c#5,e5] ~@3 [a4,c#5,e5]@3 ~@5", B: "~@4 [a4,c#5,e5] ~@3 [a4,c#5,e5]@4 ~@4",
  C: "~@4 [a4,d5,f#5] ~@3 [a4,d5,f#5]@3 ~@5", D: "~@4 [a4,d5,f#5] ~@3 [a4,c5,f#5]@3 ~@5",
  E: "~@4 [c#5,e5] ~@3 [a4,c#5,e5]@2 ~@6", F: "~@4 [b4,e5,g#5] ~@3 [b4,e5,g#5]@3 ~@5",
  G: "~@4 [c#5,e5,a5] ~@3 [c#5,e5,a5]@3 ~@5", H: "~@4 [d5,f#5,a5] ~@3 [d5,f#5,a5]@3 ~@5",
  I: "~@4 [d5,f#5,a5]@3 ~ [d5,f#5,a5]@3 ~ [d5,f#5,a5]@3 ~", // D
  J: "[[d5,f#5,a5]@3 ~ [d5,f#5,a5]@3 ~ [d5,f#5,a5]@3 ~ [c#5,e5,a5]@11 ~@9]/2", // D A
  K: "~@4 [a4,d5,f#5] ~@3 [a4,c5,f#5]@4 ~@4", L: "~@4 [a4,f#5] ~@3 [a4,d5,f#5]@3 ~@5",
  M: "~@4 [c#5,e5] ~@3 [a4,c#5,e5]@3 ~@5", N: "~@4 [b4,e5,g#5] ~@3 [b4,e5,g#5]@4 ~@4",
  O: "~@4 [c#5,e5,a5] ~@3 [c#5,e5,a5]@4 ~@4", P: "[[d5,f#5,a5]@3 ~ [d5,f#5,a5]@4 [d5,f#5,a5]@3 ~ [c#5,e5,a5]@13 ~@7]/2",
  Q: "~@4 [a4,c#5] ~@3 [a4,c#5,e5]@4 ~@4", R: "~@4 [a4,d5,f#5] ~@3 [a4,d5,f#5]@4 ~@4", S: "~@2 [a4,c#5,e5] ~",
  T: "~@4 [a4,c#5] ~@3 [a4,c#5,e5]@3 ~@5", U: "~@4 [a4,c#5,e5] ~@3 [a4,c#5,e5]@7 ~",
  V: "[a4,c#5] ~ [a4,c#5]@3 ~ [a4,c#5] ~ [a4,c#5]@3 ~@5", // A
})).s("gm_rock_organ").gain(0.27).pan(0.8)

// chords · rock organ · "tk7"
const rock_organ_2 = note(`<
  ~ A B@2 C D B E F G H F I J K L@3 M@2 I J K L@2 H G N O L I J K F G N P Q@3 R F G H F I J K L@3 M@2 I J K S H G N O L
  I J K F G N P Q@3 R F G H F I J K L@3 M@2 I J K L F G H F I J K L@3 M@2 I J K S F G K S T
>`.pickRestart({
  A: "~@2 a4 ~@3 [e4,a4] ~@7 [e4,a4] ~", B: "~@2 [e4,a4] ~@3 [e4,a4] ~@5 [e4,a4] ~ [e4,a4] ~",
  C: "~@2 [e4,a4] ~@3 [e4,a4] ~@5 e4 ~ [e4,a4] ~", D: "~@2 [e4,a4] ~@3 [e4,a4] ~@5 [e4,a4] ~ a4 ~",
  E: "~@2 a4 ~@3 [e4,a4] ~@5 e4 ~ a4 ~", F: "~@2 [e4,a4] ~@3 [e4,a4] ~@7 a4@2", G: "~@2 [e4,a4] ~@3 [e4,a4] ~@7 e4@2",
  H: "~@2 a4 ~@3 [e4,a4] ~@7 [e4,a4]@2", I: "~@2 [e4,a4] ~@3 [e4,a4] ~@7 [f#4,a4]@2",
  J: "~@2 [f#4,a4] ~@3 [f#4,a4] ~@7 [f#4,a4]@2", K: "~@2 [f#4,a4] ~@3 [f#4,a4] ~@7 [e4,a4]@2",
  L: "~@2 [e4,a4] ~@3 [e4,a4] ~@7 [e4,a4]@2", // A5
  M: "[~@2 [e4,a4] ~@3 [e4,a4] ~@7 [e4,a4]@4 [e4,a4] ~@3 [e4,a4] ~@7 [e4,a4]@2]/2", // A5
  N: "~@2 [e4,g#4] ~@3 [e4,g#4] ~@7 [e4,g#4]@2", O: "~@2 [e4,g#4] ~@3 [e4,g#4] ~@7 [e4,a4]@2",
  P: "~@2 [e4,g#4] ~@3 [e4,g#4] ~@9", Q: "[f#4@28 e4@11 ~@9, a4@5 ~]/3", R: "~@7 [e4,a4]",
  S: "~@2 [e4,a4] ~@3 [e4,a4] ~@9", T: "a3 ~ a3@2 ~@2 a3 ~ a3@2 ~@6",
})).s("gm_rock_organ").gain(0.22).pan(0.2)

// chords · rock organ · "tk7" · soft notes
const rock_organ_soft = note(`<
  ~ A ~@2 B C ~ D E F G E ~@13 G H ~@6 E H ~@6 E F G E ~@12 G H ~@6 E H ~@6 E F G E ~@12 E F G E ~@12 E F ~@3
>`.pickRestart({
  A: "~@2 e4 ~@9 [e4,a4] ~@3", B: "~@12 a4 ~@3", C: "~@14 e4 ~", D: "~@2 e4 ~@9 a4 ~ e4 ~", E: "~@7 e4", F: "~@7 a4",
  G: "~@2 e4 ~@13", H: "~@7 g#4",
})).s("gm_rock_organ").gain(0.11).pan(0.2)

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

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ B ~ A ~ B D A ~ B ~ A ~ B D A ~ A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ B
  ~ A ~ B D A ~ B ~ A ~ B D A ~ A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ A ~ B ~ A ~ C ~ A ~ C D
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@2 x!2", D: "~ x ~@2",
})).gain(0.44)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A B A B A B A B A B A B A B A B C@16 D E D E D E D E D E D E D E D E C@16 D E D E D E D E D E D E D E D E D E D E
  D E D E D E D E D E D E D E D E F
>`.pickRestart({
  A: "~@3 x!2 ~@2 x", B: "x ~@2 x!2 ~@3", C: "x!8", D: "x ~@2 x!2 ~@2 x", E: "x!5 ~@2 x", F: "x!2 ~ x!2 ~@3",
})).gain(0.27)

// drums · splash
const splash = s("cr").struct(`<
  ~@9 A ~@15 A ~@12 B ~ C B ~@6 B ~@8 A ~@6 B ~@5 B ~ B ~@7 B ~@7 B A ~@6 B ~@7 B ~@5
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.44)
// … 22 more lines

More by Bob Marley