Strudelify

beautiful boy

J. Lennon

KeyD majorTempo90 bpm
0:00/0:00
// beautiful boy — J. Lennon
// 90 bpm, 4/4, key D 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/78430; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 69 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · piccolo
const piccolo = note(`<
  ~@4 A ~ B C D E B ~ F G H I A J K ~ L M N ~ F G H ~ F G H ~ O@2 P@2 Q@2 R@2 S@3 I T ~ U I T V@2 I A ~ B ~ W X Y ~ F G
  H I Z AA AB@3
>`.pickRestart({
  A: "d6@2 d6 b5@3 ~@2", B: "a5 a5@2 a5 b5@2 ~@2", C: "~@7 a5", D: "d6@2 d6 b5@3 ~ a5", E: "d6@2 d6 b5@2 a5@2 f#5",
  F: "f#6 e6!3 d6!2", G: "d6@4 b5@4 b5@4 ~@3 a5@3 b5@3 d6@3", H: "e6 d6@3", I: "~@5 a5 b5 a5", J: "~@6 a5 f#5",
  K: "a5 a5@2 b5@5", L: "d6@2 d6!2 b5@2 ~ a5", M: "d6@2 d6 b5@2 b5 a5 f#5", N: "a5 a5@2 a5!2 b5@3",
  O: "[~@4 b5!3 b5@2 d6@3 ~@4]/2", P: "[~@4 d6!3 c#6@2 b5@3 ~@4]/2", Q: "[~ d6@2 b5 d6@2 b5 d6@3 ~@6]/2",
  R: "[~ b5 d6 b5 d6@2 b5 d6@3 ~@6]/2", S: "[~ d6@2 b5 d6@2 b5 d6@2 a5@2 c6@2 b5 a5 a5@2 c#6@3 ~@4]/3",
  T: "f6 e6 d6@2 d6@2 b5 d6", U: "~ b5 d6@2 f6 d6 b5 d6", V: "[~@4 c6 b5 a5 a5@2 c#6@3 ~@4]/2", W: "d6 c#6!3 b5!2",
  X: "b5 a5@2 a5 b5 a5!2 f#5", Y: "a5 d6@2 b5@5", Z: "f#6@5 e6@5 e6@5 e6@5 d6@4", AA: "~ d6@5 d6@5 b5@5 b5@5 ~@3",
  AB: "[~@5 b5@3 d6@4 e6@4 d6@7 b5@2 a5@2 b5@45]/3",
})).s("gm_piccolo").gain(0.45)

// other · piccolo
const piccolo_2 = note(`<
  A B A C D@2 E@2 F G H I J K L M D@2 E@2 F G H I J K L M J K L M N@2 O@2 P ~ Q ~ R@3 ~ S ~ T ~ S U@2 ~ D@2 E@2 V W X
  ~@5 Y Z@4
>`.pickRestart({
  A: "b6 a6@2 f#6@4 e6", B: "d6@2 e6 f#6@3 e6 d6", C: "d6@2 d6 b5@2 a5@3", D: "[b5@2 d6 a5@13]/2",
  E: "[f#5 f#5@2 b5@13]/2", F: "b5@2 d6 a5@4 a5", G: "b5@2 d6 a5@2 a5@2 f#5", H: "f#5 f#5@2 f#5 a5@2 ~@2", I: "a5!6",
  J: "d6!4 b5!2", K: "b5@4 g5@4 g5@4 e5@3 g5@3 b5@3 d6@3", L: "b5@2 b5@5 e6", M: "d6@2 e6 f#6@5",
  N: "[b5@4 f#5 b5!2 f#5@2 f#5@7]/2", O: "[a5@4 a5 d6!2 a5@2 b5@7]/2", P: "~ b5@2 b5 b5@2 b5 c6",
  Q: "~ g5 d6 b5 b5@2 b5 c6", R: "[~ b5@2 b5 b5@2 b5 c6@2 a5@2 c6@2 b5 a5 a5@2 a5@7]/3", S: "b5 e6 b5@2 b5@2 b5 c6",
  T: "~ b5 b5@2 f6@2 b5 c6", U: "[~@4 c6 b5 a5 a5@2 a5@7]/2", V: "b5 a5!5", W: "b5 a5@2 a5!4 f#5", X: "a5 d6@2 a5@5",
  Y: "d6@5 d6@5 d6@5 d6@5 b5@4", Z: "[~ b5@5 b5@5 g5@5 g5@5 e6@7 ~ d6@3 f#6@4 b5@4 d6@7 a5@4 a5@45]/4",
})).s("gm_piccolo").gain(0.3)

// other · flute
const flute = note(`<
  ~@4 A ~ B C D E B ~ F G H I A J K ~ L M N ~ F G H ~ F G H ~ O@2 P@2 Q@2 R@2 S@3 T U ~ V T U W@2 I A ~ B ~ X Y Z ~ F G
  H I AA AB AC@3
>`.pickRestart({
  A: "d5@2 d5 b4@3 ~@2", B: "a4 a4@2 a4 b4@2 ~@2", C: "~@7 a4", D: "d5@2 d5 b4@3 ~ a4", E: "d5@2 d5 b4@2 a4@2 f#4",
  F: "f#5 e5!3 d5!2", G: "d5@4 b4@4 b4@4 ~@3 a4@3 b4@3 d5@3", H: "e5 d5@3", I: "~@5 a4 b4 a4", J: "~@6 a4 f#4",
  K: "a4 a4@2 b4@5", L: "d5@2 d5!2 b4@2 ~ a4", M: "d5@2 d5 b4@2 b4 a4 f#4", N: "a4 a4@2 a4!2 b4@3",
  O: "[~@4 b4!3 b4@2 d5@3 ~@4]/2", P: "[~@4 d5!3 c#5@2 b4@3 ~@4]/2", Q: "[~ d5@2 b4 d5@2 b4 d5@3 ~@6]/2",
  R: "[~ b4 d5 b4 d5@2 b4 d5@3 ~@6]/2", S: "[~ d5@2 b4 d5@2 b4 d5@2 a4@2 c5@2 b4 a4 a4@2 c#5@3 ~@4]/3",
  T: "~@5 a5 b5 a5", U: "f5 e5 d5@2 d5@2 b4 d5", V: "~ b4 d5@2 f5 d5 b4 d5", W: "[~@4 c5 b4 a4 a4@2 c#5@3 ~@4]/2",
  X: "d5 c#5!3 b4!2", Y: "b4 a4@2 a4 b4 a4!2 f#4", Z: "a4 d5@2 b4@5", AA: "f#5@5 e5@5 e5@5 e5@5 d5@4",
  AB: "~ d5@5 d5@5 b4@5 b4@5 ~@3", AC: "[~@5 b4@3 d5@4 e5@4 d5@7 b4@2 a4@2 b4@45]/3",
})).s("gm_flute").gain(0.4)

// other · flute
const flute_2 = note(`<
  A B A C D@2 E@2 F G H I J K L M D@2 E@2 F G H I J K L M J K L M N@2 O@2 P Q R Q S@3 ~ T Q U V T W@2 ~ D@2 E@2 X Y Z AA
  J K L M AB AC AD@3
>`.pickRestart({
  A: "b5 a5@2 f#5@4 e5", B: "d5@2 e5 f#5@3 e5 d5", C: "d5@2 d5 b4@2 a4@3", D: "[a4@2 d5 f#4@13]/2",
  E: "[d4 d4@2 a4@13]/2", F: "b4@2 d5 a4@4 a4", G: "b4@2 d5 a4@2 a4@2 f#4", H: "f#4 f#4@2 f#4 a4@2 ~@2", I: "a4!6",
  J: "d5!4 b4!2", K: "b4@4 g4@4 g4@4 e4@3 g4@3 b4@3 d5@3", L: "b4@2 b4@5 e5", M: "d5@2 e5 f#5@5",
  N: "[f#4@4 f#4 b4!2 f#4@2 b4@7]/2", O: "[f#4@4 f#4 d5!2 f#4@2 f#4@7]/2", P: "~ d4@2 b4 d4@2 b4 f#4",
  Q: "~ f#5 e5 d5 c5 d5@3", R: "~ d4 d5 b4 d4@2 b4 f#4", S: "[~ b4@2 b4 b4@2 b4 f#4@2 a4@2 f#4@2 b4 a4 g4@2 g4@7]/3",
  T: "f5 e5 g4@2 g4@2 b4 f4", U: "~ b4 g4@2 b4@2 b4 f#4", V: "~ f#5 e5 d5 c5@4", W: "[~@4 f#4 b4 a4 g4@2 g4@7]/2",
  X: "a4 f#4!5", Y: "a4 f#4@2 a4 f#4 a4 f#4!2", Z: "f#4 d5@2 f#4@5", AA: "a4@2 e4 b4@5", AB: "d5@5 d5@5 d5@5 d5@5 b4@4",
  AC: "~ b4@5 b4@5 g4@5 g4@5 ~@3", AD: "[~@12 a4@4 d5@7 f#4@2 a4@2 f#4@45]/3",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_3 = note(`<
  A B A B C@2 D@2 E F G H I J K L C@2 D@2 E F G H I J K L I J K L M@2 N@2 O P Q P R@3 ~ S P T U S V@2 ~ C@2 D@2 W X Y Z
  I J K L AA AB AC@3
>`.pickRestart({
  A: "f#5 e5@2 d5@4 b4", B: "a4@2 b4 d5@5", C: "[f#4@2 d5 d4@13]/2", D: "[b4 b4@2 f#4@13]/2", E: "a4@2 a4 f#4@4 a4",
  F: "a4@2 a4 f#4@2 a4@2 f#4", G: "d4 d4@2 d4 f#4@2 ~@2", H: "f#4!6", I: "b4!4 g4!2",
  J: "g4@4 e4@4 e4@4 e4@3 e4@3 b4@3 d5@3", K: "a4@2 a4@5 e5", L: "b4@2 e5 d5@5", M: "[d4@4 d4 b4!2 d4@2 f#4@7]/2",
  N: "[d4@4 d4 d5!2 d#4@2 d#4@7]/2", O: "~ d4@2 b4 d4@2 d4!2", P: "~ d5 c5 b4 a4 b4@3", Q: "~ d5!2 b4 d4@2 d4!2",
  R: "[~ g4@2 b4 g4@2 b4 c5@2 a4@2 c5@2 b4 a4 a4@2 a4@7]/3", S: "b4 e5 b4@2 b4@2 b4 c5", T: "~ b4 b4@2 f5@2 b4 c5",
  U: "~ d5 c5 b4 a4@4", V: "[~@4 c5 b4 a4 a4@2 a4@7]/2", W: "b4 a4!5", X: "b4 a4@2 a4!4 f#4", Y: "a4 d5@2 a4@5",
  Z: "f#4@2 e4 a4@5", AA: "b4@5 b4@5 b4@5 b4@5 g4@4", AB: "~ g4@5 g4@5 e4@5 e4@5 ~@3",
  AC: "[~@12 b4@4 d5@7 a4@4 a4@45]/3",
})).s("gm_flute").gain(0.3)

// other · clarinet · "Bb Clarinet"
const clarinet = note(`<
  ~@4 A ~ B C D E B ~ F G H I A J K ~ L M N ~ F G H ~ F G H ~ O@2 P@2 Q ~ R@2 S@3 I T ~ U I T V@2 I A ~ B ~ W X Y ~ F G
  H I Z AA AB@3
>`.pickRestart({
  A: "d5@2 d5 b4@3 ~@2", B: "a4 a4@2 a4 b4@2 ~@2", C: "~@7 a4", D: "d5@2 d5 b4@3 ~ a4", E: "d5@2 d5 b4@2 a4@2 f#4",
  F: "f#4 e4!3 d4!2", G: "d4@4 b3@4 b3@4 ~@3 a3@3 b3@3 d4@3", H: "e4 d4@3", I: "~@5 a4 b4 a4", J: "~@6 a4 f#4",
  K: "a4 a4@2 b4@5", L: "d5@2 d5!2 b4@2 ~ a4", M: "d5@2 d5 b4@2 b4 a4 f#4", N: "a4 a4@2 a4!2 b4@3",
  O: "[~@4 b4!3 b4@2 d5@3 ~@4]/2", P: "[~@4 d5!3 c#5@2 b4@3 ~@4]/2", Q: "~ d5@2 b4 d5@2 b4 d5",
  R: "[~ b4 d5 b4 d5@2 b4 d5@3 ~@6]/2", S: "[~ d5@2 b4 d5@2 b4 d5@2 a4@2 c5@2 b4 a4 a4@2 c#5@3 ~@4]/3",
  T: "f4 e4 d4@2 d4@2 b3 d4", U: "~ b3 d4@2 f4 d4 b3 d4", V: "[~@4 c4 b3 a3 a3@2 c#4@3 ~@4]/2", W: "d5 c#5!3 b4!2",
  X: "b4 a4@2 a4 b4 a4!2 f#4", Y: "a4 d5@2 b4@5", Z: "f#5@5 e5@5 e5@5 e5@5 d5@4", AA: "~ d5@5 d5@5 b4@5 b4@5 ~@3",
  AB: "[~@5 b4@3 d5@4 e5@4 d5@7 b4@2 a4@2 b4@45]/3",
})).s("gm_clarinet").gain(0.4)

// other · clarinet · "Bb Clarinet"
const clarinet_2 = note(`<
  A B A B C D E F G@2 H I J K L M C F E F G@2 H I J K L M J K L M N O N P Q R S R T@3 U V R W X V Y@2 Z C F E F AA AB AC
  M J K L M AD AE@4
>`.pickRestart({
  A: "f#5 e5@2 d5@4 b4", B: "a4@2 b4 d5@5", C: "f#4@2 d5 d4@4 e4", D: "d4@2 e4 f#4 f#4@2 e4 d4", E: "b3 b3@2 d4@4 e4",
  F: "d4@2 e4 f#4@3 e4 d4", G: "d4@2 a4 d4@5", H: "d4@2 a4 f#4@5", I: "b3!6", J: "g4!4 e4!2",
  K: "e4@4 d4@4 d4@4 e4@3 d4@3 b3@3 d4@3", L: "f#4@2 f#4@5 e4", M: "f#4@2 e4 a4@5", N: "b3@3 b3 b3@4", O: "b3",
  P: "b3@3 b3 b3@2 b3 a3", Q: "g3@3 g3 g3@4", R: "~ d4 c4 b3 a3 b3@3", S: "~ d4 d5 b4 g4@2 b4 d4",
  T: "[~ d4@2 b3 d4@2 b3 c4@2 a3@2 c4@2 b3 a3 c#4@2 c#4@3 g3@4]/3", U: "f#3 e3", V: "g4 e4 d4@2 d4@2 b3 c4",
  W: "~ b3 d4@2 b3@2 b3 c4", X: "~ d4 c4 b3 a3@4", Y: "[~@4 c4 b3 a3 c#4@2 c#4@3 g3@4]/2", Z: "f#3@2 e3 ~",
  AA: "f#4 d4!5", AB: "d4 b3@2 a3 d4 a3 b3 f#4", AC: "b3 d4@2 d4@5", AD: "b3@5 b3@5 b3@5 b3@5 g3@4",
  AE: "[~ g3@5 g3@15 e4@15 a4@60]/4",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "Bb Clarinet"
const clarinet_3 = note(`<
  A@4 B C B D E@3 F G H I J B C B D E@3 F G H I J G H I J K L M N O P O P O Q R@2 S T U T S V W@2 B C B D X Y Z AA G H I
  J AB@5
>`.pickRestart({
  A: "d4 a4 d5@2", B: "d4@2 a4@2 d5@3 a4", C: "d4@2 a4 d5 d5@3 a4", D: "d4@2 a4 d5@4 a4", E: "d4@2 a4 d5@5", F: "d4",
  G: "f#4 e4", H: "d4@2 e4!2", I: "d4@3 a4 d5@4", J: "d4@4 d5@2 a4 d4", K: "f#3 b3", L: "a#3@3 a#3 a#3@4", M: "a3 b3",
  N: "b3@3 b3 b3@2 b3 a3", O: "g3@3 g3 g3@4", P: "d4@3 a3 d4@2 d4@2", Q: "d4@2 d5 d4", R: "a4/2", S: "g4@3 g4 g4@4",
  T: "d4@3 d4 d4@2 d4@2", U: "g3@3 g3 g3@2 g3@2", V: "d4@2 d4!2", W: "a3/2", X: "d4 a4 d4@2", Y: "d4@3 a4 d4@4",
  Z: "d4@6 d4 a3", AA: "d4@3 a4 d5 a4 d4@2", AB: "[e4@3 e4 d4@4]/5",
})).s("gm_clarinet").gain(0.25)

stack(piccolo, piccolo_2, flute, flute_2, flute_3, clarinet, clarinet_2, clarinet_3)