Strudelify

Doctor Robert

The Beatles

KeyA majorTempo160 bpm
0:00/0:00
// Doctor Robert — The Beatles
// 160 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · drawbar organ · "Organ"
const drawbar_organ = note("<~@40 A@2 B C A@2 D@2 E ~@19 A@2 B C A@2 D@2 E ~@13>".pickRestart({
  A: "[f#4@3 d#4, [b4,d#5,f#5]]/2", B: "[e4,b4,e5,g#5]", C: "f#4 d#4, [b4,d#5,f#5]", D: "[e4,b4,e5,g#5]/2",
  E: "[e4,c#5,a5]", // A
})).s("gm_drawbar_organ").gain(0.32)

// chords · overdriven guitar · "Guitar 1"
const overdriven_guitar = note(`<
  A@8 B@4 C@5 D E F G@2 A@8 C@5 D E F H I J K@7 A@8 L@2 C@5 D E F H I J K@7 A@8 M@2 N ~ O@2
>`.pickRestart({
  A: "[a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 g3, ~@7 g3@3 ~@5 g3@3 ~@5 g3@3 ~@5 g3@3 ~@5 g3@3 ~@5 g3@3 ~@5 g3@3 ~@6]/8", // Gdim D5 Gdim D5 Gdim D5 Gdim D5 …
  B: "[a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 g3, ~@7 g3@3 ~@5 g3@3 ~@5 g3@3 ~@6]/4", // Gdim D5 Gdim D5 Gdim D5 Gdim D5
  C: "[f#2@2 [e3,a#3]@2 f#2 [f#3,b3]@2 ~ f#2@2 [e3,a#3]@2 f#2 [f#3,b3]@2 ~ f#2@2 [e3,a#3]@2 f#2 [f#3,b3]@2 ~ f#2@2 [e3,a#3]@2 f#2 [f#3,b3]@2 ~ f#2@2 [e3,a#3]@2 f#2 [f#3,b3]@2 e3, ~@7 e3@3 ~@5 e3@3 ~@5 e3@3 ~@5 e3@3 ~@6]/5", // Edim B5 Edim B5 Edim B5 Edim B5 …
  D: "[f#2,e3]@2 [e3,a#3]@2 f#2 [f#3,b3]@2 e3", E: "[d3,g#3]@2 [d3,g#3]@2 e2 [e3,a3]@2 [e3,a3]",
  F: "f#2@2 f#3 f#2 [f#2,c#3] [c#3,f#3] f#2@2", G: "[b2@2 b3@2 b2 [b3,e4]@2 a3@3 a3@2 b3 [b3,e4] ~ d3]/2",
  H: "b3@3 b3 b3@3 b3", I: "b2 [f#3,b3,d#4] b2 [f#3,b3,d#4]", J: "b3!2", K: "b3@8 b3@7 b3",
  L: "[a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@2 g3, ~@7 g3@3 ~@6]/2", // Gdim D5 Gdim D5
  M: "[a2@2 [g3,c#4]@2 a2 [a3,d4]@2 ~ a2@2 [g3,c#4]@2 a2 [a3,d4]@3, ~@7 g3@3 ~@6]/2", N: "[f#2,c#3,f#3,a#3,c#4,f#4]!4",
  O: "[[b2,f#3,b3,d#4,f#4,b4]!3 [b2,f#3,b3,d#4,f#4,b4]@5]/2", // B
})).s("gm_overdriven_guitar").gain(0.36).pan(0.7)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@2 B A B C B C B C B A D E D E D F G F H I B C B C B C B A D E D E D F G F J K L M N O N M N M P Q B C B C B C B A D
  E D E D F G F J K L M N O N M N M P R S R B T B@2 U V W X Y@2
>`.pickRestart({
  A: "a2@3 a2 e2@2 g2@2", B: "a2@3 a2 e2@3 e2", C: "a2@3 a2 e2@2 e2@2", D: "f#2@3 f#2 c#2@3 c#2",
  E: "f#2@3 f#2 a1 b1 c#2@2", F: "f#2@3 f#2 c#2@2 f#2@2", G: "e2@3 d2 a1@2 e1@2", H: "b1@3 b1 f#1@2 a1@2",
  I: "b1@3 b1 f#2@2 b2@2", J: "b1@3 b1 f#2@4", K: "b1@3 b1 b1@4", L: "b2@2 b2!2", M: "b2!2", N: "b2!4",
  O: "b2@8 b2@7 b2", P: "a2!2 e2 g2", Q: "a2@3 a2 a1 d2 e2@2", R: "a2@3 a2!2 d2 e2@2", S: "a2@3 a2 e2@2 d2@2",
  T: "a2@3 a2 a1 d2 e2 g2", U: "a2@3 a2 e2@2 g#2@2", V: "a2@3 a2 e2@4", W: "d4!3 a3", X: "d4!2",
  Y: "[g#4@2 d4 g#4@5]/2",
})).s("gm_electric_bass_finger").gain(0.45).pan(0.3)

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

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!40 ~@8 [~ x ~ x]!20 ~@8 [~ x ~ x]!13 ~>").gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<[x!8]!40 ~@8 [x!8]!20 ~@8 [x!8]!13 ~>").gain(0.32)

stack(drawbar_organ, overdriven_guitar, bass, kick, snare, open_hat)

More by The Beatles