Strudelify

Les solos sous les draps

Mozart L'opera Rock

KeyA majorTempo130 bpm
0:00/0:00
// Les solos sous les draps — Mozart L'opera Rock
// 130 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/5142578; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 A C D E F G H@2 I ~ J K L M N@2 O P Q R S T U V W X Y@2 Z AA AB@2 AC X AD@2 AE AF AG AH AI AJ AK@2 I ~ D AL F AJ
  AK@2 O P AM R S T U V W X AN@2 Z AA AO@2 AP X AD@2 AQ AR AS AT AU@2 AV@2 AW AX AY ~ AZ BA BB BC BD BE BF BG BH BI U V
  W X AN@2 Z AA AO@2 AP X BJ@2 BK BL BM@2 BN BO BP@2 BQ@3
>`.pickRestart({
  A: "c#5@2 d5@2 b4@2 c#5@2 a4 g#4 a4 b4 a4@2 e4@2", B: "c#5 d5 b4 c#5 a4 ~ e5 ~", C: "c#5 d5 b4 c#5 a4@3 ~",
  D: "~@2 e4@2 e4@2 e4@2 e4 d4@3 c#4@4", E: "~@2 e4@2 e4@2 e4@2 e4 c#4@3 a4@4", F: "~@2 e4@2 e4@2 e4@2 e4 d4@3 c4@4",
  G: "~@2 e4@2 e4@2 e4@2 e4@3 f4@3 g4@2", H: "[g4@6 d4@13 ~@3 d4@2 d4@4 d4@2 e4@2]/2", I: "f4 c4",
  J: "~@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 e4 d4@3 c#4@2 ~@2", K: "~@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 e4 c#4@3 a4@4",
  L: "~@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 e4 d4@3 c4@4", M: "~@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 e4@3 f4@3 g4@2, ~ c4",
  N: "[[d4,g4]@3 ~@2 b3@2 ~@4 g3 d4@2 e4@2, ~@6 d4@13 ~@13]/2", O: "[g#3,f4]@11 ~ g4@2 f4@2", P: "[g#3,f4,g#4]@15 ~",
  Q: "a4@4 ~ [a4,c#5]!3", R: "[a4,c#5]!3 ~@3 a4@2", S: "[a4,c#5,a5]@2 ~@5 a5", T: "[a4,a5] [f#4,f#5] [e4,e5] [c#4,c#5]",
  U: "[c#5,c#6] [a4,a5] [a4,e5] [a4,d5]", V: "[a4,c#5] ~@2 [a4,c#5]", W: "[g4,e5]@11 ~@3 [c5,e5]@2",
  X: "[f4,c5,f5] [g4,e5,g5]", Y: "[~ b5@3 [g4,g5]@4 [g4,d5]@4 [a4,c5]@2 [g4,b4]@6 ~@8 a4@4, g4 ~@7]/2",
  Z: "[c#5,e5,a5]@11 ~@3 [c#5,a5]@2", AA: "[c#5,a5] [c#5,f#5] [a4,e5] [a4,c#5]",
  AB: "[[c#5,c#6]@4 [a4,a5]@4 [a4,e5]@4 [a4,d5]@2 [a4,c#5]@13 ~ [a4,c#5]@4]/2", AC: "[e4,e5]@11 ~@3 [e4,e5]@2",
  AD: "[[b4,f#5,b5]@11 ~ [c#5,a5]@2 [b4,g#5]@17 ~]/2", AE: "[a4,c#5,e5,a5] ~", AF: "e5 f#5 d5 e5 c#5@2 ~@2, c#5 ~",
  AG: "~@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [b3,d4]@3 c#4@4", // C#m Bm
  AH: "~@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] c#4@3 [c#4,a4]@4", // C#m F#m
  AI: "~@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4] [b3,d4]@3 [a3,c4]@4", // C Bm Am
  AJ: "~@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@3 [c4,f4]@3 [c4,g4]@2", // C F5 C5
  AK: "[[d4,g4]@3 ~@2 [g3,b3]@2 ~@4 g3 d4@2 e4@2, ~@6 d4@13 ~@13]/2", // G5 G
  AL: "~@2 [e4,a4,c#5]@2 [e4,a4,c#5]@2 [e4,a4,c#5]@2 [e4,a4,c#5] [e4,a4,c#5]@3 [a4,c#5,a5]@4", // A
  AM: "[c#4,e4,a4]@4 ~ [a4,c#5]!3", AN: "[[g4,b5]@2 [g4,g5]@2 [g4,d5]@2 [a4,c5] [g4,b4]@3 ~@4 a4@2]/2",
  AO: "[[c#5,c#6]@2 [a4,a5]@2 [a4,e5]@2 [a4,d5] [a4,c#5]@2 ~@5 [a4,c#5]@2]/2", AP: "[e4,e5]@2 ~@5 [e4,e5]",
  AQ: "~ c#5@2 d5, [a4,e5,a5]@15 ~", AR: "~@4 c#5@11 ~, [a4,e5,a5]@15 ~", AS: "[f#4,a4,d5]@15 ~",
  AT: "[f#4,a4,d5,f#5]@15 ~", AU: "[e4@4 e4@4 e4@4 e4@2 d4@4 e4@9 ~ c4@2 d4@2]/2",
  AV: "[e4@2 e4@2 a4@2 e4 d4@2 c4 a3@4 a3 b3]/2", AW: "c4@2 d4 a3@2 b3@2 c4", AX: "b3@2 g3@9 ~ b3@4", AY: "a3 ~@3",
  AZ: "d4 f4!2 a4", BA: "a4 [c5,e5]!2 [e5,g5]", BB: "[c5,f5]@8 [c5,f5]@3 [c5,f5]@2 [c5,f5]@3", BC: "[d5,g5] [b4,d5,g5]",
  BD: "c#5@2 d5@2 b4@2 c#5@2 a4 g#4 a4 b4 a4@2 e4@2, a5 ~", BE: "c#5 d5 b4 c#5 a4@4, e5 ~",
  BF: "[c#5,e5]@2 [d5,f#5]@2 [b4,d5]@2 [c#5,e5]@2 a4 g#4 a4 b4 a4@2 e4@2, ~ c#5", BG: "e5 f#5 d5 e5 c#5 ~ a4@2",
  BH: "[f#5,a5]@11 ~@3 a5@2", BI: "a5 f#5 e5 c#5", BJ: "[[b4,f#5,b5]@11 ~ [c#5,a5]@2 [b4,g#5]@13 ~ a3@4]/2",
  BK: "[c#4,e4,a4]@11 ~@3 [c#4,a4]@2", BL: "[c#4,a4] [c#4,f#4] [a3,e4] [c#4,a4,c#5]",
  BM: "[[a4,c5]@4 [f4,a4]@4 [d4,f4]@4 d4@2 c4@13 ~ a3@4]/2", BN: "a4@11 ~@3 [b3,a4]@2", BO: "a4 f#4 e4 c#4, b3@15 ~",
  BP: "[c#5@15 ~ c#5@15 ~, [e4,a4]@15 ~]/2", BQ: "[[e5,c#6]@2 [e5,a5]@2 e5@2 [a4,d5] [a4,c#5]@16 ~]/3",
})).s("gm_piano").gain(0.4)

// chords · piano
const piano_2 = note(`<
  ~@4 A@2 B@2 C@2 D E F@2 G@2 H@2 I J K ~ L@2 M@2 N@2 O P M@2 Q@2 N@2 R S T U ~@8 V W X@2 ~@22 Y Z AA AB AC AD AE AF AG
  AH AI AJ AK AL AM AN AO AP AO AQ AR AS AT AU AV AW AX AY M@2 Q AZ N@2 BA S M@2 BB BC BD BE BF BG BF BH BI
>`.pickRestart({
  A: "~ e3!2 ~@2 e3!3, a2!2, ~@3 e3@2 ~@3", B: "~ c3!2 ~@2 c3!3, f2!2, ~@3 c3@2 ~@3",
  C: "~ d3!2 ~@2 d3!3, g2!2, ~@3 d3@2 ~@3", D: "~ c3!2 ~@2 c3!3, [f2,a2]!2, ~@3 c3@2 ~@3",
  E: "~ c3!7, [f2,g#2]@3 [f2,g#2]@3 [f2,g#2]@2", F: "e3 [c#3,e3]@2 e3!2 [c#3,e3]@2 [c#3,e3], [a2,a3]!2, ~@3 c#3@2 ~@3",
  G: "f2 [f2,g2]@2 f2!2 [f2,g2]@2 [f2,g2], c3!2, ~@3 g2@2 ~@3", // Fsus2
  H: "g2 [g2,b2]@2 g2!2 [g2,b2]@2 [g2,b2], [d3,g3]!2, ~@3 b2@2 ~@3", I: "[f2,c3,f3]@3 [f2,c3,f3]@3 [f2,c3,f3]@2",
  J: "[f2,g#2,c3,f3]@15 ~", K: "~ a3@7, e2, ~ [a2,c#3]@15",
  L: "[f#2,c#3]@2 [f#2,c#3] [f#2,c#3]@3 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3] [f#2,c#3]@3 [f#2,c#3]@2", // F#5
  M: "[a2,c#3]@2 [a2,c#3] [a2,c#3]@3 [a2,c#3]@2 [a2,c#3]@2 [a2,c#3] [a2,c#3]@3 [a2,c#3]@2, e3", // A
  N: "[g2,e3]@2 [g2,e3] [g2,e3]@3 [g2,e3]@2 [g2,e3]@2 [g2,e3] [g2,e3]@3 [g2,e3]@2, c3", // C
  O: "[g2,d3]@2 [g2,d3] [g2,d3]@3 [g2,d3]@2 [g2,d3]@2 [g2,d3] [g2,d3]@3 [g2,d3]@2", // G5
  P: "[g2,b2]@2 [g2,b2] [g2,b2]@3 g2@2 [g2,c#3]@2 [g2,c#3] c#3 [a2,c#3]@4, ~@3 b2@5, ~@11 g2@5", // G Gdim A
  Q: "[f#2,a2]@2 [f#2,a2] [f#2,a2]@3 [f#2,a2]@2 [f#2,a2]@2 [f#2,a2] [f#2,a2]@3 [f#2,a2]@2, c#3", // F#m
  R: "[b2,d3,f#3]@2 [b2,d3,f#3] [b2,d3,f#3]@3 [b2,d3,f#3]@2 [b2,d3,f#3]@2 [b2,d3,f#3] [b2,d3,f#3]@3 [b2,d3,f#3]@2, f#2", // Bm
  S: "[b2,e3,g#3]@2 [b2,e3,g#3] [b2,e3,g#3]@3 [b2,e3,g#3]@2 [b2,e3,g#3]@2 [b2,e3,g#3] [b2,e3,g#3]@3 [b2,e3,g#3]@2, g#2", // E
  T: "[c#3,c#4]@2 [d3,d4]@2 [b2,b3]@2 [c#3,c#4]@2 [a2,a3] [g#2,g#3] [a2,a3] [b2,b3] [a2,a3]@2 [e2,e3]@2", // C# D B C# A G# A B …
  U: "[c#3,c#4] [d3,d4] [b2,b3] [c#3,c#4] [a2,a3]@2 a2@2", V: "~ a3, a2", W: "a2@2 ~ [b2,b3], ~ [a2,a3]", X: "g2!2, g3",
  Y: "~@7 e3, a1@3 a3, ~ a2@7, ~ c#3@3, ~@3 e3 a3 c#4@3", Z: "~@7 a3, a2@3 c#4, ~ c#3@7, ~ e3@3, ~@3 a3 c#4 e4@3",
  AA: "~@13 c#4@2 a3, a2@3 d4, ~ d3@7, ~ f#3@3, ~@3 a3 d4 f#4@3",
  AB: "~@13 d3@2 a2, d2@11 d4 a3@4, ~ f#2@15, ~@3 a2@4 a3 d4 f#4@7, ~@4 d3 f#3@11", AC: "[c3,e3,a3]!2, a2",
  AD: "[b2,e3,g#3]!2, g#2", AE: "[c3,e3]!2, g2", AF: "[c3,a3]!2, f#2", AG: "[c3,a3]!2, f2", AH: "[b2,d3,g3]!2, g2",
  AI: "[c3,e3]!2, a2", AJ: "~@7 [d#2,d#3], c3@3 [e2,e3], e3@5 [f2,f3]@3, ~@3 [g2,d3,g3]@5, ~ [f#2,f#3]",
  AK: "~@3 a2, d2, ~ a2@2 ~, ~ f2", AL: "~@3 a2, e2, ~ a2@2 ~, ~ c3", AM: "~ [a2,c3]!3, f2", AN: "~ [b2,g3]!3, g2",
  AO: "c#3@2 d3@2 b2@2 c#3@2 a2 g#2 a2 b2 a2@2 e2@2, a2 ~", AP: "c#3 d3 b2 c#3 a2 c#3 a2 c#3, a2 ~",
  AQ: "~ a1, a2, ~ e2@3", AR: "~@7 a3, f#3!2, ~ a3@2 a3@2 a3@2 ~, ~ c#4@2 c#4",
  AS: "~@7 f#3, f#3@5 f#3@2 ~, ~ a3@2 a3@3 a3@2, ~ c#4@3, ~ c#3",
  AT: "~@3 c#3 ~@3 e3, a2, ~ c#3@2 ~ c#3@4, ~@2 e3@3 e3@2 ~, ~@3 a3",
  AU: "~@7 c#3, a2, ~ c#3@2 c#3@2 c#3@2 ~, ~ e3@2 e3, ~ a3", AV: "~@7 c3, g2!2, ~ c3@2 c3@2 c3@2 ~, ~ e3@2 e3",
  AW: "~@7 c3, f2!2, ~ c3@2 c3@2 c3@2 ~, ~ e3@2 e3", AX: "~@7 [g2,b2,g3], g2@4 g2@3 ~, ~ b2@2 b2@2 b2@2 ~, ~ d3@2 d3",
  AY: "[g2,b2,g3]@2 [g2,b2,g3] [g2,b2,g3]@3 [g2,g3]@2 [g2,c#3,g3]@2 [g2,c#3,g3] [c#3,g3] [a2,c#3,g3]@4, ~@3 b2@5, ~@11 g2@5", // G Gdim C#dim A7
  AZ: "[f#2,a2]@2 [f#2,a2] [f#2,a2]@3 [f#2,a2]@2 [f#2,a2]@2 [f#2,a2,c#3] [f#2,a2,c#3]@3 [f#2,a2,c#3]@2, c#3@5 ~@3", // F#m
  BA: "[b2,d3]@2 [b2,d3] [b2,d3]@3 [b2,d3]@2 [b2,d3,f#3]@2 [b2,d3,f#3] [b2,d3,f#3]@3 [b2,d3,f#3]@2, f#2", // Bm
  BB: "[a2,c3]@2 [a2,c3] [a2,c3]@3 [a2,c3]@2 [a2,c3]@2 [a2,c3] [a2,c3]@3 [a2,c3]@2, f2", // Am
  BC: "[a2,f3]@2 [a2,f3] [a2,f3]@3 [a2,f3]@2 [a2,f3]@2 [a2,f3] [a2,f3]@3 [a2,f3]@2, f2", // Dm
  BD: "[b2,g3]@2 [b2,g3] [b2,g3]@3 [b2,g3]@2 [b2,g3]@2 [b2,g3] [b2,g3]@3 [b2,g3]@2, g2", // Em
  BE: "[b2,d3]@2 [b2,d3] [b2,d3]@3 b2@2 [b2,e3]@2 [b2,e3] [b2,e3]@3 [b2,e3]@2, g2, ~@3 d3@5", // Bm E5
  BF: "~@7 [e2,e3], [c#3,c#4]@3 [c#3,c#4]@3 [a2,a3]@2, ~ [d3,d4]@7, ~@4 [b2,b3]@6 [a2,a3] [b2,b3]@5, ~@8 [a2,a3] [g#2,g#3]@7", // E C# A D B A B A …
  BG: "~@2 a2!2, [c#3,c#4]@3 [c#3,c#4]@5, ~ [d3,d4]@7, ~ [b2,b3]@3, ~ a3", // C# D B
  BH: "~ [a2,a3], [c#3,c#4]@3 [c#3,c#4]@5, ~ [d3,d4]@7, ~ [b2,b3]@3", BI: "~ e3@7, a1, ~ [a2,c#3]@15",
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@40 A B C D E@2 D F G H I@2 J K L@2 M@2 N@2 O@2 P@2 Q R O@2 S@2 P@2 T U ~@47>".pickRestart({
  A: "c#3 ~@13 c#3@2, a2!2, ~ d3@15, ~ e3@2 ~ e3@8 e3@4, ~ c#3@2 c#3@2 c#3@2 ~",
  B: "~@7 c#3, a2!2, ~@2 c#3@4 c#3@4 c#3@3 e3@3, ~ e3@2 a3", C: "~ a2!2 ~@2 a2!3, f2!2, ~ c3@2 c3, ~@3 a2@2 ~@3",
  D: "~ a2!2 ~@2 a2!3, f2 c3@2 ~, ~ f2!2 [f2,c3], ~@3 a2@2 ~@3", // F5
  E: "~ b2!2 ~@2 b2!3, g2 d3@2 ~, ~ g2!2 [g2,d3], ~@3 b2@2 ~@3", // G5
  F: "~ g#2!2 ~@2 g#2!3, f2 c3@2 ~, ~ f2!2 [f2,c3], ~@3 g#2@2 ~@3", G: "~ c#3!2 c#3@2 c#3!3", H: "~ c#3!7",
  I: "~ c3!2 c3@2 c3!3, ~ d3@2 d3",
  J: "~ b2 b2@2 b2@2 ~@4 b2@2 b2@2 b2@2, g2!2, ~ d3@3 d3@8 d3@4, ~ g3@7, ~@3 b2@2 ~@3",
  K: "~@7 [b2,d3], g2!4, ~ [b2,d3]@2 [b2,d3]@2 [b2,d3]@2 ~", L: "[[f2,g#2,c3]@6 [f2,g#2,c3]@13 ~@13]/2",
  M: "[[e2,a2,c#3]@27 ~@5]/2", // A
  N: "[f#2,c#3]@2 [f#2,c#3] [f#2,c#3]@3 [f#2,c#3]@2 [f#2,c#3]@2 [f#2,c#3] [f#2,c#3]@3 [f#2,c#3]@2", // F#5
  O: "[a2,c#3]@2 [a2,c#3] [a2,c#3]@3 [a2,c#3]@2 [a2,c#3]@2 [a2,c#3] [a2,c#3]@3 [a2,c#3]@2, e3", // A
  P: "[g2,e3]@2 [g2,e3] [g2,e3]@3 [g2,e3]@2 [g2,e3]@2 [g2,e3] [g2,e3]@3 [g2,e3]@2, c3", // C
  Q: "[g2,d3]@2 [g2,d3] [g2,d3]@3 [g2,d3]@2 [g2,d3]@2 [g2,d3] [g2,d3]@3 [g2,d3]@2", // G5
  R: "[g2,b2]@2 [g2,b2] [g2,b2]@3 g2@2 [g2,c#3]@2 [g2,c#3] c#3 [a2,c#3]@4, ~@3 b2@5, ~@11 g2@5", // G Gdim A
  S: "[f#2,a2]@2 [f#2,a2] [f#2,a2]@3 [f#2,a2]@2 [f#2,a2]@2 [f#2,a2] [f#2,a2]@3 [f#2,a2]@2, c#3", // F#m
  T: "[b2,d3,f#3]@2 [b2,d3,f#3] [b2,d3,f#3]@3 [b2,d3,f#3]@2 [b2,d3,f#3]@2 [b2,d3,f#3] [b2,d3,f#3]@3 [b2,d3,f#3]@2, f#2", // Bm
  U: "[b2,e3,g#3]@2 [b2,e3,g#3] [b2,e3,g#3]@3 [b2,e3,g#3]@2 [b2,e3,g#3]@2 [b2,e3,g#3] [b2,e3,g#3]@3 [b2,e3,g#3]@2, g#2", // E
})).s("gm_piano").gain(0.2)

stack(piano, piano_2, piano_soft)