Strudelify

The River

Bruce Springsteen

KeyE minorTempo58 bpm
0:00/0:00
// The River — Bruce Springsteen
// 58 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(58/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 · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A B C D@2 E A F G H I J@2 K L M N O P Q R S T C U K L M N O P Q R S T C V A E A F G H I W A E A F G H I W X Y Z AA X Y
  Z AA X Y Z AA X Y Z AA X Y Z AA ~
>`.pickRestart({
  A: "[b3,e4]@2 ~@5 b3 [g3,b3]@2 ~@2 d4 ~@2 b3, [e3,g3] [d3,g4], ~@2 e4@2 e4@2 e4@2 ~@3 b3@2 b3@2 ~, ~@3 b3@2 b3@2 ~@3 g3@4 g3@2", // E5 G Em G5
  B: "d4@2 ~ g4 ~@2 g4 d4 g3@2 d4 ~@3 d4 g3, [d3,a3,f#4] [c3,e3,c4], ~@2 d4@3 d4@2 ~ e4@5 e4@3, ~@11 g3@4 ~", // D C
  C: "a3@2 ~@5 c4 [g3,b3]@2 ~@2 d4 ~@2 b3, [a2,e3] [d3,g4], [c4,e4]@3 c4@2 c4@2 ~@4 b3@2 b3@2 ~, ~ a3@2 a3 ~ g3@2 g3, ~ e4 ~@2", // G A5 G5 C
  D: "[e4@2 d4 e4@5 e4@2 d4 e4@5 [b3,e4]@2 ~@5 b3 [g3,b3]@2 ~@2 d4 ~@2 b3, [c3,e3,g3,c4] [c3,c4]@2 [d3,g4], ~@4 [e3,g3]@4 [e3,g3]@4 ~ g3@2 g3, ~@9 e4!3 ~@4, ~@19 b3@2 b3@2 ~@4 b3@2 b3@2 ~]/2", // E5 G C G5 Em
  E: "d4@2 ~ a4@2 ~ a4 d4 [c4,e4]@2 ~@2 g4 ~@2 e4, [d3,a3,f#4] [c3,e3,g3], ~@2 d4@3 d4@2 ~@3 c4@4 c4@2, ~@11 e4@2 e4@2 ~", // C D C
  F: "g3@2 ~@5 c4 [g3,b3]@2 ~@2 d4 ~@2 b3, [c3,e3] [d3,g4], [c4,e4]@3 c4@2 c4@2 ~@4 b3@2 b3@2 ~, ~ g3@2 g3 ~ g3@2 g3, ~ e4 ~@2", // G C G5 C
  G: "[c4,e4]@2 ~@2 g4 ~@2 e4 [c4,e4]@2 ~@2 g4 ~@2 e4, [c3,e3,g3]!2, ~ c4@2 c4 ~ c4@2 c4, ~@3 e4@2 e4@2 ~@4 e4@2 e4@2 ~", // C
  H: "g3@2 ~ d4 d3@2 ~ a3 [e3,b3]@2 ~ b3@2 ~@2 e3, [d3,b3,g4]@4 ~@2 d3@2 ~@2 e3@3 e3@2 ~, ~ g3 [a3,d4,f#4]@2 [g3,e4]@4, ~@7 b3", // E5 G D C
  I: "a3@2 ~@5 c4 a3@2 ~@5 c4, [a2,e3]!2, [c4,e4]@3 c4@2 c4@2 ~ [c4,e4]@4 e4@4, ~ a3@2 a3 ~ a3@2 a3, ~@4 e4@4 ~@3 c4@2 c4@2 ~", // A5 C
  J: "[[g3,b3]@2 ~@2 d4 ~@2 b3 [c4,e4]@2 ~@2 g4@12 [b3,e4]@2 ~@5 b3, [d3,g4] [c3,e3,g3]@2 [e3,g3], ~@2 g3@4 g3@2 ~@3 e4@13 ~@2 e4@2 e4@2 e4@2, ~@3 b3@2 b3@2 ~@3 c4@14 ~@3 b3@2 b3@2 ~]/2", // G C E5 G5 C Em
  K: "[c4,e4]@2 ~@2 g4 ~@2 e4 [d4,f#4]@2 ~@2 a4 ~@2 f#4, [c3,g3] [d3,a3], ~ c4@2 c4 ~ d4@2 d4, ~@3 e4@2 e4@2 ~@4 f#4@2 f#4@2 ~", // C D C5 D5
  L: "g4@4 ~@2 f#4@2 [g3,b3]@3 ~ b3@2 b3@2, [d3,g3,b3] [e3,e4], ~@4 g4@4 ~@3 g3@5", // G E
  M: "g3@3 e3 g3@2 g3@2 d3@3 ~ f#3@2 f#3@2, [c3,c4,e4] [a3,d4,f#4], ~@11 d3@5", // C D
  N: "g3@3 e3 g3@2 g3@2 [b3,e4]@2 ~@5 b3, [c3,c4,e4] [e3,g3], ~@5 e4!3, ~@11 b3@2 b3@2 ~", // E5 C Em
  O: "[g3,b3]@2 ~@2 d4 ~@2 b3 d4@2 ~ a4@2 ~ a4 d4, [d3,g4] [d3,a3,f#4], ~ g3@2 g3 ~@4, ~@3 b3@2 b3@2 ~@3 d4@3 d4@2 ~", // G G5 D
  P: "[c4,e4]@2 ~@2 g4 ~@2 e4 [b3,e4]@2 ~@5 b3, [c3,e3,g3] [e3,g3], ~@2 c4@4 c4@2 ~@3 b3@2 b3@2 ~, ~@3 e4@2 e4@2 ~@3 e4@2 e4@2 e4@2", // C E5 C Em
  Q: "[g3,b3]@2 ~@2 d4 ~@2 b3 g3@2 ~@5 c4, [d3,g4] [c3,e3], ~ g3@2 g3 ~ g3@2 g3, ~@3 b3@2 b3@2 ~ [c4,e4]@3 c4@2 c4@2 ~, ~@3 e4", // G G5 C
  R: "[g3,b3]@2 ~@2 d4 ~@2 b3 [c4,e4]@2 ~@2 g4 ~@2 e4, [d3,g4] [c3,e3,g3], ~@2 g3@4 g3@2 ~@3 e4@2 e4@2 ~, ~@3 b3@2 b3@2 ~@3 c4@4 c4@2", // G C G5 C
  S: "[c4,e4]@2 ~@2 g4 ~@2 e4 g3@2 ~ d4 d3@2 ~ a3, [c3,e3,g3]@4 [d3,b3,g4]@2 ~ d3, ~ c4@2 c4 ~ g3 [a3,d4,f#4]@2, ~@3 e4@2 e4@2 ~@9", // C G D
  T: "[e3,b3]@2 ~ b3@2 ~@2 e3 a3@2 ~@5 c4, [g3,e4]@4 ~ a3@2 a3, ~@2 e3@3 e3@2 ~ [a2,e3]@8, ~@6 b3@2 [c4,e4]@3 c4@2 c4@2 ~, ~@3 e4", // E5 C A5 C
  U: "[c3,e3,g3,c4,e4]@8 [b3,e4]@2 ~@5 b3, ~ [e3,g3], ~@5 e4!3, ~@11 b3@2 b3@2 ~", V: "[c3,e3,g3,c4,e4]",
  W: "[g3,b3]@2 ~@2 d4 ~@2 b3 [c3,e3,g3,c4,e4]@8, [d3,g4] ~, ~ g3@2 g3 ~@4, ~@3 b3@2 b3@2 ~@9", // G C G5
  X: "[b3,e4]@2 ~@5 b3 [c4,e4]@2 ~@2 g4 ~@2 e4, [e3,g3] [c3,g3], ~@2 e4@2 e4@2 e4@2 ~@3 e4@2 e4@2 ~, ~@3 b3@2 b3@2 ~@3 c4@4 c4@2", // E5 C Em C5
  Y: "[d4,f#4]@2 ~@2 a4 ~@2 f#4 g4@4 ~@2 f#4@2, [d3,a3] [d3,g3,b3], ~ d4@2 d4 ~@4, ~@3 f#4@2 f#4@2 ~@5 g4@4", // D D5 G
  Z: "[g3,b3]@3 ~ b3@2 b3@2 g3@3 e3 g3@2 g3@2, [e3,e4] [c3,c4,e4], ~@3 g3@5 ~@8", // G E C
  AA: "d3@3 ~ f#3@2 f#3@2 g3@3 e3 g3@2 g3@2, [a3,d4,f#4] ~, ~@3 d3@5 [c3,c4,e4]@8", // D C
})).s("gm_acoustic_guitar_steel").gain(0.4)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@12 A B C D E F G H I J K L M B C D E F G H I J K L N O P O Q R S T U O P O Q R S T U V W V X V W V X V W V X V W V X
  V W V X ~
>`.pickRestart({
  A: "~@8 e2@3 e2 e2@2 d3@2", B: "c3@3 c3 c3@2 e3@2 d3@3 d3 d3@2 f#2@2", C: "g2@3 g2 g2@2 f#2@2 e2@3 e2 e2@2 d3@2",
  D: "c3@3 c3 c3@2 e3@2 d3@3 d3 d3@2 d3@2", E: "c3@3 c3 c3@2 c3@2 e2@3 e2 e2@3 f#2",
  F: "g2@3 g2 g2@2 b2@2 d2@3 d2 d2@3 d2", G: "c2@3 c2 c2@2 g2@2 e2@3 e2 e2@3 f#2",
  H: "g2@3 g2 g2@2 b2@2 c3@3 c3 c3@3 c3", I: "g2@3 g2 g2@2 b2@2 c3@3 c3 c3@4",
  J: "c3@3 c3 c3@2 c3 d3 g2@3 g2 f#2@3 f#2", K: "e2@3 e2 e2@2 e2@2 a2@3 a2 a2@4",
  L: "a2@3 a2 a2@3 a2 g2@3 g2 g2@2 b2@2", M: "c3@3 c3 c3@2 c3!2 e2@3 e2 e2@2 d3@2",
  N: "c3@3 c3 c3@2 c3@2 c3@3 c3 c3@2 c3@2", O: "e2@3 e2 e2@3 f#2 g2@3 g2 g2@2 b2@2",
  P: "d2@3 d2 d2@3 d2 c2@3 c2 c2@2 g2@2", Q: "c3@3 c3 c3@3 c3 g2@3 g2 g2@2 b2@2", R: "c3@3 c3 c3@4 c3@3 c3 c3@2 c3 d3",
  S: "g2@3 g2 f#2@3 f#2 e2@3 e2 e2@2 e2@2", T: "a2@3 a2 a2@4 a2@3 a2 a2@3 a2", U: "g2@3 g2 g2@2 b2@2 c3@3 c3 c3@2 c3!2",
  V: "e2@3 e2 e2@2 d3@2 c3@3 c3 c3@2 e3@2", W: "d3@3 d3 d3@2 f#2@2 g2@3 g2 g2@2 f#2@2",
  X: "d3@3 d3 d3@2 d3@2 c3@3 c3 c3@2 c3@2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · piano
const piano = note(`<
  ~@12 A B C B D E F G@2 H I J K B C B D E F G@2 H I J L M N M O P Q R S T N M O P Q R S U V W X U V W X U V W X U V W X
  Y Z Y AA ~
>`.pickRestart({
  A: "~@8 e3 g3 b3 b4@5", B: "c4 e4 g4 g5@5 d4 f#4 a4 a5@5", C: "g4 c5 b4 g4 c5 b4 g4 b4 e3 g3 b3 b4@5",
  D: "c4 e4 b4 e4@2 c4 e4@2 e3@3 b3 e4@4", E: "g3@3 d4 g4@4 d4@3 a4 d5@4", F: "c4@3 g4 c5@4 e3@3 b3 e4@4",
  G: "g3@3 d4 g4@4 c4@3 g4 c5@4", H: "c4@3 g4 c5@4 g4@4 f#4@4", I: "e4@4 ~@4 a3@3 e4 a4@4", J: "a3@3 e4 a4@4 g4@4 a4@4",
  K: "e4@4 ~@5 g3 b3 b4@5", L: "e4 ~@3", M: "e3@3 b3 e4@4 g3@3 d4 g4@4", N: "d4@3 a4 d5@4 c4@3 g4 c5@4",
  O: "c4@3 g4 c5@4 g3@3 d4 g4@4", P: "c4@3 g4 c5@4 c4@3 g4 c5@4", Q: "g4 f#4 e4 ~", R: "a3@3 e4 a4@4 a3@3 e4 a4@4",
  S: "g4 a4 e4 ~", T: "~@3 b3 e4@4 g3@3 d4 g4@4", U: "~ g3 b3 b4@5 c4 e4 g4 g5@5",
  V: "d4 f#4 a4 a5@5 g4 c5 b4 g4 c5 b4 g4 b4", W: "e3 g3 b3 b4@5 c4 e4 g4 g5@5",
  X: "d4 f#4 a4 a5@5 c4 e4 b4 e4@2 c4 e4@2", Y: "e4@6 e4 g4!2 e4@5 g4@2", Z: "a4 g4@2 a4 a4@2 ~@2 b4@4 b4 d5 b4 a4",
  AA: "a4 g4@2 a4 a4@2 ~@2 c5@3 ~@5",
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@12 A B@11 C B@19 D B@7 D B@3 E B@11 E B@4 ~>".pickRestart({
  A: "~@8 x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", C: "x ~@2 x ~@4 x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@3 x ~@7",
  E: "x ~@2 x!2 ~@3 x ~@2 x ~@4",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@12 A B@11 C B@3 C B@7 D B@7 E B@7 F B@3 G B@11 F B@4 ~>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~@3 x ~ x", D: "~@2 x ~@3 x ~@3 x ~@2 x!3", E: "~ x ~ x ~@4",
  F: "~ x ~ x ~ x ~@2", G: "~@2 x ~@3 x ~@3 x ~ x!3 ~",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@11 B ~@3 C ~@23 D ~@21>".pickRestart({
  A: "~@5 x!2 ~@9", B: "~@6 x!2 ~@8", C: "~@3 x ~@4", D: "~@14 x!2",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@3 B ~@15 C ~@7 D ~@15 E ~@5>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@5 x ~@10", C: "~@10 x!2 ~ x!2 ~", D: "~@6 x!2", E: "~@12 x!4",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~@7 x ~@8] ~@57>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@12 A ~@11 A ~@19 A ~@8 B ~@3 B ~@3 B ~@7 B ~@4>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.4)

stack(acoustic_guitar_steel, bass, piano, kick, snare, low_tom, hihat, mid_tom, open_hat, crash)

More by Bruce Springsteen