Strudelify
Welcome to Tomorrow cover art

Welcome to Tomorrow

Welcome to Tomorrow

Snap

KeyA♭ majorTempo150 bpm
0:00/0:00
// Welcome to Tomorrow — Snap
// 150 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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 · "+SYNBASS 3"
const bass = note(`<
  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 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 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 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 ~
>`.pickRestart({
  A: "db2@2 ~ db2@2 ~ db2@2 ~@2 db2@2 ~@2 db2@2", B: "bb1@2 ~ bb1@2 ~ bb1@2 ~@2 bb1@2 ~@2 bb1@2",
  C: "eb2@2 ~ eb2@2 ~ eb2@2 ~@2 eb2@2 ~@2 eb2@2", D: "ab1@2 ~ ab1@2 ~ ab1@2 ~@2 ab1@2 ~@2 ab1@2",
})).s("gm_synth_bass_1").gain(0.27).pan(0.4)

// chords · string ensemble 1 · "+ORCHESTRA"
const string_ensemble_1 = note(`<
  A B C D A B C D A B C D E F G D H I J D H I J D H I J D H I J K H I J D H I J D H I J D H I J D H I J D H I J D H I J
  D H I J 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 H I J D H I J D H I J D H I J D H I J D H I
  J K H I J D H I J D H I J D H I J D H I J D H I J D H I J D H I J D A B C D A B C D ~
>`.pickRestart({
  A: "[db3,db4,eb4,ab4]", B: "[bb2,bb3,db4,f4]", C: "[eb2,bb3,db4,eb4]", D: "[ab2,db4,eb4,ab4]",
  E: "~ ab5 ~ ab5 ~ ab5 ~ ab5, [db3,db4,eb4,ab4]", F: "~ f5 ~ f5 ~ f5 ~ f5, [bb2,bb3,db4,f4]",
  G: "~ eb5 ~ eb5 ~ eb5 ~ eb5, [eb2,bb3,db4,eb4]", H: "[db3,ab4,db5,eb5]", I: "[bb2,f4,ab4,db5]",
  J: "[eb3,db4,eb4,bb4]", K: "[ab2,db4,eb4,ab4,eb6]",
})).s("gm_string_ensemble_1").gain(0.17)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@4 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 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 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 ~@9
>`.pickRestart({
  A: "ab3 ~ ab4 ~ ab3 ~ ab4 ~ ab3 ~ ab4 ~ ab3 ~ ab4 ~", B: "f3 ~ f4 ~ f3 ~ f4 ~ f3 ~ f4 ~ f3 ~ f4 ~",
  C: "eb3 ~ eb4 ~ eb3 ~ eb4 ~ eb3 ~ eb4 ~ eb3 ~ eb4 ~", D: "ab2 ~ ab3 ~ ab2 ~ ab3 ~ ab2 ~ ab3 ~ ab2 ~ ab3 ~",
})).s("gm_lead_2_sawtooth").gain(0.09).pan(0.9)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  ~@16
  [eb6@3 ~ eb6 ab5 ~@2 bb5@7 ~]!48
  ~@32
  [eb6@3 ~ eb6 ab5 ~@2 bb5@7 ~]!55
  [eb6@3 ~ eb6 ab5 ~@2 bb5@3 ~@5]
  ~@9
>`).s("gm_lead_1_square").gain(0.06).pan(0)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square_2 = note("<~@32 A B@7 A B@7 A B@7 A B@7 ~@48 A B@7 A B@7 A B@7 A B@7 A B@7 ~@9>".pickRestart({
  A: "ab5@3 ~ db5@4 eb5@3 db5@2 ~ db5@2", B: "ab5@4 db5@4 eb5@3 db5@2 ~ db5@2",
})).s("gm_lead_1_square").gain(0.11).pan(0.8)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square_3 = note("<~@55 A@8 B ~@72 C@16 ~@9>".pickRestart({
  A: "[~@14 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@2]/8",
  B: "~@4 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@4",
  C: "[~@4 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@2 db6@4 ~@2 db6 db5 db6 eb6 db5 eb6 db6 db5 ~@4]/8",
})).s("gm_lead_1_square").gain(0.06).pan(1)

// drums · kick
const kick = s("bd").struct("<~@8 A@23 B A@32 B ~@15 A@39 B A@24 ~@17>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@144 [~ x ~ x]!8 ~@9>").gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  A B ~ C A B ~ C A B ~ C A B ~ C D@15 ~ D@32 A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C D@23 ~
  D@24 ~@8 A B ~ C A B ~@3
>`.pickRestart({
  A: "x ~@13 x!2", B: "x", C: "~@14 x!2", D: "~ x ~ x",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!151 [x!15 ~] ~@9>").gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@50 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@58 A@2 ~@2 A@2 ~@3
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@15 ~ A@32 ~@32 A@23 ~ A@24 ~@17>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct(`<
  A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@50 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@58 A@2 ~@2 A@2 ~@3
>`.pickRestart({
  A: "~ x ~@14",
})).gain(0.2)

// drums · shaker
const shaker = s("sh").struct("<[~ x ~ x ~ x ~ x]!31 ~ [~ x ~ x ~ x ~ x]!87 ~ [~ x ~ x ~ x ~ x]!32 ~@9>").gain(0.35)

stack(
  bass, string_ensemble_1, lead_2_sawtooth, lead_1_square, lead_1_square_2, lead_1_square_3, kick, rim, snare, hihat,
  mid_tom, open_hat, high_tom, shaker
)

More by Snap