Strudelify

Saturday Night

Whigfield

KeyB majorTempo130 bpm
0:00/0:00
// Saturday Night — Whigfield
// 130 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 164 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 2"
const piano = note(`<
  ~@42 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  C@2
>`.pickRestart({
  A: "[f#4,b4,d#5]@2 ~ [f#4,b4,d#5]@2 ~ [f#4,b4,d#5]@2 ~ [f#4,b4,d#5]@2 ~ [f#4,b4,e5]@2 [f#4,b4,d#5]@2", // B Esus2 B
  B: "[f#4,b4,c#5]@2 ~ [f#4,b4,c#5]@2 ~ [f#4,b4,c#5]@2 ~ [f#4,b4,c#5]@2 ~ [f#4,b4,e5]@2 [f#4,b4,d#5]@2", // F#sus4 Esus2 B
  C: "[[f#4,b4,d#5]@31 ~]/2", // B
})).s("gm_piano").gain(0.45)

// bass · synth bass 2 · "SynthBass"
const bass = note(`<
  ~@2 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E@2
>`.pickRestart({
  A: "b1 ~@2 b1 ~@2 b1 ~ g#2 ~@2 g#2 ~@2 g#2 ~", B: "f#2 ~@2 f#2 ~@2 f#2 ~@3 g#2 ~ b1 ~ c2 ~",
  C: "c#2 ~@2 c#2 ~@2 c#2 ~ b2 ~@2 b2 ~@2 b2 ~", D: "f#2 ~@2 f#2 ~@2 f#2 ~@3 f#2 ~ f#2 ~ g#2 ~", E: "[b1@31 ~]/2",
})).s("gm_synth_bass_2").gain(0.5)

// chords · percussive organ · "Organ 1"
const percussive_organ = note(`<
  ~@66 A B C@2 D E C@2 D E C@2 D E C F A E C@2 A E C F D B C F D E C@2 D B C@2 D B C@2 D E C@2 A B C@2 ~@8 D B C@2 D E
  C@2 A B C F D E C@2 D B C@2 D B C@2 D B C F D B C F A E C F D E C F G@2
>`.pickRestart({
  A: "~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4] ~@2 [f#4,b4,e5] ~, ~@11 d#5@2 ~@3", // B B5 Esus2
  B: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,e5] ~, ~@4 d#5 ~@3", // B B5 B Esus2
  C: "[f#4,b4,d#5] ~ [f#4,b4,c#5] ~@2 [f#4,b4,c#5] ~@2 [f#4,b4,c#5]@2 ~ [f#4,b4,c#5] ~@2 [f#4,b4,e5] ~", // B F#sus4 Esus2
  D: "~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,d#5]@2 ~ [f#4,b4] ~@2 [f#4,b4,e5] ~, ~@8 b4 ~@2 d#5@2 ~@3", // B D#m B5 Esus2
  E: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,e5] ~", // B Esus2
  F: "[f#4,b4,d#5] ~ [f#4,b4,c#5] ~@2 [f#4,b4,c#5] ~@2 [b4,c#5]@2 ~ [f#4,b4,c#5] ~@2 [f#4,b4,e5] ~, ~@8 f#4 ~@7", // B F#sus4 Bsus2 F#sus4 Esus2
  G: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~", // B
})).s("gm_percussive_organ").gain(0.3).pan(0.2)

// chords · percussive organ · "Organ 2"
const percussive_organ_2 = note(`<
  ~@66 A B C@2 A B C@2 A B C@2 A B C@2 A D C@2 A D C@2 A B C@2 A D C@2 A B C@2 A D C@2 A D C@2 A B C@2 ~@8 A B C@2 A D
  C@2 A B C@2 A B C@2 A D C@2 A B C@2 A B C@2 A D C@2 A D C@2 A B C@2 ~@2
>`.pickRestart({
  A: "[f#4,d#5]@2 ~ [f#4,b4,d#5] ~@2 [f#4,b4,d#5]@2 ~ [f#4,b4,d#5]@2 ~ [f#4,b4,e5] ~ [f#4,b4,d#5] ~, b4 ~@15", // D#m B Esus2 B
  B: "[f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5]@2 ~ [f#4,b4] ~@2 [f#4,b4,e5] ~ [f#4,b4,d#5] ~, ~@9 d#5@2 ~@5", // B B5 Esus2 B
  C: "[f#4,b4,c#5] ~@2 [f#4,b4,c#5] ~@2 [f#4,b4,c#5]@2 ~ [f#4,b4] ~@2 [f#4,b4,e5] ~ [f#4,b4,d#5] ~, ~@9 c#5@2 ~@5", // F#sus4 B5 Esus2 B
  D: "[f#4,b4,d#5] ~@2 [f#4,b4,d#5] ~@2 [f#4,b4,d#5]@2 ~ [f#4,b4,d#5] ~@2 [f#4,b4,e5] ~ [f#4,b4,d#5] ~", // B Esus2 B
})).s("gm_percussive_organ").gain(0.3).pan(0.8)

// bass · acoustic guitar nylon · "Electroni"
const bass_2 = note("<~@26 A@8 B@16 ~@8 B@8 A@16 B@8 ~@8 B@16 ~@16 B@32 C ~>".pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 ~", B: "c2@2 ~@2 c2@2 ~ d2 c2@2 ~@2 c2@2 ~@2", C: "c2 ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.5)

// other · synth drum · "Synth Dru"
const synth_drum = note("<~@25 A ~@15 A ~@39 A ~@47 A ~@34>".pickRestart({
  A: "~@10 c6!2 c6@2 ~@2",
})).s("gm_synth_drum").gain(0.5)

// other · shamisen
const shamisen = note(`<
  [b2 ~ b2 ~ b2 ~ b2 ~]
  [b2 ~ b2 ~ b2 ~@3]
  [b2 ~ b2 ~ b2 ~ b2 ~]!88
  ~@8
  [b2 ~ b2 ~ b2 ~ b2 ~]!24
  ~@8
  [b2 ~ b2 ~ b2 ~ b2 ~]!34
>`).s("gm_shamisen").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@114 [x ~ x ~@5 x ~ x!2 ~@4]!8 ~@42>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@26 A@24 ~@8 A@32 ~@8 A@16 B@8 ~@8 A@32 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~ x ~@2 x ~@2 x",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!88 ~@8 [~ x ~ x]!24 ~@8 [~ x ~ x]!32 ~@2>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@24 B C B C B C B C B C B C B C B C B C B C B C B C A@8 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C D ~@7 B C B C B C B C B C B C B C B C A@8 D ~@7 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  D ~
>`.pickRestart({
  A: "x!4", B: "x!3 ~ x ~ x!2", C: "x ~ x ~ x!3 ~", D: "x",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A@24 B C B C B C B C B C B C B C B C B C B C B C B C A@8 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C ~@8 B C B C B C B C B C B C B C B C A@8 ~@8 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@2 x ~@3 x ~@4 x", C: "~@2 x ~@3 x ~@4 x ~@2 x ~",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@23 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@15 A ~@31 A ~@33>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@98 [x!16]!24 ~@8 [x!16]!11 [x!11 ~ x!4] [x!16]!20 x ~>").gain(0.3)

stack(
  piano, bass, percussive_organ, percussive_organ_2, bass_2, synth_drum, shamisen, kick, snare, clap, hihat, open_hat,
  crash, tambourine
)

More by Whigfield