Strudelify

Eli's Coming

Three Dog Night

KeyG majorTempo164 bpm
0:00/0:00
// Eli's Coming — Three Dog Night
// 164 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@8 A@2 B@7 ~ C D E F G H E F G I J K L I E K M@2 N O P Q R S T U V@2 W@2 X@2 Y@2 Z AA E F G H E F G I J K L I E K M@2
  N O P Q R S T U V@2 W@2 X@2 Y@2 Z AA Z AA AB AC AD@2 E F G H E F G H E F AE@5 ~
>`.pickRestart({
  A: "[a1@31 ~]/2", B: "[e2@8 f2@32 e2@10 ~@2 d2@57 ~@3]/7", C: "~@4 a1@3 ~@3 a1@3 ~@3",
  D: "a1@5 ~ a1@4 d2@2 a1 ~ d2 ~", E: "d2@3 ~ d2@3 ~ d2@2 a1 ~ d2 ~ f2@2", F: "~@2 f2@2 c2 ~ f2@3 ~ f2@2 c2 ~ f2 ~",
  G: "g2@3 ~ g2@3 ~ g2@2 d2 ~ g2 ~ a2@2", H: "~@2 a2@2 a1 ~ a1@3 ~ a2@2 a1@3 ~",
  I: "~@2 a2@2 a1 ~ a2@3 ~ a2@2 a1 ~ a2 ~", J: "d2@3 ~ d2@2 ~@2 d2@2 a1 ~ d2 ~ f2@2",
  K: "~@2 f2@3 ~ f2@3 ~ c2 ~ f2@2 c2 ~", L: "g2@3 ~ g2@2 ~@2 g2@2 d2 ~ g2 ~ a2@2",
  M: "[g2@3 ~ g2@2 ~@2 g2@2 d2 ~ g2 ~ a2@4 a1 ~ a1 ~ a2@4 a1 ~ a2 ~ a1 ~]/2", N: "d2@2 ~@2 d2@2 ~@4 a1 ~ c2 ~ d2@2",
  O: "~@2 g1@3 ~ g#1@3 ~ a1 ~ a1 c2 ~@2", P: "d2@3 ~ d2@3 ~ d2 ~ c2 ~ a1 ~ d2@2",
  Q: "~@2 d2@2 g1 ~ g#1@2 ~@2 a1@3 ~ d2 ~", R: "d2@3 ~ d2@3 ~ d2 ~ a1 ~ d2 ~ d2@2",
  S: "~@2 d2@2 g1 ~ g#1@2 ~@2 a1@3 ~@3", T: "e2@4 ~@2 e2@2 e1@2 e2@3 ~ e1@2", U: "a2@3 ~ a2@4 a1@2 a2@2 a1@2 a2@2",
  V: "[d2@3 ~ d2@3 ~ d2 ~ f2 ~ f#2 ~ g2@7 ~ g2@3 ~ g2@4 g1 ~]/2",
  W: "[g2@3 ~ g2@4 g1@2 g2@2 g1 ~ g2@6 g2@2 g1@3 ~ g2@4 g1@2]/2",
  X: "[g2@4 g1@2 g2@4 g1@2 g2 ~ g2@6 g2@4 g1@2 g2@3 ~ g2@2]/2",
  Y: "[~@2 g2@4 g1@3 ~ g2@2 g1@2 g2@5 ~ g2@3 ~ g2@2 g1@2 g2 ~ g2@2]/2", Z: "e2@3 ~ e2@2 e1@3 ~ e2@4 e1@2",
  AA: "e2 ~ e2@2 e1@2 e2@3 ~ e2@2 e1@2 e2 ~", AB: "a1@3 ~ a2 ~ a2@4 a1@2 a2@4",
  AC: "a1 ~ a2!2 ~@2 a1 ~ a2 ~ a2@2 a1 ~ a2 ~",
  AD: "[a2@3 ~ a2 ~ a2@4 a1 ~ a2 ~ a2@4 a1 ~ a2 ~ a1@2 a2 ~ a2@2 a1@2 a2 ~]/2",
  AE: "[g2@3 ~ g2@3 ~ g2@2 d2 ~ g2 ~ a1@66, ~@7 a2 ~@32]/5",
})).s("gm_acoustic_bass").gain(0.64)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B@2 C@4 D@2 E@2 F@4 G H@2 ~ I@3 J@4 K I@3 J@4 K L ~@5 M N O@8 P Q I@3 J@4 K I@3 J@4 K L ~@5 M N O@8 P Q P Q R S T
  U V@2 W@2 V@2 W@2 V@2 X@6
>`.pickRestart({
  A: "~@2 d4@5 a3@9", B: "[~ c4@4 d4@22 ~@5]/2",
  C: "[~@7 d4@6 a3@8 ~@2 a4@7 ~ a4@2 ~@2 a4@3 ~ g4@5 f4@12 ~@8, ~@11 c4@4 d4@11 ~@6]/4",
  D: "[c5@3 ~@2 c5@6 ~ c5@2 ~ c5@2 ~ b4@4 a4@9 ~]/2", E: "[g4@3 ~ a4 g4 a4@8 ~@2]/2",
  F: "[g4@6 ~@2 b4@5 ~@2 g4@4 ~@23 e4@3 e4@2 ~@2 e4 ~ e4 ~ e4 ~@2 e4 ~ e4 ~@2 c4@3, ~@20 a4@7 ~@37, ~@25 d4@25 ~@14]/4",
  G: "~ a3@14 ~", H: "[~@4 [e4,a4] ~@3 [c4,e4,a4] ~ [d4,a4]@3 ~ [a3,a4]@16 ~@2, ~@4 a3@2 ~@4 e4 ~@3 e4@13 ~@5]/2",
  I: "[[d4,f4,a4]@3 ~ [d4,f4,a4]@2 a3 ~ [d4,f4,a4] ~ [d4,f4,a4]@2 ~@2 [f3,a3,c4]@4 c3 ~ [f3,a3,c4]@2 c3 ~ [f3,g3,c4]@2 c3@2 [f3,a3,c4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 d3 ~ [g3,b3,d4] ~ [b3,d4]@2 [a2,e3]@2 [a3,c#4,e4]@2, d3@10 ~@2 f2@17 ~ g2@12 g3 ~@5]/3", // Dm F Fsus2 F G Bm A5 A
  J: "[[a2,e3]@2 [b3,d4,e4]@2 [a2,e3]@2 [a3,c#4,e4]@2 [a2,e3]@2 [d4,e4]@2 [a3,c#4] ~@3 [d4,f4,a4]@3 ~ [d4,f4,a4]@2 a3 ~ [d4,f4,a4] ~ [d4,f4,a4] ~@3 [f3,a3,c4]@4 c3 ~ [f3,a3,c4]@2 c3 ~ [f3,a3,c4]@2 c3@2 [f3,a3,c4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 ~@2 [g3,b3,d4]@2 d3 ~ [g3,b3,d4] ~ [a3,c#4,e4]@2, ~@10 b3 ~@3 d3@12 ~@2 f2@17 ~ g2@13 ~@5]/4", // A5 E7 A5 A A5 Dsus2 A Dm …
  K: "e3@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 e3@2 [a3,c#4,e4]@2 ~@2, a2@13 ~@3, ~ e3 ~@2", // A
  L: "[d3,a3,d4,f4,a4] ~ [d3,a3,d4,f4,a4] ~@5", // Dm
  M: "[e4,g4,b4]@2 [e4,g4,b4]@2 [e4,g4,b4] e4@2 [a3,c#4,e4], [e3,b3], ~@5 [g4,b4]@3", // Em A E5 G
  N: "~@2 [a3,c#4,e4]@2 e3@2 ~@4 [a3,c#4,e4]@4 [d4,f4] ~, a2@15 ~, ~@6 [b3,d4]@9 ~, ~@3 e4@2 ~@3, ~@8 e3@7 ~", // A Dm Bm
  O: "[[d4,f4,a4]@3 ~ [d4,f4,a4]@2 a3@2 [d4,f4,a4] ~ [d4,f4,a4]@3 ~ [g3,b3,d4]@31 ~ [g2,g3,b3,d4]@30 ~@2 [g2,g3,b3,d4]@30 ~@2 [g2,g3,b3,d4]@17 ~, d3@10 ~@4 c#4 ~@113]/8", // Dm G
  P: "[g#4,b4,e5]@3 ~ [g#4,b4,e5]@2 [g#4,b4,e5]@4 ~@2 [a3,e4]@2 [a4,c#5,e5]@2, [e3,b3]@15 ~, ~@10 [g#4,b4,e5]@5 ~", // E A5 A E5 E
  Q: "~@2 [a4,c#5,e5] ~ [a4,c#5,e5]@2 e4@2 [a4,c#5,e5]@2 ~@2 [a4,c#5,e5]@2 ~@2, a3@9 ~ [a3,e4]@4 ~@2, e4 ~@3", // A A5
  R: "~@4 [e4,g4,a4] ~ [e4,g4,a4] ~@5 [d4,f#4,a4]@3 ~, a2@8 ~@2 a2@5 ~", // A7 D
  S: "a2@4 [e4,g4,a4] ~ [e4,g4,a4]@2 ~@4 [d4,f#4,a4]@3 ~, ~@10 a2@5 ~", // A7 D
  T: "~@4 [e4,g4,a4] ~ [e4,g4,a4]@2 ~@4 [d4,f#4,a4]@4, a2@4 ~ a2@3", // A7 D
  U: "~@4 [e4,g4,a4] ~ [e4,g4,a4]@2 ~@4 [d4,f#4,a4]@3 ~, ~@5 a2@2 ~", // A7 D
  V: "[[d4,f4,a4]@3 ~ [d4,f4,a4]@2 d3@2 [d4,f4,a4] ~ [d4,f4,a4] ~ f2@2 [f3,a3,c4]@4 f2@2 [f3,a3,c4]@2 f2 ~ [f3,a3,c4]@2 f2 ~ [f3,a3,c4]@2 g2@2, d3 ~@7]/2", // Dm F
  W: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 ~ [g3,b3,d4] ~ [g3,b3,d4]@2 e3@2 [a3,c#4,e4]@4 e3@2 [a3,c#4,e4]@2 e3@2 [b3,d4,e4]@2 ~@2 [a3,c#4,e4]@3 ~, ~@12 a2@19 ~, ~@13 e3@2 ~]/2", // G A E7 A
  X: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 ~ [g3,b3,d4] ~ [g3,b3,d4]@2 e3@2 [e4,g4,c5,e5]@69 ~@13, ~@3 a2 ~@20]/6", // G C
})).s("gm_epiano2").gain(0.64)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@7 A@4 ~@2 B@4 ~ C D E F G H E F G H E F G H E F G H I ~@5 J K L@8 M@2 E F G H E F G H E F G H E F G H I ~@5 J K L@8
  M@4 N O P Q R@2 S@2 R@2 S@2 R@2 T@6
>`.pickRestart({
  A: "[~@8 [c4,e4]@19 ~@5, ~@7 g3@20 ~@5, ~@15 a3@39 ~@10]/4", // C
  B: "[~@15 e3@41 ~@8, ~@5 d2@51 ~@8, ~ f2@6 ~, ~@11 a2@46 ~@7, ~@13 c3@44 ~@7]/4",
  C: "~@4 [a2,c3,e3,a3]@2 ~@4 [b2,d3,f#3,b3] ~@5", D: "[c3,e3,g3,c4] ~@2 [b2,d3,f#3,b3]@4 ~",
  E: "~@4 [d3,f3,a3] ~@7 [d3,f3,a3] ~@3", F: "~@4 [f3,a3,c4] ~@7 [f3,a3,c4] ~@3",
  G: "~@4 [g3,b3,d4] ~@7 [g3,b3,d4] ~@3", H: "~@4 [a3,c#4,e4] ~@7 [a3,c#4,e4] ~@3",
  I: "[d2,a2,d3,f3,a3] ~ [d2,a2,d3,f3,a3] ~@5", J: "[e3,g3,b3]@7 ~, e2@11 ~@5", K: "[a3,c#4,e4]@7 ~, [a2,e3]",
  L: "[[d3,f3,a3]@12 ~@2 [g2,d3,g3,b3,d4]@30 d3@2 [g2,d3,g3,b3,d4]@31 ~ [g2,d3,g3,b3,d4]@28 ~@4 [g2,d3,g3,b3,d4]@16 ~@2, ~@46 e4 ~@81]/8", // Dm G
  M: "[g#3@16 a3@15 ~, [e2,b2,e3,b3]@31 ~]/2", N: "~@4 [e3,g3,a3] ~ [e3,g3,a3] ~@5 [d3,f#3,a3]@3 ~, a1@8 ~@2 a1@5 ~",
  O: "a1@4 [e3,g3,a3] ~ [e3,g3,a3]@2 ~@4 [d3,f#3,a3]@3 ~, ~@10 a1@5 ~", // A7 D
  P: "~@4 [e3,g3,a3] ~ [e3,g3,a3]@2 ~@4 [d3,f#3,a3]@4, a1@4 ~ a1@3", // A7 D
  Q: "~@4 [e3,g3,a3] ~ [e3,g3,a3]@2 ~@4 [d3,f#3,a3]@2 ~@2, ~@5 a1@2 ~", R: "[[f3,a3,d4]@14 [f3,a3,c4]@17 ~]/2",
  S: "[[g3,b3,d4]@13 ~ [a3,c#4,e4]@17 ~]/2", T: "[[g3,b3,d4]@13 ~ [e3,g3,c4,e4]@69 ~@13]/6",
})).s("gm_electric_guitar_jazz").gain(0.57)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A@8 B@8 ~@2 C D E F G H I@2 G H E F G H I@2 G H J K@3 L@2 M N O@8 P@2 E F G H I@2 G H E F G H I@2 G H J K@3 L@2 M N
  O@8 P@4 Q@4 R@2 S@2 R@2 S@2 R@2 T@5 ~
>`.pickRestart({
  A: "[[d2,d3]@54 ~@3 f2@71, ~@27 e3 f3@36, ~@55 e2@2 ~@71]/8", // D
  B: "[[a2,a3]@39 ~@2 [f4,a4,c5]@32 ~ [g4,b4]@11 [d4,f4,a4]@43, e6, a5@87 ~@41, g5@36 ~@3 f2@35 ~@54, c6@25 ~@15 f3@32 ~ e4@11 ~@44]/8", // A F G Dm
  C: "~@4 [a4,c5,e5,a5]@2 ~@4 [b4,d5,f#5] ~@5, ~@5 b5 ~@2", D: "[c5,e5,g5,c6]@2 ~@4 [b4,d5,f#5,b5]@9 ~",
  E: "[a4,d5,f5]@15 ~", F: "[a4,c5,f5]", G: "[b4,d5,g5]@15 ~", H: "[c#5,e5,a5]@7 ~",
  I: "[[d5,f5]@14 [c5,f5]@17 ~, a4@31 ~, c5 ~@31]/2", J: "[d4,a4,d5,f5,a5] ~ [d4,a4,d5,f5,a5] ~@5",
  K: "[~@16 [a4,c5,d5,f5]@31 ~, ~@15 d4@32 ~]/3", L: "[[d4,a4,c5,e5,f5]@31 ~]/2", M: "[e5,g5,b5]@7 ~, e4@11 ~@5",
  N: "[a5,c#6,e6]@7 ~, [a4,e5]", // A A5
  O: "[[d5,f5,a5]@13 ~ [g4,d5,g5,b5,d6]@30 d5@2 [g4,d5,g5,b5,d6]@31 ~ [g4,d5,g5,b5,d6]@29 ~@3 [g4,d5,g5,b5,d6]@16 ~@2, ~@46 e6 ~@81]/8", // Dm G
  P: "[g#5@16 a5@15 ~, [e4,b4,e5,b5]@31 ~]/2", // E5
  Q: "[~@4 [e5,g5,e6,g6] ~ [e5,g5,e6,g6]@2 ~@4 [d5,f#5,d6,f#6]@5 ~@3 [e5,g5,e6,g6] ~ [e5,g5,e6,g6] ~@5 [d5,f#5,d6,f#6]@4 ~@4 [e5,g5,e6,g6] ~ [e5,g5,e6,g6]@2 ~@4 [d5,f#5,d6,f#6]@7 ~ [e5,g5,e6,g6] ~ [g5,g6]@2 ~@4 [d5,f#5,d6,f#6]@2 ~@2, [a5,a6]@63 ~, ~@54 [e5,e6] ~@9]/4", // Em D Em D Em D Em G …
  R: "[[f5,a5,d6]@14 [f5,a5,c6]@17 ~]/2", S: "[[g5,b5,d6]@13 ~ [a5,c#6,e6]@17 ~]/2",
  T: "[[g5,b5,d6]@13 ~ [e5,g5,c6,e6]@66]/5", // G C
})).s("gm_rock_organ").gain(0.56)

// drums · kick
const kick = s("bd").struct("<~@18 A@18 B C B C B C A@3 D A@24 B C B C B C A@3 D A@25 ~@4 E>".pickRestart({
  A: "x!2 ~ x ~ x ~ x", B: "~@5 x ~ x", C: "x!2 ~@3 x ~ x", D: "~ x ~ x ~ x ~ x", E: "x",
})).gain(0.71)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@31 A ~@5 A ~@3 A ~@15 A ~@13 A ~@3 A ~@17 A ~@10 A ~@5>".pickRestart({
  A: "~@8 x!4 ~@4",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@19 [~@6 x!2] ~@69 [~@5 x!3] ~@20>").gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<~@18 [x!4]!87 ~@5>").gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@17 A B@18 ~@6 B@28 ~@6 B@28 C ~@5>".pickRestart({
  A: "x!4", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@3 x!3 ~@2] ~@69 [~ x!4 ~@3] ~@20>").gain(0.71)

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

stack(
  bass, epiano2, electric_guitar_jazz, rock_organ, kick, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, crash
)

More by Three Dog Night