Strudelify

Bring It All to Me

Blaque

KeyC majorTempo89 bpm
0:00/0:00
// Bring It All to Me — Blaque
// 89 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A
  C A B A C A B A C A B A C A B A C A B A C
>`.pickRestart({
  A: "[g2,f3,a#3,d4] ~@2 [f2,a3,c4] [g2,f3,a#3,d4] ~@3, ~@6 f3 ~@9", B: "[c3,g3,c4,e4]@15 ~",
  C: "a3@12 ~ a#3 g3 f3, [d3,d4,f#4], ~@12 a3@3 ~", // D
})).s("gm_piano").gain(0.53)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<A B C D A B C D ~@72>".pickRestart({
  A: "~@4 g4@2 ~@6 g4@3 [d4,f4]", B: "c4@7 ~", C: "c4@2 d4@2 g4@2 ~@6 g4@3 ~", D: "g4@13 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.67)

// chords · synth strings 1
const synth_strings_1 = note("<~@9 A ~ B ~ A ~ B ~@9 A ~ B ~ A ~ B ~@48>".pickRestart({
  A: "[g3,c4,e4]", B: "[a3,d4,f#4]",
})).s("gm_synth_strings_1").gain(0.48)

// bass · piano
const bass = note(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A
  C A B A C A B A C A B A C A B A C A B A C
>`.pickRestart({
  A: "g1 ~@2 f1 g1 ~@3", B: "c2", C: "d2",
})).s("gm_piano").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B C B A B A B A B A B A B A B A B C B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x ~@5 x ~ x ~@2 x ~@2 x ~", B: "x ~@2 x!3 ~ x", C: "x ~@6 x",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!8 [~@3 x] [~ x ~ x]!15 [~@3 x] [~ x ~ x]!55>").gain(0.51)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@2 x!2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "~@5 x ~ x",
})).gain(0.41)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("~@2 x ~@7 x!2 ~@4").gain(2.34)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("~@3 x ~@12").gain(1.56)

// drums · shaker
const shaker = s("sh").struct(`<
  A B A B A B A B C B A B A B A B A B A B A B A B C B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~", B: "x!3 ~ x ~ x ~ x!8", C: "x",
})).gain(0.36)

// drums · triangle
const triangle = s("triangles:35").struct("~@3 x ~@3 x").gain(4.01)

stack(
  piano, lead_2_sawtooth, synth_strings_1, bass, kick, snare, hihat, open_hat, crash, cabasa, cabasa_soft, shaker,
  triangle
)