Strudelify

I shot the Sheriff

Bob Marley

KeyG minorTempo180 bpm
0:00/0:00
// I shot the Sheriff — Marley Bob
// 180 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 207 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/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 · synth strings 1
const synth_strings_1 = note(`<
  ~@18 A B C@2 A B C@2 A B C@2 A B C@2 A B D@2 ~@5 D@2 E@2 F@4 G@4 F@4 A B C@2 A B C@2 A B C@2 A B C@2 A B D@2 ~@5 D@2
  E@2 F@4 G@4 F@4 A B C@2 A B C@2 A B C@2 A B C@2 A B D@2 ~@8 D@2 E@2 F@4 G@4 F@4 A B C@2 A B C@2 A B C@2 A B C@2 A B
  D@2 ~@5 D@2 E@2 F@4 G@4 F@4 D@2 E@2 F@4 G@4 F@4 ~@6
>`.pickRestart({
  A: "[bb3,eb4,g4]@15 ~", B: "[a3,d4,f4]@15 ~", C: "[bb3,d4,g4]/2", D: "[[bb3,d4,g4]@31 ~]/2",
  E: "[[c4,eb4,g4]@31 ~]/2", F: "[[bb3,d4,g4]@31 ~]/4", G: "[[bb3,d4] [c4,eb4], g4@63 ~]/4",
})).s("gm_synth_strings_1").gain(0.1)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@2 A@2 B@2 C@6 B@2 D@2 E@2 F G H I J K L M N O P Q R S T U ~@9 A@2 B@2 C@6 B@2 D@2 E@2 F G H I J K L M N O P Q R S T
  U ~@9 A@2 B@2 C@6 B@2 D@2 E@2 F G H I J K L M N O P Q R S T U ~@12 A@2 B@2 C@6 B@2 D@2 E@2 F G H I J K L M N O P Q R S
  T U ~@9 A@2 B@2 C@6 B@2 D@2 E@2 A@2 B@2 C@6 B@2 D@2 E@2 ~@6
>`.pickRestart({
  A: "[[bb3,d4,g4] ~@6 [bb3,d4,g4] ~@4 [bb3,d4,g4]@15 ~@5]/2", // Gm
  B: "[[c4,eb4,g4] ~@6 [c4,eb4,g4] ~@4 [c4,eb4,g4]@15 ~@5]/2", // Cm
  C: "[[bb3,d4,g4] ~@6 [bb3,d4,g4] ~@4 [bb3,d4,g4]@16 ~@4]/2", // Gm
  D: "[[bb3,d4,g4]@2 ~@5 [bb3,d4,g4] ~@4 [bb3,d4,g4]@16 ~@4]/2", // Gm
  E: "[[bb3,d4,g4] ~@6 [bb3,d4,g4] ~@4 [bb3,d4,g4]@12 ~@8]/2", // Gm
  F: "~@4 [g4,bb4,eb5] ~@2 [g4,bb4,eb5]!2 ~@3 [g4,bb4,eb5] ~@3", G: "~@4 [f4,a4,d5] ~@3 a4 ~@3 [f4,a4,d5] ~@3",
  H: "~@4 [f4,g4,bb4,d5] ~@2 g4 [g4,bb4] ~@3 [f4,g4,bb4,d5] ~@3", // Gm7 Gm Gm7
  I: "~@4 [f4,g4,bb4,d5] ~@2 [g4,bb4,d5] ~@4 [f4,g4,bb4,d5] ~@3", // Gm7 Gm Gm7
  J: "~@4 [g4,bb4,eb5] ~@2 [bb4,eb5]!2 ~@3 [g4,bb4,eb5] ~@3", // Eb Eb5 Eb
  K: "[a4,d5] ~@3 [f4,a4,d5] ~@2 [f4,a4,d5] [a4,d5] ~@3 [f4,a4,d5] ~@3", // D5 Dm D5 Dm
  L: "[bb4,d5] ~@3 [f4,g4,bb4,d5] ~@2 [f4,g4,bb4,d5] [g4,bb4] ~@3 [f4,g4,bb4,d5] ~@3", // Bb Gm7 Gm Gm7
  M: "g4 ~@3 [f4,g4,bb4,d5] ~@2 [f4,g4,bb4,d5]!2 ~@3 [f4,g4,bb4,d5] ~@3", // Gm7
  N: "[g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@2 [g4,bb4,eb5]!2 ~@3 [g4,bb4,eb5] ~@3", // Eb
  O: "[f4,a4,d5] ~@3 [f4,a4,d5] ~@2 [f4,a4,d5] [f4,a4] ~@3 [f4,a4,db5,d5] ~@3", // Dm F Dm
  P: "[f4,g4,bb4,d5] ~@3 [f4,g4,bb4,d5] ~@2 [f4,g4,bb4,d5] [f4,g4,bb4] ~@3 [f4,g4,bb4,d5] ~@3", // Gm7
  Q: "bb4 ~@3 [f4,g4,bb4,d5] ~@2 [f4,g4,d5] [g4,bb4] ~@3 [f4,g4,bb4,d5] ~@3", // Gm7 G7 Gm Gm7
  R: "[g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@2 [g4,bb4] [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3", // Eb Gm Eb
  S: "[f4,a4,d5] ~@3 [f4,a4,d5] ~@2 [f4,a4,d5]!2 ~@3 [f4,a4,d5] ~@3", // Dm
  T: "[f4,g4,bb4,d5] ~@3 [f4,g4,bb4,d5] ~@2 [f4,g4,bb4,d5] [g4,bb4,d5] ~@3 [f4,g4,bb4,d5] ~@3", // Gm7 Gm Gm7
  U: "[f4,g4,bb4,d5] ~@3 [f4,g4,bb4,d5] ~@2 [f4,g4,d5] [f4,g4,bb4,d5] ~@3 [f4,g4,bb4,d5] ~@3", // Gm7 G7 Gm7
})).s("gm_electric_guitar_clean").gain(0.21).pan(0.8)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@18 A B C D E F G H ~ I@2 J K ~ L M ~@25 A B C D E F G H ~ I@2 J K ~ L M ~@25 A B C D E F G H ~ I@2 J K ~ L M ~@28 A
  B C D E F G H ~ I@2 J K ~ L M ~@47
>`.pickRestart({
  A: "[g4,bb4,eb5] ~@15", B: "~@7 [a4,d5] f4 ~@7", C: "~@7 bb4 f4 ~@7", D: "~@7 f4 [g4,bb4] ~@7", E: "~@7 g4!2 ~@7",
  F: "f4 ~@7 f4 ~@7", G: "[f4,g4] ~@15", H: "[f4,bb4,d5] ~@15", I: "~@8 d5 ~@7", J: "[f4,g4] ~@7 [f4,d5] ~@7",
  K: "~@7 eb5 ~@8", L: "~@8 f4 ~@7", M: "~@7 bb4 ~@8",
})).s("gm_electric_guitar_clean").gain(0.13).pan(0.8)

// chords · clavinet
const clavinet = note(`<
  ~@2 A B C D E F G F A F H F A F A ~ I J K L I J K L I J K L I J K L I J K L ~@5 A B C D E F G F A F H F A F A ~ I J K
  L I J K L I J K L I J K L I J K L ~@5 A B C D E F G F A F H F A F A ~ I J K L I J K L I J K L I J K L I J K L ~@4 M@2
  N O A B C D E F G F A F H F A F A ~ I J K L I J K L I J K L I J K L I J K L ~@5 A B C D E F G F A F H F A F A ~ A B C
  D E F G F A F H F A F A ~ P Q R@3 ~
>`.pickRestart({
  A: "g1@2 ~ [g3,bb3,d4] g2 ~@2 [g3,bb3,d4] g2 ~@2 [g3,bb3,d4] g2 ~@3", B: "~@11 g2 [g3,bb3,d4]@2 ~ g2",
  C: "c2@2 ~ [eb3,g3,c4] c3 ~@2 [eb3,g3,c4] c3 ~@2 [eb3,g3,c4] ~@4", D: "~@11 c2 [eb3,g3,c4]@2 ~ [eb3,g3,c4]",
  E: "g1@2 ~ [g3,bb3,d4] g2 ~@2 [g3,bb3,d4] g2 ~@2 [g3,bb3,d4] ~@4", F: "~@15 g2",
  G: "g1@2 ~ [g3,bb3,c4,d4] g2 ~@2 [g3,bb3,d4] g2 ~@2 [g3,bb3,d4] g2 ~@3", // Gm
  H: "c2@2 ~ [eb3,g3,c4] c2 ~@2 [eb3,g3,c4] c2 ~@2 [eb3,g3,c4] c2 ~@3", // Cm
  I: "~@4 [g3,bb3]@2 ~ eb3 ~@4 g3@2 ~ eb3, ~@3 eb2@2 ~@6 eb2@2 ~@3, ~@12 bb3 ~@3", // Gm
  J: "~@4 [f3,a3]@2 ~ d3 ~@4 [f3,a3]@2 ~ d3, ~@3 d2@2 ~@6 d2@2 ~@3", // F
  K: "~@4 [g3,bb3,d4]@2 ~ d3 ~@4 [g3,bb3]@2 ~ d3, ~@3 g1@2 ~@6 g2@2 ~@3, ~@12 d4 ~@3", // Gm
  L: "~@3 g2 [bb3,d4] ~@2 d3 ~@4 [g3,bb3]@2 ~ d3, ~@4 g3@2 ~@5 g2@2 ~@3, ~@12 d4 ~@3", // Bb Gm
  M: "[g1@3 ~ d2@3 bb2@4 g2@4 f2@4 g2@4 f2@4 d2 c2@3 bb1, ~@3 bb1@2 ~@27]/2", N: "g1@3 bb1 c2@3 d2@4 bb1@4 a1",
  O: "g1@9 ~@7", P: "g2@6 f2@5 ~ d2@4", Q: "~@2 c2@4 ~@2 bb1@4 d2@3 ~", R: "[c2@5 ~ bb1@5 ~ g1@36]/3",
})).s("gm_clavinet").gain(0.22).pan(0.1)

// chords · rock organ
const rock_organ = note(`<
  ~@2 A B C@2 A D A E A@2 C@2 A@4 F G H I J K H L M K H@2 M K H@2 M K L@2 N@2 O@2 ~ P Q R@2 S@6 R@2 P S@3 F G H I J K H
  L M K H@2 M K H@2 M K L@2 N@2 O@2 ~ P Q R@2 S@6 R@2 P S@3 F G H I J K H L M K H@2 M K H@2 M K L@2 N@2 O@2 T@2 U V P Q
  R@2 S@6 R@2 P S@3 F G H I J K H L M K H@2 M K H@2 M K L@2 N@2 O@2 ~ P Q R@2 S@6 R@2 P S@3 P Q R@2 S@6 R@2 P S@3 N@2 W
  X@2 Y
>`.pickRestart({
  A: "~@4 [bb4,d5,g5] ~@7 [bb4,d5,g5] ~@3", B: "~@4 [bb4,g5] ~@7 [bb4,d5]@2 ~@2, ~@4 d5@2 ~@6 g5 ~@3",
  C: "~@4 [c5,eb5,g5] ~@7 [c5,eb5,g5] ~@3", D: "~@4 [bb4,d5,g5] ~@7 [d5,g5]@2 ~@2, ~@12 bb4 ~@3",
  E: "~@4 [bb4,d5,g5] ~@7 [bb4,g5] ~@3, ~@6 d5 ~", F: "~@8 [eb5,g5,bb5]@5 ~@3", G: "~@8 [d5,f5,a5]@7 ~",
  H: "~ [d5,g5,bb5]", I: "~@8 [d5,f5,bb5]@7 ~", J: "~@8 [eb5,g5,bb5]@7 ~", K: "~ [d5,f5,a5]", L: "~@8 [d5,g5,bb5]@7 ~",
  M: "~ [eb5,g5,bb5]", N: "[g6@3 f6@3 d6@3 c6@3 bb5@2 d6@2]/2", O: "[c6@3 bb5@3 g5@8 ~@2]/2",
  P: "~@4 [bb4,d5]@2 ~ g4 ~@3 g3 [bb4,d5]@2 ~ g4, ~@3 g3@2 ~@11", Q: "~@3 g3 [bb4,d5] g4 ~@5 g3 [bb4,d5]@2 ~ g4",
  R: "~@3 c4 [c5,eb5]@2 ~ g4 ~@3 c4 [c5,eb5]@2 ~ g4", S: "~@3 g3 [bb4,d5]@2 ~ g4 ~@3 g3 [bb4,d5]@2 ~ g4",
  T: "[g3@3 ~ d4@3 bb4@4 g4@4 f4@4 g4@4 f4@4 d4 c4@3 bb3, ~@3 bb3@2 ~@27]/2", U: "g3@3 bb3 c4@3 d4@4 bb3@4 a3",
  V: "g3@9 ~@7", W: "c6@3 bb5@3 g5@2",
  X: "[~ [f1,g1] [a1,b1] [c2,d2] [e2,f2,g2,a2] [g2,b2,c3,d3,e3] [f3,g3,a3] [b3,c4,d4,e4] [g5,bb5,d6,f6]@21 f5 [d5,e5] [g4,a4,b4,c5], ~@8 [f4,e6] ~@23]/2", // Fsus2 Asus2 Csus2 Fmaj7 Cmaj7 F Cmaj7 Gm7 …
  Y: "[b3,c4,d4,e4,f4] a3 ~@14", // Bdim
})).s("gm_rock_organ").gain(0.22)

// bass · fretless bass
const bass = note(`<
  ~@2 A B C D A B A B A E F@2 A B G H I J K L I J K L I J K L I J K L I J K L M@2 N@2 ~ A B C D A B A B A E F@2 A B G H
  I J K L I J K L I J K L I J K L I J K L M@2 N@2 ~ A B C D A B A B A E F@2 A B G H I J K L I J K L I J K L I J K L I J
  K L M@2 N@2 ~@4 A B C D A B A B A E F@2 A B G H I J K L I J K L I J K L I J K L I J K L M@2 N@2 ~ A B C D A B A B A E
  F@2 A B G H A B C D A B A B A E F@2 A B G H M@2 O P@3
>`.pickRestart({
  A: "g2@2 bb2 ~ d3 ~@3", B: "~@8 d3@2 ~ d3 g2@2 ~@2, ~@7 g2@2 ~@7", C: "c2@2 ~ c2 ~@3 c2 g2@2 ~ g2 c2@2 ~@2",
  D: "~@8 g1@2 ~ c2@3 ~@2", E: "~@7 g1 d2@2 ~ f2 g2 ~@2 g1",
  F: "[c3@2 ~ c3 ~ c3 ~@2 g2@2 ~@2 eb2@2 ~ c2@3 ~@6 g1@2 ~ c2@3 ~@2]/2", G: "~@3 g1 g2@3 ~@9",
  H: "~@4 g3 d3 ~ bb2 g2@2 ~@6", I: "eb3@2 ~ bb2 eb2@2 ~@10", J: "d3@3 a2 d2@2 ~@6 d2@2 ~ f2",
  K: "g2@3 ~ d2 ~@2 d2!2 ~@2 d2!2 ~@2 d2", L: "d2@4 d3 ~@11", M: "[g2@5 ~ f2@6 d2@6 ~@2 c2@4 bb1@4 d2@4]/2",
  N: "[c2@5 ~ bb1@6 g1@12 ~@8]/2", O: "c2@5 ~ bb1@6 g1@4", P: "[~@2 g1@7 ~@3]/3",
})).s("gm_fretless_bass").gain(0.29)

// chords · piano
const piano = note(`<
  ~@3 A ~ B ~ C ~ C ~ C ~ D ~ C ~ C E F G@2 H I J G H I G@2 H I G@2 H I G@2 K@2 L@2 ~@2 A ~ B ~ C ~ C ~ C ~ D ~ C ~ C E
  F G@2 H I J G H I G@2 H I G@2 H I G@2 K@2 L@2 ~@2 A ~ B ~ C ~ C ~ C ~ D ~ C ~ C E F G@2 H I J G H I G@2 H I G@2 H I
  G@2 K@2 L@2 M@2 N O ~ A ~ B ~ C ~ C ~ C ~ D ~ C ~ C E F G@2 H I J G H I G@2 H I G@2 H I G@2 K@2 L@2 ~@2 A ~ B ~ C ~ C
  ~ C ~ D ~ C ~ C ~ A ~ B ~ C ~ C ~ C ~ D ~ C ~ C K@2 P Q@3
>`.pickRestart({
  A: "~@4 [g4,bb4,d5] ~@2 [g4,bb4,d5] [g4,d5]@2 ~@6, ~@8 bb4 ~@7", // Gm G5
  B: "~@4 [g4,c5,eb5] ~@2 [g4,c5,eb5] [g4,c5,eb5]@2 ~@6", C: "~@4 [g4,bb4,d5] ~@2 [g4,bb4,d5]!2 ~@7",
  D: "~@4 [g4,c5,eb5] ~@2 [g4,c5,eb5]!2 ~@7", E: "~@2 [bb4,eb5] ~@3 [bb4,eb5] ~, ~@4 g4 ~@7 g4 ~@3",
  F: "~@2 [f4,a4,d5] ~@3 [f4,a4,d5] ~", G: "~@4 [f4,g4,bb4,d5] ~@7 [f4,g4,bb4,d5] ~@3",
  H: "~@4 [g4,bb4,eb5] ~@7 [g4,bb4,eb5] ~@3", I: "~@4 [f4,a4,d5] ~@7 [f4,a4,d5] ~@3",
  J: "~@4 [g4,bb4,d5] ~@7 [f4,g4,bb4,d5] ~@3", // Gm Gm7
  K: "[[g2,g3]@6 [f2,f3]@6 [d2,d3]@6 [c2,c3]@5 ~ [bb1,bb2]@4 [d2,d3]@3 ~]/2", // G F D C Bb D
  L: "[[c2,c3]@6 [bb1,bb2]@5 ~ [g1,g2]@16 ~@4]/2", // C Bb G
  M: "[g1@3 ~ d2@3 bb2@4 g2@4 f2@4 g2@4 f2@4 d2 c2@3 bb1, ~@3 bb1@2 ~@27]/2", N: "g1@3 bb1 c2@3 d2@4 bb1@4 a1",
  O: "g1@9 ~@7", P: "[c2,c3]@6 [bb1,bb2]@5 ~ [g1,g2]@4", Q: "[~@8 [g1,g2,g4,bb4,d5]@25 ~@15]/3",
})).s("gm_piano").gain(0.29).pan(0.9)

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

// drums · rim
const rim = s("rim").struct(`<
  ~@2 A B A B A B A ~ A B A C A B A ~ A B A B A D A ~ A B A B A D A ~ A B A B A D A ~@9 E ~@8 A B A B A D A ~ A B A B A
  D A ~ A B A B A D A ~@9 E ~@8 A B A B A D A ~ A B A B A D A ~ A B A B A D A ~@12 E ~@8 A B A B A D A ~ A B A B A D A ~
  A B A B A D A ~@9 E ~@15 E ~@8 A D A ~@3
>`.pickRestart({
  A: "~ x", B: "x ~@6 x ~@4 x ~@3", C: "~@7 x ~@8", D: "~@3 x ~@4 x ~@7", E: "~ x ~@2",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A ~@7 B ~@7 B ~@7 B ~@8 B C@7 B C@7 A ~@7 B ~@7 B ~@8 B C@7 B C@7 A ~@7 B ~@7 B ~@11 B C@7 B C@7 A ~@7 B ~@7 B ~@7
  D B C@7 B C@7 A C@7 B C@7 A ~@3 C ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@3 x", C: "~ x", D: "x ~@2 x ~ x ~@2 x ~@7",
})).gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~ B@11 C B@4 D@3 E D@11 E D@4 A@3 ~ F B@16 D@3 E D@11 E D@4 A@3 ~ F B@16 D@3 E D@11 E D@4 A@3 ~@4 F B@16 D@3 E D@11
  E D@4 A@3 ~ F B@32 A@3 ~@3
>`.pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~@4 x ~@7 x ~@2 x", D: "~@3 x!2 ~@2 x ~@3 x!2 ~@2 x", E: "~@3 x ~ x ~ x ~@3 x!2 ~@2 x",
  F: "~@2 x!2",
})).gain(0.62)

// drums · low tom
const low_tom = s("lt").struct("<~@206 x>").gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~@7 B ~@37 C ~@4 C ~@3 C@2 B ~@29 C ~@4 C ~@3 C@2 B ~@32 C ~@4 C ~@3 C@2 B ~@29 C ~@4 C ~@3 C@2 B ~@4 C ~@4 C ~@3
  C@2 B ~@5 D
>`.pickRestart({
  A: "~@3 x", B: "~@9 x ~ x!2 ~@3", C: "~@15 x", D: "x",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 B ~@7 A ~@7 A ~@7 A ~@6 A ~ A ~@7 A ~@7 B ~@7 A ~@7 A ~@6 A ~ A ~@7 A ~@7 B ~@7 A ~@7 A ~@6 A ~@4 A ~@7 A ~@7
  B ~@7 A ~@7 A ~@6 A@3 C ~@6 A ~@7 B C ~@6 A ~@7 B C ~ D E ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@15 x", C: "x", D: "x ~@2 x", E: "~ x",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~ A ~@7 B ~@7 A ~@7 A ~@7 A ~@8 A ~@7 C ~@7 B ~@7 A ~@7 A ~@8 A ~@7 C ~@7 B ~@7 A ~@7 A ~@11 A ~@7 C ~@7 B ~@7 A ~@7 A
  ~@7 D A ~@7 C ~@7 B ~@7 C ~@7 B ~@3 E F ~
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@7", B: "~ x ~ x!2 ~@2 x ~@8", C: "~@3 x", D: "~@13 x ~ x", E: "~@11 x ~ x ~@2", F: "x ~@14 x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 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 B C@7 B C@7 B A B A B A B A B A B
  A B A B A B A B A B A B ~@2 B C@7 B C@7 B A B A B A B A B A B A B A B A B A B A B A B ~@5 B C@7 B C@7 B A B A B A B A
  B A B A B A B A B A B A B A B ~@2 B C@7 B C@7 B C@7 B C@7 B A B ~@4
>`.pickRestart({
// … 15 more lines

More by Bob Marley