Strudelify

over the rainbow

Eva Cassidy

KeyA♭ majorTempo120 bpm
0:00/0:00
// over the rainbow — Eva Cassidy
// 120 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (13/8 at bar 1, 11/8 at bar 3, 4/4 at bar 4, 11/8 at bar 5, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5966821; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 29 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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("<A@3 B@4 C@2 D E F G H I J K@2 ~@11>".pickRestart({
  A: "[~@9 bb3 ~ eb3 eb3@2 [ab3,eb4]@2 ~@8, ~@3 ab2@4 ~@5, ~@6 [bb3,c4]@2 [ab3,eb4]@2 bb3@7 ~@7, ~@7 eb3@2 eb3@2 ~@13, ~@5 c4 ~@6]/3", // Ab5 Bbsus2 Ab5
  B: "[~@2 f2@2 ~@9 eb3 ~ db4 f4 ~ ab4@2 ~@3 bb4@2 ~@4 eb3 bb3 c4, ~@6 bb2@8 ~@8 bb2@2 ~ ab2@7, ~@6 [ab3,db4]@2 [ab3,eb4]@2 [ab3,db4]@2 [ab3,eb4]@2 ~@3 db4@3 db4@3 ~@9, ~@7 f3@2 f3@2 f3@2 ~ [eb3,ab4]@4 eb3@4 ~@10]/4", // Db5 Ab5 Db5 Ab5
  C: "[ab4 eb3 ~ g2@2 ~ f3 ab3 c4 f4@2 f3@2 ~ bb2@2, ~@2 bb3@2 ~ f2@7 ~ c4@2 ~]/2", D: "~ g3 bb3 ~@5, c3",
  E: "~ gb3 c4 eb4 ab2@3 ~, ab2@4 ab4 ~@3", F: "~ f3 ab3 db4 f4 f3 db4 f3, db3", G: "e4 ab3 b3 e4 ab4@4, db3",
  H: "c4 eb3 bb3 c4 ab4 eb3 c4 [gb2,ab3], ~@4 ab2@3 ~", I: "gb4 eb3 ab3 eb3 bb2 eb3 c3 eb3, ab2@2 [ab3,db4] [ab3,eb4]",
  J: "f4 f3 ab3 db4 f4 f3 ab3 db4, db3", K: "[~ e4 ab3 db4 e4 ab4@2 e4@2 ~@3 eb4 eb3 ab3 eb3, ~ db3@8 ~@3 ab2@4]/2",
})).s("gm_piano").gain(0.29)

// chords · piano · soft notes
const piano_soft = note("<~@2 A@2 ~@14 B@6 C@3 D ~>".pickRestart({
  A: "[~ eb3@2 eb3 ~@2 bb3 eb3 ~ [ab3,eb4]@2 ~@5, ~@3 ab2@4 ab2@3 ~@6, ~@3 [bb3,c4]@2 [ab3,eb4]@2 bb3@7 ~@2, ~@4 eb3@3 c4@2 ~@7, ~@8 eb3@3 ~@5]/2", // Ab5 Bbsus2 Ab5
  B: "[~ ab3@2 c4@2 ~ f3 ab3 c4 ~@2 f3@2 c4@2 ab3@2 ~@4 ab4 f3 ab3 db4 f4 ab3 g4 ab4 f3!2 ab3 f3 g3 eb3 bb3 eb3 [bb3,c4]@2 [ab3,eb4]@2 ~@6 [bb3,c4], g2@4 ~ f2@8 bb5@8 bb2@8 [bb2,db4]@4 [eb2,eb4]@4 ab2@8 eb3@3]/6", // Bbsus2 Ab5 Bbsus2 Bbm Eb
  C: "[~@7 f3@2 ~@2 eb3 ~@8 eb3 ~@3, eb3@2 eb3@3 f3@2 ~@2 f3@2 ~@3 eb3@2 bb3@8, ~ [ab3,eb4]@2 ~ bb2@8 ~ eb2@8 ~@3, ~@4 [ab3,db4]@2 [ab3,eb4]@2 ~@2 [ab3,eb4]@2 ~ [g3,db4]@2 [g3,eb4]@2 [g3,db4]@2 [g3,eb4]@2 ~@3, ~@8 eb3!2 ~@2]/3", // Ab5 Db5 Ab5 Gdim Cm Gdim Cm
  D: "eb4 eb3 ab3 c4 eb4 eb3 ab3 eb3, ab2",
})).s("gm_piano").gain(0.19)

stack(piano, piano_soft)