Strudelify

Blinded by the Light

Manfred Mann

KeyF majorTempo142 bpm
0:00/0:00
// Blinded by the Light — Manfred Mann
// 142 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Rock Organ clicks" rock organ (copy of ch 2 "top octaves" recorder)
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/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 · recorder · "top octaves"
const recorder = note(`<
  A B C D E B C D E B C D E B C D E B C ~@28 D E B C D E B C D E B C D E B C ~@24 D E B C D ~@31
>`.pickRestart({
  A: "[a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~ [a5,c6] ~", // Am
  B: "[g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~ [g5,bb5] ~", // Gm
  C: "[f5,c6] ~ [f5,c6] ~ [g5,c6] ~ [g5,c6] ~ [a5,c6] ~ [a5,c6] ~ [g5,c6] ~ [f5,c6] ~", // F5 C5 Am C5 F5
  D: "[bb5,d6] ~ [bb5,d6] ~ [bb5,d6] ~ [bb5,d6] ~ [bb5,d6] ~ [bb5,d6] ~ [bb5,d6] ~ [bb5,d6] ~", // Bb
  E: "[a5,c6] ~ [a5,c6] ~ [a5,d6] ~ [a5,d6] ~ [a5,e6] ~ [a5,e6] ~ [a5,d6] ~ [a5,c6] ~", // Am D5 A5 D5 Am
})).s("gm_recorder").gain(0.26)

// chords · rock organ · "Rock Organ chords"
const rock_organ = note(`<
  ~@15 A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@12 A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D ~@13 E@4 F@16 G@3
>`.pickRestart({
  A: "[bb4,d5,f5]@3 ~", B: "[a4,c5,e5]@3 ~", C: "[g4,bb4,d5]@13 ~@3", D: "[f4,a4,c5]@3 ~",
  E: "[~ [a5,d6,f6]@2 [g5,c6,e6]@2 [f5,bb5,d6]@3]/4", // Dm C Bb
  F: "[[g5,c6,e6] [a5,d6,f6]@4 [a5,c6,f6]@2 [g5,c6,e6]@2 [a5,d6,f6]@2 [g5,c6,e6]@2 [f5,bb5,d6]@3]/8", // C Dm F C Dm C Bb
  G: "[[g5,c6,e6] [a5,d6,f6]@4 ~]/3", // C Dm
})).s("gm_rock_organ").gain(0.26)

// other · cello
const cello = note("<~@15 A@8 ~@16 B C D E F G H I ~@8 A@8 ~@16 B C D E F G H I ~@36>".pickRestart({
  A: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", B: "bb2@2 ~@4 bb2@2 ~@4 bb2@3 ~", C: "a2@4 ~@2 a2@5 ~ a2@3 ~",
  D: "g2@2 ~ g2@2 ~@3", E: "f2@4 ~@2 f2@5 ~ f2@4", F: "c3@3 ~@2 c3@5 ~@2 c3@3 ~, ~@5 db3 ~@10",
  G: "c3@5 ~ c3@5 ~ c3@3 ~", H: "c3@5 ~ c3@5 ~ c3@4", I: "c3@4 ~ c3@5 ~@2 c3@2 ~@2",
})).s("gm_cello").gain(0.51)

// other · lead 2 sawtooth · "Lead synth"
const lead_2_sawtooth = note("<~@39 A B C A B C A B ~@32 A B C A B C A B ~@36>".pickRestart({
  A: "a4 g4 f4 a4 g4 f4 a4 g4 f4 a4 g4 f4 a4 g4 f4 a4", B: "g4 f4 a4 g4 f4 a4 g4 f4 a4 g4 f4 a4 g4 f4 a4 g4",
  C: "f4 a4 g4 f4 a4 g4 f4 a4 g4 f4 a4 g4 f4 a4 g4 f4",
})).s("gm_lead_2_sawtooth").gain(0.51)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  A ~@14 B@2 C D E F G H E@3 I E F G H E@3 I E F G H J K L M N@3 O P ~@7 B@2 C D E F G H E@3 I E F G H E@3 I E F G H J K
  L M N@3 O P ~@4 Q@2 R@2 S@4 T@4 U@2 V@6 W@2 V@6 W@2 ~
>`.pickRestart({
  A: "a1 ~@7", B: "[c2@26 ~@2 c2 [d2,e2] [f2,g2] [a2,b2]]/2", C: "c3@3 ~", D: "e3@2 f3@2 g3@9 ~@3",
  E: "bb1 ~ c2@12 ~@2", F: "a1 ~ c2@12 ~@2", G: "g1 ~ c2@12 ~@2", H: "bb1 ~ c2@4 f1@8 ~@2",
  I: "bb1 ~ c2@4 f1@4 g1@2 a1@2 bb1@2", J: "bb1@4 ~@2 bb1@4 c2@2 bb1@3 ~", K: "a1@4 ~@2 a1@4 bb1@2 a1@3 ~",
  L: "g1@4 ~@2 g1@4 a1@2 g1@3 ~", M: "f1 c2@2 f1@2 g1 a1 bb1", N: "c2@4 ~@2 c2@4 c2@2 c2@3 ~",
  O: "c2@2 c2@4 f1@4 g1@2 a1@2 bb1 ~", P: "bb1 ~@15", Q: "[a1 ~ a1 ~ c2 ~ d2@18 ~@8]/2", R: "[~ c2@3]/2",
  S: "[~@8 bb1@14 ~@2 a1@15 ~ g1@23 ~]/4", T: "[~@4 a1@3 ~ d2@12 ~@4 c2@12 ~@4 bb1@20 ~@4]/4", U: "[c2@2 d2@5 ~]/2",
  V: "[~@2 f1@3 ~ e1@3 ~ d1@3 ~ c2@3 ~ bb1@5 ~]/6", W: "[c2 d2@2 ~]/2",
})).s("gm_electric_bass_finger").gain(0.51)

// drums · kick
const kick = s("bd").struct("<A ~@14 B@28 C@4 A ~@14 B@25 A ~@35>".pickRestart({
  A: "x", B: "x ~@6 x", C: "x!2 ~@2 x!2 ~ x",
})).gain(0.51)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@92 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C>".pickRestart({
  A: "~@3 x ~@4", B: "~ x", C: "~@3 x!2 ~ x ~",
})).gain(0.31)

// drums · snare
const snare = s("sd").struct("<A ~@14 B@24 C@8 A ~@14 B@17 C@8 A ~@35>".pickRestart({
  A: "x", B: "~ x", C: "~ x ~ x",
})).gain(0.51)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@92 [~@3 x ~@4] x!30>").gain(0.31)

// drums · hihat
const hihat = s("hh").struct(`<
  A@16 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 A@15 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@5 C D@30
>`.pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "~@2 x!3 ~ x!2 ~@2 x!3 ~ x!2", C: "~@3 x", D: "x!4",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@92 [~@3 x ~@4] ~@30>").gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct("<~@92 [~ x!2 ~@5] ~@30>").gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~@92 x ~@30>").gain(0.51)

// drums · crash
const crash = s("cr").struct("<A ~@14 B@24 ~@8 A ~@14 B@17 ~@8 A ~@4 C ~@30>".pickRestart({
  A: "x", B: "~ x", C: "~@3 x ~@4",
})).gain(0.51)

stack(
  recorder, rock_organ, cello, lead_2_sawtooth, bass, kick, kick_soft, snare, snare_soft, hihat, low_tom, mid_tom,
  high_tom, crash
)

More by Manfred Mann