Strudelify

Canon in D

Rearranged

KeyD majorTempo86 bpm
0:00/0:00
// Canon in D — Rearranged
// 86 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/1517436; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · trombone · "Tenor Trombone"
const trombone = note(`<
  ~@12 A B C D E F G H I J K L M N O P Q R S T U V B W X Y Z AA AB AC AD AE AB AF AG AH ~@8 AI AJ AK AL AM AN AO AP ~@8
  AQ AR AS AT AU AV AW AX ~@8 AY AZ BA BB BC BD BB BE ~@6
>`.pickRestart({
  A: "d4 c#4", B: "b3 a3", C: "g3 f#3", D: "g3 e3", E: "d4 f#4 a4 f#4", F: "f#4 d4 f#4 e4", G: "d4 b3 d4 a3",
  H: "g3 b3 a3 g3", I: "f#3 d3 e3 c#4", J: "d4 f#4 a4 a3", K: "b3 g3 a3 f#3",
  L: "d3@4 d4@4 [d4,e4] d4 [d4,e4]!2 d4 [d4,e4] c#4@2", M: "d4 c#4 d4 d3 c#3 a3 e3 f#3",
  N: "d3 d4 c#4 b3 c#4 f#4 a4 b4", O: "g4 f#4 e4 g4 f#4 e4 d4 c#4", P: "b3 a3 g3 f#3 e3 g3 f#3 e3",
  Q: "d3 e3 f#3 g3 a3 e3 a3 g3", R: "f#3 b3 a3 g3 a3 g3 f#3 e3", S: "d4 b3!2 c#4 d4 c#4 b3 a3",
  T: "g3 f#3 e3 b3 a3 b3 a3 g3", U: "f#3 f#4 e4@2", V: "~ d3 f#3@2", W: "b3 c#4", X: "d4!2 c#4@2", Y: "~ b3 d4@2",
  Z: "d4@3 d4", AA: "d4 g4 e4 a4", AB: "a4@2 f#4 g4 a4@2 f#4 g4 a4 a3 b3 c#4 d4 e4 f#4 g4",
  AC: "f#4@2 d4 e4 f#4@2 f#3 g3 a3 b3 a3 g3 a3 f#3 g3 a3", AD: "g3@2 b3 a3 g3@2 f#3 e3 f#3 e3 d3 e3 f#3 g3 a3 b3",
  AE: "g3@2 b3 a3 b3@2 c#4 d4 a3 b3 c#4 d4 e4 f#4 g4 a4", AF: "f#4@2 d4 e4 f#4@2 f#4 g4 a4 b4 a4 g4 a4 f#4 g4 a4",
  AG: "g4@2 b4 a4 g4@2 f#4 e4 f#4 e4 d4 e4 f#4 g4 a4 b4", AH: "b3@2 d4 c#4 d4@2 c#4 b3 c#4 d4 e4 d4 c#4 d4 b3 c#4",
  AI: "f#4 f#3 g3 f#3 e3 e4 f#4 e4", AJ: "d4 f#4 d4 b3 a3!2 g3 a3", AK: "b3!2 c#4 b3 a3!2 g3 a3",
  AL: "b3!2 a3 b3 c#4!2 b3 c#4", AM: "d3 d4 e4 d4 c#4 c#3 d3 c#3", AN: "b3!2 a3 b3 c#4!2 f#4 e4",
  AO: "d3 d4 e4 g4 f#4 f#3 a3 f#4", AP: "d4 g4 f#4 g4 e4 a3 g3 a3", AQ: "d4@2 d4 e4 f#4@2 d4@2 c#4@2 c#4 d4 e4@2 c#4@2",
  AR: "b3@2 b3 c#4 d4@2 b3@2 c#4@2 a4 g4 f#4@2 e4@2", AS: "d3@2 g3 f#3 e3@2 g3@2 f#3@2 d3 e3 f#3@2 a3@2",
  AT: "g3@2 b3 a3 g3@2 f#3@2 e3@2 a3 g3 f#3@2 e3@2", AU: "f#3@2 d4 c#4 d4@2 f#3@2 a3@2 a3 b3 c#4@2 a3@2",
  AV: "f#3@2 d4 e4 f#4@2 d4@2 f#4@2 f#4 e4 d4@2 c#4@2", AW: "b3@2 b3 a3 b3@2 c#4@2 d4@2 f#4 e4 d4@2 f#4@2",
  AX: "g4@2 d4 c#4 b3@2 b3@2 a3@2 e3@2 a3@2 a3@2", AY: "f#3@3 f#4!2 g4 f#4 e4", AZ: "d4@3 d4!2 e4 d4 c#4", BA: "b3 d4",
  BB: "d4 c4 b3 c4 a3@3 a3", BC: "a3@3 a4!2 b4 a4 g4", BD: "f#4@3 f#4!2 g4 f#4 e4", BE: "g3@2 d4@2 c#4@3 c#4",
})).s("gm_trombone").gain(0.45)

// other · trombone · "Tenor Trombone" · soft notes
const trombone_soft = note(`<
  ~@8 A B C D ~@36 E F G H I J K L ~@8 M N O P Q R S T ~@8 U V W X Y C Z AA ~@8 AB@4 AC@2
>`.pickRestart({
  A: "f#4 e4", B: "d4 c#4", C: "b3 a3", D: "b3 c#4", E: "d4 ~ c#4 ~", F: "b3 ~ d4 ~", G: "d3 ~ d3 ~", H: "d3 ~ e3 ~",
  I: "~ a3 ~ a3", J: "~ f#3 ~ a3", K: "~ g3 ~ f#3", L: "~ g3 ~ e4", M: "f#3 a3!7", N: "f#3!6 a3!2", O: "g3!3 d4!5",
  P: "d4!2 b3!2 a3!2 e4 c#4", Q: "a3 f#4!3 e4!4", R: "d4!4 a3!4", S: "b3!4 a3!4", T: "b3!4 c#4!4", U: "a3@3 a3",
  V: "d3@3 a3", W: "g3 a3", X: "g3@2 d3@2 d3@3 c#3", Y: "d3 d4 c#4@2", Z: "d3@3 e3 f#3@4", AA: "b3@4 e3@3 e3",
  AB: "[d4@2 d4@4 c#4@4 b3@4 a3@4 g3@4 f#3@3 f#3@2 f#3 e3@2 f#3@2]/4", AC: "[f#3@9 ~@7]/2",
})).s("gm_trombone").gain(0.25)

// other · trombone · "Tenor Trombone"
const trombone_2 = note(`<
  ~@16 A B C D E F G H I J K L M N O P Q R S T U V B W X Y Z AA AB AC AD AE AB AC AD AF ~@8 AG AH AI AJ AK AL AM AN ~@8
  AO AP AQ AR AS AT AU AV ~@8 AW AX AY AZ BA BB AZ BC ~@2
>`.pickRestart({
  A: "d4 c#4", B: "b3 a3", C: "g3 f#3", D: "g3 e3", E: "d3 f#3 a3 g3", F: "f#3 d3 f#3 e3", G: "d4 b3 d4 a4",
  H: "g3 b3 a3 g3", I: "f#3 d3 e3 c#4", J: "d4 f#4 a4 a3", K: "b3 g3 a3 f#3",
  L: "d3@4 d4@4 [d4,e4] d4 [d4,e4]!2 d4 [d4,e4] c#4@2", M: "d4 c#4 d4 d3 c#3 a3 e3 f#3",
  N: "d3 d4 c#4 b3 c#4 f#4 a4 b4", O: "g4 f#4 e4 g4 f#4 e4 d4 c#4", P: "b3 a3 g3 f#3 e3 g3 f#3 e3",
  Q: "d3 e3 f#3 g3 a3 e3 a3 g3", R: "f#3 b3 a3 g3 a3 g3 f#3 e3", S: "d3 b2!2 c#3 d3 c#3 b2 a2",
  T: "g3 f#3 e3 b3 a3 b3 a3 g3", U: "f#3 f#4 e4@2", V: "~ d3 f#3@2", W: "b3 c#4", X: "d4 d3 c#3@2", Y: "~ b3 d4@2",
  Z: "d4@3 d4", AA: "d4 g4 e4 a4", AB: "f#4@2 d4 e4 f#4@2 e4 d4 e4 c#4 d4 e4 f#4 e4 d4 c#4",
  AC: "d4@2 b3 c#4 d4@2 d3 e3 f#3 g3 f#3 e3 f#3 d4 c#4 d4", AD: "b3@2 d4 c#4 b3@2 a3 g3 a3 g3 f#3 g3 a3 b3 c#4 d4",
  AE: "g3@2 b3 a3 b3@2 c#4 d4 a3 b3 c#4 d4 e4 f#4 g4 a4", AF: "b3@2 d4 c#4 d4@2 c#4 b3 c#4 d4 e4 d4 c#4 d4 b3 c#4",
  AG: "f#4!2 g4 f#4 e4!2 f#4 e4", AH: "d4 f#4 d4 b3 a3!2 g3 a3", AI: "b3!2 c#4 b3 a3!2 g3 a3",
  AJ: "b3!2 a3 b3 c#4!2 b3 c#4", AK: "d4!2 e4 d4 c#4!2 d4 c#4", AL: "b3!2 a3 b3 c#4!2 f#4 e4",
  AM: "d3 d4 e4 g4 f#4 f#3 a3 f#4", AN: "d4 g4 f#4 g4 e4 a3 g3 a3", AO: "d4@2 d4 e4 f#4@2 d4@2 c#4@2 c#4 d4 e4@2 c#4@2",
  AP: "b3@2 b3 c#4 d4@2 b3@2 c#4@2 a4 g4 f#4@2 e4@2", AQ: "d4@2 g4 f#4 e4@2 g4@2 f#4@2 d4 e4 f#4@2 a4@2",
  AR: "g4@2 b4 a4 g4@2 f#4@2 e4@2 a4 g4 f#4@2 e4@2", AS: "f#3@2 d4 c#4 d4@2 f#3@2 a3@2 a3 b3 c#4@2 a3@2",
  AT: "f#3@2 d4 e4 f#4@2 d4@2 f#4@2 f#4 e4 d4@2 c#4@2", AU: "b3@2 b3 a3 b3@2 c#4@2 d4@2 f#4 e4 d4@2 f#4@2",
  AV: "g4@2 d4 c#4 b3@2 b3@2 a3@2 e3@2 a3@2 a3@2", AW: "f#3@3 f#4!2 g4 f#4 e4", AX: "d4@3 d4!2 e4 d4 c#4", AY: "b3 d4",
  AZ: "d4 c4 b3 c4 a3@3 a3", BA: "a3@3 a3!2 b3 a3 g3", BB: "f#3@3 f#3!2 g3 f#3 e3", BC: "g3@2 d4@2 c#4@3 c#4",
})).s("gm_trombone").gain(0.45)

// other · trombone · "Tenor Trombone" · soft notes
const trombone_soft_2 = note(`<
  ~@12 A B C D ~@36 E F G H I J K L ~@8 M N O P Q R S T ~@8 U V W X Y C Z AA ~@8 AB@2
>`.pickRestart({
  A: "f#4 e4", B: "d4 c#4", C: "b3 a3", D: "b3 c#4", E: "d4 ~ c#4 ~", F: "b3 ~ d4 ~", G: "d4 ~ d4 ~", H: "d4 ~ e4 ~",
  I: "~ a4 ~ a4", J: "~ f#4 ~ a4", K: "~ g4 ~ f#4", L: "~ g4 ~ e4", M: "f#4 a4!7", N: "f#4!6 a4!2", O: "g4!3 d4!5",
  P: "d4!2 b3!2 a3!2 e4 c#4", Q: "a3 f#4!3 e4!4", R: "d4!4 a3!4", S: "b3!4 a3!4", T: "b3!4 c#4!4", U: "a3@3 a3",
  V: "d3@3 a3", W: "g3 a3", X: "g3@2 d3@2 d3@3 c#3", Y: "d3 d4 c#4@2", Z: "d3@3 e3 f#3@4", AA: "b3@4 e3@3 e3",
  AB: "[d4@9 ~@7]/2",
})).s("gm_trombone").gain(0.25)

// bass · trombone · "Bass Trombone"
const bass = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E@2
>`.pickRestart({
  A: "d3 a2", B: "b2 f#2", C: "g2 d2", D: "g2 a2", E: "[d3@9 ~@7]/2",
})).s("gm_trombone").gain(0.4)

stack(trombone, trombone_soft, trombone_2, trombone_soft_2, bass)