Strudelify

Don't Go

Yazoo

KeyB♭ minorTempo128 bpm
0:00/0:00
// Don't Go — Yazoo
// 128 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "ORGAN 1" drawbar organ (copy of ch 4 "BRASS 1" brass section); ch 13 "TINKLEBELL" tinkle bell (copy of ch 5 "POLYSYNTH" pad poly); ch 12 "SYNBRASS 2" synth brass 2 (copy of ch 7 "SYNBRASS 1" synth brass 1); ch 9 "PIZZICATO" pizzicato strings (copy of ch 8 "HALO PAD" pad halo)
// note: Full arrangement: all 106 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.

// other · pad metallic · "METAL PAD"
const pad_metallic = note("<~@8 A B C D E F G H ~@7 A B C D E F G H ~@27 A B C D E F G H ~@40>".pickRestart({
  A: "bb4!2 ~@2 c5 bb4!2 db5 bb4 eb5 bb4!2 f5 bb4 eb5 db5",
  B: "bb4!2 c5 bb4 db5 bb4!2 eb5 bb4 f5 bb4!2 ~ bb4 db5 eb5, ~@6 eb5 ~",
  C: "ab4 ~ ab4!2 bb4 ab4!2 c5 ab4 db5 ab4!2 eb5 ab4 db5 c5", D: "bb4 ~ bb4!2 c5 bb4!2 c5 bb4 db5 bb4!2 eb5 bb4 db5 ~",
  E: "bb4 ~ bb4!2 ~ bb4 ~ bb4 ~ bb4 ~ bb4 bb4@2 c5 db5", F: "bb4!2 bb4@2 c5 ~ bb4 f5 bb4 [e5,f5] bb4!2 f5@2 c5 bb4",
  G: "ab4 ~ ab4!5 bb4 ab4 c5 ab4!2 db5 c5 bb4 [b4,c5]", H: "~@2 bb4!4 ~ bb4 ~ bb4 ~ bb4 bb4@2 ab4 bb4",
})).s("gm_pad_metallic").gain(0.32)

// other · pad metallic · "METAL PAD" · soft notes
const pad_metallic_soft = note("<~@8 A ~@2 B ~ C ~ D ~@7 A ~@2 B ~ C ~ D ~@27 A ~@2 B ~ C ~ D ~@40>".pickRestart({
  A: "~@2 bb4 ~@13", B: "b4 ~@14 db5", C: "~@5 bb4 ~@8 bb4 ~", D: "bb4 ~@15",
})).s("gm_pad_metallic").gain(0.24)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 A B C D E F G H I J K L M N O A B C D E F G H I J K L M N O A B C D A B C D G@4 A B C D M@4 A B C D E F G H I J K
  L M N O A B C D N O A B C D A B C D G@4 A B C D M@4 ~@4 A B C D ~@3
>`.pickRestart({
  A: "bb2 ~@5 bb2!2 ~ bb2!2 ~@3 bb2!2", B: "~@2 bb2 ~ bb2 ~ bb2 ab2 ~ ab2 ~ ab2 ~@2 bb2!2",
  C: "~@4 bb2 ~ bb2!2 ~ bb2 ab2@2 bb2 ~@3", D: "bb2 ~ bb2 ~ bb2 ~ bb2!2 ~ bb2 ab2@2 bb2@2 ~@2",
  E: "bb2 ~@3 bb2 ~ bb2@4 ab2@2 bb2 ~@3", F: "bb2 ~ bb2 ~ bb2@2 [ab2,bb2] ~@5 bb2@2 db3 bb2",
  G: "ab2 ~@3 ab2 ~@2 eb2@3 f2@2 ab2@2 f2 ab2", H: "[ab2,bb2] ~@3 bb2@2 ab2 bb2 ~@8",
  I: "bb2 ~@3 bb2 ~@2 bb2@2 bb2@2 ~@3 bb2 ab2", J: "bb2 ~@3 bb2 ~@2 bb2@3 db3@2 bb2 ~ db3 bb2",
  K: "ab2 ~@5 ab2!2 ~ ab2 eb2@2 f2@2 ab2@2", L: "bb2 ~@3 bb2 ~@2 bb2 ~@6 bb2!2",
  M: "f2 ~ f2 ~ f2 ~ f2 f2@3 eb2@2 c2@2 ~ c2, ~@7 eb2", N: "bb2 ~@3 bb2@2 ab2 [f2,gb2] ~@4 f2@2 g2@2",
  O: "ab2 ~@3 ab2@2 g2 eb2 ~@4 eb2@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.48)

// other · pad poly · "POLYSYNTH"
const pad_poly = note("<~@38 A@2 B@2 C D E@2 F G H I ~@29 A@2 B@2 C D E@2 F G H I ~@15>".pickRestart({
  A: "[~@11 bb5 ~@2 db6 ~@2 f6@2 ~@5 bb6 ~ db6 bb5 bb6 ~ db6 bb5, ~@8 bb6@2 db6@2 ~ f6@2 bb5@2 ~@15, ~@9 f6@2 ~ bb6@2 ~@2 db6@2 ~@7 f6@2 ~@2 f6@2 ~]/2",
  B: "[db6 f6 ~@6 bb6 ~@2 bb5 bb6 ~ db6 ~@2 f6@2 ~@6 f6 ~ bb5 f6@2 db6 bb5, ~@9 f6@2 ~@2 f6@2 ~ db6@2 ~@6 bb6@2 ~@2 bb6 ~@3, ~@10 db6@2 ~@3 bb5@2 ~@9 db6@2 ~@4]/2",
  C: "ab6 ~ c6 ab5 eb6@2 c6 ab5 ~ eb6 ~@6, ~ eb6@2 ab6@2 ~@3 c6@2 ~@6",
  D: "~@6 c6 ~@2 eb6 ~@6, ab6 c6 ab6 ~ c6 ~@3, ~ eb6@2 ab5@2 eb6@2 ab5@2 ~@7",
  E: "~@2 c6 ab5 ab6 ~ c6 ~@2 eb6@2 ~@5, ab6 ~@3 c6 ~@3, ~ eb6@2 ~@2 eb6@2 ab5@2 ~@7",
  F: "~@2 db6 bb5 ~@2 db6 bb5 db6 f6 ~@6, bb6 ~ bb6 ~@5, ~ f6@2 ~@2 f6@2 ~@9",
  G: "~@6 db6 bb5 db6 f6 ~@6, bb6 db6 bb6 ~@5, ~ f6@2 bb5@2 f6@2 ~@9",
  H: "bb6 ~ db6 bb5 ~@2 db6 bb5 ~ f6 ~@6, ~ f6@2 ~ bb6@2 ~@10, ~@5 f6@2 ~ db6@2 ~@6",
  I: "bb6 ~@5 db6 bb5 db6 f6 ~@6, ~ f6@2 bb5@2 f6@2 ~@9, ~ db6 bb6 ~@5",
})).s("gm_pad_poly").gain(0.24)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@2 A@2 ~@34 B@4 ~@37 B@4 ~@14 A@2 ~@4 C ~@2>".pickRestart({
  A: "[bb2,bb3]/2", B: "[[bb1,bb2]@63 ~]/4", C: "[bb1,bb2,bb3,bb4] ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.32)

// other · pad halo · "HALO PAD"
const pad_halo = note("<~@17 A B C@4 ~@9 A B C@4 ~@4 D@4 E@4 ~@17 A B C@4 A B C@4 F@4 D@4 E@4 ~@15>".pickRestart({
  A: "[bb4,bb5] [db5,db6]", B: "[eb5,eb6] [f5,f6]", C: "[[bb5,bb6]@31 ~]/4", D: "ab5/4", E: "[bb5@63 ~]/4", F: "bb5/4",
})).s("gm_pad_halo").gain(0.24)

// other · marimba
const marimba = note("<~@8 A B C D E F G H ~@7 A B C D E F G H ~@27 A B C D E F G H ~@40>".pickRestart({
  A: "bb3!3 ~ c4 bb3!2 db4 bb3 eb4 bb3!2 f4 bb3 eb4 db4",
  B: "bb3!2 c4 bb3 db4 bb3!2 eb4 bb3 f4 bb3!2 ~ bb3 db4 eb4, ~@6 eb4 ~",
  C: "ab3 ~ ab3!2 bb3 ab3!2 c4 ab3 db4 ab3!2 eb4 ab3 db4 c4",
  D: "[bb3,b3] ~ bb3!2 c4 bb3!2 c4 bb3 db4 bb3!2 eb4 bb3 db4!2", E: "bb3 ~ bb3!2 ~ bb3 ~ bb3 ~ bb3 ~ bb3 bb3@2 c4 db4",
  F: "bb3!2 bb3@2 c4 bb3!2 f4 bb3 [e4,f4] bb3!2 f4@2 [bb3,c4] bb3", // Fmaj7 Bbsus2
  G: "ab3 ~ ab3!5 bb3 ab3 c4 ab3!2 db4 c4 bb3 [b3,c4]", H: "bb3 ~ bb3!4 ~ bb3 ~ bb3 ~ bb3 bb3@2 ab3 bb3",
})).s("gm_marimba").gain(0.4)

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

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

// drums · clap
const clap = s("cp").struct("<~@5 A B C ~@5 D ~ E ~@9 B@2 ~ A ~@34 D ~ E ~@40>".pickRestart({
  A: "~@9 x ~ x!2 ~ x!2", B: "~@14 x!2", C: "~@9 x ~ x ~@4", D: "~@15 x", E: "~@11 x ~@2 x!2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!16]!91 ~@4 [x!16]!4 ~@3>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@10 B ~@3 C ~@7 B ~@2 B ~@3 D ~@7 E ~@3 F ~@7 G ~@36 H ~@3 G ~@7>".pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@11 x ~ x!3", D: "~@4 x ~@6 x!2 ~ x!2", E: "~@2 x ~ x ~ x!2 ~ x ~ x ~@3 x",
  F: "~@2 x ~@11 x!2", G: "~@12 x ~@2 x", H: "~@3 x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@10 B ~@3 C ~@7 B ~ D B ~@3 E ~@7 F ~@3 G ~@7 H ~@36 I ~@3 H ~@7>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@7 x ~ x ~@6", D: "x!3 ~@5", E: "~@2 x ~ x ~@2 x ~ x ~@6", F: "~@2 x ~@10 x!2 ~",
  G: "~@2 x ~ x ~@4 x ~ x!2 ~@3", H: "~@5 x!3", I: "~@9 x ~@6",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@4 B ~@7 B ~@2 B ~@3 B ~@7 B ~@2 B ~@3 B ~@3 B ~@3 B ~@11 B ~@7 B ~@12 B ~@15 B ~@3 B ~@3 B ~@2
>`.pickRestart({
  A: "~@15 x", B: "x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@18 A ~@3 B ~@10 A ~@3 C ~@7 D ~@3 E ~@7 F ~@10 A ~@5 A ~@19 F ~@3 F ~@7
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x ~ x ~@4", D: "~@3 x", E: "~@7 x ~@8", F: "~@9 x ~@6",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@13 ~@6 A@9 ~@6 A@29 ~@12 A@16 ~@4 A@4 ~@3>".pickRestart({
  A: "~@3 x",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 A@13 ~@6 A@9 ~@6 A@29 ~@12 A@16 ~@4 A@4 ~@3>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
})).gain(2.03)

stack(
  pad_metallic, pad_metallic_soft, bass, pad_poly, acoustic_guitar_steel, pad_halo, marimba, kick, snare, clap, hihat,
  low_tom, mid_tom, crash, high_tom, tambourine, cabasa
)

More by Yazoo