Strudelify

yottabyte

Martijn Garritsen

KeyA♭ majorTempo128 bpm
0:00/0:00
// yottabyte — Martijn Garritsen
// 128 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "5-str. Electric Bass, FINGEREDBAS" named as a bass, played on electric bass finger (its pad choir patch is not one); ch 6 "Violoncellos, STRINGS 1" named as a string part, played on cello (its epiano1 patch is not one); ch 9 "Strings, STRINGS 1" named as a string part, played on string ensemble 1 (its pad poly patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5383496; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · electric bass finger · "5-str. Electric Bass, FINGEREDBAS"
const bass = note(`<
  ~@25 A B A C A B A D A B A C A B A D A B A C A B A E ~@2 F G H I J G H K F G H I J G H K F G H I J G H K ~@8 A B A C A
  B A D A B A C A B A D A B A C A B A E ~@2
>`.pickRestart({
  A: "c2@2 c2 db2 db2@2 ~@2", B: "ab1@2 ab1 f1 f1@2 ~@2", C: "eb2@2 eb2 bb1 bb1@2 ab2@2",
  D: "[eb1,eb2]@2 [eb1,eb2] [f1,f2] [f1,f2]@2 [ab1,ab2]@2", E: "[eb1,eb2]@2 [eb1,eb2] [f1,f2] [f1,f2]@2 ~@2",
  F: "c3@3 db3@5", G: "ab2@3 f2@5", H: "c3@3 db2@5", I: "eb2@3 bb1@5", J: "c2@3 db2@5", K: "eb2@3 f2@5",
})).s("gm_electric_bass_finger").gain(0.05)

// other · pad sweep · "Crotales, MUSIC BOX"
const pad_sweep = note(`<
  ~ A B@2 C A D@2 E A F@2 C A G@2 E ~@6 H E ~@34 A B@2 C A D@2 E A F@2 C A G@2 E ~@6 H E ~@26
>`.pickRestart({
  A: "eb5@2 ~@2 eb5@2 ~@2 f5@2 ~@2 f5 ~@2 f5",
  B: "[ab5@2 ~@2 c6 ~ ab5 ~@9 eb6@2 ~@2 eb6@2 ~@2 ab5@2 ~@2 ab5@2 ~@2, c6 ~@14 ab5@5 ~@12]/2",
  C: "ab5 bb5 ab5 ~ c6 ~ f5 ~@9",
  D: "[ab5@2 ~@2 c6 ~ ab5 ~@9 eb6@2 ~@2 eb6@2 ~@2 ab5@2 ~@2 ab5 ~@2 ab5, c6 ~@14 ab5@5 ~@12]/2",
  E: "c6@2 g6 ~ eb6 ~ f6 ~@3 eb6 ~ c6 ~ ab5 ~, ab6 ~@15",
  F: "[ab5@2 ~@2 eb5 ~ ab5 ~@9 eb6@2 ~@2 eb6@2 ~@2 ab5@2 ~@2 ab5@2 ~@2, c6 ~@14 ab5@5 ~@12]/2",
  G: "[ab5@2 db6 ~ eb6 ~ ab5 ~@9 eb6@2 ~@2 eb6@2 ~@2 ab5@2 ~@2 ab5 ~@2 ab5, c6 ~@14 ab5@5 ~@12]/2", H: "~@15 ab5",
})).s("gm_pad_sweep").gain(0.5)

// chords · cello · "Violoncellos, STRINGS 1"
const cello = note(`<
  ~@3 A B C D E F C D A G C D A H I J I K I J I ~ L M L N L M L O L M L N L M L O L M L N L M L P ~@18 C D A B C D A H I
  J I K I J I ~@27
>`.pickRestart({
  A: "[c3,c4,g4] ~ [c3,c4,g4] ~ [c3,c4,g4] ~ [db3,db4,ab4] ~ [db3,db4,ab4] ~ [db3,db4,ab4] ~ [db3,db4,ab4] ~ [db3,db4,ab4] ~", // C5 Db5
  B: "[eb3,eb4,bb4] ~ [eb3,eb4,bb4] ~ [eb3,eb4,bb4] ~ [bb2,bb3,f4] ~ [bb2,bb3,f4] ~ [bb2,bb3,f4] ~ [bb2,bb3,f4] ~ [bb2,bb3,f4] ~", // Eb5 Bb5
  C: "[c3,c4,eb4] ~ [c3,c4,eb4] ~ [c3,c4,eb4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~", // Cm Db
  D: "[ab2,ab3,c5] ~ [ab2,ab3,c5] ~ [ab2,ab3,c5] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~", // Ab Fm
  E: "[c3,c4,g4,ab5] g5 [c3,c4,g4,ab5] g5 [c3,c4,g4,ab5] bb5 [db3,db4,ab4,ab5] g5 [db3,db4,ab4,ab5] g5 [db3,db4,ab4,ab5] g5 [db3,db4,ab4,ab5] bb5 [db3,db4,ab4,ab5] g5", // Abmaj7 Db5
  F: "[eb3,eb4,bb4,ab5] g5 [eb3,eb4,bb4,ab5] g5 [eb3,eb4,bb4,ab5] bb5 [f3,f4,c5,ab5] g5 [f3,f4,c5,ab5] g5 [f3,f4,c5,ab5] g5 [f3,f4,c5,ab5] bb5 [f3,f4,c5,ab5] g5", // Ebsus4 Fm
  G: "[eb3,eb4,bb4] ~ [eb3,eb4,bb4] ~ [eb3,eb4,bb4] ~ [bb2,bb3,f4,bb4] ~ [bb2,bb3,f4,bb4] ~ [bb2,bb3,f4,bb4] ~ [bb2,bb3,f4,bb4] ~ [bb2,bb3,f4,bb4] ~", // Eb5 Bb5
  H: "[eb3,eb4,bb4] ~ [eb3,eb4,bb4] ~ [eb3,eb4,bb4] ~ [f3,f4,c5] ~ [f3,f4,c5] ~ [f3,f4,c5] ~ [f3,f4,c5] ~ [f3,f4,c5] ~", // Eb5 F5
  I: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~", // C5 Db5
  J: "[ab2,c4] ~ [ab2,c4] ~ [ab2,c4] ~ [f2,ab3] ~ [f2,ab3] ~ [f2,ab3] ~ [f2,ab3] ~ [f2,ab3] ~", // Ab Fm
  K: "[eb3,bb3] ~ [eb3,bb3] ~ [eb3,bb3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Eb5 Bb5
  L: "c2@2 c2 db2 db2@2 ~@2", M: "ab1@2 ab1 f1 f1@2 ~@2", N: "eb2@2 eb2 bb1 bb1@2 ab2@2",
  O: "[eb1,eb2]@2 [eb1,eb2] [f1,f2] [f1,f2]@2 [ab1,ab2]@2", P: "[eb1,eb2]@2 [eb1,eb2] [f1,f2] [f1,f2]@2 ~@2",
})).s("gm_cello").gain(0.4)

// chords · cello · "Violoncellos, STRINGS 1" · soft notes
const cello_soft = note("<~ A B ~@48 C D E F G H I J ~@50>".pickRestart({
  A: "[c3,c4,eb4] ~ [c3,c4,eb4] ~ [c3,c4,eb4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~ [db3,db4,f4] ~", // Cm Db
  B: "[ab2,ab3,c5] ~ [ab2,ab3,c5] ~ [ab2,ab3,c5] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~ [f2,f3,ab4] ~", // Ab Fm
  C: "[c2,eb4]@3 [db2,f4]@5", D: "eb4@2 f4 [f2,c4]@5, ab2@3 ~@5", E: "[c2,g4]@3 [db2,ab4]@5",
  F: "[eb2,g4,bb4]@3 [bb1,f4,c5]@5", G: "[c2,c4,eb4]@3 [db2,ab3,f4]@5", H: "[eb4,c5] db5 [f4,eb5] [f2,c4,ab4]@5, ab2 ~",
  I: "[c2,c4,g4]@3 [db2,f4,ab4]@5", J: "[eb2,f4,bb4]@3 [f2,f4,c5]@5",
})).s("gm_cello").gain(0.2)

// chords · string ensemble 1 · "Strings, STRINGS 1"
const string_ensemble_1 = note(`<
  ~@3 A B C D A E F G H I F J H K ~@42 C L A B C D A E F G H I F J H K ~@34
>`.pickRestart({
  A: "[c2,c3,g4]@3 [db2,db3,ab4]@5", B: "[eb2,eb3,bb4]@3 [bb1,bb2,f4]@5", C: "[c2,c3,eb4]@3 [db2,db3,f4]@5",
  D: "c5 db5 eb5 [f1,f3,ab4]@5, [ab1,ab3] ~", E: "[eb2,eb3,bb4]@3 [f2,f3,c5]@5", F: "[c2,c4,eb5]@3 [db2,db4,f5]@5",
  G: "c6@2 f5 [f1,c4,ab5]@5, [ab1,eb4] ~", H: "[c2,g3,eb4,g5]@3 [db2,ab3,f4,ab5]@5",
  I: "[eb2,g3,g4,bb5]@3 [bb1,f3,f4,bb4,f5]@5", J: "c6 db6 eb6 [f1,c4,ab5]@5, [ab1,eb4] ~",
  K: "[eb2,g3,eb4,g4,bb5]@3 [f2,f3,f4,c6]@5", L: "c5@2 f4 [f1,f3,ab4]@5, [ab1,ab3] ~",
})).s("gm_string_ensemble_1").gain(0.4)

// chords · string ensemble 1 · "Strings, STRINGS 1" · soft notes · Cm Db Ab Fm
const string_ensemble_1_soft = note("<~ [[c2,c3,eb4]@3 [db2,db3,f4]@5] [[ab1,ab3,c5]@3 [f1,f3,ab4]@5] ~@106>")
  .s("gm_string_ensemble_1").gain(0.2)

// other · pad metallic · "Saw Synthesizer, SAW WAVE"
const pad_metallic = note(`<
  ~@17 A B C D A B C ~ A E C D A E C F A E C D A E C F G@8 ~@26 A B C D A B C ~ A E C D A E C F A E C D A E C F G@8 ~@2
>`.pickRestart({
  A: "eb4 f4", B: "c5@2 ab4 ~", C: "eb5 ab4", D: "bb4@2 c5 f4@3 eb4 c4", E: "c5@8 ab4@2 ab5!2 g5 ab5!3",
  F: "ab5@2 eb5 f5@2 eb5 c5 ab4", G: "g5 ab5!3 g5 ab5!3 g5 ab5!3 ~@4",
})).s("gm_pad_metallic").gain(0.3)

// chords · pad halo · "Pad Synthesizer, POLYSYNTH"
const pad_halo = note(`<
  ~@17 A B C D A B E ~ F G H I F G H J F G H I F G H J F G H I F G K L@3 ~@8 M N O P Q R S T ~@8 A B C D A B E ~ F G H I
  F G H J F G H I F G H J F G H I F G K L@3
>`.pickRestart({
  A: "[c3,g3,c4] ~ [c3,g3,c4] ~ [c3,g3,c4] ~ [db3,ab3,db4] ~ [db3,ab3,db4] ~ [db3,ab3,db4] ~ [db3,ab3,db4] ~ [db3,ab3,db4] ~", // C5 Db5
  B: "[ab2,eb4] ~ [ab2,eb4] ~ [ab2,eb4] ~ [f2,c4] ~ [f2,c4] ~ [f2,c4] ~ [f2,c4] ~ [f2,c4] ~", // Ab5 F5
  C: "[c3,eb4] ~ [c3,eb4] ~ [c3,eb4] ~ [db3,f4] ~ [db3,f4] ~ [db3,f4] ~ [db3,f4] ~ [db3,f4] ~", // Cm Db
  D: "[eb3,g4] ~ [eb3,g4] ~ [eb3,g4] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~", // Eb Bb5
  E: "[c3,g3,eb4] ~ [c3,g3,eb4] ~ [c3,g3,eb4] ~ [db3,ab3,f4] ~ [db3,ab3,f4] ~ [db3,ab3,f4] ~ [db3,ab3,f4] ~ [db3,ab3,f4] ~", // Cm Db
  F: "[c3,ab3]!2 [db3,ab3] ~", G: "[ab3,eb4]@2 f4 c4 [f3,c4]@2 ~@2, ~ ab3 ~@2",
  H: "[ab3,c4]@2 [ab3,c4] [ab3,db4] [ab3,db4]@2 ~@2", I: "[eb3,bb3]@2 [f3,c4] [bb2,f3] [bb2,f3]@2 [bb2,f3]@2",
  J: "[eb3,bb3]@2 [eb3,bb3] [f3,c4] [f3,c4]@2 [f3,c4]@2", // Eb5 F5
  K: "[ab3,c4,g4]@2 [ab3,c4,g4] [ab3,db4,ab4] [ab3,db4,ab4]@2 ~@2", // Abmaj7 Db5
  L: "[[eb3,bb3,bb4]@2 [eb3,bb3,bb4] [f3,c4,f4,c5] [f3,c4,f4,c5]@2 [f3,c4,f4,c5]@18]/3", // Eb5 F5
  M: "[c2,c4,eb4]@3 [db2,db4,f4]@5", N: "[ab3,eb4]@2 [ab3,f4] [f2,f3,c4]@5, ab2 ~", O: "[c2,eb4,g4]@3 [db2,db4,f4]@5",
  P: "[eb2,g4,bb4]@3 [bb1,f4,c5]@5", Q: "[c2,c4,eb4]@3 [db2,ab3,f4]@5", R: "[eb4,c5] db5 [f4,eb5] [f2,c4,ab4]@5, ab2 ~",
  S: "[c2,c4,g4]@3 [db2,f4,ab4]@5", T: "[eb2,f4,bb4]@3 [f2,f4,c5]@5",
})).s("gm_pad_halo").gain(0.3)

// other · pad choir · "Pad Synthesizer, PAD CHOIR"
const pad_choir = note("<~@48 A@8 ~@53>".pickRestart({
  A: "[~ ab4@15]/8",
})).s("gm_pad_choir").gain(0.2)

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

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

// drums · clap
const clap = s("cp").struct("<~@9 A@15 ~ B@7 ~ B@7 ~ B@7 ~@11 B@8 A@15 ~ B@7 ~ B@7 ~ B@7 ~@3>".pickRestart({
  A: "x!4", B: "~ x ~ x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[x!4] ~@108>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@25 A B A@3 B A ~ B@7 ~ B@7 ~@35 A B A@3 B A ~ B@7 ~ B@7 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@59 [x!16]!16 ~@34>").gain(0.5)

// drums · splash
const splash = s("cr").struct("<~@25 A@7 B A@7 B A@7 B ~@34 A@7 B A@7 B A@7 B ~@2>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.5)

// drums · bongos
const bongos = s("bongo:4").struct("<~@8 [~@3 x] ~@49 [~@3 x] ~@7 [~@3 x] ~@42>").gain(0.78)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@8 [~@3 x] ~@57 [~@3 x] ~@42>").gain(1.9)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<~@8 x ~@57 x ~@42>").gain(0.39)

// drums · triangle
const triangle = s("triangles:30").struct("<~@58 [x!9 ~@7] ~@50>").gain(4.32)

stack(
  bass, pad_sweep, cello, cello_soft, string_ensemble_1, string_ensemble_1_soft, pad_metallic, pad_halo, pad_choir,
  kick, snare, clap, hihat, open_hat, tambourine, splash, bongos, agogo_bells, whistle, triangle
)