Strudelify

See You Later Aligator

Bill Haley & His Comets

KeyC majorTempo150 bpm
0:00/0:00
// See You Later Aligator — Bill Haley & His Comets
// 150 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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
const bass = note(`<
  A B C A@2 B C A@6 C D A@2 B E A@2 F@2 A F D C A F E@2 F A@2 F A F C D A F E@2 A F A F@2 A C D F A E@2 F@3 A F A C D
  A@2 B@2 F G H
>`.pickRestart({
  A: "c2@2 ~ c2 e2@2 ~ e2 g2@2 ~ g2 a2@2 ~ g2", B: "g2@2 ~ g2 b2@2 ~ b2 d3@2 ~ d3 e3@2 ~ d3",
  C: "f2@2 ~ f2 a2@2 ~ a2 c3@2 ~ c3 d3@2 ~ c3", D: "f2@2 ~ f2 f2@2 ~ f2 f2@2 ~ f2 f2@2 ~ f2",
  E: "g2@2 ~ g2 g2@2 ~ g2 g2@2 ~ g2 g2@2 ~ g2", F: "c2@2 ~ c2 c2@2 ~ c2 c2@2 ~ c2 c2@2 ~ c2",
  G: "c2 ~@2 c2!2 ~@2 c2!2 ~@2 c2!2 ~@2 c2", H: "c2@5 ~@2 c2@7 ~@2",
})).s("gm_acoustic_bass").gain(0.4)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  A B C D A B C D E D A E A F G H@2 I@2 H J@2 A D J K L E J M B E H@3 E@2 C@2 E@2 N B E J@2 H D J K L E J M N H J@2 A E
  J K L D J M O D P Q
>`.pickRestart({
  A: "[e4,g4,c5] ~@6 [e4,g4,c5]@3 ~@2 b5 [c5,d5,e5,f5,g5,a5] [a4,b4] ~, ~@11 c6@2 ~@3", // C Dm7 Asus2
  B: "[g2,d3] ~@2 [g2,d3] [g2,d3,e3] ~@2 [g2,e3] [g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3], [b3,d4,g4]", // G5 Em7 C G5 C G
  C: "[f3,c4] ~@2 [f3,c4] [f3,c4,d4] ~@2 [f3,d4] [f3,c4] ~@2 [f3,c4] [f3,d4] ~@2 [f3,d4], [a4,c5,g5]", // F5 Dm7 Dm F5 Dm Am7
  D: "[c3,g3]@2 ~ [c3,g3,e4,g4,c5] [c3,a3]@2 ~ [c3,a3] [c3,g3,e4,g4,c5] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3]", // C5 C F C C5 F
  E: "[c3,g3] ~@2 [c3,g3] [c3,g3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3], [e4,g4,c5]", // C5 Am7 F C5 F C
  F: "[f3,c4] ~@2 [f3,c4] [f3,d4]@2 ~ [f3,d4] [f3,c4,d#5,g#5]@2 ~ [f3,c4] [f3,d4]@2 ~ [f3,d4], ~@11 [c5,f5]@5", // F5 Dm Fm7 F5 Dm F5
  G: "[a4,c5,g5] ~@6 [a4,c5,g5]@3 ~@2 e6 [g5,a5,a#5,c6,d6] [d5,e5] ~, ~@11 g6@2 ~@3", // Am7 Gm Dsus2
  H: "[c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3] [c3,g3] ~@2 [c3,g3] [c3,a3] ~@2 [c3,a3]", // C5 F C5 F
  I: "[g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3] [g2,d3] ~@2 [g2,d3] [g2,e3] ~@2 [g2,e3]", // G5 C G5 C
  J: "[c3,g3]@2 ~ [c3,g3,e5,g5,c6] [c3,a3]@2 ~ [c3,a3] [c3,g3,e5,g5,c6] ~@2 [c3,g3] [c3,a3]@2 ~ [c3,a3]", // C5 C F C C5 F
  K: "[f3,c4]@2 ~ [f3,c4,a5,c6,g6] [f3,d4]@2 ~ [f3,d4] [f3,c4,a5,c6,g6] ~@2 [f3,c4] [f3,d4]@2 ~ [f3,d4]", // F5 F Dm F F5 Dm
  L: "[f3,c4] ~@2 [f3,c4] [f3,d4] ~@2 [f3,d4] [f3,c4] ~@2 [f3,c4] [f3,d4] ~@2 [f3,d4]", // F5 Dm F5 Dm
  M: "[g2,d3]@2 ~ [g2,d3,b4,d5,g5] [g2,e3]@2 ~ [g2,e3] [g2,d3,b4,d5,g5] ~@2 [g2,d3] [g2,e3]@2 ~ [g2,e3]", // G5 G C G G5 C
  N: "[g2,d3] ~@2 [g2,d3] [g2,e3]@2 ~ [g2,e3] [g2,d3,f4,a#4]@2 ~ [g2,d3] [g2,e3]@2 ~ [g2,e3], ~@11 [d4,g4]@5", // G5 C Gm7 G5 C G5
  O: "[b3,d4,g4] ~@6 [b3,d4,g4]@3 ~@2 f#5 [g4,a4,b4,c5,d5,e5] [e4,f#4] ~, ~@11 g5@2 ~@3", // G Cmaj7 Esus2
  P: "[e4,g4,c5] ~@2 [e4,g4,c5] [f4,a4,c5] ~@2 [f4,a4,c5] [e4,g4,c5] ~@2 [e4,g4,c5] [f4,a4,c5] ~@2 [f4,a4,c5]", // C F C F
  Q: "[e4,g4,c5]@4 ~@3 [e5,g5,c6]@8 ~", // C
})).s("gm_electric_guitar_jazz").gain(0.57)

// other · piano
const piano = note("<~@20 A@8 B@3 C ~@12 A@8 B@3 C A@8 B@3 C ~@2>".pickRestart({
  A: "[~@4 e4@2 ~@2 g4@2 ~ e4 e4@2 ~@2 e4@2 ~@2 g3@2 ~ e3 e3@2 ~@2 e3@2 ~@2 g3@3 ~ e4@2 ~@2 g4@3 ~ e4@2 ~@2 e4@3 ~ g3@2 ~ e3 e3@2 ~@2 e3@2 ~@2 g3@3 ~ a4@2 ~@2 a#4@2 ~@2 a4@2 ~@2 a4@2 ~@2 a3@2 ~@2 c3@2 ~@2 d#3@2 ~@2 a3@3 ~ d#4@2 ~@2 a4@2 ~@2 d#4 ~@3 e4@3 ~ g3@2 ~ e3 e3@2 ~@2 e3@2 ~ e3, ~@7 e4@2 ~@6 b3@2 ~@2 e4@2 ~@6 g3@2 ~@2 e3@2 ~@6 e4@2 ~@6 b3@2 ~@10 g3@2 ~@2 e3@2 ~@6 g4@2 ~@2 g4@2 ~@2 f4@2 ~@2 d#4@2 ~@2 d#3@2 ~@2 a3@2 ~@2 c3@2 ~@6 c4@2 ~@2 c4@2 ~@2 c4@2 ~@10 g3@2 ~@3]/8",
  B: "[~@4 e4@2 ~@2 g4@2 ~ e4 e4@2 ~@2 d4@2 ~@2 g3@2 ~@2 d3@2 ~@2 e3@2 ~ d3@2 ~@3 e4@2 ~@2 g4@2 ~@2 e4@2 ~ f4, ~@7 e4@2 ~@6 b3@2 ~@2 d4@2 ~@2 e3@2 ~@2 g3@2 ~@10 f4@2 ~@2 d4@2 ~@3]/3",
  C: "g4 ~, e4 ~@15",
})).s("gm_piano").gain(0.6).pan(0.9)

// other · piano
const piano_2 = note("<~@20 A@4 B@7 C ~@12 A@4 B@7 C A@4 B@7 C ~@2>".pickRestart({
  A: "[~@4 b3@2 ~@2 e4@2 ~ b3 b3@2 ~@2 b3@2 ~@2 e3@2 ~ b2 b2@2 ~@2 b2@2 ~@2 e3@3 ~ b3@2 ~@2 e4@3 ~ b3@2 ~@2 b3@3 ~ e3@2 ~ b2 b2@2 ~@2 b2@2 ~ b2, ~@7 b3@2 ~@6 g3@2 ~@2 b3@2 ~@6 e3@2 ~@2 b2@2 ~@6 b3@2 ~@6 g3@2 ~@10 e3@2 ~@3]/4",
  B: "[e3@3 ~ f4@2 ~@2 g4@2 ~@2 f4@2 ~@2 d#4@2 ~@2 d#3@2 ~@2 a2@2 ~@2 c3@2 ~@2 d#3@3 ~ c4@2 ~@2 d#4@2 ~@2 c4 ~@3 b3@3 ~ e3@2 ~ b2 b2@2 ~@2 b2@2 ~ b2@2 ~@3 b3@2 ~@2 e4@2 ~ b3 b3@2 ~@2 b3@2 ~@2 e3@2 ~@2 b2@2 ~@2 c3@2 ~ b2@2 ~@3 c4@2 ~@2 e4@2 ~@2 c4@2 ~ d4, a#2 ~@6 e4@2 ~@2 e4@2 ~@2 c4@2 ~@2 c4@2 ~@2 c3@2 ~@2 d#3@2 ~@2 a2@2 ~@6 a3@2 ~@2 a3@2 ~@2 a3@2 ~@10 e3@2 ~@10 b3@2 ~@6 g3@2 ~@2 b3@2 ~@2 c3@2 ~@2 e3@2 ~@10 d4@2 ~@2 b3@2 ~@3]/7",
  C: "e4 ~",
})).s("gm_piano").gain(0.6).pan(0.2)

// other · piano
const piano_3 = note(`<
  ~@8 A@2 B@2 C@2 B@2 A@2 D E F@8 G@3 E A@2 B@2 C@2 B@2 A@2 D E F@8 G@3 E F@8 G@3 E ~@2
>`.pickRestart({
  A: "[~@4 a3@2 ~@2 c4@2 ~@2 a3@2 ~@2 g3@2 ~ e3@2 ~@11, ~@7 g3@2 ~@2 g3@2 ~@2 e3@2 ~@15]/2",
  B: "[~@2 a3 ~ c4 ~ a3 ~ g3@4 ~@4, ~@7 g3@2 ~@2 g3@2 ~@2 e3@2 ~@15]/2",
  C: "[~@4 d4@2 ~@2 d#4@2 ~@2 d4@2 ~@2 c4@2 ~ a3@2 ~@11, ~@7 c4@2 ~@2 c4@2 ~@2 a3@2 ~@15]/2",
  D: "~@4 a3@2 ~ c4 c4@2 ~@2 a3@2 ~ c4, ~@11 g3@2 ~@3", E: "c4 ~",
  F: "[~@4 a3@2 ~@2 c4@2 ~@2 a3@2 ~@2 g3@2 ~@2 c3@2 ~@2 g2@2 ~@2 a2@2 ~@2 c3@3 ~ a3@2 ~@2 c4@3 ~ a3@2 ~@2 g3@3 ~ c3@2 ~@2 g2@2 ~@2 a2@2 ~@2 c3@3 ~ d4@2 ~@2 d#4@2 ~@2 d4@2 ~@2 c4@2 ~@2 c3@2 ~@2 g2@2 ~@2 a2@2 ~@2 c3@3 ~ a3@2 ~@2 c4@2 ~@2 a3 ~@3 g3@3 ~ c3@2 ~@2 g2@2 ~@2 a2@2 ~ g2, ~@7 g3@2 ~@2 g3@2 ~@2 e3@2 ~@2 g3@2 ~@2 a2@2 ~@2 c3@2 ~@2 g2@2 ~@6 g3@2 ~@6 e3@2 ~@6 a2@2 ~@2 c3@2 ~@2 g2@2 ~@6 c4@2 ~@2 c4@2 ~@2 a3@2 ~@2 a3@2 ~@2 a2@2 ~@2 c3@2 ~@2 g2@2 ~@6 g3@2 ~@2 g3@2 ~@2 e3@2 ~@6 a2@2 ~@2 c3@2 ~@3]/8",
  G: "[~@4 a3@2 ~@2 c4@2 ~@2 a3@2 ~@2 g3@2 ~@2 c3@2 ~@2 g2@2 ~@2 a2@2 ~ g2@2 ~@3 a3@2 ~ c4 c4@2 ~@2 a3@2 ~ c4, ~@7 g3@2 ~@2 g3@2 ~@2 e3@2 ~@2 g3@2 ~@2 a2@2 ~@2 c3@2 ~@14 g3@2 ~@3]/3",
})).s("gm_piano").gain(0.5).pan(0.2)

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

// drums · snare
const snare = s("sd").struct("<A@3 B A@3 B A@11 B A@3 B A B A B A B A@13 B A@9 B A@3 B A@5 B A@3 B A C>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~ x!3 ~ x", C: "x ~@2 x ~@12",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@21 A ~@23 A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~@3 A ~@4>".pickRestart({
  A: "~@13 x ~ x",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct(`<
  ~@3 A ~@3 A ~@11 A@3 ~ A@3 ~ A@3 ~@13 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@2 B
>`.pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@69 [~@7 x ~@8]>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@3 B A@11 B@3 A B@3 A B@3 A@13 B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@2 ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@23 A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~@3 A ~@3 B>".pickRestart({
  A: "~@11 x!3 ~ x", B: "~@4 x!2 ~@10",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@69 [~ x ~ x ~@12]>").gain(0.64)

// drums · ride
const ride = s("rd").struct(`<
  A ~@3 A ~@3 A ~@11 A ~ A ~ A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B
>`.pickRestart({
  A: "x", B: "x ~@6 x ~@8",
})).gain(0.56)

stack(
  bass, electric_guitar_jazz, piano, piano_2, piano_3, kick, snare, snare_soft, clap, low_tom, hihat, mid_tom, high_tom,
  ride
)