Strudelify

Devil With a Blue Dress

Mitch Ryder

KeyC♯ minorTempo173 bpm
0:00/0:00
// Devil With a Blue Dress — Mitch Ryder
// 173 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(173/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 · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C B A D A E A E F D G@2 H I A D F D ~@8 J@2 K@2 L@2 H I A D M D ~@8 J@2 N@2 L@2 H I A D O P Q@2 R S T U V W X Y
  Z AA AB Y AC AD AE AF AG ~@3 AH Z AA AB Y AI AD AJ AF AK@4 AL AM AN AO AP J@2 N@2 L@2 H I A D F D A E F AQ A D O D A D
  F D A D O AR@3 ~
>`.pickRestart({
  A: "e4@2 f4@3 ~@7 [c#4,f#4,a#4]@2 ~@2, [b3,g#4]@5 ~@11", B: "e4@2 f4@3 ~@11, [b3,g#4]@5 ~@11",
  C: "e4 f4 ~@4 [c#4,f#4,a#4] ~, [b3,g#4]@5 ~@11", D: "e4 f4 ~@6, [b3,g#4]@5 ~@11", E: "e4 f4 ~@6, [b3,g#4] ~@3",
  F: "e4@2 f4@2 ~@8 [c#4,f#4,a#4]@3 ~, [b3,g#4] ~@3", G: "[[d#4,g#4,c5]@15 ~]/2", H: "[c#4,f#4,a#4]@15 ~",
  I: "[c#4,f#4,a#4]@3 ~@13", J: "[[c#4,f#4,a#4]@15 ~]/2", K: "[e4@2 f4@27 ~@3, [b3,g#4]@29 ~@3]/2",
  L: "[[d#4,g#4,c5]@31 ~]/2", M: "e4@2 f4@3 ~@7 [c#4,f#4,a#4]@3 ~, [b3,g#4] ~@3",
  N: "[e4 f4@13 ~@2, [b3,g#4]@29 ~@3]/2", O: "e4@2 f4@2 ~@8 [c#4,f#4,a#4]@3 ~, [b3,g#4]@5 ~@11",
  P: "e4 f4 ~@4 [b2,b3] ~, [b3,g#4]@5 ~@11", Q: "[c#3,c#4] ~@5 [b2,b3] ~", R: "[c#3,c#4]@3 ~@5 [c#3,c#4]@3 ~@5",
  S: "[c#3,c#4] ~ [c#3,c#4] ~ [c#3,c#4] ~ [c#3,c#4] ~", T: "[e3,e4]@15 ~, d4 ~@15", U: "[e3,e4] ~@7",
  V: "[g#3,b3] e3 [a3,c#4] e3 [g#3,b3] e3 [a3,c#4] e3, e3 ~@3 e3 ~@3 e3 ~@3 e3 ~@3", // G#m A G#m A
  W: "[g#3,b3]@2 e3@2 [a3,c#4]@2 e3 ~ [g#3,b3]@2 e3@2 [a3,c#4]@2 e3@2", // G#m A G#m A
  X: "[g#3,b3] e3 [a3,c#4] e3 [g#3,b3] e3 [a3,c#4] e3, e3 ~@15", // G#m A G#m A
  Y: "[g#3,b3]@2 e3@2 [a3,c#4]@2 e3@2 [g#3,b3]@2 e3@2 [a3,c#4]@2 e3 ~", // G#m A G#m A
  Z: "[c#4,e4]@2 a3@2 [d4,f#4]@2 a3 ~ [c#4,e4]@2 a3@2 [d4,f#4]@2 a3@2", // C#m D C#m D
  AA: "[c#4,e4]@2 a3@2 [d4,f#4]@2 a3@2 [c#4,e4]@2 a3@2 [d4,f#4]@2 a3 ~", // C#m D C#m D
  AB: "[g#3,b3] e3 [a3,c#4] e3 [g#3,b3] e3 [a3,c#4] e3", // G#m A G#m A
  AC: "[d#4,f#4]@2 b3 ~ [e4,g#4]@2 b3 ~ [d#4,f#4]@2 b3 ~@2 b3!2 ~, b3 ~@3 b3 ~@3 b3 ~@3 [e4,g#4]@3 ~", // D#m E D#m E
  AD: "[d#4,f#4]@2 b3 ~ [e4,g#4]@2 b3 ~ [d#4,f#4]@2 b3 ~ [e4,g#4]@2 b3 ~, b3 ~@15", // D#m E D#m E
  AE: "[e3,g#3,b3]@2 e3@2 [a3,c#4]@2 e3 ~ [g#3,b3]@2 e3@2 [a3,c#4]@2 e3 ~, ~@8 e3 ~@3 e3 ~@3", // E A G#m A
  AF: "[g#3,b3]@2 e3 ~ [a3,c#4]@2 e3 ~ [g#3,b3]@2 e3@2 [a3,c#4]@2 e3@2, e3 ~@3 e3 ~@3 e3 ~@3 e3 ~@3", // G#m A G#m A
  AG: "[e3,g#3,b3] ~@7", AH: "[e3,g#3,b3]@3 ~@13",
  AI: "[d#4,f#4]@2 b3 ~ [e4,g#4]@2 b3 ~ [d#4,f#4]@2 b3 ~@2 b3!2 ~, b3 ~@3 b3 ~@3 b3 ~@3 [e4,g#4]@2 ~@2", // D#m E D#m E
  AJ: "[e3,g#3,b3]@2 e3@2 [a3,c#4]@2 e3 ~ [g#3,b3]@2 e3 ~ [a3,c#4]@2 e3 ~, ~@8 e3 ~@3 e3 ~@3", // E A G#m A
  AK: "[g#3,b3]@2 e3 ~ [a3,c#4]@2 e3 ~ [g#3,b3]@2 e3 ~ [a3,c#4]@2 e3 ~, e3 ~@3 e3 ~@3 e3 ~@3 e3 ~@3", // G#m A G#m A
  AL: "[c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g3,c#4] ~", // C#5 C#dim C#5 C#dim
  AM: "[c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~ [c#3,g#3,c#4] ~", // C#5 C#dim C#5
  AN: "[c#3,g#3,b3] ~ [c#3,g#3,b3] ~ [c#3,g#3,b3] ~ [c#3,g#3,b3] ~ [c#3,g#3,b3] ~ [c#3,f#3,a#3] ~ [c#3,f#3,a#3] ~ [c#3,f#3,a#3] ~", // C#7 F#
  AO: "[c#3,f3,g#3] ~ [c#3,f3,g#3] ~ [c#3,f#3,a#3] ~ [c#3,f#3,a#3] ~ [c#3,f3,g#3]@2 [c#3,f3,g#3] ~ [c#3,f#3,a#3] ~ [c#3,f#3,a#3] ~", // C# F# C# F#
  AP: "[c#3,g#3] ~@15, c#4 ~@7", AQ: "e4@2 f4@2 ~@11 c1, [b3,g#4]@5 ~@11",
  AR: "[e4 f4 ~@4 [c#4,f4,g#4,b4,c#5]@12 ~@6, [b3,g#4]@5 ~@43]/3", // C#7 E
})).s("gm_piano").gain(0.56)

// bass · electric bass finger · "PICK BASS"
const bass = note(`<
  ~@8 A B@2 C D E F G H B I@3 J K J K J K J L M N J O E F G H B I@3 J K J K J K J L M N J P E F G H B I@2 Q R S T U V W
  X@3 Y Z AA AB@2 AC AD AE@2 AF ~@4 Z AA AB@2 AC AD AE@4 X AG AH AI AH AJ AK M N J O E F G H ~@3 A B@2 C D B@2 C D B@2 C
  D B@2 C AL@2 AM@2
>`.pickRestart({
  A: "~@6 f#1@2 g#1 ~ g#1@2 b1@2 c2@2", B: "c#2 ~ c#2 ~ c#2@2 f#1@2 g#1 ~ g#1@2 b1@2 c2 ~",
  C: "c#2 ~ c#2 ~ c#2@2 f#1@2 g#1@2 g#1@2 b1 ~ c2 ~", D: "c#2 ~ c#2 ~ c#2@2 f#1@2 g#1 ~ g#1@2 b1 ~ c#2 ~",
  E: "g#1@2 f#2 g2 g#2 f#2 d#2@2", F: "g#2@2 f#2 d#2 f#2@2 g#2@2", G: "f#1@2 e2 f2 f#2 e2 c#2@2", H: "f#1@3 ~@13",
  I: "c#2 ~ c#2 ~ c#2@2 f#1@2 g#1 ~ g#1@2 b1 ~ c2 ~", J: "c#2@3 ~ c#2@2 f#1@2 g#1@2 b1@4 g#1@2",
  K: "c#2@4 g#1@2 b1@4 g#1@2 b1@2 c2 ~", L: "c#2@2 g#1 b1@2 g#1 b1 c#2", M: "f#2@3 ~ f#2@2 e2@4 c#2@3 ~ c#2@2",
  N: "f#2 e2 c#2 f#2", O: "c#2@3 ~ c#2@2 g#1@2 b1@3 ~ c#2@2 ~@2", P: "c#2@2 ~@2 c#2@2 g#1@2 b1@3 ~ c#2@2 ~@2",
  Q: "c#2 ~ c#2 ~ c#2@2 f#1@2 g#1 ~ g#1@2 b1@4", R: "c#2@2 ~@10 b1@3 ~", S: "c#2 ~@5 b1 ~", T: "c#2@2 ~@6 c#2@3 ~@5",
  U: "c#2 ~ c#2 ~ c#2 ~ c#2 ~", V: "e2@15 ~", W: "e1@3 ~@13", X: "e2 ~ e2 ~ e2@2 a1@2 b1 ~ b1 ~ d2 ~ d#2 ~",
  Y: "e2 ~ e2 ~ e2@2 a1@2 b1 ~ b1 ~ d2 ~ e2 ~", Z: "a1 ~ a1 ~ a1@2 a2@2 g2@2 e2@2 g2@2 a2@2",
  AA: "a1 ~ a1 ~ a1@2 a2@2 g2@2 e2@2 g2@2 a2 ~", AB: "e2 ~ e2 ~ e2@2 a1@2 b1 ~ b1@2 d2@2 e2 ~",
  AC: "b1@2 a2 a#2 b2 a2 f#2@2", AD: "b1 b2 a2 b2", AE: "e2 ~ e2 ~ e2@2 a1@2 b1 ~ b1@2 d2 ~ d#2 ~", AF: "e2@3 ~@13",
  AG: "e2 ~ e2 ~ e2@2 a1@2 b1 ~ b1@2 d2 ~ e2 ~", AH: "c#2 ~ c#2@2 g#1@2 b1 ~ c#2 ~ c#2@2 g#1@2 b1 ~",
  AI: "c#2 ~ c#2 ~ g#1 ~ b1 ~ c#2 ~ c#2@2 g#1 ~ b1 ~", AJ: "c#2 ~ c#2@2 g#1@2 b1 ~ c#2 ~ c#2@2 g#1 ~ b1 ~",
  AK: "c#2 ~@7", AL: "[c#2 ~ b1@2 g#1@2 c#2@2 ~@2 g#2@2 c#2@20]/2", AM: "[c#2@5 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@10 A ~ B ~@5 A ~ B ~@17 A ~ B ~@17 A ~ B ~@3 C D@2 ~@28 E F@4 G ~@13 A ~ B ~ A ~ B ~ A ~ B ~ H ~ I@2 J@2
>`.pickRestart({
  A: "~@2 [b4,f5,g#5] ~ [c#5,f#5,a#5] ~ [b4,g#5]@2, ~@6 e5 ~", // Fdim F# E
  B: "~@4 [b4,f5,g#5]@3 ~ [c#5,f#5,a#5]@3 ~ [b4,g#5]@4, ~@6 e5 ~", // Fdim F# E
  C: "~@12 [b2,e3,f3,g3] [a3,b3,c4,d4] [e4,f4,g4] [a4,b4,c5,d5]", // Em D7 Em D7
  D: "[a#5 b5@14 ~ [a#5,d6] b5@3 ~@12, e5@5 ~@3, e6@15 ~ e6@3 ~@13]/2", // A#
  E: "~@10 [d#2,f#2] [g#2,a#2,c#3,d#3] [f#3,g#3,a#3] [c#4,d#4,f#4] [g#4,a#4] [c#5,d#5,f#5]", // D#m G#sus4 F# D#m7 G#sus2 D#m7
  F: "[[f5,g5,a5,b5,c6] ~@63, [c#5,g#5]@63 ~]/4", G: "[c#5,g#5,c#6] ~@3",
  H: "~@2 [b4,f5,g#5] ~ [c#5,f#5,a#5] ~ e5 f5, ~@3 [b4,g#5]", // Fdim F# E
  I: "[~ d#2 g#2 [a#2,c#3,d#3] [f#3,g#3] [a#3,c#4,d#4,f#4] [g#4,a#4] c#5@4 ~ [c#5,g#5,c#6]@20, ~@3 g#5@2 ~@11, ~@7 d#5 ~@24]/2", // D#7 F#sus2 D#m7 G#sus2 C#5
  J: "[[c#5,g#5,c#6]@5 ~@3]/2", // C#5
})).s("gm_rock_organ").gain(0.56)

// chords · rock organ · "ORGAN 3" · soft notes
const rock_organ_soft = note(`<
  ~@10 A ~ A ~@5 A ~ A ~@17 A ~ A ~@17 A ~ A ~@3 B ~@30 C@5 ~@14 A ~ A ~ A ~ A ~ A ~ A ~@3 D ~@3
>`.pickRestart({
  A: "~@7 f5", B: "~@11 [g#2,a#2] [c3,d3] ~@3", C: "[~@10 c#2 ~@3 c#6@65 ~]/5", D: "~ c#2 f#2 ~@3 c#6@4 ~@3 c6 ~@2",
})).s("gm_rock_organ").gain(0.32)

// drums · kick
const kick = s("bd").struct("<A@66 B A@16 B A@6 C A@37 D ~ B ~>".pickRestart({
  A: "x!8", B: "x", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", D: "x!5 ~@3",
})).gain(0.36)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@39 A ~@16 B ~@25 A ~@8 C ~@11 A ~@19>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@4 x!6 ~@6", C: "~ x!3 ~@12",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~ x]!52 ~@6 [~ x ~ x]!16 ~ [~ x ~ x]!45 ~@3>").gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@3 A ~@19 A ~@19 A ~@22 B@4 C ~@16 D ~@7 A ~@23>".pickRestart({
  A: "~@3 x", B: "x!8", C: "x", D: "~@12 x!4",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<A@16 B A@19 B A@19 B A@4 B ~@5 A@16 B A@16 B A@7 B ~@4 A@15 B ~@3>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A@16 B A@19 B A@19 B A@4 ~@6 A@16 ~ A@16 ~ A@7 ~@5 A@15 B ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@6",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 A ~@3 A ~@19 A ~@19 A ~@51 A ~@23>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.57)

// drums · high tom
const high_tom = s("ht").struct("<~@12 A ~@3 A ~@19 A ~@19 A ~@43 B ~@7 A ~@19 C ~@3>".pickRestart({
  A: "~ x", B: "~@8 x!4 ~@4", C: "~@5 x ~@2",
})).gain(0.57)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@12 A ~@3 A ~@19 A ~@19 A ~@51 A ~@23>".pickRestart({
  A: "~@9 x ~@6",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@128 [~@3 x] ~@3>").gain(0.43)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 A@7 B A@19 B A@19 B A@4 C ~@5 A@16 C A@16 C A@7 C ~@4 A@15 D ~@3>".pickRestart({
  A: "x!16", B: "x!4 ~@12", C: "x", D: "x!2 ~@14",
})).gain(0.36)

stack(
  piano, bass, rock_organ, rock_organ_soft, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft, mid_tom,
  high_tom, high_tom_soft, crash, tambourine
)