Strudelify

Psycho

RED VELVET

KeyF majorTempo140 bpm
0:00/0:00
// Psycho — RED VELVET
// 140 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6373456; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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.

// other · clarinet · "Clarinete en Si♭"
const clarinet = note(`<
  ~@4 A@2 ~ B ~@20 C ~ D E F@2 G@2 H I J K F@2 G@2 H L M N ~@4 O P ~ Q R S T U V U W X ~@4 C ~@3 F@2 G@2 H I J K F@2 G@2
  H L Y Z ~@2 AA@2 ~@3 AB F@2 G@2 H I M Z@4 AC AD ~@3 Z@3 AC AD ~ AE AF AG
>`.pickRestart({
  A: "[~@8 eb4 f4 g4@2 f4@6 eb4 c4@4 ~@9]/2", B: "c4!2 ~@6", C: "~ eb4 f4 g4 f4@4",
  D: "g5@3 f5@3 eb5@2 eb5@3 f5@3 g5@2", E: "f5 eb5 g5 f5 g5 f5 eb5 c5", F: "[g5 f5@5 g5 f5@3 g5 f5 g5 f5 eb5 c5]/2",
  G: "[g5 f5@5 g5 f5@3 ~ c5 g5!3 ab5]/2", H: "bb5!3 g5 f5@2 bb5!2", I: "bb5 g5 f5 eb5 g5@2 ~ eb5",
  J: "ab5 g5 eb5 ab5 g5@2 ~ eb5", K: "ab5 g5 eb5 ab5 g5@2 eb5 c5", L: "bb5 c6 eb5 f5 g5@2 ~ eb5",
  M: "ab5 g5 eb5 ab5 g5@4", N: "bb5@3 bb5@3 bb5@2 eb5@8", O: "eb4!5 f4@3 c4@4 f4!2 c4!2",
  P: "c4@2 f4@2 c4@4 eb4!2 f4@2 c4@4", Q: "~@4 g4 f4 eb4 c4", R: "g4 g4@3 g4 f4 eb4 c4", S: "g4@2 ~ c4 g4 f4 eb4 c4",
  T: "g4@2 g4@6 g4@3 f4 eb4@2 c4@2", U: "g4 bb4 f4 g4", V: "eb4 c4@3 ~@3 c4", W: "ab4 g4 eb4@2 ~@2 ab4 g4", X: "f4@3 ~",
  Y: "ab5 g5 eb5 ab5 eb5@4", Z: "bb4@3 bb4@3 bb4@2 bb4@8", AA: "[c4@3 bb3 c4@3 d4 c4@3 bb3 g3@12 ~@8]/2",
  AB: "~ bb4!3 c5 bb4 f4 eb4", AC: "bb4@3 bb4@3 bb4@2 bb4@4 g5@2 g5@2", AD: "eb5 ~", AE: "~@4 bb4@2 bb4!2",
  AF: "eb5@2 bb4 g4 bb4@2 ab4@2", AG: "g4",
})).s("gm_clarinet").gain(0.3)

// other · flute · "Flauta"
const flute = note(`<
  ~ A@2 B@2 ~@2 C D@2 E F G H I J ~@3 F K L M N O P Q R S ~@3 T@2 U@2 V W X Y Z@2 U@2 V AA AB AC ~@6 AD@2 ~@8 O P Q R S
  AE ~@2 AF@2 AG@2 V W X Y T@2 AH@2 AI AA AJ AK AL AM ~@5 AN AF@2 AO@2 AI W AB AK AP AK@2 AQ AR ~ AS AT AK@3 AQ AR ~ AU
  AV AW
>`.pickRestart({
  A: "[~@6 g5@2 f5@4 eb5@6 d5@4 c5 b4@7 ~@2]/2", B: "[~@6 eb6 c6@2 bb5 g5@2 ~@4]/2", C: "c4!2 ~@2 eb5!3 f5",
  D: "[g5@4 bb5@4 g5@11 ~@3 eb5@2 eb5@2 f5@2 f5@2 eb5@2]/2", E: "g5 d5 d5@2", F: "~@2 bb4!2 ab5!4",
  G: "g5@2 c5@2 c5@2 c5@2 ab5@2 ab5@2 ab5!2 ab5@2", H: "g5@2 c5@2 c5@4 c6@3 bb5@3 ab5@2",
  I: "g5@3 g5@3 g5@2 g5@2 f5@2 f5@2 eb5@2", J: "bb4 ~@3", K: "g5@4 c5@2 c5@2 ab5 ab5@3 ab5 bb5@3",
  L: "g5@4 ~@2 eb5@2 c6@3 bb5@3 ab5@2", M: "g5@3 eb5@3 f5@2 f5@4 eb5@4", N: "eb5@3 bb4@3 f5@2 eb5@8",
  O: "eb5 f5 g5 ab5 bb5@2 eb6 f6", P: "g6 ~ g6@2 eb6 bb5@2 eb6", Q: "d6 ~", R: "d6 c6 d6 c6 d6 c6 eb6@2", S: "c6 ~",
  T: "[bb4@2 f5@9 ~ bb4@2 f5@6 g5@2 f5@2 g5@2 f5@2 eb5@2 c5@2]/2",
  U: "[g5@2 f5@9 ~ g5@2 f5@6 ~@2 c5@2 g5@2 g5@2 g5@2 ab5@2]/2", V: "bb5!3 g5 f5@2 bb5!2", W: "bb5 g5 f5 eb5 g5@2 ~ eb5",
  X: "ab5 g5 eb5 ab5 g5@2 ~ eb5", Y: "ab5 g5 eb5 ab5 g5@2 eb5 c5",
  Z: "[g5@2 f5@9 ~ g5@2 f5@6 g5@2 f5@2 g5@2 f5@2 eb5@2 c5@2]/2", AA: "bb5 c6 eb5 f5 eb5@2 ~ eb5",
  AB: "ab5 g5 eb5 ab5 g5@4", AC: "bb4@3 bb4@3 ~@2 bb4@8", AD: "[c5 d5 eb5 f5 g5 c6 bb5@3 g5@3 ~@4]/2",
  AE: "d6 c6 d6 c6 d6 c6 ab5@2", AF: "[g5@2 f5@9 ~ bb4@2 f5@6 g5@2 f5@2 g5@2 f5@2 eb5@2 c5@2]/2",
  AG: "[b4@2 f5@9 ~ g5@2 f5@6 ~@2 c5@2 g5@2 g5@2 g5@2 ab5@2]/2",
  AH: "[g5@2 f5@9 ~ b4@2 f5@6 ~@2 c5@2 g5@2 g5@2 g5@2 ab5@2]/2", AI: "bb5!3 g5 f5@2 eb5 bb5", AJ: "eb5 g5 eb5 ab5 g5@4",
  AK: "bb5@3 bb5@3 bb5@2 eb5@8", AL: "c5 g5 c5@2", AM: "b4 g5 b4@2", AN: "~ bb5!3 c6 bb5 f5 eb5",
  AO: "[b4@2 f5@9 ~ b4@2 f5@6 ~@2 c5@2 g5@2 g5@2 g5@2 ab5@2]/2", AP: "bb5@3 bb5@3 bb5@2 bb4@8",
  AQ: "bb5@3 bb5@3 bb5@2 eb5@4 g5@2 g5@2", AR: "eb5 ~", AS: "~@4 eb6@2 bb5 ab5", AT: "g5@2 f5 ab5 g5@4",
  AU: "~@4 bb5@2 bb5!2", AV: "eb6@2 bb5 g5 bb5@2 ab5@2", AW: "g5@15 ~",
})).s("gm_flute").gain(0.3)

// chords · piano
const piano = note(`<
  A@2 B@2 C@2 D ~ E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L M N@2 O@2 P@2 Q@2 N@2 O@2 P@2 R@2 S T U V W X Y Z S T U
  V W X AA AB I@2 J@2 K@2 L M N@2 O@2 P@2 Q@2 N@2 O@2 P@2 R@2 AC AD ~ AE AF AG AH M N@2 O@2 P@2 AI@2 AJ@2 AK@2 AL@2 AM@2
  AJ@2 AK@2 AN@2 AO@2 AP
>`.pickRestart({
  A: "eb2 [bb3,eb4,g4]", B: "g2 [b3,eb4,g4]", C: "c2 [c4,eb4,g4]", D: "ab2 [c4,eb4,ab4]",
  E: "[eb2@2 [bb3,eb4,g4] eb2@2 eb2 [eb3,g3,bb3]@2]/2", F: "[g2@2 [g3,bb3,d4] g2@2 g2 [g3,bb3,d4]@2]/2",
  G: "[c2@2 [c3,eb3,g3] c2@2 c2 [c3,eb3,g3]@2]/2", H: "[ab2@2 [ab3,c4,eb4] ab2@2 ab2 [ab3,c4,eb4]@2]/2",
  I: "eb2 bb2 eb3@2", J: "g2 d3 g3@2", K: "c2 c3 [eb3,g3]@2", L: "[ab2,eb3]@2 [eb3,ab3] [ab2,eb3,ab3]",
  M: "[ab2,eb3,ab3] ~@3", N: "[eb2@2 [eb3,g3,bb3] eb2@2 eb2 [eb3,g3,bb3]@2]/2",
  O: "[g2@2 [g3,b3,d4] g2@2 g2 [g3,b3,d4]@2]/2", P: "[c2@2 [c3,eb3,g3] c2@2 c2 [eb3,g3] c3]/2",
  Q: "[ab2@2 [eb3,ab3,c4] ab2@2 ab2 [eb3,ab3,c4]@2]/2", R: "[ab2@8 [eb3,ab3]@4 [ab2,eb3,ab3]@9 ~ ab2@2 [eb3,ab3]@8]/2",
  S: "[eb2,bb2]@2 ~ eb3 [g3,bb3]@4", T: "[eb2,bb2]@2 ~ eb3 [g3,bb3]@2 eb3 bb2", U: "[g2,d3]@2 ~ g3 [b3,d4]@4",
  V: "[g2,d3]@2 ~ g3 [b3,d4]@2 g3 d3", W: "[c2,g2]@2 ~ c3 [eb3,g3]@4", X: "[c2,g2]@2 ~ c3 [eb3,g3]@2 c3 g2",
  Y: "[ab2,eb3] ~@3", Z: "~@3 eb3", AA: "[ab2,eb3]@2 ~ ab3 [c4,eb4]@4", AB: "[ab2,eb3]@2 ~ ab3 [c4,eb4]@2 ab3 eb3",
  AC: "ab2 eb3 ab3@2", AD: "b2 g3 b3@2", AE: "f2 c3 g3@2", AF: "[f2,c3]@2 f3 f2", AG: "[f2,c3]@2 [eb3,g3] g2",
  AH: "[ab2,eb3,ab3]!4", AI: "[ab2@2 [eb3,ab3] [ab2,eb3]@2 ab2 [eb3,ab3] ab2]/2",
  AJ: "[eb2@2 [eb3,g3,bb3] eb2@2 eb2 [g3,bb3] eb3]/2", AK: "[g2@2 [g3,bb3,d4] g2@2 g2 [g3,bb3,d4] g3]/2",
  AL: "[c2@2 [c3,eb3,g3] c2@2 c2 c3 [eb3,g3]]/2", AM: "[[ab2,c3]@2 [ab3,c4,eb4] ab2@2 ab2 [f3,ab3] ab2]/2",
  AN: "[c2@2 [c3,eb3,g3] c2@2 c2 [c3,eb3,g3] c2]/2", AO: "[ab2@2 [eb3,ab3,c4] ab2@2 ab2 ab3@2]/2",
  AP: "[ab2,eb3,ab3]@15 ~", // Ab5
})).s("gm_piano").gain(0.3)

stack(clarinet, flute, piano)