Strudelify
Hey Tonight cover art

1970 · Pendulum

Hey Tonight

Creedence Clearwater Revival

KeyE majorTempo127 bpm
0:00/0:00
// Hey Tonight — Creedence Clearwater Revival
// 127 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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, A@4 for four bars: edit a riff to change every repeat.

// chords · electric guitar jazz · "gitarre1"
const electric_guitar_jazz = note(`<
  ~ A B@2 C ~@17 D E F G H I J K ~@8 L M L N O P Q R O P S R T U V W X U Y Z AA ~@12 AB@4 AC AB@4 AD@3
>`.pickRestart({
  A: "[b5,e6]@2 [c#6,e6] ~ [b5,c#6,e6]@2 a5@2 [b5,e6]@2 a5 ~ f#5@2 g#5@2, ~@3 b5", B: "g#4@4 f#4@3 ~ e4@4 f#4@4",
  C: "g#4@3 ~", D: "b3 ~ b3@2 d#4@3 ~ e4@2 e4 ~ f4 ~ f4 ~", E: "f#4 ~ f#4@2 a#4 ~ a#4 ~ b4 ~ b4 ~ c5@2 c#5@2",
  F: "b4 ~ b4@2 g#4 ~ g#4 ~ f#4 ~ f#4 ~ d#4 ~ d#4 ~",
  G: "b3 ~ b3@2 d#4 ~ d#4@2 [b3,f#4] ~ [b3,f#4] ~ [b3,g#4]@2 [b3,f#4] ~", H: "b3 ~ b3@2 d#4 ~ d#4@2 e4@3 ~ f4@3 ~",
  I: "f#4 ~ f#4@2 a#4 ~ a#4 ~ b4 ~ b4 ~ c5 ~ c#5 ~", J: "b4 a4 g#4 f#4", K: "b3@4 a3@4 g#3@4 f#3@3 ~",
  L: "[e5,g#5] b4 [e5,a5] b4 [e5,g#5] b4 e5 g#4", M: "b4 e4 a4 e4 g#4@2 e4@2", N: "b4@2 e4@2 a4@2 e4@2 g#4@4 e4@3 ~",
  O: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5]@2", // A
  P: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // A
  Q: "~@2 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5]@2", // E
  R: "~@2 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5] ~", // E
  S: "~@2 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5] ~@3 [e4,g#4,b4,e5]@3 ~ [e4,b4,e5]@2", T: "b3 d#4 e4 f4",
  U: "f#4@4 a#4@3 ~ b4@4 c5@2 c#5@2", V: "b4@4 g#4@4 f#4@3 ~ d#4@3 ~",
  W: "[b3,f#4]@2 b3 ~ [b3,g#4]@2 b3 ~ [b3,f#4]@2 b3 ~ g#4@2 b3 ~, ~@12 b3 ~@3", X: "b3@4 d#4@3 ~ e4 ~ e4@2 f4@2 f4 ~",
  Y: "b4@4 a4@4 g#4@4 f#4@3 ~",
  Z: "[b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ b3@3 ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~, ~@6 f#4 ~@9", // B5
  AA: "[b3,b4]@4 [a3,a4]@4 [g#3,g#4]@3 ~ [f#3,f#4]@3 ~, ~@4 b4 ~@11", AB: "g#4 b3 f#4 b3 e4 b3 f#4 b3",
  AC: "g#4 b3 [f#4,g#4] b3 e4 b3 f#4 b3", AD: "[g#4 b3 f#4 b3 e4 b3 f#4 ~ [e3,g#4]@10 ~@6, ~@7 b3@11 ~@6]/3",
})).s("gm_electric_guitar_jazz").gain(0.38).pan(0.2)

// chords · string ensemble 1 · "fl„che"
const string_ensemble_1 = note(`<
  ~@4 A@8 B@6 C@2 D@2 E@5 F@2 G H@4 C@2 I@6 C@2 J@2 C@2 J@2 K@4 G L@4 I@6 C@2 D@2 C@2 M@8 ~@2 N ~
>`.pickRestart({
  A: "[[b3,g#4]@95 ~ [c#4,a4]@31 ~, e4]/8", B: "[[b3,g#4]@95 ~]/6", C: "[[c#4,e4,a4]@31 ~]/2",
  D: "[[b3,e4]@15 ~, g#4]/2", E: "[[b3,d#4]@16 [a#3,c#4]@16 [b3,d#4]@47 ~, f#4@79 ~]/5",
  F: "[[a#3,c#4]@16 [b3,d#4]@15 ~, f#4]/2", G: "[b3,d#4,f#4]@15 ~", H: "[[b3,e4,g#4]@63 ~]/4",
  I: "[[b3,e4,g#4]@95 ~]/6", J: "[[b3,e4,g#4]@31 ~]/2", K: "[d#4@16 [a#3,c#4]@16 [b3,d#4]@31 ~, f#4@63 ~, b3@7 ~@25]/4",
  L: "[c#4@16 [b3,d#4]@47 ~, f#4@31 ~, a#3@7 ~@25]/4", M: "[b3,e4,g#4]/8", N: "[b3,e4,g#4]",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.4)

// chords · epiano1 · "piano"
const epiano1 = note(`<
  ~ A ~@2 B@4 C@2 D@2 E@2 F@4 D@2 B@2 G H G@3 H G I J K L@2 M@2 N@2 B@2 O@2 P@2 Q R S P T U V W G X G H G@2 Y Z@2 AA@2
  AB@2 AC@2 AD@2 AE@2 AF@2 AG R@7 AH ~
>`.pickRestart({
  A: "[b3,e4]@15 ~", B: "[[e3,g#3,b3,e4]@13 ~@3]/2", C: "[[e3,g#3,b3,e4]@25 ~@7]/2", D: "[[a2,e3,a3,c#4]@27 ~@5]/2",
  E: "[[g#3,b3,e4]@9 ~@7, e3@3 ~@5]/2", F: "[[e3,g#3,b3,e4]@27 ~@5]/2",
  G: "[b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~", // B5
  H: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~", // F#
  I: "[b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ b3 ~", // B5
  J: "[e3,b3,e4,g#4]", K: "~@7 b2", L: "[[e3,g#3,b3,e4]@29 ~@3]/2", M: "[[a2,a3,c#4,e4]@7 ~]/2",
  N: "[[g#3,b3,e4]@17 ~ [b3,e4] ~@5 [b3,e4]@6 ~@2, e3@10 ~ e3@4 ~]/2", O: "[[e3,b3,e4]@21 ~@11, g#3@3 ~@5]/2",
  P: "a2@2 [c#4,e4,a4] ~ a2@2 [c#4,e4,a4] ~ a2@2 [c#4,e4,a4] ~ a2@2 [c#4,e4,a4] ~", // A
  Q: "[d2,d#4] ~ [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4]@2, e2 ~@7", // D#maj7 E
  R: "e2 ~ [g#3,b3,e4] ~ e2 ~ [g#3,b3,e4] ~ e2 ~ [g#3,b3,e4] ~ e2 ~ [g#3,b3,e4] ~", // E
  S: "a2 ~ [c#4,e4,a4] ~ a2 ~ [c#4,e4,a4] ~ a2@2 [c#4,e4,a4] ~ a2@2 [c#4,e4,a4] ~", // A
  T: "e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4]@2", // E
  U: "e2@2 [g#3,b3,e4] ~ e2 ~@4 [c4,d4,e4] [d4,f4,g4] [a4,b4,c5,d5] [d5,e5,f5] [g5,a5] [b5,d6] [e6,f6,g6]", // E C G7 D7 Dm Gsus2 Bm Em
  V: "[a6,b6] c7 ~@14", // Asus2
  W: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] c#4 [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~ [c#4,f#4,a#4] ~", // F#
  X: "[b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,g#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,f#4,b4] ~ [b3,g#4,b4] ~ [b3,f#4,b4] ~", // B5 E B5 E B5
  Y: "b3 ~ [b4,f#5,b5] ~ [b4,f#5,b5] ~ [b4,f#5,b5] ~ [b4,f#5,b5] ~ [b4,f#5,b5] ~ [b4,f#5,b5] ~ [b4,f#5,b5] ~", // B5
  Z: "[[e3,g#3,b3]@11 ~@4 b2]/2", AA: "[[e3,g#3,b3,e4]@10 ~@5 b2]/2", AB: "[[g#3,b3,e4]@27 ~@5, e3@25 ~@7]/2",
  AC: "[[e3,a3,c#4]@27 ~@5, a2@3 ~@5]/2", AD: "[[e3,g#3,b3,e4]@5 ~@3]/2", AE: "[[a2,e3,a3,c#4]@21 ~@11]/2",
  AF: "[[g#3,b3,e4]@17 ~@15, e3@5 ~@3]/2", // E
  AG: "e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~ e2@2 [g#3,b3,e4] ~", AH: "[e2,g#3,b3,e4]",
})).s("gm_epiano1").gain(0.36).pan(0.7)

// chords · electric guitar muted · "Git2Copy"
const electric_guitar_muted = note(`<
  ~ A B C D E@2 F G E H@2 E@6 H@2 E@2 I J K@3 J K L E@3 M N O P@3 M E F Q N P E H R E@2 K J K@3 J K S T E@3 U E V N W E
  M H X E M E M E Y E@3 M Z ~
>`.pickRestart({
  A: "[e4,b4,e5]@2 [c#5,e5]@2 [b4,c#5,e5]@2 a4@2 [b4,e5]@2 a4 ~ [f#4,b4]@2 g#4 ~", // E5 C#m C#m7 E5 B5
  B: "e4 e5 e4 [b4,e5] e4 [b4,e5] e4 [b4,e5], b4@5 ~@11", // E5
  C: "e4@2 [b4,e5]@2 e4@2 [b4,e5]@2 e4@2 [b4,e5]@2 e4@2 [b4,e5] ~", // E5
  D: "[e3,b3,e4] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  E: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  F: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3]@2", // E5
  G: "~@2 [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  H: "[a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~", // A5
  I: "[b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,g#4]@2 [b3,f#4]@2", // B5 E B5
  J: "[f#3,c#4] ~ [f#3,c#4] ~ [f#3,d#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~ [f#3,d#4] ~ [f#3,c#4] ~", // F#5 D#m F#5 D#m F#5
  K: "[b3,f#4] ~ [b3,f#4] ~ [b3,g#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,g#4] ~ [b3,f#4] ~", // B5 E B5 E B5
  L: "[b3,f#4] ~ [b3,f#4] ~ [b3,g#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,g#4] ~ [b3,f#4,g#4] ~", // B5 E B5 E G#m7
  M: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,c#4] ~ [e3,b3] ~", // E5 C#m E5
  N: "[a3,e4] ~ [a3,e4] ~ [a3,f#4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~", // A5 D A5
  O: "[a3,e4] ~ [a3,e4] ~ [a3,f#4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4,f#4] ~", // A5 D A5 F#m7
  P: "[e3,b3] ~ [e3,b3] ~ [e3,c#4] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5 C#m E5
  Q: "[a3,e4] ~ [a3,e4] ~ [a3,f#4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,f#4] ~ [a3,e4] ~", // A5 D A5 D A5
  R: "[a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,c#4,e4] ~", // A5 A
  S: "[b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~", // B5
  T: "[b3,f#4] ~ [b3,f#4] ~ [b3,d#4,f#4,g#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [b3,f#4,g#4] ~ [b3,f#4] ~", // B5 G#m7 B5 G#m7 B5
  U: "[e3,b3] ~ [e3,b3] ~ [e3,c#4] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,c#4]@2", // E5 C#m E5 C#m
  V: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,c#4] ~ [e3,b3]@2", // E5 C#m E5
  W: "[a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,f#4] ~ [a3,e4]@2", // A5 D A5
  X: "[a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,f#4]@2 [a3,e4]@2", // A5 D A5
  Y: "[e3,b3] ~ [e3,b3] ~ [e3,c#4] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3,c#4] ~ [e3,b3] ~", Z: "[e3,b3,e4]",
})).s("gm_electric_guitar_muted").gain(0.35).pan(0.7)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@4 A@5 B C D A@2 E A@2 B C D A B F G H I F G J K L A M B C D A M@2 A@2 B N D A B N D M B F G H O F G J P Q A@5 B C R
  A B C D A S A M A@2 M A M T U ~
>`.pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ b1@2", B: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e1@2",
  C: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ e1@2", D: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ b1@2",
  E: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ b1 ~", F: "b1 ~ b1 ~ d#2 ~ d#2 ~ e2 ~ e2 ~ f2 ~ f2 ~",
  G: "f#2 ~ f#2 ~ a#2 ~ a#2 ~ b2 ~ b2 ~ c3@2 c#3@2", H: "b2 ~ b2 ~ g#2 ~ g#2 ~ f#2 ~ f#2 ~ d#2 ~ d#2 ~",
  I: "b1 ~ b1@2 d#2 ~ d#2 ~ f#2 ~ f#2 ~ g#2@2 f#2@2", J: "b2 ~ b2@2 a2 ~ a2 ~ g#2 ~ g#2@2 f#2 ~ f#2 ~",
  K: "b1 ~ b1@2 a1 ~ a1@2 g#1 ~ g#1 ~ f#1 ~ b1@2", L: "e2@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  M: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 b1@2", N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  O: "b1 ~ b1@2 d#2 ~ d#2@2 f#2 ~ f#2@2 g#2@2 f#2 ~", P: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  Q: "b1 ~ b1 ~ a1 ~ a1@2 g#1 ~ g#1 ~ f#1 ~ b1@2", R: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 b1@2",
  S: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ b1@2 e1@2", T: "e2 ~ e2 ~ e2 ~ e2 ~ e2@2 c#2@2 b1@2 g#1 ~", U: "e1",
})).s("gm_electric_bass_pick").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@4 A@18 B@8 A@20 B@8 C A@22 D ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@3 x!2 ~@2", C: "x!2 ~@2 x!2 ~ x", D: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@4 A@17 B A B A C A@23 D A@3 E A@10 F A@15 E ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!3 ~", C: "~@4 x ~@3 x!3 ~ x!3 ~", D: "~@4 x ~@6 x!4 ~", E: "~@2 x ~@2 x!2 ~",
  F: "~@2 x ~@2 x!3",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A ~@3 B@17 C B D B E B@55 F ~>".pickRestart({
  A: "x!3 ~", B: "x!8", C: "x!7 ~", D: "x!6 ~@2", E: "x!4 ~@4", F: "x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@9 A ~@7 A ~@3 A ~@3 A ~@7 A ~@11 A ~@3 A ~@4 A ~@3 A ~ A ~@3 A ~@3 A ~@7 A ~
>`.pickRestart({
  A: "x",
})).gain(0.5)

stack(electric_guitar_jazz, string_ensemble_1, epiano1, electric_guitar_muted, bass, kick, snare, hihat, crash)

More by Creedence Clearwater Revival