Strudelify

I Go Crazy

Paul Davis

KeyE minorTempo70 bpm
0:00/0:00
// I Go Crazy — Paul Davis
// 70 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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(`<
  ~ A B C D E F ~@2 G F C H I J K@2 L M N O P Q L M R@2 F@2 S T F C H I J K@2 L M N O P Q L M U V W C H I J K@2 L M N O
  P Q L M X Y Z AA Z AB AC@2 ~@3
>`.pickRestart({
  A: "a1@15 ~", B: "e1@7 ~ d2@8", C: "c2@15 ~", D: "g1@6 a1@9 ~", E: "b1@3 c2@5", F: "g1@7 ~", G: "~@7 d2",
  H: "a1@5 ~ e1@9 ~", I: "b1@4 ~@2 c2@9 ~", J: "a1@2 ~ e1@4 ~", K: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  L: "a1@5 ~ a1 ~ a1@8", M: "e1@5 ~ e1@2 d2@7 ~", N: "c2@5 ~ c2 ~ c2@8", O: "g1@5 ~ g1@2 a1@8",
  P: "e2@4 e2 ~ e1@4 e1@2 e2@4", Q: "e1 ~ e1 ~ e1@2 e2@3 ~ e2@3 b1 e1@2", R: "[c2@31 ~]/2", S: "c2@7 ~",
  T: "d2@9 ~@5 d2@2", U: "c2@13 ~ g1@2", V: "c2@13 ~ d2@2", W: "g1@7 ~, d2 ~@15", X: "c2@5 ~ c2 ~ c2@5 ~ c2@2",
  Y: "e2@4 ~@2 e2 ~ e2@5 ~ e2@2", Z: "e1@5 ~ e1 ~ e1@6 b1@2", AA: "e2@5 ~ e2 ~ e2@8", AB: "e2@5 ~ e2 ~ e2@6 b1@2",
  AC: "[e1@3 ~]/2",
})).s("gm_acoustic_bass").gain(0.72)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@2 E@2 F G H I J K L M N O P Q R S T U V W X@2 I F G H I J K L M N O P Q R S T U V W X@2 Y Z AA AB AC N O P Q R
  S T U AD@2 AE AF AG AH@3 AI@2 ~@3
>`.pickRestart({
  A: "~@5 c5 b4 a4", B: "~@3 [a3,c4,e4], a2@3 a2@5, [a3,c4,e4]!3 ~, ~ e3@4 e3@3",
  C: "~@2 [g3,b3,d4]@2 ~@3 a3, e2@2 [d4,f#4]!2, [g3,b3,d4]@2 ~@2 a3@3 ~, ~ b2@3 d3@4, ~@5 f#3@3", // G D G
  D: "[[b3,c4]@4 ~@4 b4@6 ~@2 [g2,d3,g3,d4,f4,a4,c5]@6 [a2,e3,a3,c4,e4,g4,b4]@9 ~, [c3,e3,g3]@7 ~@9, [e4,g4]@3 e4@3 ~@10, ~@4 b3@3 g4@7 b4@6 ~@12, ~@5 c4@5 ~@22]/2", // Cmaj7 Dm7 Am7 C Em
  E: "[[b2,a3,d4,f#4]@3 [c3,g3]@3 ~@9 d3, ~@3 [b3,c4,e4,g4]@4 c4@7 [g3,b3,d4]@2, ~@3 c3@5, ~@13 g3@2 e4@17, ~@8 [g2,g3,b3,d4] d3 [g3,b3,d4] d3 [g3,b3,d4] g2@3]/2", // Bm7 C5 Cmaj7 G
  F: "~@2 a3 ~@2 a3!3, g2, [a3,d4,f#4] [d4,f#4]!3, ~ d3@4 d3@3, ~@3 a3@2 ~@3", // D
  G: "g3@2 ~@10 [c4,e4,g4]@2 e3 ~, [e3,b3]@15 ~, c3@6 c3@9 ~, [c4,e4,g4]!3 ~, ~@2 g3@8 g3@5 ~", // C E5 C
  H: "[d3,a3,d4,g4]@6 d3@4 ~@4 f#4 ~, ~@6 [d4,f#4]@7 d4@2 ~, ~@6 a3@6 a3@3 ~, ~@10 d3@5 ~", // Dsus4 D
  I: "~@7 d3, g2@5 g2@3, [g3,b3,d4]!4, ~ d3@2 d3@4 ~", // G
  J: "~@12 [c4,e4,g4]@2 b3 ~, c3@15 ~, b3@3 b3@2 b3@2 ~, [c4,e4,g4]!3 ~, ~@2 g3@13 ~", // C
  K: "~ e3@2 [e2,e3,g3,b3]@5, [a2,g3,c4,e4]@3 ~@5", // Em Am7
  L: "[b2,a3,d4,f#4]@3 ~@4 g4, ~@6 c3@7 d4@3, ~@3 [d4,g4]@3 b3@2, ~@6 b3@5 g3@5, ~@5 e3@3", // Bm7 G5
  M: "[a2,g3,c4,e4]@6 [g3,b3]@6 [e3,g3,b3]@3 ~, ~@6 [e2,d3]@9 ~", // Am7 G Em E7
  N: "[e3,a3,d4,f#4]@5 ~ e3@4 ~@4 e3@2, ~@3 [b3,e4,g4]@3 [b3,e4,g4]@2, ~@5 e3@2 ~", // D Em
  O: "e3@2 e3@2 e3@2 e3@4 ~@2 [e4,g4]@3 ~, [a3,d4,f#4]@6 [b3,e4,g4]@5 b3@4 ~, ~@10 e3@5 ~", // Em D Em
  P: "~@7 e3, [a2,g3], [c4,e4] [a3,c4,e4]!3, ~ e3@2 e3@2 e3@2 ~", // A7 C Am
  Q: "[g3,b3,d4]@2 [g3,b3,d4]@2 ~@3 f#4, e2 [d3,a4], ~@8 [d4,f#4]@5 d4@3, ~@2 a3!2, ~@5 f#3@3", // G D5 D
  R: "[b3,d4,g4]@2 ~@5 g3, [c3,e3], g3@3 g3@2 g3@2 ~, ~@4 [b3,d4,g4]@3 b3@5 [b3,d4,g4]@4, ~@2 [d4,g4] ~", // G C G G5
  S: "[g3,c4,f4,a4]@7 ~ [c4,e4,g4]@4 [c4,e4,g4]@3 ~, ~@8 a3@7 ~", // F C
  T: "[a3,d4,f#4]@3 ~@3 [d4,g4,b4]@2, ~@3 e3@5, ~@6 [b3,d4,g4,b4]@5 b3@5, ~@5 g3@3", // D G
  U: "[b3,d4,f#4]@2 [b3,d4,f#4]@4 ~@8 d4 ~, e3@6 e3@7 g4@2 ~, ~@6 [g4,b4]@4 d4 g4 b4@3 ~, ~@6 [b3,d4]@3 b3@6 ~, ~@8 g3@7 ~", // Bm G Bm
  V: "~@2 e3@2 [a3,c4,e4]@2 ~@6 [a3,c4,e4]@2 e3 ~, a2@15 ~, [g3,c4,e4]@5 ~ e3@4 e3@4 ~@2, ~@2 [a3,c4,e4] ~", // Am C Am
  W: "[g3,b3,d4]@4 [g3,b3,d4]@3 ~@7 f#4 ~, e2@7 ~ [d3,f#4,a4]@7 ~, ~@8 [a3,d4]@4 a3@3 ~, ~@10 f#3@5 ~, ~@13 d4@2 ~", // G D D5
  X: "[~@2 [b5,d6] [c6,e6] [b5,d6] [g5,b5] [e5,g5] ~ [b5,d6] [c6,e6] [b5,d6] [g5,b5] [e5,g5] ~ [b5,d6] ~ b5 g5 ~@4 b5 g5 ~@4 b5 [g5,b5] [e5,g5] ~, [b3,d4,g4]@26 [b5,d6] [c6,e6] d6@2 ~@2, c3@7 g3@8 ~, ~@15 [c6,e6] d6 b5 [e5,g5]@2 [b5,d6] [c6,e6] d6 b5 [e5,g5]@6 ~@2, ~@8 c3@7 ~]/2", // Bm C Bm G Em Bm C Bm …
  Y: "d4!2 ~ g4 ~ a4 ~ [d3,b4], g2@5 g2@3, [g3,b3] [g3,b3,d4] g4@2, ~ d3@2 d3@4 ~, ~@2 [g3,b3,d4] [g3,b3,d4,a4]", // G
  Z: "~@14 b3 e4, c3@7 g4, b4@12 [c4,e4,g4,d5]@3 ~, b3@4 [c4,e4,g4]@2 b3@2 [c4,e4,g4]@2 b3@3 b4@2 ~, [c4,e4,g4]@2 g3@13 ~", // C
  AA: "~@2 e4 ~@4 d4, [a2,g3,c4]@3 [e2,e3,g3,b3]@5, e4@2 ~@3 d4@2 ~, ~ [e3,g4]@2 ~@3 e4@2", // Am7 Em
  AB: "~@2 b3 ~@4 g4, [b2,a3,d4,f#4]@6 c3@7 d4@3, ~@3 [d4,g4]@3 b3@2, ~@6 [g3,b3]@5 g3@5, ~@5 e3@3", // Bm7 G5 G
  AC: "~@4 e4@2 ~@6 [e3,g3,b3,e4]@3 ~, [a2,g3,c4]@6 [e2,d3]@9 ~, e4@2 ~ [g3,b3]@3 ~@2, ~@2 g4@4 ~@4 d4@5 ~", // Em Am7 E7 G
  AD: "[~@4 [b5,d6] [g5,b5] [e5,g5] ~@3 b5 g5 [a3,c4,e4,e5,g5]@2 [e3,b5,d6] ~ b5 g5 ~@4 [b5,d6] g5 ~@4 b5 g5 [f#4,e5,g5] ~, a2@15 ~ e2@7 ~ [a3,d4,g5]@4 [a3,d6] [d4,b5]@2 ~, [g3,c4,e4]@4 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 b5@3 ~@3 b5 [e5,g5]@5 ~@3 f#3@5 ~, ~@2 [e3,b5,d6]@3 ~ e3@3 [c6,e6]@5 ~ [c6,e6]@6 [c6,e6]@2 b5@3 [b5,d6] [c6,e6]@4 ~, ~@3 [c6,e6]@2 ~@3 [b5,d6]@2 [e3,d6]@4 ~@2 [g3,b3,d4,d6]@4 [g3,b3,d4,b5,d6]@3 ~ [d3,f#4,a4,e5]@7 ~]/2", // Bm G Em Am7 E7 Bm C Dsus4 …
  AE: "~@2 d6 ~ b5 g5 ~@4 b5 g5 ~@3 [c6,e6], [c3,e4,g4]@3 [g3,e5,g5]@2 d6 [g3,b3,e4,g4,e5,g5]@2, b3@3 [c6,e6]@5 [b5,d6] [c6,e6]@6 ~, ~@2 g3@3 b5@3 [b3,e4,g4]@3 b5@3 [b5,d6]@2, ~ b5 [b3,d6]@2 c3@4", // C Em C Bm C Em Bm
  AF: "b5 g5 ~@4 b5 g5 ~@4 b5 g5 [b3,e5,g5]@2, [e2,g3]@13 b5@3, [e3,b3]@5 [e3,c6,e6]@3 [g4,b4]@2 [b3,b5,d6] [c6,e6]@5, d6@2 [e5,g5]@5 e4@9, ~ b5@3 [b5,d6]@2 [b3,d6] b5 [e5,g5]@4 [e3,g4,b4,d6]@4", // Em E5 C G Bm C Em Bm …
  AG: "g5!3 g5@3 [d4,g4,b4]@2 ~@2 a5 f#5 [d4,b4] e5 b3 d5, [e3,b3,d4,g4,b4]@3 [e3,b3,g5]@2 e3@2 ~, ~@8 [d4,g4,b4]@3 b3@2 ~@3", // G Em7 Em G
  AH: "[[d4,f#4,a4]@6 ~@9 d4 ~@12 d4 [d4,g4,b4] d4!2 ~ d6@3 ~@9 d5@3, e5@10 b3 [d4,d6] f#4 a4 [f#4,c#6]@2 [d4,g4,b4]@6 [d4,g4,b4] e6 [d4,g4,b4]@2 e3 g6@2 g6 [g4,b4,f#6]@2 [d4,f#4,a4]@6 [d4,f#4,a4]@2 [d4,f#4,a4]@2 e3 [b3,f#5] [d4,f#4,a4]@4, b3@6 d4 a5@2 b5@6 a5@2 c#6@14 d6@2 ~@3 d6@12, e3@6 [f#4,a4]@2 e3@8 [e3,b3]@9 e6@7 ~@7 c#6@9, ~@6 f#5@10 ~@2 d6@8 f#6 b3@5 [e3,b3]@9 a5@7]/3", // D G D F#5 G Gmaj7 D B5 …
  AI: "[[e2,e3,g3,b3]@25 ~@7]/2", // Em
})).s("gm_piano").gain(0.59)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note(`<
  ~@11 A B C B D E F G H I J@2 F G K@2 L M N@2 O A B C B D E F G H I J@2 F G K@2 O A P@2 Q D E F G H I J@2 F G R S@5 T@5
>`.pickRestart({
  A: "~ e5 g5 d6", B: "[g5,c6]@3 g5@5", C: "[f#5,a5]@3 [e5,g5]@4 e6", D: "[f#5,a5]@6 [e5,g5]@9 ~",
  E: "[f#5,a5,d6]@6 [e5,g5,b5]@9 ~", F: "[a3,g4,c5,e5]", G: "[e4,g4,b4,d5] [d4,f#4,a4,d5]", H: "[c4,b4,d5,g5]@15 ~",
  I: "[f4,a4,c5]@8 [a4,c5,e5]@7 ~", // F Am
  J: "[[d4,f#4,a4]@5 ~@11 [d4,f#4,a4]@5 ~ [e4,g4,b4]@9 ~, e5@31 ~, ~@6 [e4,g4,b4]@9 ~@17, ~@12 b5@17 ~@3]/2", // D Em
  K: "[c4@8 b4@7 ~, [e4,g4]@29 ~@3, a3@25 ~@7]/2", L: "~@8 g4@7 ~, [g3,b3,d4]", M: "[g3,b3,d4,f#4]",
  N: "[~@16 d3@6 [a3,d4,f#4]@9 ~, [c4,e4,g4]@11 ~@5]/2", O: "[g3,b3,d4]",
  P: "[e6@2 g6@2 e6@2 b5@4 d6@2 e6@2 ~@6 b5@2 [c4,e4,g4]@9 ~, [a3,c4,e4]@5 ~ [e3,g3,b3]@8 d6@6 ~@2 g5@6 ~@4, ~@8 [b3,d4,f#4]@3 ~@5]/2", // C Am Em Bm
  Q: "e6@2 g6 ~ e6 ~ b5@4 d6@2 e6@2 ~@2, [a3,c4,e4]@5 ~ [e3,g3,b3]@9 ~", R: "[c4,e4,g4,b4]",
  S: "[~@32 f#5@16 d5@15 f#5@16 ~, [e4,g4,b4]]/5", T: "[[e4,b4], [g5,b5]@3 ~@7]/5",
})).s("gm_string_ensemble_2").gain(0.28)

// chords · lead 1 square · "SQUAREWAV"
const lead_1_square = note("<~ A B@2 C D ~@42 E F G@2 H I J ~@19>".pickRestart({
  A: "~ c5 b4 a4 e4 [c5,e5] [b4,d5] [a4,c5]", // C Bm Am
  B: "[[g4,b4]@2 [b4,d5]@2 [g4,b4]@2 f#4@2 [b3,d4]@2 [d4,f#4]@2 [f#4,a4]@2 [e4,g4]@15 ~ [g4,b4]@2, ~@6 a4 ~@25]/2", // G Bm G Bm D F#m Em G
  C: "[a4,c5]@6 [g4,b4]@5 ~ [e4,g4] [d4,f#4] [c4,e4]@2", D: "[d4,f#4]@2 a4 [e4,g4]@5, ~ f#4 ~@2",
  E: "~@2 d4@2 d4@2 g4@2 g4@2 a4 ~ a4 ~ b4 ~", F: "b4@8 ~@4 d5 b4 ~ e4, ~@7 g4",
  G: "[e4 g4 e4 b3@2 d4 e4 d4@3 b3 g3@3 ~@2]/2", H: "e4@2 g4 ~ e4 ~ b3@4 d4@2 e4@2 ~@2",
  I: "[a3,d4,f#4]@5 ~ [b3,e4,g4]@9 ~", J: "[a3,d4,f#4,a4]@4 [a3,d4,f#4,d5] ~ [b3,e4,g4,b4]@9 ~",
})).s("gm_lead_1_square").gain(0.45)

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

// drums · rim
const rim = s("rim").struct("<~@48 [~ x ~ x]!5 ~@21>").gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@17 A@5 B A@2 ~@13 A@5 B A@4 ~@6 C A@5 B A@7 B ~@5>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~@3 x ~@4",
})).gain(0.74)

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@5 A ~@14 A ~@5 A ~@10 A ~@5 A ~@7 A ~@5>".pickRestart({
  A: "~@14 x!2",
})).gain(0.74)

// drums · hihat
const hihat = s("hh").struct("<~@15 A B C@8 A D C@9 A B C@8 A D C@5 A B C@14 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "x!4", D: "~@2 x ~@3 x!2",
})).gain(0.74)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@17 A B A B A B A B ~ C ~@11 A B A B A B A B ~ C A B A B A ~@2 A B A B A B A B A B A B A B ~@5
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~@13 x ~@2",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@5 B ~@14 A ~@5 B ~@10 A ~@5 B ~@7 B ~@5>".pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~@12 x!2 ~@2",
})).gain(0.74)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@16 A ~ A ~ A ~ A ~ A B C ~@10 A ~ A ~ A ~ A ~ A B C ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B ~@4
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~@15 x",
})).gain(0.74)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@5 A ~@14 A ~@5 A ~@10 A ~@5 A ~ A ~@10>".pickRestart({
  A: "x",
})).gain(0.74)

// drums · ride
const ride = s("rd").struct("<~@25 A@2 ~@19 A@2 B@2 C@3 A@2 ~@14 A ~@4>".pickRestart({
  A: "x", B: "x!4", C: "x ~ x!2 ~ x ~ x",
})).gain(0.74)

stack(
  bass, piano, string_ensemble_2, lead_1_square, kick, rim, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, crash,
  ride
)

More by Paul Davis