Strudelify

L'immenso

Amedeo Minghi

KeyC majorTempo53 bpm
0:00/0:00
// L'immenso — Amedeo Minghi
// 53 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 5 string ensemble 2 (copy of ch 1 piano)
// note: Full arrangement: all 59 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(53/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
const piano = note(`<
  A B C D E F@2 G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU
  AV AW AX AY AZ BA BB BC BD@3
>`.pickRestart({
  A: "[e3,g3]@8 ~@14 b3@3 ~@4 b3@3, c3, c4@22 ~@3 [e3,g3,c4]@7", // Em C
  B: "[c3,f3]@2 ~@4 f3!2, a3@23 ~@9, f2@15 ~@9 [c3,a3]@8", C: "[e3,g3]@4 [e3,g3,c4]@4 [g3,b3]@4 b3!2 c4@2, ~@3 [e3,g3]",
  D: "[c3,f3,a3]@4 ~ d4 ~@2 [f3,a3]@4 ~@2 d4@2, f2 [d2,d3,c4], ~ [f3,a3] ~@2, ~@2 c4 e4@5", // F D7 F
  E: "[g3,c4]@4 ~@7 [g3,c4,e4]!3 [g3,c4,d4]@2, [c2,c3]@7 ~, e4@11 ~@5, ~ [e2,e3]", // C5 C Gsus4 C E
  F: "[[c3,f3,a3]@4 f3@4 ~@4 [f3,c4] f3 ~@2 c4@8 b3@4 b3@2 c4@2, f2@8 ~@5 c4@3 c2@16, ~@2 a3@5 g3@3 ~@4 [e3,g3]@2, ~@32 c3 ~@31]/2", // F F5 Em
  G: "[c3,f3,a3] ~@2 [f3,a3,c4], c4@3 ~, f2 ~", H: "[e3,g3]@2 ~@5 g3, [c2,c3], c4@3 c4, ~@13 e3@3", I: "[e3,g3,d4] ~@3",
  J: "c4@31 ~, a3@3 ~, f2 ~", K: "c4@4 b3@2 b3!2, g3 ~@3", L: "f2@16 d2@15 ~, c4, a3 ~@3",
  M: "[g3,c4]@2 c4@2 [g3,b3]@2 [g3,b3] g3, c3, ~@3 e3", N: "[f3,a3]@8 [f3,a3]@8 ~@8 [f3,a3,c4]@7 ~, c4@3 ~, f2 [d2,d3]",
  O: "e3@8 [g3,c4]@8 [e3,g3,b3]@8 [e3,g3,b3]@7 ~", P: "[f3,a3]@2 [f3,a3]@2 [f3,a3]@2 a3 f3, c4@3 c4, f2 d2",
  Q: "[e3,g3,c4]@2 e3!2 [e3,g3,b3]@2 [e3,g3,b3]!2, [c2,c3], ~ [g3,c4] ~@2", // C Em C C5
  R: "[f3,a3,c4]@2 [f3,a3]@2 a3@2 [f3,a3,c4]!2, f2 d2, ~ c4@2 ~, ~@4 f3 ~@3", S: "[e3,g3,c4]!2 [e3,b3] ~, [c2,c3]",
  T: "[f3,a3]@2 [f3,a3]@2 [f3,a3,c4]@2 [f3,a3,c4]!2, [f2,c4] [d2,d3]", // F F5 D
  U: "[e3,g3]@2 ~@2 [e3,g3]@2 ~ b3 [e3,g3]@2 [e3,g3]@2 [e3,g3]@2 ~ b3, [c2,c3,c4]!2, ~@3 [e3,g3] ~@3 [e3,g3]", // Em C Em
  V: "[e3,g3]@2 [e3,g3]@2 [e3,g3]@2 ~ c3 [e3,g3]@2 e3 [e3,b3] [e3,g3]@2 [e3,g3,b3]@2, c4@3 ~, [c2,c3]@2 [c2,c3] [c2,c3,c4], ~@3 [e3,g3] ~ g3 ~@2", // Em E5 Em C Em
  W: "[f3,a3]@4 ~ [f3,a3]@3 [f3,a3]@4 ~@4 f3@4 ~@2 b3@2 [f3,a3,c4]@4 [f3,a3,c4]@4, c4@3 ~, f2 [d2,d3], ~@5 f3 ~@2", // F D
  X: "[e3,g3]@2 ~@2 e3@2 e3@2 [e3,g3,b3]@2 e3 [e3,g3,b3] [e3,g3]@2 [e3,g3,b3]@2, [c2,c3], c4 [g3,c4] ~ c4", // Em C C5
  Y: "[f3,a3]@2 a3@2 [f3,a3]@2 ~@2 [f3,a3]@2 ~ [f3,b3] [f3,a3,c4]@2 [f3,a3,c4]@2, c4@3 ~, f2 [d2,d3], ~@5 a3 ~@2", // F Fdim F D
  Z: "[e3,g3]@4 ~@4 [e3,g3]@4 [e3,g3]@4 [e3,g3]@4 e3@4 [e3,g3]@4 [e3,g3]@3 ~, [c2,c3]@31 ~, c4!2 b3!2", // Em C
  AA: "[f3,a3]@4 f3@2 f3@2 f3@4 f3@4 a3@8 [f3,a3]@4 a3@3 ~, f2@16 [d2,d3]@15 ~, c4@8 c4@16 c4@7 ~, ~@2 a3@2 f3 ~@3", // F D
  AB: "[e3,g3]@4 e3@4 e3@3 e3@4 ~@9 [e3,g3]@4 [e3,g3]@4, [c2,c3,c4]@15 [e3,g3]@5 ~@12, ~@8 g3@7 b3@16 ~, ~ [c2,c3]", // Em C Em C
  AC: "[f3,a3]@2 [f3,a3]@2 [f3,a3]@2 ~ [d2,d3] [f3,a3]@2 f3@2 f3@2 f3@2, [f2,c4] [d2,d3,c4], ~@3 [f3,a3] ~@2 a3@2", // F D F F5 D7 F
  AD: "[c2,c3,e3,g3,c4]@11 ~@5", AE: "[f3,a3]@8 [f3,a3]@8 ~@8 f3 ~@3 g3@4, c4 [d2,d3], ~@24 [a3,c4]@5 ~@3, ~@13 f3@3",
  AF: "[e3,g3,d4]@2 [e3,g3,c4]@2 [g3,b3]@2 b3 [e3,g3,b3], [c2,c3]", AG: "[f3,a3]@8 a3@8 [d2,d3]@15 ~, c4@31 ~, f2 ~",
  AH: "[g3,c4]@4 g3@4 [e3,g3]@3 ~@3 e3@2, [c2,c3], e3 ~ c4@4 [c4,e4]@2, ~@4 e3@2 ~@5 g3@5", // C5 Em C
  AI: "[c4,f4] c4 [f3,a3,c4] [a3,c4], [f2,f3] [d2,d3], a3@3 ~@5 f4@24, ~@2 a3 ~@3 f3 ~", // F5 F Am F D
  AJ: "e3@2 ~@2 e3@4 e3@4 e3@4 [g3,b3]@8 [e3,g3,b3]@4 [e3,g3,b3]@3 ~, [c2,c3]@31 ~, [g3,c4]@2 [g3,c4]@2 e3 ~@3", // G Em C C5
  AK: "[f3,a3]@8 a3@6 e2@2 [f3,a3]@8 [f3,a3,c4]@4 [f3,a3,c4]@3 ~, c4@3 ~, f2@16 [d2,d3]@15 ~, ~@2 f3 ~@5", // F D
  AL: "[e3,g3]@2 e3@2 e3@2 e3 [e3,g3,b3] [e3,g3]@2 [e3,g3]@2 [e3,g3]@2 [e3,g3,b3]@2, [c2,c3]!2, c4 [g3,c4] c4!2", // Em C C5
  AM: "[e3,g3]@4 e3@4 e3@4 e3@3 g2 [e3,g3]@4 [e3,g3]@2 [e3,g3,b3]@2 g2 [e3,g3]@3 [e3,g3,b3]@4, [c2,c3]@16 ~@9 [c2,c3,c4]@7, c4@8 [g3,c4]@8 [c3,c4]@9 ~@7, g2 ~@14 c2@10 ~@7", // Em C C5 C
  AN: "[c3,f3]@4 ~@4 f3@4 ~@2 f2@2 f3@4 f3@4 f3@3 f3@4 ~, [f1,f2]@15 ~ [d2,d3]@16, a3 [a3,c4]!3, ~ c3@3 ~@4, ~@3 f3 ~@4", // F5 F D Am
  AO: "e3@2 e3!2 e3@2 ~ g2 [e3,g3]@2 e3!2 [e3,g3,c4]@2 [e3,g3,b3]@2, [c2,c3]!2, [g3,c4]@8 [g3,c4]@8 b3@8 b3 ~@7, ~@3 e3 ~@4", // Em C Em C C5
  AP: "[c3,f3]@4 c4@4 f3@4 ~@2 f2@2 f3@4 f3@4 f3@4 ~ g2@2 ~, f2@3 f3 ~@3 f3, a3 [a3,c4]!3, ~ c3@3 [d2,d3]@4", // F5 Am D
  AQ: "[e3,g3,c4,d4]@4 e3@2 ~ g2 [e3,g3]@2 e3 ~@4 [c2,c3], [c2,c3]@8 [c2,c3]@7 ~, ~@8 [g3,c4,e4]@8 c4@8 [g3,c4,e4]@7 ~, ~@6 e3@2 ~@3 e3@3 e3@2", // C Em C
  AR: "f3@2 f3@2 f3@2 ~ f2 [a3,c4,f4]@4 f3@2 ~ g2, f2@3 f3 [d2,d3]@4, [a3,c4,f4]@2 [a3,c4,f4]@2 f3 ~ [a3,c4,f4]@2, ~@7 f3", // F D F
  AS: "[c4,e4]@3 ~@4 g2 e3@2 ~@5 c3, [c2,c3]!2, g3@2 ~ e3@3 e3@2 ~@2 e3@4 e3@2, ~ [g3,c4,e4] [g3,b3] [g3,b3,e4]", // C G Em
  AT: "f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@3 ~, f2@16 [d2,d3]@15 ~, [a3,c4]@8 [a3,c4]@8 [a3,c4]@8 [a3,c4]@7 ~", // D Am
  AU: "[e3,g3]!2 e3!4 [e3,g3] [e3,g3,b3], [c2,c3]!2, c4 [g3,c4]!2 c4", // Em C C5
  AV: "[f3,a3]@7 ~ f3@4 f3@4 [f3,a3,c4]@8 f3@4 f3@4, [f2,c4] [d2,d3], ~ a3 ~ [a3,c4]", // F F5 D Am
  AW: "[e3,g3,c4]@2 [e3,g3,c4]@2 [g3,b3]@2 [e3,g3,b3] [e3,g3,c4], [c2,c3], ~@16 e3@5 ~@7 b3 ~@3", // C G Em C
  AX: "[a3,c4]@8 [a3,c4]@7 ~ f3@3 ~ f3@4 f3@3 f3@4 ~, f2 d3, f3@4 ~@4 f3@4 ~@3 d2@17, ~@2 [a3,c4]!2, ~@16 a2 ~@15", // Am
  AY: "[g3,c4]@2 e3!2 [e3,g3,b3]@2 e3!2, [c2,c3], e3 ~ [g3,c4]@2 ~@2 [g3,b3]@2", // C5 Em C C5 G
  AZ: "[c3,f3,a3]@8 [f3,a3]@4 [f3,a3]@4 f3@4 ~@2 a3@2 f3@3 f3@4 ~, f2 [d2,d3], ~ c4 [a3,c4]!2, ~@5 f3 ~@2", // F D Am
  BA: "e3@2 ~@5 g2 [e3,g3,b3]@4 [g3,b3]@4, [c2,c3]!2, [g3,c4]!2 ~@2, ~ e3@2 e3 ~@2 e3 ~", // Em G C C5
  BB: "[f3,a3] ~ a3 [f3,a3], c4, f2 [d2,c3]", BC: "[e3,g3,c4] ~ [e3,g3] ~, [c2,c3] c4",
  BD: "[~ e3@7 ~@27 d4@4 ~@4 e4@48 ~@5, [c2,c3]@20 g2@25 ~@3, c4@22 ~ c4@8 ~@8 c2@51 ~@6, g3@8 ~@11 g3@11 g3@11 [c3,e3,g3]@50 ~@5, ~@13 d4@4 ~@4 c4@24 ~@3]/3", // C
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note(`<
  A B C D E F G H I J K L M N O P Q ~ R S ~ T ~ U V W X Y Z AA ~ AB AC AD AE AF AG AH AI@2 AJ AK AL AM AN AI ~ AO ~ AP
  AQ AR AS AT AU AV AW ~@2
>`.pickRestart({
  A: "~@9 [e3,g3]@7 [e3,g3]@8 ~@8, c2", B: "~ [c3,f3]!2 ~, ~ d2", C: "~@2 e3 ~, [c2,c3]", D: "~@3 [f3,a3]",
  E: "~@4 [g3,c4]@4 [g3,c4]@3 ~@5", F: "~ c3 [d2,c3]@2, ~@2 f3 ~", G: "e3 [e3,g3]!2 ~",
  H: "~ [c3,f3,a3] [d2,d3]@2, ~@2 [f3,a3] ~", I: "~@8 [e3,g3]@8 [e3,g3]@11 ~@5", J: "~ d4 e4@2, [c2,c3], ~ [e3,g3]@3",
  K: "~@3 [f3,a3], c3, f3@3 ~, ~ d2", L: "e3 [e3,g3]!3, [c2,c3]", M: "f3 [f3,a3]!3, ~ d3", N: "e3 [e3,g3] e3 ~, c2",
  O: "~@2 [f3,a3] ~", P: "[g3,c4] e3 ~@2, [c2,c3]@31 ~", Q: "~@13 f3 a3@2, ~ d3", R: "~@5 f3 ~@2, ~@16 d3@15 ~",
  S: "~@16 g3@7 ~ [e3,g3,b3]@4 [e3,g3,b3]@4", T: "~@5 e3@3 ~@24, ~ g3 ~@6", U: "~@3 [f3,a3] a3!2 ~@2",
  V: "~ [e3,g3] ~@6", W: "~@5 f3@3 ~@4 [f3,a3]@4 ~@16", X: "~ [e3,g3] ~@3 g3 ~@2",
  Y: "~@4 a3@4 ~@12 f3@2 [f3,b3]@2 ~@4 f3@3 ~", Z: "~ g3 ~@3 [e3,g3] ~@2", AA: "~@5 a3 ~@2", AB: "f2@2 [f3,a3,c4] ~",
  AC: "~@4 e3@2 [e3,g3] ~", AD: "~@8 f3@8 [f3,a3]@8 [f3,a3]@7 ~", AE: "~@4 e3@4 ~@4 e3@4 ~@4 e3@5 ~@7",
  AF: "~ a3 ~ a3 ~@3 f3", AG: "~@5 e3 ~@2", AH: "~@3 f3 ~@4", AI: "~ g3 ~@6", AJ: "~@4 f3@4 ~@23 g2",
  AK: "~@10 g3!2 ~@4", AL: "~ f3 ~@6", AM: "~@5 g3 ~@2", AN: "~@5 f3 ~@2", AO: "~@16 g2 ~@15", AP: "~@21 e3@3 ~@8",
  AQ: "~ f3 ~ f3 ~@4", AR: "~ e3 ~@6", AS: "~@16 a2 ~@13 g2@2", AT: "~@7 e3", AU: "~ [f3,a3] f3 ~",
  AV: "~@8 [e3,g3,c4]@6 b3@2 ~@9 [e3,g3]@7, ~ c3, ~@17 c2@15", AW: "~@4 e3@11 ~, ~@8 g3@11 ~@13",
})).s("gm_piano").gain(0.18)

// other · string ensemble 2
const string_ensemble_2 = note("<~@21 A B C@2 D@2 E@2 F G ~@7 H I@2 J K@3 L M N@4 O P Q@3 ~@3>".pickRestart({
  A: "~@29 [b4,b5]@3", B: "[c5,c6]@21 ~@4 c5@4 [b4,b5]@3, ~@21 b5@3 c6@5 ~@3, ~@11 b4@2 ~@3",
  C: "[~ [a4,a5]@21 [b4,b5]@2 [c5,c6]@5 ~ d6@4 [g4,g5]@18 ~ [b4,b5]@3 [c5,c6]@3 [b4,b5]@5, ~@29 d5@5 ~@30]/2", // A B C G B C B
  D: "[[g4,g5]@2 ~ a5@18 [b4,b5]@2 [c5,c6]@5 [d5,d6]@9 [e5,e6]@18 [f5,f6]@3 [e5,e6]@2 ~@2 c5@2, ~@2 a4@19 ~@39 [d5,d6]@2 ~@2, ~@61 c6@3]/2", // G B C D E F E D
  E: "[[a4,a5]@21 [b4,b5]@3 [c5,c6]@3 [d5,d6]@9 [g4,g5]@12 ~@5 [e5,e6]@2 [f5,f6]@2 [e5,e6]@2 [d5,d6]@2 [e5,e6]@2 ~]/2", // A B C D G E F E …
  F: "[g5,g6]@2 [f5,f6]@19 [a4,a5]@3 [f5,f6]@8", G: "~ [c5,c6]@5 ~@10, ~ [e5,e6]@3 ~@28",
  H: "~@16 [c5,c6]@13 [b4,b5]@3", // C B
  I: "[[c5,c6]@22 [b4,b5]@2 [c5,c6]@4 [b4,b5]@3 [g4,g5]@4 [a4,a5]@18 [b4,b5]@3 [c5,c6]@4 [d5,d6]@4]/2", // C B C B G A B C …
  J: "~ g5@21 [b4,b5]@2 [c5,c6]@4 [b4,b5]@2 [g4,g5]@2, g4@11 ~@5", // B C B G
  K: "[~ [a4,a5]@20 [b4,b5]@3 [c5,c6]@4 [d5,d6]@7 [e5,e6]@20 [f5,f6]@3 [e5,e6]@2 [d5,d6]@2 [c5,c6]@3 [a4,a5]@20 [b4,b5]@3 ~ c6@3 [d5,d6]@4, ~@22 c5 ~]/3", // A B C D E F E D …
  L: "~ [g4,g5]@21 [e5,e6]@2 ~ f5@2 ~ [d5,d6]@2 [e5,e6]@2, ~@24 f6@2 ~ [e5,e6]@2 ~@3", // G E D E
  M: "~ [g5,g6]@3 [f5,f6]@17 [a4,a5]@3 [f5,f6]@8", // G F A F
  N: "[~@2 [e5,e6]@2 [c5,c6]@18 [b4,b5]@2 [c5,c6]@3 [b4,b5]@3 [g4,g5]@5 ~ a5@17 [b4,b5]@2 [c5,c6]@4 [d5,d6]@4 [g4,g5]@22 [b4,b5]@3 [c5,c6]@4 [b4,b5]@3 [g4,g5]@3 [a4,a5]@19 [b4,b5]@3 [c5,c6]@3 [d5,d6]@5, ~@35 a4@18 ~@75]/4", // E C B C B G B C …
  O: "~@2 [e5,e6]@21 [f5,f6]@3 ~@4 [c5,c6]@2, ~@13 e6 d6 ~, ~@27 e5@2 d5@2 ~", // E F C
  P: "[a4,a5]@21 [b4,b5]@3 [c5,c6]@4 [d5,d6]@4", // A B C D
  Q: "[[c5,c6]@15 ~@7 [e5,e6]@2 ~@5 d6@2 [e5,e6]@3 g6@3 f6@17 [a4,a5]@3 f6@9 [e5,e6]@3 ~@9 [b4,b5]@2 [c5,c6]@14 b5@2, ~@15 b4@17 ~@64, ~@12 f5 e5 d5 ~@33, ~@25 f6@2 e6@2 ~@67]/3", // C E A E B C
})).s("gm_string_ensemble_2").gain(0.19)

// other · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@21 A ~@9 B@2 C D E F G H ~@14 I J K L ~@2>".pickRestart({
  A: "~ [c5,c6]@31", B: "[[c5,c6]@8 ~@23 d6@10 c6@7 b5@8 c6@6 ~@2]/2", C: "a5 f6@31, ~ a5@10 ~@21",
  D: "~ g6, g5, ~ e6@31", E: "~@9 a6@22 ~, [a5,f6]", F: "[g5,e6]@8 [d6,g6]@7 ~", G: "[c6,c7]@15 ~@17",
  H: "~@7 [b4,b5] ~@8", I: "~@15 b5@17", J: "~ g5@3 ~ f5@17 ~@2 f5@8", K: "~@5 c5@9 ~@16 b4@2, ~@2 c6@5 ~@9",
  L: "~ [c5,c6]@16 ~@15", // C
})).s("gm_string_ensemble_2").gain(0.1)

stack(piano, piano_soft, string_ensemble_2, string_ensemble_2_soft)

More by Amedeo Minghi