Strudelify
Streets of Philadelphia cover art

Philadelphia

Streets of Philadelphia

Bruce Springsteen

KeyF majorTempo96 bpm
0:00/0:00
// Streets of Philadelphia — Bruce Springsteen
// 96 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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(`<
  ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D E F C D E F A@2 B@2 A@2 B@2 C G H I J G H K L M N O D P E@3 A@2 B@2 A@2 B@2 C
  D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F@2
>`.pickRestart({
  A: "[f1@31 ~]/2", B: "[a1@31 ~]/2", C: "bb1", D: "a1", E: "c2@15 ~", F: "c2", G: "a1@7 g1", H: "c2@7 g1",
  I: "c2@7 a1", J: "bb1@3 f1", K: "c2@7 f1", L: "bb1@13 ~ c2@2", M: "d2@13 ~ c2@2", N: "bb1@7 bb1",
  O: "f1@11 ~ f1@2 g1@2", P: "bb1@13 ~ bb1@2",
})).s("gm_fretless_bass").gain(0.42)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D E@2 C D E@2 A@2 B@2 A@2 B@2 C D E@2 C D E@2 F@2 G@2 H I J@3 A@2 B@2 A@2 B@2 C
  D E@2 C D E@2 C D E@2 C D E@2 C D E@2 C D E@2 C D E@2 C D K@3
>`.pickRestart({
  A: "[f2,f3,a3,c4]/2", B: "[a2,e3,a3,c4]/2", C: "[bb2,f3,bb3,c4]", D: "[a2,f3,a3,c4]", E: "[f3 e3, [c2,g3,c4]]/2",
  F: "[[bb2,f3,bb3] [d3,f3,a3], d4]/2", G: "[[bb2,bb3,d4] [f2,a3,c4], f3]/2", H: "[a2,e3,a3,c4]", I: "[bb2,f3,bb3,d4]",
  J: "[f3 e3@2, [c3,g3,c4]]/3", K: "[f3 e3@2, [c2,g3,c4]]/3",
})).s("gm_pad_warm").gain(0.24)

// bass · fretless bass · "MELODY"
const bass_2 = note(`<
  ~@15 A B C D E F G H I@2 ~@3 J K L M N O P Q R S T@3 ~@3 U V W X Y Z AA@2 AB AC AD AE A B C D E F G H I@2 ~@32
>`.pickRestart({
  A: "~@14 c3!2", B: "a3@3 g3@2 g3@2 f3 f3@2 d3 c3@3 ~@2", C: "~@2 a3@2 g3 ~ g3 f3 f3@3 ~@3 c3!2",
  D: "a3@2 g3 ~@3 f3 ~ f3@3 ~ c3@2 a3@2, ~@5 g3@2 ~@9", E: "~@2 g3 f3@2 ~@9 c3!2",
  F: "a3@2 g3 ~@2 f3 ~ f3@3 ~@4 c3 ~, ~@2 g3 ~@5", G: "a3@2 g3@2 ~@2 f3 ~ f3@2 d3 c3@2 ~ c3@2, ~@5 g3@2 ~@9",
  H: "a3@2 g3 ~ g3@2 f3 ~ f3@3 d3@3 a3@2", I: "[~@2 g3 f3@3 ~@2 f3 ~ f3@2 g3@2 g3@4 f3@8 ~@6]/2",
  J: "~@2 f3@2 ~ f3@2 ~ f3@5 ~@3", K: "~@2 f3@2 ~ f3@2 f3@5 ~@4", L: "~@2 g3@2 ~ g3@2 ~ g3@3 g3@2 ~ g3 ~",
  M: "~@2 g3@2 ~ g3@2 g3 ~@6 c3 ~", N: "c3 a3 ~ a3 g3@2 f3@3 c3 ~ c3@2 ~@3", O: "~@2 a3@2 a3@2 g3@2 f3@2 c3@3 ~ c3 ~",
  P: "~@3 a3 ~ a3 ~@2 f3@2 ~ a3 ~@2 a3@2, ~@7 g3@2 ~@7", Q: "~ f3@4 ~@5 c3@3 ~@3, g3 ~@7",
  R: "~@2 a3 ~ a3@2 g3 f3@2 c3@3 ~ c3 ~@2", S: "~@2 c3!2 ~ a3 ~@2 g3@2 f3@3 ~ c3@2, ~@7 a3@2 ~@7",
  T: "[a3 ~ a3@2 g3@2 f3@3 a3@3 g3@2 f3@7 ~@3 f3 ~ f3@2 g3@2 g3@4 f3@13 ~]/3",
  U: "~@2 f3@2 ~ f3@2 ~ f3 ~ f3@2 f3 ~ f3 ~", V: "~@2 f3@2 ~ f3@3 f3 ~ f3 ~ f3 ~ f3 ~",
  W: "~@2 g3@2 ~ g3@2 ~ [f3,g3] ~ g3 ~ g3 ~ g3 ~", X: "~@2 g3@3 g3@2 ~ g3 ~@7", Y: "~@6 d4!2 d4@2 c4 ~ c4@2 a3@2",
  Z: "c4@2 ~ c4@3 a3 f3@2 g3 a3@3 ~@3", AA: "[~@6 f3!2 ~ c4@3 f3@2 f3@4 g3 a3@4 ~@9]/2", AB: "~@6 e3!2 c4@4 ~@2 a3@2",
  AC: "g3@2 f3@3 ~ f3@6 ~@4", AD: "~@2 a3@3 ~ g3 ~ g3@3 f3@3 a3@2", AE: "~ g3@5 f3@4 g3@3 ~@3",
})).s("gm_fretless_bass").gain(0.24)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@32 A@2 B@2 C@2 B@2 D@2 E@2 F@4 G@3 H I J K@3 ~@8 L@4 M@8 N@4 O@4 P@4 Q@4 R@5
>`.pickRestart({
  A: "[f5@7 [f5,f6]]/2", B: "[e5,e6]/2", C: "[[f5,f6]@7 [f5,f6]]/2", D: "f6/2", E: "e6/2",
  F: "[~@16 [f4,a4]@16 f4@16 e4@15 ~, f6@32 [g4,e6]@31 ~, ~@8 c5@23 ~]/4", // F C
  G: "[[f3,bb3,d4]@15 ~@13 e5@4 [bb3,f4,f5]@14 g5@2, d5@9 ~@7, ~ d4@2, ~ [f3,a3] ~]/3", // Bb Bb5 F
  H: "a5@5 g5 f5@2, [a3,c4,f4]@15 ~", I: "[a3,c4,e4,e5]", J: "[bb3,d4,f4,d5]", K: "[f4 e4@2, [c4,g4], c5@23 ~]/3",
  L: "[[bb3,d4] a3 ~ e3, f3@3 ~, ~ c4@3, ~ g3]/4", // Bb
  M: "[[bb3,d4]@16 a3@16 ~@16 e3@15 ~ [bb3,d4]@16 ~@8 a5@7 ~@17 e3@16, f3@48 ~@15 f5@25 ~@7 g5@30 ~@3, f5@2 [g3,g5]@2 f3@3 ~, ~ c4@3 ~ c4@3, ~@5 a3 g3@2]/8", // Bb G
  N: "[[bb3,d4,bb5]@4 [a3,a5]@4 ~@7 d6, f3@3 e3, ~ c4@3, ~ g3, ~@8 g5@7 ~]/4", // Bb A
  O: "[[bb3,d4]@16 a3@15 ~@17 e3@16, f3@3 ~, c6@31 f5@16 e5@16 ~, ~ c4@3, ~ g3]/4", // Bb
  P: "[[bb3,d4] a3 ~ e3, f3@3 ~, f5 [g3,g5], ~ c4@3]/4", // Bb G
  Q: "[~@16 a3@16 ~@15 c6 e3@16, f3@3 ~, [bb3,d4,bb5]@15 a5@16 ~ [g3,g5]@32, ~@6 f6@41 e6@16 ~, ~ c4@3]/4", // Bb G
  R: "[[bb3,d4] a3 ~ e3@2, f3@3 ~@2, f5@2 g3@3, ~ c4@4, ~@32 g5@25 ~@23]/5", // Bb
})).s("gm_synth_strings_1").gain(0.09)

// drums · kick
const kick = s("bd").struct("<~@5 [x ~ x!2 ~@4 x ~ x ~@5]!3 [x!2 ~@2 x!2 ~@2]!48 x [x!2 ~@2 x!2 ~@2]!40 x>").gain(0.32)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[x ~ x!2 ~@4 x ~ x ~@5]!5 ~@3 [~@3 x ~@12]!48 ~ [~@3 x ~@12]!40 ~>").gain(0.18)

// drums · snare
const snare = s("sd").struct(`<
  ~@4
  [~@3 x]
  [~@4 x ~@2 x ~@4 x ~@3]!51
  [~@15 x]
  [~@4 x ~@2 x ~@4 x ~@3]!39
  [~@4 x ~@2 x ~ x ~@2 x ~@2 x]
  ~
>`).gain(0.29)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@4 x ~@2 x ~@4 x ~@3]!4 [~@4 x ~@2 x ~@8] ~@51 [~@7 x] ~@39 [~@7 x] ~>")
  .gain(0.11)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!56 ~ [x!8]!12 [~ x!7] [x!8]!27 ~>").gain(0.18)

// drums · open hat
const open_hat = s("oh").struct("<~@56 x ~@40 x>").gain(0.18)

// drums · crash
const crash = s("cr").struct("<~@69 x ~@28>").gain(0.14)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@24 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@18 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(0.25)

stack(bass, pad_warm, bass_2, synth_strings_1, kick, kick_soft, snare, snare_soft, hihat, open_hat, crash, tambourine)

More by Bruce Springsteen