Strudelify
Louie Louie cover art

Louie Louie

Kingsmen

KeyA majorTempo126 bpm
0:00/0:00
// Louie Louie — Kingsmen
// 126 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@3 A B C D E F C D E F G H I J K L G M C D E F C D E F G H I N K L G M C D E F C D E F C D E F C D E F C D E F C D E
  F G H I J K L G M G M C D E F C D E F C D E F O
>`.pickRestart({
  A: "a1 ~ a1@2 a1@5 ~ d2 ~ d2@3 ~", B: "e2 ~ e2 ~ e2@5 ~ d2@2 e2@2 d2@2", C: "a1 ~ a1 ~ a1@4 ~@2 d2 ~ d2@3 ~",
  D: "e2 ~ e2 ~ e2@4 ~@2 d2@2 e2@2 a2@2", E: "a1@3 ~ a1@4 ~@2 d2 ~ d2@3 ~", F: "e2 ~ e2 ~ e2@4 ~@2 d2 ~ d2 ~ d2 ~",
  G: "a1 ~@2 a1 d2 ~@2 d2", H: "e2@4 ~@2 d2@3 ~ d2@2 a2@2 d2@2", I: "a1 ~@2 a1 d2@2 ~ d2",
  J: "e2 ~ e2@3 ~ e2@2 d2 ~ d2@2 a2@2 g2@2", K: "a1@2 ~@4 a1@2 d2 ~ d2@2 ~@2 d2@2", L: "e2@4 ~@2 d2@3 ~ g2@2 d2@2 e2@2",
  M: "e2 ~ e2@3 ~ d2@3 ~ a2@2 e2@2 d2 ~", N: "e2 ~ e2@2 ~@2 e2@2 d2 ~ d2@2 a2@2 g2@2", O: "a1 ~@7",
})).s("gm_acoustic_bass").gain(0.72)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B C D C D C D C D C D C E F G H G I J K D C D C D C D C E F G H G I J K D C D C D C D C D C D C D C D C D C D C D C
  L M E F G H G I J K J K D C D C D C D C D C D C N
>`.pickRestart({
  A: "~@12 e4@3 ~", B: "a3 ~ a3 ~ a3 ~@5 [a3,d4,f#4] ~ [a3,d4] ~@3, ~@6 f#4 ~",
  C: "[e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~@5 [d4,f#4,a4] ~ [d4,f#4,a4] ~@3", // Em D
  D: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~@5 [d4,f#4,a4] ~ [f#4,a4]@2 ~@2, ~@12 d4 ~@3", // A D F#m
  E: "[a2,e3,a3,c#4,e4] ~@5 [a3,c#4,e4] ~ [d3,d4,f#4,a4] ~@5 [d4,f#4,a4] ~", // A D
  F: "[e3,e4,g4,b4] ~ [e3,e4,g4,b4] ~ [e4,g4,b4]@3 ~@3 [d3,a3,d4,f#4,a4] ~ [d4,f#4,a4] ~@3", // Em D
  G: "[a2,e3,a3,c#4,e4] ~@5 [a3,c#4,e4] ~ [d4,f#4,a4] ~@5 [d4,f#4,a4] ~", // A D
  H: "[e3,e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4]@2 ~@4 [d3,a3,d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // Em D
  I: "[e3,e4,g4,b4] ~ [e3,e4,g4,b4] ~ [g4,b4] ~@5 [d3,a3,d4,f#4,a4] ~ [d4,f#4,a4] ~ e3 ~, ~@2 e4 ~@5", // Em G D
  J: "[a3,c#4,e4] ~@5 [a3,c#4,e4] ~ [d3,d4,f#4,a4] ~@5 [d4,f#4,a4] ~", // A D
  K: "[e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4]@2 ~@4 [d3,a3,d4,f#4,a4] ~ [d3,a3,d4,f#4,a4] ~@3", // Em D
  L: "[a2,e3,c#4,e4,a4] ~ [a2,e3,c#4,e4,a4] ~ [a2,e3,c#4,e4,a4] ~@5 [d3,a3,d4,f#4,a4] ~ [d3,d4,f#4] ~@3, ~@6 [a3,a4] ~", // A D A
  M: "[e3,g3,b3,e4,g4,b4] ~ [e3,g3,b3,e4,g4,b4] ~ [e3,g3,b3,e4,g4,b4]@2 ~@4 [d3,a3,d4,f#4,a4] ~ [d3,a3,d4,f#4,a4] ~@3", // Em D
  N: "[a2,e3,c#4,e4] ~@15, a4 ~@7", // A
})).s("gm_epiano2").gain(0.48)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@3 A B A C A D A C A D A E A F A E A G A C A D A C A D A E A F A E A G A C A D A C A H I J K@2 L M N O P Q R@2 S T U
  V A E A F A E A G A G A C A D A C A D A C A D W
>`.pickRestart({
  A: "[a2,e3] ~@5 [a2,e3] ~ [d3,a3] ~@5 [d3,a3] ~", B: "[e3,b3] ~ [e3,b3] ~ [e3,b3]@4 ~@2 [d3,a3] ~ [d3,a3]@2 ~@2",
  C: "[e3,b3] ~ [e3,b3]@3 ~@5 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // E5 D5
  D: "[e3,b3] ~ [e3,b3] ~ [e3,b3]@4 ~@2 [d3,a3] ~ [d3,a3] ~@3", // E5 D5
  E: "[e3,b3] ~ [e3,b3] ~ [e3,b3]@4 ~@2 [d3,a3] ~@3 [d3,a3] ~", // E5 D5
  F: "[e3,b3] ~ [e3,g3,b3] ~@7 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // E5 Em D5
  G: "[e3,b3] ~ [e3,b3]@4 ~@4 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // E5 D5
  H: "[e3,b3] ~ [e3,b3] ~ [e3,b3]@4 ~@2 [d3,a3] ~ [d3,a3] ~ e4@2", I: "a4 ~ a4 g4 a4 ~ a4 ~ a4 ~ c5@2 a4@3 ~",
  J: "a4@2 g4 a4 g4@2 e4 ~ e4@2 d4@3 ~ d4 ~", K: "[d4@4 d4@3 ~ d4@3 ~ d4@6 c4@3 ~ a3 ~ a3 ~ a3@2 g3@2 a3 ~]/2",
  L: "~@2 c4 a3 c4@2 a3 c4 a3 ~ c4 ~ d4@3 ~", M: "e4@3 e4@2 ~ e4@2 d4 ~ e4 ~ e4 ~ g4 ~",
  N: "g4@3 ~ a4@3 g4 a4@3 g4 a4 ~ a4 ~, ~@3 g4@3 ~@10", O: "a4@3 ~ a4@2 g4 ~ b4 ~ b4 ~ [a4,b4] ~ b4 ~",
  P: "c5@4 a4@2 ~ a4 c5 ~ a4 ~ a4@4", Q: "g4@2 a4 g4 a4@2 g4@2 e4@4 d4@3 ~",
  R: "[c5@3 ~ a4@2 c5@4 a4@3 ~ a4@4 g4@2 a4@2 g4@4 e4@4 ~@2]/2",
  S: "~@2 [e4,g4]@3 ~ [e4,g4]@3 ~ [d4,f#4]@3 ~ [e4,g4]@2", // Em D Em
  T: "~@2 [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [d4,f#4]@3 ~@3", // Em D
  U: "~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@4 [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~@2", // A D
  V: "[e3,g3,b3,e4,g4] ~ [e3,g3,b3,e4,g4]@2 [e3,g3,b3,e4,g4]@4 ~@2 [d3,a3,d4,f#4,a4] ~ [d3,a3,d4,f#4,a4]@2 ~@2", // Em D
  W: "[a2,e3] ~@7", // A5
})).s("gm_electric_guitar_muted").gain(0.56)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@3 A B C D E F C D E F G H I J G H G J C D E F C D E F G H I J G H G J C D E F C D E F C D E F C D E F C D E F C D E
  F G H I J G H G J G J C D E F C D E F C D E F K
>`.pickRestart({
  A: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5]@2 ~@4 [a4,d5,f#5] ~ [a4,d5,f#5] ~@3", // A D
  B: "[e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~@5 [d5,f#5,a5] ~ [d5,f#5,a5]@3 ~", // Em D
  C: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5]@3 ~@3 [a4,d5,f#5] ~ [a4,d5,f#5]@2 ~@2", // A D
  D: "[e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5]@3 ~@3 [d5,f#5,a5] ~ [d5,f#5,a5] ~@3", // Em D
  E: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~@5 [a4,d5,f#5] ~ [a4,d5,f#5] ~@3", // A D
  F: "[e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5]@4 ~@2 [d5,f#5,a5] ~ [d5,f#5]@2 ~@2, ~@12 a5 ~@3", // Em D
  G: "[a4,c#5,e5] ~@5 [a4,c#5,e5] ~ [a4,d5,f#5] ~@5 [a4,d5,f#5] ~", // A D
  H: "[e5,g5,b5] ~ [e5,g5,b5] ~@7 [d5,f#5,a5] ~ [d5,f#5,a5]@2 ~@2", I: "[a4,c#5,e5] ~@5 [a4,c#5,e5] ~ [a4,d5,f#5] ~@7",
  J: "[e5,g5,b5] ~ [e5,g5,b5] ~@7 [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~", K: "[a3,e4,a4,c#5,e5] ~@15",
})).s("gm_rock_organ").gain(0.39)

// drums · kick
const kick = s("bd").struct("<~@3 [x ~@2 x!3 ~ x]!80 x>").gain(0.74)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@5 C B@3 D B@7 E B@7 C B@7 D B@7 E B@7 D B@7 E B@9 F B@3 C B@3 E B@3 G H
>`.pickRestart({
  A: "~@7 x", B: "~ x ~ x", C: "~ x ~@2 x ~@5 x!3 ~ x!2", D: "~@4 x!2 ~@2 x ~@5 x!2", E: "~@4 x ~@10 x",
  F: "~@4 x ~@7 x!4", G: "~@2 x ~@2 x!2 ~", H: "x",
})).gain(0.74)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@3 B ~@7 C ~@7 A ~@7 B ~@7 C ~@7 B ~@7 C ~@13 A ~@3 C ~@5>".pickRestart({
  A: "x ~@2 x ~@2 x!4 ~@6", B: "x!2 ~ x ~@2 x!2 ~ x ~ x!3 ~@2", C: "~@8 x!5 ~@3",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@11 A ~@7 A ~@15 A ~@15 A ~@13 A ~@3 A ~@3 B C>".pickRestart({
  A: "~@14 x!2", B: "~@3 x", C: "x",
})).gain(0.74)

// drums · hihat
const hihat = s("hh").struct("<~ [x!4]!82 ~>").gain(0.74)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@3 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 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 A B A B ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@11 B ~@7 A ~@15 B ~@15 B ~@13 A ~@3 B ~@3 C ~>".pickRestart({
  A: "~@13 x ~@2", B: "~@11 x!2 ~@3", C: "~@5 x ~@2",
})).gain(0.74)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.74)

// drums · ride
const ride = s("rd").struct("<~@3 [x!8]!80 ~>").gain(0.74)

stack(
  bass, epiano2, electric_guitar_muted, rock_organ, kick, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, ride
)