Strudelify
KeyA♭ majorTempo160 bpm
0:00/0:00
// Allemande — Claude Gervaise/Attaingnant
// 160 bpm, 4/2, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5980558; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 28 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/8)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trombone
const trombone = note("<~@7 A B C D E F G H I J K L M F ~@7>".pickRestart({
  A: "c3@4 db3@4 ab2 g2 ab2 bb2 c3@4", B: "c3@2 db3 f3 e3@2 e3 ~", C: "g3@2 ab3 eb3 c3@2 ab3 ~",
  D: "bb3@2 c4@2 c3@2 c3 ~", E: "bb3@2 f3 g3 ab3@2 ab3 f3", F: "bb3 c4 c3!2", G: "ab3@2 bb3!2 c4@2 c4!2",
  H: "db4@3 c4 bb3 c4 db4 bb3 c4@4 c4@4", I: "~@2 bb3!2 ~@2 c4!2", J: "~@14 c4 db4",
  K: "eb4@3 db4 c4@2 bb3@2 ab3@4 f3@2 c4@2", L: "bb3 ab3 g3 f3 eb3 f3!2 eb3 f3@4 f3@2 ~@2",
  M: "eb3@2 f3 g3 ab3@2 ab3 c4",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@15 [ab3 ~ c4 ~] [db4@3 c4 bb3 c4 db4 bb3 c4@4 c4@2 ~@2] ~@11>")
  .s("gm_trombone").gain(0.2)

// bass · trombone · "Trombone basse"
const bass = note("<~@7 A B C D E F G H I ~ C D E F ~@7>".pickRestart({
  A: "f2@2 bb2@2 eb2@2 ab2 g2", B: "f2@2 ab2 db3 c3@2 c3 ~", C: "eb2@2 f2 g2 ab2@2 db3 ab2", D: "bb2@2 c3@2 f2@2 f2 ~",
  E: "eb2@2 ab2 eb2 ab2@2 db3 ab2", F: "bb2 c3 f2!2", G: "ab2@2 eb2!2 [ab1,ab2]@2 eb2!2", H: "f2!2 c2!2",
  I: "~@2 eb2!2 ~@2 eb2!2",
})).s("gm_trombone").gain(0.3)

// bass · trombone · "Trombone basse" · soft notes · Ab
const bass_soft = note("<~@15 [ab2 ~ [ab1,ab2] ~] [f2!2 c2!2] ~@11>").s("gm_trombone").gain(0.2)

stack(trombone, trombone_soft, bass, bass_soft)