Strudelify

let me down slowly

Alec Benjamin ft. Alessia Cara

KeyE majorTempo75 bpm
0:00/0:00
// let me down slowly — Alec Benjamin ft. Alessia Cara
// 75 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5944307; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(75/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(`<
  ~@2 A B C D C D C D E F E F E F E F E G E G E G E F H I J K H I J K L M L M L M L N A B A B A B A B ~@2
>`.pickRestart({
  A: "[b3,c#4,e4,g#4] [b3,c#4,d#4,f#4]", B: "[b3,c#4,d#4,g#4] [a3,c#4,e4,g#4]", C: "[c#3,c#4,e4,g#4] [b2,b3,d#4,f#4]",
  D: "[g#2,b3,d#4,g#4]@4 a2@3 b2, ~ [c#4,e4,a4]", E: "[c#4,e4,g#4]!2 [b3,d#4,f#4]!2, c#3 b2",
  F: "[b3,d#4,g#4]!2 [c#4,e4,a4]!2, g#2 a2", // G#m A
  G: "[b3,d#4,g#4]@2 [b3,d#4,g#4]@2 [c#4,e4,a4]@2 ~ b2, g#2@4 a2@3 ~, ~@3 [c#4,e4,a4]", // G#m A
  H: "[c#2,c#4,e4,g#4]@4 ~ e2 d#2 c#2 b1@2 b1@2 [b3,d#4,f#4]@4, ~ [c#4,e4,g#4] [b3,d#4,f#4] ~", // C#m B C#m B
  I: "[g#1,b3,d#4,g#4]@4 ~ g#1 b1 g#1 a1@2 a1@2 ~ e1 a1 b1, ~ [b3,d#4,g#4] [c#4,e4,a4]!2", // G#m A
  J: "[c#2,c#4,e4,g#4]@4 ~@2 e2 c#2 b1@2 b1@2 ~@2 c#2 b1, ~ [c#4,e4,g#4] [b3,d#4,f#4]!2", // C#m B
  K: "[g#1,b3,d#4,g#4]@4 [b3,d#4,g#4]@3 g#1 a1@2 a1@2 ~ e1 a1 b1, ~@2 [c#4,e4,a4]!2", L: "[c#3,c#4,e4,g#4]@15 ~",
  M: "[g#2,b3,d#4,g#4]@15 ~", // G#m
  N: "[b3,d#4,g#4]@4 [b3,d#4,g#4]@3 g#1 a1@2 a1@2 ~ e1 a1 b1, g#1@7 ~ [c#4,e4,a4]@4 [c#4,e4,a4]@4", // G#m A
})).s("gm_piano").gain(0.24)

// other · acoustic guitar nylon · "Guitare classique (Tablature)"
const acoustic_guitar_nylon = note(`<
  A B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D
>`.pickRestart({
  A: "e4@2 c#4@2 e4 g#4 e4@2 d#4@2 b3@2 d#4@2 b3@2, c#3 b2", B: "d#4@2 b3@2 d#4 e4 f#4@2 e4@2 c#4@2 e4@2 c#4@2, g#2 a2",
  C: "[c#3,e4]@2 c#4@2 e4 g#4 e4@2 [b2,d#4]@2 b3@2 d#4@2 b3@2", // C#m B
  D: "[g#2,d#4]@2 b3@2 d#4 e4 f#4@2 [a2,e4]@2 c#4@2 e4@2 c#4@2", // G#5 A5
})).s("gm_acoustic_guitar_nylon").gain(0.27)

// bass · electric bass pick · "Guitare Basse (Tablature)"
const bass = note(`<
  ~@6 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 ~@4
>`.pickRestart({
  A: "c#2 b1", B: "g#1 a1",
})).s("gm_electric_bass_pick").gain(0.21)

// drums · kick
const kick = s("bd").struct("<~@9 A B@7 C B@7 A B@7 C ~@8 B@7 D ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@3 x!2 ~@2", C: "x!2", D: "x",
})).gain(0.11)

// drums · rim
const rim = s("rim").struct("<~@10 A@7 B A@7 ~ A@7 B ~@8 A@7 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.11)

// drums · crash
const crash = s("cr").struct("<~@9 [x ~@2 x!2 ~@3] ~@15 [x ~@2 x!2 ~@3] ~@26>").gain(0.11)

// drums · ride
const ride = s("rd").struct("<~@10 A@7 B ~@8 A@7 B ~@8 A@7 C ~@2>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x",
})).gain(0.11)

// drums · claves
const claves = s("clave:2").struct("<~@2 [~ x ~ x]!47 ~@3>").gain(0.54)

stack(piano, acoustic_guitar_nylon, bass, kick, rim, crash, ride, claves)