Strudelify

You Belong To The City

Glenn Frey

KeyE minorTempo120 bpm
0:00/0:00
// You Belong To The City — Glenn Frey
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// chords · piano
const piano = note(`<
  A@7 B@2 C D E F G H I J K L M N O P Q R S T U@2 V@5 W X Y Z@4 AA AB AC AD AE AF@2 AG AH AI AJ AK AL@2 AM@2 V@5 W X Y
  Z@4 AA AB AC AN AO AP AQ AR AQ AP AQ AR AO AP AQ AR AQ AP AQ AS V@5 W X Y AT ~@6
>`.pickRestart({
  A: "[~@5 g4@2 ~ [g3,b3,d4]@12 ~ g4@2 ~ d4 e4@7 ~@5 g4@2 ~ [g3,b3,d4]@12 ~ g4@2 f#4, ~@7 f#4@2 ~@14 f#4@2 ~@14 f#4@2 ~@15, ~@6 [g3,c4]@3 ~@5]/7", // G C5
  B: "[d4 e4@7 ~@6 [a3,d4] b3, [g3,c4]@3 ~]/2", C: "[g3,d4,e4] e4@2 [g3,d4,e4]@3 ~ b3",
  D: "[g3,b3,d4] e4@2 [d4,e4,g4]@4 ~", E: "[c4,g4,a4] a4!3 [c4,g4,a4] g4 ~ e4", F: "[c4,g4,a4] g4 e4 [g3,c4,e4]@3 ~ b3",
  G: "[g3,b3,d4] e4@2 [g3,d4,e4]@3 b3!2", H: "[g3,b3,d4] e4@2 [d4,g4] e4@2 ~ b3",
  I: "[c4,g4,a4] a4!2 g4 [c4,g4,a4] g4 a4 e4", J: "[c4,g4,b4]@4 [c4,g4,b4]@4 a4 g4 e4@2 ~@2 b3@2",
  K: "[g3,b3,d4] e4!2 [g3,d4,e4]@2 ~@2 b3", L: "d4 e4!2 [g3,d4,e4]@2 ~@3, [g3,b3] ~@3",
  M: "[c4,g4,a4] a4!2 g4 [c4,g4,a4]@2 a4 g4", N: "[c4,g4,a4]@2 a4@4 g4 f#4 e4@6 b3@2",
  O: "[g3,b3,d4] e4@2 [g3,d4,e4]@3 ~ b3", P: "[g3,b3,d4] e4@2 [d4,g4] e4@2 ~ e4",
  Q: "[c4,g4,a4]@2 a4@2 [c4,g4,a4]@2 a4 a4@4 ~@3 e4@2", R: "[c4,g4,a4] a4!2 [c4,g4,a4]@2 ~@3",
  S: "[e4,g4,c5] c5!2 [e4,g4,c5]@2 d5 c5!2", T: "b4 [d#4,f#4,b4]@6 ~",
  U: "[[e4,g4,c5] c5!2 ~@2 d5@2 ~ [d#4,f#4,b4]@4 ~@3 b4, ~@3 [e4,g4,c5]@3 ~ c5@2 ~@7]/2", // C B C
  V: "[[b4,d5,g5]@2 f#5 [g4,b4,d5]@2 g5 f#5 [g4,b4,d5]@2 d5 [b4,d5,g5] f#5 ~ b4@2 ~ [e5,g5]@2 f#5 [g4,c5,d5]@2 g5 f#5 [g4,c5,d5]@3 [c5,e5,g5] f#5 ~ b4@2 ~ [c5,e5,g5] g5 f#5!2 [g4,c5,e5] d5 e5 d5, ~@12 d5@2 ~ c5@3 ~@10 d5@2 ~ d5@2 ~@7]/5", // G Em Gsus4 C
  W: "[g4,c5,e5] e5 ~@3 a4 b4 c5", X: "[g4,d5,e5]@2 e5@4 e5@2 d5 b4 [d5,e5,b5]@4 a5 g5", Y: "a5 g5 e5 d5 e5@12",
  Z: "[[b4,d5,g5]@2 f#5 [g4,b4,d5]@2 g5 f#5 [g4,b4,d5]@2 d5 [b4,d5,g5] f#5 ~ b4@2 ~ [e5,g5]@2 f#5@2 [g4,c5,d5] g5 f#5 [g4,c5,d5]@3 [c5,e5,g5] f#5 d5@2 b4!2, ~@12 d5@2 ~ c5@3 ~@14]/4", // G Em Gsus4 C
  AA: "[c5,e5,g5] f#5 e5 [a4,c5,e5]@3 ~ b4", AB: "[c5,e5,g5] f#5 e5 [a4,c5,e5]@3 b4 d5",
  AC: "[g4,d5]@4 ~@2 e5@4 d5 b4 ~@4, e5@3 ~@5", AD: "[g4,d5,e5]@6 a5 g5", AE: "[d5,e5,a5] e5@2 [g4,d5,e5]@2 ~ b5 g5",
  AF: "[a5 e5!2 e5@3 ~ [c5,e5,g5,a5]@2 a5!2 g5 [c5,e5,g5,a5]@2 a5 g5]/2", // Am7
  AG: "[c5,e5,g5,a5]@2 a5@4 g5 f#5 e5@4 [c5,e5,g5,a5]@2 g5@2", AH: "[d5,e5,a5] e5@2 [g4,d5,e5]@3 a5 g5",
  AI: "[d5,e5,a5] e5@2 [g4,d5,e5]@4 ~", AJ: "[c5,e5,g5,a5] a5!3 [g4,c5,e5]@2 ~ e5",
  AK: "[c5,g5,b5]@2 a5@2 a5@2 a5@2 g5 e5 ~@4 e5@2", // Cmaj7
  AL: "[[c5,e5,g5] g5@2 [c5,e5,g5]@2 a5 g5 [b4,d#5,g5]@2 f#5 ~@5 b4]/2", // C Baug
  AM: "[[c5,e5,g5] g5!2 [c5,e5,g5]@2 a5 g5 [b4,d#5,f#5]@8 ~]/2", AN: "[g4,d5,e5]@6 [d4,g4,b4] g4",
  AO: "[d4,e4,a4] e4 ~@6", AP: "[b3,d4,g4]@6 [d4,g4,b4] g4", AQ: "[c4,g4,a4] e4 ~@6", AR: "[c4,e4,g4]@6 [c4,e4,a4] g4",
  AS: "[g4,c5,e5]@4 d5 b4@2 [g4,c5,e5]@8 ~", AT: "[b4,d5,g5] ~@3",
})).s("gm_piano").gain(0.64)

// chords · piano · soft notes
const piano_soft = note("<~@97 A@4 B C D>".pickRestart({
  A: "[~@2 f#5 [g4,b4,d5]@2 g5 f#5 [g4,b4,d5]@2 d5 [b4,d5,g5] f#5 ~ b4@2 ~ [e5,g5]@2 f#5@2 [g4,c5,d5] g5 f#5 [g4,c5,d5]@3 [c5,e5,g5] f#5 d5@2 b4!2, ~@12 d5@2 ~ c5@3 ~@14]/4", // G Em Gsus4 C
  B: "[c5,e5,g5] f#5 e5 [a4,c5,e5]@3 ~ b4", C: "[c5,e5,g5] f#5 e5 [a4,c5,e5]@3 b4 d5",
  D: "[g4,d5]@4 ~@2 e5@4 d5 b4 ~@4, e5@3 ~@5", // G5
})).s("gm_piano").gain(0.24)

// bass · choir aahs · "Bass"
const bass = note(`<
  ~ A@2 B@2 A@2 B C D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 F G F G H@2 I@2 J@2 H K H@2 I@2 J@2 H K D@2 E@2 D@2 E@2 F G F G H@2
  I@2 J@2 H K H@2 I@2 J@2 H K L@2 M F L N M F L@2 M F L N M F H@2 I@2 J@2 H K O ~@6
>`.pickRestart({
  A: "e2!2 d3 e3 ~ b2 d3 e3", B: "c2!2 g2 c3 ~ g2 a2 c3", C: "c2!2 ~ c2 c2@2 d2@2", D: "e2!2 e3 b2 d3 e3 d3 b2",
  E: "a2!2 a3 e3 g3 a3 g3 e3", F: "c2!8", G: "b1!8", H: "e2!2 f#2!2 g2!2 a2 b2", I: "c3!2 d3!2 e3!2 f#3 g3",
  J: "a2!2 b2!2 c3!2 d3 e3", K: "e2!2 b2!2 a2!2 g2 f#2", L: "e2!8", M: "a2!8", N: "g2!8", O: "e2!2 ~@6",
})).s("gm_synth_bass_1").gain(0.64)

// bass · choir aahs · "Bass" · soft notes
const bass_soft = note(`<
  ~@97
  [~@2 f#2!2 g2!2 a2 b2]
  [e2!2 f#2!2 g2!2 a2 b2]
  [c3!2 d3!2 e3!2 f#3 g3]!2
  [a2!2 b2!2 c3!2 d3 e3]!2
  [e2!2 f#2!2 g2!2 a2 b2]
>`).s("gm_synth_bass_1").gain(0.24)

// chords · string ensemble 2 · "Chords"
const string_ensemble_2 = note("<~ A@2 B@2 C@2 D@2 ~@16 D E D E C@2 D@2 F@2 C@4 D@2 F C ~@61>".pickRestart({
  A: "[e5,g5,b5,d6]/2", B: "[c5,e5,g5]/2", C: "[e4,g4,b4,d5]", D: "[c4,e4,g4]", E: "[b4,d#5,f#5]", F: "[a4,c5,e5,g5]",
})).s("gm_string_ensemble_2").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@9 [x ~@2 x!2 ~@3]!70 [x ~@2 x ~@4] [x ~@2 x!2 ~@3]!17 ~@7>").gain(0.41)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@97 [x ~@2 x!2 ~@3]!7>").gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@9 [~ x ~ x]!88 ~@7>").gain(0.41)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@97 [~ x ~ x]!7>").gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~ [~ x ~ x]!8 [x!4 ~ x!3]!88 ~@7>").gain(0.41)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@97 [x!4 ~ x!3]!7>").gain(0.15)

stack(piano, piano_soft, bass, bass_soft, string_ensemble_2, kick, kick_soft, snare, snare_soft, hihat, hihat_soft)

More by Glenn Frey