Strudelify

can you hold me

NF ft. Britt Nicole

KeyE minorTempo135 bpm
0:00/0:00
// can you hold me — NF ft. Britt Nicole
// 135 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6202308; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Klavier"
const piano = note(`<
  A@3 B@3 C@3 D@3 A@3 B@3 C@3 D@3 A@3 B@3 C@3 D@3 E@3 F@3 G@3 H@3 E@3 F@3 G@3 H@3 E@3 F@3 G@3 H@3 E@3 F@3 G@3 H@3 E@3
  F@3 G@3 H@3 E@3 F@3 G@3 H@3 E@3 F@3
>`.pickRestart({
  A: "[[e4,g4]@23 ~]/3", B: "[[d4,g4]@23 ~]/3", C: "[[c4,g4]@23 ~]/3", D: "[[b3,g4]@23 ~]/3", E: "[[e3,g3]@23 ~]/3",
  F: "[[d3,g3]@23 ~]/3", G: "[[c3,g3]@23 ~]/3", H: "[[b2,g3]@23 ~]/3",
})).s("gm_piano").gain(0.3)

// other · alto sax · "Altsaxophon"
const alto_sax = note(`<
  ~@11 A B C D B C D E ~ A E ~@2 F G H F I J K ~ L M ~@2 N@3 O@3 P@3 Q ~@2 R S T U S T V W X Y Z AA N@3 O@3 P@3 Q AB@2
  AC ~ AD ~@2 AE AF AG AH AI AJ AK N@3 O@3 P@3 Q ~@2 N@3 O@3 P@3 Q ~@2 N@3 ~@3
>`.pickRestart({
  A: "~@3 e4", B: "g4 f#4 e4 g4", C: "f#4 e4 g4 f#4", D: "e4 g4 f#4 e4", E: "b4 ~", F: "g3 f#3 e3 g3",
  G: "f#3@2 e3@2 g3@2 f#3 ~", H: "f#3 g3 f#3 e3", I: "f#3 e3 g3 f#3", J: "e3 g3 f#3 e3", K: "b3 ~", L: "~@3 [e3,e4]",
  M: "[b3,b4] ~", N: "[[b3,b4]@3 [b3,b4]@3 [b3,b4]@3 a3@2 ~]/3",
  O: "[[b3,b4]@6 [b3,b4]@6 [b3,b4]@6 [a3,a4] [g3,g4] [e3,e4] ~@3]/3", // B A G E
  P: "[[b3,b4]@3 [b3,b4]@3 [b3,b4]@3 [a3,a4] [g3,g4] [a3,a4]]/3", Q: "[a3,a4]@3 ~", R: "~ e3 g3 a3!3 a3@2",
  S: "~@2 g3 a3 a3@2 ~@2", T: "~@4 f#3!4 f#3@2 f#3@2 f#3@2 g3@2", U: "~@2 g3 a3!3 a3@2", V: "b3 a3!5 b3 a3",
  W: "a3!4 b3 a3!3", X: "a3!2 f#3!2 f#3@2 f#3 e3", Y: "g3@2 ~@3 [g3,g4] [b3,b4] [a3,a4]",
  Z: "[a3,a4]!3 [g3,g4] [b3,b4] [a3,a4]!3", AA: "[a3,a4]!5 [g3,g4] [e3,e4,e5]@2",
  AB: "[[g3,g4] [b3,b4] [b3,b4]@3 d5@3]/2", AC: "d5 e5@3", AD: "~ f#4 f#4@2 f#4@2 g4@2", AE: "~ f#4!3", AF: "g4 a4@2 ~",
  AG: "~@5 d4@2 d4 a4@2 g4@2 a4@2 g4@2", AH: "a4@2 b4@2 a4@2 g4@2 e4@2 ~ d4 a4@2 g4@2", AI: "a4 g4 a4 b4 a4 g4 e4 ~",
  AJ: "a4 g4 a4 g4 a4 g4 a4 g4", AK: "[g3,g4,g5]",
})).s("gm_alto_sax").gain(0.3)

stack(piano, alto_sax)