Strudelify

iieee (remixed version)

Tori Amos

KeyE minorTempo89 bpm
0:00/0:00
// iieee (remixed version) — Amos, Tori
// 89 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(89/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 · piano
const piano = note("<~@24 A@2 ~@20 B ~@4 C D C E C F G H G H ~@27>".pickRestart({
  A: "[e2 e2@2 ~@7 d6 ~@3 a5@2, ~@5 c5@4 c5@4 d#4@3, ~@6 g5@4 ~ c6@3 ~@2]/2", B: "~@2 [b1,b2]@5 ~",
  C: "[b2,e3]@3 ~ [b2,e3,f#3]@2 [b2,e3,g3]@6 ~@4", D: "[c#3,a3]@3 ~ [b2,e3,f#3]@2 [b2,e3,g3]@3 ~ [b2,e3,a3]@5 ~",
  E: "[b2,e3]@3 ~ [b2,e3,f#3]@2 [b2,e3,g3]@4 [b2,e3,a3]@5 ~", // E5 Bsus4 Em Esus4
  F: "[a2,e3,c#4]@3 ~ [b2,e3,f#3]@2 [b2,e3,g3]@3 ~ [b2,e3,a3]@5 ~", G: "~@10 c6@5 ~, [e5,e6]@13 ~@3, ~@8 c5@7 ~",
  H: "~@2 b5@9 ~ b5@3 ~, b4@15 ~",
})).s("gm_piano").gain(0.47)

// other · pad choir · "Choir"
const pad_choir = note("<~@38 A B C B ~@35 A B C B ~@7>".pickRestart({
  A: "f#5@5 ~ g5@10", B: "f#5@5 ~ e5@10", C: "f#5@5 ~ e5@6 ~@2 e5@2",
})).s("gm_pad_choir").gain(0.27)

// chords · synth strings 2 · "Synthesizer"
const synth_strings_2 = note(`<
  ~@11 A@7 B@3 ~@13 C D E F G H I H J K ~@16 L M@8 C D E F C D E F G H I H J K ~@5
>`.pickRestart({
  A: "[~@12 e5 f#5 g5 ~@3 a5@9 ~ g5@2 ~@14 g5@2 b5@4 e5@8 f#5@3 ~ [c5,a5]@4 [b4,g5]@3 ~ [g4,b4,f#5]@5 ~ e5 f#5 g5 ~@3 a5@9 ~ g5@2 ~@2 [b4,d5]@12 g5@2 b5@2, ~@15 b5@3 ~@12 b5@12 ~@37 b5@3 ~@12 b5@12 ~@6, ~@16 [c5,e5]@13 ~@3 [d5,f#5]@16 ~@2 [g4,b4]@11 ~@19 [c5,e5]@13 ~@19]/7", // F Em Gmaj7 Bm C D G C
  B: "[~@2 e5@9 ~ f#5@2 [c5,a5]@4 [b4,e5,g5]@6 ~@2 [a4,d5,f#5]@8 ~@14, ~ [g4,b4]@6 ~@17]/3", // F Em D G
  C: "a4@5 ~ g4@10, [c4,e4]@13 ~@3", D: "a4@5 ~ b4@10, [c4,e4]@13 ~@3", E: "c5@5 ~ b4@10, [d4,g4]@13 ~@3",
  F: "[b3,d#4,f#4,a4]@3 ~ [b3,e4,g4]@3 ~", G: "[a4,c5]@5 ~ [b4,d5]@10", H: "[a4,c5]@5 ~ [g4,b4]@10",
  I: "[a4,c5]@5 ~ [g4,b4]@6 ~@2 [g4,b4]@2", J: "[e4,a4,c5,e5]@13 ~@3", K: "[a4,e5]@3 ~@5", L: "~@12 e5 f#5 g5 a5",
  M: "[~@2 a5@9 ~ g5@2 ~@14 g5@2 b5@4 e5@8 f#5@3 ~ [c5,a5]@4 [b4,g5]@3 ~ [g4,b4,f#5]@5 ~ e5 f#5 g5 ~@3 a5@9 ~ g5@2 ~@2 [b4,d5]@12 g5@2 b5@4 e5@9 ~ f#5@2 [c5,a5]@4 [b4,e5,g5]@6 ~@8, [c5,e5]@13 ~ b5@12 ~@37 b5@3 ~@12 b5@12 ~@38, ~@16 [d5,f#5]@16 ~@2 [g4,b4]@11 ~@19 [c5,e5]@13 ~@21 [g4,b4]@12 ~@18]/8", // F Em Gmaj7 Bm F Em C D …
})).s("gm_synth_strings_2").gain(0.48)

// chords · pad sweep
const pad_sweep = note("<~@8 A@5 ~@9 B@3 ~ B@3 ~ B@3 ~@14 A@5 ~@5 C@4 ~@24 B@3>".pickRestart({
  A: "[~@4 [e4,g4,c5]@2 [d4,f#4,b4]@3 ~ [d4,g4,b4]@2 [e4,a4,c5]@2 [d4,g4,b4]@4 [d4,g4,b4]@2 [e4,g4,c#5]@2 [d4,f#4,b4]@3 ~ [d4,f#4,b4]@2 [f#4,b4,e5]@2 [b3,e4,b4]@4 ~@2 [e4,g4,c5]@2 [d4,f#4,b4]@3 ~ [d4,g4,b4]@2 [e4,a4,c5]@2 [d4,g4,b4]@4 [d4,g4,b4]@2 [e4,g4,c#5]@2 [d4,f#4,b4]@3 ~ [d4,f#4,b4]@2 [f#4,b4,e5]@2 [b3,e4,b4]@4 ~@14]/5", // C Bm G Am G C#dim Bm Esus2 …
  B: "[~@4 [e4,g4,c5]@2 [d4,f#4,b4]@3 ~ [d4,g4,b4]@2 [e4,a4,c5]@2 [d4,g4,b4]@4 [d4,g4,b4]@2 [e4,g4,c#5]@2 [d4,f#4,b4]@3 ~ [d4,f#4,b4]@2 [f#4,b4,e5]@2 [b3,e4,b4]@4 ~@14]/3", // C Bm G Am G C#dim Bm Esus2 …
  C: "[~@4 [e4,g4,c5]@2 [d4,f#4,b4]@3 ~ [d4,g4,b4]@2 [e4,a4,c5]@2 [d4,g4,b4]@4 [d4,g4,b4]@2 [e4,g4,c#5]@2 [d4,f#4,b4]@3 ~ [d4,f#4,b4]@2 [f#4,b4,e5]@2 [b3,e4,b4]@4 ~@2 [e4,g4,c5]@2 [d4,f#4,b4]@3 ~ [d4,g4,b4]@2 [e4,a4,c5]@2 [d4,g4,b4]@4 [d4,g4,b4]@2 [e4,g4,c#5]@2 [d4,f#4,b4]@3 ~ [d4,f#4,b4]@2 [f#4,b4,e5]@2 ~@2]/4", // C Bm G Am G C#dim Bm Esus2 …
})).s("gm_pad_sweep").gain(0.2)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B A B A B A B A B A B C D E@2 C D F G@2 ~ A B ~@2 A B ~@2 A B ~@2 H I J K L M L N O P A B ~ A B A B Q R Q R Q R ~@4
  C D E@2 C D F S H I J K H I J K L M L N O P A B A B ~
>`.pickRestart({
  A: "e2@3 ~ a2 b2 e3@2 ~ g2@2 ~ e2@3 ~", B: "a2@5 ~ b2@2 c3@6 ~@2", C: "c3@5 ~ c4@6 ~@4", D: "d3@5 ~ d4@6 ~@4",
  E: "e3@5 ~ e2@6 ~@4", F: "e3@5 ~ e3@5 ~ e2@3 ~", G: "[e3@5 ~ e3@3 ~ b2@2 e3@6 ~@14]/2", H: "c2@5 ~ c2@5 ~ c3@3 ~",
  I: "a2@5 ~ a2@5 ~ a2@3 ~", J: "g2@5 ~ g2@5 ~ g2@3 ~", K: "b2@3 ~ d#2@3 ~ e2@3 ~ e3@3 ~",
  L: "[f#2,f#3]@5 ~ [g2,g3]@5 ~ [g2,g3]@3 ~", M: "[d#2,d#3]@5 ~ [e2,e3]@5 ~ [e2,e3]@3 ~",
  N: "[d2,d3]@5 ~ [e2,e3]@5 ~ [e2,e3]@3 ~", O: "c2@5 ~ c2@5 ~ b2@3 ~", P: "a2@3 ~@5",
  Q: "e2@2 e2!2 d2@2 e2@3 ~ e2!2 d2@2 e2@2", R: "a2@2 ~ a2!2 g2 a2@3 ~ a2!2 a2@2 g2@2", S: "e3@5 ~ e3@3 ~ b2@2 ~@4",
})).s("gm_electric_bass_pick").gain(0.21)

// chords · distortion guitar
const distortion_guitar = note("<~@51 A B C B C B D E D E ~@27>".pickRestart({
  A: "[b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4] [b3,e4,g4]@2 [b3,e4,g4] [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2, b0@13 ~@3", // Em
  B: "[a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4] [a3,e4,a4]@2 [a3,e4,a4] [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2", // A5
  C: "[b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4] [b3,e4,g4]@2 [b3,e4,g4] [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2", // Em
  D: "c1@13 ~@3", E: "d1@13 ~@3",
})).s("gm_distortion_guitar").gain(0.31)

// chords · acoustic guitar nylon · "Acoutic Guitar"
const acoustic_guitar_nylon = note("<~@34 A B C D E F E F A G ~@25 A B C H I J K L E F E F A G ~@5>".pickRestart({
  A: "[c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4] [c4,e4,g4,b4]@2 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]", // Cmaj7
  B: "[a3,e4,g4]@2 ~ [a3,e4,g4] [a3,e4,g4]@2 [a3,e4,g4]@2 ~ [a3,e4,g4]@2 ~ [a3,e4,g4]@2 ~ [a3,e4,g4]", // A7
  C: "[g3,d4,c5]@2 ~ [g3,d4,c5] [g3,d4,g4]@2 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]", // Gsus4 G5
  D: "[b3,d#4,b4]@2 ~ [b3,d#4,b4] [b3,d#4,b4]@2 [b3,e4,b4]@2 ~ [b3,e4,b4]@2 ~ [b3,e4,b4]@2 ~ [b3,e4,b4]", // B E5
  E: "[f#3,c4,d#4]@2 ~ [f#3,c4,d#4] [f#3,c4,d#4]@2 [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]", // Cdim G
  F: "[c4,d#4,f#4]@2 ~ [c4,d#4,f#4] [c4,d#4,f#4]@2 [b3,e4,g4]@2 ~ [b3,e4,g4]@2 ~ [b3,e4,g4]@2 ~ [b3,e4,g4]", // Cdim Em
  G: "[a3,e4,g4] ~@7", // A7
  H: "[b3,d#4,b4]@2 ~ [b3,d#4,b4] [b3,d#4,b4]@2 [b3,e4,b4]@2 ~ [b3,e4,b4]@2 ~ [b3,e4,b4]@2 ~ [c4,e4,g4,b4]", // B E5 Cmaj7
  I: "[c4,e4,g4,b4] [c4,e4,g4,b4]@2 [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4] [a3,e4,g4]@2 ~", // Cmaj7 A7
  J: "[a3,e4,g4] [a3,e4,g4]@2 [a3,e4,g4]@2 ~ [a3,e4,g4]@2 ~ [a3,e4,g4]@2 ~ [a3,e4,g4] [g3,d4,c5]@2 ~", // A7 Gsus4
  K: "[g3,d4,c5] [g3,d4,g4]@2 [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4]@2 ~ [g3,d4,g4] [b3,d#4,b4]@2 ~", // Gsus4 G5 B
  L: "[b3,d#4,b4] [b3,d#4,b4]@2 [b3,e4,b4]@2 ~ [b3,e4,b4]@2 ~ [b3,e4,b4]@2 ~ [b3,e4,b4] ~@3", // B E5
})).s("gm_acoustic_guitar_nylon").gain(0.33)

// drums · kick
const kick = s("bd").struct("<A@20 ~@2 A@2 ~@2 A@2 ~@2 A@2 B ~ A@9 B A@2 ~ A@4 C@6 B ~ B ~ A@21 B A@4 ~>".pickRestart({
  A: "x!2 ~ x", B: "x", C: "x!2 ~@3 x ~@2",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@28 A@2 ~@3 B ~@16 C D@6 E ~@2 B ~@27>".pickRestart({
  A: "x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@3", B: "~@8 x!7 ~", C: "~@4 x!2 ~@2 x!2 ~@2 x!4", D: "~@4 x!2 ~ x ~ x ~@2 x!2 ~@2",
  E: "x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<A@20 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~ B A@9 ~ A@2 ~ A@4 C@6 ~@3 B A@21 ~ A@4 ~>".pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "~ x ~@3 x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct(`<
  A B A B A B A B A B A B A B A B A B A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B A B A B A B A ~ A B ~ A B A B C@6 ~@4 A B A B
  A B A B A B A B A B A B A B A B A ~ A B A B ~
>`.pickRestart({
  A: "~@3 x!2 ~@7 x ~@3", B: "~@3 x!2 ~@4 x ~@2 x ~@3", C: "x ~ x!3 ~ x ~",
})).gain(0.48)

// drums · china
const china = s("cr").struct("<~@50 [~@5 x ~@3 x ~@4 x!2] [x!8]!6 x ~@30>").gain(0.48)

// drums · ride
const ride = s("rd").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~ x",
})).gain(0.48)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  A B A B A B A B A B A B A B A B A B A B ~@2 A B ~@2 A B ~@2 A B ~ C A B A B A B A B A ~ A B ~ A B A B ~@9 C A B A B A
  B A B A B A B A B A B A B A B A ~ A B A B ~
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~@3 x ~@5", B: "~@2 x!3 ~ x ~ x!4 ~@4", C: "~@6 x!2",
})).gain(1.26)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A B A B A B A B A B A B A B A B A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B A B A B A B A ~ A B ~ A B A B ~@10 A B A B A B
  A B A B A B A B A B A B A B A ~ A B A B ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@6 x ~@2 x ~ x ~@4",
})).gain(1.54)

// drums · congas
const congas_2 = s("conga:33").struct("<~@28 x ~@59>").gain(1.54)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@28 [x!5 ~@5 x!6] [x!10 ~@2 x!4] ~@16 [~@8 x!8] ~@41>").gain(2.43)

stack(
  piano, pad_choir, synth_strings_2, pad_sweep, bass, distortion_guitar, acoustic_guitar_nylon, kick, snare, mid_tom,
  high_tom, china, ride, bongos, congas, congas_2, cabasa
)

More by Tori Amos