Strudelify

apologize

Kajajgrothe

KeyE♭ majorTempo120 bpm
0:00/0:00
// apologize — Kajajgrothe
// 120 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5914363; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 85 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/4)

// 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 · string ensemble 1 · "Fioliner"
const string_ensemble_1 = note(`<
  ~@8 A B C D A B C E ~@8 F G H I F G H J K L C D K M C D K M C D K M C D N L H O N L H O K M C D N L H O F P H O F G H
  O F G H O F G H O F G H O F
>`.pickRestart({
  A: "c4", B: "f4", C: "eb5", D: "d5", E: "d5 ~", F: "[eb4,g4]", G: "[eb4,ab4]", H: "[g4,bb4]", I: "[f4,bb4] ~",
  J: "[f4,bb4] ~@3", K: "c5", L: "ab4", M: "f5", N: "g4", O: "[f4,bb4]", P: "[f4,ab4]",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · piano
const piano = note(`<
  A B C D A E F G H I J K L M N O P Q@2 R P Q@2 R S T@3 S U@3 V W X Y Z AA AB AC ~@3 R AD AE@2 R AF AG@2 AH S AI AJ AK S
  AL@2 AM Z W X Y Z AN AO ~@9 A E F G ~@5
>`.pickRestart({
  A: "eb4 g3 c4 g3 eb4 g3 c4 g3, [c2,c3]@15 ~", B: "[ab3,f4] ~ c4 ~ f4 ~ c4 ab3, ab2@15 ~, ~ ab3@2 ab3@2 ab3@2 ~",
  C: "g4 bb3 ~ bb3 g4 bb3 f4 eb4, eb3@15 ~, eb4@2 eb4@5 ~", D: "f4 bb3 ~ bb3 f4 bb3 eb4 d4, d3@15 ~, d4@2 d4@5 ~",
  E: "f4 ab3 c4 ab3 f4 ab3 c4 ab3, [ab1,ab2]@15 ~", F: "g4 bb3 eb4 bb3 g4 bb3 f4 eb4, [eb2,eb3]@15 ~",
  G: "f4 bb3 d4 bb3 f4 bb3 eb4 d4, [d2,d3]@15 ~", // D
  H: "[c4,eb4] g3 [c4,eb4] g3 [c4,eb4] [c2,g3] [c3,c4,eb4] g3, [c2,c3] ~", // Cm C5 Cm C
  I: "[c4,f4] ab3 [c4,f4] ab3 [c4,f4] [c2,ab3] [c3,c4,f4] ab3, [ab1,ab2] ~", // F5 Fm F5 Ab
  J: "[eb4,g4] bb3 [eb4,g4] bb3 [eb4,g4] [eb2,bb3] [eb3,eb4,g4] [eb4,f4], [eb2,eb3] ~", // Eb Eb5 Eb Ebsus2 Eb
  K: "[d4,f4] bb3 [d4,f4] bb3 [d4,f4] [d2,bb3] [d3,c4,eb4] [c4,d4], [d2,d3] ~", // Dm Gm Cm Csus2 D
  L: "[c4,eb4] g3 [c4,eb4] g3 [c4,eb4] [c2,g3] [c3,c4,eb4] [c2,g3], [c2,c3] ~", // Cm C5 Cm C5 C
  M: "[c4,f4] ab3 [c4,f4] ab3 [c4,f4] [c2,ab3] [c3,c4,f4] [c2,ab3], [ab1,ab2] ~", // F5 Fm F5 Fm Ab
  N: "[eb4,g4] bb3 [eb4,g4] bb3 [eb4,g4] [eb2,bb3] [eb3,eb4,g4] [eb2,eb4,f4], [eb2,eb3] ~", // Eb Eb5 Eb Ebsus2 Eb
  O: "[d4,f4] bb3 [d4,f4] bb3 [d4,f4]@3 g4, [d2,d3]@13 ~@3", P: "c5 bb4 c5 bb4 bb4@2 bb4 g4",
  Q: "[bb4@4 bb4@4 bb4@4 f4@2 g4@17 ~]/2", R: "~@7 g4", S: "c5 bb4 c5 bb4 c5@2 eb5@2",
  T: "[c5@2 bb4@2 c5@2 bb4@2 c5@4 eb5@2 eb5@11 ~@3 bb4@2 f5@15 ~ g4@2]/3",
  U: "[c5@2 bb4@2 c5@2 bb4@2 c5@4 eb5@2 eb5@11 ~@3 bb4@2 f5@11 ~ [eb4,eb5]@2 [eb4,eb5]@2 [bb4,bb5]@2]/3", // Eb Bb
  V: "[bb4,bb5]@4 ~ [eb4,eb5] [f4,f5] [eb4,eb5]", W: "[eb4,eb5]@3 [c4,c5]@3 [bb3,bb4] [bb4,bb5]",
  X: "[bb4,bb5]@4 ~@2 [ab4,ab5] [g4,g5]", Y: "[f4,f5]@4 ~ [eb4,eb5]!3",
  Z: "[bb4,bb5] [bb4,bb5]@4 [eb4,eb5] [f4,f5] [eb4,eb5]", AA: "[eb4,eb5]@4 [c4,c5]@3 [eb4,eb5]", AB: "[g4,g5]@15 ~",
  AC: "[f4,f5]@15 ~", AD: "[g4,c5] bb4 c5 bb4 bb4@2 bb4 g4",
  AE: "[[c4,bb4]@4 [c4,bb4]@4 [c4,bb4]@4 f4@2 eb4@2 eb4@15 ~, ~@14 g4@17 ~]/2", // C7
  AF: "c5 bb4 c5 bb4 [eb3,bb4]@2 bb4 g4, g2 c3 ~ g3", // Eb5
  AG: "[[ab2,f4,bb4]@2 [c3,f4,bb4]@2 [f3,bb4]@2 f4 ~ bb2@2 eb3@2 g3@2 bb3@2, ~@3 ab3 ~@4, ~@14 g4@17 ~]/2", // Bb7 Fsus4 Bb5
  AH: "bb2@2 d3@2 f3@2 ~ g4, ~@3 bb3", AI: "f5@3 c5!3 eb5@2", AJ: "eb5@4 ~@2 bb4!2", AK: "f5@11 ~@3 bb4@2",
  AL: "[c5@2 bb4@2 c5@2 bb4@2 c5@4 eb5@2 eb5@13 ~ eb5@2 bb4@2]/2", AM: "f5@4 ~@2 [eb4,eb5]!2",
  AN: "[eb4,eb5]@11 ~ [eb4,eb5]@2 [bb4,bb5]@2", AO: "[bb4,bb5]@15 ~",
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note(`<
  ~@16 A B C D A B C E A B C D A B C F G@3 H I J K H A B C D A B L D M N O P Q B C E Q B C R S@3 T U V W T ~@4 S@3 T S@3
  T U V W T X
>`.pickRestart({
  A: "[c4,eb4] g3 [c4,eb4] g3 [c4,eb4] [c2,g3] [c3,c4,eb4] g3, [c2,c3] ~", // Cm C5 Cm C
  B: "[c4,f4] ab3 [c4,f4] ab3 [c4,f4] [c2,ab3] [c3,c4,f4] ab3, [ab1,ab2] ~", // F5 Fm F5 Ab
  C: "[eb4,g4] bb3 [eb4,g4] bb3 [eb4,g4] [eb2,bb3] [eb3,eb4,g4] [eb4,f4], [eb2,eb3] ~", // Eb Eb5 Eb Ebsus2 Eb
  D: "[d4,f4] bb3 [d4,f4] bb3 [d4,f4] [d2,bb3] [d3,c4,eb4] [c4,d4], [d2,d3] ~", // Dm Gm Cm Csus2 D
  E: "[d4,f4] bb3 [d4,f4] bb3 [d4,f4] [d2,bb3] [d3,c4,eb4] ~, [d2,d3] ~", F: "[d2,d3]!3 ~", G: "bb5@2 ~ c6@2 ~ bb5@2",
  H: "bb5@2 ~ ab5@2 ~ g5@2", I: "c3 eb3 ~ c6@2 ~ bb5@2, bb5@4 g3@11 ~", J: "ab2 c3 ~ c6@2 ~ bb5@2, bb5@4 eb3@11 ~",
  K: "eb3 g3 ~ c6@2 ~ bb5@2, bb5@4 bb3@11 ~",
  L: "[eb4,g4] bb3 [eb4,g4] bb3 [eb4,g4] [eb2,bb3] [eb3,eb4,g4] [eb2,eb4,f4], [eb2,eb3] ~", // Eb Eb5 Eb Ebsus2 Eb
  M: "[c4,eb4] g3 [c4,eb4] g3 [c4,eb4] [c3,g3] [c4,eb4] g3", // Cm C5 Cm
  N: "[c4,f4] ab3 [c4,f4] ab3 [c4,f4] [c2,ab3] [c3,c4,f4] ab3", // F5 Fm F5
  O: "[eb4,g4] bb3 [eb4,g4] bb3 [eb4,g4] [eb2,bb3] [eb3,eb4,g4] [eb4,f4]", // Eb Eb5 Eb Ebsus2
  P: "[d4,f4] bb3 [d4,f4] bb3 [d4,f4] [d2,bb3] [d3,c4,eb4] ~", // Dm Gm Cm
  Q: "eb4 g3 eb4 g3 [c4,eb4] [c3,g3] [c4,eb4] g3, c3 ~, c4!2 ~@2", R: "[d4,f4] bb3 [d4,f4] bb3 ~@4, [d2,d3] ~",
  S: "bb5@3 c6@3 bb5@2", T: "bb5@3 ab5@3 g5@2", U: "c3 eb3 ~ c6@3 bb5@2, bb5@3 ~@5, ~@4 g3@11 ~",
  V: "ab2 c3 ~ c6@3 bb5@2, bb5@3 ~@5, ~@4 eb3@11 ~", W: "eb3 g3 ~ c6@3 bb5@2, bb5@3 ~@5, ~@4 bb3@11 ~", X: "g5@15 ~",
})).s("gm_piano").gain(0.25)

stack(string_ensemble_1, piano, piano_2)