Strudelify

Flying Dutchman

Tori Amos

KeyG majorTempo124 bpm
0:00/0:00
// Flying Dutchman — Amos, Tori
// 124 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · "Bösendorfer"
const piano = note(`<
  A B C D E B C D F G H@2 I G J K@2 L@2 M N O@2 P@2 Q R S@2 T U V W X Y Z AA X Y Z AA X Y AB AC G H@2 I G J K@2 L@2 M N
  O@2 P@2 Q R S@2 T U V W X Y Z AA X Y Z AA X Y AB AD AE AF AG@2 AH AI AJ@2 AE AF AG@2 AE AK AL@2 AM@2 AN AO AP AQ B C D
  F AR AS AT AU AV AW AX AY AR AS AT AU AV AW AZ@2 Q R S@2 T U V W X Y Z AA X Y Z AA X Y
>`.pickRestart({
  A: "~@7 [f4,a#4,c5]", // Fsus4
  B: "[f4,a#4,c5]@2 [f4,a#4,c5]@2 [f4,a#4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,g4,c5]@2 [f4,g4,c5]@2 a#2 c3, f2@3 f3@2 a2@2 [f4,a#4,c5]", // Fsus4 F Fsus2 Fsus4
  C: "[f4,a#4,c5]@2 [f4,a#4,c5]@2 [f4,a#4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,g4,c5]@2 [f4,g4,c5]@2 f2 g2, c2@3 c3@2 e2@2 [f4,c5]", // Fsus4 F Fsus2 F5
  D: "[f4,g4,c5]!3 [e4,g4,c5]!2 [d4,g4]!2 [g3,c4,g4], g1@3 g3@2 g3@2 ~", // Fsus2 C G5 C5
  E: "[c4,d4,g4]!3 [b3,d4,g4]!2 g3 g2 [f2,f4,a#4,c5], g2@3 g3@2 [a3,d4,g4]@2 ~", // Csus2 G Fsus4 Dsus4
  F: "[c4,d4,g4]!3 [b3,d4,g4]!2 [c3,c4] [d3,d4] [d#3,d#4], g2@3 g3@2 ~@3", // Csus2 G C D D#
  G: "[d#2,a#2]@2 d#4@2 [f3,a#3] g3 d#3@2, ~ d#4", // D#5 A#5
  H: "[[d2,a2] d4!3 [d3,f#3,d4]@2 [c2,c4] c3 ~@4 [f#4,d5] [g4,e5] [e4,c5]@2, ~@7 d4@3 [f#4,d5]@2 ~@4, ~@8 [d2,a2]@3 a3@3 ~@2]/2", // D5 D C D C D D5
  I: "~@2 [f#4,d5]!3 [g4,e5] [e4,c5]@2, [d2,a2]@3 a3@3 ~@2", J: "[d2,a2]@2 d4@2 [d3,f#3,d4]@2 [d3,d4] [d#3,d4]",
  K: "[c#4 d#4@2 [g4,d#5]@2 g#4@2 ~@3 [a#3,g4,d#5] [c4,g#4] [a#3,g4,d#5] [g#3,f4] [g3,d#4]@2, [d#2,a#2]@2 ~ a#3@4 [g4,d#5]@3 ~@6, ~ d#3]/2", // Cm D# Fm D# C# Cm D#5 Cm
  L: "[g4 a3 b3 d4@3 ~@3 a3 b3 ~ g3@4, [g2,d3]@2 g2 ~, ~@3 d4@3 ~@2, ~@11 g4@3 ~@2]/2", // G5
  M: "d#3 g3 ~ f#4@2 g4@3, d#4@3 ~@5, ~ a#3@3", N: "d3 g3 ~ f#4@2 g4@3, d4@3 ~@5, ~ a#3@3",
  O: "[c3 d#3 ~ f#4@2 g4@2 ~ b2 g3 ~ d4@3 g3@2, c4@3 ~@4 a4@2 g4@2 ~@5, ~ g3@3 ~ b3@3]/2",
  P: "[g3!2 c4 d4@3 d4 c4 ~ g4 c5 d5@3 c3 d3, c3@3 ~, c4 ~@3 d4@4]/2", Q: "~@2 [d4,f#4]!3 e4 [a3,d4]@2, [d2,a2] d3",
  R: "[b3,e4]@2 b3 ~@3 d4 e4, [g2,d3] g3, ~@3 d4@3 ~@2", // E5 G5
  S: "[~@2 [f#4,d5]!3 [e4,c5] [d4,b4] ~@2 c5 g4@2 [d4,e4] d4 c4@2, [b1,f#2] d3 [c2,g2] c3, ~@7 d4@5 ~@4, ~@7 b4@2 ~@7]/2", // D C G Dsus2 B5 C5
  T: "~ d4 [b3,f#4]!3 e4 d4@2, [b1,f#2] b2", U: "f4 e4 d4 ~@3 d4!2, [c2,g2] c3, ~@3 d4@3 ~@2",
  V: "~@5 [b4,d5] [a4,c#5] b4, [a2,e3] [g2,d3], ~@2 [a4,c#5]@3 ~@3", // Bm A A5 G5 A
  W: "b4 ~@3 d3@2 d2@2, [d4,f#4], [d2,a2] ~, ~ a4@6 ~", X: "a#4@2 a4@2 ~ a2 a#2 c3, [c4,f4], [f2,c3,f3]@3 ~, ~ g4",
  Y: "[c4,f4,g4]@2 [c4,d4] e4 ~ e3 f3 g3, [c2,g2,c3]@3 ~, ~ d4", Z: "[c4,d4,g4]!3 [b3,d4,g4]@2 d5 b4@2, [g2,d3]",
  AA: "[c4,d4,g4]!3 [b3,d4,g4]@2 a4 g4@2, [g2,d3], ~@3 b4@3 ~@2", // Csus2 G G5
  AB: "[c4,d4,g4]!3 [b3,d4,g4]@2 [a3,d4,g4] [a3,d4,g4]@2, [g2,d3]@3 [g2,d3]@4 ~", // Csus2 G Dsus4 G5
  AC: "[c4,d4,g4]!3 [g2,d3,b3,d4,g4]@2 [c2,c3,c4,c5] [d2,d3,d4,d5] [d#2,d#3,d#4,d#5], [g2,d3]@3 ~@5", // Csus2 G C D D# G5
  AD: "[c4,d4,g4]!3 [g2,e3,b3,d4,g4] [b3,d4,g4]@2 a4@2, [g2,d3]@3 ~ [g2,e3]@4", // Csus2 Em7 G G5 C
  AE: "d4 ~@2 f3 ~@2 g4@2, a#2@3 ~ a#3@4, ~ f4@4 ~@3", AF: "[d5,g5] e5 ~ g3 g4 a4@2 ~, c3@3 ~ c4@4, ~ c5 ~@2",
  AG: "[f4@2 g4 [f3,d4] c4@3 ~@2 b4 ~ d3 g4@2 a4@2, a#2@3 ~ a#3@4 g2@3 ~ g3@4, ~@7 c5@2 ~ d5@2 ~@4]/2", // Dm
  AH: "d4 ~@2 f3 ~@2 g4@2, a#2@3 ~ a#3@4, ~ f4@6 ~", AI: "[d4,g4] e4 ~ g3 [c5,e5]@2 [a#4,d5]@2, c3@3 ~@5, ~ c4 c4@2",
  AJ: "[g4 a4 d5 a5 g4 a4 d5 a5 g4 a4 d5 a5 g4@2 a4@2, g2@3 ~]/2", AK: "[d4,g4] e4 c4@2 c5@2 a#4@2, [c3,g3]",
  AL: "g4 a4 d5 a5 g4 a4 d5 a5", AM: "[g4 a4 d5 a5 g4 a4 d5 a5 g4 a4 d5@3 g4 g5 [a#5,f6], g3@3 ~]/2",
  AN: "[a#5,f6]!3 [a5,f6]!2 [g5,f6]!2 [a#5,f6], [f3,c4]@3 [f3,c4]@3 [f3,c4]@2", // A#5 Dm G7 A#5 F5
  AO: "[a#5,f6]!3 [a5,f6]!2 [g5,f6]!2 [f5,c6], [g2,d3]@3 [g2,d3]@3 [g2,d3]@2", // A#5 Dm G7 F5 G5
  AP: "[f5,c6]!3 [e5,c6]!2 [d5,g5]!2 [c5,g5], [g2,d3]", AQ: "[c5,g5]!3 [b4,d5]!2 [a4,d5]@2 [f4,a#4,c5]",
  AR: "a#3 d4 c4 d4 a#3 a#4 a4 a#4, a#1 ~ a#2 ~", AS: "[c2,g2,a4]@2 g4 a4 [c3,g4]@2 c2 d2",
  AT: "[a4,c5]@3 [g4,a#4] d#3@2 d3@2, [d#2,a#2] ~ [d#4,g4]@2", AU: "[a4,c5]@3 [g4,a#4] [g2,d4,g4]@2 a2 a#2, g2 ~",
  AV: "a#3!2 a#3@2 ~ a#4 a4 a#4, a#1 ~ d3 a#2", AW: "[c2,g2,a4]@2 g4 a4 [c2,c3]@2 [d2,d3]@2, ~ g4",
  AX: "[a4,c5]@3 [g4,a#4] [d#4,g4]@4, [d#2,a#2] ~ d#3 ~", AY: "[a4,c5]@3 [g4,a#4] [g3,d4,g4]@2 ~@2, g2 ~",
  AZ: "[[a4,c5]@3 [g4,a#4] f#3@2 ~@2 [a#4,d5]@4 d5@4, [d#2,a#2] ~ [d#4,g4]@2 d4@4, ~@3 g3@4 ~]/2", // Am Gm A# D#5 D#
})).s("gm_piano").gain(0.41)

stack(piano)

More by Tori Amos