Strudelify

Return to Slime

DM DOKURO

KeyG♭ majorTempo171 bpm
0:00/0:00
// Return to Slime — DM DOKURO
// 171 bpm, 4/4, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5128929; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(171/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.

// chords · piano · "Piano, MIDI Out"
const piano = note(`<
  A B C D E B A F A B C D E B A F ~@18 G H I J ~@36 K@2 L@2 M@2 N@2 O@2 P Q R S T U V W X Y Z AA AB AC AD AE AD AF AG
  ~@7
>`.pickRestart({
  A: "[a1,e2,a2]@15 ~", B: "[eb2,bb2,eb3] [d2,a2,d3]", C: "[bb1,e2,bb2]@15 ~", D: "[g2,c3,g3] [g2,c3] [e2,bb2,f3]@2",
  E: "[eb2,a2,e3]@15 ~", F: "[a2,e3,a3]@15 ~", G: "[eb2,bb2,eb3]!2 [d3,a3]!2", H: "[e2,bb2,e3]@4 [c2,g2,c3]!4",
  I: "[f2,bb2,f3]!2 [a1,e2,a2]!2", J: "a5 g5 gb5 e5 eb5 c5 b4 a4 f5 eb5 d5 c5 b4 ab4 g4 f4, [ab2,ab3]!4 [bb2,bb3]!4",
  K: "[bb3@15 ~]/2", L: "[f3@15 ~]/2", M: "[eb3@15 ~]/2", N: "[db3@15 ~]/2", O: "[b2@15 ~]/2", P: "db3@15 ~",
  Q: "~ f4, d3@15 ~", R: "bb4 gb4", S: "eb5 bb4", T: "ab4 db5", U: "f4 ab4", V: "gb4@15 ~", W: "gb4 bb4 ab4 gb4",
  X: "f4@11 ~ gb4@4", Y: "f4!2 d4!2", Z: "eb4!2 gb4@2", AA: "bb4@2 eb5!2", AB: "f5 db5", AC: "ab4 f5", AD: "ab5 gb5",
  AE: "eb5 bb5", AF: "f5@15 ~", AG: "eb5@15 ~",
})).s("gm_piano").gain(0.4)

// other · string ensemble 1 · "Violas, MIDI Out #2"
const string_ensemble_1 = note("<~@18 A B A B A B A C A B A B A B A B ~@76>".pickRestart({
  A: "ab3 bb3 b3 bb3 ab3 bb3 b3 bb3", B: "ab3 f3 gb3 f3 ab3 f3 gb3 f3", C: "ab3!8",
})).s("gm_string_ensemble_1").gain(0.4)

// bass · electric bass pick · "Bass Guitar, MIDI Out #7"
const bass = note("<~@38 A@8 B@2 C D E@4 A@8 F G H I J@3 K L@2 ~@38>".pickRestart({
  A: "~ bb1 ~ bb1 ~ bb1 ~ bb1", B: "~ ab1 ~ ab1 ~ ab1 ~ ab1", C: "~ gb1 ~ gb1 ~ gb1 ~ gb1", D: "~ g1 ~ g1 ~ g1 ~ g1",
  E: "~ f1 ~ f1 ~ f1 ~ f1", F: "~ db2 ~ db2 ~ db2 ~ db2", G: "~ eb2 ~ eb2 ~ eb2 ~ eb2", H: "~ gb2 ~ gb2 ~ gb2 ~ gb2",
  I: "~ ab2 ~ ab2 ~ ab2 ~ ab2", J: "~ bb2 ~ bb2 ~ bb2 ~ bb2", K: "bb2 c3 db3 d3", L: "[eb3@3 ~]/2",
})).s("gm_electric_bass_pick").gain(0.4)

// other · overdriven guitar · "Electric Guitar, MIDI Out #8"
const overdriven_guitar = note("<~@53 A B@8 C D E F G@3 H I@2 ~@13 A J@16 ~@8>".pickRestart({
  A: "~ bb3", B: "bb3 ~ bb3 ~ bb3 ~ bb3 ~", C: "db4 ~ db4 ~ db4 ~ db4 ~", D: "eb4 ~ eb4 ~ eb4 ~ eb4 ~",
  E: "gb4 ~ gb4 ~ gb4 ~ gb4 ~", F: "ab4 ~ ab4 ~ ab4 ~ ab4 ~", G: "bb4 ~ bb4 ~ bb4 ~ bb4 ~", H: "bb4 c5 db5 d5",
  I: "[eb5@3 ~]/2", J: "~ bb3 ~ bb3 ~ bb3 ~ bb3",
})).s("gm_overdriven_guitar").gain(0.35)

// other · distortion guitar · "Electric Guitar, MIDI Out #9"
const distortion_guitar = note("<~@70 A@2 B C D@2 E F G@2 H@2 I@2 J K ~@16 L M L N O P O Q>".pickRestart({
  A: "[bb3@3 eb4]/2", B: "db4@2 ab3 gb3", C: "f3@2 eb4!2", D: "[bb4@5 bb3 ab4 db4]/2", E: "f4", F: "f4 gb4 eb4 f4",
  G: "[gb4@5 gb4 f4 db4]/2", H: "[ab3@6 gb3 ab3]/2", I: "[bb3@6 ab3 gb3]/2", J: "f3", K: "bb3",
  L: "[b2,b3] [bb2,bb3] [eb2,eb3] [eb2,eb3]@2 [eb2,eb3]!3", M: "[eb2,eb3] [eb2,eb3]@7",
  N: "[eb2,eb3] [eb2,eb3]@2 [bb2,bb3] [b2,b3]@2 [bb2,bb3]@2", O: "[db2,db3] [c2,c3] [f2,f3] [f2,f3]@2 [f2,f3]!3",
  P: "[f2,f3] [f2,f3]@7", Q: "[f2,f3]",
})).s("gm_distortion_guitar").gain(0.45)

// other · string ensemble 1 · "Violoncellos, MIDI Out #10"
const string_ensemble_1_2 = note("<~@71 A@3 B@2 C@2 D@2 E@2 F@2 G H D@2 E@2 F@2 G H D@2 C@2 I@2 J K ~@8>".pickRestart({
  A: "[~ eb3@4 eb3]/3", B: "bb3/2", C: "f3/2", D: "eb3/2", E: "db3/2", F: "b2/2", G: "db3", H: "d3", I: "gb3/2",
  J: "ab3", K: "bb3",
})).s("gm_string_ensemble_1").gain(0.35)

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

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

// drums · clap
const clap = s("cp").struct("<~@18 [x ~@2 x] [~@3 x]!6 ~ [~@3 x]!8 ~@52 [~@3 x]!16 ~@8>").gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@16 x ~@20 [~@6 x!2] ~@72>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 [~@2 x!4 ~@2] ~@72>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@37 [x!2 ~@6] ~@72>").gain(0.45)

// drums · splash
const splash = s("cr").struct("<A ~@7 A ~@9 A ~@7 A ~@43 A ~@15 A ~@23>".pickRestart({
  A: "x",
})).gain(0.5)

stack(
  piano, string_ensemble_1, bass, overdriven_guitar, distortion_guitar, string_ensemble_1_2, kick, snare, clap, low_tom,
  mid_tom, high_tom, splash
)