Strudelify
KeyD majorTempo97 bpm
0:00/0:00
// Dream of Me — Orchestral Manoeuvres in the Dark
// 97 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: 
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · epiano2 · "#E.PIANO 3"
const epiano2 = note(`<
  ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@4
>`.pickRestart({
  A: "[f#4,a4,d5] ~@2 [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~@2 [f#4,a4,d5] ~ [f#4,a4,d5] ~", // D
  B: "[f#4,b4,d5] ~@2 [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~@2 [f#4,b4,d5] ~ [f#4,b4,d5] ~", // Bm
})).s("gm_epiano2").gain(0.18).pan(0.3)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D E@4
>`.pickRestart({
  A: "d2@2 ~ d2 a2@2 d2@2 ~@2 d2!2 a2@2 d2@2", B: "d2 ~ d2@2 a2@2 d2@2 ~@2 d2!2 a2@2 d2@2",
  C: "g1@2 ~ g1 d2@2 g1@2 ~@2 g1!2 d2@2 g1@2", D: "g1 ~ g1@2 d2@2 g1@2 ~@2 g1!2 d2@2 g1@2", E: "d2/4",
})).s("gm_electric_bass_finger").gain(0.43)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 ~@8 A@2 B@2 A@2 C@2
  A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 C@2 D@4
>`.pickRestart({
  A: "[[a5,a6]@7 [c#6,c#7]]/2", B: "[[b5,b6]@5 [f#5,f#6]@22 ~ [b5,b6]@4]/2", C: "[[d6,d7]@3 [b5,b6]@11 [f#5,f#6]@2]/2",
  D: "[a5,a6]/4", // A
})).s("gm_string_ensemble_2").gain(0.4)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note("<[f#3!6 e3 f#3!3 e3 f#3!3 e3 f#3]!48 ~@8 [f#3!6 e3 f#3!3 e3 f#3!3 e3 f#3]!40 ~@4>")
  .s("gm_synth_bass_1").gain(0.25)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@8
  [f#4!2 ~ f#4!2 ~ e4 f#4 ~ f#4 e4 ~ f#4 ~ f#4 a4]!40
  ~@8
  [f#4!2 ~ f#4!2 ~ e4 f#4 ~ f#4 e4 ~ f#4 ~ f#4 a4]!40
  ~@4
>`).s("gm_overdriven_guitar").gain(0.27).pan(0.8)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@4
>`.pickRestart({
  A: "[a3,d4,f#4]/2", B: "[b3,d4,f#4]/2",
})).s("gm_synth_strings_1").gain(0.32)

// chords · synth strings 1 · "SYN STR 1" · soft notes
const synth_strings_1_soft = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@4
>`.pickRestart({
  A: "d3/2", B: "g3/2",
})).s("gm_synth_strings_1").gain(0.16)

// other · celesta
const celesta = note(`<
  ~@52
  [~@2 d5@3 d6@3 f#5@3 f#6@3 a5@2]
  [~@2 f#5@3 d5@3 a5@3 f#5@3 d5@2]
  [~@2 d6@3 g5@3 f#5@3 d5@3 g4@2]
  [~@2 a4@3 f#4@3 d5@3 f#5@3 a5@2]
  ~@44
>`).s("gm_celesta").gain(0.42)

// other · acoustic guitar nylon · "NYLON GTR" · D Gsus2 D Gsus2
const acoustic_guitar_nylon = note(`<
  ~@58
  [d5!2 d5@2 ~ c#5@3 b4@3 f#4@5]
  [~@6 a4 f#4@2 d4@7]
  [~@14 [d4,f#4] [g4,a4]]
  [a4@2 ~ a4@3 f#4@6 ~@4]
  [~@14 [d4,f#4] [g4,a4]]
  [a4@2 ~ a4@3 f#4@6 ~@4]
  ~@36
>`).s("gm_acoustic_guitar_nylon").gain(0.54)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note("<~@56 A B ~ C D C E F ~@36>".pickRestart({
  A: "~@5 d5!4 d5@2 d5@5", B: "~@3 d5!2 c#5@3 b4@3 f#4@5", C: "~@14 [d4,f#4] [g4,a4]", D: "a4@2 a4 f#4@3 ~@2",
  E: "a4@2 ~ a4@3 f#4@6 ~@4", F: "~@9 d5!7",
})).s("gm_lead_8_bass_lead").gain(0.48)

// other · pad sweep · "SWEEP PAD"
const pad_sweep = note("<~@48 A@8 ~@40 B@4>".pickRestart({
  A: "d2/8", B: "d2/4",
})).s("gm_pad_sweep").gain(0.4)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<~@52 A@4 ~@44>".pickRestart({
  A: "[~@8 [d3,a3]@31 ~ [d3,a3]@24]/4", // D5
})).s("gm_synth_strings_2").gain(0.4)

// chords · string ensemble 1 · "STRINGS" · Cmaj7 Fmaj7 Gmaj7 Amaj7 Gmaj7 Amaj7 Bmaj7 C#maj7 …
const string_ensemble_1 = note(`<
  ~@7
  [~@2 a#4 [b4,c5] [c#5,d5,d#5] [e5,f5] [f#5,g5] [g#5,a5] [f#5,g5] [g#5,a5] [a#5,b5] [c6,c#6] [d6,d#6] [e6,f6] [f#6,g6] [g#6,a6]]
  ~@47
  [~@2 a#4 [b4,c5] [c#5,d5,d#5] [e5,f5] [f#5,g5] [g#5,a5] [f#5,g5] [g#5,a5] [a#5,b5] [c6,c#6] [d6,d#6] [e6,f6] [f#6,g6] [g#6,a6]]
  ~@44
>`).s("gm_string_ensemble_1").gain(0.48)

// chords · string ensemble 1 · "STRINGS" · soft notes · G#maj7
const string_ensemble_1_soft = note("<~@7 [f#4 [g4,g#4] a4 ~@13] ~@47 [f#4 [g4,g#4] a4 ~@13] ~@44>")
  .s("gm_string_ensemble_1").gain(0.24)

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

// drums · clap
const clap = s("cp").struct("<~@8 [~ x ~ x]!40 ~@8 [~ x ~ x]!16 ~@24 [~ x ~@7 x ~@6]!4>").gain(0.4)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@8 [~@3 x ~@7 x ~@4]!40 ~@8 [~@3 x ~@7 x ~@4]!16 ~@24 [x!2]!4>").gain(0.24)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@3 B A@7 C A@3 C A@3 D A@7 E A@7 D A@7 F A@3 C A@3 G A@6 C H A@3 C A@3 I A@6 C J A@3 C A@2 C J A@3 C A@2 C K ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~@4 x ~@2 x", C: "~@4 x ~@7 x ~@2 x", D: "~@4 x ~@2 x ~@4 x!2 ~ x",
  E: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", F: "~@4 x!2 ~ x ~ x ~ x ~ x!3", G: "~@2 x ~ x ~@6 x!3 ~ x",
  H: "~ x ~@2 x ~@4 x ~@2 x ~@2 x", I: "~@4 x!2 ~ x ~@3 x ~ x ~ x", J: "~@4 x ~@7 x!2 ~ x", K: "~@4 x ~@7 x!2 ~@2",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@15 A ~@15 A ~@15 B ~@15 A ~@28>".pickRestart({
  A: "~@7 x", B: "~@7 x ~@6 x ~",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@4 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C A@8 B C B C B C B C B C B C B
  C B C B C B C B C B C B C B C B C B C B C B C B C B D ~@4
>`.pickRestart({
  A: "x!8", B: "x!15 ~", C: "x!14 ~ x", D: "x!14 ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "~@15 x", B: "~@7 x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@15 B ~@15 B ~@15 C ~@15 A ~@28>".pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~@11 x ~@4", C: "~@13 x ~@2",
})).gain(0.56)

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

// drums · crash
const crash = s("cr").struct("<~@8 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@11>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@44 B ~ B ~ B ~ B ~ A@16 C ~@22 D A@4>".pickRestart({
  A: "x!16", B: "~ x", C: "x!2 ~@14", D: "~@15 x",
})).gain(0.32)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!48 ~@8 [x!16]!16 [x!2 ~@14] ~@22 [~@15 x] [x!16]!4>").gain(0.4)

// drums · claves
const claves = s("clave:2").struct("<~@4 [x!4]!68 x ~@23 [~ x ~@3 x ~@3 x ~@3 x ~@2]!4>").gain(1.96)

stack(
  epiano2, bass, string_ensemble_2, bass_2, overdriven_guitar, synth_strings_1, synth_strings_1_soft, celesta,
  acoustic_guitar_nylon, lead_8_bass_lead, pad_sweep, synth_strings_2, string_ensemble_1, string_ensemble_1_soft, kick,
  clap, clap_soft, snare, low_tom, hihat, open_hat, mid_tom, high_tom, crash, tambourine, shaker, claves
)

More by Orchestral Manoeuvres in the Dark