Strudelify

20th Century Fox

The Doors

KeyA majorTempo120 bpm
0:00/0:00
// 20th Century Fox — The Doors
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A B C B C B C B C B C B C D E F@2 G H G H I J K L M@2 N O B C B C D P F@2 N@3 O B C B C B C B C D E F@2 G H G H I J K
  L M@2 N@6 Q R S
>`.pickRestart({
  A: "~@5 a3 [c4,c#4] e4", B: "a4@2 e4@2 g4 ~ c#4@3 ~ a3@2 [c4,c#4]@2 e4@2, ~@6 c4 ~@9",
  C: "a4@2 e4@2 g4@2 c4@3 ~ a3@2 [c4,c#4]@2 e4@2, ~@6 b3 ~@9", // C#maj7
  D: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~", // A G
  E: "[a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // D F
  F: "[b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~", // E7
  G: "[a3,e4,a4] ~ [a3,e4,a4] ~@5", H: "[g3,b3,d4,g4]@5 ~ [a3,c#4,e4,a4]@8 ~@2",
  I: "~@2 c4@2 e4@3 ~@5 c4@2 e4@2, a3@4 a4@3 ~, ~@5 a3@2 ~", J: "~@2 d4 g3 ~@2 b3 d4, g3@3 ~@2 g3@2 ~, ~ b3@2 ~ g4@3 ~",
  K: "~@2 c4 f3 ~@2 a3 c4, f3@3 ~@2 f3@2 ~, ~ a3@2 ~ f4@3 ~",
  L: "~@2 g4 e4 ~@2 e4 g4, c4@3 ~@2 c4@2 ~, ~ e4@2 ~ c5@3 ~",
  M: "e3 ~ e3 ~ [g#3,b3,d4,e4]@4 e3 ~ e3 ~ [g#3,b3,d4,e4]@4", // E7
  N: "a3@3 ~ [c#4,e4,g4,a4]@2 a3 ~ [a3,d4,f#4,a4]@3 ~ [a3,d4,f#4,a4]@3 ~", // A7 D
  O: "e3 ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ [b3,d4,e4,g#4] ~ a3@2 [c4,c#4]@2 e4@2", // E7 C#maj7
  P: "[f3,a3,c4] ~ [f3,a3,c4] ~ [f#3,a3,d4] ~ [f#3,a3,d4] ~", // F D
  Q: "a3@3 ~ [c#4,e4,g4,a4]@2 a3 ~ [b3,d4,g4]@2 ~ [b3,d4,g4]@2 [b3,d4,g4]@2 ~", R: "[a3,c#4,e4,a4]",
  S: "[a3,c#4,e4,a4] ~@15", // A
})).s("gm_electric_guitar_clean").gain(0.36)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@3 A@10 B C D E F G F G H I J K L M N O A@4 B P D E N@3 O A@8 B C D E F G F G H I J K L M N@6 Q R S
>`.pickRestart({
  A: "a1@2 c#2 e2 g1@2 b1 d2", B: "a2 ~ a2 ~ g2 ~ g2 ~", C: "f#2 ~ f#2 ~ f2 ~ f2 ~",
  D: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", E: "e2 ~ e2 ~ f#2 ~ f#2 ~ g2 ~ g2 ~ g#2 ~ g#2 ~", F: "a1 ~ a1 ~@5",
  G: "g1@3 ~ g1@2 a1@3 ~ a1 ~ a1 ~ a1 ~", H: "a1@2 c2@2 e2@2 c2 e2", I: "g1@2 b1@2 d2@2 b1 d2",
  J: "f1@2 a1@2 c2@2 a1 c2", K: "c2@2 e2@2 g2@2 e2 g2", L: "e2!8", M: "e2!2 f#2!2 g2!2 g#2!2",
  N: "a1@2 c#2 e2 d2@2 f#2 a2", O: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e1 ~", P: "f2 ~ f2 ~ d2 ~ d2 ~",
  Q: "a1@4 c#2@2 e2@2 d2@2 ~ d2@2 d2@2 ~", R: "a1", S: "a1 ~@15",
})).s("gm_fretless_bass").gain(0.36)

// chords · drawbar organ · "'60's Organ"
const drawbar_organ = note(`<
  ~@2 A B@10 C D E@2 F G F G H I J K L M N O B@4 C P E@2 Q@3 O B@8 C D E@2 F G F G H I J K L M Q@6 R S T
>`.pickRestart({
  A: "~@14 e4 ~", B: "a4@4 [c#5,e5] ~ [b4,d5]@4 g4@3 ~ e4@2",
  C: "[c#4,e4,a4] ~ [c#4,e4,a4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~", // A G
  D: "[a3,d4,f#4] ~ [a3,d4,f#4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // D F
  E: "a#4 ~ d5@2 e5@2 a#4 ~@3 d5@2 e5@2 d5@2, b4@5 ~ b4@9 ~", F: "[a3,e4,a4] ~ [a3,e4,a4] ~@5",
  G: "[g3,b3,d4,g4]@5 ~ [a3,c#4,e4,a4]@8 ~@2", H: "~@2 c5@2 e5@2 c5 e5, a4@15 ~", I: "~@2 b4@2 d5@2 b4 d5, g4@15 ~",
  J: "~@2 a4@2 c5@2 a4 c5, f4@15 ~", K: "~@2 e5@2 g5@2 e5 g5, c5@15 ~",
  L: "~@4 [b5,d6]@3 ~ a5 [a5,a#5] [e5,g5] ~ g5 ~ a5 ~, ~@4 a#5 ~@11", // Bm A#maj7 Em
  M: "[a#5,b5] ~ a5 [a5,a#5] e5@2 d5@4 e5@2 d5@2 e5@2, ~@4 g5 ~@11", N: "~@4 c#5@2 e5@2 ~@4 f#5@2 a5 ~, a4@3 ~ d5@3 ~",
  O: "e4 ~ [c5,d5,e5,g#5] ~ [b4,e5,g#5] ~ [b4,d5,e5,g#5] ~ [b4,d5,e5,g#5] ~ [b4,d5,e5,g#5] ~ [b4,d5,e5,g#5] ~ e4 ~", // Caug E E7
  P: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,d4,f#4] ~ [a3,d4,f#4] ~", Q: "~@4 c#5@2 e5 ~@5 f#5@2 a5 ~, a4@3 ~ d5@3 ~",
  R: "~@4 c#5@2 e5 ~ [b4,d5,g5]@2 ~ [b4,d5,g5]@2 [b4,d5,g5]@2 ~, a4@3 ~@5", S: "[c#5,e5,a5]@15 ~",
  T: "[a4,c#5,e5,a5] ~@15", // A
})).s("gm_drawbar_organ").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C B@3 C B@4 D@2 E F G H G H I@4 E J K L B@4 D@2 E F K@3 L B@8 D@2 E F G H G H I@4 E J K@6 M N@2
>`.pickRestart({
  A: "~@7 x", B: "x ~@2 x ~ x ~ x", C: "x ~@2 x ~ x ~@2", D: "x!2", E: "x!2 ~ x!3 ~ x", F: "x!2 ~ x ~@2 x!2",
  G: "x ~ x ~@2 x ~@2", H: "~ x ~ x ~ x ~ x", I: "x ~@4 x ~ x", J: "x!2 ~ x ~ x ~ x", K: "x ~@2 x!2 ~@2 x",
  L: "~ x!3 ~ x!3", M: "x ~@5 x ~ x ~@2 x ~ x ~@2", N: "x",
})).gain(0.46)

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

// drums · hihat
const hihat = s("hh").struct("<A@3 B@10 A@2 B@2 A@4 B@12 A@2 B@14 A@2 B@2 A@4 B@12 C A ~>".pickRestart({
  A: "x!4", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~@2 x ~ x ~@2",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@9 B ~ C ~@7 A ~@3 C ~@11 A ~@9 B ~@9>".pickRestart({
  A: "~@15 x", B: "~@14 x!2", C: "~@7 x",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@9 B ~ C ~@7 A ~@3 C ~@11 A ~@9 B ~@9>".pickRestart({
  A: "~@12 x!3 ~", B: "~@8 x!6 ~@2", C: "~@12 x!2 ~@2",
})).gain(0.46)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@17 A ~ A ~@33 A ~ A ~@16>".pickRestart({
  A: "x!2 ~@2",
})).gain(0.46)

stack(electric_guitar_clean, bass, drawbar_organ, kick, snare, hihat, mid_tom, high_tom, crash, tambourine)

More by The Doors