Strudelify

photograph

Luis Miguel Tovar

KeyE majorTempo108 bpm
0:00/0:00
// photograph — Luis Miguel Tovar
// 108 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5541880; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(108/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.

// other · piano
const piano = note(`<
  A@7 B ~ C D E F@2 ~ G@2 H I E J@3 ~ K L M N@5 O P Q P R S T U V W X Y Z AA AB@2 AC AD@2 AE AF AG AH@3 AI M AJ M AK@5 O
  P Q P AL AM AN AO O P Q P AL AM AP U V U V AQ V AR AO AS P Q P R AM AT AU O P Q P AL AM AP AO AV AW Q P Q P AX AY@2
>`.pickRestart({
  A: "~ e4 d#4 e4 ~ b3 a3 g#3", B: "c#4@4 g#4!2 f#4 g#4", C: "~@4 g#4!2 f#4 g#4", D: "~ f#4 e4@4 e4@6 ~@4",
  E: "~@5 e4 f#4 d#4", F: "[b3@2 d#4 e4 ~@2 a4 g#4@2 e4@3 ~@4]/2", G: "[~@3 e4 g#4!2 f#4 g#4@3 f#4 e4 ~@4]/2",
  H: "~@2 e4!2 g#4!2 f#4 g#4", I: "~ f#4 e4@2 e4@2 e4@6 ~@4",
  J: "[b3@4 d#4@2 e4@2 ~@2 b3@4 a4@4 g#4@4 f#4@2 e4@2 e4@4 f#4 g#4@3 f#4 e4 ~@12]/3", K: "e4!7 f#4",
  L: "~ g#4 g#4@6 ~@8", M: "~ e4!6 f#4",
  N: "[g#4@2 g#4@4 f#4@2 ~@4 e4 f#4 c#5 b4@4 g#4!2 f#4@2 f#4@2 e4 ~@5 b4@4 g#4!2 f#4@2 f#4@2 e4@3 ~@3 b4@3 b4 g#4!2 f#4@2 f#4@2 e4@3 d#4@11 ~@3 e5@2 e5@2 f#5@2]/5",
  O: "[g#4,b4,e5] [g#4,b4]", P: "g#5!3 a5@2 g#5 f#5 e5", Q: "[b4,e5,g#5] [b4,d#5,f#5]", R: "[g#4,c#5,e5] [g#4,c#5,f#5]",
  S: "[c#5,e5,g#5] g#5@2 [c#5,e5,a5] ~ g#5 f#5 e5", T: "[e4,a4,b4,e5]@3 [e4,a4,b4,e5] ~ a4 e4 a4",
  U: "e5 e5@2 d#5 e5 e5@2 e5", V: "~ e4 d#4 e4@2 b3 a3 g#3", W: "~ e4 d#4 e4 g#4!2 f#4 g#4",
  X: "[g#4,b4]@3 [g#4,b4]@3 [g#4,b4]@2", Y: "[g#4,b4]@3 [g#4,b4] g#4!2 [f#4,g#4,b4] g#4",
  Z: "~ f#4 e4@2 e4@4 ~@4 [g#4,c#5]@4", AA: "[g#4,c#5]@3 [g#4,c#5] ~ e4 f#4 d#4",
  AB: "[[e4,f#4]@2 d#4 [d#4,e4,b4] ~@2 a4 g#4@2 e4@3 ~@4]/2", AC: "[e4,a4,c#5]@3 [e4,a4,c#5]@3 [e4,a4,c#5]@2",
  AD: "[[e4,a4,c#5]@3 [a4,c#5,e5] g#4!2 f#4 ~ b4@4 f#4 g#4@2 e4, ~@14 g#4@9 ~@9]/2", AE: "[e4,g#4,b4]@2 e4!4 c#5 b4",
  AF: "[g#4,c#5] f#4 e4@2 e4@2 e4@4 ~@2 [e4,g#4,c#5]@4", AG: "[e4,g#4,c#5]@3 [e4,g#4,c#5] ~ e4 [f#4,g#4,c#5] d#4",
  AH: "[[b3,e4,f#4]@4 d#4@2 [e4,f#4,b4]@2 ~@2 c#4@4 a4@4 g#4@4 [e4,f#4,b4]@2 e4@2 e4@2 ~ f#4 g#4@4 f#4 e4 ~@2 [e4,g#4,c#5]@6 [e4,g#4,c#5]@4]/3", // Bsus4 Esus2 C#m
  AI: "[e4,g#4,c#5]@3 [d#4,e4,g#4,c#5]@2 [e4,g#4,c#5]@2 ~", AJ: "~ g#4 g#4@13 ~",
  AK: "[g#4@2 g#4@4 f#4@6 e4 f#4 c#4 b4@4 g#4!2 f#4@2 f#4@2 e4@6 b4@4 g#4!2 f#4@2 f#4@2 e4@6 b4@3 b4 g#4!2 f#4@2 f#4!2 e4@3 d#4@11 ~@3 e5@2 e5@2 f#5@2]/5",
  AL: "[g#4,c#5,e5]@4 [g#4,c#5,f#5]@3 f#5", AM: "[c#5,e5,g#5] g#5@2 [c#5,e5,a5]@2 g#5 f#5 e5",
  AN: "[e4,a4,b4,e5]@4 ~ a4 e4 a4", AO: "~@5 e5!2 f#5", AP: "[e4,a4,b4,e5]@3 ~@2 a4 e4 a4",
  AQ: "g#5 g#5@2 f#5 g#5 g#5@2 g#5", AR: "e5 e5@2 d#5!2 e5@2 b4", AS: "[g#4,b4,e5]@4 [g#4,b4] b4!3",
  AT: "[e4,a4,b4,e5]@15 ~", AU: "d#4@4 ~ e5!2 f#5", AV: "[g#4,b4,e5]@4 ~ g#5!3", AW: "g#5!2 ~ a5@2 g#5 f#5 e5",
  AX: "[g#4,c#5,e5]@15 ~", AY: "[e5@2 e5@4 d#5@2 e5@2 e5@4 e5@17 ~]/2",
})).s("gm_piano").gain(0.3)

stack(piano)