Strudelify

Malibu

Hole

KeyD majorTempo122 bpm
0:00/0:00
// Malibu — Hole
// 122 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Distorted.
setcpm(122/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  A@2 B@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 E@2 F@2 E@2 F@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 E@2 F@2 E@2 F@2 E@2
  F@2 E@2 F@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2 I@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 J@5
>`.pickRestart({
  A: "[e2@4 [g3,d4,f#4]@6 [g3,d4,f#4]@4 [d3,d4,f#4]@4 [d3,d4,f#4]@2 [d3,d4,f#4]@4 [d3,d4,f#4]@2 [d3,d4,f#4]@2 [d3,d4,f#4]@2 [a2,g3,b3]!2]/2", // Gmaj7 D Em
  B: "[[b2,a3]@4 [b2,a3,d4,e4]@4 [b2,a3,d4,e4]@2 [b2,a3,d4,e4]@4 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [a2,d3,g3,b3,e4] ~]/2", // B7 Bm7 A Em7
  C: "[e2@4 [g3,d4,f#4]@4 [g3,d4,f#4]@2 [g3,d4,f#4]@4 [d3,d4,f#4]@4 [d3,d4,f#4]@2 [d3,d4,f#4]@4 [d3,d4,f#4]@2 [d3,d4,f#4]@2 [d3,d4,f#4]@2 [a2,g3,b3]!2]/2", // Gmaj7 D Em
  D: "[[b2,a3,d4]@4 [b2,a3,d4,e4]@4 [b2,a3,d4,e4]@2 [b2,a3,d4,e4]@4 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [a2,d3,g3,b3,e4] ~]/2", // Bm7 A Em7
  E: "[g2@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4]!3 [e3,g3,b3,e4]@2 [e3,g3,b3,e4] [e3,g3,b3,e4]@2 [e3,g3,b3,e4]!4]/2", // G Em
  F: "[[d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]!3 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3] [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]!4]/2", // D A
  G: "[g2@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [f#3,a3,d4,f#4]@2 [f#3,a3,d4,f#4] [f#3,a3,d4,f#4]@2 [f#3,a3,d4,f#4]!4]/2", // G D
  H: "[[a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3] [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]!3]/2", // A
  I: "[[a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3] [a2,c#3,e3,a3]@2 [e2,b2,e3,g#3,b3]@2 [e2,b2,e3,g#3,b3]!7]/2", // A E
  J: "[d3,f#3,a3,d4]/5", // D
})).s("gm_overdriven_guitar").gain(0.37)

// chords · distortion guitar · "Distorted"
const distortion_guitar = note(`<
  ~@23 A B ~@2 A B ~@18 A B ~@2 A B ~@2 A B ~@2 A B ~@25 C@2 B ~@2 A B ~@2 A B ~@2 A B ~@2 A ~ D E A ~ D ~@5
>`.pickRestart({
  A: "~@6 d2 ~", B: "d3 ~@3", C: "[~@7 a1@2 a1!7]/2", D: "~@15 [e2,b2]", E: "~ [d2,a2] ~@6",
})).s("gm_distortion_guitar").gain(0.39)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D@2 E@2 D@2 E@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 D@2 E@2 D@2 E@2 D@2
  E@2 D@2 E@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 H@2 F@2 I@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 J@5
>`.pickRestart({
  A: "[e2@4 e2@4 e2@2 e2@2 e2@2 d2@4 d2@2 d2@4 d2@2 d2@2 d2@2 a1!2]/2", B: "[b1!2 b1@2 b1!3 a1@2 a1 a1@2 a1!3 b1]/2",
  C: "[b1!2 b1@2 b1!3 a1@2 a1 a1@2 a1!2 d2 e2]/2",
  D: "[g2@4 g2@4 g2@2 g2@2 f#2@2 e2@4 e2@2 e2@4 e2@2 e2@2 e2@2 e2!2]/2",
  E: "[d2!2 d2@2 d2!3 a1@2 a1 a1@2 a1!2 d2 e2]/2",
  F: "[g2@4 g2@4 g2@2 g2@2 g2@2 f#2@4 f#2@2 f#2@4 f#2@2 f#2@2 f#2@2 f#2!2]/2",
  G: "[a2!2 a2@2 a2 a2@2 a2@2 a2 a2@2 a2!4]/2", H: "[a2!2 a2@2 a2!3 a2@2 a2 a2@2 a2!4]/2",
  I: "[a2!2 a2@2 a2!3 e2@2 e2!7]/2", J: "d2/5",
})).s("gm_electric_bass_pick").gain(0.24)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@23 A ~@16 B@15 C ~@6 D E ~@27>".pickRestart({
  A: "~@6 x!2 ~@2 x ~ x ~ x ~", B: "~@3 x", C: "~@12 x ~ x!2", D: "~@7 x", E: "~ x!7",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<[~@2 x!6] [x!8]!22 [x!3 ~ x!4] [x!8]!23 [x!3 ~ x!4] [x!8]!62 x ~@4>").gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct("<~@64 [~@5 x!2 ~]!16 ~@35>").gain(0.29)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@24 A@8 ~@16 A@16 ~@3 B ~@3 B ~@3 B ~@3 B A@30 C ~@4>".pickRestart({
  A: "x!8", B: "~@3 x", C: "x",
})).gain(0.29)

stack(overdriven_guitar, distortion_guitar, bass, kick, snare, low_tom, hihat, mid_tom, crash, tambourine)

More by Hole