Strudelify
My Hometown cover art

1985 · Born In The U.S.A.

My Hometown

Bruce Springsteen

KeyA majorTempo120 bpm
0:00/0:00
// My Hometown — Bruce Springsteen
// 120 bpm, 4/4, key A major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 131 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 · electric bass finger
const bass = note(`<
  ~@35 A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@6 F@2 A@2 E@2 A@2 E@2 A C A@2 B C@3 D E A@4 B C@3 D E A@2 B C@3 D E@2
  A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@2 G
>`.pickRestart({
  A: "a2@3 a2 a2@3 ~", B: "d2@3 d2 a2@3 ~", C: "e2@3 e2 e2@3 ~", D: "a2@3 a2 e2@3 ~", E: "d2@3 d2 d2@3 ~",
  F: "f#2@3 f#2 f#2@3 ~", G: "a1 ~@3",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · french horn
const french_horn = note(`<
  ~ A@2 B C D@2 E F A@2 G H D@2 I F A@2 G H D@2 I F J K G H L@2 M N O@2 A@2 G H D@2 I F A@2 G H D@2 I F J K G H L@2 I P
  Q@2 R@2 S@2 T@2 U@2 V@2 W@2 X@2 Y Z AA@2 G H L@2 I P Q@2 A@2 G H D@2 I F A@2 G H D@2 I F@2 J AB G H D@2 I F J AB G H
  D@2 I F J AB G H D@2 I F Q@2 ~
>`.pickRestart({
  A: "[g#3,b3] [a3,c#4]@2 [a3,c#4]@5, e2", B: "[d3,f#3,a3,d4] [c#3,e3,a3,c#4]", C: "[e3,g#3,b3], b2 ~",
  D: "[f#3,a3] [g#3,b3]@2 [g#3,b3]@5, e2", E: "[a2,e3,a3,c#4] [g#2,b2,e3]", F: "[a2,d3,f#3]",
  G: "[f#3,a3,d4] [e3,a3,c#4]", H: "[e3,g#3,b3]", I: "[e3,a3,c#4] [g#2,b2,e3]", J: "[b2,d3] [c#3,e3]@2 [c#3,e3]@5, a2",
  K: "[g#3,b3] [a3,c#4]@2 [a3,c#4]@5, e3", L: "[f#3,a3] [g#3,b3]@2 [g#3,b3]@5, e3", M: "[e3,a3,c#4] [e3,g#3,b3]",
  N: "[f#3,a3,d4]", O: "[[g#3,b3] [a3,c#4]@2 [a3,c#4]@13, e2]/2", P: "[f#2,d3,f#3]",
  Q: "[[d3,f#3] [c#3,e3]@2 [c#3,e3]@13, e2]/2", R: "[a3@6 g#3 a3, [c#3,f#3]]/2", S: "[a2,c#3,e3]/2",
  T: "[c#3,f#3,a3]/2", U: "[a2,c#3,e3]", V: "[f#2@6 e2 d2, [a2,d3]]/2", W: "[e2,a2,c#3]/2",
  X: "[[f#2,a2,d3]@6 a2 f#2]/2", Y: "[e2,a2,c#3]", Z: "[e2,g#2,b2]", AA: "[g#3,b3] [a3,c#4]@2 [a3,c#4]@5",
  AB: "b3 c#4 c#4@2 c#4@2 c#4@2, [e3,a3]", // A5
})).s("gm_french_horn").gain(0.4).pan(0.4)

// chords · percussive organ
const percussive_organ = note("<~@63 A B ~@2 A C D@2 E@2 F@2 G H ~@54>".pickRestart({
  A: "~@6 a3 b3", B: "c#4!4", C: "c#4@2 c#4@2 c#4 a3@3", D: "[f#3@6 e3 d3, [a3,d4]]/2", E: "[e3,a3,c#4]/2",
  F: "[[f#3,a3,d4]@6 a3 f#3]/2", G: "[e3,a3,c#4]", H: "[e3,g#3,b3]",
})).s("gm_percussive_organ").gain(0.4).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@35 A@2 B C D@2 E F G@2 H D@3 E F G@2 H D@3 I F J@2 K@2 L@2 K@2 L@2 M@2 L@2 M@2 L N G@2 H D@3 I F J@2 A@2 B C D@2 E F
  G@2 H D@3 E F@2 O G H D@2 P Q R O G H D@2 P Q R O G H D@2 P Q R ~@3
>`.pickRestart({
  A: "[a2,e3,a3,c#4,e4]@2 ~ [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2", // A
  B: "[d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2", // D A
  C: "[e2,b2,e3,g#3,b3,e4]@2 ~ [e2,b2,e3,g#3,b3,e4] ~ [e2,b2,e3,g#3,b3,e4]!3", // E
  D: "[e2,b2,e3,g#3,b3,e4]@2 ~ [e2,b2,e3,g#3,b3,e4]!5", // E
  E: "[a2,e3,a3,c#4,e4]@2 ~ [a2,e3,a3,c#4,e4] [e2,b2,e3,g#3,b3,e4]!4", F: "[a2,d3,a3,d4,f#4]@2 ~ [a2,d3,a3,d4,f#4]!5",
  G: "[a2,e3,a3,c#4,e4]@2 ~ [a2,e3,a3,c#4,e4]!5", H: "[a2,d3,a3,d4,f#4]@2 ~ [a2,d3,a3,d4,f#4] [a2,e3,a3,c#4,e4]!4",
  I: "[a2,e3,a3,c#4,e4]!2 ~ [a2,e3,a3,c#4,e4] [e2,b2,e3,g#3,b3,e4]!4", J: "[a2,e3,a3,c#4,e4]!2 ~ [a2,e3,a3,c#4,e4]!5",
  K: "[f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]!4 [f#2,c#3,f#3,a3,c#4,f#4]@2", // F#m
  L: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!4 [a2,e3,a3,c#4,e4]@2", // A
  M: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!4 [a2,d3,a3,d4,f#4]@2", // D
  N: "[e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]!4 [e2,b2,e3,g#3,b3,e4]@2", // E
  O: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,a3,c#4,e4] [a2,e3,a3,c#4,e4]!2 [a2,e3,a3,c#4,e4]@2", // A
  P: "[e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]@2 ~@2 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]@2 ~@2 [e2,b2,e3,g#3,b3,e4]!2", // E
  Q: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2 ~@2 [a2,e3,a3,c#4,e4]@2 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]@2 ~@2 [e2,b2,e3,g#3,b3,e4]!2", // A E
  R: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 ~@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 ~@2 [a2,d3,a3,d4,f#4]!2", // D
})).s("gm_acoustic_guitar_steel").gain(0.11).pan(0.9)

// chords · pan flute
const pan_flute = note(`<
  ~@35 A@2 B C D@2 E F A@2 B C D@2 E F G H B C I@2 E J K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 S T U@2 B C I@2 E J K@2 A@2 B C
  D@2 E F A@2 B C D@2 E F@2 G V B C D@2 E F G V B C D@2 E F G V B C D@2 E F K@2 ~
>`.pickRestart({
  A: "[g#4,b4] [a4,c#5]@2 [a4,c#5]@5, e3", B: "[f#4,a4,d5] [e4,a4,c#5]", C: "[e4,g#4,b4]",
  D: "[f#4,a4] [g#4,b4]@2 [g#4,b4]@5, e3", E: "[e4,a4,c#5] [g#3,b3,e4]", F: "[a3,d4,f#4]",
  G: "[b3,d4] [c#4,e4]@2 [c#4,e4]@5, a3", H: "[g#4,b4] [a4,c#5]@2 [a4,c#5]@5, e4",
  I: "[f#4,a4] [g#4,b4]@2 [g#4,b4]@5, e4", J: "[f#3,d4,f#4]", K: "[[d4,f#4] [c#4,e4]@2 [c#4,e4]@13, e3]/2",
  L: "[a4@6 g#4 a4, [c#4,f#4]]/2", M: "[a3,c#4,e4,c#5]/2", N: "[c#4,f#4,a4,c#5]/2",
  O: "[[a3,c#4,e4] [a3,c#4,e4], a4]/2", P: "[f#3@6 e4 d4, [a3,f#4], d4@7 ~]/2", Q: "[e3,a3,c#4]/2",
  R: "[[f#3,a3,d4,a4]@6 a4 f#4]/2", S: "[e3,a3,c#4,e4]", T: "[e3,g#3,b3,e4]", U: "[g#4,b4] [a4,c#5]@2 [a4,c#5]@5",
  V: "b4 c#5 c#5@2 c#5@2 c#5@2, [e4,a4]", // A5
})).s("gm_pan_flute").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!129 x>").gain(0.59).pan(0.2)

// drums · rim
const rim = s("rim").struct("<~@61 [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!53 ~>").gain(0.52).pan(0.2)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4] [x!8]!75 [x!7 ~] [x!8]!53 ~>").gain(0.46).pan(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@3 x]!129 ~>").gain(0.66).pan(0.2)

stack(bass, french_horn, percussive_organ, acoustic_guitar_steel, pan_flute, kick, rim, pedal_hat, tambourine)

More by Bruce Springsteen