Strudelify

Boys

Sabrina

KeyE minorTempo114 bpm
0:00/0:00
// Boys — Sabrina
// 114 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A B C D C D C D C D A B A B A B A B E F E F E F E G H I H J H I K F C D C D C D C D A B A B E F E F E F E G H I
  H J H I K F C D C D C D C D A B A B ~@16 H I H J H I K F A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "e2@2 e3@2 e2@2 e3@2 e2@2 e3 e2 ~ e2 e3@2", B: "c2@2 c3@2 c2@2 c3@2 d2@2 d3 d2 ~ d2 d3@2",
  C: "e2@2 e3@2 e2@2 e3@2 c2@2 c3 c2 ~ c2 c3@2", D: "d2@2 d3@2 d2@2 d3@2 d2@2 d3 d2 ~ d2 d3@2",
  E: "e2@2 e3@2 e2@2 e3 c2 ~ c2 c3@2 c2@2 c3@2", F: "d2@2 d3@2 d2@2 d3 d2 ~ d2 d3@2 d2@2 d3@2",
  G: "d2@2 d3@2 d2@2 d3 d2 ~ d2 d#3@2 d#2@2 d#3@2", H: "c2@2 c3@2 c2@2 c3 d2 ~ d2 d3@2 d2@2 d3@2",
  I: "g2@2 g3@2 g2@2 g3 e2 ~ e2 e3@2 e2@2 e3@2", J: "g2@2 g3@2 g2@2 g3 f2 ~ f2 f3@2 f2@2 f3@2",
  K: "c2@2 c3@2 c2@2 c3 c2 ~ c2 c3@2 c2@2 c3@2",
})).s("gm_acoustic_bass").gain(0.39)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~ A B A B C D C D C D C D A B A B A B A B C D C D C D C E B F B G B F H D C D C D C D C D A B A B C D C D C D C E B F
  B G B F H D C D C D C D C D A B A B C D C D C D C D C D C D C D C D B F B G B F H D A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~", // Em
  B: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // C D
  C: "~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // Em C
  D: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // D
  E: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d#4,f#4,b4] ~@3 [d#4,f#4,b4] ~", // D B
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~", // G Em
  G: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  H: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
})).s("gm_epiano1").gain(0.36)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@12 A B C B D B C B E ~@23 A B C B E ~@23 A B C B E ~@40>".pickRestart({
  A: "~@10 b5 ~ d6@2 e6 ~", B: "b5 ~@2 b5 ~@2 b5 ~@3 b5 ~ d6@2 e6 ~", C: "a5 ~@2 a5 ~@2 a5 ~@3 a5 ~ d6@2 e6 ~",
  D: "g6!2 f#6 ~ g6!2 f#6 ~@3 b5 ~ d6@2 e6 ~", E: "g6!2 f#6 ~ g6!2 f#6 ~@9",
})).s("gm_lead_1_square").gain(0.37)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B ~@2 A B A B A B C D C D C D E F G H I H I H J K A B A B ~@2 A B A B A B C D
  C D C D E F I H I H I H J K A B A B ~@8 A B A B A B A B C D C D C D E F L M N M L M N M L M N M L M N M
>`.pickRestart({
  A: "e4!4 g4 ~ e4 d4 e4!3 b4 ~ b4 ~@2", B: "e4!4 g4 ~ e4 d4 e4!3 a4 ~ a4 ~@2", C: "g4!3 ~ g4 ~ g4 a4 ~ a4 ~ a4!3 ~ a4",
  D: "g4!3 ~ g4 ~ g4!2 ~ g4 e4 d4 g4!2 e4 d4", E: "g4!3 ~ g4 ~ g4!2 ~ g4 ~ g4!4 ~", F: "a4!3 ~ a4 ~ a4!2 ~ a4 ~ a4!4 ~",
  G: "[e5,g5]@3 [e5,g5]@2 ~@3 [c5,e5]@2 ~ [c5,e5] ~@4", H: "[d5,f#5]@2 ~ [d5,f#5] ~@4 [d5,f#5]@2 ~ [d5,f#5] ~@4",
  I: "[e5,g5]@2 ~ [e5,g5]@2 ~@3 [c5,e5]@2 ~ [c5,e5] ~@4", J: "[e5,g5]@2 ~ [e5,g5] ~@4 [c5,e5]@2 ~ [c5,e5] ~@4",
  K: "[d5,f#5]@2 ~ [d5,f#5] ~@6 [d5,f#5] ~@2 [d5,f#5] ~@2", L: "[e4,g4]@2 ~ [e4,g4]@2 ~@3 [e4,g4]@2 ~ [e4,g4]@2 ~@3",
  M: "[e4,g4]@2 ~ [e4,g4]@2 ~@3 [f#4,a4]@2 ~ [f#4,a4]@2 ~@3", N: "[e4,g4]@2 ~ [e4,g4] ~@4 [e4,g4]@2 ~ [e4,g4] ~@4",
})).s("gm_electric_guitar_muted").gain(0.26)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@28 A B ~@2 C ~@2 D E ~@19 A B ~@2 C ~@2 D E ~@31 C ~@2 D E ~@16>".pickRestart({
  A: "~@2 d5@2 f#5@2 a5@2 b5@2 a5@2 g5@2 f#5 ~", B: "g5@3 ~@13", C: "~ d5 g5 ~ c6 b5 g5 ~", D: "~@5 c5 d5 a5",
  E: "g5@2 a5@2 f#5 ~ g5@2 f#5@2 e5@2 d5@2 e5 ~",
})).s("gm_synth_strings_1").gain(0.39)

// drums · kick
const kick = s("bd").struct("x!4").gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@13 A@3 B A@3 C A@7 D A@3 E A@3 F A@3 B A@3 G A@3 C A@7 D A@3 E A@3 F A@3 B A@7 C ~@16 A@3 E A@3 F A@3 B A@3 B A@3 B
  A@3 B
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~ x!2", C: "~@4 x ~@5 x ~@2 x ~@2", D: "~@4 x ~@5 x ~ x ~ x!2",
  E: "~@4 x ~@5 x ~ x!2 ~@2", F: "~@2 x!2 ~ x!3", G: "~@4 x ~@7 x ~ x!2",
})).gain(0.37)

// drums · clap
const clap = s("cp").struct("<A ~@36 B@8 ~@20 B@4 A@4 ~@4 A@8 ~@16 B@16>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!2 ~ x!2 ~",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@24 [~@3 x] ~@27 [~@3 x] ~@64>").gain(0.44)

// drums · hihat
const hihat = s("hh").struct(`<
  ~
  [x!16]!4
  ~@8
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!72
  ~@8
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!24
>`).gain(0.37)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@13
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!72
  ~@8
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!24
>`).gain(0.22)

// drums · high tom
const high_tom = s("ht").struct("<~@24 [~ x ~@2] ~@27 [~ x ~@2] ~@64>").gain(0.44)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@13 [x!16]!72 ~@8 [x!16]!24>").gain(0.44)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@24 [~ x] ~@27 [~ x] ~@64>").gain(2.83)

stack(
  bass, epiano1, lead_1_square, electric_guitar_muted, synth_strings_1, kick, snare, clap, low_tom, hihat, hihat_soft,
  high_tom, crash, tambourine, agogo_bells
)