Strudelify

Chanson de l'Oignon

Daina Neithardt

KeyF majorTempo120 bpm
0:00/0:00
// Chanson de l'Oignon — Daina Neithardt
// 120 bpm, 2/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5992590; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 68 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// 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@6 B C A@4 D@2 E F G@2 H I D@2 E F G@2 H J K L M N O P Q R S@2 T U V@2 W X Y Z AA AB Y Z AC AD D@2 E F G@2 H AE AF AG
  AH AI AJ AK AJ AL
>`.pickRestart({
  A: "[eb2,bb2,eb3,g3] ~@3 [bb1,bb2,d3,f3] ~@3", B: "[eb2,bb2,eb3,g3] ~@3 [bb1,bb2,eb3,g3] ~@3",
  C: "[f2,bb2,d3,f3] ~@3 [bb1,bb2,d3,f3] ~@3", D: "eb2 ~ [eb3,g3,bb3]!2 [bb1,eb3,g3,bb3] ~ bb2 ~",
  E: "ab2 ~ [eb3,ab3,c4]!2 [c2,eb3,ab3,c4] ~ bb2 ~", F: "ab2 ~ [eb3,ab3,c4] ~ [ab1,eb3,ab3,c4] ~ ab2 ~",
  G: "f2 ~ [f3,ab3,c4]!2 [c2,f3,ab3,c4] ~ c3 ~", H: "bb2 ~ [f3,ab3,bb3]!2 [bb1,f3,ab3,bb3] ~ bb2 ~",
  I: "eb2 ~ [eb3,g3,bb3] ~ [bb1,eb3,g3,bb3] ~ bb2 ~", // Eb
  J: "eb2@2 ~@2 [eb3,g3,bb3]@2 ~@2 [bb1,bb2,d3,f3,bb3]@3 [bb2,db3]@2 [bb2,d3]@3", // Eb Bb Bbm Bb
  K: "[eb2,gb2,bb2]@2 ~@6 [bb1,d2,f2,bb2]@2 ~@3 f3@3, eb3@8 f3@5 ~@3", // Ebm Bb
  L: "[eb2,gb2,bb2]@2 ~@3 gb3@3 [bb1,d2,f2,bb2,f3]@3 gb3@2 f3@3, gb3@5 ~@11", // Ebm Bb
  M: "[eb2,gb2,bb2,eb3]@3 ~@2 eb3@3 [eb2,gb2,bb2,gb3]@3 ~@2 gb3@3", N: "[bb1,d2,f2,bb2] ~@3 [bb1,d2,f2,bb2] ~@3, f3 ~",
  O: "[eb2,gb2,bb2]@2 ~@6 [bb1,d2,f2,bb2]@2 ~@3 [f3,ab3]@3, [eb3,gb3]@8 [f3,ab3]@5 ~@3", // Ebm Bb Fm Ebm Fm
  P: "[eb2,gb2,bb2]@2 ~@3 [gb3,bb3]@3 [bb1,d2,f2,bb2,f3,ab3]@3 [gb3,bb3]@2 [f3,ab3]@3, [gb3,bb3]@5 ~@11", // Ebm Gb Bb7 Gb Fm Gb
  Q: "[eb2,gb2,bb2,eb3,gb3]@3 ~@2 [eb3,gb3]@3 [bb1,d2,f2,bb2,f3,ab3]@3 [gb3,bb3]@2 [f3,ab3]@3", // Ebm Bb7 Gb Fm
  R: "[eb2,gb2,bb2,eb3,gb3]@3 f3@2 eb3@3 db3@3 c3@2 bb2@3", S: "[a2@15 ~@6 gb5@3 f5@3 gb5@2 f5@3, [c2,eb2,gb2]@15 ~]/2",
  T: "[eb3,eb5]@3 eb5@2 [bb2,eb5]@3 [gb2,gb5]@3 gb5@2 [eb2,gb5]@3", U: "[bb1,f5]@15 ~",
  V: "[~@21 g5@3 f5@3 g5@2 f5@3, [c2,eb2,g2]@15 ~]/2", W: "[eb3,eb5]@3 eb5@2 [bb2,eb5]@3 [g2,f5]@3 eb5@2 [bb2,bb4]@3",
  X: "[eb2,g4,eb5]@3 [eb2,bb4]@2 [eb2,g4]@3 [eb2,bb4]@3 [eb2,g4]@2 [eb2,f4]@3", Y: "[eb1,eb2,eb4]@8 f4@5 f4@3",
  Z: "g4@5 g4@3 f4@3 g4@2 f4@3, [eb1,eb2] ~", AA: "eb4@3 ~@2 eb4@3 g4@3 ~@2 g4@3, [eb1,eb2] ~",
  AB: "[eb1,eb2,f4]@8 bb3@3 bb3@2 bb3@3", AC: "[eb1,eb2]@8 f4@3 g4@2 f4@3, eb4 ~@3",
  AD: "[eb1,eb2] ~@3 [bb1,eb3,g3,bb3] ~ bb2 ~, eb4 ~@3", AE: "eb2 ~ [eb3,g3,bb3] ~ bb1@4", AF: "eb2 ~@3 bb1 ~@3",
  AG: "eb2@2 ~@6 [bb1,bb2]@3 bb2@2 bb2@3", AH: "eb3@8 f3@5 f3@3, eb2 ~@3 bb1 ~@3", AI: "eb2 ~@3 bb1 ~@3, g3@15 ~",
  AJ: "[eb2,eb3] ~@3 [bb1,bb3] ~@3", AK: "[eb2,eb4] ~@3 [bb1,bb3] ~@3", AL: "[eb2,eb4] ~@3",
})).s("gm_piano").gain(0.4)

stack(piano)