Strudelify

John Barleycorn (Must Die)

Traffic

KeyD minorTempo120 bpm
0:00/0:00
// John Barleycorn (Must Die) — Traffic
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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
const piano = note(`<
  A B C D C D C D E F G H I J K L M B C D C D C D E F G H I J K L M B C D C D C D E F G H I J K L M B C D C D C D E F G
  H I J K L N O P Q O@2 P Q R O P Q R O P ~
>`.pickRestart({
  A: "~@21 [a5,c6]@2 ~", // Am
  B: "[a5,c6]@2 ~ [g5,a5,c6] ~@2 e5@2 ~ [e5,g5]@2 ~@4 [d5,e5,gb5,g5] [d5,gb5] ~ a4@2 ~ [c5,e5]@3, ~@4 g5@4 ~ d5 ~@14", // Am Am7 Em Em7 D C
  C: "~@3 e1@2 ~ g1@3 ab1@3 a1@3 d2@3 eb2@3 [e2,a5,c6]@3, ~@3 [d5,gb5]@19 ~@2, ~@15 ab1 ~@8", // Am D
  D: "[a5,c6]@2 c6 [g5,a5] ~ e5@2 ~@2 [e5,g5]@2 ~@4 [d5,e5,gb5,g5] [d5,gb5] ~ a4@2 ~ [c5,e5]@3, a2@4 g5@4 ~ d5 ~@14", // Am Gsus2 Em Em7 D C
  E: "~@3 e1@2 ~ g1@3 ab1@3 a1@3 d2@3 eb2@3 ~@3, ~@3 [d5,gb5]@19 ~@2, ~@15 ab1 ~@8", // D
  F: "bb2@2 ~@4 [ab3,db4,f4]@6 ~@3 [bb3,eb4,g4]@5 ~ bb2@3, ~@3 bb2@9 bb2@8 ~@4", // Db Eb
  G: "bb2@2 ~@13 [bb3,eb4,g4]@4 ~@2 d3@3, ~@3 bb2@8 ~ bb2@7 ~@5, ~@6 [ab3,db4,f4]@8 ~ b3 ~@8", // Eb Db
  H: "d3@2 ~@4 [c4,f4,a4]@5 ~@4 [d4,g4,b4]@5 ~ d3@3, ~@3 d3@8 ~ d3@8 ~@4", // F G
  I: "d3@2 ~@13 [d4,g4,b4]@4 ~@2 bb2@3, ~@3 d3@8 ~ d3@7 ~@5, ~@3 [c4,f4,a4]@4 ~@5", // G F
  J: "bb2@3 ~@12 [bb3,eb4,g4]@5 ~ bb2@3, ~@3 bb2@8 ~ bb2@9 ~@3, ~@3 [ab3,db4,f4]@4 ~@5", // Eb Db
  K: "bb2@2 ~@4 db4@5 ~@4 [bb3,eb4,g4]@3 ~@3 d3@2 ~, ~@3 bb2@8 ~ bb2@6 ~@6, ~@3 [ab3,f4]@4 ~@5", // Eb Db
  L: "d3@2 ~@4 f4@5 ~@4 [c4,f4,a4]@6 d3 ~@2, ~@3 d3@8 ~ d3@7 ~@5, ~@3 [c4,a4]@4 ~@5", // F
  M: "[b2,e3,b3,ab4]@20 ~ [a5,c6]@2 ~, d4@2 ~", N: "[b2,e3,b3,ab4]@5 ~, d4@2 ~",
  O: "[d3,a3,c4,gb4]@3 [d3,a3,c4,gb4]@2 ~ [e3,b3,d4,ab4]@3 [e3,b3,d4,ab4]@2 ~", // D7 E7
  P: "[d3,a3,c4,gb4]@6 [d3,a3,c4,gb4]@4 ~@2 [e3,b3,d4,ab4]@6 [e3,b3,d4,ab4]@5 ~, ~@18 eb3 ~@5", // D7 E7
  Q: "[d3,a3,c4,gb4]@5 ~ [d3,a3,c4,gb4]@4 ~@2 [e3,b3,d4,ab4]@6 [e3,b3,d4,ab4]@4 ~@2", // D7 E7
  R: "[d3,a3,c4,gb4]@6 [d3,a3,c4,gb4]@4 ~@2 [e3,b3,d4,ab4]@6 [e3,b3,d4,ab4]@3 ~@3", // D7 E7
})).s("gm_piano").gain(0.56)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@2 A B C B C B C D E F G H I J K ~ A B C B C B C D E F G H I J K ~ A B C B C B C D E F G H I J K ~ A B C B C B C D E
  F G H I J K L M N O L M N O L M N O L M ~
>`.pickRestart({
  A: "~@3 e1@2 ~ g1@2 ~ ab1@3 a1@2 ~ d2@3 eb2@3 e2@2 ~", B: "a2 ~@5",
  C: "~@3 e1@2 ~ g1@2 ~ ab1@3 a1@2 ~ d2@2 eb2@3 ~ e2@2 ~", D: "bb1@3 bb1@3 ~@3 ab1@3 f1@2 ~ f1@3 ~ ab1@2 bb1 ~@2",
  E: "~ bb1@2 ~ bb1@3 ~@2 ab1@3 f1@2 ~ f1@2 ~ ab1@2 ~ d2@2 ~", F: "~ d2@2 ~ d2@2 ~@3 c2@3 a1@2 ~ a1@2 ~ c2@2 ~ d2 ~@2",
  G: "d2@3 d2@2 ~@4 c2@3 a1@2 ~ a1@2 ~ d2 ~@2 bb1@2 ~", H: "~ bb1@2 bb1@3 ~@3 ab1@3 f1@2 ~ f1@2 ~ ab1@2 ~ bb1 ~@2",
  I: "~ bb1@2 ~ bb1@3 ~@2 ab1@2 ~ f1@2 ~ f1@2 ~ ab1@2 ~ d2 ~@2",
  J: "d2@2 ~ d2@2 ~@4 c2@2 ~ a1@2 ~ a1@2 ~ c2@2 ~ d2 ~@2", K: "e2@7 ~", L: "d2@4 ~@2 d2@4 ~@2 e2@6 e2@5 ~",
  M: "d2@5 ~ d2@4 ~@2 e2@5 ~ e2@6", N: "d2@6 d2@4 ~@2 e2@5 ~ e2@6", O: "d2@6 d2@5 ~ e2@5 ~ e2@5 ~",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  ~@2 A B A B A B A C@2 D@2 E@2 F G ~ A B A B A B A C@2 D@2 E@2 F G ~ A B A B A B A C@2 D@2 E@2 F G ~ A B A B A B A C@2
  D@2 E@2 F G ~@4 H I J K L M N O P Q ~
>`.pickRestart({
  A: "~@4 [c5,e5,g5,c6]@3 ~", B: "[a4,c5,e5,a5]@5 ~@19", C: "[[db5,f5,ab5]@47 ~]/2", D: "[c5,f5,a5]/2",
  E: "[db5,f5,ab5]/2", F: "~ f5@20 ~@3, [c5,a5]@5 ~", G: "~ [b4,d5,ab5]@23", H: "[gb4,c5,d5] [ab4,d5,e5]",
  I: "~ c5@11 [b4,d5,ab5]@12, [a4,gb5] ~", J: "[c5,gb5,a5] [d5,ab5,b5]", K: "[gb5,c6,d6] [ab5,d6,e6]",
  L: "[a5,c6,gb6] [b5,d6,ab6]", M: "[c6,gb6,a6] [d6,ab6,b6]", N: "[gb6,a6,c7] [ab6,b6,d7]",
  O: "[gb6,c7,d7] [ab6,d7,e7]", P: "[a6,c7,gb7] [b6,d7,ab7]", Q: "[c7,gb7,a7] [d7,ab7,b7]",
})).s("gm_rock_organ").gain(0.48)

// drums · kick
const kick = s("bd").struct("<A@8 ~ B@7 A@8 ~ B@7 A@8 ~ B@7 A@8 ~ B@7 ~ C@14 D>".pickRestart({
  A: "~@7 x", B: "x!2 ~@2 x!2 ~ x", C: "x ~@10 x!2 ~@11", D: "x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~ A@8 B@7 C A@8 B@7 C A@8 B@7 C A@8 B@7 C B@14 ~>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "x",
})).gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@2 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@23
>`.pickRestart({
  A: "~ x",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@6 A ~@8 A ~@6 A ~@8 A ~@6 A ~@8 A ~@6 A ~@15>".pickRestart({
  A: "x",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~ A@8 B A@6 ~ A@8 B A@6 ~ A@8 B A@6 ~ A@8 B A@6 ~ C@14 ~>".pickRestart({
  A: "x!8", B: "~ x!7", C: "x!4",
})).gain(0.56)

stack(piano, bass, rock_organ, kick, snare, pedal_hat, crash, ride)

More by Traffic