Strudelify

I Love You... Stop

Red 5

KeyE♭ minorTempo133 bpm
0:00/0:00
// I Love You... Stop — Red 5
// 133 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "P2-Acoust" acoustic bass (copy of ch 3 "P3-Syn Ba" synth bass 1)
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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.

// bass · synth bass 1 · "P3-Syn Ba"
const bass = note("<~ A@8 ~@32 B@4 C@4 B@4 C@4 B@4 C@4 B@12 C@4 B@4 C@4 ~@24 B@4 C@4 B@4 C@4 ~>".pickRestart({
  A: "~ gb1 ~ gb1 ~ gb1 ~ gb1", B: "~ gb2 ~ gb2 ~ gb2 ~ gb2", C: "~ eb2 ~ eb2 ~ eb2 ~ eb2",
})).s("gm_synth_bass_1").gain(0.31)

// chords · piano · "P4-Electr"
const piano = note("<~@73 A B A B C D C D A B A B C D C D ~@41>".pickRestart({
  A: "[gb4,bb4,db5] ~ [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5]!2 ~ [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~@2", // Gb
  B: "[gb4,bb4,db5] ~ [gb4,bb4,db5] ~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5]!2 ~ [gb4,bb4,db5] ~@2 [gb4,bb4,b4] ~@2", // Gb Bmaj7
  C: "[eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~ [eb4,gb4,bb4]!2 ~ [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~@2", // Ebm
  D: "[eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~ [eb4,gb4,bb4]!2 ~ [eb4,gb4,bb4] ~@2 [eb4,gb4,ab4] ~@2", // Ebm Ab7
})).s("gm_piano").gain(0.22)

// chords · pizzicato strings · "P8-Pizzic"
const pizzicato_strings = note(`<
  ~@9 A B A C D E D E F G F H I J I K F G F H I J I K F G F H I J I K F G F H I J I K F G F H I J I K ~@32 A B A C D E D
  E F G F H I J I K F G F H I J I K F G F H I J I K F G F H I J I K ~
>`.pickRestart({
  A: "[gb3,db5] ~ [gb3,db5] ~ [gb3,db5] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~", // Gb5 Gb
  B: "[gb3,ab4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,ab4] ~", // Gbsus2 Gb Gbsus2
  C: "[gb3,ab4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ gb3 ~", // Gbsus2 Gb
  D: "[eb3,bb4] ~ [eb3,bb4] ~ [eb3,bb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~", // Eb5 Ab5
  E: "[eb3,gb4] ~ [eb3,gb4] ~ [eb3,gb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,gb4] ~", // Ebm Ab5 Ebm
  F: "[gb4,db5,db6] ~ [gb4,db5,db6] ~ [gb4,db5,db6] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~", // Gb5 Gb
  G: "[gb4,ab4,ab5] ~ [gb4,ab4,ab5] ~ [gb4,ab4,ab5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,ab4,ab5] ~", // Gbsus2 Gb Gbsus2
  H: "[gb4,ab4,ab5] ~ [gb4,ab4,ab5] [ab4,ab5] [gb4,ab4,ab5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,bb4,bb5] ~ [gb4,ab5] ~", // Gbsus2 Ab Gbsus2 Gb Gbsus2
  I: "[eb4,bb4,bb5] ~ [eb4,bb4,bb5] ~ [eb4,bb4,bb5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~", // Eb5 Ab5
  J: "[eb4,gb4,gb5] ~ [eb4,gb4,gb5] ~ [eb4,gb4,gb5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,db5,db6] ~", // Ebm Ab5 Eb7
  K: "[eb4,gb4,gb5] ~ [eb4,gb4,gb5] [gb4,gb5] [eb4,gb4,gb5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,ab4,ab5] ~ [eb4,gb5] ~", // Ebm Gb Ebm Ab5 Ebm
})).s("gm_pizzicato_strings").gain(0.26)

// other · lead 8 bass lead · "P9-Bass &"
const lead_8_bass_lead = note(`<
  ~@33 A B A B C D C D A B A B C D C D A B A B C D C D ~@48 A B A B C D C D A B A B C D C D A B A B C D C D ~
>`.pickRestart({
  A: "~@2 f6 db6 ab5 ~ f6 db6 ab5 ~ f6 db6 ab5 ~ f6 db6", B: "ab5 ~ f6 db6 ab5 ~ f6 db6 ab5 ~@7",
  C: "~@2 f6 db6 bb5 ~ f6 db6 bb5 ~ f6 db6 bb5 ~ f6 db6", D: "bb5 ~ f6 db6 bb5 ~ f6 db6 bb5 ~@7",
})).s("gm_lead_8_bass_lead").gain(0.13)

// other · lead 8 bass lead · "P9-Bass &" · soft notes
const lead_8_bass_lead_soft = note(`<
  ~@34 A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~@49 A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~ A ~ A ~ B ~ B ~
>`.pickRestart({
  A: "~@10 f6 db6 ab5 ~@3", B: "~@10 f6 db6 bb5 ~@3",
})).s("gm_lead_8_bass_lead").gain(0.08)

// chords · string ensemble 1 · "P11-Strin"
const string_ensemble_1 = note(`<
  ~@9 A@8 B C B D E F E G B C B D E F E G B C B D E F E G B C B D E F E G B C B D E F E G ~@32 H I H J K L K L B C B D E
  F E G B C B D E F E G B C B D E F E G B C B D E F E G ~
>`.pickRestart({
  A: "[[gb3,db5] ~ [gb3,db5] ~ [gb3,db5] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,ab4] ~ [gb3,db5] ~ [gb3,db5] ~ [gb3,db5] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ gb3 ~ [eb3,bb4] ~ [eb3,bb4] ~ [eb3,bb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,gb4] ~ [eb3,gb4] ~ [eb3,gb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,gb4] ~ [eb3,bb4] ~ [eb3,bb4] ~ [eb3,bb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,gb4] ~ [eb3,gb4] ~ [eb3,gb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,gb4] ~, gb6]/8", // Gb5 Gb Gbsus2 Gb Gbsus2 Gb5 Gb Gbsus2 …
  B: "[gb3,db5,db6] ~ [gb3,db5,db6] ~ [gb3,db5,db6] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~", // Gb5 Gb
  C: "[gb3,ab4,ab5] ~ [gb3,ab4,ab5] ~ [gb3,ab4,ab5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,ab4,ab5] ~", // Gbsus2 Gb Gbsus2
  D: "[gb3,ab4,ab5] ~ [gb3,ab4,ab5] [ab4,ab5] [gb3,ab4,ab5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,bb4,bb5] ~ [gb3,ab4,ab5] ~", // Gbsus2 Ab Gbsus2 Gb Gbsus2
  E: "[eb3,bb4,bb5] ~ [eb3,bb4,bb5] ~ [eb3,bb4,bb5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~", // Eb5 Ab5
  F: "[eb3,gb4,gb5] ~ [eb3,gb4,gb5] ~ [eb3,gb4,gb5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,db5,db6] ~", // Ebm Ab5 Eb7
  G: "[eb3,gb4,gb5] ~ [eb3,gb4,gb5] [gb4,gb5] [eb3,gb4,gb5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,ab4,ab5] ~ [eb3,gb5] ~", // Ebm Gb Ebm Ab5 Ebm
  H: "[gb3,db5] ~ [gb3,db5] ~ [gb3,db5] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~", // Gb5 Gb
  I: "[gb3,ab4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,ab4] ~", // Gbsus2 Gb Gbsus2
  J: "[gb3,ab4] ~ [gb3,ab4] ~ [gb3,ab4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ [gb3,bb4] ~ gb3 ~", // Gbsus2 Gb
  K: "[eb3,bb4] ~ [eb3,bb4] ~ [eb3,bb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~", // Eb5 Ab5
  L: "[eb3,gb4] ~ [eb3,gb4] ~ [eb3,gb4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,ab4] ~ [eb3,gb4] ~", // Ebm Ab5 Ebm
})).s("gm_string_ensemble_1").gain(0.13)

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B C B C D ~@7 D ~@14 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 B C B C B C B C B
  C B C B C B C E@16 ~@8 B C B C B C B C B C B C B C B C ~
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~@3", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x", E: "x ~@5 x ~@3 x ~@2 x ~@2",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A B@3 ~@28 A B@3 ~@28 A B@3 ~@12 A B@3 ~@4 C@12 ~@4 A B@3 ~@12 A B@3 ~
>`.pickRestart({
  A: "~@7 x!9", B: "x!16", C: "~ x ~ x",
})).gain(0.19)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@5 A ~@31 A ~@31 A ~@15 A ~@23 A ~@15 A ~@4>".pickRestart({
  A: "x!7 ~@9",
})).gain(0.09)

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

// drums · hihat
const hihat = s("hh").struct("<~ A@8 ~@8 B ~@23 A@48 ~@8 C@16 A@16 ~>".pickRestart({
  A: "x!4", B: "x", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~ x",
})).gain(0.23)

// drums · open hat
const open_hat = s("oh").struct("<~ A@8 ~@7 B ~@24 A@48 ~@24 A@16 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@7 x",
})).gain(0.23)

// drums · crash
const crash = s("cr").struct(`<
  A B ~@7 B ~@7 B ~@14 A ~@8 B ~@7 B ~@7 B ~@7 B ~@7 B ~@15 B ~@7 C D C ~ C ~ C ~ B ~ B ~ E@2 F G B ~@15 B
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~@3", B: "x", C: "x ~@2 x ~@4", D: "~@3 x", E: "x!2", F: "x ~@3 x ~@2 x ~@4 x ~@3",
  G: "x ~ x ~ x!4",
})).gain(0.28)

// drums · bongos
const bongos = s("bongo:4").struct("<~ [~ x ~@3 x ~@2]!8 ~@24 [~ x ~@3 x ~@2]!56 ~@24 [~ x ~@3 x ~@2]!16 ~>").gain(0.86)

// drums · congas
const congas = s("conga:18").struct("<~ [~@6 x!2 ~@6 x ~]!8 ~@24 [~@6 x!2 ~@6 x ~]!56 ~@24 [~@6 x!2 ~@6 x ~]!16 ~>")
  .gain(1.05)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!2 ~@2 x!2 ~@2]!8 ~@32 [x!2 ~@2 x!2 ~@2]!48 ~@24 [x!2 ~@2 x!2 ~@2]!16 ~>")
  .gain(1.18)

// drums · shaker
const shaker = s("sh").struct(`<
  ~
  [~ x ~ x ~@5 x ~ x ~@4]!8
  ~@32
  [~ x ~ x ~@5 x ~ x ~@4]!48
  ~@24
  [~ x ~ x ~@5 x ~ x ~@4]!16
  ~
>`).gain(0.23)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct(`<
  ~@57 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@42
>`.pickRestart({
  A: "~@2 x!3 ~ x ~@9",
})).gain(0.41)

stack(
  bass, piano, pizzicato_strings, lead_8_bass_lead, lead_8_bass_lead_soft, string_ensemble_1, kick, snare, snare_soft,
  clap, hihat, open_hat, crash, bongos, congas, cabasa, shaker, woodblocks
)