Strudelify
Don't Rock the Jukebox cover art

1991 · Don't Rock the Jukebox

Don't Rock the Jukebox

Alan Jackson

KeyG majorTempo154 bpm
0:00/0:00
// Don't Rock the Jukebox — Alan Jackson
// 154 bpm, 2/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 195 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(154/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, A@4 for four bars: edit a riff to change every repeat.

// other · violin · "Split Chan 1"
const violin = note("<~@119 A B@2 ~ C D E F G H I@2 J@2 K@2 ~@60>".pickRestart({
  A: "~@5 d4@2 e4@3 ~@6", B: "[e4@11 d4@21]/2", C: "g3@7 a3@2 ~@4 g3 ~@2", D: "a3@7 c4@2 ~@3 d4 ~@3",
  E: "d#4@7 d4@2 ~@3 d4@2 ~@2", F: "b3@7 a3@6 ~@3", G: "~@5 a3@3 c#4@5 e4@3", H: "g4@5 b4@2 d5@5 b4@4",
  I: "[c#5@3 ~ e5@4 f#5@5 ~ a5@9 ~@9]/2", J: "[~@5 f#5@10 d5@5 ~ a4@3 c5@8]/2", K: "[f#4@5 f4@2 ~ e4@5 d4@15 ~@4]/2",
})).s("gm_violin").gain(0.48)

// bass · electric bass finger · "Split Chan 16"
const bass = note(`<
  ~@7 A@2 B@2 A@3 C A@3 D E@2 F G A@2 B@2 H I B@2 J D E@2 K L ~@2 M N M@2 O P O Q R S R T P R P R M N M@2 O U M@2 O V
  P@2 K L W ~ A@2 B@2 A@3 C A@3 V E@2 X G A@2 B@2 H I B@2 A V E@2 A@2 Y@2 Z A B@2 H I B@2 A D E AA K L ~@2 M N M@2 O P O
  Q R S R@2 P AB P R M O M AC O U M@2 O V P AD K L W ~ A AE B@2 A@3 AF A@2 AG D E@2 AH G A@2 B@2 H I B AI A@2 E@2 H I AJ
  AK AL V E@2 AM AN@7
>`.pickRestart({
  A: "g1@5 ~@3 g1@5 ~@3", B: "c2@5 ~@3 c2@5 ~@3", C: "g1@3 ~@3 d1@2 e1@6 f#1@2", D: "c2@7 ~ c#2@7 ~",
  E: "d2@6 ~@2 d2@5 ~@3", F: "d2@7 ~ c2@7 ~", G: "b1@8 a1@7 ~", H: "g1@7 ~ a1@7 ~", I: "a#1@7 ~ b1@7 ~",
  J: "g1@7 ~ g1@6 ~@2", K: "g2@8 e2@7 ~", L: "d2@5 ~ a1@2 b1@7 ~", M: "c2@7 ~", N: "g2@7 ~", O: "g1@7 ~", P: "d2@7 ~",
  Q: "g1@3 ~", R: "a1@7 ~", S: "e2@7 ~", T: "a1@9 ~@7", U: "g1@7 ~ b1@7 ~", V: "b1@3 ~ c2@3 ~", W: "g1@3 ~@5",
  X: "d2@3 a1 c2@4", Y: "[g1@4 ~ d1 ~ e1@7 ~ f1@7 ~ f#1@7 ~@2]/2", Z: "g1@6 ~@2 g1@5 ~@3", AA: "d2@5 ~@3 d2@4 ~@4",
  AB: "a2@15 ~", AC: "c2@13 ~@3", AD: "d2@13 ~@3", AE: "g1@5 ~@3 g1@4 ~@2 b1@2", AF: "g1@2 ~ e1 f1@2 f#1 ~",
  AG: "g1@5 ~@3 b1@6 ~@2", AH: "d2@4 ~@2 a1 ~ c2@8", AI: "c2@5 ~@3 c2@5 ~ d2@2", AJ: "c2@3 ~ d2@3 ~",
  AK: "e2@6 ~@2 f#2@7 ~", AL: "g1@7 ~ g1@5 ~@3", AM: "g1@3 ~@2 g1 ~ d2@9",
  AN: "[c#2@7 ~ c2@7 ~ c2 ~@14 g1@64 g1@7 ~@10, ~@15 b1@5 ~@92]/7",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · piano · "Split Chan 11"
const piano = note(`<
  ~@7 A@2 B@2 A@4 C@2 A@2 D@4 A@2 E@2 A@2 F@2 A@2 D@2 G@2 H ~ I@4 J@4 K@2 L@2 M@2 N@2 O@4 P@4 Q@2 R@2 S@2 T ~ Q@2 E@2
  A@6 U@2 D@4 A@2 E@2 A@2 V@4 D@2 A@6 E@2 A@2 E@2 A@2 D@2 W@2 X ~ O@4 Q@2 Y@4 Z@2 AA@2 AB@2 O@4 AC@2 AD@2 AE@4 AF@2 AG ~
  A@2 E@2 A@8 D@4 A@2 E@2 A@2 E@2 A@2 D@2 A@2 E@2 A@2 D@2 ~@3 AH@4 AI
>`.pickRestart({
  A: "[g3@7 ~ [d4,g4,b4]@14 ~@2 [d4,g4,b4]@8]/2", B: "[c4@7 ~ [e4,g4,c5]@15 ~ [e4,g4,c5]@8, ~@8 a#4 ~@23]/2",
  C: "[g3@7 ~ [d4,g4,b4]@14 ~@2 [d4,g4,b4]@8, ~@24 a#4 ~@7]/2", D: "[d3@7 ~ [d4,f#4,a4]@14 ~@2 [d4,f#4,a4]@8]/2",
  E: "[c4@7 ~ [e4,g4,c5]@14 ~@2 [e4,g4,c5]@8]/2", F: "[~@4 [e4,g4,c5]@7 ~ [e4,g4,c5]@4]/2",
  G: "[g3@7 ~ [d4,g4,b4]@14 ~@2 [e4,g4,c5]@7 ~]/2", H: "[g3,d4,g4,b4]@5 ~@11",
  I: "[~@5 d4@2 d#4 c5@5 ~@3 a#4@4 ~ d4@2 d#4 c5@5 c5@2 ~ c4@7 ~ [e4,g4,c5]@13 c4 ~@2 g4@5 g4@2 a4, c4@8 [e4,g4]@12 ~ c4 ~@2 [e4,g4]@8 ~@24 [e4,c5]@8, ~@13 c5@7 ~@4 d#4 ~@6 a#4@19 ~@14]/4", // C Em C
  J: "[[b4,d5]@4 ~ [b4,d5] ~@2 b4@5 b4@2 [b4,d5]@5 ~@2 g4 ~ [d4,g4,b4]@7 ~ g3@7 ~ [d4,g4,b4]@13 g3@2 ~ [d4,g4,b4]@8, g3@5 ~@2 d5@4 ~@2 d5 ~@6 f#4@2 ~ [a4,c5]@6 ~@2 [g4,b4]@9 ~@24, ~@8 [d4,g4]@13 g3@2 ~@41]/4", // Bm G Am G G5
  K: "[a3@7 ~@6 [b4,d5]@3 [c#5,e5]@5 ~ [a4,c#5]@2 [a4,b4,c#5,d5]@5 [a4,c#5]@3, ~@8 [e4,a4]@12 ~ a3@2 ~ e4@8, ~ c#5 ~@2]/2", // Bm C#m A Dmaj7 A A5
  L: "[[a3,d5]@5 c#5@3 [e4,a4,c#5]@13 a3@2 ~@6 f#4 g4@2, b4@4 ~ e5@19 [e4,a4,c#5]@8]/2", // D5 A
  M: "[[f#4,a4]@3 ~@2 a4 f#4 ~ f#4@7 [d4,f#4]@4 ~@2 d4 ~@2 [f#4,a4,d5]@7 d4, d4@5 ~@3 [a4,d5]@12 ~@4 c#5 ~@7, g4 ~@6 g4@4 ~@12 g4@3 ~@6, ~@8 e4@3 ~@13 e4@3 ~@5]/2", // F#m D D5
  N: "[d4@5 [e4,g4]@2 ~ [d4,f#4,a4,d5]@13 d4 ~@2 [f#4,a4,d5]@8, f#4@3 ~@29]/2", // Em D
  O: "[c4@7 ~ [e4,g4,c5]@13 c4@2 ~ [e4,g4,c5]@8]/2", // C
  P: "[g3@7 ~ [d4,g4,b4]@13 g3@3 [d4,g4,b4]@7 c4@8 ~ [e4,g4,c5]@13 c4@2 ~ [e4,g4,c5]@8]/4", // G C
  Q: "[g3@7 ~ [d4,g4,b4]@13 g3@2 ~ [d4,g4,b4]@8]/2", R: "[d3@7 ~ [d4,f#4,a4]@13 d3@3 [d4,f#4,a4]@8]/2",
  S: "[g3@7 ~ [d4,g4,b4]@13 g3 ~@2 [e4,g4,c5]@7 ~, ~@24 b4 ~@7]/2", T: "[d4,g4,b4]@3 ~@5",
  U: "[g3@7 ~ [d4,g4,b4]@14 ~@2 [d4,g4,b4]@8, ~@4 f#4 ~@11]/2", // G
  V: "[c4@7 ~ [e4,g4,c5]@14 ~@2 [e4,g4,c5]@7 g3@8 ~ [d4,g4,b4]@14 ~@2 [d4,g4,b4]@8]/4", // C G
  W: "[g3@7 ~ [d4,g4,b4]@13 g3@2 ~ [e4,g4,c5]@6 ~@2]/2", X: "[g3,g4,b4]@5 ~@11",
  Y: "[g3@8 [d4,g4,b4]@13 g3@2 ~ [d4,g4,b4]@7 a3@8 ~ [e4,a4,c#5]@12 ~ a3@2 ~ [e4,a4,c#5]@8]/4", // G A
  Z: "[a3@7 ~ [e4,a4,c#5]@12 ~ a3@2 ~ [e4,a4,c#5]@8]/2", AA: "[d4@7 ~ [f#4,a4,d5]@13 d4 ~@2 [f#4,a4,d5]@8]/2",
  AB: "[d4@7 ~ [f#4,a4,d5]@13 d4@2 ~ [a4,d5]@8, ~@23 f#4@9, ~@24 c#5 ~@7]/2", // D D5
  AC: "[~@8 [g4,b4]@8 [g4,b4]@5 g3@2 ~@2 d4@7, g3@8 d4@13 ~@3 [f4,a4]@2 ~@6, ~@2 a4 d5@5 ~@8, ~@5 [b4,c5]@3 ~@16 [g4,b4]@8]/2", // G F Cmaj7 G
  AD: "[[f4,a4]@2 ~@3 a4@2 e4 c5@12 ~ c4 ~@2 [g4,c5]@8, c4 ~@3, ~ b4 f4 ~ [e4,g4]@8 ~@4, ~@3 g4@2 ~@18 e4@8 ~]/2", // F C5 Em
  AE: "[g3@8 b4@8 [b4,d5]@5 ~ c5@2 [d4,g4,b4]@7 ~ [d3,a4]@8 d4@13 d3@3 [d4,f#4,a4]@8, ~@8 [d4,g4]@13 [g3,a4]@3 ~@40, ~@8 d5@2 ~@21 f#4@9 [f#4,a4]@16 ~@8]/4", // Bm G D5 D G5 Gsus2 F#m
  AF: "[g3@8 [d4,g4,b4]@13 g3@2 ~ [e4,g4,c5]@6 ~@2]/2", AG: "[d4,g4,b4]@5 ~@11", AH: "[[g3,g4,b4,d5]@61 ~@3]/4",
  AI: "[g3,g4,b4,d5]@3 ~@5", // G
})).s("gm_piano").gain(0.49)

// drums · kick
const kick = s("bd").struct("<~@7 A@30 B ~ B@31 ~ A@46 B C B@28 A@2 B C A@35 D A@2 B@2 ~@3 B>".pickRestart({
  A: "x!2", B: "x", C: "~ x", D: "x ~@4 x ~@2 x ~@7",
})).gain(0.66)

// drums · rim
const rim = s("rim").struct("<~@39 [~ x]!29 ~@51 [~ x]!29 ~@47>").gain(0.66)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A@16 B A@13 C ~@31 D E A@16 D A@15 F A@13 F E ~@29 A F E A@16 G A@11 B A@3 F A@6 E ~@5
>`.pickRestart({
  A: "~ x", B: "~@5 x ~@2 x ~@4 x ~@2", C: "~@5 x ~@2 x ~ x ~@2 x ~ x", D: "~@8 x ~@2 x ~ x ~@2", E: "x",
  F: "~@3 x!2 ~@3", G: "~@6 x ~ x ~@4 x ~@2",
})).gain(0.66)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A ~@63 A ~@31 B ~@13 B ~@31 B ~ A ~@31 B ~@6 C ~@5>".pickRestart({
  A: "~ x", B: "~@13 x ~@2", C: "x",
})).gain(0.66)

// drums · hihat
const hihat = s("hh").struct("<~@3 A@2 B ~ C@30 B ~ C@29 B ~@2 C@46 B ~ C@30 B ~ C@38 B D@4 ~>".pickRestart({
  A: "x!2", B: "x", C: "x ~@7 x ~@4 x ~@2", D: "~ x",
})).gain(0.59)

// drums · mid tom
const mid_tom = s("mt").struct("<~@102 A ~@13 A ~@31 A ~@33 A ~@12>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.52)

// drums · high tom
const high_tom = s("ht").struct("<~@102 A ~@13 A ~@31 A ~@33 A ~@12>".pickRestart({
  A: "~ x",
})).gain(0.59)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@15 A ~@47 A ~@15 A ~@15 A ~@47 A ~@15 A ~@15 A ~@5 B ~@4 A>".pickRestart({
  A: "x", B: "~@15 x",
})).gain(0.59)

// drums · ride
const ride = s("rd").struct("<~@39 A@6 B@2 A@9 B@4 A@9 C ~@49 A@3 B A B A@3 B A@4 B A@15 C ~@45>".pickRestart({
  A: "x ~@7 x ~@4 x ~@2", B: "x ~@7 x ~@6 x", C: "x",
})).gain(0.59)

stack(violin, bass, piano, kick, rim, snare, low_tom, hihat, mid_tom, high_tom, crash, ride)

More by Alan Jackson