Strudelify

Praise You

Fatboy Slim

KeyA♭ majorTempo112 bpm
0:00/0:00
// Praise You — Fatboy Slim
// 112 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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
const piano = note("<A@24 B@2 C@2 A@6 D@2 A@6 D@2 A@6 D@2 ~@8 A@6 D@2 ~@3 E A@6 ~@5 A@6 D@2 A@6 D@2 F ~>".pickRestart({
  A: "[[gb1,gb3,db4,gb4]@4 gb1@2 gb1@2 [db2,ab3,db4,ab4]@2 [db4,ab4] ~@5 ab2@4 ab2@4 ab2@4 ab2@4, ~@2 [gb3,db4,gb4]@2 ~ db2@2 ~ [ab1,ab3]@8, ~@5 ab3 ~ [eb4,ab4]@8 ~]/2", // Gb5 Db5 Gb5 Ab Ab5
  B: "[ab2,ab3]!2", C: "eb3!8, [ab2,ab3]!2",
  D: "[[gb3,db4,gb4]!2 [gb1,gb3,db4,gb4]!2 [db2,ab3,db4,ab4] [ab3,db4,ab4]!2 ~ ab2@2 ab2@2 ab2@2 ab2@2, gb1@2 ~@3 db2@3 [ab1,ab3]@8, ~@7 [eb4,ab4]@8 ~]/2", // Gb5 Db5 Ab Ab5
  E: "~@2 [ab2,ab3]!6", F: "[b1,db4,gb4]!3 ~",
})).s("gm_piano").gain(0.39)

// chords · piano · soft notes · Ab Bsus2
const piano_soft = note(`<
  ~@24
  [ab6!16]!4
  ~@40
  [[ab2,ab3]!8]!3
  [[ab2,ab3]!2 ~@6]
  ~@27
  [~@3 [b1,db4,gb4]]
  [[b1,db4,gb4]!4]
>`).s("gm_piano").gain(0.12)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@20 A@3 B ~@4 C@4 D@3 B C@4 D@3 B C@4 D@3 B ~@2 E F G@3 H C@4 D@3 B I@4 ~@7 J I@2 K C@4 D@3 B C@4 D@3 B L@2
>`.pickRestart({
  A: "[gb2@2 gb2@2 bb2@2 db3@2 db2@2 db2@2 gb2@2 ab1@4 ab1@2 c2@2 c2@2 db2@2 db2 d2 eb2@2 gb1@4 gb1@2 bb1@2 b1 c2 db2@2 f1 gb1 g1@2 ab1@2]/3",
  B: "~ ab1 ~ ab1 ~ ab1 ~ ab1", C: "[gb2!2 bb2 db3 db2!2 gb2 ab1@2 ab1 c2!2 db2!2 eb2!2]/2",
  D: "[gb2@2 gb2@2 bb2@2 db3@2 db2@2 db2@2 gb2@2 ab1@4 ab1@2 c2@2 c2@2 db2@2 db2@2 eb2@2 gb1@4 gb1@2 bb1@2 b1 c2 db2@2 f1 gb1 g1@2 ab1@2]/3",
  E: "~ eb2 g2 bb2 ab1!2 c2 db2", F: "~ eb2@2 eb2 ab1!2 c2 db2", G: "eb2!2 g2 bb2 ab1!2 c2 db2",
  H: "eb2 eb2@2 eb2 ab1!2 c2 db2", I: "[[ab2,ab3]!8 [ab2,ab3]!8, ab1]/2", J: "~ ab2!7, ab1", K: "[ab2,ab3]!8, ab1",
  L: "b1/2",
})).s("gm_fretless_bass").gain(0.8)

// bass · fretless bass · "Bass" · soft notes
const bass_soft = note("<~@23 A B@4 ~@40 C@4 ~@8 C@2 D ~@18>".pickRestart({
  A: "~@8 eb5!8", B: "[ab1,eb5]!16", C: "c6/2", D: "c6",
})).s("gm_fretless_bass").gain(0.4)

// other · steel drums · "Other Drum"
const steel_drums = note("<~@24 [~ ab2@2 ~@2 ab2@2 ~@2 ab2@2 ~@2 ab2@2 ~]!2 [ab2 ~@7] ~@74>")
  .s("gm_steel_drums").gain(0.8).pan(1)

// other · steel drums · "Other Drum" · soft notes
const steel_drums_soft = note("<~@26 [~ ab2!7] ~@74>").s("gm_steel_drums").gain(0.32).pan(1)

// other · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@28 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 ~@15 A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "~@2 ab3 ~ ab3 ~ ab3 ~@2 b3@2 ab3 gb3@3 g3", B: "ab3 ~ ab3 ~ ab3 ~ ab3 ~@2 b3@2 ab3 gb3@4",
  C: "gb3 ~ gb3 ~ gb3 ~ gb3 ~@2 b3@2 ab3 gb3@3 g3", D: "ab3 ~ ab3 ~ ab3 ~ ab3 ~@3 ab3@2 gb3 ab3@3",
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.3)

// chords · drawbar organ · "Organ" · Absus4 Cm Dbsus2 Db
const drawbar_organ = note("<~@52 [~@4 [ab4,db5,eb5]@4 [c5,eb5] ~ [db5,eb5]@4 [db5,f5]@2, ~@5 g4@3]!8 ~@41>")
  .s("gm_drawbar_organ").gain(0.14)

// drums · kick
const kick = s("bd").struct("<~@28 [x!2 ~ x!3 ~ x]!24 ~@4 [x!2 ~ x!3 ~ x]!12 ~@12 [x!16]!3 [x!2 ~ x!3 ~ x]!16 ~@2>")
  .gain(0.49)

// drums · snare
const snare = s("sd").struct("<~@28 [~ x ~ x]!24 ~@4 [~ x ~ x]!12 ~@15 [~ x ~ x]!16 ~@2>").gain(0.49)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A@2 B C D@24 ~@4 D@12 ~@15 D@16 ~@2>".pickRestart({
  A: "x!4", B: "x!8", C: "x!16", D: "x!2 ~ x!3 ~ x",
})).gain(0.49)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@16 A ~ A ~ A ~ A ~ B@2 ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ C@3 D A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A
  ~@4 E@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "x!2 ~@14", B: "x!4", C: "x ~@6 x!2 ~ x ~@4 x", D: "x ~ x ~ x ~@2 x!2 ~ x ~@4 x", E: "x!16",
})).gain(0.49)

// drums · crash
const crash = s("cr").struct("<~@52 [x!2]!3 [x!3 ~ x!2 ~@2] [x!2]!12 ~@15 [x!2]!16 ~@2>").gain(0.49)

// drums · ride bell
const ride_bell = s("rd").struct("<~@52 [~@3 x]!4 ~@45>").gain(0.49)

// drums · ride bell · soft notes
const ride_bell_soft = s("rd").struct("<~@52 [~ x ~@2]!4 ~@45>").gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16 A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B ~@4 A B A B A B
  ~@5 A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "~@2 x ~@2 x!2 ~@2 x ~ x ~@3 x", B: "x!3 ~@2 x!2 ~@2 x ~ x ~@3 x",
})).gain(0.49)

// drums · cowbell
const cowbell = s("cb").struct("<~@16 A@8 ~@4 A@24 ~@4 A@12 ~@4 A@6 ~@5 A@16 ~@2>".pickRestart({
  A: "~@3 x!3 ~ x!4 ~@2 x!2 ~",
})).gain(0.49)

// drums · bongos
const bongos = s("bongo:4").struct("<~@55 [~@3 x ~@5 x ~@6] ~@45>").gain(1.28)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@52 [x ~ x ~@5 x!2 ~ x ~@4]!4 ~@12 [x!8]!4 ~@29>").gain(1.97)

// drums · shaker
const shaker = s("sh").struct("<~@52 [~@4 x ~ x!2 ~@2 x ~ x ~@2 x]!4 ~@12 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!4 ~@29>")
  .gain(0.39)

stack(
  piano, piano_soft, bass, bass_soft, steel_drums, steel_drums_soft, electric_guitar_clean, drawbar_organ, kick, snare,
  low_tom, high_tom, crash, ride_bell, ride_bell_soft, tambourine, cowbell, bongos, cabasa, shaker
)

More by Fatboy Slim