Strudelify

Beginning

Toby Fox

KeyC♭ majorTempo138 bpm
0:00/0:00
// Beginning — Toby Fox
// 138 bpm, 4/4, key Cb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5296347; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 32 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 B C D A B C D A B C E F G F G F G H I H J K ~@9>".pickRestart({
  A: "[eb3,gb3]@2 [eb3,gb3] ~ [eb3,gb3] ~ [eb3,gb3]@2 [eb3,gb3] ~ [eb3,gb3] ~ [b2,eb3,gb3]@2 [eb3,gb3] ~, b2@2 b2 b2@2 b2 ~ gb2", // Ebm B Ebm
  B: "[eb3,g3]@2 [eb3,g3] ~ [eb3,g3] ~ [eb3,g3]@2 [eb3,g3] ~ [eb3,g3] ~ [b2,eb3,g3]@2 [eb3,g3] ~, b2@2 b2 b2@2 b2 ~ gb2", // Eb Baug Eb
  C: "[eb3,ab3]@2 [eb3,ab3] ~ [eb3,ab3] ~ [eb3,ab3]@2 [eb3,ab3] ~ [eb3,ab3] ~ [b2,eb3,ab3]@2 [eb3,ab3] ~, b2@2 b2 b2@2 b2 ~ gb2", // Ab5 Abm Ab5
  D: "[eb3,a3]@2 [eb3,a3] ~ [eb3,a3] ~ [eb3,a3]@2 [eb3,a3] ~ [eb3,a3] ~ [b2,eb3,a3]@2 [eb3,a3] ~, b2@2 b2 b2@2 b2 ~ gb2", // Ebdim B7 Ebdim
  E: "[b3,gb4,b4] ~@3", F: "~@2 [eb3,ab3] ~@3 [eb3,ab3] ~@3 [eb3,ab3] ~@3 [eb3,ab3] ~",
  G: "~@2 [db3,gb3] ~@3 [db3,gb3] ~@3 [db3,gb3] ~@3 [db3,gb3] ~", // Gb5
  H: "db2@2 [eb3,ab3] ~ db2@2 [eb3,ab3] ~ eb2@2 [gb3,b3] ~ eb2@2 [gb3,b3] ~", // Ab5 B5
  I: "e2@2 [gb3,b3] ~ e2@2 [gb3,b3] ~ gb2@2 [gb3,b3] ~ gb2@2 [gb3,b3] ~", J: "e2 gb3", K: "b3",
})).s("gm_piano").gain(0.15)

// other · string ensemble 1 · "Violins"
const string_ensemble_1 = note("<A B C D A B C D A B C E F G H I F G H I J K ~@10>".pickRestart({
  A: "gb4 ~ gb4 ~ gb4 ~ gb4 ~ gb4 ~ gb4 ~ gb4 ~ gb4 ~", B: "g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~",
  C: "ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~", D: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~", E: "[a4,a5]",
  F: "[gb5,b5]", G: "[db5,gb5]", H: "[e5,ab5]", I: "[gb5,bb5]", J: "[b4,eb5]", K: "db5, ab4 ~",
})).s("gm_string_ensemble_1").gain(0.11)

// other · string ensemble 1 · "Violins"
const string_ensemble_1_2 = note(`<
  ~@12
  [gb5 ~ gb5 ~ gb5 ~ gb5 ~ gb5@4 b4@2 eb5@2]
  [db5 ~ db5 ~ db5 ~ db5 ~ db5@4 ~@2 eb5 db5]
  [b4 ~ b4 ~ b4 ~ b4 ~ e5@2 eb5@2 b4@2 db5@2]
  [db5@6 eb5 ~ eb5@6 eb5 e5]
  [gb5 ~ gb5 ~ gb5 ~ gb5 ~ gb5@4 b4@2 eb5@2]
  [db5 ~ db5 ~ db5 ~ db5 ~ db5@4 ~@4]
  ~@14
>`).s("gm_string_ensemble_1").gain(0.26)

// other · celesta
const celesta = note("<~@22 A B C D A B C E F ~>".pickRestart({
  A: "gb6@3 ~ b5@3 ~ db6@3 ~ b5@3 ~", B: "f5@3 f5 b5@3 ~ db6@3 ~ b5@3 ~", C: "e5@3 e5 b5@3 ~ db6@3 ~ e6@3 e6",
  D: "eb6@3 ~ db6@3 ~ b5@3 ~ gb5@3 ~", E: "eb6@3 ~ db6@3 ~ b5@3 ~ db6@3 ~", F: "b5@3 ~@13",
})).s("gm_celesta").gain(0.3)

// other · celesta · soft notes
const celesta_soft = note("<~@22 A B C D A B C E F ~>".pickRestart({
  A: "~@3 gb6 ~@3 b5 ~@3 db6 ~@3 b5", B: "~@7 b5 ~@3 db6 ~@3 b5", C: "~@7 b5 ~@3 db6 ~@4",
  D: "~@3 eb6 ~@3 db6 ~@3 b5 ~@3 gb5", E: "~@3 eb6 ~@3 db6 ~@3 b5 ~@3 db6", F: "~@3 b5 ~@12",
})).s("gm_celesta").gain(0.15)

// bass · tuba · "Sousaphone"
const bass = note("<~@12 A B C D A B E F ~@12>".pickRestart({
  A: "e2 ~ b1 ~ e2 ~ b1 ~", B: "eb2 ~ b1 ~ eb2 ~ b1 ~", C: "db2 ~ gb1 ~ db2 ~ gb1 ~", D: "b1 ~ gb1 ~ eb2 ~ gb2 ~",
  E: "db2 ~ db2 ~ eb2 ~ eb2 ~", F: "e2 ~ e2 ~ gb2 ~ gb2 ~",
})).s("gm_tuba").gain(0.35)

// other · timpani
const timpani = note("<~@12 A B C D A B E F ~@12>".pickRestart({
  A: "e3 b2 e3 b2", B: "eb3 b2 eb3 b2", C: "db3 gb2 db3 gb2", D: "b2 gb2 eb3 gb3", E: "db3!2 eb3!2", F: "e3!2 gb3!2",
})).s("gm_timpani").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~@12 [x!4]!8 ~@12>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@12
  [~ x ~ x ~ x ~ x]
  [~ x!3 ~ x ~ x]!2
  [~@2 x ~ x ~@5 x!3 ~@3]
  [~ x!3 ~ x ~ x]!2
  [~ x ~ x ~ x ~ x]
  [~ x ~@6]
  ~@12
>`).gain(0.3)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@15 [~@3 x ~@3 x] ~@3 [~@3 x ~ x ~ x] ~@12>").gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@12 x ~@2 [x!2] x ~@15>").gain(0.3)

stack(
  piano, string_ensemble_1, string_ensemble_1_2, celesta, celesta_soft, bass, timpani, kick, high_tom, high_tom_soft,
  crash
)

More by Toby Fox