Strudelify
KeyE majorTempo124 bpm
0:00/0:00
// Badlands — Bruce Springsteen
// 124 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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@6 B C D E D E D E F G H I H I J I K L M@2 N@2 M O P Q A@6 R S D E D E D E F G H I H I J I K L M@2 N@2 M O P Q A@6
  T L U V U V U V W V U V U V U V X Y ~@11 Z D E AA AB A@6 T L A@2 AC@2 ~@5
>`.pickRestart({
  A: "[[b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@10 [a4,c#5,e5]!2 [a4,c#5,e5]@2 [b4,d#5,f#5]@2 [c#5,e5,g#5]@4 [b4,d#5,f#5]@4]/2", // E A B C#m B
  B: "[b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@8", // E
  C: "[a4,c#5,e5]@3 [a4,c#5,e5] [a4,c#5,e5]@4 [b4,d#5,f#5]@4 [b4,d#5,f#5]@4", // A B
  D: "[b4,e5,g#5]@10 [b4,e5,g#5]@3 [b4,d#5,f#5]@3", E: "[a4,c#5,e5]@2 [b4,e5,f#5] [b4,d#5,f#5]",
  F: "[b4,e5,g#5]@6 [b3,e4,b4]@2 [b3,e4,b4]@3 [b3,e4,b4] [b3,e4,b4]@2 [b3,e4,b4]@2", // E E5
  G: "[c#4,e4,b4]@3 [c#4,e4,b4] [c#4,e4,b4]@2 [c#4,e4,b4]@2 [d#4,f#4,b4]@4 [d#4,f#4,b4]@4", // C#m7 B
  H: "[b4,e5,g#5]@2 [b4,e5,g#5] [b4,d#5,f#5]", I: "[a4,c#5,e5]@2 [b4,d#5,f#5]!2", J: "[b4,e5,g#5]@2 [b4,e5,g#5]!2",
  K: "[b4,e5,g#5]@3 [b4,b5]@3 [b4,b5]@2 [b4,b5]@4 [b4,b5]@2 [b4,b5]@2", // E B
  L: "[c#5,e5,a5,c#6]@3 [d#5,d#6]@3 [e5,e6]@2 [f#5,b5,d#6,f#6]@4 [f#5,b5,d#6,f#6]@4", // A D# E B
  M: "[e4,a4,c#5]@3 [e4,a4,c#5] [e4,a4,c#5]@4", N: "[f#4,b4,d#5]@3 [f#4,b4,d#5] [f#4,b4,d#5]@4",
  O: "[e4,a4,c#5]@3 c#5 d#5@2 e5@2", P: "[b4,d#5,f#5]@3 [a4,c#5,e5]@3 [a4,c#5,e5,g#5]@2",
  Q: "[b4,d#5,f#5]@2 [a4,c#5,e5] [b4,d#5,f#5]", // B A B
  R: "[b4,e5,g#5]@3 [b4,e5,g#5] [b4,e5,g#5]@2 [b4,f#5]@2 [b4,e5,g#5]@3 [b4,e5,b5]@3 [b4,e5,g#5]@2", // E B5 E E5 E
  S: "[a4,c#5,e5]@3 d#5 [a4,c#5,e5]@2 e5@2 [b4,d#5,f#5]@4 [b4,d#5,f#5]@4", // A B
  T: "[b4,e5,g#5]@3 [b4,e5,g#5] [b4,e5,g#5]@2 [b4,f#5]@2 [b4,e5,g#5]@3 [b4,a5]@3 [b4,b5]@2", // E B5 E B7 B
  U: "[b3,e4,g#4]@3 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,d#4,f#4]@2", V: "[a3,c#4,e4]@2 [b3,e4,f#4] [b3,d#4,f#4]",
  W: "[b3,e4,g#4]@6 [b3,e4,g#4]@2 [b3,e4,g#4]@4 [b3,d#4,f#4] [b3,d#4,f#4]@3", // E B
  X: "[b3,e4,g#4]@6 [b4,e5,b5]@2 [b4,e5,b5]@3 [b4,e5,b5]@3 [b4,e5,b5]@2", // E E5
  Y: "[c#5,e5,b5]@3 [c#5,e5,b5] [c#5,e5,b5]@4 [d#5,f#5,b5]@2 [d#5,f#5,b5]@2 [d#5,f#5,b5]@4", // C#m7 B
  Z: "~@2 [b4,e5,f#5] [b4,d#5,f#5]", // Bsus4 B
  AA: "[b3,g#4]@3 [b3,g#4] [b3,g#4]@2 [b3,f#4]@2 [b3,g#4]@3 [b3,g#4] [b3,g#4]@2 [b3,b4]@2", // E B5 E B
  AB: "[c#4,e4,b4]!2 [d#4,f#4,b4]!2", // C#m7 B
  AC: "[[b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@10 ~@14]/2", // E
})).s("gm_piano").gain(0.48).pan(0.6)

// chords · piano · soft notes
const piano_soft = note("<~@89 A B C D C D E F G H I J ~@15 K L@4 ~>".pickRestart({
  A: "[e3,g#3,b3]@3 [e3,g#3,b3]", B: "[e3,a3,c#4]@4 [f#3,b3,e4]@3 e3",
  C: "[e3,g#3,b3]@12 b5 g#5 e5 b4, ~@3 [e3,g#3,b3]", D: "[e3,a3,c#4,c#5]@2 [b3,e4] [b3,d#4,f#4]",
  E: "[b3,b4]@3 [b3,b4]@3 [b3,b4]@2 [b3,b4]@3 [b3,b4]@3 [b3,b4]@2, [e3,g#3]", // B E
  F: "[b3,e4,b4]@3 [b3,e4,b4]@3 [b3,e4,b4]@2 [b3,e4,b4]@4 [b3,d#4,f#4,b4]@4, [e3,a3] f#3", // E5 B A5
  G: "[b4,e5,g#5]@2 [b4,e5,g#5] [b4,d#5,f#5]", H: "[a4,c#5,e5]@2 [b4,e5,f#5] [b4,d#5,f#5]",
  I: "[b4,e5,g#5]@10 [b4,e5,g#5]@3 [b4,d#5,f#5]@3", J: "[a4,c#5,e5] ~",
  K: "~@2 [a4,c#5,e5]!2 [a4,c#5,e5]@2 [b4,d#5,f#5]@2 [c#5,e5,g#5]@4 [b4,d#5,f#5]@4", // A B C#m B
  L: "[[b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@2 [b4,e5,g#5] f#5 [b4,e5,g#5]@10 [a4,c#5,e5]!2 [a4,c#5,e5]@2 [b4,d#5,f#5]@2 [c#5,e5,g#5]@4 [b4,d#5,f#5]@4]/2", // E A B C#m B
})).s("gm_piano").gain(0.24).pan(0.6)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~ A B C D C D E F G H G H G H G H I J I J K J L M N@2 O@2 N@2 P Q R D R D R B S T G H G H G H G H I J I J K J L M N@2
  O@2 N@2 P Q R D R D R B S T U J U J U J U J U J U J U J V J ~@11 W X Y X Y R D R D R B S T R D Z ~@6
>`.pickRestart({
  A: "[e3,b3]@2 [e3,b3,e4] [f#3,b3,d#4]", B: "[e3,a3,c#4] [f#3,b3,d#4]", C: "[e3,b3]@3 [f#3,b3,d#4]",
  D: "[e3,a3,c#4]@2 [e3,a3,c#4] [f#3,b3,d#4]", E: "[e3,b3]@5 e4 e3@2",
  F: "[e3,a3,c#4]@3 [e3,a3,c#4] [e3,a3,c#4]@4 [f#3,b3,d#4]@4 [f#3,b3,d#4]@4", G: "b3@10 b3@3 b3@3", H: "c#4@2 b3!2",
  I: "~ [e4,g#4]@7 [b3,e4,g#4]@4 [b3,d#4,f#4]@4, [e3,b3] ~", J: "[a3,c#4,e4] [b3,d#4,f#4]",
  K: "[e3,b3,e4,g#4]@3 [b3,e4,g#4]", L: "~ [e4,g#4]@15, [e3,b3]", M: "[a3,c#4,e4]@2 [b3,d#4,f#4]!2",
  N: "[e4,a4,c#5]@10 [e4,a4,c#5]!2 [e4,a4,c#5]@2 [e4,a4,c#5]@2", // A
  O: "[f#4,b4,d#5]@10 [f#4,b4,d#5]!2 [f#4,b4,d#5]@2 [f#4,b4,d#5]@2", P: "[f#4,b4,d#5]@3 [e4,a4,c#5]@3 [e4,a4,c#5]@2",
  Q: "[f#4,b4,d#5]@2 [e4,a4,c#5] [f#4,b4,d#5]", R: "[e3,b3]@14 [e3,a3,c#4]!2", S: "[e3,b3]",
  T: "[e3,a3,c#4]!2 [f#3,b3,d#4]!2", U: "[e3,b3,e4,g#4]@2 [b3,e4,g#4] [b3,d#4,f#4]", V: "[e3,b3,e4,g#4]",
  W: "~@5 [b2,f#3,b3]!3", X: "[e3,b3,e4]!8", Y: "[a2,e3,a3]!4 [b2,f#3,b3]!4", Z: "[e3,b3]@7 ~",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.3)

// chords · electric guitar clean · "Guitar" · soft notes
const electric_guitar_clean_2 = note("<~@89 A ~@7 B C B D ~@14 E F G F G F ~>".pickRestart({
  A: "[e3,b3,e4]", B: "[e3,b3,e4]!8", C: "[a2,e3,a3]!4 [b2,f#3,b3]!4", D: "[a2,e3,a3]!4 [b2,f#3,b3] ~@3",
  E: "~@14 [e3,a3,c#4]!2", F: "[e3,a3,c#4]@2 [e3,a3,c#4] [f#3,b3,d#4]", G: "[e3,b3]@14 [e3,a3,c#4]!2",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.3)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C B C D C E F G F G F G H E I J I G K L M E N O P Q N R S T C B C D U V W X F G F G F G H E I J I G K L M E N O
  P Q N R S T C B C D U V W X Y E Z AA K AA Z AA Y E Z AA K AB W AC ~@12 AD AE AF AE C B C D U V W X C B AG ~@6
>`.pickRestart({
  A: "e1@2 e1 e2 e1@2 b1 e2", B: "a1@3 c#2@3 b1@2", C: "e2@4 e2@3 b1 e1@2 e1@2 b1@2 e2@2", D: "a1@3 c#2 c#2@2 b1@2",
  E: "a1!2 b1!2", F: "e2 e2@2 b1 e2 e2@3", G: "a1@3 a1 b1@2 b1!2", H: "e2 e2@2 b1 e2!4", I: "e2@3 b1 e2@2 b1@2",
  J: "a1!4 b1@2 b1!2", K: "e2 e2@2 b1 e2!2 b1@2", L: "a1@3 a1 b1!4", M: "e2@3 b1 e2@3 e2", N: "a1@3 e1 a1!3 e1",
  O: "a1!3 e1 a1@2 a1@2", P: "b1@3 f#1 b1@3 f#1", Q: "b1!3 f#1 b1@3 b1", R: "a1@6 e1@2 a1@2 a1@2 a1@3 ~",
  S: "b1@3 a1@3 a1@2", T: "b1@3 b1 c#2@2 d#2@2", U: "e2@3 b1 e2@2 b1 e2", V: "a1@6 c#2@2 b1@5 ~ b1@2",
  W: "e2@3 b1 e2 e2@2 e2", X: "a1@3 a1 b1@2 b1@2", Y: "e1@2 e1@2 e1@2 b1 e2", Z: "e2 e2@2 b1 e2@2 b1@2",
  AA: "a1 a1@2 a1 b1@3 b1", AB: "a1@3 a1 b1@3 b1", AC: "a1@3 a1 a1@4 b1@4 b1@4", AD: "~@4 e2!4", AE: "a1!4 b1!4",
  AF: "e2!8", AG: "e2@4 e2@3 b1 e1@2 e1@2 b1@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.4)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note("<~@89 A ~@3 B C B C B C B C D ~@13 E F G F G F ~>".pickRestart({
  A: "e2@15 ~", B: "e2!8", C: "a2!4 b2!4", D: "e2!4 ~@4", E: "~@7 e2", F: "a1@3 c#2@3 b1@2",
  G: "e2@4 e2@3 b1 e1@2 e1@2 b1@2 e2@2",
})).s("gm_electric_bass_finger").gain(0.15).pan(0.4)

// other · alto sax · "Sax"
const alto_sax = note("<~@81 A B C D A E F G ~@33>".pickRestart({
  A: "g#4@3 ~ b4@9 ~@3", B: "~@2 e4!2 g#4@2 b4@2 c#5@3 ~ b4@2 ~ g#4", C: "c#5@3 ~ b4@9 ~@3",
  D: "g#4@2 b4@3 ~ g#4@2 g#4@3 ~ f#4@3 ~", E: "~@2 e4!2 e4@2 f#4@2 g#4@3 ~ f#4@3 ~", F: "e3@11 ~@3 e4!2",
  G: "f#4 g#4 b4@2 b4@2 b4!3 g#4 f#4@2 f#4@3 ~",
})).s("gm_alto_sax").gain(0.8)

// chords · distortion guitar · "Lead Guitar"
const distortion_guitar = note("<~@73 A B@2 C@2 D E F ~@41>".pickRestart({
  A: "f#4!2 f#4@2", B: "[~@2 e4@2 ~ f#4@2 ~ f#4@4 b3@2 f#4@6 f#4@4 f#4@8]/2",
  C: "[~@2 e4@2 ~ f#4@2 ~ f#4@4 e3@2 f#3@6 f#3@4 f#3@8]/2", D: "~@2 e3@2 ~ f#3@2 ~ g#3@4 f#3@4",
  E: "e3@4 a4@2 [b4,e5]!2 [b4,e5]@2 a4@2 [b4,e5]!2 [b4,e5]@2", // E5
  F: "a4@2 [b4,e5]!2 a4@2 [b4,e5]!2 a4@2 [b4,e5]!2 a4@2 [b4,e5]@2", // E5
})).s("gm_distortion_guitar").gain(0.41)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@89 [x!4]!12 [x!3 ~] ~@13 [~@3 x] [x!4]!3 ~@3>").gain(0.21)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@89 A B A B A B A B A B A B C ~@13 D E F ~@4>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x!3 ~", D: "~@3 x", E: "x ~@3 x ~@3 x ~ x ~ x ~ x!2", F: "~ x ~ x",
})).gain(0.21)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@89 A B A B A B A B A@4 C ~@13 D A E A F ~@2>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x!3 ~", D: "~@3 x", E: "~@2 x!2", F: "x!2",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<A ~@24 B@6 C D ~@24 B@6 C D ~@57>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x", C: "~@8 x!2 ~@6", D: "~@6 x!2",
})).gain(0.64)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A ~@3 A ~@7 A ~@7 A ~@7 B ~ B ~@5 A ~@7 A ~@7 A ~@7 B ~ B ~@5 A ~@14 C ~@16 B ~ B ~@5 B ~ B ~ B ~@4
>`.pickRestart({
  A: "x", B: "x!2 ~@2", C: "~@3 x",
})).gain(0.57)

// drums · high tom
const high_tom = s("ht").struct("<~@31 [~@2 x!3 ~@11] [~@4 x ~ x!2 ~@8] ~@30 [~@2 x!3 ~@11] [~@4 x ~ x!2 ~@8] ~@57>")
  .gain(0.64)

stack(
  piano, piano_soft, electric_guitar_clean, electric_guitar_clean_2, bass, bass_soft, alto_sax, distortion_guitar, kick,
  kick_soft, snare, snare_soft, hihat, hihat_soft, low_tom, mid_tom, crash, high_tom
)

More by Bruce Springsteen