Strudelify
Hot Child In The City cover art

1978 · Hot Child In The City

Hot Child In The City

Nick Gilder

KeyE majorTempo120 bpm
0:00/0:00
// Hot Child In The City — Nick Gilder
// 120 bpm, 4/4, key E major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "piano2" named as a piano, played on piano (its rock organ patch is not one)
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · slap bass 1 · "base2"
const bass = note(`<
  A B C B C B C B C B C B D E@14 F@2 B C B C B C B D E@14 G@8 H@6 I J K L I J M N O@8 P@4 ~ Q
>`.pickRestart({
  A: "~@6 e1@5 ~ e1 ~@3", B: "~@2 e1@2 ~@2 a1@5 ~ a1 ~@3", C: "b1@2 b1@3 ~ e1@2 e1@4 e1 ~@3",
  D: "b1@2 b1@3 ~ e1@2 e1@5 ~ g#1@2", E: "[~@2 b1@3 ~ g#1@2 a1@5 ~ g#1@5 ~ f#1@3 ~ e1@5 ~ g#1@2]/2",
  F: "[~@2 b1@3 ~ g#1@2 a1@5 ~ g#1@5 ~ f#1@3 ~ e1@4 e1 ~@3]/2",
  G: "[~@2 b1@3 ~ g#1@2 a1@5 ~ g#1@5 ~ f#1 ~@3 e1@2 e1@2 e1@2 e1@9 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@2 e1@2 e1@9 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@2 e1@2 e1@9 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@5 ~ g#1@2]/8",
  H: "[~@2 b1@3 ~ g#1@2 a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ b1@2 b1@3 ~ b1@2]/6",
  I: "~@2 b1@2 d#2@2 e2@2 f#2@2 f#2@3 ~ f#2@2", J: "~@2 f#2@2 f#2@2 g#2@2 a2@2 a2@3 ~ a2@2",
  K: "~@2 a2@2 c#2@2 d#2@2 e2@2 e2@3 ~ e2@2", L: "e2@2 e2@2 g#1@2 a1@2 b1@2 b1@3 ~ b1@2",
  M: "~@2 a2@5 ~ [b1,b2]@2 [b1,b2]@2 [b1,b2]@2 [b1,b2]@2", N: "[b1,b2]@2 [b1,b2]@2 [b1,b2]@2 [b1,b2]@2 [b1,b2] ~@7",
  O: "[~@8 e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@2]/8",
  P: "[~@4 f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1@5 ~ g#1@5 ~ f#1@3 ~ e1@2 e1@3 ~ e1@5 ~ b1@3 ~ a1 ~@7]/4", Q: "e1 ~@7",
})).s("gm_slap_bass_1").gain(0.72)

// chords · piano · "piano2"
const piano = note(`<
  ~@2 A B@2 C@2 D@2 C@2 E@2 F G H@2 F G I@2 J K J K J L M@2 C@2 N@2 O@4 P Q R@2 S G T@2 J K J K J L U@8 V W@3 X Y Z AA
  AB AC Z AD@2 AE AF AG AH AI K AJ K AK AL AK AM AN AO ~
>`.pickRestart({
  A: "~@3 b4 ~ b4@3, ~@4 e5@3 ~", B: "[e5@21 ~ b5@2 [b3,g#4,e6]@7 ~]/2",
  C: "[[g#3,e4]@5 ~ [c#4,a4]@7 ~ [d#4,b4]@9 ~ [b3,e4,g#4]@2 b4@2 e5@2 b4@2]/2", // C#m F#m G#m E
  D: "[e5@2 b4@2 e5@2 b4@2 e5@11 ~ b5@3 ~ [b3,g#4,e6]@7 ~]/2", // E
  E: "[e5@2 b4@2 e5@2 b4@2 e5@11 ~ b4@3 ~ [b4,e5,g#5]@2 [b4,e5,g#5]@4 [b4,e5,f#5]@2]/2", // E Bsus4
  F: "g#5@2 [b4,e5,f#5]@2 [b4,e5,f#5]@2 [b4,e5,f#5]@2 [a4,c#5,e5]@5 ~ [a4,c#5]@2", // Bsus4 A
  G: "[a4,c#5,e5]@2 [a4,c#5,e5]@4 [a4,c#5,e5]@2 [e4,g#4,b4]@2 [e4,g#4,b4]@5 ~", // A E
  H: "[[g#3,b3,e4] f#4 [g#3,b3,f#4] g#4 [a3,c#4]@5 a4 [a3,c#4] b3 [b4,e5,g#5] [b4,e5,g#5]@2 [b4,e5,f#5]]/2", // E G#m7 A E Bsus4
  I: "[[g#3,b3,e4]@2 f#4@2 [g#3,b3,f#4]@2 g#4@2 [a3,c#4]@15 ~@5 [b4,e5,g#5]@2 [b4,e5,g#5]@2]/2", // E G#m7 A E
  J: "[b4,e5,g#5]@2 [b4,e5,g#5]@2 [b4,e5,g#5]@2 [b4,e5,g#5]@2 [c#5,e5,a5]@3 ~ [a4,c#5,e5]@3 ~", // E A
  K: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 [a4,c#5,f#5]@2 ~@4 [b4,e5,g#5]@2 [b4,e5,g#5]@2", // A F#m E
  L: "[a4,c#5,e5]@3 ~ [e4,a4]@2 [e4,a4]@2 ~@4 [g#3,b3,e4]@2 [g#3,b3,e4]@2", // A A5 E
  M: "[[g#3,b3,e4]@2 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [a3,c#4,e4]@15 ~ [b3,g#4]@7 ~]/2", // E A E
  N: "[~@2 b4 ~ b4 ~ b4@2 e5@11 ~@3 b5@2 [b3,g#4,e6]@7 ~, e5@3 ~@7 b4@2 ~@4]/2", // E
  O: "[[g#3,e4]@5 ~ [c#4,a4]@7 ~ [d#4,b4]@7 ~ [b3,e4,g#4]@4 ~@2 e5@6 b4@2 e5@2 b4 ~ e5@11 ~ b4@3 ~ [b4,e5,g#5]@2 [b4,e5,g#5]@4 ~@2, ~@13 b4@3 ~@16]/4", // C#m F#m G#m E
  P: "g#5@2 ~@4 [b4,e5,f#5]@2 [a4,c#5,e5]@5 ~@3", Q: "~@6 [a4,c#5,e5]@2 [e4,g#4,b4]@2 [e4,g#4,b4]@5 ~",
  R: "[[g#3,b3,e4] f#4 [g#3,b3,f#4] g#4 [a3,c#4]@5 a4 [a3,c#4] b3 [b4,e5,g#5] e5 [b4,e5,g#5] [b4,e5,f#5]]/2", // E G#m7 A E Bsus4
  S: "g#5@2 [b4,e5,f#5]@2 [b4,e5,f#5]@2 [b4,e5,f#5]@2 ~@2 [a4,c#5,e5]@3 ~ [a4,c#5]@2", // Bsus4 A
  T: "[~@4 [g#3,b3,f#4]@2 g#4@2 [a3,c#4]@15 ~@5 [b4,e5,g#5]@2 [b4,e5,g#5]@2]/2", // G#m7 A E
  U: "[[g#3,b3,e4]@2 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [a3,c#4,e4]@15 ~ [g#3,b3,e4]@15 ~ [c#4,e4,a4]@5 ~ [b3,e4,g#4]@5 ~ [a3,c#4,f#4]@3 ~ [g#3,b3,e4]@15 ~ [c#4,e4,a4]@5 ~ [b3,e4,g#4]@5 ~ [a3,c#4,f#4]@3 ~ [g#3,b3,e4]@15 ~ [c#4,e4,a4]@5 ~ [b3,e4,g#4]@5 ~ [a3,c#4,f#4]@3 ~ [g#3,b3,e4]@8]/8", // E A E A E F#m E A …
  V: "~@4 [f#3,a3,d4]@3 ~ c#4@2 e4@2 f#4 ~ g#4@2", // D
  W: "[a4@2 b4@2 a5@2 g#5@2 e5@2 b4@2 a4@2 g#4@9 ~ a4 ~ g#4@2 e4@2 [g#3,b3]@5 ~ b3 c#4 e4@2 f#4@2 g#4@2 a4@2 b4@2]/3", // G#m
  X: "a4@2 g#4@2 e4@2 b3 c#4 e4@5 ~ e4 f#4", Y: "[e4,g#4] ~ a4@2 [e4,b4] ~ e4@2 [d#4,f#4,b4]@5 ~ f#4@2",
  Z: "[d#4,f#4,b4]@2 ~@4 f#5@2 [c#5,f#5,a5]@5 ~ c#5@2", AA: "[a4,c#5,f#5]@5 ~ c#5@2 [a4,c#5,e5]@5 ~@3",
  AB: "[a4,c#5,e5]@7 ~@7 e4!2", AC: "[g#4,b4,e5]@2 c#5@2 [e4,g#4,b4]@3 ~ [d#4,f#4,b4]@5 ~ f#4@2",
  AD: "[[a4,c#5,f#5]@5 ~ c#5@2 [a4,c#5,e5]@15 ~@9]/2", AE: "~@12 e5 ~@3",
  AF: "e5 b4!2 f#5 [g#4,b4,f#5] [g#4,b4,e5] b4 e5", // G#m7 E
  AG: "g#5@2 [b4,e5]@2 [b4,g#5] ~ [b4,g#5]@2 [c#5,e5,a5]@3 ~ [a4,c#5,e5]@3 ~", // E5 E A
  AH: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 [a4,c#5,f#5] ~@5 [b4,e5,g#5]@2 [b4,e5,g#5]@2", // A F#m E
  AI: "[b4,e5,g#5]@2 [b4,e5,g#5]@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2 [c#5,e5,a5]@4 [a4,c#5,e5]@3 ~", // E A
  AJ: "[b4,e5,g#5]@2 [b4,e5,g#5]@2 [b4,e5,g#5] ~ [b4,e5,g#5]@2 c#5@2 e5 ~ [a4,c#5,e5]!2 ~ [a4,c#5,e5]", // E A
  AK: "[b4,e5,g#5]@2 [b4,e5,g#5]!2 ~ [e5,g#5] [b4,e5,g#5]@2 [a4,c#5,e5]@3 ~ [a4,c#5,e5]!2 [a4,c#5,e5]@2", // E A
  AL: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 [a4,c#5,f#5]@2 ~@4 [b4,e5,g#5]@2 [e5,g#5]@2", // A F#m E
  AM: "a4@2 e5@2 c#5 [a4,c#5,e5] [a4,c#5,f#5]@2 ~@4 [b4,e5,g#5]@2 [b4,e5,g#5]@2", // A F#m E
  AN: "[b4,e5,g#5]@2 [b4,e5,g#5]@2 [b4,e5,g#5]!2 [b4,e5,g#5]@2 ~@4 e5 ~@3", AO: "e5@3 ~ e5@2 f#5@2 f#5@2 e5@2 ~@4",
})).s("gm_piano").gain(0.72)

// chords · piano · "piano23"
const piano_2 = note(`<
  ~@20 A@7 B@4 ~ C D@2 ~ E F G H@2 F I J A@7 K@3 L@4 ~ M N@3 O P Q R S T Q U V W X Y Z Y AA Y AA Y AB Y AC AD AE AF
>`.pickRestart({
  A: "[~@8 e2@5 ~ g#2@4 b2@4 g#2@2 a2@5 ~ g#2@5 ~ f#2@3 ~ e2@5 ~ g#2@4 b2@4 g#2@2 a2@5 ~ g#2@5 ~ f#2@3 ~ e2@5 ~ g#2@4 b2@4 g#2@2 a2@5 ~ g#2@5 ~ f#2@3 ~ e2@5 ~ g#2@2]/7",
  B: "[~@2 b2@4 g#2@2 a2@5 ~ g#2@5 ~ f#2@3 ~ [b3,g#4]@15 ~@7 [d#4,b4]@7 ~@11]/4", C: "~@8 g#4@3 ~ f#4@2 e4@2",
  D: "[~@6 [c#4,a4]@7 ~ [d#4,b4]@7 ~@11]/2", E: "~@2 b4@2 [b4,e5,g#5] [b4,e5,g#5]@2 [b4,e5,f#5]",
  F: "g#5 [b4,e5,f#5]!3 [a4,c#5,e5]@3 [a4,c#5]", G: "[a4,c#5,e5] [a4,c#5,e5]@2 [a4,c#5,e5] [e4,g#4,b4] [e4,g#4,b4]@3",
  H: "[[g#3,b3,e4] f#4 [g#3,b3,f#4] g#4 [a3,c#4]@5 a4 [a3,c#4] b3 [b4,e5,g#5] [b4,e5,g#5]@2 [b4,e5,f#5]]/2", // E G#m7 A E Bsus4
  I: "~@4 [e4,g#4,b4] [e4,g#4,b4]@3", J: "[g#3,b3,e4] f#4 [g#3,b3,f#4] g#4 ~@4",
  K: "[~@2 b2@4 g#2@2 a2@5 ~ g#2@5 ~ f#2@3 ~@7 [g#4,b4,e5]@9 ~@9]/3", L: "[~@14 [g#4,b4,e5]@9 ~@9]/2",
  M: "~@8 [a3,c#4]@3 ~ [a3,c#4]@3 ~", // A
  N: "[[c#4,e4]@3 ~ [c#5,e5]@2 [b4,e5]@2 [g#4,b4]@3 ~@3 [b3,e4]@9 ~ [c#4,e4]@15 ~ [b3,e4]@3 ~ [b3,e4]@3 ~]/3", // C#m E5 G#m E5 C#m E5
  O: "[b3,e4]@3 ~ [b3,e4]@3 ~ [a3,c#4]@5 ~ [a3,c#4]@2", P: "[c#4,e4]@7 ~ [b4,d#5,f#5]@2 [b4,d#5,f#5]@5 ~",
  Q: "[d#4,f#4,b4]@5 ~ [c#5,f#5,a5]@4 [c#5,f#5,b5]@5 ~", R: "[a4,c#5,g#5]@2 [a4,c#5,f#5]@5 ~ [a4,c#5,e5]@7 ~",
  S: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@3 ~ [e4,a4,c#5]@2 [e4,g#4,b4]@5 ~", // A E
  T: "[g#4,b4]@3 ~ [e4,g#4]@3 ~ [b4,d#5,f#5]@2 [b4,d#5,f#5]@5 ~", U: "[a4,c#5,g#5]@2 [a4,c#5,f#5]@5 ~@9",
  V: "[a4,c#5,e5]@7 ~ [f#4,a4,b4]@2 [f#4,a4,b4]@2 [f#4,a4,b4]@2 [f#4,a4,b4]@2", W: "[f#4,a4,b4]!4 [f#4,a4,b4]@2 ~@2",
  X: "~@4 [b4,e5,g#5] ~@2 [b4,e5,g#5]", Y: "~@4 [a4,c#5,e5] ~@2 [a4,c#5,e5]", Z: "~@3 e5 [b4,e5,g#5] ~@2 [b4,e5,g#5]",
  AA: "~@6 e5@2 [b4,e5,g#5]@3 ~@3 [b4,e5,g#5]@2", AB: "~@6 e5@2 [b4,e5,g#5]@3 e5@2 [b4,e5,g#5]@3",
  AC: "~@5 [a4,c#5,e5] ~ [a4,c#5,e5]", AD: "~@8 [c#5,e5,a5]@3 ~@5", AE: "e5@2 e5 f#5!2 e5 ~@2",
  AF: "[e4,g#4,b4,e5] ~@15", // E
})).s("gm_piano").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A B@11 C B@23 D B@7 E B@6 F G B G B H B I B I B I B J B@6 K L J B@10 M ~ N
>`.pickRestart({
  A: "~ x ~ x ~@2 x ~", B: "~ x ~ x", C: "~@4 x ~ x!2 ~@4 x ~@3", D: "~@2 x!2 ~@2 x ~", E: "x ~ x!2 ~@2 x ~",
  F: "~ x ~@2", G: "~@2 x ~ x!3 ~", H: "~ x!4 ~@2 x", I: "~ x!2 ~ x ~@2 x", J: "~@3 x", K: "~@2 x ~ x!4", L: "x!5 ~@3",
  M: "~ x!2 ~", N: "x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C B D B D E D B D B F G H G H G H G I G H G H G H B J E C E C E C E F H@14 K L M N M O M O M O M O P H@7 Q R S B D
  B D B D B D B D T ~@2
>`.pickRestart({
  A: "~ x!3", B: "x!2 ~ x!2 ~ x ~", C: "x!4", D: "x ~ x!3 ~ x ~", E: "x!2 ~@2 x ~ x ~", F: "x ~ x!6", G: "x!2 ~ x!5",
  H: "x!8", I: "x!5 ~ x!2", J: "x ~ x!2", K: "x!5 ~@2 x", L: "~ x!2 ~@5", M: "~ x!4 ~ x ~", N: "x!2 ~@6",
  O: "x!2 ~@4 x ~", P: "~ x!7", Q: "x!4 ~@4", R: "~ x!3 ~@4", S: "~@2 x!2", T: "x!2 ~ x ~@4",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@3 x ~@4] ~@27 [~ x ~@2] ~@25 [~@5 x ~@2] ~@32>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<[~ x ~@6] ~@27 [~ x ~@6] ~@25 [~ x] ~@32>").gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct("<~@56 A ~ A ~ A ~ A ~ B ~@22>".pickRestart({
  A: "~@7 x", B: "~ x",
})).gain(0.72)

// drums · splash
const splash = s("cr").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ C A D A@10 ~ A
  ~ A ~ A@4 ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~ x", B: "~@3 x", C: "~@2 x ~ x ~@2 x", D: "~@4 x ~@2 x",
})).gain(0.72)

stack(bass, piano, piano_2, snare, hihat, mid_tom, high_tom, tambourine, splash)