Strudelify

The Eighth Wave

Suzanne Ciani

KeyE minorTempo132 bpm
0:00/0:00
// The Eighth Wave — Suzanne Ciani
// 132 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 22, 4/4 at bar 23, 3/4 at bar 24, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: 
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 160 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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 · piano · "#A.PIANO 3"
const piano = note(`<
  ~@15 A B@9 C ~@18 D@4 E@4 F@3 ~ G@4 H@4 ~@12 H@2 I@4 J@2 K@3 L@2 M@5 ~@19 N O P Q R@2 S@2 ~@39
>`.pickRestart({
  A: "~@4 b5 e6 f#6 g6", B: "b6 g6 f#6 e6 b5 e6 f#6 g6", C: "b6@13 ~@3", D: "a6/4", E: "g6/4", F: "[c7@11 ~@5]/3",
  G: "[a6 b6]/4", H: "e7/2", I: "[e7@2 ~ g7, ~@16 d7@15 ~]/4", J: "[~ g6, b6@31 ~]/2", K: "e7", L: "[~ d7, e7@15 ~]/2",
  M: "[~@3 c7@2, b6@30 ~@2 a6@15 ~@33, ~@16 g6@23 ~ b6@32 ~@8]/5", N: "[a5,e6]@3 ~ a5@2 d6@2 g5@2 a5 ~@3 f5@2",
  O: "b5 g5 e5@2 a5@2 f5@2 d5@2 e5 f5 g5@2 f5@2", P: "c5@2 ~@4 d5@2 ~@2 a4 b4 c5@2 a4@2",
  Q: "~@2 g4@2 e4@2 a4@2 d4@2 g4 ~@3 c4@2", R: "[e4,e5]/2", S: "[[e4,e5]@31 ~]/2",
})).s("gm_piano").gain(0.29).pan(0.3)

// other · piano · "#A.PIANO 3" · soft notes
const piano_soft = note("<~@113 [~@2 c6@2 ~@7 b5 c6 a5 ~@2] ~ [~ e5 a4 ~ g4 ~@3] [b4@2 ~@9 f4 e4 d4 ~@2] ~@43>")
  .s("gm_piano").gain(0.17).pan(0.3)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@44 A B C D E@4 F G@2 H@5 ~@32 A B C D I@4 F J K L M N O P Q R S T U R S T V@3 W@2 ~@39
>`.pickRestart({
  A: "[c4,e4,a4]@3 [b3,d4,g4]@2 [c4,e4,a4]@2 [c4,e4,a4]", B: "[c4,e4,a4]@3 [b3,d4,g4]@2 [c4,e4,a4]@3",
  C: "~@2 [c4,e4,a4] [b3,d4,g4]@2 [c4,e4,a4]@3", D: "[e4,a4,c5]@2 [d4,g4,b4] [c4,e4,a4]@2 [b3,d4,g4]@3",
  E: "[g4@13 f#4 d4 ~@2 b3@15, ~@15 a3@16 ~]/4", F: "[e4,a4,c5]@3 [d4,g4,b4]@2 [e4,a4,c5]@2 [e4,a4,c5]",
  G: "[[e4,a4,c5]@3 g4@2 [e4,a4,c5]@5 [e4,a4,c5] [d4,g4,b4]@2 [e4,a4,c5]@3, ~@6 [d4,b4]@13 ~@13]/2", // Am G Am G
  H: "[[a4,c5,e5]@2 [g4,b4,d5] [d4,g4,b4]@2 b3@3 a4@16 g#4@14 ~@2, ~@5 [d4,g4]@16 ~@19, ~@4 [b3,e4]@15 ~]/5", // Am G G5 E5
  I: "[g4@26 f#4@2 d4@2 ~@31 b4@3, ~@30 a3@26 f#4@3 a4@4 ~, ~@34 b3@29 ~, ~@51 d4@12 ~, ~@53 e4@10 ~]/4",
  J: "[e4,a4,c5]@3 [d4,g4,b4]@2 [e4,a4,c5]@3", K: "~@2 [e4,a4,c5] [d4,g4,b4]@2 [e4,a4,c5]@3",
  L: "[a4,c5,e5]@2 [g4,b4,d5] [d4,g4,b4]@2 [b3,d4,g4]@3", // Am G
  M: "[b4,d5,g5]@2 [a4,c5,f5] [g4,b4,e5]@2 [f4,a4,d5]@2 [e5,a5,c6]", // G F Em Dm Am
  N: "[d5,g5,b5]@2 [c5,f5,a5] [d5,g5,b5]@2 [e5,a5,c6]@3", // G F G Am
  O: "[d5,g5,b5,d6]@2 ~ [c5,f5,a5]@2 [b4,e5,g5,b5]@3 [a4,c5,f5,a5]@3 [g4,b4,e5,g5]@2 [f5,a5,c6,f6]@3, ~@2 c6@3 ~@11", // G F Em F Em F
  P: "[e5,g5,b5,e6]@3 [d5,f5,a5,d6]@2 [c5,e5,g5,c6]@3 [b4,d5,f5,b5]@3 [a4,c5,e5,a5]@2 [g4,b4,d5,g5]@3", // Em Dm C Bdim Am G
  Q: "[f4,a4,c5,f5]@3 [g4,b4,d5,g5]@2 [a4,c5,e5,a5]@3 [c5,f5,a5,c6]@3 [d5,g5,b5,d6]@2 [e5,a5,c6,e6]@3", // F G Am F G Am
  R: "[a5,e6] c6 a5 [g5,d6] g5 [f5,c6] a5 f5", S: "[e5,b5] g5 e5 [d5,a5] d5 [c5,g5] e5 c5",
  T: "[a4,e5] c5 a4 [g4,d5] g4 [f4,c5] a4 f4", U: "b4 g4 e4 a4 d4 g4 e4@2",
  V: "[[e4,b4] g4 e4 [d4,a4] f4 [c4,g4] e4 ~ [b3,e4,a4]@16, ~@7 c4@16 ~]/3", W: "[[b3,e4,g#4]@29 ~@3]/2",
})).s("gm_epiano1").gain(0.21).pan(0.8)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note("<~@2 A@5 B@6 C@8 ~@23 D@4 E@4 D@4 F@3 G ~@32 D@4 E@4 H@4 I@4 J@9 K@4 ~@39>".pickRestart({
  A: "[e1@9 ~]/5", B: "[[c2,c3]@29 ~@3]/6", C: "[c2,c3]/8", D: "f2@3 f3@4 f3", E: "e2 e3", F: "e2@3 e3@4 e3",
  G: "e2@3 e3@5", H: "f2/4", I: "f2/2", J: "~@3 f3@4 f3, f2", K: "e2/2",
})).s("gm_synth_bass_2").gain(0.15).pan(0.2)

// chords · electric bass finger · "FINGERDBAS"
const electric_bass_finger = note("<~@76 A@4 B@4 A@4 B@4 ~@45 A@4 C@2 D@2 A@4 C@8 E@2 ~>".pickRestart({
  A: "[c3 g3 d4@3 e4@3 c3 g3 e4@3 d4@3 c3 g3 d4@3 e4@3 c3 g3 d4@3 c4@3, c2]/4",
  B: "[g2 d3 a3@3 b3@3 g2 d3 b3@3 a3@3 g2 d3 a3@3 b3@3 g2 d3 a3@3 g3@3, g1]/4",
  C: "[~@3 b3@13, [a1,a2], ~ e3@15, ~ g3@7]/2", D: "[~@3 b3@13, [a1,a2], ~ e3@15, ~@3 g3@29]/2",
  E: "[~@5 b3@27, [a1,a2], ~@3 e3@29]/2", // A
})).s("gm_electric_bass_finger").gain(0.11).pan(0.2)

// chords · pad new age · "FANTASIA"
const pad_new_age = note("<~@3 A@3 ~@2 B@3 ~ C@3 D@8 E@4 ~@133>".pickRestart({
  A: "[~@28 g6@17 ~@3, ~@4 e4@4 e5 f#5 g5 b5 e6 f#6@5 ~@6, ~@10 f#4@25 ~@13, ~@12 g4@23 ~@13, ~@14 b4@21 ~@13]/3",
  B: "[~@10 g6@5 ~, ~@8 c4@8 b4@2 e5@2 f#5@2 g5@2 b5@2 e6@2 f#6@13 ~@7, ~@10 e4@31 ~@7, ~@12 f#4@29 ~@7, ~@14 g4@27 ~@7]/3",
  C: "[~@5 g7@3, ~@8 c4@8 b5@2 e6@2 f#6@21 ~@7, ~@10 g4@12 g6@2 b6@2 e7@2 f#7@13 ~@7, ~@3 d5@7 ~@2, ~@7 e5@13 ~@4]/3",
  D: "[~@63 g4, ~@4 c4@4 b5@4 b6@8 c4@4 b5 e6 f#6 g6 b6 e7 f#7 g7@8 e5 b5 e6 f#6 g6@10 e5 b5 e6 f#6 g6@3 b5 e5 d5@2, ~@10 g4@8 e6@8 e7@16 g4@29 ~ c4@20 b5@2 e5@2 d5@2 g4@2 c4@28, ~@12 d5@8 f#6@8 f#7@16 d5@27 ~@3 g4@16 e6@12 g4@16 e6@10, ~@14 e5@8 g6@8 g7@16 e5@25 ~@5 d5@12 f#6@16 d5@12 f#6@12]/8",
  E: "[~@51 b6@13, c4@8 b5@8 b6@31 b5 e6 f#6 g6@14, ~ g4@4 e6@16 ~ e5@10, ~@4 d5@8 f#6@31 ~@2 f#5@19, ~@6 e5@8 g6@29 ~@3 g5@18]/4",
})).s("gm_pad_new_age").gain(0.15).pan(0.7)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note(`<
  ~@2 A@4 B@7 C@7 D@6 E@5 ~ F@7 ~ G@8 H@8 I@4 J@8 K@4 L@5 ~@23 M@8 ~ N@5 O@2 P@3 Q@2 R@8 S@8 R@8 K@4 T@8 ~@3
>`.pickRestart({
  A: "[a3@7 ~]/4", B: "[a3@13 ~]/7", C: "[c4@13 ~]/7", D: "d4/6", E: "[~ e4@9]/5", F: "[g3@13 ~ e4@14]/7",
  G: "[~@14 e4@2 ~@15 [g4,b4], g3@57 ~@7 e4@64, ~@11 a4@51 ~@2]/8", // G
  H: "[[b3,e4,g4]@32 [e4,c5]@27 [d4,g4,b4]@5, ~ a4]/8", I: "[a4 g#4, e4, b3@15 ~]/4",
  J: "[e4@32 ~@3 [g4,b4,d5]@13 ~@3 [g4,b4,d5]@13, ~ g3, ~@35 c4@12 ~@4 c4@12 ~]/8", K: "e4/4",
  L: "[~@3 [g4,b4,d5]@13 ~@3 [g4,b4,d5]@13 ~@8, g3@13 ~@3, ~@3 c4@12 ~@4 c4@12 ~@9]/5", M: "c4/8",
  N: "[~@2 f4@3, e4]/5", O: "[f4,g4]/2", P: "[[g4,a4]@2 a4]/3", Q: "[b4@31 ~]/2", R: "[e4 g3]/8", S: "[e4 b4]/8",
  T: "g3/8",
})).s("gm_pad_sweep").gain(0.11)

// chords · pad sweep · "SWEEP PAD" · soft notes
const pad_sweep_soft = note("<~@141 A@4 ~@4 A@10 ~>".pickRestart({
  A: "[~@3 [g4,b4,d5]@13, ~@3 c4@12 ~]/2", // G
})).s("gm_pad_sweep").gain(0.07)

// chords · synth strings 1 · "+SYN STR 3"
const synth_strings_1 = note(`<
  ~@17 A@8 ~@7 B ~ B ~@5 B C@7 D@4 E@4 F@4 ~@4 G@4 ~@4 G@4 ~@16 H@4 I@4 J@8 ~ K@5 L M N O@2 P@2 ~@5 Q@4 ~@11 G@4 ~@4 G@8
  R@2 ~
>`.pickRestart({
  A: "[~ [g3,c4,d4,e4]@15, f#4@5 ~@59]/8", B: "~@3 [g4,b4,d5]@5", C: "[~@27 [g4,b4], ~@3 a4@51 ~@2, ~@3 e4@4]/7",
  D: "[e4,g4]/4", E: "[[e4,a4,c5]@27 [d4,g4,b4]@5]/4", F: "[a4@8 g#4@7 ~, [b3,e4]@15 ~]/4",
  G: "[~@3 [g4,b4,d5]@13, ~@3 c4@12 ~]/2", H: "[[c4,e4,a4]@15 [g4,b4]]/4", I: "[e4,g4,b4]/4", J: "[e4,a4,c5]/8",
  K: "[[f#3,a3]@8 [g3,b3]@8 a3@8 [b3,d4,g4,a4]@8 [a3,c4,f4]@3 [b3,d4,g4]@3 [c4,f4,a4]@2, c5@13 ~@3, [c4,e4,a4]@3 ~@2]/5", // F#m G F G F Am
  L: "[d4,g4,b4]@3 [f4,a4,c5]@3 [g4,b4,e5]@2", M: "[a4,c5,f5]@3 [b4,d5,g5]@3 [c5,f5,a5]@2",
  N: "[e5,g5,b5]@3 [f5,a5,c6]@3 [g5,b5,d6]@2", O: "[e5,a5,b5,e6]/2", P: "[e5,g#5,b5,e6]/2",
  Q: "[~@3 [g4,b4,d5]@16 [g4,b4,d5]@13]/4", R: "[~ [g4,b4,d5]@3, ~@4 c4@11 ~]/2",
})).s("gm_synth_strings_1").gain(0.05)

// chords · sitar
const sitar = note("<A@10 B@8 ~@142>".pickRestart({
  A: "[~@3 b3@5, ~ g6 g5 g4@7, ~@5 f#6@4 f#5@4 f#4@27, ~@3 e6@2 e5@2 e4@13, ~@7 b5@4 b4@16 ~@13]/5",
  B: "[~@30 b3@91 ~@7, ~@8 g6@8 g5@8 g4@97 ~@7, ~@10 f#6@8 f#5@8 f#4@95 ~@7, ~@12 e6@8 e5@8 e4@93 ~@7, ~@7 b5@4 b4@16 ~@37]/8",
})).s("gm_sitar").gain(0.14).pan(0.7)

// chords · orchestral harp · "HARP"
const orchestral_harp = note(`<
  ~@28 A B A C D@2 E@2 A B A C E@2 D@2 ~@16 A B A C D@2 E@2 A B A C D@2 E@2 ~@45 F@2 G@8 H@8 I@2 J@2 K@4 I@2 J@2 L@6 M@2
  ~
>`.pickRestart({
  A: "c3 g3 d4 e4 b4 e5 f#5 g5", B: "f#5@2 e5 b4@2 e4@2 d4", C: "f#5@2 ~ b4@5, ~ e5@3",
  D: "[a2 e3 ~ [c4,g4,b4,d5]@13, ~@4 b3@27 ~]/2", E: "[a2 e3 ~ [c4,g4,b4,d5]@13, ~ b3@7]/2",
  F: "[~@13 e4@2 d4, [c2,c3], ~@2 g3@18 e5@2 b4@9 ~, ~@4 d4@12 f#5@15 ~, ~@6 e4@2 b4@2 e5@2 f#5@2 g5@17 ~]/2", // C
  G: "[~@19 d5@13 ~@29 e4@2 d4, [c2,c3]@33 ~@3 b3@27 ~@5 b3@27 ~@5 d4@12 f#5@4 e5@2 b4@9 ~, ~@2 g3@6 b4@2 e5@2 f#5@2 g5@2 f#5@4 e5@2 b4@16 [c4,g4]@32 [c4,g4,d5]@32 e4@2 b4@2 e5@2 f#5@2 g5@17 ~, ~@4 d4@27 ~ [a1,a2]@32 ~@32 [c2,c3]@32, ~@6 e4@25 ~@3 e3@29 ~@3 e3@29 ~@3 g3@29 ~]/8", // C C5 Csus2 A C
  H: "[~@19 d5@13 ~@29 e4@2 d4, [c2,c3]@33 ~@3 b3@27 ~@5 b3@27 ~@5 d4@16 e5@2 b4@9 ~, ~@2 g3@6 b4@2 e5@2 f#5@2 g5@2 f#5@4 e5@2 b4@16 [c4,g4]@32 [c4,g4,d5]@32 e4@10 f#5@15 ~, ~@4 d4@27 ~ [a1,a2]@32 ~@40 b4@2 e5@2 f#5@2 g5@17 ~, ~@6 e4@25 ~@3 e3@29 ~@3 e3@29 ~@3 g3@29 ~]/8", // C C5 Csus2 A
  I: "[~@11 b4@5, ~@2 g3@14 f#5@4 e5@11 ~, ~@4 d4@27 ~, ~@6 e4@25 ~, ~@8 b4@2 e5@2 f#5@2 g5@17 ~]/2",
  J: "[~@3 [c4,g4,b4,d5]@13]/2", // G
  K: "[~@29 e4@2 d4, ~@6 [c4,g4,b4,d5]@32 e4@10 f#5@6 b4@9 ~, ~@34 g3@29 ~, ~@36 d4@16 e5@11 ~, ~@40 b4@2 e5@2 f#5@2 g5@17 ~]/4", // G
  L: "[~@5 [c4,g4,b4,d5]@26 ~]/2", M: "[~ [c4,g4,b4,d5]@3]/2",
})).s("gm_orchestral_harp").gain(0.12).pan(0.8)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@28 A B A C D@5 B A C E@2 F@2 ~@16 A B A C D@5 B A C G@5 ~@83>".pickRestart({
  A: "c3 g3 d4 e4 b4 e5 f#5 g5", B: "f#5@2 e5 b4@2 e4@2 d4", C: "f#5@2 e5 b4@5",
  D: "[a2@2 e3@2 b3@2 [c4,g4,b4,d5]@27 ~ e3@2 b3@2 [c4,g4,b4,d5]@26 c3@2 g3@2 d4@2 e4@2 b4@2 e5@2 f#5@2 g5@2]/5", // G
  E: "[a2 e3 b3 [c4,g4,b4,d5]@13]/2", F: "[a2@2 e3@2 b3@2 [c4,g4,b4,d5]@25 ~]/2",
  G: "[a2@2 e3@2 b3@2 [c4,g4,b4,d5]@27 ~ e3@2 b3@2 [c4,g4,b4,d5]@27 ~@15]/5", // G
})).s("gm_string_ensemble_2").gain(0.07)

// other · electric guitar muted · "+FUNK GTR"
const electric_guitar_muted = note("<~@48 A@2 B@2 C ~@3 D@3 E ~@100>".pickRestart({
  A: "[~@2 d5@2 a4@4 a4@2 b4@4 b4@4 d5@2 a4@4 a4@5 ~@3]/2", B: "[~ d5 a4@2 b4 d5@2 a4@2 b4 d5 a4@2 g4@3]/2",
  C: "a4@9 ~@7", D: "[~ e5 b4@2 e5 b4@2 e5@2 e5 b4@2 e5 b4@2 e5@2 e5 b4@2 e5 b4@2 e5]/3", E: "e5!2 b4@2 e5@4",
})).s("gm_electric_guitar_muted").gain(0.21).pan(0.9)

// chords · flute
const flute = note(`<
  ~@59 A B@2 C@2 D@4 E@2 F@2 G@2 H@3 ~@43 I J@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 ~@5 R S@2 ~@3 R S@2 T ~ U ~ V ~ W@2 ~
>`.pickRestart({
  A: "~@3 g#4", B: "[g4@13 e5 d5 g4]/2", C: "[g4@5 e5 d5 g4]/2", D: "[e4@6 g4@26 e4@6 g4@23 ~@3]/4",
  E: "[[e4,g4]@3 g4@7 e5@2 ~ e5 [g4,d5] [e4,g4], ~@24 b4@5 ~@3]/2", F: "[g4@5 [b4,e5] [g4,d5] [e4,g4]]/2",
  G: "[[b3,e4]@3 [e4,g4]@10 b4 g4 d4]/2", H: "[[e4,g4]@2 [g4,b4]@9 ~@5]/3", I: "~@3 g#5", J: "[g5@7 e5]/2",
  K: "[[d5,e5] d5@27 ~@4]/2", L: "[b4@7 c5]/2", M: "[e5 ~@27 g#5@4, d5]/2", N: "[e5@5 e5 d5 [g4,e5], g5@7 ~]/2",
  O: "[g4@6 ~ e5, d5@7 ~, ~@3 b4]/2", P: "[e4@3 g4@7 e5@2 d5@2 [g4,c6]@2, b5@7 ~]/2",
  Q: "[e6 ~@5 g4@26, e4@3 ~@13, ~ d6@28 ~@3]/2", R: "~@13 b5 g5 d5", S: "[e5@3 g5@13]/2", T: "~@3 [g4,b4,d5]@5",
  U: "~@3 [b4,d5,g5]@5", V: "~@3 [g5,b5,d6]@5", W: "[~ [d6,g6,b6]@3]/2",
})).s("gm_flute").gain(0.14).pan(0.4)

stack(
  piano, piano_soft, epiano1, bass, electric_bass_finger, pad_new_age, pad_sweep, pad_sweep_soft, synth_strings_1,
  sitar, orchestral_harp, string_ensemble_2, electric_guitar_muted, flute
)

More by Suzanne Ciani