Strudelify

Wild Thing

Jimi Hendrix

KeyA majorTempo100 bpm
0:00/0:00
// Wild Thing — Jimi Hendrix
// 100 bpm, 4/4, key A major. 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(100/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 · "Bass"
const bass = note(`<
  ~ A B A C A C D E D F G@2 H@4 I@2 D C D C D C D C D C D J A C A C D E D F G@2 H@4 I@2 A C A K@4 A C A C D E A C A C D
  E A C A K@2 ~@2
>`.pickRestart({
  A: "a1@4 a1@5 ~ d2@2 d2@2 b1@2", B: "e2!3 e2@2 e2 e2@2", C: "e2!3 e2@2 d2!2 b1", D: "a1@2 a1@3 d2!2 b1",
  E: "e2@2 e2@2 e2@2 e2@3 ~ d2@2 d2@2 b1@2", F: "e2!3 e2@2 a1!2 g1", G: "[a1@27 ~ d2@2 c2@2]/2",
  H: "[a1@25 ~ a1 ~ d2@2 c2@2]/2", I: "[a1@31 ~]/2", J: "e2!3 e2@5", K: "e2!3 e2@2 e2!3",
})).s("gm_fretless_bass").gain(0.48)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G H I J K@2 L@2 M@2 N@2 O P Q R S T O U Q R V W C D X F G H Y J K@2 L@2 M@2 N@2 C D E Z@2 AA AB C D E F
  G H C D E F G H C D E AA AC AD@2
>`.pickRestart({
  A: "[e3,a3,c#4]@4 [e3,a3,c#4]@3 ~@2 [d3,f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, a2@4 ~ d3@2 ~", // A D G
  B: "[e3,g#3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,g#3,b3,e4] [e3,g#3,b3,e4]@2, ~@2 g#3@3 ~@3", // E E5 E
  C: "[e3,a3,c#4]@4 [e3,a3,c#4]@3 ~@2 [d3,f#3,a3] [f#3,a3]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, ~@9 d4@3 ~@4, ~@5 d3@2 ~", // A D F#m D G
  D: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4 ~ a3 [d3,f#3,a3]@2 [f#3,a3,d4]@2 [g3,b3]@2, ~@9 d4@3 ~@4", // E D G
  E: "[e3,a3,c#4]@4 [e3,a3,c#4]@3 ~@2 [f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, ~@9 d3@5 ~@2", // A D G
  F: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4 ~ d4 d4@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, ~@9 [d3,f#3,a3]@4 ~@3", // E D G D
  G: "[e3,a3,c#4]@4 [e3,a3,c#4]@3 ~@2 [d3,f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, ~@5 d3@2 ~", // A D G
  H: "[e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 ~ [f#3,a3,d4] [d3,f#3,a3,d4] [d3,f#3,b3]", // E D Bm
  I: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]@3 ~@2 [f#3,a3,d4] [f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,b3]@2", // A D G
  J: "[b3,e4]!2 [e3,g#3,b3,e4]!2 ~ [g3,c4] [e3,a3] [g3,c4], [e3,g#3] ~@3", // E5 E C5 A5 C5 E
  K: "[[e3,a3]@12 ~ [g3,c4] [e3,a3] [g3,c4], a2 ~@15]/2", L: "[[e3,a3]@12 ~ [g3,c4] [e3,a3] [g3,c4], f#3 ~@31]/2",
  M: "[[e3,a3]@12 ~ [g3,c4] [e3,a3] [g3,c4]]/2", N: "[[e3,a3]@15 ~]/2",
  O: "[e3,a3,c#4]@4 [e3,a3,c#4]@4 ~ [f#3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [g3,b3]@2, a2@9 ~@7", // A D G
  P: "[g#3,b3,e4]@4 [g#3,b3,e4]@4 ~ [f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [g3,b3]@2", // E D G
  Q: "[e3,a3,c#4]@4 [e3,a3,c#4]@4 ~ [d3,f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, ~@5 d3@2 ~", // A D G
  R: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4 ~ [d3,f#3,a3] [d3,f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2", // E D G
  S: "[e3,a3,c#4]@4 ~ e4@3 ~ [f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, a2 ~, ~@4 [e3,a3,c#4]@3 ~@2 d3@4 ~@3", // A D G A
  T: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@4 ~ [d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,g3,b3]@2", // E D G
  U: "[g#3,b3,e4]@4 [g#3,b3,e4]@4 ~ [f#3,a3,d4]!2 ~ [f#3,a3,d4]@2 [g3,b3]@2", // E D G
  V: "[e3,a3,c#4]@4 [e3,a3,c#4]@4 ~ [f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, a2@9 ~@7", // A D G
  W: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@9 ~", // E
  X: "[e3,a3,c#4]@4 [e3,a3,c#4]@3 ~@2 [f#3,a3,d4] [f#3,a3,d4]@2 [f#3,a3,d4]@2 [d3,g3,b3]@2, ~@8 d3@5 ~@3", // A D G
  Y: "[a2,e3,a3,c#4]@4 [a2,e3,a3,c#4]@4 ~ [f#3,a3,d4] [f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [g3,b3]@2", // A D G
  Z: "[e3,g#3,b3,e4]@2 [e3,g#3,b3] ~@2 e4 [g#3,b3,e4]@2, ~@2 e4@3 ~@3, ~@3 e3@5, ~@3 [g#3,b3]@3 ~@2", // E G#m
  AA: "[e3,g#3,b3,e4]@2 [e3,g#3,b3] ~@2 e4 [g#3,b3,e4] [d3,g3,b3], ~@2 e4@3 ~@3, ~@3 e3@4 ~, ~@3 [g#3,b3]@3 ~@2", // E G G#m
  AB: "[e3,g#3,b3,e4]@2 [e3,g#3,b3] ~ e4!2 [g#3,b3,e4] [d3,g3,b3], ~ e4 ~@2, ~@3 e3@4 ~, ~@3 [g#3,b3]@3 ~@2", // E G G#m
  AC: "[e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] e4@2 e4 [g#3,b3,e4] [d3,g3,b3], ~@3 e3@4 ~, ~@3 [g#3,b3]@3 ~@2", // E G G#m
  AD: "[[a2,e3,a3,c#4]@9 ~@7]/2", // A
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.6)

// chords · distortion guitar · "Guitar 2"
const distortion_guitar = note(`<
  A B C D E F G H I J K L@2 M@2 N@2 O@2 P Q R S T U P Q R S V W D E F X H I J K L@2 M@2 N@2 O@2 D E F Y@4 D E F X H I D
  E F X H I D E F Y@2 Z ~
>`.pickRestart({
  A: "~ e4@15", B: "[a2,e3,a3]@2 [a2,e3,a3]@3 [d3,a3,d4]!3", C: "[e3,b3,e4]!3 [e3,b3,e4]@2 [b3,e4] [b3,e4]@2, ~@5 e3@3",
  D: "[a2,e3,a3]@4 [a2,e3,a3]@5 d4 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2", // A5 D5
  E: "[b3,e4] b3 [e3,b3] e4@2 e4 a3!2, e3@2 ~ [e3,b3]@3 [d3,d4]@2, ~ e4@2 ~@5", // E5 D
  F: "[a2,e3,a3]@2 [a2,e3,a3]@3 [a3,d4]!3, ~@5 d3@3", // A5 D5
  G: "[e3,e4]@2 [e3,e4]@4 [e3,b3,e4]@3 ~ [d3,d4]@2 [d3,a3,d4]@4, b3@3 ~@5", // E E5 D D5
  H: "[a2,e3,a3]@4 [a2,e3,a3]@5 a3 d4@2 [d3,d4]@4, ~@9 d3@3 ~@4, ~@5 a3@3", // A5 D
  I: "e3@2 e3@2 [e3,e4]@2 [e3,b3,e4]@3 a#3 [a3,d4]@2 [a3,d4]@2 [d3,a3,d4]@2, [b3,e4]@2 ~@3 d3@2 ~", // E E5 D5 E5
  J: "[a2,e3,a3]@4 [a2,e3,a3]@5 ~ d4@2 d4@4, ~@5 [d3,a3]@3", // A5 D5
  K: "[b3,e4] b3!2 [e3,b3,e4]@2 [e3,a3]!2 [d3,g3], e3@3 ~@3 a2@2, a2 ~ e4@4 ~@10", // E5 A5 G5
  L: "[[e3,a3]@12 ~ [a2,e3,a3]!2 [a2,d3,g3], a2@13 ~@3]/2", M: "[[a2,e3]@13 [a2,e3,a3]!2 [g2,d3,g3], a3@11 ~@5]/2",
  N: "[[a2,e3,a3]@13 [a2,e3,a3]!2 [g2,d3,d#3,g3], [g#2,d#3,g#3] ~@31]/2", // A5 D#maj7 G#5
  O: "[[a2,a3]@29 ~@3, e3@27 ~@5, [g#2,g#3] ~@31]/2", // A G#
  P: "[a2,e3,a3]@4 [a2,e3,a3]@5 ~ [a2,d3,a3,d4]@2 [a2,d3,a3,d4]@2 [a3,d4] a#3", // A5 D5
  Q: "[e3,b3,e4]@2 [e3,b3,e4]@3 [a3,d4]!3, ~@5 d3@3", // E5 D5
  R: "[a2,a3]@4 [a2,a3]@5 ~ [a2,d3,a3,d4]@2 [d3,a3]@2 [d3,a3]@2, e3@9 ~@3 [a2,d4]@4", // A D5
  S: "[e3,b3]@4 [b3,e4]@2 [b3,e4]@2 a3@2 a3@2 [d3,a3,d4]@3 ~, e4 ~ e3@2 [d3,d4]@2 ~@2", // E5 D5 D
  T: "[a2,e3,a3]@4 [a2,e3,a3]@5 ~ [d3,a3,d4]@2 [d3,a3,d4]@3 d#3", // A5 D5
  U: "[e3,e4]@4 [e3,b3,e4]@5 d3 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2, b3 ~@7, b2 ~@15", // E E5 D5
  V: "[a2,e3]@2 [a2,e3,a3]@2 ~ [a3,d4] [a3,d4]@2, ~@10 d3@5 ~", W: "[e3,b3,e4]@4 [e3,b3,e4]@2 [e3,b3,e4]@9 ~",
  X: "[e3,b3,e4]@2 [e3,e4]@4 [e3,b3,e4]@3 ~ [d3,d4]@2 [d3,a3,d4]@4", // E5 E E5 D D5
  Y: "[e3,e4] ~ b3 [e3,b3,e4]@2 [e3,e4] [e3,b3,e4]@2, b3 ~@3, ~ [e3,e4]@2 ~@5", Z: "[a2,e3,a3]@3 ~@13",
})).s("gm_distortion_guitar").gain(0.11).pan(0.1)

// chords · distortion guitar · "Guitar 2" · soft notes
const distortion_guitar_soft = note(`<
  ~@3 A B ~ C D E ~@13 F G H ~@3 F I ~ A B ~ C D E ~@10 A B ~ J@4 A B ~ C D E A B ~ C D E A B ~ J@2 ~@2
>`.pickRestart({
  A: "~@5 g#4 ~@2", B: "~@15 d3", C: "~@9 a3@2 ~@5", D: "d#3 ~@8 d4 ~@6", E: "~@2 b3 ~@5", F: "~ e4 ~@6",
  G: "~@5 a2 ~@2", H: "[a#3,d#4] ~ b3@2 ~@5 [a3,a#3,d#4] ~@6", I: "~@3 e3 ~@11 d#4", J: "~@9 b3@2 ~@5",
})).s("gm_distortion_guitar").gain(0.05).pan(0.1)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A ~@2 B C ~@13 D@2 E ~@19 F ~@10 G H@2 ~@2 I ~@2 I ~@8 E J ~@2>".pickRestart({
  A: "~ x", B: "~@3 x ~ x ~@2", C: "~@5 x!2 ~", D: "~@3 x ~@2 x ~", E: "~@3 x", F: "x", G: "~@2 x ~@2 x ~@2",
  H: "~ x ~@6", I: "~@5 x ~@2", J: "~ x!2 ~@5",
})).gain(0.12)

// drums · rim
const rim = s("rim").struct("<~@10 A B ~@18 A ~@7 A B ~@33>".pickRestart({
  A: "~@9 x!2 ~ x!3 ~", B: "x",
})).gain(0.48)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@12 A B A ~ A B ~@22 A B A ~ A B ~@23 C D ~@2>".pickRestart({
  A: "~@6 x!2", B: "x", C: "~@2 x ~@2 x!2 ~", D: "x!2 ~@2 x ~@3",
})).gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@52 [~@15 x] [~@8 x ~@5 x!2] ~@19>").gain(0.36)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@9 A ~@9 B A C A ~ A ~@5 D ~@3 B ~@22 A ~ A ~ A@3 E@2 ~ E A ~@4>".pickRestart({
  A: "~ x", B: "~ x ~@2", C: "x!2", D: "x", E: "~@7 x",
})).gain(0.12)

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

// drums · high tom
const high_tom = s("ht").struct("<~@52 [x ~ x!2 ~@2 x ~@3 x ~ x ~@3] [x!2 ~@3 x ~@2] ~@19>").gain(0.36)

// drums · ride
const ride = s("rd").struct(`<
  ~@11 A ~ A ~ A ~ A ~ A ~@11 A ~@7 A ~ A ~ A ~ A ~ A ~@2 B C A ~ A ~@14 D E A ~
>`.pickRestart({
  A: "x", B: "x ~ x!2 ~@2 x ~", C: "x ~@2 x ~@2 x ~", D: "x!4 ~ x!3", E: "x!4 ~@2 x ~",
})).gain(0.3)

stack(
  bass, acoustic_guitar_steel, distortion_guitar, distortion_guitar_soft, kick, kick_soft, rim, snare, snare_soft,
  low_tom, hihat, hihat_soft, mid_tom, high_tom, ride
)

More by Jimi Hendrix