Strudelify

One Man's Dream

Yanni

KeyE♭ majorTempo100 bpm
0:00/0:00
// One Man's Dream — Yanni
// 100 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 5 "oboe" Oboe -> oboe
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 82 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · "piano solo"
const piano = note("<A@2 B@6 C@3 D@2 E@4 F G@8 H@7 I J@7 K@8 L M@2 N@4 O P@6 Q@3 R@8 S@8>".pickRestart({
  A: "[~@15 d4, ~ c4@2 c4@2 c4@2 c4, ~@3 d4@4 d4@4 d4@4 ~, ~ eb4 eb4!2, ~@5 g4@4 g4@4 g4@3]/2",
  B: "[~@64 eb4@4 ~@63 bb3@2 ~@55 d4@4, eb4@12 d4@12 c4@12 f5@20 [c4,c5]@4 d4@8 f5@28 d4@4 bb3@4 g3@4 bb3@4 d4@4 eb4@4 d4@4 bb3@4 g3@5 ~@3 c4@7 eb4@13 d4@12 c5@24, ~@4 g4@12 eb4@12 d4@8 g4@4 c4@3 d4@5 eb4@4 [g4,d5]@16 g4@8 bb3@4 d4@4 g4@4 d5@60 g4@12 eb4@8 c4@12 [g4,d5]@12, ~@8 g5@61 ~@3 g5@61 ~@2 eb5@41 eb4@16, ~@8 c4@12 g4@12 eb4@8 eb5@29 ~@3 g3@20 g4@41 ~@7 d4@12 c4@12 [g4,d5]@8 d4@12 [c4,eb5]@8]/6", // C G5 Cm
  C: "[~@64 bb4@4 eb5@3 ~@21 bb3@4, eb4@4 g4@12 d4@12 g4@4 bb4@12 bb3@8 g4@4 a4@3 g4@10 ~@11 f3@4 bb3@4 d4@8, ~@3 f5@45 d4@22 ~@6 d3@20, ~@8 [g3,g5]@62 ~ bb2@25, ~@6 bb3@4 g4@2 a4@6 g4@2 d5@15 ~ f5@12]/3", // G
  D: "[f3@4 bb3 ~@27 ab3@4 ~@24 eb4@4, ~ g5@5 c4 f3@2 c4@3 g3 c4 d4@2, ~@8 [f2,ab5]@29 ~@7 eb3@20, ~@12 c3@25 ~@3 [c3,c6]@24, ~@4 f3 ab3 bb5@10]/2", // Fm C
  E: "[g4@4 c4@2 ~@26 d6@8 ~@2 d6@2 c6@2 d6@2 ~@28 eb3@3 ab3 ~@27 ab3@5 c4 ~@10 g3@5, ~@7 f5@13 b3@4 d4@5 g4@11 eb6@6 ~@3 g5@18 c4@5 ab3@7 ~@9 c3@25 ~@7 d3@8, ~@8 g2@37 ~@7 ab2@28 ~@3 [f2,ab5,f6]@30 ~@2 [g2,f5,d6]@13, ~@8 d6@7 g3@30 ~@7 eb6@43 ab3@4 c4@4 f3@10 ~@15, ~@12 d3@33 ~@11 eb3@4 ab3@4 bb3@16 ~@11 f3@8 [g5,eb6]@15 ~@14]/4", // Fm G7 Cm
  F: "~@12 g3@4 bb3 ~@10 g3@5, bb3@8 bb3@8 ~@3 eb6@13, ~@4 d4@13 ~ g5@14, ~@5 g2@3, ~@23 d3@9",
  G: "[~@11 g4@5 ~@2 bb5@2 ~@55 eb4@4 ~@60 bb3@4 g3@2 ~@58 g4@4 f6@2 ~@42 a3@5, b3@8 b3@9 ~@3 [c3,g6]@32 c4@4 d4@3 eb4@4 d6 g4@18 ~@6 d3@28 d4@4 g3@4 bb3@3 d4@4 eb4@4 d4@10 ~@7 eb3@58 ~@5 d3@4 g3@5 a3@3 bb3@4 d4@4 g4@4 d4@4 g4@5 g3@8, ~@3 [d4,a5,f6]@13 ~@4 eb6@12 c4@4 d4@4 eb4@3 g4@5 [d4,f6]@4 eb6@30 ~ g6@17 d6@56 g3@54 ~ g6@45, ~@24 eb3@43 [c4,c6]@4 d4@8 f6@13 g3@4 a3@4 bb3@4 d4@3 g3@5 g4@34 ~ eb6@13 c4@4 d4@3 eb4@4 g4@4 d6 d4@3 [c4,c6]@5 d4@3 eb4@4 [g4,d6]@4 [d4,eb6]@4 eb4@10 bb5@47, ~@28 g3@53 ~@3 g2@62 ~ c3@62 ~@3 g2@44]/8", // C5 Dm C G5 Ebmaj7
  H: "[~@11 g3@4 ~@32 g5@4 ~@24 ab3@5 ~@27 g4@4 c4@2 ~@33 d6@4 ~@6 d6@2 ~@26 eb3@4 ab3 ~@27 ab3@4 c4 ~@3, bb3@7 bb3@8 eb5@25 bb3@4 f3@6 ~@9 f3@8 bb5@29 c4@3 d4@4 eb4@10 ~ f5@22 d3@3 b2@6 g2@5 eb6@2 d6@2 c6@4 ~ g5@17 c4@4 ab3@8 ~@8 c3@25 ~@3, ~@3 d4@14 ~@3 [bb2,bb4,f5]@30 ~ [f2,c5,ab5]@20 f3@9 ~@8 eb3@26 ~ g3@13 b3@30 ~@7 eb3@4 ab3@4 bb3@16 ~@11 f3@8 [g5,eb6]@15 ~, ~@24 d3@26 ~@6 c3@25 ~@2 [c3,eb5,c6]@31 ~@5 b3@5 d4@34 ~@3 eb6@43 ab3@4 c4@4 f3@10 ~@2, ~@28 f3@4 bb3@3 d4@12 bb3@2 ~@15 ab3@3 [c4,d5]@13 c4@12 g3@22 ~ d6@16 g3@27 ~@3 ab2@28 ~@3 [f2,ab5,f6]@30 ~@2]/7", // Bb5 Fm Cm Csus2 Fm
  I: "~@24 g3@4 bb3 ~ g5@2, [g2,f5,d6]@15 ~, ~@4 d3@25 ~@3, ~@2 g3@3 bb3@2 ~, ~@6 bb3@2 d4@7 ~", // G7
  J: "[~@24 g4@5 ~@123 eb4@4 ~@64 g4@4, [g2,eb6]@20 b3@10 ~ c6@13 c4@4 d4@4 eb4@4 g4@4 d4@4 c4@4 d4@4 eb4@4 g4@24 d4@8 g4@8 d4@7 g4@9 d4@8 g4@16 [bb5,d6]@16 c4@4 d4@4 eb4@4 g4@4 d4@4 c4@4 d4@4 eb4@4 g4@4 c4@4 d4@4 eb4@8, ~@4 d3@25 ~@3 [c3,eb6]@48 c4@3 d4@5 eb4@8 [c6,eb6]@62 ~@10 g3@56, ~@8 g3@22 ~@6 eb3@55 [d6,f6]@57 d4@10 ~@7 eb3@59, ~@12 b3@4 [d4,f5,d6]@14 g5@10 g3@56 c4@8 eb4@8 c4@8 eb4@7 c4@9 eb4@8 c4@14 ~@2 [c3,c6,eb6]@64]/7", // Cm Bb Cm Dm Cm
  K: "[~@60 g4@3 ~@49 d4@4 ~@4 g3@4 bb3@2 ~@58 eb4@4 ~@64 eb5@3 ~, g6@51 d4@5 eb4@4 f6@32 d4@4 g3@4 bb3@4 d4@4 eb4@8 [bb3,d4]@10 ~@2 c4@8 eb4@12 d4@12 c6@28 f6@44 d4@4 g4@4 a4@4 g4@4 bb4@7 ~, c4@12 g4@12 eb4@8 eb6@31 ~ g6@62 ~@2 eb6@40 eb4@8 c4@12 g4@12 d4@12 g4@4 bb4@12 bb3@27 ~, ~@4 d4@12 c4@12 f6@16 g4@4 [c4,c6]@15 ~ g3@8 d4@4 g4@4 d6@60 g4@12 eb4@8 c4@12 [g4,d6]@18 ~@6 bb3@7 g4@5 a4@12 g4@4 d5@31 ~, ~@8 eb4@12 d4@8 g4@4 c4@4 d4@4 eb4@4 d6@19 ~@5 bb3@16 d4@4 g4@38 ~@6 d4@12 c4@12 [g4,d6]@8 d4@11 eb6@4 d4@10 ~@3 [g3,g6]@63 ~]/8", // Bb C G5 G
  L: "~@6 f3 g5, [bb2,f5]@29 ~@3, ~@4 d3@25 ~@3, ~@8 f3@12 bb3@8 bb3 ~@3, ~@12 bb3@4 d4@13 ~@3", // Bb5
  M: "[~@24 ab3@4 ~@28 g4@4 c4@3 f5, [f2,ab5]@14 c4@6 g3@2 c4@2 d4@2 eb4@5 ~, ~@2 c3@13 ~ [c3,c6]@16, ~@8 f3@8 bb5@47 ~, ~@6 ab3@2 c4@2 f3@5 ~@3 eb3@13 ~]/2", // Fm C
  N: "[~@30 d6@5 ~@4 c6@2 d6@2 ~@25 eb3@5 ab3 ~@26 ab3@5 c4@2 ~@17 d4@4, d6@20 d3@4 b2@6 g2@5 eb6@2 d6@4 ~@3 g5@31 ~@9 f3@8 [g5,eb6]@15 ~@13 bb3@8, g3@16 g3@26 ~@4 ab2@15 c4@4 ab3@8 ~@3 [f2,ab5,f6]@30 ~@10 f3@12, ~@4 b3@8 b3@30 ~@7 eb3@4 ab3@4 bb3@17 ~@6 c3@26 ~@2 [bb2,f5,d6]@20, ~@8 d4@34 ~@4 eb6@43 ab3@3 c4@4 f3@10 ~@6 d3@16]/4", // Cm Fm Bb
  O: "~@2 f3@2 bb3 ~@9 [d4,a5,f6]@2, bb3@4 ~ g5@7 b3@4, ~@3 [g2,eb6]@5, ~ d3, ~@5 g3@3", // Dm Cm
  P: "[~@2 g4@3 ~@29 eb4@2 ~@30 bb3@2 g3 ~@25 [d4,eb6]@2, b3@10 ~ bb5@2 [c3,g6]@31 c4@4 d4@4 eb4@4 [g4,d6]@4 [c4,c6]@4 d4@8 f6@20 d6@56 g3@28 d4@4 eb4@4 [g4,d6]@8, ~@12 eb6@13 c4@4 d4@3 eb4@4 g4@4 [d4,f6]@4 eb6@30 ~@10 g3@4 a3@4 bb3@4 d4@4 g3@4 g4@4 d4@4 g3@4 bb3@4 d4@4 eb4@4 d4@10 ~@2 eb6@12 c4@4 d4@4 eb4@4 g4@4 [d4,d6]@4 [c4,c6]@20, ~@17 eb3@57 ~@2 [g2,g6]@62 ~@7 eb3@47, ~@21 g3@53 ~@6 d3@58 ~@3 c3@51]/6", // Ebmaj7 C5 G5 C G5 Dm D C …
  Q: "[~@2 g4@2 f6 ~@40 bb3@2 d4, eb4@5 bb5@19 g3@2 a3@13 [bb2,bb4,f5]@2 d3@2 f3@5, ~@12 [g2,g6]@44 bb3@4 d4@13 eb5@23, ~@16 d3@48 bb3@5 g3@27, ~@5 g3 a3 bb3 d4 g4 d4 g4@13]/3", // Bb5 G
  R: "[~@6 f3@4 bb3@2 ~@25 ab3@5 ~@32 c4@3 ~@31 d6@4 ~@4 c6@2 d6@2 ~@59 ab3@4 c4@2 ~@26 g3@4 bb3@2 ~@36 bb5@2 d6, ~@2 bb3@8 g5@19 [c4,d5]@4 f3@9 c4@8 eb3@4 g3@4 c4@4 d4@4 eb4@4 g4@7 ~ d6@12 b3@8 d3@5 b2@5 g2@12 ~@3 ab2@61 ~@3 [g2,f5,d6]@20 bb3@8 ~@8 d3@9 b3@4 [d4,f5,d6]@4 b3@6 g4@10, ~@13 gb5@31 ~@2 c6@48 g3@26 ~@7 eb3@4 ab3@4 bb3@24 c3@4 f3@5 ab3@3 [g5,eb6]@46 g5@39, ~@14 [f2,c5,ab5]@30 ~@2 [c3,eb5]@31 ~ g3@4 b3@4 d4@26 eb6@2 d6@4 ~@5 eb6@16 c4@4 ab3@4 eb3@24 c4@4 f3@9 ~@7 d3@26 ~@2 [g2,eb6]@37, ~@18 c3@4 f3@4 ab3@3 bb5@48 ~ f5@42 ~ g5@30 ab3@4 [f2,ab5,f6]@29 ~@11 g3@4 bb3@4 d4@14 ~@10 g3@29]/8", // Csus2 G7 Dm Cm Fm Cm Fm
  S: "[~ db6@2 ~@52 eb5@6 ~@23 ab3@4 ~@23 bb3@4 ~@87 [c2,c7]@48 ~@6, ~@5 [ab2,c6]@28 eb4@7 ab4@8 bb4@13 ~@56 [eb5,c6]@58 c4@64 ~@17, ~@5 eb5@20 bb3@36 ~@14 f3@13 ~@15 g3@12 ~@9 eb3@43 d4@28 c3@56 ~@5, ~@11 eb3@50 ~@2 [f2,c5,ab5]@25 ~@2 [g2,bb4,g5]@25 ~@15 g3@7 c4@7 d4@8 eb4@29 g3@64 ~@11, ~@17 ab3@44 ~@8 c3@19 ~@9 d3@18 ~@2 c3@43 g4@28 eb3@62 ~@6]/8", // C Ab Cm Fm Gm
})).s("gm_piano").gain(0.41)

// chords · string ensemble 2 · "slow strings"
const string_ensemble_2 = note("<~@10 A@4 B@6 C@4 D@7 E@3 F G@4 H I ~@2 J@3 K@3 L M@8 N@8 O@8 P@7 ~>".pickRestart({
  A: "[~@7 [bb2,bb3,d4]@32 [f2,ab3]@32 [c3,eb4]@32 ~ d4@24, ~@7 f3@62 ~@2 g3@57, ~@39 c4@63 ~ [g2,b3]@25]/4", // Bb Fm Cm G
  B: "[~@19 c4@13 ~@19 [f2,ab3,f4]@32 [g3,bb3]@32 [b2,b3]@32 ~ gb5 ~@26 f5@4 eb5@12 d5, ~@19 [ab2,ab3,eb4]@32 ~@32 g2@67 ~@42, ~@35 c4@46 ~@2 d4@62 ~@2 g5@28 ~@17]/6", // Fm Gm B Ab5
  C: "[~@3 c5@11 bb4@4 ~@17 bb4@23 g4@8 a4@9 bb4@8 c5@28 d5@4 eb5@11 f5@2, ~@9 g4@19 ~@36, ~@35 d5@32 ~@61]/4",
  D: "[~@16 d5@5 ~@2 [bb4,d5]@35 g4@9 a4@8 bb4@8 [f3,bb3,d4]@32 ab3@32 eb4@31 ~@2 bb3@3 b3@30 ~@11, ~@3 g5@16 ~@3 g4@33 ~@60 c4@65 ~@44, ~@115 f3@30 ~@2 g3@66 ~@11, ~@115 d4 ~@31 c2@25 ~@52, ~@147 db4 ~@31 d4@34 ~@11]/7", // Bb
  E: "[~@3 eb4@29 f5@31 [g4,bb4,d5]@10 ~ [g4,bb4,d5]@22, ~@3 [ab3,c4]@58 ~@35]/3", F: "g4@7 g4, [b4,d5]@31 ~",
  G: "[~ c5@39 ~@23 [c5,eb5]@52 ~@9 [bb3,d4]@4, eb5 ~@3]/4", H: "eb4 [d4,f4] [eb4,g4] [g4,c5], c4 ~@31",
  I: "[eb5,g5]@3 ~", J: "[[g4,bb4,d5]@14 ~ [g4,d5]@50 ~@31, ~@14 bb4@51 ~@31]/3", K: "[~@31 [g4,bb4,d5]@60 ~@5]/3",
  L: "[bb2,bb3,d4], f3@29 ~@3", // Bb
  M: "[[f2,ab3]@31 ~ [c3,eb4]@31 [g2,b3,d4]@38 ~@9 [ab2,ab3,eb4]@30 [f2,ab3,f4]@31 ~ [bb3,d4,f4]@31 ~@16 g4@14 ~@4 gb5 ~@18, c4@63 ~@47 c4@60 ~@66 g5@20, f3@28 ~@4 g3@69 ~@103 [g3,b3,d4]@30 ~@22]/8", // Fm Cm G Ab5 Fm Bb G
  N: "[~@8 f5@4 eb5@12 d5@4 c5@11 f5@5 g5@7 ~@2 g4@6 a4@8 bb4@8 c5@8 bb4@8 a4@8 bb4@9 eb5@28 d5@4 c5@11 d5@4 eb5@13 f5@3 g5@8 g4@8 a4@8 bb4@8 c5@8 bb4@9 a4@9 bb4@7 ~@2 f5@4 eb5@3 ~@4 d5@3 ~@2 d5@2, ~@246 eb5@5 ~@5]/8",
  O: "[~@2 c5@2 ~@2 c5@4 bb4@3 ab5@4 [gb5,a5] g5@3 g5@4 f5@3 ~ f5@4 eb5@3 ~ eb5@7 ~ c6@4 bb5@3 ~ bb5@4 ab5@3 ~ ab5@4 g5@2 ~@2 g5@5 f5@3 d6@4 c6@3 ~ c6@4 b5@3 ~ b5@20 ~@8 eb4@33 f4@18 eb4@14 d4@33 eb4@15 d4@11 bb3@5 d4@6, ~@69 bb5 ~@186]/8", // Gbm
  P: "[~@2 c4@60 f3@29 g3@25 c4@91 ~@17]/7",
})).s("gm_string_ensemble_2").gain(0.52)

// chords · harpsichord · "harpsi" · Cmaj7 Asus2 Csus2 Fmaj7 Asus2 Csus2
const harpsichord = note(`<
  ~@56
  [~@28 g2 ~ [b2,c3] [db3,d3,eb3], ~@29 a2@2 ~]
  [[e3,f3,gb3] [g3,ab3,a3] [bb3,b3,c4] [db4,d4,eb4,e4] [f4,gb4,g4] [a4,b4] [c5,d5] [e5,f5] g5 [a5,b5] [c6,d6] e6 g6@11 ~@9, ~@12 f6@3 ~@17]
  ~@24
>`).s("gm_harpsichord").gain(0.48)

// chords · tubular bells · "tubebell"
const tubular_bells = note("<~@65 A@2 ~@15>".pickRestart({
  A: "[~@14 [f4,bb4,d5]@33 ~@17]/2", // Bb
})).s("gm_tubular_bells").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@56 [~@31 x] [x!6 ~ x!4 ~@21] ~@6 [~@31 x] [x!2 ~ x!4 ~ x!3 ~ x ~@19] ~@16>")
  .gain(0.48)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@56 [~@29 x!2 ~] ~@7 [~@29 x!2 ~] ~@17>").gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@57 [~@3 x ~@4] ~@24>").gain(0.8)

stack(piano, string_ensemble_2, harpsichord, tubular_bells, open_hat, open_hat_soft, crash)

More by Yanni