Strudelify

Think About the Way 2K9

Ice MC

KeyD minorTempo134 bpm
0:00/0:00
// Think About the Way 2K9 — Ice MC
// 134 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(134/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 · "SYN BASS"
const bass = note(`<
  ~@28 A B C D A B C D A@3 B A B A B A B A B C D A B C D A B A B A B A ~ A B C D A B C D A B C D A B C D A B A B A B A ~
  A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "d1@2 d2!2 d1@2 d2!2 d1@2 d2!2 d1@2 d2!2", B: "bb0@2 bb1!2 bb0@2 bb1!2 bb0@2 bb1!2 bb0@2 bb1!2",
  C: "c1@2 c2!2 c1@2 c2!2 c1@2 c2!2 c1@2 c2!2", D: "a0@2 a1!2 a0@2 a1!2 c1@2 c2!2 c1@2 c2!2",
})).s("gm_synth_bass_1").gain(0.4)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@38 A B A B A B A B ~@8 A B A B A B A ~@17 A B A B A B A ~@59>".pickRestart({
  A: "d2 d3 d2 d3 d2 d3 d2 d3", B: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2",
})).s("gm_lead_2_sawtooth").gain(0.3)

// chords · piano · "A.PIANO 1"
const piano = note("<~@4 A B C D A B C E ~@90 A B C D A B C D ~@34>".pickRestart({
  A: "a3@2 ~@5 e4, [d2,d3], f4!2, d4@3 d4@2 e4 d4@2, ~ a3@3", // D
  B: "~@7 bb1, bb1@7 ~, f4@4 bb2 f4@3, bb2@3 d4@5, ~ bb3@2 [bb2,bb3]", // Bb
  C: "c4@2 ~@5 c2, c2@7 ~, g4@4 c3 g4@3, c3@3 e4@5, e4 c4@2 [c3,c4]", // C
  D: "a3@2 ~@3 a3 ~ a3, g4, a1@3 [c2,c3], a2@3 c4@3 ~@2, c4 a3 a2 ~", E: "[a1,a2,a3,c4,g4]",
})).s("gm_piano").gain(0.34)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@12 A B C D A B C D A B C D A B C ~ A B C D A B C D ~@10 A B C D A B C D ~@16 A B C D A B C D ~@32 A B C D A B C ~ A
  B C D A B C D ~@18
>`.pickRestart({
  A: "[a4,d5,f5]@2 ~ [a4,d5,e5]@2 ~ [a4,d5,f5]@2 ~ [a4,d5,e5]@2 ~ [a4,d5,f5] ~ [a4,d5,e5] ~", // Dm Asus4 Dm Asus4 Dm Asus4
  B: "[bb4,d5,f5]@2 ~ [bb4,d5,e5]@2 ~ [bb4,d5,f5]@2 ~ [bb4,d5,f5]@2 ~ [bb4,d5,e5] ~ [bb4,d5,f5] ~", // Bb Em7b5 Bb Em7b5 Bb
  C: "[c5,e5,g5]@2 ~ [c5,e5,f5]@2 ~ [c5,e5,g5]@2 ~ [c5,e5,f5]@2 ~ [c5,e5,g5] ~ [c5,e5,f5] ~", // C Fmaj7 C Fmaj7 C Fmaj7
  D: "[c5,e5,g5]@2 ~ [c5,e5,f5]@2 ~ [c5,e5,g5]@2 ~ [c5,e5,g5]@2 ~ [c5,e5,f5] ~ [c5,e5,g5] ~", // C Fmaj7 C Fmaj7 C
})).s("gm_rock_organ").gain(0.28)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@12 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C ~ D@2 E@2 D@2 E@2 ~@10 D@2 E@2 D@2 E@2 ~@16 D@2 E@2 D@2 E@2 ~@32 A@2 B@2 A@2 C ~
  D@2 E@2 D@2 E@2 ~@18
>`.pickRestart({
  A: "[[d2,a3] [bb1,bb3], [f3,d4]]/2", B: "[[c2,g3]@2 a1 c2, [c4,e4], ~ a3]/2", C: "[c2,g3,c4,e4]",
  D: "[a3 bb3, [d4,f4]]/2", E: "[c4,e4,g4]/2",
})).s("gm_synth_strings_1").gain(0.12)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A@3 B C@4 ~@50 D E F G D E F G ~@16 D E F G D E F G D E F G D E F G A@3 B C@4 ~@16 D E F G D E F G D E F G D E F G
  ~@2
>`.pickRestart({
  A: "[a6@5 g6]/3", B: "e6", C: "[a6@5 g6@2 ~]/4", D: "~@4 f6 ~ f6@5 ~ g6 ~ g6 ~", E: "g6@3 ~ f6 ~ f6@4 ~@2 g6 ~ g6 ~",
  F: "g6@4 f6 ~ f6@4 ~@2 g6 ~ g6 ~", G: "g6@3 ~ f6 ~ a6@7 ~@3",
})).s("gm_string_ensemble_1").gain(0.18)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@62 A@2 B C A@2 B C ~@16 A@2 B C A@2 B C A@2 B C A@2 B C ~@24 A@2 B C A@2 B C A@2 B C A@2 B C ~@2
>`.pickRestart({
  A: "d5!6 f5 d5!3 f5 d5!5", B: "e5!6 g5 e5!3 g5 e5!5", C: "e5!6 a5 e5!3 a5 e5!5",
})).s("gm_lead_2_sawtooth").gain(0.17)

// drums · rim
const rim = s("rim").struct("<~@61 [~ x] ~@23 [~ x] ~@31 [~ x] ~@26>").gain(0.42)

// drums · kick
const kick = s("bd").struct("<~@28 A@9 B A@23 C A@15 B A@7 C A@16 C ~@14 C A@7 B A@16 C ~>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x!3 ~ x ~ x!2", C: "x",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<~@20 A@7 ~ A@33 ~ A@23 ~ A@31 ~ A@24 ~@2>".pickRestart({
  A: "x!4",
})).gain(0.12)

// drums · open hat
const open_hat = s("oh").struct("<~@20 A@7 ~ A@33 ~ A@23 ~ A@31 ~ A@24 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~@28 A@33 ~ A@23 ~ A@16 ~@16 A@24 ~@2>".pickRestart({
  A: "x!16",
})).gain(0.18)

// drums · crash
const crash = s("cr").struct(`<
  ~@28 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x",
})).gain(0.24)

// drums · shaker
const shaker = s("sh").struct("<~@20 A@41 ~ A@23 ~ A@31 ~ A@24 ~@2>".pickRestart({
  A: "x!16",
})).gain(0.18)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@61 [~ x] ~@23 [~ x] ~@31 [~ x] ~@26>").gain(0.61)

stack(
  bass, lead_2_sawtooth, piano, rock_organ, synth_strings_1, string_ensemble_1, lead_2_sawtooth_2, rim, kick, hihat,
  open_hat, tambourine, crash, shaker, woodblocks
)