Strudelify

Milk

Garbage

KeyE minorTempo94 bpm
0:00/0:00
// Milk — Garbage
// 94 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(94/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · pad choir
const pad_choir = note("<A@4 ~@25 B@2 C ~@21 A@4 ~@25 D@4 E@3 F@2>".pickRestart({
  A: "[[b5,d6] e5 [b5,d6] [a5,c6]@2 e5 [a5,c6] [g5,b5]@2 e5 [g5,b5] [f#5,a5]@2 b4 [f#5,a5] [e5,g5]@2 b4 [e5,g5] [d5,f#5]@2 b4 [d5,f#5] e5@2 ~@7]/4", // Bm Am G F#m Em D
  B: "[[b5,d6] e5 [b5,d6] [a5,c6]@2 e5 [a5,c6] [g5,b5]@2 e5 [g5,b5] [f#5,a5]@2 b4 [f#5,a5] [e5,g5]]/2", C: "[e5,g5]",
  D: "[[b5,d6] e5 [b5,d6] [a5,c6]@2 e5 [a5,c6] [g5,b5]@2 e5 [g5,b5] [f#5,a5]@4 ~]/2", // Bm Am G F#m
  E: "[[b5,d6] e5 [b5,d6] [a5,c6]@2 e5 [a5,c6] [g5,b5]@2 e5 [g5,b5] [f#5,a5]@2 b4 [f#5,a5] [e5,g5]@2 b4 [e5,g5] [d5,f#5]@2 b4 [d5,f#5] ~]/3", // Bm Am G F#m Em D
  F: "[b4,e5]", // E5
})).s("gm_pad_choir").gain(0.26)

// other · orchestral harp
const orchestral_harp = note(`<
  ~@32 A ~ A ~ A ~ A B ~@2 A B ~@2 A B ~@2 A B@2 ~@15 A B ~@2 A B ~@2 A B ~@2 A B ~@9
>`.pickRestart({
  A: "~@3 g4 f#4 g4@2 g4", B: "~@3 g4 f#4 g4@2 ~",
})).s("gm_orchestral_harp").gain(0.12)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@3 A@2 B C B C B C B@2 C B C B C B C B D E F@2 D E G H ~@3 B C B C B C B@2 D E F@2 D E F@2 I J C@3 ~@3 A@2 B C B C B
  C B@2 I J C@2 I J C@2 I J C@2 I J C@2 ~@9
>`.pickRestart({
  A: "e4", B: "[a3,c4]", C: "[g3,b3,e4]", D: "[a3,c4,e4]@3 [a3,c4,f#4] [a3,c4,f#4]@4",
  E: "[c4,e4,g4]@3 [c4,e4,f#4] [c4,e4,f#4]@4", F: "[a#3,c#4]", G: "[b3,d#4,f#4,b4]", H: "[c4,e4,g4,c5]",
  I: "[a3,c4,e4]", J: "[c4,e4,g4]",
})).s("gm_string_ensemble_1").gain(0.4)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!88 ~@3>").gain(0.26)

// drums · low tom
const low_tom = s("lt").struct("<~@88 [~ x ~ x] ~@2>").gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<[~@5 x ~@2]!88 ~@3>").gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@88 [~@5 x ~@2] ~@2>").gain(0.26)

// drums · tambourine
const tambourine = s("tb").struct("<[x!2 ~ x!2 ~@2 x]!88 ~@3>").gain(0.26)

// drums · splash
const splash = s("cr").struct("<~@88 [x!2 ~ x!2 ~@2 x] ~@2>").gain(0.26)

stack(pad_choir, orchestral_harp, string_ensemble_1, snare, low_tom, open_hat, mid_tom, tambourine, splash)

More by Garbage