Strudelify

Land of Dreaming

Masterboy

KeyD♭ majorTempo100 bpm
0:00/0:00
// Land of Dreaming — Masterboy
// 100 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 16-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.

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  A B A C A D A D A B A C A D A D A B A C A B A C A B A C A B A C A B A C A D A D A B A C A B A C A B A C A B A C A B A
  C A D A D A B A C A B A C A B A C A D A D ~@9
>`.pickRestart({
  A: "db2 ~ db2!2 ~ db2!2 ~@2 ab1!2 ~ ab1 ~@3", B: "bb1 ~ bb1!2 ~ bb1!2 ~@2 gb1!2 ~ gb1 ~@3",
  C: "bb1 ~ bb1!2 ~ bb1!2 ~@2 gb1!2 ~ gb1 ~ gb1 ab1", D: "gb1 ~ gb1!2 ~ gb1!2 ~@2 ab1!2 ~ ab1 ~@3",
})).s("gm_synth_bass_1").gain(0.41)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@8 A B A B A B A B ~@8 C D E F ~@4 A B A B A B A B G H G H ~@4 C D E ~ G H G H A B A B A B A B ~@8 A B A B A B A B
  ~@9
>`.pickRestart({
  A: "[ab4,db5] ~ [ab4,c5] ~ [ab4,db5] [ab4,c5] ~ [ab4,db5] ~ [ab4,db5] [ab4,c5] ~ [ab4,db5] ~ [ab4,c5] ~", // Db5 Ab Db5 Ab Db5 Ab Db5 Ab
  B: "[ab4,db5] ~ [ab4,c5] ~ [ab4,db5] [ab4,c5] ~ [ab4,f5] ~ [ab4,f5] [ab4,eb5] ~ [ab4,db5] ~ [ab4,eb5] ~", // Db5 Ab Db5 Ab Db Ab5 Db5 Ab5
  C: "[f4,ab4]!2 [eb4,ab4] ~ [f4,ab4] ~ [eb4,ab4] ~ [f4,ab4] ~ [eb4,ab4] ~ [f4,ab4] [eb4,ab4] ~ [db4,ab4]", // Fm Ab5 Fm Ab5 Fm Ab5 Fm Ab5 …
  D: "~@12 [db4,ab4] [eb4,ab4] [db4,ab4] [f4,ab4]", // Db5 Ab5 Db5 Fm
  E: "~ [f4,ab4] [eb4,ab4] ~ [f4,ab4] ~ [eb4,ab4] ~ [f4,ab4] ~ [eb4,ab4] ~ [f4,ab4] [eb4,ab4] ~ [db4,ab4]", // Fm Ab5 Fm Ab5 Fm Ab5 Fm Ab5 …
  F: "~@10 [db4,ab4] ~ [db4,ab4] [eb4,ab4] [db4,ab4] ~", // Db5 Ab5 Db5
  G: "[db4,ab4,db5] ~ [c4,ab4,c5] ~ [db4,ab4,db5] [c4,ab4,c5] ~ [db4,ab4,db5] ~ [db4,ab4,db5] [c4,ab4,c5] ~ [db4,ab4,db5] ~ [c4,ab4,c5] ~", // Db5 Fm Db5 Fm Db5 Fm Db5 Fm
  H: "[db4,ab4,db5] ~ [c4,ab4,c5] ~ [db4,ab4,db5] [c4,ab4,c5] ~ [f4,ab4,f5] ~ [f4,ab4,f5] [eb4,ab4,eb5] ~ [db4,ab4,db5] ~ [eb4,ab4,eb5] ~", // Db5 Fm Db5 Fm Ab5 Db5 Ab5
})).s("gm_lead_2_sawtooth").gain(0.3).pan(0.6)

// other · alto sax
const alto_sax = note(`<
  ~@12 A B A C@2 ~@11 D E F G ~@4 A B A C@2 ~@19 A B A H@2 E I J K L F G ~@4 A B A B A B A B A B A M@2
>`.pickRestart({
  A: "f4@3 ab4@3 ~@2", B: "bb4@2 bb4@2 bb4@2 ab4 bb4@3 ab4@2 gb4@2 f4@2",
  C: "[bb4@2 bb4@2 bb4@2 ab4 bb4@3 ab4@2 gb4@2 f4@17 ~]/2", D: "db3!2 db3@2 db3@2 ~ db3 db3@2 db3 db3@2 ~@3",
  E: "db3@2 db3 db3@2 db3!3 db3@2 db3@2 db3@2 ~ db3", F: "db3@2 db3 db3@3 db3!2 db3@2 ~@5 db3",
  G: "db3@2 db3@2 db3!4 db3@2 db3@2 db3@2 ~@2",
  H: "[bb4@2 bb4@2 bb4@2 ab4 bb4@3 ab4@2 gb4@2 ~@2 db3!2 db3@2 db3@2 ~ db3 db3@2 db3 db3@2 ~@3, ~@14 f4@17 ~]/2",
  I: "db3@2 db3!3 ~ db3!2 db3@2 db3 db3@2 ~@2 db3", J: "db3@2 db3@2 db3@2 db3!2 db3@2 db3 db3@3 ~@2",
  K: "db3@2 db3@2 db3@2 db3@2 db3 db3@2 db3@2 ~@3", L: "db3 db3@3 db3@2 ~@2 db3 db3@3 db3@2 ~ db3",
  M: "[bb4@2 bb4@2 bb4@2 ab4 bb4@3 ab4@2 gb4@2 f4@15 ~@3]/2",
})).s("gm_alto_sax").gain(0.44)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@18 C@2 D@2 E@2 B@18 C@2 D@2 E@2 B@10 C@2 D@2 E@2 B@2 C@2 D@2 F ~
>`.pickRestart({
  A: "[db4,f4]@3 [c4,eb4]@5, ab3", B: "[f4@3 gb4@5 f4@3 [c4,eb4]@5, db4@11 ~@5, bb3 ab3]/2",
  C: "[f4@6 gb4@10 f4@7 [c4,eb4]@9, db4@23 ~@9, bb3 ab3]/2", // Cm
  D: "[[gb3,bb3,db4]@3 [c4,eb4]@5 [db4,f4]@3 [c4,eb4]@5, ~@3 ab3@13]/2", // Gb Cm Db Cm
  E: "[[gb3,bb3,db4]@7 [c4,eb4]@9 [db4,f4]@6 [c4,eb4]@10, ~@7 ab3@25]/2", F: "[gb3,bb3,db4]@3 ~@5",
})).s("gm_synth_strings_1").gain(0.23).pan(0.6)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B A C A D A E A B A C A D A E A B A C ~@12 A B A C A D A E A B A C ~@8 A B A C A B A C A D A E ~@4 A B A C A B A C A
  D A E ~@9
>`.pickRestart({
  A: "[ab3,db4,f4]@5 ~ [ab3,c4,eb4]@9 ~", B: "[bb3,db4,f4]@5 ~ [bb3,db4,gb4]@9 ~",
  C: "[bb3,db4,f4]@6 [bb3,db4,gb4]@9 ~", D: "[gb3,bb3,db4]@5 ~ [ab3,c4,eb4]@9 ~", E: "[gb3,bb3,db4]@6 [ab3,c4,eb4]@9 ~",
})).s("gm_piano").gain(0.32).pan(0.4)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note(`<
  A B A B C D A E ~@4 C D A E ~@16 A B A B C D A E ~@16 A B A B C D A E ~@8 A B A B C D A E ~@9
>`.pickRestart({
  A: "ab4 ~@2 bb4 ~@4", B: "c5 ~@2 ab4 ~@4", C: "ab4@2 ~@4 bb4@3 ~@7", D: "db5@3 ~@5 db5@2 c5@2 bb4@2 ab4@2",
  E: "db5 ~@3 db5 c5 bb4 ab4",
})).s("gm_glockenspiel").gain(0.13)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@52 A@2 B C ~@33>".pickRestart({
  A: "[[db6,db7]@6 [eb6,eb7] [f6,f7]]/2", B: "[ab5,ab6]@3 [c6,c7]", C: "[db6,db7]",
})).s("gm_string_ensemble_1").gain(0.18)

// chords · church organ · "+CHRCHORG2"
const church_organ = note("<~@80 A B@4 C@2 D ~>".pickRestart({
  A: "[db2,db4,f4]@3 [ab1,c4,eb4]@5, ab3", // Db Ab
  B: "[[bb1,f4]@3 [gb1,gb4]@5 [db2,f4]@3 [ab1,c4,eb4]@5, db4@11 ~@5, bb3 ab3]/2", // Bb5 Gb Db Ab
  C: "[[gb1,gb3,bb3,db4]@3 [ab1,c4,eb4]@5 [db2,db4,f4]@3 [ab1,c4,eb4]@5, ~@3 ab3@13]/2", D: "[gb1,gb3,bb3,db4]",
})).s("gm_church_organ").gain(0.27).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@12 ~@4 A@8 ~@4 A@11 ~ A@8 ~@4 A@8 ~@8 A@8 ~@9>".pickRestart({
  A: "x!4",
})).gain(0.66)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 A@12 ~@4 A@8 ~@4 A@11 ~ A@8 ~@4 A@8 ~@8 A@8 ~@9>".pickRestart({
  A: "~@3 x ~@2 x ~@4 x ~@2 x ~",
})).gain(0.39)

// drums · rim
const rim = s("rim").struct("<~@4 A@12 ~@4 A@8 ~@4 A@11 ~ A@8 ~@4 A@8 ~@8 A@8 ~@9>".pickRestart({
  A: "~@3 x ~@3 x",
})).gain(0.33)

// drums · snare
const snare = s("sd").struct("<~@4 A@4 B@8 ~@3 C D@8 E@3 C B@11 ~ D@7 C ~@4 B@7 ~@8 C B@8 ~@9>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!3 ~@2 x ~ x!2 ~ x ~ x!2", C: "x!16", D: "~@4 x ~@7 x ~ x!2", E: "~@14 x!2",
})).gain(0.33)

// drums · clap
const clap = s("cp").struct("<~@4 A@16 B@8 A@15 ~ B@8 A@11 ~ A@23 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@10 x ~@2 x ~@2",
})).gain(0.39)

// drums · hihat
const hihat = s("hh").struct(`<
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~@2]!43
  x
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~@2]!8
  ~@4
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~@2]!7
  x
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~@2]!16
  ~@9
>`).gain(0.39)

// drums · open hat
const open_hat = s("oh").struct(`<
  [~@2 x ~@3 x ~@3 x ~@3 x!2]!43
  ~
  [~@2 x ~@3 x ~@3 x ~@3 x!2]!8
  ~@4
  [~@2 x ~@3 x ~@3 x ~@3 x!2]!7
  ~
  [~@2 x ~@3 x ~@3 x ~@3 x!2]!16
  ~@9
>`).gain(0.39)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@12 ~@12 A@15 ~@9 A@11 ~ A@16 B C B C B C B ~@2>".pickRestart({
  A: "x!16", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.26)

// drums · bongos
const bongos = s("bongo:4").struct("<~@8 A@12 ~@12 A@11 ~@9 A@11 ~@9 A@8 ~@9>".pickRestart({
  A: "~@7 x",
})).gain(0.86)

// drums · bongos
const bongos_2 = s("bongo:18").struct(`<
  ~@8 A B A B A B A B A B A B ~@12 A B A B A B A B A B A ~@9 A B A B A B A B A B A ~@9 A B A B A B A B ~@9
>`.pickRestart({
  A: "x ~ x!3 ~ x!7 ~@3", B: "x ~ x!4 ~ x ~ x ~ x!3 ~@2",
})).gain(0.86)

stack(
  bass, lead_2_sawtooth, alto_sax, synth_strings_1, piano, glockenspiel, string_ensemble_1, church_organ, kick,
  kick_soft, rim, snare, clap, hihat, open_hat, crash, tambourine, bongos, bongos_2
)

More by Masterboy