Strudelify
KeyF♯ minorTempo120 bpm
0:00/0:00
// Valse — Yusuf Biberci
// 120 bpm, 3/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5835772; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/3)

// 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.

// chords · orchestral harp · "Arp"
const orchestral_harp = note(`<
  A@2 B@2 C@2 D@4 E F G H I J K L M N O D A@2 P@2 Q@2 R S T@2 U@2 V@2 R S W X A@2 W Y Z A B@2 C@2 AA AB AC D A@4
>`.pickRestart({
  A: "f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5", B: "d3@5 [f#3,a3]@5 ~ [f#3,a3]@5", C: "b2@5 [d3,f#3]@5 ~ [d3,f#3]@5",
  D: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", E: "e4@3 d4@2 ~@3 d4@3 [a3,c#4]@5, f#3@5 [a3,c#4]@5 ~@6",
  F: "f#3@5 [a3,c#4]@5 ~ [b3,c#4]@2 c#4@3, ~@11 a3@5", G: "d4@3 b3@2 [f#3,a3]@5 ~ [g#3,a3]@2 a3@3, d3@5 ~@6 f#3@5",
  H: "b3@3 c#4@2 [f#3,a3]@5 ~ [f#3,a3]@5, d3@5 g#3@11", // F#m
  I: "g#3@3 a3@2 b3@3 c#4@3 a3@2 f3@3, b2@5 [d3,f#3]@5 ~ [d3,f#3]@5", // D
  J: "[b2,g#4]@5 f#4@3 g#4@3 f#4@2 g#4@3, ~@5 [d3,f#3]@5 ~ [d3,f#3]@5", // E D
  K: "a4@3 b4@2 a4@3 g#4@3 f#4@2 f#4@3, c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", // Fm
  L: "a4@3 b4@2 c5@3 e5@3 d5@2 c#5@3, c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", // Fm
  M: "d5@3 c#5@2 [f3,g#3]@5 ~ [f3,g#3]@5, c#3@5 ~@11", N: "c#3@5 a4@3 b4@3 c5@2 e5@3, ~@5 [f3,g#3]@5 ~ [f3,g#3]@5",
  O: "d5@3 c#5@2 d5@3 c#5@3 [f3,g#3]@5, c#3@5 [f3,g#3]@5 ~@6", // Fm
  P: "d5@3 c#5@2 b4@3 d5@3 c#5@2 b4@3, d3@5 [f#3,a3]@5 ~ [f#3,a3]@5", // F#m
  Q: "c#5@3 b4@2 a4@3 c#5@3 b4@2 a4@3, b2@5 [d3,f#3]@5 ~ [d3,f#3]@5", // D
  R: "[b4,b5]@3 [a4,a5]@2 [g#4,g#5]@3 [b4,b5]@3 [a4,a5]@2 [g#4,g#5]@3, c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", // B A G# B A G# Fm
  S: "[c#3,f#4]@5 [f3,g#3,g#4]@5 ~ [f3,g#3,a4]@5", // F#5 Fm F
  T: "[e5,e6]@3 [d5,d6]@2 [c#5,c#6]@3 [e5,e6]@3 [d5,d6]@2 [c#5,c#6]@3, f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5", // E D C# E D C# A
  U: "[d4,d5]@3 [c#4,c#5]@2 [b3,b4]@3 [d4,d5]@3 [c#4,c#5]@2 [b3,b4]@3, d3@5 [f#3,a3]@5 ~ [f#3,a3]@5", // D C# B D C# B F#m
  V: "[c#4,c#5]@3 [b3,b4]@2 [a3,a4]@3 [c#4,c#5]@3 [b3,b4]@2 [a3,a4]@3, b2@5 [d3,f#3]@5 ~ [d3,f#3]@5", // C# B A C# B A D
  W: "[f#3,c#5]@5 [a3,c#4,e5]@5 ~ [a3,c#4,d5]@5", X: "[f#3,c#5]@5 [a3,c#4]@5 ~ [a3,c#4]@5",
  Y: "[f#3,e5]@5 [a3,c#4,f#5]@5 ~ [a3,c#4,d5]@5", Z: "f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5, c#5",
  AA: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, a4", AB: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, g#4@11 ~@5",
  AC: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, f#4", // Fm
})).s("gm_orchestral_harp").gain(0.3)

// chords · string ensemble 1 · "Yaylılar"
const string_ensemble_1 = note(`<
  ~@8 A@2 B@2 C D E F G H I J K@2 L M N@2 O@2 A P Q@2 R@2 S@2 T@2 U V W@2 U X Y W Z AA AB O AC AD AE AF ~@4
>`.pickRestart({
  A: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", // Fm
  B: "[e5@3 d5@2 c#5@3 d5@3 [a3,c#4]@5 f#3@5 [a3,c#4]@5 ~ b4@2 c#5@3, f#3@5 [a3,c#4]@5 ~ c#5@11 ~@5 [a3,c#4]@5]/2", // A
  C: "d5@3 b4@2 [f#3,a3,a4]@5 ~ g#4@2 a4@3, d3@5 ~@6 [f#3,a3]@5", D: "b4@3 c#5@2 [f#3,a3]@5 ~ [f#3,a3]@5, d3@5 g#4@11",
  E: "g#4@3 a4@2 b4@3 c#5@3 a4@2 f4@3, b2@5 [d3,f#3]@5 ~ [d3,f#3]@5", // D
  F: "[b2,g#4]@5 f#4@3 g#4@3 f#4@2 g#4@3, ~@5 [d3,f#3]@5 ~ [d3,f#3]@5", // E D
  G: "a4@3 b4@2 a4@3 g#4@3 f#4@2 g#4@3, c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", // Fm
  H: "a4@3 b4@2 c5@3 e5@3 d5@2 c#5@3, c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5", // Fm
  I: "d5@3 ~@2 [f3,g#3]@5 ~ [f3,g#3]@5, c#3@5 ~@11, ~@3 c#5@11 ~@2", // Fm
  J: "c#3@5 a5@3 b5@3 c6@2 e6@3, ~@5 [f3,g#3]@5 ~ [f3,g#3]@5", // Fm
  K: "[d6@3 c#6@2 d6@3 ~@3 [f3,g#3]@5 c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, c#3@5 [f3,g#3]@5 ~@22, ~@8 c#6@11 ~@13]/2", // Fm
  L: "f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5", M: "e5@3 d5@2 c#5@3 e5@3 d5@2 c#5@3, f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5",
  N: "d5@3 c#5@2 b4@3 d5@3 c#5@2 b4@3, d3@5 [f#3,a3]@5 ~ [f#3,a3]@5", O: "b2@5 [d3,f#3]@5 ~ [d3,f#3]@5",
  P: "[c#3,f#4]@5 [f3,g#3,g#4]@5 ~ [f3,g#3,a4]@5", // F#5 Fm F
  Q: "[f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5 f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5, c#5]/2", // A
  R: "[d3@5 [f#3,a3]@5 ~ [f#3,a3]@5 d3@5 [f#3,a3]@5 ~ [f#3,a3]@5, a4]/2", // F#m
  S: "[b2@5 [d3,f#3]@5 ~ [d3,f#3]@5 b2@5 [d3,f#3]@5 ~ [d3,f#3]@5, f#4]/2", // D
  T: "[b5@3 a5@2 g#5@3 b5@3 a5@2 g#5@3 [c#3,f#5]@5 [f3,g#3,g#5]@5 ~ [f3,g#3,a5]@5, g#4, c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5 ~@16]/2", // F#5 Fm F Fm
  U: "[f#2,c#5]@5 [a2,c#3,e5]@5 ~ [a2,c#3,d5]@5", V: "f#2@5 [a2,c#3]@5 ~ [a2,c#3]@5, c#5@11 ~@5",
  W: "f#2@5 [a2,c#3]@5 ~ [a2,c#3]@5", X: "[f#2,e5]@5 [a2,c#3,f#5]@5 ~ [a2,c#3,d5]@5",
  Y: "f#2@5 [a2,c#3]@5 ~ [a2,c#3]@5, c#5", Z: "d3@5 [f#3,a3]@5 ~ [f#3,a3]@5",
  AA: "d3@5 g#4@3 a4@3 b4@2 c#5@3, ~@5 [f#3,a3]@5 ~ [f#3,a3]@5", // F#m
  AB: "a4@3 g#4@2 [d3,f#3,f#4]@5 ~ [d3,f#3]@5, b2@5 ~@11", AC: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, a4",
  AD: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, g#4@11 ~@5", AE: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, f#4",
  AF: "c#3@5 [f3,g#3]@5 ~ [f3,g#3]@5, f4", // Fm
})).s("gm_string_ensemble_1").gain(0.3)

// chords · string ensemble 1 · "Yaylılar" · soft notes
const string_ensemble_1_soft = note("<~@54 A@4>".pickRestart({
  A: "[f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5 f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5 f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5 f#3@5 [a3,c#4]@5 ~ [a3,c#4]@5, f#4]/4", // A
})).s("gm_string_ensemble_1").gain(0.2)

stack(orchestral_harp, string_ensemble_1, string_ensemble_1_soft)