Strudelify
KeyB minorTempo85 bpm
0:00/0:00
// Wild Woman — Michael Learns to Rock
// 85 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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 · fretless bass · "FRETLESS"
const bass = note(`<
  A B C B C B C B D E F G H E F G I J K L M J K L M N O P O Q R S T@2 R S U V W X Y Z W X Y AA AB AC AD AE AF AG AD AE
  AF AH AB AI AJ W X Y Z W X Y Z W X Y Z W AK
>`.pickRestart({
  A: "~@11 b2 b1@4", B: "b1@4 ~@3 b1 b1@4 ~@2 b1 e1", C: "a1@4 ~@2 a1!2 e2@4 ~@2 a1 e1",
  D: "a1@4 ~@2 a1!2 e2 ~ e2@2 a1!3 e1", E: "b1@4 ~@3 b1 b1@4 ~@2 b1!2", F: "a1@4 ~@3 a1 a1@4 ~@2 d1 d#1",
  G: "e1@4 ~@3 e1 e1@6 ~ a1", H: "b1 ~ b1@2 a1 b1@2 d2@3 b1 ~ a1!3 b1", I: "g1 ~ g1 ~ g1 ~ g1 ~ a1 ~ a1 b2 b1@4",
  J: "d1@4 d2@3 d1 g1 ~ g1@3 ~ e1 g1", K: "a1@6 ~ a1 d1 ~ d1@2 c2 d2@3", L: "d1@4 d2@3 d1 e1 ~ e1 ~ d1 e1@2 e1",
  M: "g1 ~ g1 ~ g1 ~ g1 ~ b1@2 d2 ~ e2@2 d2 b1", N: "~@8 b1@4 ~@3 b1", O: "b1@4 ~@2 b1 e1 a1@4 ~@2 a1!2",
  P: "e2@4 ~@2 a1 e1 b1@4 ~@3 b1", Q: "e2 ~ e2@2 a1!3 e1 b1@4 ~@3 b1", R: "b1@4 ~@2 b1!2 a1@4 ~@3 a1",
  S: "a1@4 ~@2 d1 d#1 e1@4 ~@3 e1", T: "[e1@6 ~ a1 b1 ~ b1@2 a1 b1@2 d2@3 b1 ~ a1!3 b1 b1@4 ~@3 b1]/2",
  U: "e1@6 ~ a1 g1 ~ g1 ~ g1 ~ g1 ~", V: "a1 ~ a1 b2 b1@4 d1@4 d2@3 d1", W: "g1 ~ g1@3 ~ e1 g1 a1@6 ~ a1",
  X: "d1 ~ d1@2 c2 d2@3 d1@4 d2@3 d1", Y: "e1 ~ e1 ~ d1 e1@2 e1 g1 ~ g1 ~ g1 ~ g1 ~",
  Z: "b1@2 d2 ~ e2@2 d2 b1 d1@4 d2@3 d1", AA: "g1 ~ g1 b1 e1@4 e1 ~ e1 ~ e1 ~ e1 ~",
  AB: "e1 ~ e1 ~ e1@2 ~ e1 g1 ~ g1 ~ g1 ~ g1 ~", AC: "b1@2 d2 ~ e2@2 d2 b1 d1@4 d2@4",
  AD: "c1 ~ c1@3 ~ f1 f#1 g1 ~ g1 ~ g1 ~ g1 ~", AE: "g1 f1 g1@2 f1@3 c1 d1@6 ~ d1",
  AF: "c1 ~ c1@3 ~ g1!3 ~ g1@2 f1@2 f1 f#1", AG: "g1 f1 g1@2 f1 d1 c1 c#1 d1@4 d2@4",
  AH: "g1 f1 g1@2 f1 d1 c1 c#1 e1 ~ e1 ~ e1 ~ e1 ~", AI: "g1 ~ c2 d2 g2@4 ~@8", AJ: "~@3 d2 d1@4 d1@4 d2@3 d1",
  AK: "d1 ~ d1@2 ~@12",
})).s("gm_fretless_bass").gain(0.52)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note("<~ A@6 B@2 C ~@3 C ~@11 D@4 E F@3 ~@12 G@7 H@6 ~@15>".pickRestart({
  A: "[[d5,f#5] [c#5,e5], b5]/2", B: "[[d5,f#5]@2 [c#5,e5] [c#5,e5,b5], b5@3 ~]/2", C: "~@2 [f#4,b4,d5] ~",
  D: "[~ [d5,f#5]@2 [c#5,e5]@2 [d5,f#5]@2 [c#5,e5], ~ b5@4 b5@3]/4", E: "[c#5,e5,b5] ~",
  F: "[[f#4,b4,d5] ~ [e4,b4]@4 [a4,e5]@4 ~@2]/3", // Bm E5 A5
  G: "[~@4 e5@8 [a5,d6]@24 a5@7 c6@2 b5@2 a5@2 g5@3 d6@4, ~@9 d6@4 ~]/7", // D5
  H: "[~@6 f6 d6 ~@8 c6@2 b5@2 a5@2 f#5@4 ~@6 c6@6 b5@8 a5@10 e6@16 [d6,f6]@16 ~@8, ~ d6@6 b5@4 ~]/6", // Dm
})).s("gm_percussive_organ").gain(0.07)

// chords · percussive organ · "ORGAN 2" · soft notes
const percussive_organ_soft = note("<~@32 A@5 ~@36>".pickRestart({
  A: "[~ [f#5,b5]@2 f#5@2 [e5,a5]@2 [f#5,b5]@2 ~, ~@3 b5@4 ~@3]/5", // B5 A5 B5
})).s("gm_percussive_organ").gain(0.04)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@17 A B C ~ A B C ~@9 D E F G H I J K H I J K L@3 M N M N M N M O P Q@2 I J K H I J K H I J K H I R
>`.pickRestart({
  A: "[f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@5 ~", // D G
  B: "[a3,c#4,e4]@7 ~ [f#3,a3,d4] ~ [f#3,a3,d4]@2 ~@4", C: "[d3,a3,d4]@7 ~ [e3,b3,e4]@8", D: "~@6 [b3,f#4,b4]!2",
  E: "[b3,f#4,b4]!2 ~@4 [a3,e4,a4]!2", F: "[a3,e4,a4]!2 ~@4 [b3,f#4,b4]!2", G: "[b3,f#4,b4]!2 ~@6",
  H: "~@8 [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~", I: "[g3,b3,d4] ~ [g3,b3,d4]@5 ~ [a3,c#4,e4]@7 ~",
  J: "[f#3,a3,d4] ~ [f#3,a3,d4]@2 ~@4 [d3,a3,d4]@7 ~", K: "[e3,b3,e4] ~",
  L: "[~@4 d4@2 g4@2 [e3,g#3,b3,e4]@16 [g3,b3,d4,f4]@16 d3!2 f3 d3 g3 d3 f3 d3, ~ b3@3 ~@20]/3", // E G7
  M: "[g3,c4] ~ [g3,c4]@2 ~@2 [d3,g3]@2 g2 ~ g2 ~ g2 ~ g2 ~", N: "g2 ~ g2 ~ g2 ~ g2 ~ d3!2 f3 d3 g3 d3 f3 d3",
  O: "g2 ~ g2 ~ g2 ~ g2 ~ e5@2 d5 [d5,e5] c#5 [c#5,d5] b4 c#5", P: "a4 b4 e5 b4 e5@4 f5@2 e5 [e5,f5] d5 [d5,e5] c5 d5",
  Q: "[d5@23 ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4]@3 ~]/2", R: "[f#3,a3,d4] ~@15",
})).s("gm_distortion_guitar").gain(0.27).pan(0.3)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar_2 = note(`<
  ~@2 A B A B A B A C D@2 ~@4 E F G ~ H F G ~ H ~@2 I ~ J ~@6 K@2 ~ L M@2 ~ L N@2 O@2 P Q P Q P Q P R@3 S ~ L M@2 ~ L
  M@2 ~ L M@2 ~@2
>`.pickRestart({
  A: "~@12 [a3,e4,a4]!4", B: "[a3,e4,a4] [b3,f#4,b4]!4 ~@11", C: "[b3,f#4,b4] ~@7",
  D: "[~@5 [f#3,b3]!3 [f#3,d4] [f#3,b3] [f#3,c#4] ~ [f#3,b3] ~ [f#3,d4] [e3,b3]@3 ~@4 [e3,a3] f#3 [e3,a3] [f#3,b3]@3 ~@4]/2", // B5 D B5 F#5 B5 D E5 A5 …
  E: "~@4 [b3,d4,g4]@6 [c#4,e4,a4]!2 [c#4,e4,a4]@3 ~", F: "~@3 [f#3,a3,d4] ~@12", G: "~@12 [a4,d5] ~ [a4,d5]@2",
  H: "~@2 g4 f4@3 [b3,d4,g4]@2, b3@3 ~, ~ d4@5 ~@2", I: "~@4 [a3,e4,a4]!5 [b3,f#4,b4]!4 ~@3",
  J: "~@4 [a3,e4,a4]!4 [b3,f#4,b4]@2 ~@6", K: "[~@12 [b3,d4,g4]@6 [c#4,e4,a4]!2 [c#4,e4,a4]@3 ~@4 [f#3,a3,d4] ~@4]/2",
  L: "~@4 [a4,d5] ~ [a4,d5]@2 ~@8", // D5
  M: "[~@12 g4@2 f4@6 [b3,d4,g4]@4 ~@3 [f#3,a3,d4] ~@4, ~@2 b3@3 ~@3, ~@5 d4@5 ~@6]/2", // G D
  N: "[~@6 g4 f4@3 [b3,d4,g4]@2 ~@4, ~@2 b3@3 ~@3, ~@5 d4@5 ~@6]/2", O: "[~@8 d5@16 d3!2 f3 d3 g3 d3 f3 d3]/2",
  P: "c3 ~@7 g2 ~ g2 ~ g2 ~ g2 ~", Q: "g2 ~ g2 ~ g2 ~ g2 ~ d3!2 f3 d3 g3 d3 f3 d3",
  R: "[g2 ~ g2 ~ g2 ~ g2 ~ [e3,g#3,b3,e4]@16 [g3,b3,d4,f4]@16 ~@8]/3", S: "~@11 [f#3,a3,d4] ~@4",
})).s("gm_distortion_guitar").gain(0.4).pan(0.7)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@15 A@2 ~@19 B ~@36>".pickRestart({
  A: "[~@2 b3 ~, ~@7 [g2,b2]@4 ~@5, ~@15 [d3,g3]@8 ~@9]/2", B: "~ b3, ~@3 [g2,b2]@4 ~, ~@7 [d3,g3]@8 ~",
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.7)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@6 A@2 ~ B C D E F G@2 H I@2 J K I@2 J K ~ L A M N O P Q R G@3 S T U V W T U V W ~ X Y Z Y Z Y Z Y AA ~@3 T U V W T U
  V W T U V W T AB
>`.pickRestart({
  A: "~ [f#4,b4]!6 ~@2 [f#4,b4]!6 ~", B: "~@2 [f#3,b3]!5 ~@9", C: "~@2 [f#3,b3]!3 ~@11", D: "~@2 [e3,b3]!4 ~@10",
  E: "~@2 [e3,b3]!8 ~@6", F: "~ [f#3,b3]!5 [a3,d4] [f#3,b3] ~ [f#3,b3]!6 ~", G: "~ [f#3,b3]!6 ~@2 [f#3,b3]!6 ~",
  H: "~@12 [f#3,b3]!4", I: "~@10 [a3,d4]!3 ~@3", J: "~@5 [a3,d4]!3 [b3,e4] ~ [b3,e4] ~@5",
  K: "~@10 [b3,d4]!3 ~ [b3,d4] ~", L: "~@9 [f#4,b4]!6 ~", M: "~ [f#4,b4]!6 ~@9", N: "~@10 [f#3,b3]!5 ~",
  O: "~@10 [f#3,b3]!3 ~@3", P: "~@10 [e3,b3]!4 ~@2", Q: "~@10 [e3,b3]!6",
  R: "[e3,b3]!2 ~@7 [f#3,b3]!5 [a3,d4] [f#3,b3]", S: "~@4 [f#3,b3]!4 ~@8", T: "~@2 [a3,d4]!3 ~@11",
  U: "~@2 [a3,d4]!3 ~@8 [a3,d4]!3", V: "[b3,e4] ~ [b3,e4] ~@13", W: "~@2 [b3,d4]!3 ~ [b3,d4] ~@9", X: "~@9 [a3,d4]!6 ~",
  Y: "~ [g3,c4]!6 ~@2 [g3,b3]!6 ~", Z: "~ [g3,b3]!6 ~@2 [a3,d4]!6 ~", AA: "~ [g3,b3]!6 ~@9", AB: "~@2 [a3,d4]!2 ~@12",
})).s("gm_overdriven_guitar").gain(0.14).pan(0.7)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~ A@4 B@4 ~@3 C ~@12 D@5 ~@2 E@2 ~@39>".pickRestart({
  A: "[~@2 [b2,b3] b2 [a2,a3] ~@2 d4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [a2,b3] a2 [a2,a3]!4 a3 b3 [b2,b3] b2 [a2,a3] ~@2 d4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [a2,b3] a2 [a2,a3]!4, ~@3 f#3@7 ~ f#3@7 ~ e3@7 ~ e3@7 ~ f#3@7 ~ f#3@7 ~ e3@7 ~ e3@5, ~@5 [b2,b3]@2 ~@6 [b2,b3]@2 ~@6 [b2,b3]@2 ~@14 [b2,b3]@2 ~@6 [b2,b3]@2 ~@6 [b2,b3]@2 ~@9, ~@6 b2@3 ~@5 b2@3 ~@5 b2@4 ~@12 b2@3 ~@5 b2@3 ~@5 b2@4 ~@6]/4", // B A B A B A Asus2 A …
  B: "[a3 b3 [b2,b3] b2 [a2,a3] ~@2 d4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [a2,b3] a2 [a2,a3]!4, ~@3 f#3@7 ~ f#3@7 ~ e3@7 ~ e3@5, ~@5 [b2,b3]@2 ~@6 [b2,b3]@2 ~@6 [b2,b3]@2 ~@9, ~@6 b2@3 ~@5 b2@3 ~@5 b2@4 ~@6]/2", // B A B A B A Asus2 A …
  C: "~@2 b3 ~ a3 b3@2 d4@3 b3 ~ [a2,a3]!3 [b2,b3], ~@3 f#3@7 ~ f#3@5", // A B
  D: "[~@10 [b2,b3] b2 [a2,a3] ~@2 d4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [a2,b3] a2 [a2,a3]!4 a3 b3 [b2,b3] b2 [a2,a3] ~@2 d4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [b2,b3] b2 [a2,a3] ~@2 e4@3 [a2,b3] a2 [a2,a3]!4 ~@8, ~@11 f#3@7 ~ f#3@7 ~ e3@7 ~ e3@7 ~ f#3@7 ~ f#3@7 ~ e3@7 ~ e3@5 ~@8, ~@13 [b2,b3]@2 ~@6 [b2,b3]@2 ~@6 [b2,b3]@2 ~@14 [b2,b3]@2 ~@6 [b2,b3]@2 ~@6 [b2,b3]@2 ~@17, ~@14 b2@3 ~@5 b2@3 ~@5 b2@4 ~@12 b2@3 ~@5 b2@3 ~@5 b2@4 ~@14]/5", // B A B A B A Asus2 A …
  E: "[~@10 b3 ~ a3 b3@2 d4@3 b3 ~ [a2,a3]!3 [b2,b3] ~@8, ~@11 f#3@7 ~ f#3@5 ~@8]/2", // A B
})).s("gm_acoustic_guitar_steel").gain(0.26).pan(0.3)

// chords · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@9 A B C D A B C ~@13 E F G H A F G I ~@36>".pickRestart({
  A: "b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [f#3,b3] b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [f#3,b3]", // B5 A5 B5 A5 B5
  B: "a2!2 [f#3,b3] a2 [e3,a3] [f#3,b3] a2 [f#3,b3] a2!2 [f#3,b3] a2 [e3,a3] [f#3,b3] a2 [f#3,b3]", // B5 A5 B5 A5 B5
  C: "e2!2 [f#3,b3] e2 [e3,a3] [f#3,b3] e2 [f#3,b3] e2!2 [f#3,b3] e2 [e3,a3] [f#3,b3] e2 [f#3,b3]", // B5 A5 B5 A5 B5
  D: "b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [a3,d4] b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [f#3,b3]", // B5 A5 B5 D5 B5 A5 B5
  E: "~@8 b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [f#3,b3]", // B5 A5 B5
  F: "b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [f#3,b3] a2!2 [f#3,b3] a2 [e3,a3] [f#3,b3] a2 [f#3,b3]", // B5 A5 B5 A5 B5
  G: "a2!2 [f#3,b3] a2 [e3,a3] [f#3,b3] a2 [f#3,b3] e2!2 [f#3,b3] e2 [e3,a3] [f#3,b3] e2 [f#3,b3]", // B5 A5 B5 A5 B5
  H: "e2!2 [f#3,b3] e2 [e3,a3] [f#3,b3] e2 [f#3,b3] b2!2 [f#3,b3] b2 [e3,a3] [f#3,b3] b2 [a3,d4]", // B5 A5 B5 A5 B5 D5
  I: "e2!2 [f#3,b3] e2 [e3,a3] [f#3,b3] e2 [f#3,b3] ~@8", // B5 A5 B5
})).s("gm_lead_1_square").gain(0.33).pan(0.2)

// chords · piano · "A.PIANO 2"
const piano = note("<~@47 A B C B C B C B D ~@17>".pickRestart({
  A: "~ [f#3,a3,d4]", B: "[e3,g3,c4]@8 [g3,b3,d4]@6 ~ [g3,b3,d4,f4]",
  C: "~ g3 [g3,c4,e4] ~ [g3,b3,d4] ~@3 [f#3,a3,d4]@8", D: "~ g3 [g3,c4,e4] ~ [g3,b3,d4] ~@11",
})).s("gm_piano").gain(0.54).pan(0.3)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ [~@7 x ~@8]!24 [~@15 x]!21 ~ [~@15 x]!10 ~ [~@15 x]!14 ~>").gain(0.18)

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

// drums · low tom
const low_tom = s("lt").struct("<A ~@7 B ~@11 B ~@4 C ~@3 D ~@11 D ~@4 E F ~@9 G H ~@3 D ~@3 D ~@3 D ~@2>".pickRestart({
  A: "~ x!6 ~", B: "~@14 x!2", C: "~@5 x ~@10", D: "~@6 x!2 ~@8", E: "~@5 x!3", F: "x!2 ~@6", G: "~@13 x ~@2", H: "x",
})).gain(0.54)

// drums · hihat
const hihat = s("hh").struct(`<
  ~
  [~@2 x!6]!24
  [~@7 x!2 ~@3 x ~ x ~]
  [x!4 ~@2 x!2]!31
  [x!4 ~@4]
  [~@7 x!2 ~@3 x ~ x ~]
  [x!4 ~@2 x!2]!13
  x
>`).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@11 A ~@4 B ~@3 C ~@11 C ~@15 D E ~@3 C ~@3 C ~@3 C ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@2 x ~ x!2 ~@10", C: "~@5 x ~@10", D: "~@5 x ~@2", E: "~@3 x ~@12",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~ x!24 [~ x]!32 ~ [~ x]!14 ~>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<A ~@24 B ~@20 C B ~@9 D E ~@14>".pickRestart({
  A: "~ x!5 ~@2", B: "x!2 ~@6", C: "~@5 x!3", D: "~ x", E: "~ x ~@6",
})).gain(0.54)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!16]!24 [~@8 x!8] [x!16]!31 [x!8 ~@8] [~@8 x!8] [x!16]!13 x>").gain(0.24)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!24 [~@8 x!8] [x!16]!31 [x!8 ~@8] [~@8 x!8] [x!16]!13 x>").gain(1.22)

stack(
  bass, percussive_organ, percussive_organ_soft, distortion_guitar, distortion_guitar_2, electric_guitar_clean,
  overdriven_guitar, acoustic_guitar_steel, lead_1_square, piano, kick, kick_soft, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, tambourine, crash, cabasa
)

More by Michael Learns to Rock