Strudelify

amarcord

davcatu73

KeyA majorTempo100 bpm
0:00/0:00
// amarcord — davcatu73
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5907879; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · piano · "Piano à queue"
const piano = note(`<
  A B C D@2 E F G@2 H I J@2 K@2 L@2 M N O P Q R S T U V W X Y Z AA AB AC AD AE AB AF AG AH AI AJ AK AL AM AN@2 AO@2 AP
  AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE AP AQ BF BG
>`.pickRestart({
  A: "~@4 a4 c5 b4 a4", B: "g#4@11 ~ a4@4", C: "g4@11 ~ a4@4",
  D: "[~@4 [c5,e5] ~ [c5,e5] ~@5 [c5,e5]@4 ~@8 a4@2 c5@2 b4@2 a4@2, f#4@23 ~@9]/2", E: "f4@11 ~ e4@4",
  F: "d#4@11 ~ e4@4", G: "[~@2 [d5,f5]!2 ~@2 [d5,f5]@2 ~@4 d5 f5 e5 d5, a4@23 ~@9]/2",
  H: "~ [f4,a4]@2 ~@3 d5@2, c#5@11 ~@5, ~@6 [f4,a4]@9 ~", I: "~ [f4,a4]@2 ~@3 d5@2, c5@11 ~@5, ~@6 [f4,a4]@9 ~",
  J: "[~ [f4,a4]@2 [f4,a4]@3 [f4,a4]@2 ~@2 [f4,a4]@2 b4 d5 c5 b4, b4@23 ~@9]/2", // F
  K: "~ [d#4,f#4]@2 ~@3 g#4@2, a4@11 ~@5, ~@6 [d#4,f#4]@9 ~", // D#m
  L: "[~ [d4,e4]@2 d4 d4 f#4 g4 g#4, b4@15 ~, ~@3 e4@2 ~@3]/2", M: "~@3 g#6, [a5,c#7], ~ e6@3, ~ e5",
  N: "~@3 f#6, [a5,b6], ~ e6@3, ~ e5", O: "~@7 f#6, [a5,a6]@3 g6, ~ e6@3, ~ e5, ~@5 g#6@3",
  P: "~@3 d6, [d5,f6], ~ d6@2 ~, ~ a5", Q: "~@3 a6, [d5,d7], ~ f6@3, ~ a5", R: "~@3 a6, [e5,c#7], ~ e6@3, ~ a5",
  S: "~@3 g#6, [e5,c7], ~ [d6,f6]@3, ~ a5", T: "~@3 c#6, [a4,a6], ~ c#6@2 ~, ~ e5",
  U: "e4 a4 b4@3 a4 b4 a4, [e5,c#6]@11 ~ [c#5,g#5]@4", V: "e4 a4 b4@3 a4 b4 a4, [e5,b5]@11 ~ [c#5,f#5]@4",
  W: "e4 a4 b4@2 ~ [c#5,g#5] [a4,g5] [c#5,f#5], [e5,a5]@9 ~@7", X: "d4 a4 b4@3 a4 b4 a4, [d5,f5]@11 ~@5",
  Y: "d4 a4 b4@3 a4 b4 a4, [f5,d6]@11 ~ [a5,e6]@4", Z: "e4 a4 b4@3 a4 b4 a4, [e5,c#6]@11 ~ [c#5,a5]@4",
  AA: "e4 g#4 d5@3 g#4 b4 e4, [f5,c6]@11 ~ [d5,g#5]@4", AB: "~@4 [a4,a5] [c5,c6] [b4,b5] [a4,a5]",
  AC: "[g#4,g#5]@11 ~ [a4,a5]@4", AD: "[g4,g5]@11 ~ [a4,a5]@4",
  AE: "~@2 [c5,e5,c6,e6]!2 ~@2 [c5,e5,c6,e6]@2, [f#4,f#5]@11 ~@5", AF: "[f4,f5]@11 ~ [e4,e5]@4",
  AG: "[d#4,d#5]@11 ~ [e4,e5]@4", AH: "~@2 [d5,f5,d6,f6]!2 ~@2 [d5,f5,d6,f6]@2, [a4,a5]@11 ~@5",
  AI: "~@4 [d5,d6] [f5,f6] [e5,e6] [d5,d6]", AJ: "[c#5,c#6] [f5,a5,f6,a6]@2 [f5,a5,f6,a6]@3 [d5,d6]@2",
  AK: "[c5,c6] [f5,a5,f6,a6]@2 [f5,a5,f6,a6]@3 [d5,d6]@2", // C F D
  AL: "[b4,b5] [f5,a5,f6,a6]@2 [f5,a5,f6,a6]@3 [f5,a5,f6,a6]@2", // B F
  AM: "[b4,b5]@2 [f5,a5,f6,a6]@2 [b4,b5] [d5,d6] [c5,c6] [b4,b5]", // B F B D C B
  AN: "[a4,a5] [d#5,f#5,d#6,f#6]@2 [d#5,f#5,d#6,f#6]@3 [g#4,g#5]@2", // A D#m G#
  AO: "[~ [d5,e5,d6,e6]@2 [d5,e5,d6,e6] [d5,e5] f#5 g5 g#5, b5@19 ~@13, b4@8 ~@8 [d6,e6]@15 ~]/2", // Dsus2
  AP: "[g#4,g#5]@3 [a4,a5] [g#4,g#5] [a4,a5] [g#4,g#5] [a4,a5]", // G# A G# A G# A
  AQ: "[g#4,g#5] [f#4,f#5]@3 ~ [a4,a5] [g#4,g#5] [a4,a5]", AR: "[g#4,g#5] [f#4,f#5]@3 ~ [f4,f5] [f#4,f#5] [g4,g5]",
  AS: "[g#4,g#5]@15 ~", AT: "[a#4,a#5]@3 [b4,b5] [a#4,a#5] [b4,b5] [a#4,a#5] [b4,b5]",
  AU: "[a4,a5] [g#4,g#5]@3 ~ [b4,b5] [a#4,a#5] [b4,b5]", AV: "[a4,a5] [g#4,g#5]@3 ~ [a4,a5] [g#4,g#5] [g4,g5]",
  AW: "[f#4,f#5]@15 ~", AX: "c#4 e4 f#4 c#4, [c#5,c#6] [c#5,b5]", AY: "e4 f#4 c#4 e4, [c#5,a5] [c#5,g#5]",
  AZ: "e4@4 f4@2 f#4@9 ~, [d5,b5]@15 ~", BA: "[d5,e5]@4 [d5,f5]@2 [d5,f#5]@9 ~", BB: "d4 f#4 g#4 d4, [f#5,d6] [e5,c#6]",
  BC: "f#4 g#4 d4 f#4, [d5,b5] [f#5,a5]", BD: "f#4@4 g4@2 g#4@9 ~", BE: "[c#5,f#5]@4 [c#5,g5]@2 [c#5,g#5]@9 ~",
  BF: "[g#4,g#5]@2 [f#4,f#5]@3 [f4,f5] [f#4,f#5] [g#4,g#5]", BG: "[e4,e5,c#6]@15 ~",
})).s("gm_piano").gain(0.3)

// chords · piano · "Piano à queue"
const piano_2 = note(`<
  ~ A@3 B C@2 D E F G H@2 I@2 J@2 ~@8 K@3 L@2 M N ~ A@3 B C@2 D O P Q R@2 I@2 J@2 S@3 T@4 S U@2 V@2 W@2 X@2 Y Z AA AB
>`.pickRestart({
  A: "a2 ~ [c4,e4] ~ e2 ~ [c4,e4] ~", B: "a2 ~ [c4,e4] ~@5", C: "a2 ~ [a3,c4] ~ e2 ~ [a3,c4] ~",
  D: "d3 ~ [a3,d4,f4] ~ a2 ~ [a3,d4,f4] ~", E: "d3 ~ [a3,d4,f4] ~@5", F: "d3@2 ~ d4, c#4@11 ~@5, ~ a2",
  G: "d3@2 ~ d4, c4@11 ~@5, ~ a2", H: "[d3 a2 d3 ~, b3@23 ~@9]/2", I: "[b2,b3] [d#3,a3]",
  J: "[~ b3 ~@2 [e2,g#3] e3 b2 e2, [e3,g#3] b2 ~@2, ~@12 b3@19 ~]/2", K: "a2 e2, f#3@15 ~", L: "d2 a2, f3@15 ~",
  M: "e2 a2, e3@15 ~", N: "[e3,d4] e3, e2@15 ~", O: "d3@2 [a3,d4,f4] ~@5", P: "d3@2 ~ f4, c#4@11 ~@5, ~ a2",
  Q: "d3@2 ~ f4, c4@11 ~@5, ~ a2", R: "[d3 a2 d3 ~, b3@15 ~]/2",
  S: "~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4], a2 e2", // A
  T: "~ [g#3,d4,e4] ~ [g#3,d4,e4] ~ [g#3,d4,e4] ~ [g#3,d4,e4], b2 e2", // E7
  U: "~ [c#3,a3] ~ [c#3,a3] ~ [c#3,a3] ~ [c#3,a3], a2 e2", V: "~ [d3,g#3] ~ [d3,g#3] ~ [d3,g#3] ~ [d3,g#3], b2 e2",
  W: "~ [d3,g#3] ~ [d3,g#3] ~ [d3,g#3] ~ [d3,g#3], e3 b2", X: "~ [a3,c#4] ~ [a3,c#4] ~ [a3,c#4] ~ [a3,c#4], a2 e3",
  Y: "~ [c#4,e4] ~ [c#4,e4] ~ [c#4,e4] ~ [c#4,e4], a2 e2", Z: "~ [a#3,e4] ~ [a#3,e4] ~ [a#3,e4] ~ [a#3,e4], f#2 f#3",
  AA: "~ [a3,d4] ~ [a3,d4] ~ [g#3,d4] ~ [g#3,d4], d3 e2", AB: "[a1,a2,e3,a3,c#4,e4]@15 ~",
})).s("gm_piano").gain(0.25)

stack(piano, piano_2)