Strudelify
The Battle Of New Orleans cover art

1959

The Battle Of New Orleans

Johnny Horton

KeyA majorTempo90 bpm
0:00/0:00
// The Battle Of New Orleans — Johnny Horton
// 90 bpm, 2/4, key A major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 1/4 at bar 56, 2/4 at bar 57) are rendered on a constant 2/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/2)

// 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.

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@7 A B@2 C D E B C D F G B@2 H I B J K L M B C D N O C D P Q B@2 H I B J K L M B C D E B C D F R S D@2 T U V@2 W D U
  S D@2 T U V@2 W D U D U D X Y D@2 X Z AA S D@2 T U V@2 W D U S D@2 T U V@2 W U V U V U V U V U V U AA
>`.pickRestart({
  A: "~@4 a2@3 ~", B: "e2@3 ~ a2@3 ~", C: "e2@3 ~ d2@3 ~", D: "a2@3 ~ e2@3 ~", E: "b1@3 ~ a2@3 ~", F: "b1@2 a2 e2",
  G: "a1@6 ~@2 a2@5 ~@3", H: "e2@3 ~ e2@2 g#2@2", I: "a2@3 ~ a2@2 ~@2", J: "e2@2 ~@2 a2@3 ~", K: "e2@2 ~@2 e2@2 g#2 ~",
  L: "a2@2 ~@2 a2@3 ~", M: "e2@3 ~ a2@2 ~@2", N: "b2@6 ~@2 a2@3 ~ e2@3 ~", O: "a1@3 ~ a2@3 ~", P: "b1@3 ~ a2@2 e2@2",
  Q: "a1@8 a2@5 ~@3", R: "a1@3 ~@5", S: "a2@5 ~@3 e2@6 ~@2", T: "e2@2 g#2@2 a2@3 ~", U: "a2@2 ~@2 e2@3 ~",
  V: "a2@3 ~ e2@2 ~@2", W: "e2@2 g#2 ~ a2@2 ~@2", X: "d2@3 ~ a2@3 ~", Y: "e2@3 ~ b1@3 ~", Z: "e2@3 ~ b1@4",
  AA: "a2@2 e2@2 a1@3 ~",
})).s("gm_acoustic_bass").gain(0.52)

// chords · banjo
const banjo = note(`<
  ~@2 A B C D E F@2 G H I J K L M N G O@2 P O@3 Q G O@2 L R S O H I J O@3 P O@3 Q G O@2 H I J K L M N T U@3 V U@3 W U@5
  V U@3 W U@4 X Y Z AA AB AC AD AE U@3 V U@3 W U@5 V U@3 W U@11 AF
>`.pickRestart({
  A: "~@4 e4@2 c#4@2 a3@3 ~ a3@3 ~", B: "a3@2 b3@2 c#4@2 d4@2 e4@3 ~ e4@3 ~",
  C: "e4@3 ~ c#4@3 ~ e3@4 [a4,c#5,e5]@2 ~@2", D: "[c#4,a4]@2 [c#5,e5] ~ [d3,f#4]@2 [a4,d5] ~",
  E: "[a3,f#4]@2 [a4,d5] ~ e3@2 [g#4,b4,e5]@2", // D D5 E
  F: "[[d4,g#4]@2 [b4,d5] ~ [e3,a4]@2 c#5@2 [c#4,a4]@2 [c#5,e5]@2 e3@2 [a4,c#5,e5] ~, ~@2 e5@2 e5 ~ e5@4 ~@6]/2", // Ddim Bm A5 F#m C#m A
  G: "c#4@2 [a4,c#5,e5]@2 e3@2 [a4,c#5,e5] ~", H: "c#4@2 [c#5,e5] ~ d3@2 [a4,d5] ~, ~ a4 ~ f#4",
  I: "a3@2 [f#4,a4,d5] ~ e3@2 [b4,e5] ~, ~@3 g#4", J: "d4@2 [g#4,b4,d5] ~ e3@2 [c#5,e5] ~, ~ e5 ~ a4",
  K: "c#4@2 [a4,c#5,e5] ~ e3@2 [a4,e5]@2, ~@6 c#5 ~", L: "c#4@2 [a4,c#5,e5] ~ d3@2 [f#4,a4,d5] ~",
  M: "b3@2 [f#4,d5]@2 e3@2 [g#4,b4,e5] ~, ~@2 a4 ~@5", N: "d4 [g#4,d5,e5] e3 [a3,a4], ~@2 b4 ~@3 [c#5,e5] ~",
  O: "c#4@2 [a4,c#5,e5] ~ e3@2 [a4,c#5,e5] ~", P: "c#4@2 [a4,c#5,e5] ~ e3@2 [g#4,b4] ~, ~@3 e5",
  Q: "c#4@2 [a4,c#5,e5] ~ e3@2 [g#4,b4,e5] ~", R: "b3@2 [f#4,a4,d5] ~ e3@2 [g#4,b4,e5] ~",
  S: "d4@2 [g#4,b4,e5] ~ e3 ~ [a3,a4]@2, ~@6 [c#5,e5] ~", T: "c#4 ~@3", U: "e3@2 [a4,c#5,e5] ~ c#4@2 [a4,c#5,e5] ~",
  V: "e3@2 [g#4,b4] ~ c#4@2 [a4,c#5,e5] ~, ~ e5 ~@2", W: "e3@2 [g#4,b4,e5] ~ c#4@2 [a4,c#5,e5]@2",
  X: "e3@2 [a4,c#5,e5] ~ c#4@2 [c#5,e5] ~, ~@3 a4", Y: "d3@2 [a4,d5] ~ a3@2 [f#4,a4,d5] ~, ~ f#4 ~@2",
  Z: "e3@2 [b4,e5] ~ d4@2 [g#4,b4,d5] ~, ~ g#4 ~ e5", AA: "e3@2 [c#5,e5] ~ c#4@2 [a4,c#5,e5] ~, ~ a4 ~@2",
  AB: "e3@2 [a4,e5]@2 c#4@2 [a4,c#5,e5] ~, ~@2 c#5 ~@5", AC: "d3@2 [f#4,a4,d5] ~ b3@2 [f#4,d5]@2, ~@6 a4 ~",
  AD: "e3@2 [g#4,b4,e5] ~ d4@2 [g#4,d5,e5]@2, ~@6 b4 ~", AE: "e3 [a3,a4] c#4 [a4,c#5,e5], ~@2 [c#5,e5] ~@5",
  AF: "e3 [a3,a4] c#4 ~, ~@2 [c#5,e5] ~@5", // A C#m
})).s("gm_banjo").gain(0.22).pan(0.2)

// other · overdriven guitar · "Lead Guitar"
const overdriven_guitar = note(`<
  ~@4
  [~@8 c4 c#4@3 e4@2 ~@2]
  [c#4@2 b3@2 a3@2 ~@2 f3 f#3@3 a3@2 ~@2]
  [f#3@2 e3@2 d3@2 ~@2 c3 c#3@3 e3@2 ~@2]
  [c#3 b2 g#2 b2 a2@4]
  ~@106
>`).s("gm_overdriven_guitar").gain(0.48).pan(0.7)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@53 [~@3 x] ~@60>").gain(0.36).pan(0.8)

// drums · cowbell
const cowbell = s("cb").struct("<~@53 [~ x!2 ~] ~@60>").gain(0.32).pan(0.8)

stack(bass, banjo, overdriven_guitar, snare, tambourine, cowbell)

More by Johnny Horton