Strudelify
Hey! Baby cover art

1962 · Hey! Baby!

Hey! Baby

Bruce Channel

KeyA majorTempo133 bpm
0:00/0:00
// Hey! Baby — Bruce Channel
// 133 bpm, 4/4, key A major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · fretless bass · "FRETLESS"
const bass = note(`<
  A B A B A B A B C D C D E F G H I J I J I J K@2 L M N O L P Q ~ I J I J I J R@2 S T U V W X Y ~ I J I J I J R@2 S T U
  V W X Y ~ I J I J E F G H I J I J E F G H I J I J I J Z@2
>`.pickRestart({
  A: "c3@4 c3 ~ b2 ~ a2@3 ~ a2 ~ g#2@2", B: "g2@4 f2 ~ e2 ~ d2@4 g2@3 ~", C: "c3@3 ~ b2@3 ~ a2@3 ~ g2@3 ~",
  D: "f2@3 ~ e2@3 ~ d2@3 ~ g2@3 ~", E: "c3@4 b2@3 ~ a2@3 ~ g2@3 ~", F: "f2@3 ~ d2@3 ~ g2@3 ~ g2@3 ~",
  G: "c2@3 ~ e2@3 ~ a2@3 ~ c3@3 ~", H: "d3@3 ~ b2@3 ~ a2@3 ~ g2@3 ~", I: "c2@3 ~ e2@3 ~ a2@3 ~ a2 ~ a2 ~",
  J: "d3@3 ~ a2@3 ~ g2@3 ~ e2 ~ d2 ~", K: "[c2@2 ~@2 c2@3 ~ f2 ~ f2@2 ~@2 c2@5 ~ c2 ~ c2@2 d2 ~ d2@2 e2 ~ e2@2]/2",
  L: "f2@3 ~ a2@3 ~ c3@3 ~ d3@3 ~", M: "d#3@3 ~ d3@3 ~ c3@3 ~ a2@2 ~@2", N: "c2@3 ~ e2@3 ~ g2@3 ~ a2@3 ~",
  O: "c3@3 ~ a2@3 ~ g2@3 ~ e2@4", P: "f2@4 a2@3 ~ c3@4 a2 ~ f2 ~", Q: "d2 ~@7",
  R: "[c2@2 ~@2 c2@3 ~ f2 ~ f2@2 ~@2 c2@5 ~ c2 ~ c2@2 b1 ~ b1 ~ a#1 ~ a#1 ~]/2", S: "a2@3 ~ g2@3 ~ e2@3 ~ g2 ~ g2 ~",
  T: "a2@3 ~ c#3@3 ~ e3@3 ~ c#3 ~ c#3 ~", U: "d2@3 ~ f#2@3 ~ a2@3 ~ c3 ~ c3 ~", V: "d3@3 ~ c3@3 ~ b2@3 ~ a2 ~ g#2 ~",
  W: "g2@3 ~ e2@3 ~ d2@3 ~ e2 ~ a2 ~", X: "g2@3 ~ b2@3 ~ d3@3 ~ e3 ~ d3 ~", Y: "c3 ~@7",
  Z: "[c2@2 ~@2 c2@3 ~ f2 ~ f2@2 ~@2 c2@18]/2",
})).s("gm_fretless_bass").gain(0.4)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D A B C D A B C D A B C D A B C D A B E@2 F G H I J K L M A B C D A B E@2 N O P Q R S T U A B C D A V E@2 N O P
  Q R S T U A B C D A B C D A B C D A B C D A B C D A B W@2
>`.pickRestart({
  A: "c4 ~@2 e4 g4@2 e4 ~ a3@2 c#4 e4 g4@2 e4 ~, ~@2 c4@3 ~@11", B: "d4@2 d4 f4 g4@2 d4 ~ g3@2 b3 d4 g4@2 d4 ~",
  C: "c4 ~@2 e4 g4@2 e4@2 a3@2 c#4 e4 ~@2 e4 ~, ~@2 c4@5 ~@5 g4@4",
  D: "d4@2 d4 ~ g4@2 f4@2 g3@2 b3 ~ g4@2 d4@2, ~@11 d4@2 ~@3",
  E: "[e4@3 ~ [c4,e4]@3 ~ [c4,f4] ~ [c4,f4]@3 ~ [c4,e4]@4 c4@2 c4 ~ c4@3 ~ c4@3 ~ c4 ~, c4 ~@17 e4 ~ e4@5 ~ e4@6]/2", // C F5 C
  F: "c4@3 ~ c4@4 ~@4 c4@4", G: "~@4 [d#4,f4]@3 ~@3 [c4,d#4]@2 ~@2 f4@2", H: "~@4 [c4,e4]@3 ~@5 [c4,e4]@2 ~@2",
  I: "~@2 [a#3,c4,e4] ~@2 [c4,e4] ~ [a#3,c4,e4]", J: "[a3,c4,f4]@2 ~@2 [c4,f4]@3 ~@5 [a3,c4,f4]@2 ~@2, ~@4 a3 ~@11",
  K: "~@4 [c4,f4]@2 ~@4 [a3,c4,f4]@2 ~@2 a3 ~, ~@4 a3 ~@11", L: "[a3,c4,d4] ~@7",
  M: "g3 ~ g3@2 a3 ~ a#3 ~ b3@2 g3@2 a3 ~ b3 ~", N: "c#4@3 ~ [c#4,e4,g4]@3 ~@3 [c#4,e4,g4]@3 ~ a3 ~",
  O: "[c#4,e4,g4]@4 a3 ~ [c#4,e4,g4]@2 ~@2 [a3,c#4,e4,g4]@3 ~ [c#4,e4,g4] ~, a3 ~@6 a3", // C#dim A7 C#dim
  P: "~@2 a3 ~ [a3,d4,f#4]@4 ~@2 [a3,d4,f#4]@2 ~@4", // D
  Q: "[a3,c4,d4,f#4]@3 ~@3 [a3,d4,f#4]@3 ~ [a3,c4,d4,f#4]@3 ~ [a3,f#4] ~, ~@7 d4", // D7 D D7 D
  R: "[d4,g4]@3 ~ [d4,g4]@2 b3 ~@3 [d4,f4,g4] ~@3 [d4,g4]@2, b3 ~@3 b3 ~@5 b3@3 ~ b3 ~", // G5 G7 G5
  S: "~@4 [b3,g5,g6] ~ [a5,a6] ~@3 d4@2 b3 ~ [b3,d4] ~, ~@4 [d4,g4]@4 ~@2 [g4,f5,f6]@5 ~, ~@6 b3@3 ~@7", // Em A Bm G5 G7
  T: "[c4,e4,g4] ~@7", U: "~@10 g3 ~ a#3 ~ b3 ~", V: "d4@2 d4 f4 g4@2 d4 ~ g3@2 b3 d4 g4@2 d4@2",
  W: "[[c4,e4]@3 ~ [c4,e4]@3 ~ [c4,f4] ~ [c4,f4]@3 ~ [c4,e4]@18]/2", // C F5 C
})).s("gm_piano").gain(0.35).pan(0.7)

// chords · piano · "A.PIANO 2" · soft notes
const piano_soft = note(`<
  A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~@2 D E ~@2 F G ~@2 A B ~ C A B ~@2 H I J A K L ~@2 A B ~ C A B ~@2 H I J
  A K L ~@2 A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~@2
>`.pickRestart({
  A: "~@6 c4 ~@9", B: "~@6 f4 ~@5 b3 b3@2 ~", C: "~@3 f4 ~@3 d4 ~@5 b3 ~@2",
  D: "[d#4,f4]@2 ~@2 f4@4 ~@2 c4 ~ [d#4,f4]@4, ~@2 d#4 ~@5", E: "~@4 c4@2 ~@2 c4 ~ f4@2 ~@2 [c4,d#4] ~",
  F: "~@5 a3 ~@10", G: "~@2 a3 ~@3 a3 ~@7 f4 ~", H: "[e4,g4]@3 ~@5 c#4 ~@7, a3 ~", I: "~@2 a3 ~@13", J: "~@2 d4 ~@13",
  K: "~@8 b3 ~@7", L: "b3 ~ b3 ~@5 d4 ~@7",
})).s("gm_piano").gain(0.2).pan(0.7)

// chords · piano · "HONKY TONK"
const piano_2 = note(`<
  A B C D C E A F G H I J G E G E I J K L G E M@2 N O P Q N O R S I J K L G E T@2 U V W X Y ~@2 Z I J K L G E T@2 U V W
  X Y ~@2 Z I J K L G E G E I J K L G E G E I J K L G E AA@2
>`.pickRestart({
  A: "~@2 [c5,e5] ~@3 [c#5,e5] ~", B: "~@2 [c5,d5] ~@3 [b4,d5] ~", C: "~@2 [g4,c5,e5] ~@3 [a4,c#5,e5] ~",
  D: "~@4 [a4,c5,d5]@2 ~@6 [g4,b4,d5]@3 ~", E: "~@2 [a4,c5,d5] ~@3 [g4,b4,d5] ~", F: "~@4 [c5,d5]@2 ~@6 [b4,d5]@3 ~",
  G: "~@2 [g4,c5,e5] ~@3 [a4,c5,e5] ~", H: "~@2 [a4,d5] ~@3 [g4,b4,d5] ~",
  I: "~@2 [g4,c5,e5] ~@3 [c5,e5] ~, ~@12 a4 ~@3", J: "~@2 [c5,d5] ~@3 [g4,b4,d5] ~, ~@4 a4 ~@11",
  K: "~@4 [g4,c5,e5] ~@7 [a4,c5,e5]@2 ~@2", L: "~@2 [a4,c5,d5] ~@3 [g4,b4,d5] ~, ~@4 c#5 ~@11",
  M: "[[g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [a4,c5,f5] ~ [a4,c5,f5]@2 ~@2 [g4,c5,e5]@5 ~ [a#4,c5,d5,e5] ~ [a#4,c5,e5]@3 ~ a#4 ~ [a#4,c5,e5] ~ [a#4,c5,e5]@2]/2", // C F C C7
  N: "[c5,f5]@2 a4 ~ [a4,c5,f5] ~ [c5,f5]@2 a4 ~ [c5,f5]@2 a4 ~ [a4,f5] ~, a4 ~@5 a4 ~@3 a4 ~@5", // F5 F F5 Dm
  O: "[c5,f5]@2 a4 ~ a4 ~ [a4,c5,f5]@3 ~ [a4,c5,f5]@4 [a4,c5] ~, a4 ~@15", // F5 F Am
  P: "[g4,c5,e5]@3 ~ [g4,c5] ~ [g4,c5,e5]@3 ~ g4 ~ [c5,e5]@2 [g4,c5] ~, ~@12 g4 ~@3", // C C5 C C5
  Q: "[g4,c5]@2 [g4,c5,e5]@3 ~ [g4,c5,e5]@3 ~ [c5,e5]@2 g4@2 [g4,c5]@2, e5 ~@9 g4 ~@3 e5 ~", R: "[f#4,a4,d5]@3 ~@13",
  S: "~@10 g3@2 a3@2 b3 ~",
  T: "[[g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [a4,c5,f5] ~ [a4,c5,f5]@2 ~@2 [g4,c5,e5]@5 ~ [c4,c5] ~ [c4,c5] ~ [b3,b4] ~ [b3,b4] ~ [a#3,a#4] ~ [a#3,a#4] ~]/2", // C F C B A#
  U: "[a3,a4] ~ [c#4,c#5] ~ [e4,e5] ~ [g4,g5] ~", // A C# E G
  V: "[a4,a5] ~@3 [g4,g5] ~ a4@2 ~@2 [g4,g5] ~ [a4,a5]@2 ~@2, ~@6 a5 ~@9", // A G A
  W: "[d4,d5]@3 ~ [f#4,f#5]@3 ~ [a4,a5]@3 ~ [c5,c6]@2 ~@2", X: "[d5,d6]@2 ~@2 [c5,c6] ~ [d5,d6]@2 ~@2 [c5,c6] ~@5",
  Y: "[g3,g5]@4 b3@3 ~ [b3,b4,b5] ~ [d4,d5,d6]@4 ~@2, g4@2 ~@8 b5 ~@5", Z: "~@10 g3 ~ a#3 ~ b3 ~",
  AA: "[[g4,c5,e5]@2 ~@2 [g4,c5,e5]@2 ~@2 [a4,c5,f5] ~ [a4,c5,f5]@2 ~@2 [g3,c4,e4]@18]/2", // C F C
})).s("gm_piano").gain(0.45).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@30 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@6 B ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x",
})).gain(0.45)

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

// drums · hihat
const hihat = s("hh").struct("<A@30 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@6 B ~>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.45)

stack(bass, piano, piano_soft, piano_2, kick, snare, hihat)