Strudelify
KeyC majorTempo70 bpm
0:00/0:00
// Ave Maria — J.S. Bach and Charles Gounod
// 70 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5290059; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 40 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 A@2 B C A D E F G H I J K L M N O P Q R S T U V@2 W X Y Q Z AA Y Q AB AC AD AE
>`.pickRestart({
  A: "~@2 g4 c5 e5 g4 c5 e5 ~@2 g4 c5 e5 g4 c5 e5, c4!2, ~ e4@7 ~ e4@7",
  B: "~@2 a4 d5 f5 a4 d5 f5 ~@2 a4 d5 f5 a4 d5 f5, c4!2, ~ d4@7 ~ d4@7",
  C: "~@2 g4 d5 f5 g4 d5 f5 ~@2 g4 d5 f5 g4 d5 f5, b3!2, ~ d4@7 ~ d4@7",
  D: "~@2 a4 e5 a5 a4 e5 a5 ~@2 a4 e5 a5 a4 e5 a5, c4!2, ~ e4@7 ~ e4@7",
  E: "~@2 f#4 a4 d5 f#4 a4 d5 ~@2 f#4 a4 d5 f#4 a4 d5, c4!2, ~ d4@7 ~ d4@7",
  F: "~@2 g4 d5 g5 g4 d5 g5 ~@2 g4 d5 g5 g4 d5 g5, b3!2, ~ d4@7 ~ d4@7",
  G: "~@2 e4 g4 c5 e4 g4 c5 ~@2 e4 g4 c5 e4 g4 c5, b3!2, ~ c4@7 ~ c4@7",
  H: "~@2 e4 g4 c5 e4 g4 c5 ~@2 e4 g4 c5 e4 g4 c5, a3!2, ~ c4@7 ~ c4@7",
  I: "~@2 d4 f#4 c5 d4 f#4 c5 ~@2 d4 f#4 c5 d4 f#4 c5, d3!2, ~ a3@7 ~ a3@7",
  J: "~@2 d4 g4 b4 d4 g4 b4 ~@2 d4 g4 b4 d4 g4 b4, g3!2, ~ b3@7 ~ b3@7",
  K: "~@2 e4 g4 c#5 e4 g4 c#5 ~@2 e4 g4 c#5 e4 g4 c#5, g3!2, ~ a#3@7 ~ a#3@7",
  L: "~@2 d4 a4 d5 d4 a4 d5 ~@2 d4 a4 d5 d4 a4 d5, f3!2, ~ a3@7 ~ a3@7",
  M: "~@2 d4 f4 b4 d4 f4 b4 ~@2 d4 f4 b4 d4 f4 b4, f3!2, ~ g#3@7 ~ g#3@7",
  N: "~@2 c4 g4 c5 c4 g4 c5 ~@2 c4 g4 c5 c4 g4 c5, e3!2, ~ g3@7 ~ g3@7",
  O: "~@2 a3 c4 f4 a3 c4 f4 ~@2 a3 c4 f4 a3 c4 f4, e3!2, ~ f3@7 ~ f3@7",
  P: "~@2 a3 c4 f4 a3 c4 f4 ~@2 a3 c4 f4 a3 c4 f4, d3!2, ~ f3@7 ~ f3@7",
  Q: "~@2 g3 b3 f4 g3 b3 f4 ~@2 g3 b3 f4 g3 b3 f4, g2!2, ~ d3@7 ~ d3@7",
  R: "~@2 g3 c4 e4 g3 c4 e4 ~@2 g3 c4 e4 g3 c4 e4, c3!2, ~ e3@7 ~ e3@7",
  S: "~@2 a#3 c4 e4 a#3 c4 e4 ~@2 a#3 c4 e4 a#3 c4 e4, c3!2, ~ g3@7 ~ g3@7",
  T: "~@2 a3 c4 e4 a3 c4 e4 ~@2 a3 c4 e4 a3 c4 e4, f2!2, ~ f3@7 ~ f3@7",
  U: "~@2 a3 c4 d#4 a3 c4 d#4 ~@2 a3 c4 d#4 a3 c4 d#4, f#2!2, ~ c3@7 ~ c3@7",
  V: "~@2 b3 c4 d4 b3 c4 d4 ~@2 b3 c4 d4 b3 c4 d4, g#2!2, ~ f3@7 ~ f3@7",
  W: "~@2 g3 b3 d4 g3 b3 d4 ~@2 g3 b3 d4 g3 b3 d4, g2!2, ~ f3@7 ~ f3@7",
  X: "~@2 g3 c4 e4 g3 c4 e4 ~@2 g3 c4 e4 g3 c4 e4, g2!2, ~ e3@7 ~ e3@7",
  Y: "~@2 g3 c4 f4 g3 c4 f4 ~@2 g3 c4 f4 g3 c4 f4, g2!2, ~ d3@7 ~ d3@7",
  Z: "~@2 a3 c4 f#4 a3 c4 f#4 ~@2 a3 c4 f#4 a3 c4 f#4, g2!2, ~ d#3@7 ~ d#3@7",
  AA: "~@2 g3 c4 g4 g3 c4 g4 ~@2 g3 c4 g4 g3 c4 g4, g2!2, ~ e3@7 ~ e3@7",
  AB: "~@2 g3 a#3 e4 g3 a#3 e4 ~@2 g3 a#3 e4 g3 a#3 e4, c2!2, ~ c3@7 ~ c3@7",
  AC: "~@2 f3 a3 c4 f4 c4 a3 c4 a3 f3 a3 f3 d3 f3 d3, c2@15 ~, ~ c3@14 ~",
  AD: "~@2 g4 b4 d5 f5 d5 b4 d5 b4 g4 b4 d4 f4 e4 d4, c2@15 ~, ~ b2@14 ~", AE: "[c2,c3,e4,g4,c5]@15 ~",
})).s("gm_piano").gain(0.3)

stack(piano)