Strudelify

my way

A. Alexiou

KeyC majorTempo80 bpm
0:00/0:00
// my way — A. Alexiou
// 80 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5904205; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · string ensemble 1
const string_ensemble_1 = note(`<
  ~@19 A B@2 C D E F G H I J K L M N O P Q I R S T U V W T U X Y ~@15 Z AA AB AC AD AE@2 AF AG AH AI AJ ~@7
>`.pickRestart({
  A: "g4@6 ~ g4", B: "e5@4 ~ g4 e5 d5", C: "e5@4 ~ d5 e5 d5", D: "d5@2 c#5@4 ~ a4", E: "f5@4 ~ e5 f5 e5",
  F: "f5@4 ~ a4 f5 e5", G: "f5@4 ~ g5 d5!2", H: "f5@2 e5@4 ~ f#5", I: "g5@4 ~ f#5 g5 a5", J: "g5@4 ~ a5 e5 g5",
  K: "f5@4 ~ f5!2 e5", L: "g5@2 f5@4 ~ f5", M: "e5@4 ~ g4 f5 e5", N: "d5@3 b4 c5 d5", O: "d5", P: "c5@3 e5 f5 g5",
  Q: "g5@4 ~ a5 g5 f#5", R: "a5@4 ~ g5 a5 g5", S: "a5@4 ~ a5 b5 c6", T: "c6@4 ~ a5 c6 a5", U: "b5@4 ~ b5 c6 d6",
  V: "d6@4 ~ e6 b5 d6", W: "c6@4 ~ a5 b5 c6", X: "d6", Y: "c6@3 ~", Z: "~@2 g4@3 ~", AA: "~@7 c4@3 ~@2",
  AB: "~ c4@3 ~@3 a#3@3 ~@2", AC: "~ a#3@3 ~@3 c4@3 ~@2", AD: "~ c4@3 ~@3 c4@3 ~@2", AE: "~ f4@3 ~@3 f4@3 ~@2",
  AF: "~ f4@3 ~@3 g4@3 ~@2", AG: "~ g4@3 ~@3 e4@3 ~@2", AH: "~@2 e4@6 ~@7 f4@6 ~@3", AI: "~@3 f4@6 ~@7 f4@6 ~@2",
  AJ: "~@5 f4@7 ~@12",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<A B C D E F G H G E G I J@2 E I E ~@65>".pickRestart({
  A: "~ e4@3", B: "~ g4@3", C: "~ a4@3", D: "d5", E: "~ c5 ~ c5", F: "~ b4 ~ b4", G: "~ d5 ~ d5", H: "~ g4@2 ~",
  I: "~ c5@2 ~", J: "~ e5 ~ e5",
})).s("gm_string_ensemble_1").gain(0.2)

// other · pizzicato strings
const pizzicato_strings = note("<~@48 A B C D@2 E F G@2 H I J@2 K ~@12 L M ~@3 N@2 ~>".pickRestart({
  A: "~@7 c5@3 ~@2", B: "~ c5@3 ~@3 b4@3 ~@2", C: "~ b4@3 ~@3 d5@3 ~@2", D: "[~ d5@3 ~@3 g4@6 ~@6 d5@3 ~@2]/2",
  E: "~ d5@3 ~@3 c5@3 ~@2", F: "~ c5@3 ~@3 d5@3 ~@2", G: "[~ d5@3 ~@3 c5@6 ~@6 e5@3 ~@2]/2", H: "~ e5@3 ~@3 e5@3 ~@2",
  I: "~ e5@3 ~@3 c5@3 ~@2", J: "[~ c5@3 ~@3 c5@6 ~@6 c5@3 ~@2]/2", K: "~ c5@3 ~@8", L: "~@18 g3@3 ~ c4@2",
  M: "~ b3@4 d4@14 ~@5", N: "[~@4 g3@7 ~@5]/2",
})).s("gm_pizzicato_strings").gain(0.25)

// other · pizzicato strings
const pizzicato_strings_2 = note("<~@48 A B@2 C@2 D E F@2 G H I@2 J@2 ~@19>".pickRestart({
  A: "~@7 g4@3 ~@2", B: "~ g4@3 ~@3 g4@3 ~@2", C: "[~ g4@3 ~@3 e4@6 ~@6 a4@3 ~@2]/2", D: "~ a4@3 ~@3 a4@3 ~@2",
  E: "~ a4@3 ~@3 b4@3 ~@2", F: "[~ b4@3 ~@3 g4@6 ~@6 c5@3 ~@2]/2", G: "~ c5@3 ~@3 c5@3 ~@2", H: "~ a#4@3 ~@3 a4@3 ~@2",
  I: "[~ a4@3 ~@3 g#4@6 ~@6 g4@3 ~@2]/2", J: "[~ g4@3 ~@3 f4@3 f4@6 ~@8]/2",
})).s("gm_pizzicato_strings").gain(0.25)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  A B C D E@2 F G H I J K L M N O P Q R S T U V W R T U T@2 V W X Y@2 Z AA AB AC AD AE AF AG AH AI AF AG AJ AK ~@14 AL
  AM@8 AN@2 AO AP@3 ~@2 AQ@2 ~
>`.pickRestart({
  A: "~ g3@3", B: "~ b3@3", C: "~ c4@3", D: "f4@6 ~ g3", E: "e4@4 ~ g3 e4 d4", F: "e4@4 ~ d4 e4 d4",
  G: "d4@2 c#4@4 ~ a3", H: "f4@4 ~ e4 f4 e4", I: "f4@4 ~ a3 f4 e4", J: "f4@4 ~ g4 d4!2", K: "f4@2 e4@4 ~ f#4",
  L: "g4@4 ~ f#4 g4 a4", M: "g4@4 ~ a4 e4 g4", N: "f4@4 ~ f4!2 e4", O: "g4@2 f4@4 ~ f4", P: "e4@4 ~ g3 f4 e4",
  Q: "d4@3 b3 c4 d4", R: "d4", S: "c4@3 ~", T: "c4", U: "b3", V: "a#3", W: "a3", X: "g#3", Y: "g3", Z: "f3", AA: "e3 ~",
  AB: "~ [c4,e4]@2 [c4,e4]", AC: "~ [a#3,e4]@2 [a#3,e4]", AD: "~ [c4,f4]@2 [c4,f4]", AE: "~ [c4,f4]@2 [f4,a4]",
  AF: "~ [f4,a4]@2 [f4,a4]", AG: "~ g4@2 [f4,a4]", AH: "~ [g4,b4]@2 [e4,g4]", AI: "~ [e4,a4]@2 [e4,a4]", AJ: "~@2 f4!2",
  AK: "[g3,e4]@3 ~", AL: "~@5 f3",
  AM: "[e3@4 d3@4 c3@12 ~@3 e4@3 e4@2 f4@2 g4@2 g4@12 ~@3 a4@3 g4@3 f#4@3 g4@12 ~@3 f#4@3 g4@3 a4@3 a4@12 ~@3 g4@3 a4@3 g4@3 a4@12 ~@3 a4@3 b4@3 c5@3 c5@12 ~@3 a4@3 c5@3 a4@3 b4@12 ~@3 b4@3 c5@3 d5@3 d5@12 ~@3 e5]/8",
  AN: "[~@2 b4@3 d5@3 c5@12 ~@3 a4@3 b4@3 c5@3 c5@12 ~@4]/2", AO: "a4@3 c5@3 ~ a4@3 b4@13 ~",
  AP: "[~@2 b4@3 c5@3 ~ d5@3 d5@31 c5@27 ~@2]/3", AQ: "[~@4 e3@7 ~@5]/2",
})).s("gm_string_ensemble_1").gain(0.4)

// other · pizzicato strings
const pizzicato_strings_3 = note("<~@48 A@8 B@7 ~@19>".pickRestart({
  A: "[~@4 c3@6 g3@3 c4@3 b3@6 e4@3 b3@3 a#3@6 e4@3 a#3@3 a3@6 e4@3 a3@3 d3@6 a3@3 d4@3 d3@6 a3@3 d4@3 g3@6 d4@3 g3@3 c3@6 g3@2]/8",
  B: "[~ c4@3 c3@6 g3@3 c4@3 c3@6 g3@3 c4@3 f3@6 c4@3 c3@3 f3@6 c4@3 f3@3 c3@6 g3@3 c4@3 g3@6 d4@3 g3@3 f3@6 ~@2]/7",
})).s("gm_pizzicato_strings").gain(0.25)

// other · string ensemble 1 · "Violoncellos"
const string_ensemble_1_3 = note(`<
  A B C D A E F G C@2 H A@3 I J A H K L A E F M C@2 H A@3 I J A H K N A@2 I J O H P G C Q H R S@8 T@6 U@8 V@6 ~@3 W@2 ~
>`.pickRestart({
  A: "c2@2 g2 c3", B: "e2@2 b2 e3", C: "d2@2 a2 d3", D: "g2@2 d3 b2 a2@2 g2@2", E: "b2@2 e3 b2", F: "a#2@2 e3 a#2",
  G: "a2@2 e3 a2", H: "g2@2 d3 g2", I: "f2@2 c3 c2", J: "f2@2 c3 f2", K: "f2@3 f2 e2 d2", L: "c2 g2 a2 b2",
  M: "a2@3 f3 e3 d3 c#3 a2", N: "c2 g2 c3 g2", O: "d2@2 a2 d2", P: "e2@2 b2 e2", Q: "g2@2 d3 d2", R: "c2@3 ~",
  S: "[~@5 g2@3 e3@12 ~@3 g2@3 e3@3 d3@3 e3@12 ~@3 g2@3 e3@3 d3@3 e3@12 ~@3 d3@3 e3@3 d3@3 d3@6 c#3@12 ~@3 a2@3 f3@12 ~@3 e3@3 f3@3 e3@3 f3@12 ~@3 a2@3 f3@3 e3@3 f3@12 ~@3 g3@3 d3@3 d3@3 f3@6 e3@10]/8",
  T: "[~@5 f#3@3 g3@12 ~@3 f#3@3 g3@3 a3@3 g3@12 ~@3 a3@3 e3@3 g3@3 f3@12 ~@3 f3@3 f3@3 e3@3 g3@6 f3@12 ~@3 f3@3 e3@12 ~@3 g2@3 f3@3 e3@3 d3@12 b2@4]/6",
  U: "[c3@2 d3@2 d3@12 c3@3 g2@3 a2@3 b2@3 c2@6 g2@3 c3@3 c2@6 g2@3 c3@3 f2@6 c3@3 c2@3 f2@6 c3@3 f2@3 d2@6 a2@3 d2@3 g2@6 d3@2]/8",
  V: "[~@2 g2@6 e2@12 b2@6 e2@6 a2@12 e3@6 a2@6 d2@12 ~ a2@6 d3@6 ~ g2@13 d3@6 d2@7 c3@17 ~@19]/6",
  W: "[~@4 c2@7 ~@5]/2",
})).s("gm_string_ensemble_1").gain(0.3)

// bass · pizzicato strings · "Contrabasses"
const bass = note(`<
  A B C D A E F G C@2 E A H@2 I J D K L M A E F G C@2 E A H@2 I J D K L M N O P Q R S T U R V W X Y@8 Z@7 AA@8 AB@5 ~@4
  AC@2
>`.pickRestart({
  A: "c2@3 c2 c2@4", B: "e2@3 e2 e2@4", C: "d2@3 d2 d2@4", D: "g2@3 g2 g2@4", E: "b1@3 b1 b1@4", F: "a#1@3 a#1 a#1@4",
  G: "a1@3 a1 a1@4", H: "c2 g2 c3 g2 c2@4", I: "f2 c3 f3 c3 f2@4", J: "d2@3 d2!3 e2 f2", K: "g2@3 g2 g2@2 g2@2",
  L: "c2@9 c2@3 f2@4 e2@4 d2@4", M: "c2 g1 a1 b1", N: "c2 g2 c2 g2 c2@4", O: "c2 g2 e2 g2 c2@2 c2@2",
  P: "f2 c2 f2 c2 f2@2 f2@2", Q: "f2 c2 f2 c2 f2@2 e2@2", R: "d2@3 d2 d2@2 e2 f2", S: "g2@3 g2 f2@2 f2@2",
  T: "e2@3 e2 e2@2 e2@2", U: "a2@3 a2 a1@2 a2@2", V: "g2@3 g2 g1@2 g2@2", W: "c2@3 c2 c2@3 c2", X: "c2@3 ~",
  Y: "[~@8 c2@9 c2@3 c2@12 b1@9 b1@3 b1@12 a#1@9 a#1@3 a#1@12 a1@9 a1@3 a1@12 d2@9 d2@3 d2@12 d2@9 d2@3 d2@12 b1@9 b1@3 b1@12 c2@9 c2@3 c2@4]/8",
  Z: "[~@8 c2@3 g2@3 c3@3 g2@3 c2@12 c2@3 g2@3 c3@3 g2@3 c2@12 f2@3 c3@3 f3@3 c3@3 f2@12 d2@9 d2@3 d2@3 d2@3 e2@3 f2@3 g2@9 g2@3 g2@12 g2@9 g2@3 g2@6 g2@6 c2@9 c2@3 f2@4]/7",
  AA: "[e2@4 d2@4 c2@6 g1@6 a1@6 b1@6 c2@3 g2@3 c2@3 g2@3 c2@12 c2@3 g2@3 e2@3 g2@3 c2@6 c2@6 f2@3 c2@3 f2@3 c2@3 f2@6 f2@6 f2@3 c2@3 f2@3 c2@3 f2@6 e2@6 d2@9 d2@3 d2@6 e2@3 f2@3 g2@9 g2@3 f2@6 f2@6 e2@9 e2@3 e2@4]/8",
  AB: "[~@2 e2@6 a2@9 a2@3 a1@6 a2@6 d2@9 ~ d2@3 d2@6 e2@3 ~ f2@3 g2@9 g2@3 ~ g2@6 g1@7 c2@17 ~@19]/5",
  AC: "[~@3 c2@9 ~@4]/2",
})).s("gm_pizzicato_strings").gain(0.3)

stack(
  string_ensemble_1, string_ensemble_1_soft, pizzicato_strings, pizzicato_strings_2, string_ensemble_1_2,
  pizzicato_strings_3, string_ensemble_1_3, bass
)