Strudelify

That I Would Be Good

Alanis Morissette

KeyA majorTempo130 bpm
0:00/0:00
// That I Would Be Good — Alanis Morissette
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 124 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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.

// other · flute
const flute = note("<~@100 A@5 B@5 C D@3 E@3 F@6 ~>".pickRestart({
  A: "[~@15 c#4@25 ~@2 c#4@4 e4@4 d4@12 ~ c#4@11 ~ d4@7 ~ d4@21 ~ d4@4 c#4@9 ~@2]/5",
  B: "[~@2 d4@4 ~ c#4@4 d4@8 e4@9 b3@4 ~ d4@12 c#4@22 ~ d4@13 c#4@12 ~ d4@7 ~@2 d4@17]/5", C: "~@5 d4@3 c#4@8 ~@5 d4@3",
  D: "[~ c#4@3 ~ d4@9 e4@4 ~ b3@7 ~ c#5@24 ~ c#5@4 ~ e5@4 d5@11]/3",
  E: "[~ c#5@10 ~@2 g#5@4 a5@3 ~@3 d5@11 c#5@9 e4@4 f#4@4 e4@6 ~@2 g#5@4 a5@4 g#5@4 b5]/3",
  F: "[~ e5@2 c#5@3 ~ d5@4 c#5@6 ~ g#5@4 a5@4 g#5@4 b5@2 e5@2 c#5@3 ~ d5@4 c#5@10 g#5@3 a5@4 g#5@4 b5@2 ~ e5@2 c#5@3 d5@5 c#5@5 ~@4 g#5@4 a5@4 g#5@4 b5@2 ~ e5@2 c#5@4 d5@5 c#5@31 ~@2]/6",
})).s("gm_flute").gain(0.36)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@41 A@6 B@3 C@7 D@5 E@3 F@8 G@5 ~@11 H@3 I@7 J@3 K@5 L@6 ~@11>".pickRestart({
  A: "[~@6 f#2@26 e2@9 d2@36 ~@31 d2@4 e2@32, ~@77 b1@33 ~@34]/6", B: "[~@3 f#2@26 e2@9 d2@34]/3",
  C: "[a1@36 e2@34 [a1,a2]@11 ~@2 [a1,a2]@21 [d2,d3]@12 ~ [d2,d3]@20 [b1,b2]@11 ~@2 [b1,b2]@18]/7", // A D B
  D: "[d3@5 [e2,e3]@11 ~@3 [e2,e3]@22 ~ c#3@10 ~@2 [f#1,c#3]@21 ~ c#3@10 ~@3 c#3@20 b2@11, d2@2 ~@39 f#1@11 ~@68]/5", // E F#5
  E: "[~@2 b2@13 a2@26 b2@17 ~@9 f#2@5]/3",
  F: "[~@3 a2@9 c#3@9 ~@9 d3@15 ~@2 [d2,d3]@8 [b1,b2]@12 ~ [b1,b2]@11 ~@3 [b1,b2]@9 [e2,e3]@11 ~@3 [e2,e3]@12 ~@2 e3@7 [f#1,f#3]@12 ~@2 f#3@12 e3@8 [d2,d3]@10 ~@3 [d2,d3]@11 ~@2 [d2,d3]@6, ~@21 d2@24 ~@73 e2@8 ~@14 f#1@21 ~@31]/8", // D B E F# D
  G: "[~@2 [a1,a2]@11 ~ a2@13 d3@8 ~ e2@64 ~@20, ~@14 a1@21 e3@64 ~@21]/5", // A
  H: "[~@5 [a1,a2]@34 [d1,d2,d3,f#3,a3]@33]/3", // A D
  I: "[~ [b1,b2,d3,f#3]@34 [e2,e3,b3]@34 e4@34 [d2,d3,e4,a4]@35 [b1,b2,b3,d4,f#4]@30, ~@23 [a1,a2,b3]@12 ~@21]/7", // Bm E5 Dsus2 Bm Asus2
  J: "[~@5 [e1,e2,e3,g#3,b3]@34 ~ e4@32, ~@13 [a1,a2,b3]@11]/3", // E Asus2
  K: "[~ [d2,d3,e4]@36 [b1,b2,d4]@33 [e1,e2,e4,g#4]@34 a1@16]/5", // Dsus2 Bm E
  L: "[~@20 e4@26 e4@9 ~@25 f#4@9 e4@33 ~@22, ~@19 d2@36 [b1,b3,d4]@35 ~@54, ~@20 [d3,a4]@37 ~@87]/6", // Bm D5
})).s("gm_string_ensemble_1").gain(0.31)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@60 A ~@32 B@5 ~@2 C@5 ~ D@7 ~@11>".pickRestart({
  A: "~@5 d1@9 ~@10", B: "[~@11 g#3@34 ~@34 [d4,f#4]@35 ~@6, ~@15 [a3,c#4]@12 ~@13]/5",
  C: "[~@15 [a3,c#4]@34 [d4,f#4,a4]@36 [b3,f#4]@35]/5", // A D B5
  D: "[~@8 e4@35 ~ d4@35 b2@34 [e1,e2]@33 ~@22, ~@8 [a2,a3,b3,c#4]@37 ~@123, ~@43 f#4@36 f#4@25 ~@64]/7", // E A
})).s("gm_string_ensemble_1").gain(0.15)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  A@2 B@3 C@8 D@3 E@2 F@7 G@8 H@4 I@7 J@6 K@2 L@2 M@8 N O@2 P@8 Q@4 R@5 S@7 T@3 U@2 V@8 W@4 X@8 Y@4 Z@6
>`.pickRestart({
  A: "[[a2,a3,c#4]@10 ~@3 [a2,a3,c#4]@21 ~ [d2,d3,a3,c#4]@12 ~]/2", // A Dmaj7
  B: "[[d2,d3,a3,c#4]@22 ~ [a2,a3]@13 [a2,a3,c#4]@22 ~ [d2,d3,a3,c#4]@12 ~, ~@22 c#4@13 ~@37]/3", // Dmaj7 A Dmaj7
  C: "[[d2,d3,a3,c#4]@22 ~ [a2,a3,c#4]@12 ~ [a2,a3,c#4]@22 ~ [d2,d3,a3,c#4]@11 ~ [d2,d3,a3,c#4]@21 ~ [e2,e3,b3]@12 ~ [e2,e3,b3]@22 ~ [e2,e3,g#3,b3]@12 ~ [e2,e3,g#3,b3]@23 [a2,a3,c#4]@12 ~ [a2,a3,c#4]@14]/8", // Dmaj7 A Dmaj7 E5 E A
  D: "[~@9 [d2,d3,a3,c#4]@12 ~ [d2,d3,a3]@21 [e2,e3,b3]@13 ~@13 e3@3, ~@21 c#4@21 ~@14 e2@16, ~@56 e3@13 ~@3, ~@19 b3@5]/3", // Dmaj7 D5 E5
  E: "[~@6 [e2,e3,g#3,b3]@14 e3@14 e3@9 [f#2,a3,c#4]@5, ~@20 [e2,g#3,b3]@23 ~@5]/2", // E F#m E
  F: "[~@4 f#3@5 f#3@13 f#3@9 d3@9 d3@4 ~@14 d3@8 ~ b2@9 b2@4 ~@15 [b2,c#4]@9 e3@9 ~@18 e3@9 ~@9 f#3@4 ~ [f#2,f#3,a3,c#4]@13 f#3, ~@9 [f#2,a3,c#4]@22 [d2,f#3,a3]@13 [f#3,a3]@22 ~@47 e3@18 ~@9 a3@13 ~@15, ~@44 d3@14 ~@22 b2@14 ~@46 f#3@9 ~@19, ~@45 d2@22 [b1,b3,d4]@14 [b1,b3,d4]@23 [e2,b3]@14 [e2,g#3,b3]@22 ~ [f#2,c#4]@13 ~@14]/7", // Bsus2 F#m D F#m Bm E5 E F#5
  G: "[~@8 d3@9 d3@4 ~@14 d3@9 ~@9 a3@4 ~ a3@13 ~@36 e3@8 ~ a3@8 a3@4 ~ a3@12 a3@9 d3 ~@7 d3@3 ~@14 d3@8 ~ e3@8, ~@8 [d2,f#3,a3]@13 [d2,f#3,a3]@23 c#4@12 ~@15 b3@18 e3@18 ~@85, ~@44 a3@9 ~@18 a3@44 ~@77, ~@45 a2@12 [a2,c#4]@48 ~@11 [a2,b3,c#4]@13 [a2,c#4]@21 ~@42, ~@80 e2@13 [e2,b3]@22 ~@35 [d2,a3,c#4]@11 ~ [d2,a3,c#4]@21 [e2,g#3,b3]@9]/8", // D A E5 Dmaj7 E
  H: "[~@18 [e3,a3]@8 ~@9 e3@4 e3@13 e3@9 ~ a3@8 a3@4 ~ a3@12 a3@9, e3@18 ~@43 c#4@13 ~ c#4@21, ~@4 [e2,g#3,b3]@22 [e2,g#3]@13 [e2,g#3]@22 ~ a2@12 a2@22]/4", // A5 E
  I: "[d3@8 ~ d3@4 d3@13 d3@8 ~@26 [e3,a3]@8 ~ e3@8 e3@4 ~@14 e3@9 f#3@8 f#3@4 ~@13 f#3@9 ~ d3 ~@7 d3@4 ~@13 d3@4, [d2,a3,c#4]@12 ~ [d2,a3,c#4]@21 [e2,g#3,b3]@13 [e2,g#3,b3]@21 [e2,g#3]@13 e3@13 ~@45 [f#3,a3]@12 ~@17, ~@42 e3@18 ~@21 g#3@22 ~@65, ~@82 e2@22 [f#2,a3,c#4]@12 [f#2,a3,c#4]@22 d2@13 [d2,f#3,a3]@17]/7", // A5 Dmaj7 E F#m D
  J: "[~@5 b2 ~@8 b2@4 ~@14 [b2,c#4]@8 ~ e3@8 e3@4 ~@14 e3@9 f#3@8 f#3@4 ~ f#3@13 f#3@8 ~@9 d3@4 ~@13 d3@8, ~@3 [b1,b3,d4]@6 d4@11 ~@52, ~@9 b2@7 ~@39 f#3@6 ~@11, ~@19 [b1,b3]@22 [e2,b3]@13 [e2,g#3,b3]@22 [f#2,a3,c#4]@13 [f#2,a3,c#4]@21 ~ [d2,a3]@12 [d2,f#3,a3]@21]/6", // Bsus2 Bm B E5 E F#m D5 D
  K: "[~ a3@9 a3@4 ~@13 a3@9 e3@9 e3@3, ~ [a2,c#4]@13 [a2,c#4]@23 ~@11, ~@14 a3@13 ~@9 [e2,b3]@12, ~@23 b3@13 ~@12]/2", // A E5
  L: "[~@2 e3@11 e3@8 ~ a3@8 ~ a3@4 ~ a3@12, ~@2 [e2,b3]@20 [a2,c#4]@13 [a2,c#4]@13]/2", // E5 A
  M: "[a3@8 d3@8 d3@4 ~ d3@12 d3@9 b2 ~@8 b2@4 ~ b2@13 ~ c#4@9 e3@8 e3@4 ~@14 e3@9 f#3@8 f#3@5 f#3@13 f#3@9 ~@25 d3@8 b2 ~@7 b2@2, ~@8 [d2,a3,c#4,e4]@12 c#4@22 [b1,b3,d4]@13 ~ [b1,b3,d4]@23 [e2,b3]@12 e3@13 ~@52 d3@17 ~@19, ~@21 [d2,a3,e4]@22 ~@26 b2@9 ~@13 e2@23 [f#2,a3,c#4]@13 [f#2,a3,c#4]@22 [d2,f#3,a3]@12 [d2,f#3,a3]@21 [b1,b3,d4]@10, ~@92 b3@23 ~@77]/8", // A Bm E5 Dsus2 F#m D Bm
  N: "~@2 b2@13 ~ [b2,c#4]@8, ~ [b1,b3,d4]@11", // Bsus2 Bm
  O: "[~@9 e3@4 ~@13 e3@9 f#3@8 ~ f#3@4, ~ [e2,b3]@12 e2@21 ~ [f#2,a3,c#4]@13, ~@13 e3@13 ~@22, ~@14 b3@21 ~@13]/2", // E5 F#m
  P: "[f#3@12 ~ f#3@9 ~@26 d3@9 ~@26 [b2,c#4]@9 e3@9 ~@17 e3@9 f#3@8 f#3@4 ~ f#3@12 f#3@9 ~@25 d3@6, [f#2,a3,c#4]@22 [d2,f#3,a3]@13 [d2,f#3,a3]@22 [b1,b3,d4]@13 [b1,b3,d4]@22 [e2,b3]@13 [e2,b3]@22 [f#2,a3,c#4]@13 [f#2,a3,c#4]@21 [d2,f#3,a3]@12 ~ [d2,f#3,a3]@18, ~@30 d3@18 ~@17 b2@18 ~@18 e3@17 ~@51 d3@17 ~@6]/8", // Bsus2 F#m D Bm E5 F#m D
  Q: "[~@2 a3@8 a3@5 a3@13 a3@8 ~@30 a3@4 ~@9 e3@17, ~@2 [a2,c#4]@13 [a2,c#4]@22 b3@34 ~@25, ~@37 [e2,g#3]@12 [e2,g#3]@21 [e2,g#3]@26, ~@45 e3@16 ~ e3@9 ~@25]/4", // A E
  R: "[[e3,g#3,b3]@9 a3@9 a3@4 ~ [a2,a3]@21 [d2,d3,a3,c#4]@12 [d2,d3,a3,c#4]@21 e3@9 ~@19 [e3,a3]@9 [e2,e3,g#3]@6, ~@9 [a2,c#4]@13 c#4@21 ~@34 [e2,g#3,b3]@14 [e2,g#3,b3]@23 ~@6, ~@43 e3@9 ~@8]/5", // E A Dmaj7 A5 E A E
  S: "[~@3 e3@4 e3@13 ~ e3@9 [a2,a3,c#4]@13 a3@13 ~ a3@9 [d2,d3,a3,c#4]@13 ~@15 d3@8 e3@9 e3@4 ~ e3@14 e3@4 e3@4 ~ e3@9 e3@4 e3@13 e3@3, ~@7 [e2,g#3]@23 ~@13 [a2,c#4]@23 ~@13 [d2,c#4]@23 [e2,g#3,b3]@13 [e2,g#3,b3]@23 ~ [e2,g#3]@13 [e2,g#3]@16, ~@79 d3@14 ~@75, ~@40 a3@11 ~@33]/7", // A Dmaj7 E A Dmaj7 E
  T: "[~@6 a3@8 a3@4 ~ a3@13 [a3,c#4]@8 d3@8 ~ d3@4 [d2,d3]@12 [d2,d3]@7, ~@3 e4@17 ~@16, ~@6 [a2,c#4]@12 c#4@13 ~@22 [a3,c#4]@19, ~@19 a2@21 [d2,a3,c#4]@13 ~@19]/3", // A D A Dmaj7
  U: "[~ b2@8 ~ b2@4 b2@14 [b2,c#4]@8 e3@8 ~ e3@3, ~ [b1,b3,d4]@13 [b1,b3,d4]@22 [e2,b3]@12]/2", // Bsus2 Bm E5
  V: "[~ e3@13 e3@8 a3@8 ~ a3@4 [a3,c#4]@13 [a3,c#4]@8 ~ d3@8 d3@4 ~ d3@13 d3@8 b2 ~@8 b2@4 ~@14 [b2,c#4]@8 ~@26 e3@8 a3@8 ~ a3@4 [a3,c#4]@13 [a3,c#4]@6, ~ [e2,b3]@21 [a2,c#4]@13 a2@22 [d2,a3,c#4]@12 ~ [d2,a3,c#4]@21 b1@13 d4@22 e3@8 ~ e3@17 ~@40, ~@92 [b3,d4]@12 b2@13 ~@9 e2@13 [e2,b3]@21 [a2,c#4]@13 a2@19, ~@105 [b1,b3]@22 b3@12 ~@53]/8", // A Bsus2 A E5 A Dmaj7 Bm E5 …
  W: "[~@3 d3@8 d3@4 ~@13 d3@8 ~@26 b2@9 ~@13 [e2,g#3,b3]@12, ~@3 [d2,a3,c#4]@12 [d2,a3,c#4]@22 [b1,b3,d4]@12 [b1,b3,d4]@22 [e2,g#3,b3]@12 ~@13, ~@45 b2@17 ~@18 e3@16]/4", // E Dmaj7 Bm E
  X: "[~ [e3,g#3,b3]@8 ~ a3@9 a3@4 [a3,c#4]@13 [a3,c#4]@8 ~@14 [a3,c#4]@13 [d3,a3,c#4]@8 ~@13 [b3,d4]@13 [b2,b3,d4]@8 ~@13 [g#3,b3]@13 [e3,g#3,b3]@6 ~@2 [a2,a3,c#4]@12 ~ [a2,a3,c#4]@20 ~ [d2,d3,a3,c#4]@11, ~@10 [a2,c#4]@13 a2@22 [d2,a3,c#4]@13 d2@21 b1@13 b1@21 [e2,g#3,b3]@12 ~ e2@20 ~@46, ~@54 d3@17 ~@9 [b3,d4]@12 ~@100, ~@88 b2@17 ~@17 e3@17 ~@53]/8", // E A Dmaj7 Bm G#m E A Dmaj7 …
  Y: "[~ [d2,d3,a3,c#4]@20 ~ [a2,a3,c#4]@12 ~ [a2,a3,c#4]@19 [d2,d3,a3,c#4]@11 ~ [d2,d3,a3,c#4]@20 [a2,a3,c#4]@10]/4", // Dmaj7 A Dmaj7 A
  Z: "[~@2 [a2,a3,c#4]@21 ~ a3@12 [d2,d3,a3,c#4]@21 ~ a3@11 ~ [a2,a3]@67 ~@7, ~@23 [d2,d3,c#4]@12 ~@22 [a2,c#4]@12 c#4@67 ~@8]/6", // A Dmaj7 A Dmaj7 A
})).s("gm_electric_guitar_jazz").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  ~@29 A B C D E F G H I J K L M N O P D Q R S E T U V W X P Y Z AA Y AB AC AD AE L AF AG AH M AI C AA AJ AK U AL AM
  ~@12 P AN AO AP U AQ W X Z AR Z AN AO AS AT AU AV AW AX AY AZ BA AJ AN G BB AM BC G BD BE AW ~@3
>`.pickRestart({
  A: "~@19 x ~@4", B: "~@3 x ~@4", C: "~@3 x ~@6 x ~", D: "~@2 x", E: "~ x ~@4", F: "~ x ~@6 x ~@3", G: "~@13 x ~@10",
  H: "~ x ~@10", I: "x ~@12 x ~@10", J: "~@10 x ~@12 x", K: "~@5 x", L: "~@5 x ~@6", M: "~@7 x ~@12 x ~@3", N: "~@3 x",
  O: "~ x ~", P: "~@5 x ~@12 x ~@5", Q: "~ x ~@2", R: "~@3 x ~@13 x ~@6", S: "~@7 x ~@4", T: "x ~@6 x ~@4", U: "~ x",
  V: "~ x ~@21 x", W: "~@11 x ~@7 x ~@4", X: "~@8 x ~@12 x ~@2", Y: "~@7 x ~@8 x ~@7", Z: "~@6 x ~@12 x ~@4",
  AA: "~@4 x ~@12 x ~@6", AB: "~@5 x ~@11 x ~@6", AC: "~@2 x ~@11 x!2 ~@8", AD: "~@3 x ~@7 x ~@12",
  AE: "x ~@12 x ~@8 x ~", AF: "x ~@2 x ~@3 x", AG: "~@10 x ~@8 x ~@4", AH: "~@4 x ~@6 x", AI: "~@9 x ~@7 x ~@6",
  AJ: "~@3 x ~@3 x ~@4", AK: "~@3 x ~@11 x ~@7 x", AL: "~ x ~@8 x ~@11 x ~", AM: "~@11 x ~@12", AN: "~@3 x ~@12 x ~@7",
  AO: "~@5 x ~@8 x ~@9", AP: "~ x ~@5 x ~@3 x", AQ: "~ x ~@8 x ~@12 x", AR: "~@8 x ~@7 x!2 ~@6", AS: "~ x ~@3 x ~@2",
  AT: "~ x ~@2 x ~@3", AU: "~ x ~@7 x ~@12 x ~", AV: "~@11 x ~@8 x ~@3", AW: "~@9 x ~@12 x ~", AX: "~@7 x ~@13 x ~@2",
  AY: "~@10 x ~@7 x!2 ~@4", AZ: "~@2 x ~@2 x", BA: "~@4 x!2 ~@12 x ~@5", BB: "~@2 x ~@20 x", BC: "~@8 x ~@10 x ~@4",
  BD: "~ x ~@6", BE: "x!2",
})).gain(0.41)

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

stack(flute, string_ensemble_1, string_ensemble_1_soft, electric_guitar_jazz, kick, tambourine)

More by Alanis Morissette