Strudelify

Glory Days

Bruce Springsteen

KeyA majorTempo122 bpm
0:00/0:00
// Glory Days — Bruce Springsteen
// 122 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 piano (copy of ch 3 pad poly)
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(122/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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(`<
  ~@3 A B C B C B C B C B C B C D E F G H I J K B C B C L M B C B C B C B C B C D E F G H I J K B C B C L M B C N O P Q
  ~@12 R@2 S T B C B C B U B C B C B U B C B V B V W X B C B V B V W X B C B V B V W X B C B V B V W X Y
>`.pickRestart({
  A: "~@12 e2 [d2,d#2] [c2,c#2] [a#1,b1]", B: "a1 a2 ~ a1 f#2@2 e2@2, ~@8 e2 ~@7",
  C: "d2@2 d3@2 ~@3 a2 b2@4 a2@4, ~@3 d2 ~@4",
  D: "e2@2 e2@2 ~@2 e2@2 b1@2 c#2@2 d#2 [b1,c2,c#2,d2] [g1,g#1,a1,a#1] [f1,f#1], ~@6 e2 ~", E: "e1 e2 ~ e2 b1 c#2 e2 ~",
  F: "d2!2 ~ d2 a1 b1 d2 ~", G: "d2!2 ~ d2 a1 b1 d2 b1", H: "e2!2 ~ e2 b1 c#2 e2 ~", I: "e1 e2 ~ e2 b1 c#2 e2 c#2",
  J: "d2!2 c#2@2 b1@2 c#2 d2", K: "e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2 [d2,d#2] [c2,c#2] [a#1,b1]",
  L: "a1 a2 ~ a1 f#2 e2 c#2 b1, ~@8 e2 ~@7", M: "e2!2 ~ b1 e1 f#1 g1 g#1", N: "e2@2 e3@2 ~@3 b2 c#3@4 e3@4, ~@3 e3 ~@4",
  O: "e2@2 e3@2 ~@3 b2 c#3@2 e3@2 c#3@2 e2@2, ~@3 e3 ~@4", P: "d2 d3 b2 d2 a1!2 b1 d2",
  Q: "e2@2 e2@2 e2@2 ~@6 e2 [d2,d#2] [c2,c#2] [a#1,b1]", R: "e2!8, d2 ~@15", S: "d2!8",
  T: "e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 [a#2,b2] [f#2,g2,g#2,a2] [d#2,e2,f2] [c#2,d2]", U: "e1 e2 ~ b1 c#2 e2 c#2 e1",
  V: "d2@2 d3@2 ~@3 a2 b2@2 d3@2 b2@2 a2@2, ~@3 d2 ~@4", W: "a1 a2 ~ a1 f#2@2 e2 a1, ~@8 e2 ~@7",
  X: "d2 d3 f#1!2 g1!2 g#1!2", Y: "a1 ~@3",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · pad poly
const pad_poly = note(`<
  ~@4 A B A B ~@16 A B A B A C A B ~@16 A B A B A C A B D@2 E F ~@16 A B A B A C A B A B A C A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B G
>`.pickRestart({
  A: "~ [a4,c#5,e5]@2 [a4,c#5,e5] [a4,d5,f#5]@2 [a4,c#5,e5] ~", // A D A
  B: "~ [a4,d5,f#5]@2 [a4,d5,f#5] [b4,d5,g5]@2 [a4,d5,f#5]@2", // D G D
  C: "~ [g#4,b4,e5]@2 [g#4,b4,e5] [g#4,b4,e5]@2 [g#4,b4,e5] ~", // E
  D: "~ [b4,e5,g#5]@2 [b4,e5,g#5] [a4,b4,e5,a5]@2 [b4,e5,g#5] ~", // E Asus2 E
  E: "~ [a4,d5,f#5]@2 [a4,d5,f#5] [b4,d5,g5]@2 [a4,d5,f#5] ~", F: "[g#4,b4,e5]!3 ~@5", G: "[a4,c#5,e5,a5] ~@7",
})).s("gm_pad_poly").gain(0.45)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D E F E F E F E F E F E G H@2 I J K L I M E F E F E N E F E F E F E F E G H@2 I J K L I M E F E F E N E F O L P
  Q R S R S R S R S M@2 S@2 M@2 S M E F E F E T E F E F U V W X W X W X W X W X W X W X W X W X W X W X W X W X W X W X
  W X ~
>`.pickRestart({
  A: "~ [a2,e3]@2 [a2,e3] [a2,f#3]@2 [a2,e3] [e3,f#3]", B: "a3 [d3,a3]@2 [d3,a3] [d3,b3]@2 [d3,a3] c3",
  C: "c#3@2 [a2,e3]@2 ~@2 [a2,e3]@2 [a2,f#3]@4 [a2,e3]@2 f3 f#3", // A5 D A5
  D: "[d3,a3]@2 [d3,a3]@2 ~@2 [d3,a3]@2 [d3,b3]@4 [d3,a3]@2 c3 c#3", E: "~ [a2,e3] ~ [a2,e3] [a2,f#3]@2 [a2,e3] ~",
  F: "~ [d3,a3] ~ [d3,a3] [d3,b3]@2 [d3,a3] ~", G: "~ [d3,a3] ~ [d3,a3] [d3,b3]!2 [d3,a3]!2",
  H: "e3!2 ~ e3 b2 c#3 e3 ~", I: "[d3,a3]!2 ~ [d3,a3]!4 ~", J: "[d3,a3]!2 ~ [d3,a3]!5", K: "e3!2 ~ e3!4 ~",
  L: "e3!2 ~ e3 [e3,b3]!4", M: "[e3,b3]!8", N: "[e2,b2]!2 ~ [e2,b2] [e2,b2]@2 [e2,b2] ~", O: "~ e3 ~ e3 e3@2 e3 ~",
  P: "[d3,a3]!2 ~ [d3,a3] [d3,b3]@2 [d3,a3] ~", Q: "[e3,b3,e4,g#4,b4]!3 ~@5", R: "[a2,e3]!8", S: "[d3,a3]!8",
  T: "~ [e2,b2]@2 [e2,b2] [e2,b2]@2 [e2,b2] ~", U: "~ [a2,e3] ~ [a2,e3] [a2,f#3]!2 [a2,e3]!2",
  V: "~ [e2,b2] ~ [e2,b2] [e2,c#3]!2 [e2,b2]!2", W: "[a2,e3]!2 ~ [a2,e3] [a2,f#3]!2 [a2,e3]!2",
  X: "[d3,a3]!2 ~ [d3,a3] [d3,b3]!2 [d3,a3]!2", // D5 G D5
})).s("gm_electric_guitar_clean").gain(0.6).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@8 A B A B A B A B C@2 D@2 C@2 D C A B A B A C A B A B A B A B A B C@2 D@2 C@2 D C A B A B A C A B C@2 E F ~@16 A B A
  B A C A B A B A C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B G
>`.pickRestart({
  A: "[a4,c#5,e5]!4 [a4,d5,f#5]!2 [a4,c#5,e5]!2", B: "[a4,d5,f#5]!4 [b4,d5,g5]!2 [a4,d5,f#5]!2", C: "[g#4,b4,e5]!8",
  D: "[a4,d5,f#5]!8", E: "~ [a4,d5,f#5]!7", F: "[g#4,b4,e5]!3 ~@5", G: "[a4,c#5,e5,a5] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A ~ B@19 C B@5 D B E B@15 C B@5 D B E B@3 F G@8 B@7 H B@11 D B@7 I B@7 J B@7 I B@7 I A
>`.pickRestart({
  A: "x", B: "x!2 ~ x!2 ~@3", C: "x!2 ~@2 x ~@3", D: "x!2 ~ x!5", E: "x!2 ~ x!2 ~ x ~", F: "x!3 ~@3 x ~",
  G: "x ~@2 x!2 ~@3", H: "x!2", I: "x!8", J: "~ x ~ x!5",
})).gain(0.53)

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~@5 A ~@18 A@5 ~ A@2 ~ A ~@2 A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.53)

// drums · crash
const crash = s("cr").struct("<~@4 x ~@54 [~@3 x] ~@60 x>").gain(0.53)

stack(bass, pad_poly, electric_guitar_clean, acoustic_guitar_steel, kick, snare, hihat, open_hat, crash)

More by Bruce Springsteen