Strudelify

Hollywood Nights

Bob Seger

KeyE majorTempo150 bpm
0:00/0:00
// Hollywood Nights — Bob Seger
// 150 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "L.GUITAR" named as a guitar, played on electric guitar clean (its clavinet patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 162 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/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(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E F G H I J K L E F G H I J K L A@2 B@2 C@2 D@2 E F G H I J K L E F G H I J K L A@2
  B@2 C@2 D@2 A@2 B@2 C@2 D@2 M N O@2 P Q R S E F E F E F G H I J K L E F G H I J K L A@2 B@2 C@2 D@2 E F G H I J K L E
  F G H I J K L A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 M N O@2 T
>`.pickRestart({
  A: "[e0@4 e1@2 e0@4 e1@3 ~ e1@4 e0@2 e1@4 e1@2 e0@2 e1@2 e0@2]/2",
  B: "[e1@5 ~ e1@4 e0@2 e1@2 e1@4 e0@2 e1@3 ~ e1@2 e0@2 e1@2 e0@2]/2",
  C: "[e1@6 e1@4 e0@2 e1@2 e1@4 e0@2 e1@4 e1@4 e1@3 ~]/2",
  D: "[e1@4 ~@2 e1@3 ~ e1@2 e0@2 e1@4 e1@2 e0@4 e1@2 e0@2 e1@3 ~, ~ e0 ~@6]/2", E: "e0 e1 ~ e1@2 e1 ~ e1",
  F: "e0 ~ e1@2 ~@2 e1@3 ~ e1@2 e0 ~ e1@2", G: "e0@2 e1@2 ~@2 e1 ~ e0 ~ e1 ~@3 e1@2",
  H: "~@2 e1@2 e0 ~ e1@3 ~ e0@2 e1@2 e0 ~", I: "e0@2 e1@2 ~@2 e1@2 e0 ~ e1@2 ~@2 e1@2",
  J: "e0@2 e1@2 e0 ~ e0 ~ e1@2 e0 ~ e1@2 e0 ~", K: "e0@4 e1@2 e0 ~ e0@2 e1@3 ~ e1@2",
  L: "e0 ~ e1@3 ~ e1@2 e0@2 e1@2 e1 ~ e1 ~", M: "d1@5 ~ d1@5 ~ d1@4", N: "~@2 d1@4 a0@2 d1@2 a0@2 d1@3 ~",
  O: "[a0@6 a1@4 a0@2 a1 ~ a1@4 a0@2 a1@4 a0@4 a1@3 ~]/2", P: "e0@4 e1 ~ e1@4 e0@2 e1@4",
  Q: "~@2 e1@3 ~ e1@4 e0@2 e1@2 e0 ~, e0@3 ~@5", R: "e0@4 e1@2 e0@4 e1 ~ e1@4", S: "e0@2 e1@3 ~ e1@4 e0@2 e1@3 ~",
  T: "e0",
})).s("gm_electric_bass_finger").gain(0.54)

// chords · piano
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 I@2 E@2 F@2 G@2 H@2 A@2
  B@2 C@2 D@2 A@2 B@2 C@2 D@2 J@2 K@2 L@4 M@2 E@4 F@2 G@2 H@2 E@2 F@2 G@2 H@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 I@2 E@2 F@2
  G@2 H@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 J@2 N@2 O
>`.pickRestart({
  A: "[[e3,g#3,b3]@6 ~@8 [g#3,b3,e4]@11 ~ [g#3,b3,e4]@6, [e2,b2]@12 [e2,b2]@13 [e2,b2]@7, ~@3 e3@13, ~@3 [g#3,b3]@4 ~@9]/2", // E E5 G#m
  B: "[[a3,c#4,e4]@3 [a3,c#4,e4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@3 [a3,c#4,e4]@4, [e2,b2]]/2", // A E5
  C: "[[a3,d4,f#4]@3 [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@4 [a3,d4,f#4]@2 ~ e2@2, e2@3 e2@4 ~, ~@5 [a3,d4,f#4]@2 ~@6 [a3,d4,f#4]@3]/2", // D
  D: "[[g#3,b3,e4]@6 ~@6 [g#3,b3,e4]@2 ~@6 [g#3,b3,e4]@2 ~@4 [g#3,b3,e4]@3 ~@3, e2@10 e2@8 e2@6 e2@5 ~@3, ~@3 [g#3,b3,e4]@3 ~ [g#3,b3,e4]@3 ~ [g#3,b3,e4]@2 ~@3]/2", // E
  E: "[e2,e3,g#3,b3]/2", F: "[[e2,a3,c#4,e4]@31 ~]/2", G: "[[e2,a3,d4,f#4]@31 ~]/2",
  H: "[e4@11 [e4,g#4,b4] [e4,b4]!3 ~, [e2,g#3,b3]@31 ~, ~@12 g#4@3 ~]/2", // E E5 E
  I: "[~@7 g#6@4 [e4,g#4,b4] [e4,b4]!2 [e4,b4,b5] ~, [e2,g#3,b3]@31 ~, e4@11 g#6@4 ~, ~@5 b5@8 e6@2 ~, ~@7 e6@5 g#4@3 ~]/2", // E E5 E
  J: "[[a3,d4,f#4]@3 [a3,d4,f#4]@3 [d4,f#4]@3 a4@3 ~@2 d3@2, d3@7 ~, ~@3 a3@5, ~@9 [d4,f#4]@7, ~@3 [a4,d5,f#5]]/2", // D
  K: "[[a3,c#4,e4]@3 ~@2 a2 ~ [a4,e5] [a4,e5,a5]!3 [a4,e5,a5]@2 [a4,e5,a5] ~@2, [a2,e3]@5 e3@9 ~@2, ~@3 [a3,c#4,e4]@11 ~@2, ~@3 a2@4 ~]/2", // A A5 A
  L: "[[g#3,b3,e4]@6 [g#3,b3,e4]@12 [g#3,b3,e4]@4 ~@10 [e3,b3,e4]@6 [e3,b3,e4]@4 [e3,b3,e4]@2 b3@6 b3@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 ~@4 [f5,g5] [c5,d5,e5] [f4,g4,a4,b4] [b3,c4,d4,e4], [e2,b2]@26 [e2,b2]@31 [g6,a6]@5 ~@2, ~@11 g#3@16 ~ [b3,e4,g#4] [b3,e4,g#4,e6,f6]@2 ~, ~@22 [b3,e4]@10 ~@12 e3@15 [b5,c6,d6]@3 ~@2, ~@22 e4@4 ~@2 [b6,c7]@2 a5 ~]/4", // E E5 E Fsus2 C G7 Cmaj7 E5 …
  M: "[[e2,e3,g#3,b3], [f3,g3,a3] ~@31]/2", // E F
  N: "[[a3,c#4,e4]@6 ~@4 a2@2 ~@2 [a4,e5]@2 [a4,e5,a5]@2 [a4,e5,a5]@2 [a4,e5,a5]@2 ~@4 a5 [g5,a5,b5] [e5,f5] [b4,c5,d5] [e4,f4,g4,a4] [b3,c4,d4], [a2,e3]@10 e3@15 [f6,g6] [a4,e5,c6,d6,e6]@2 ~@4, ~@3 [a3,c#4,e4]@11 ~@2, ~@3 a2@4 ~, ~@11 [a4,e5,a5] [a6,b6]@2 ~@2]/2", // A A5 G Fmaj7 Bm Fmaj7 Bm A5 …
  O: "[e2,b2,g#3,b3,e4], a3 ~@15", // E
})).s("gm_piano").gain(0.48)

// chords · electric guitar clean · "L.GUITAR"
const electric_guitar_clean = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 A@2
  B@2 C@2 D@2 A@2 B@2 C@2 D@2 I@2 J@2 K@2 L@2 E@6 F@2 G@2 H@2 E@2 F@2 G@2 H@2 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2
  G@2 H@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 I@2 J@2 M
>`.pickRestart({
  A: "[~@3 [b3,e4]@6 [b3,e4]@3 [b3,e4]@4, [e2,b2,e3]]/2", // E5
  B: "[~@6 [a3,e4]@6 [a3,e4]@6 [a3,e4]@6 ~@4 [a3,e4]@3 ~, [a2,c#3,e3]@26 [a2,c#3,e3]@5 ~, ~@6 [a3,e4] ~]/2", // A5 A A5
  C: "[[d4,f#4]@6 ~@2 a3@3 ~ [d4,f#4]@6 f#4@2 f#4@2 ~@2 d4@4 d4@3 ~, d3@11 [d3,a3]@12 [d3,a3]@8 ~, a3 ~@3, ~@6 [d4,f#4]@6 ~@6 d4@4 [d4,f#4]@2 f#4@7 ~]/2", // D D5 D
  D: "[~@6 [b3,e4]@6 [b3,e4]@6 ~@8 [e2,b2,e3]@5 ~, [e2,b2,e3]@18 [b3,e4]@2 [b3,e4]@11 ~, ~@19 [e2,b2,e3]@7 ~@6]/2", // E5
  E: "~@2 [e2,b2,e3] ~@3 [e2,b2,e3] ~@3 [e2,b2,e3] ~@3 [e2,b2,e3] ~", // E5
  F: "~@2 [a2,e3,a3] ~@3 [a2,e3,a3] ~@3 [a2,e3,a3] ~@3 [a2,e3,a3] ~", // A5
  G: "~@2 [d3,a3] ~@3 [d3,a3] ~@3 [d3,a3] ~@3 [d3,a3] ~", // D5
  H: "[~@2 [e2,b2,e3] ~@3 [e2,b2,e3] ~@3 [e2,b2,e3] ~@3 [e2,b2,e3]@4 ~@2 [b3,e4]@4 [b3,e4]@2 ~@2 [b3,e4]@3 ~, ~@7 [b3,e4]@3 ~@3 [b3,e4] ~@2, ~@18 [e2,b2,e3]@9 [e2,b2,e3]@4 ~]/2", // E5
  I: "[[f#3,a3,d4]@3 [f#3,a3,d4]@3 [f#3,a3,d4]@2]/2", // D
  J: "[a3@6 ~@12 a3@6 [a2,e3,a3,c#4]@5 ~@3, [a2,e3]@3 [a2,e3]@3 ~@2, ~@3 c#4@9 ~@4, ~@3 a3@6 ~@7]/2", // A A5
  K: "[[e2,b2,e3,b3,e4]@5 ~ [b3,e4] [b3,e4]@6 ~@2 [e2,b2,e3], ~@5 [b3,e4] ~@7 [b3,e4]@3, ~@11 [e2,b2,e3]@19 ~@2]/2", // E5
  L: "[[e2,b2,e3,b3,e4]@5 ~ e4 ~@2 [e2,b2,e3]@2 [e2,b2,e3,b3,e4]@4 ~, ~@5 b3@2 [b3,e4]@4 ~@5, ~@5 e4 ~@10, ~@11 [e2,b2,e3]@7 ~@14]/2", // E5
  M: "[e2,b2,e3,b3,e4]", // E5
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · percussive organ · "ORGAN"
const percussive_organ = note(`<
  ~@9 A@2 B@2 C ~ D E@8 ~ F@8 ~@8 G@8 F@8 A@2 H@2 ~@2 I@2 A@2 H@2 ~@2 I@2 ~@2 J@2 K@3 L M N@8 ~@3 F@8 ~@8 G@8 F@8 A@2
  H@2 ~@2 I@2 A@2 H@2 ~@2 I@2 A@2 H@2 ~@2 I@2 A@2 H@2 ~@2 I@2 ~@2 J@2 O
>`.pickRestart({
  A: "[g#5,b5,e6]/2", B: "[[a5,c#6,e6]@31 ~]/2", C: "[a5,d6,f#6]", D: "[g#5,b5,e6]",
  E: "[~@13 [f5,g5] [a4,b4,c5,d5] [e4,f4,g4] e3@112, ~@13 a5@115]/8", // Fsus2 D7 Em
  F: "[[e5,g#5,b5]@32 [e5,c#6]@32 [d5,f#5]@32 [e5,g#5,b5]@31 ~, e3@127 ~]/8", G: "[e3@127 ~]/8", H: "[c#6,e6]/2",
  I: "[[g#5,b5,e6]@31 ~]/2", J: "[[c#6,e6]@31 ~]/2", K: "[g#5,e6]/3",
  L: "~@12 g5 [c5,d5,f5] [f4,g4,a4,b4] ~, ~@13 a5@3", M: "[b5,e6]",
  N: "[~@15 [f5,g5,b5,c6] [e5,g#5]@31 ~ e3@80, ~@7 d6@57, ~@15 a5@113]/8", O: "[e3,b3,e4]",
})).s("gm_percussive_organ").gain(0.41)

// chords · percussive organ · "ORGAN" · soft notes
const percussive_organ_soft = note("<~@16 A ~@63 B@3 ~@79>".pickRestart({
  A: "~@12 [a#5,c#6,d#6] [e5,b5] ~@2", B: "[~@12 [e5,a#5,c#6] ~@35, ~@11 d6@35 ~@2]/3",
})).s("gm_percussive_organ").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~ A@14 B C A@46 B C A@6 B C A@58 B C A@6 B C A@6 B C A@12 D>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x ~@2 x!3 ~ x", C: "~ x ~ x!3 ~ x", D: "x",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct(`<
  A B@15 C B@15 D B@7 D B@15 D B@7 C B@7 C B@3 E B@23 D B@7 D B@15 D B@7 C B@7 C B@7 C B@7 F B@3 E ~
>`.pickRestart({
  A: "~@14 x!2", B: "~ x ~ x", C: "~@4 x ~@10 x", D: "~@4 x ~@5 x ~ x ~ x!2", E: "~@4 x ~@5 x ~@3 x!2",
  F: "~@6 x ~@3 x!2 ~@2 x!2",
})).gain(0.47)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A@3 B A B A B A@3 B A B A B A B A B A B A B A@3 B A B A
  B A C A B A B A B A C A B A D A B A B A B A B A B A B A B A B A B A B A B A@3 B A B A B A@3 B A B A B A B A B A B A B
  A@3 B A B A B A C A B A B A B A C A B A B A B A C A B A B A B A E A B ~ D ~
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@10 x!2 ~@4", C: "~@10 x!5 ~", D: "~@8 x!2 ~ x!3 ~@2", E: "~@4 x!2 ~ x!3 ~@2 x!2 ~@2",
})).gain(0.09)

// drums · low tom
const low_tom = s("lt").struct("<~@159 [~@4 x ~@2 x] ~@2>").gain(0.47)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!161 ~>").gain(0.47)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ [~ x ~ x ~ x ~ x]!74 ~@2 [~ x ~ x ~ x ~ x]!82 ~@3>").gain(0.14)

// drums · mid tom
const mid_tom = s("mt").struct("<~@159 [~@3 x ~@2 x ~] ~@2>").gain(0.47)

// drums · open hat
const open_hat = s("oh").struct("<~@75 [~ x ~ x ~ x ~ x]!2 ~@82 [~ x ~ x ~ x ~ x]!2 x>").gain(0.47)

// drums · high tom
const high_tom = s("ht").struct("<~@159 [~ x ~@6] ~@2>").gain(0.47)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@7 A ~@15 A ~ A ~ A ~@3 A ~@15 A ~@7 A ~@7 A ~@3 A ~ A ~ A ~@19 A ~ A ~ A ~@3 A ~@15 A ~@7 A ~@7 A ~@7 A
  ~@7 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.47)

// drums · ride
const ride = s("rd").struct(`<
  ~ A B@7 A B@6 C ~@40 A B@6 C A B@6 C ~@4 A B A B ~@44 A B@6 C A B@6 C A B@6 C A B@6 D A B D B D
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x",
})).gain(0.47)

stack(
  bass, piano, electric_guitar_clean, percussive_organ, percussive_organ_soft, kick, snare, snare_soft, low_tom, hihat,
  hihat_soft, mid_tom, open_hat, high_tom, crash, ride
)

More by Bob Seger