Strudelify

Slipping Through My Fingers - Whole

seobowu03

KeyF majorTempo120 bpm
0:00/0:00
// Slipping Through My Fingers - Whole — seobowu03
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5844406; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trumpet · "B♭ 트럼펫"
const trumpet = note(`<
  ~@9 A@2 B C D@3 E F G H I J K@2 L M@3 N@2 ~@8 O P@4 Q R S@2 T@2 U V W X@2 Y@2 ~@19 Z@2 AA@2 AB AC AD AE
>`.pickRestart({
  A: "[g4@4 g4@2 a4 bb4@3 ~@4 bb4 c5]/2", B: "d5@2 d5 eb5", C: "d5 c5 bb4 a4",
  D: "[~@2 g4 eb5 eb5@2 d5 d5@3 c5@3 c5 bb4 bb4@5 ~@4]/3", E: "~@7 g4", F: "g4 eb5@4 eb5 d5@2", G: "d5 c5@2 c5@3 f4!2",
  H: "f4 d5@5 ~@2", I: "a4@6 ~ g4", J: "g4 eb5@3 eb5 d5@3", K: "[d5 c5 c5@4 f4 f4@3 ~@6]/2", L: "~@3 f4",
  M: "[g4@2 eb5@2 eb5 d5@2 d5@2 c5@3 c5@2 f4 f4@2 d5@3 ~@2 f4@2]/3", N: "[f4 c5@3 c5 bb4@2 bb4@5 ~@4]/2",
  O: "~@4 d4 f4 bb4 d5", P: "[d5 c5@3 c5@2 bb4 bb4@2 ~ f5@2 d5@2 bb4 a4@2 ~ f5@2 d5@2 a4 g4@2 c5@5 ~@2]/4",
  Q: "~@2 c5 bb4!2 g4!2 f4", R: "f4 bb4@2 ~ d4 f4 bb4 d5", S: "[d5 c5@3 c5@2 bb4 bb4@5 ~@2 g4@2]/2",
  T: "[g4@2 eb5@2 eb5@2 d5 d5@3 c5 c5@3 ~ f4]/2", U: "f4 d5@3", V: "d4@3 g4", W: "g4 eb5!2 d5",
  X: "[d5 c5 c5@4 f4 f4@5 d4 f4 bb4 d5]/2", Y: "[eb5 f5@15]/2", Z: "[g4@4 g4@2 a4 bb4@3 ~@2 bb4@2 c5@2]/2",
  AA: "[d5@4 d5@2 eb5 d5@3 c5 bb4@3 a4@2]/2", AB: "~@4 g4@2 g4 a4", AC: "bb4@2 ~@4 bb4 c5", AD: "eb5 d5 c5 bb4",
  AE: "d5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "트럼펫"
const trumpet_2 = note("<~@46 A B@2 C D E F@2 G H ~@8 I J@5 K L M@3 N@2 O@2 P Q R S>".pickRestart({
  A: "~@3 g4", B: "[g4@6 bb4 bb4@3 a4 a4@3 ~ f4]/2", C: "f4 bb4@3", D: "a4@3 g4", E: "g4@3 bb4",
  F: "[bb4 a4 a4@4 f4 d4@5 d4 f4!2 bb4]/2", G: "bb4 c5", H: "d5", I: "~@4 d4 f4 bb4 d5",
  J: "[d5 c5@3 c5@2 bb4 bb4@2 ~ f5@2 d5@2 bb4 bb4@2 ~ f5@2 d5@2 bb4 a4@2 ~ f5@2 d5@2 a4 g4@2 c5@5 ~@2]/5",
  K: "~@2 c5 bb4!2 g4!2 f4", L: "f4 bb4@2 ~ d4 f4 bb4 d5", M: "[d5 c5@3 c5@2 bb4 bb4@13 ~@4]/3",
  N: "[eb4@4 eb4@2 f4 gb4@3 ~@2 gb4@2 ab4@2]/2", O: "[bb4@4 bb4@2 c5 bb4@3 a4 g4 g4@2 f4@2]/2", P: "~@4 eb4@2 eb4 f4",
  Q: "g4@2 ~@4 gb4 ab4", R: "c5 bb4 ab4 g4", S: "bb4",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "F 호른"
const french_horn = note(`<
  A@2 B C A@2 B C@2 A@2 B C A D B E F G H I F G J E F G K L M@2 F J N O P Q L E R J N O P Q O Q F G H I F G H I ~ S T@4
  U@2 V@2 W@5 X Y Z@3 ~@8
>`.pickRestart({
  A: "eb3", B: "bb2", C: "d3", D: "f3", E: "bb2 d3", F: "eb3@3 eb3", G: "f3@3 a3", H: "bb3@3 c4", I: "d4 d3",
  J: "bb2@3 c3", K: "bb3@3 bb3", L: "f3@3 f3", M: "[bb2@5 ~ bb2@2]/2", N: "d3@3 d3", O: "c3@3 c3", P: "c3 eb3",
  Q: "bb2@3 bb2", R: "eb3@3 f3", S: "~@4 d3 f3 bb3 d4",
  T: "[d4 c4@3 c4@2 bb3 bb3@3 f4@2 d4@2 bb3 a3@3 f4@2 d4@2 a3 g3@2 c4@5 ~@2]/4",
  U: "[~@2 c4 ~ bb3@2 g3 f3@2 bb3@2 ~ d3 f3 bb3 d4]/2", V: "[d4 c4@3 c4@2 bb3 bb3@3 ~@2 d3 f3 bb3 d4]/2",
  W: "[d4 c4@3 c4@2 bb3 bb3@2 ~ f4@2 d4@2 bb3 bb3@2 ~ f4@2 d4@2 bb3 a3@2 ~ f4@2 d4@2 a3 g3@2 c4@5 ~@2]/5",
  X: "~@2 c4 bb3!2 g3!2 f3", Y: "f3 bb3@2 ~ d3 f3 bb3 d4", Z: "[d4 c4@3 c4@2 bb3 bb3@13 ~@4]/3",
})).s("gm_french_horn").gain(0.3)

stack(trumpet, trumpet_2, french_horn)