Strudelify
KeyD majorTempo98 bpm
0:00/0:00
// Unsent — Alanis Morissette
// 98 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 94 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · harmonica
const harmonica = note("<~@75 A ~@12 B@4 C@2>".pickRestart({
  A: "~@9 f#4@4 g4@8 ~@11",
  B: "[~@4 [d5,f#5]@45 [e5,g5]@8 ~ [d5,f#5]@3 ~ [e5,g5]@7 ~ [d5,f#5]@40 ~@3 d5@4 [e5,g5]@11, ~@28 f#5 ~@3]/4", // D Em D Em D Em
  C: "[~ [d5,f#5]@5 ~@2 [e5,g5]@11 [d5,f#5]@36 ~@9]/2", // D Em D
})).s("gm_harmonica").gain(0.31)

// chords · harmonica · soft notes
const harmonica_soft = note("<~@73 A@2 B@2 ~@17>".pickRestart({
  A: "[~@31 g4@13 ~@16 f#4@3 ~]/2", B: "[g4@8 ~@14 f#4@17 ~@25]/2",
})).s("gm_harmonica").gain(0.15)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@5 B@2 C@8 D@3 E@8 F@2 G@4 H@2 I@8 J@2 K L@4 M@8 N@8 O@2 P@6 Q@8 R@2 S@2 T@2 U@7
>`.pickRestart({
  A: "[~@29 f#4@4 ~@27 d3@8 ~@18 d3@4 ~@9 f#4@4 ~@53 d3@4, ~@20 a2@27 c4@4 b3@38 ~@6 d3@9 ~@9 d4@13 ~@4 e4@9 d4@4 e4@17, ~@25 d3@8 c3@22 ~ g2@34 a2@27 c4@5 b3@38, ~@34 g4@21 ~@14 d3@13 d4@22 g4@22 ~@8 d3@18 d4@8, ~@42 d4@13 ~@5 d4@13 e4@17 ~@13 c3@22 ~ g2@34]/5",
  B: "[~@48 a3@4 ~@9 b3@3, ~ a2@34 [g2,b3]@4 g3@5 b3@8 ~@5 a3@7, ~@5 d3@22 d3@26 [a2,c#4]@11, ~@9 d4@43 ~@12, ~@14 f#4@39 ~@11]/2", // G A
  C: "[~@37 d3@4 ~@9 b3@9 ~@9 b3@8 d3@4 ~@21 d3@8 g3@4 ~@9 b3@5 a3@4 ~@4 e4@8 ~ b3@4 ~@22 b3@8 ~ a3@4 ~@22 a3@7 ~@2 d3@4 ~@21 d3@8 ~ g3@4 g3@4, ~@2 a3@17 a3@22 b3@9 ~@13 a3@12 ~@14 a3@20 b3@13 ~@9 a3@13 ~@4 b3@22 ~@13 a3@22 ~@9 f#3@8 f#3@26 ~@8, ~@6 d2@35 g2@18 [a2,c#4]@16 ~ d2@33 g2@18 [a2,c#4]@17 b2@34 ~ [a2,c#4]@34 ~ d2@34 [g2,b3]@8, ~@11 d3@26 ~@43 d3@20 ~@18 d4@9 ~@17 d4@9 d4@25 ~@10 b3@25 ~@5 d3@21 ~@17, ~@15 f#3@18 f#3@8 ~@5 g3@14 ~@16 f#3@8 ~ f#3@24 ~@4 g3@13 ~@31 f#4@21 ~@48 a3@21 ~@9]/8", // A G
  D: "[~@5 d4@4 ~ a3@3 ~@5 e4@8 ~@28 d3@8 g3@4 ~@9 g3@4 a3@4 ~@5 c#4@8, ~ b3@8 c#4@17 ~ f#3@8 ~ f#3@26 ~@4 g3@9 ~@8 a3@13, ~@10 a2@17 d2@34 ~ [g2,b3]@16 ~ a2@17, ~@13 a3@13 ~ a3@13 a3@21 ~@10 d4@8 c#4@9 ~@8, ~@31 d3@22 ~@43]/3", // G
  E: "[~ d3@4 ~@22 d3@8 g3 ~@12 d4@4 a3@4 ~@10 a3@3 ~ b3@4 ~@5 d4@4 ~@13 b3@9 c#4@14 c#4@4 e4@4 c#4@4 d4@4 ~@4 d3@4 ~@5 e3@4 ~@17 d3@3 ~@2 a3 ~@11 d4@3 ~ a3@4 ~@58 g3@4, ~ d2@34 g2@17 [a2,c#4]@17 ~ b2@35 [a2,b3]@34 d2@33 ~ [g2,b3]@16 ~ [a2,c#4]@42 d3@4 b3@12 b3@8, ~ a3@13 a3@20 ~ b3@9 b3@8 ~@4 a3@9 ~@9 b3@22 ~@9 a3@26 a3@8 [f#3,a3]@13 f#3@20 ~ d4@12 ~@14 b3@29 a3@12 ~@16, ~ f#3@8 f#3@25 ~@5 g3@13 ~@9 e4@8 ~ d4@9 ~@4 d4@22 e4@18 ~@12 c#4@11 ~@6 [e3,a3]@13 [e3,a3]@7 ~@6 g3@12 ~@17 d2@33 g2@16, ~@5 d3@21 ~@118 d3@17 d3@8 ~@13 a3@7 ~@5 a3@8 ~ a3@8 d3@4 a3@4 f#3@20 ~@5 g3@8 ~@4]/8", // A Asus2 G A F#m A5
  F: "[~@9 b3@8 ~@8 f#3@4 ~@12 d3@7 ~ g3@4 ~@8 d4@3, ~ [a2,c#4]@16 d2@31 ~ g2@15, ~@5 a3@12 f#3@8 ~@4 [f#3,a3]@19 ~@5 g3@11, ~@18 a3@11 ~@20 b3@8 b3@7, ~@21 d3@20 ~@23]/2", // A F#m
  G: "[~ a3@4 ~@8 a3@3 ~@2 b3@3 b3@4 ~@21 d4@4 a3@4 ~@24 a3@4 ~ d3@4 ~@20 d3@7 ~ g3@4 ~@5 a3@4, ~ [a2,c#4]@15 ~@2 b2@32 a2@20 a3@5 a2@8 [d2,f#3]@32 [g2,b3,d4]@13, ~@5 a3@8 ~@13 b3@16 b3@8 e4@8 b3@24 ~ a3@12 a3@19 ~ a3@8 ~@5, ~@9 e4@7 ~@2 d4@12 d4@16 ~@4 c#4@32 ~@5 d3@20 ~@21, ~@50 b3@4 a3@8 e4@20 ~@9 e3@23 ~@6 g3@8]/4", // A D G
  H: "[d4@4 a3 ~@7 b3@4 ~ b3@4 d3@4 ~@20 d3@8 ~ g3 ~@2 g3@5 a3@2, ~@4 a2@16 ~ d2@32 [g2,d4]@11, ~@4 c#4@12 c#4@4 ~@9 e3@24 ~@11, ~@4 b3@8 ~@13 d3@20 ~@19, ~@8 a3@13 a3@12 a3@20 ~ b3@10]/2", // G5
  I: "[~@2 d4@4 a3@4 ~@8 c#4@4 ~@29 g3@3 ~ g3@3 ~@9 d4@4 a3 ~@12 [a3,e4]@3 ~@29 a3@4 a3@8 ~@17 a3@8 d3@4 ~@25 d3@3 ~@2 g3@3 ~@9 d4@4 a3@4 ~@43 e3@4 [g2,b3]@2, ~@6 a2@16 ~ d2@31 ~ [g2,b3]@17 ~@20 f#3@20 f#3@7 ~@9 a3@16 ~@9 a3@12 f#3@20 ~@2 a3@8 a3@8 b3@8 ~ b3@42 ~@2, ~@6 c#4@12 ~@8 d3@9 a3@19 ~ d4@12 ~@4 c#4@8 ~ c#4@7 ~ d4@12 d4@20 ~@37 d3@21 a3@7 ~ d4@12 ~@22 d2@35 ~, ~@10 a3@12 f#3@25 d3@7 ~@17 a2@16 ~ b2@32 [a2,c#4,e4]@32 ~ d2@32 ~ [g2,b3]@16 ~ [a2,c#4,e4]@52 ~, ~@15 b3@7 a3@9 e3@23 ~@5 g3@13 ~@3 a3@8 ~@5 b3@8 b3@24 b3@16 b3@16 ~ f#3@8 e3@24 ~@5 g3@12 ~@5 a3@9 a3@8 d3@5 e3@4 a3@8 e3@5 [d3,a3]@9 ~]/8", // A5 G A G A D5
  J: "[~@11 g3@3 ~@13 a3@3 ~@5 d3@4 ~@21 g3@4, ~@2 g3@9 ~@3 a2@16 ~ d2@25 a3@8, ~@7 b3@8 c#4@8 c#4@7 ~ f#3@13 e3@20, ~@19 a3@8 ~@4 a3@21 f#3@12, ~@39 d3@24 ~]/2",
  K: "~@12 a3@4 ~@13 b3@3, g2 a2, a3@3 ~ b3@3 ~, ~@4 [g3,b3]@12 ~@9 a3@7, ~@8 d4@8 ~@5 c#4@11", // G
  L: "[~ b3@4 ~@55 a3@8 ~@29 e3@4 g3 ~@11 d4@4 a3 ~@7 b3@3, ~ b2@38 a3@4 b3@4 e4@21 e3@4 d3@16 a3@12 ~@9 a3@8 b3@8 ~@3, ~ d4@8 d4@13 d4@46 f#3@8 e3@17 d3@8 ~@27, ~@5 b3@21 b3@4 c#4@38 a3@12 f#3@20 ~@4 g3@12 ~@5 a3@7, ~@13 e4@22 a2@33 d2@32 ~ [g2,b3]@16 [a2,c#4]@11]/4", // G A
  M: "[~ c#4@4 ~ d3@2 ~@26 g3@4 ~@13 g3@4 ~@46 g3@3 ~@26 [a2,b3]@8 b3@2 ~@28 b3@4 ~ a3 ~@27 a2@4 ~@30 d3@3 ~ g3@4 ~@9 d4@3 ~, ~@5 d2@32 ~ [g2,b3]@16 ~ [a2,c#4]@37 f#3@4 d3@8 ~ a3@4 g3@29 ~@35 b3@3 a3@9 e4@20 ~ e3@4 d3@21 f#3@7 ~ a3@8 ~ a3@7 ~, ~@5 a3@12 ~ a3@20 ~@4 g3@8 ~@9 a3@17 d3@4 e3@24 ~ d4@8 a3@4 d4@21 d4@9 d4@17 d4@8 e4@9 b3@24 ~ f#3@21 e3@11 ~@5 g3@12 ~, ~@10 d3@20 d3@8 ~@34 d2@32 g2@33 ~ b2@34 ~ a2@24 a3@8 ~ d2@33 [g2,b3]@16 ~, ~@14 e3@12 e3@12 ~@8 d4@8 ~@9 b3@21 a3@20 ~ b3@21 a3@12 ~@4 b3@9 b3@17 ~@5 c#4@32 ~ a3@8 e3@4 a3@20 ~ d4@12 ~@5]/8", // Asus2 G A G
  N: "[a3 ~@45 d3@3 ~@13 b3@4 ~@45 g3@3 ~@13 d4@4 ~@11 d4@4 ~@92 d3@4 ~@8 a3@4 b3@2, [a2,c#4]@16 ~ d2@33 g2@16 ~ a2@20 d3@4 d2@4 e3@8 a3@4 d3@7 ~@9 b3@8 ~@4 b3@11 ~@9 b3@15 f#3@12 e3@4 a3@4 b3@4 e4@20 d3@4 e3@4 f#3@8 a3@4 f#3@7 ~@5 g3@10, b3@8 b3@8 ~@5 d3@21 f#3@7 ~@5 g3@12 ~@9 b3@39 ~@5 a3@12 ~@20 f#3@15 d4@32 b3@4 a3@4 b3@35 ~@15, ~@4 a3@9 a3@16 a3@20 ~ b3@12 ~@5 c#4@12 c#4@35 ~ d4@12 ~@12 c#4@7 ~ d4@12 e4@15 c#4@36 d2@31 ~@15, ~@25 e3@13 e3@11 ~@10 a3@8 ~@4 a3@12 g2@31 ~ g2@16 [a2,a3]@15 ~ b2@31 a2@63 ~ [g2,b3]@14]/8", // A G
  O: "[~@44 d3@3 ~ g3@4 ~@8 d4@4, ~ a2@15 ~ d2@30 ~ g2@16, ~@2 a3@7 [a3,c#4]@7 ~@5 d3@19 a3@7 ~ b3@8 b3@8, ~@5 b3@11 ~@12 f#3@18 ~@6 g3@12, ~@13 d4@33 ~@18]/2", // A
  P: "[~@43 g3@4 ~@12 g3@4 ~@12 a3@4 ~@24 b3@4 ~@65 d3@4 ~ g3 ~@11 d4@3, a2@16 d2@31 [g2,b3]@16 a2@16 b2@56 a3@12 d3@8 f#3@21 ~ d4@8 a3@7, ~@4 a3@12 ~@3 d3@16 f#3@12 ~@4 g3@8 ~@8 a3@8 ~@12 d4@11 d4@45 d2@33 g2@16, ~@8 b3@39 ~@8 d4@8 b3@8 b3@7 ~@4 b3@8 b3@12 ~@5 b3@44 e3@25 ~ a3@3 g3@12, ~@23 f#3@4 a3@12 d3@8 ~@63 g2@58 a3@8 ~ b3@15]/6", // G
  Q: "[~@10 b3@8 ~@34 g3@4 ~@8 a3@5 ~@9 a3@4 a3@4 ~@29 d3@4 ~ g3@3 ~@9 d4@5 ~@4 a3@13 ~@63 d3@4 ~@29 d3@3 ~ [g2,b3]@2, ~ a2@17 d2@51 [a2,b3]@18 ~@3 d3@21 a3@8 ~ b3@17 ~@17 d4@12 d4@39 a2@4 b3@4 c#4@8 ~@4 d3@12 ~ d3@12 ~@6, ~@5 a3@13 ~@4 d3@48 ~@16 f#3@8 e3@24 ~@2 a3@3 g3@13 ~@22 f#3@21 f#3@42 ~ e3@8 e3@12 e3@11 ~@3, ~@26 e3@30 g3@14 ~@16 a3@12 f#3@20 ~@2 d4@8 a3@9 ~@17 b3@8 b3@26 g2@33 [d2,f#3]@32 ~@3, ~@30 f#3@9 a3@4 f#3@17 g2@10 ~@16 d2@33 g2@17 ~ [a2,b3]@17 b2@43 a3@24 ~ a3@12 a3@12 a3@7 ~@3]/8", // G Asus2 D Asus2
  R: "[~@10 b3@4 ~@13 c#4@4 ~@28 d3@3 ~@2, ~@2 g3@12 a2@16 ~ d2@32 ~, ~@6 a3@7 ~@5 a3@12 ~@5 d3@12 a3@16 ~, ~@23 b3@7 ~@9 e3@24 ~, ~@43 f#3@9 d3@4 f#3@7 ~]/2",
  S: "[g3 ~@11 d4@4 ~ a3 ~@43 g3@3, [g2,b3]@16 c#4@12 c#4@9 d3@4 e3@4 f#3@8 a3@4 d3@7, a3!2 a2@6, ~@4 g3@12 b3@8 ~ b3@39, ~@20 a3@13 d2@31]/2", // G
  T: "[~ g3@4 ~@8 g3@3 ~ a3@4 ~@9 c#4@4 ~@28 f#3@2, ~ g2@16 a2@16 ~ b2@30, ~ b3@8 b3@7 ~ c#4@12 ~@5 d4@12 d4@18, ~@5 g3@8 ~@8 a3@12 ~@5 f#3@24 ~@2, ~@25 b3@8 ~ b3@8 b3@17 b3@5]/2",
  U: "[~@32 a3@4 ~@8 e3@4 [e3,a3]@13 ~@4 d3@3 ~ g3@4 ~@9 d4@4 ~@12 b3@4 ~@9 e3@4 ~@17 g3@3 ~ g3@4 ~@10 d4@5 ~@18 b3@7 ~@2 a4@37 ~@5, ~@3 a2@25 e4@7 ~@5 d3@25 ~@8 g3@12 ~ a3@8 a3@8 ~ e3@8 ~@4 [e3,f#3,a3]@20 ~ a3@9 a3@9 ~ b3@18 ~@7 d4@39 ~@5, ~@3 [c#4,e4]@12 b3@20 ~ [f#3,a3]@12 f#3@20 ~ d4@12 ~@9 e3@12 ~ [f#3,a3]@12 ~@21 d4@14 ~@12 e3@19 ~@43, ~@3 b3@8 a3@16 c#4@8 ~ e3@8 ~@17 [e3,a3]@7 ~ a3@8 ~ a3@8 b3@12 ~@8 d3@21 ~ d3@7 ~@6 g3@14 a3@11 ~ a3@14 ~@43, ~@3 a3@4 e3@28 ~ d2@32 ~ [g2,b3]@16 ~ [a2,c#4,e4]@16 ~ d2@32 ~ [g2,b3]@19 [a2,c#4,e4]@26 [d2,d3,e4,f#4]@39 ~@4]/7", // A5 F#m7 C#m F#m A5 G A G …
})).s("gm_acoustic_guitar_steel").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  ~@22 A B C D E F G H I J K L M N O P Q ~@16 R S T U V W V X Y X E Z AA AB AC AD AE ~@15 AF AG AH AI AJ AK ~
>`.pickRestart({
  A: "~@3 x ~@2 x ~", B: "~ x ~@7 x ~@4 x ~@11 x ~@5", C: "~@2 x ~@12 x ~@11 x ~@4", D: "~ x ~ x!2 ~@2 x",
  E: "~@5 x ~@7 x ~@3 x ~@11 x ~@2", F: "~@6 x ~@7 x ~@4 x ~@10 x ~", G: "~@5 x ~@7 x ~@4 x ~@11 x ~",
  H: "~@3 x ~@3 x ~ x ~@5 x", I: "~@6 x ~@11 x ~@12 x", J: "~@15 x ~@4 x ~@11", K: "x ~ x ~@2 x ~@2",
  L: "~ x ~@7 x ~@11 x ~@10", M: "~ x ~@3 x ~@5 x ~@4", N: "~@3 x ~@7 x ~@11 x ~@8", O: "~@3 x ~@8 x ~@11 x ~@7",
  P: "~@5 x ~@7 x ~@10 x ~@7", Q: "~@5 x ~@7 x ~@7 x ~@3 x ~@6", R: "~@7 x ~@5 x ~@2",
  S: "~@3 x ~@7 x ~@3 x ~@11 x ~@4", T: "~@4 x ~@7 x ~@3 x ~@12 x ~@2", U: "~@5 x ~@8 x ~@3 x ~@11 x ~",
  V: "~@7 x ~@7 x ~@3 x ~@11 x", W: "~@8 x ~@7 x ~@2 x ~@11 x", X: "~@6 x ~@7 x ~@3 x ~@12 x",
  Y: "~@7 x ~@6 x ~@3 x ~@11 x ~", Z: "~@4 x ~@11 x ~@10 x ~@4", AA: "~@3 x ~@11 x ~@11 x ~@4",
  AB: "~@4 x ~@10 x ~@11 x ~@4", AC: "~@3 x ~@10 x ~@11 x ~@5", AD: "~@2 x ~@10 x ~@13 x ~@4",
  AE: "~@2 x ~@8 x ~@4 x ~@15", AF: "~@7 x", AG: "~@4 x ~@11 x ~@8 x ~@6", AH: "~ x ~@3 x ~@11 x ~@8 x ~@5",
  AI: "~@3 x ~@3 x ~@11 x ~@8 x ~@3", AJ: "~@4 x ~@4 x ~@12 x ~@4 x ~@4", AK: "~@11 x ~@5 x ~@14",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  ~@22 A B C D E F G H F I J K L M N O@2 ~@15 P Q R S H T U T@2 V H W D X@2 Y Z AA ~@16 AB AC M AD AE ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~@16 x ~@9", C: "~@6 x ~@16 x ~@8", D: "~ x ~ x", E: "~@9 x ~@15 x ~@6",
  F: "~@5 x ~@7 x ~@2", G: "~@9 x ~@16 x ~@5", H: "~@10 x ~@16 x ~@4", I: "~@11 x ~@16 x ~@3", J: "~@3 x ~@3 x",
  K: "~@13 x ~@16 x ~", L: "~@14 x ~@16 x", M: "~@15 x ~@16", N: "x!2", O: "~ x ~@15 x ~@14", P: "~@29 x ~@2",
  Q: "~@3 x ~ x ~@5 x ~@4", R: "~@3 x ~@8 x ~@3", S: "~@8 x ~@16 x ~@6", T: "~@11 x ~@15 x ~@4", U: "~@12 x ~@14 x ~@4",
  V: "~@11 x ~@14 x ~@5", W: "~@10 x ~@14 x ~@6", X: "~@7 x ~@15 x ~@8", Y: "~@7 x ~@14 x ~@9", Z: "~@3 x ~@7 x ~@4",
  AA: "~@7 x ~@24", AB: "~@12 x ~@16 x ~@2", AC: "~@7 x ~@7 x", AD: "x ~@16 x ~@14", AE: "~@3 x ~@12",
})).gain(0.46)

stack(harmonica, harmonica_soft, acoustic_guitar_steel, kick, snare)

More by Alanis Morissette