Strudelify
KeyA♭ majorTempo120 bpm
0:00/0:00
// Adagio — Albinoni (attr)
// 120 bpm, 3/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5972034; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A@7 B@3 C@2 D E F G H I J K ~@2 L@8 M N@2 O@2 P@2 Q@2 R S@2 ~@2 T U@2 V W X Y@4 Z@4 AA@2 AB@3 W AC@5 AD@2 AE AF AG AH
  AI@3
>`.pickRestart({
  A: "[~@5 f4@32 f4 g4 ab4@12 f4@2 f4@16 g4 ab4 bb4@14 ab4 g4 ab4@14 g4 ~@10]/7",
  B: "[~@6 f4!2 f4@3 f4@10 f4@16 bb3@4 c4 ~ db4@4 c4]/3", C: "[db4@4 bb3 e4@16 c4@4 d4 ~ e4@4 c4]/2", D: "f4@5 f4@11",
  E: "c4@11 bb3@2 c4@3", F: "ab3@2 bb3@2 ~ bb3@11, ~@2 g3 ~@5", G: "bb3@11 ab3@2 bb3@3",
  H: "g3@2 ab3@2 ~ ab3@11, ~@2 f3 ~@5", I: "ab3@11 g3@2 ab3@3", J: "bb3@2 ab3@2 g3@7 ~@2 e4@3", K: "f4@3 g4@2 f4@11",
  L: "[~@11 c5@16 f4@32 bb3@16 f4@16 e4@16 ab3@16 f4@5]/8", M: "~@11 bb3@4 c4",
  N: "[db4@4 c4 db4@4 bb3 ~ e4@16 c4@4 d4]/2", O: "[e4@4 c4 f4@5 ~ f4@10 c4@11]/2",
  P: "[bb3@3 c4@2 ab3@2 bb3@2 g3@2 bb3@10 bb3@11]/2", Q: "[ab3@3 bb3@2 g3@2 ab3@2 f3@2 ab3@10 ab3@11]/2",
  R: "g3@3 ab3@2 bb3@2 ab3@2 g3@7", S: "[~@3 e4@2 f4@3 g4@3 f4@11 ~@10]/2", T: "c5", U: "f4/2", V: "bb3", W: "f4",
  X: "e4", Y: "[a3@63 a3]/4", Z: "bb3/4", AA: "[db4@31 db4]/2", AB: "[e4@47 e4]/3", AC: "[c4@15 ~]/5", AD: "e4/2",
  AE: "eb4", AF: "db4", AG: "d4", AH: "c4@11 bb3@5", AI: "ab3/3",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet_2 = note(`<
  A@8 B@8 C@3 D ~@2 E@8 F@8 G@2 H@2 ~@2 I J K L M@2 N@4 O@4 P@3 ~@3 Q@5 M@2 R S ~@5
>`.pickRestart({
  A: "[~@5 f4@16 eb4@16 db4@16 c4@16 bb3@16 b3@16 c4@16 ab4@11]/8", B: "[~@5 f4@16 g4@32 ab4@32 bb4@16 g4@16 ab4@11]/8",
  C: "[~@5 f4@16 g4@16 ab4@5 ~ f5@5]/3", D: "bb4@5 ab5@11", E: "[~@11 a4@16 bb4@16 ab4@16 gb4@16 c4@32 ab3@16 f4@5]/8",
  F: "[~@11 g4@32 ab4@32 bb4@16 g4@16 ab4@16 f4@5]/8", G: "[~@11 g4@16 ab4@5]/2", H: "[f5@5 bb4@5 ~ ab5@11 ~@10]/2",
  I: "a4", J: "bb4", K: "ab4", L: "gb4", M: "c4/2", N: "[ab3@63 ab3]/4", O: "ab3/4", P: "f3/3", Q: "[f3@15 ~]/5",
  R: "a3", S: "bb3",
})).s("gm_clarinet").gain(0.3)

stack(clarinet, clarinet_2)