Strudelify

Don't Stop Believin'

D. J. Duncan

KeyG♭ majorTempo120 bpm
0:00/0:00
// Don't Stop Believin' — D. J. Duncan
// 120 bpm, 4/4, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/59007; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · trombone
const trombone = note(`<
  A B C D A B E F G@2 H@2 I G@2 H G@2 H@2 I G@2 H J K L M J N@2 O J K L M J P@2 Q R S T U R S T U R S T U R S T U A B C
  D A B E F G@2 H@2 I G@2 H J K L M J P@2 Q R S T U R S T U H V
>`.pickRestart({
  A: "e3 b2 e3 b2 e3 b2 e3 b2", B: "eb3 b2 eb3 b2 eb3 b2 eb3 b2", C: "db3 ab2 db3 ab2 db3 ab2 db3 ab2",
  D: "db3 a2 db3 a2 db3 a2 db3 a2", E: "eb3 ab2 eb3 ab2 eb3 ab2 eb3 ab2", F: "db3 a2 db3 a2 db3 a2 db3 eb3", G: "b3",
  H: "db4", I: "b3 ab3", J: "db4@3 db4@3 ~@2", K: "db4@3 e4@3 ~@2", L: "~@4 e3!4", M: "b3@2 a3 ab3@2 e3@3",
  N: "[db4@3 e4@2 gb3 e3 gb3@3 ab3 e3@5]/2", O: "ab3 ~@2 ab3@5", P: "[db4@3 e4@2 gb3 e3 gb3@4 b3@5]/2",
  Q: "gb3@2 ab3 e3@5", R: "a3@3 ab3@4 gb3", S: "a3 ab3@2 ab3@5", T: "e3 ab2 e3 ab2 e3 ab2 e3 ab2",
  U: "e3 a2 e3 a2 e3 a2 a2@2", V: "gb3 ~@2 e3 ~@4",
})).s("gm_trombone").gain(0.3)

// bass · tuba · "Euphonium"
const bass = note(`<
  A B C D A B E D F G H I F J F I F G H I F J F I K L M N K O@2 P K L M N K Q@2 R S T U V S T U V S T U V S T U V A B C
  D A B E D F G H I F J F I K L M N K Q@2 R S T U V S T U V I W
>`.pickRestart({
  A: "ab3 b2 ab3 b2 ab3 b2 ab3 b2", B: "gb3 b2 gb3 b2 gb3 b2 gb3 b2", C: "e3 ab2 e3 ab2 e3 ab2 e3 ab2",
  D: "e3 a2 e3 a2 e3 a2 e3 a2", E: "eb3 ab2 eb3 ab2 eb3 ab2 eb3 ab2", F: "ab3", G: "eb3", H: "e3", I: "a3", J: "gb3",
  K: "a3@3 a3@3 ~@2", L: "a3@3 db4@3 ~@2", M: "~@4 e3!4", N: "b3@2 a3 ab3@3 gb3@2",
  O: "[a3@3 db4@2 gb3 e3 gb3@3 ab3 e3@5]/2", P: "e3 ~@2 e3@5", Q: "[a3@3 db4@2 gb3 e3 gb3@4 ab3@5]/2",
  R: "b3@2 b3 a3@5", S: "e3@3 e3@4 gb3", T: "eb3@3 eb3@5", U: "db3 ab2 db3 ab2 db3 ab2 db3 ab2",
  V: "db3 a2 db3 a2 db3 a2 db3@2", W: "a3 ~@2 ab3 ~@4",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Bb Tuba"
const bass_2 = note(`<
  A@8 B C B@3 C@2 B@2 C B@3 C@2 B D@2 E@2 D@2 E@2 D@2 E@2 D@2 F G H@16 A@8 B C B@3 C@2 B D@2 E@2 D@2 F G H@8 B I
>`.pickRestart({
  A: "[e2@5 gb2 ab2 b2@6 db3 eb3 db3@6 eb3 e3 a2@6 eb3 e3 e2@6 gb2 ab2 b2@6 db3 eb3 ab2@7 ab2 a2@6 eb3 e3@2]/8",
  B: "e3", C: "eb3", D: "a2!8", E: "e2!8", F: "b2@3 e2@5", G: "eb3@2 e3 db3@5",
  H: "[e2@5 gb2 ab2 b2@6 db3 eb3 db3@6 eb3 e3 a2@6 eb3 e3 e2@6 gb2 ab2 b2@6 db3 eb3 ab2@7 ab2 a2@6 b2 e3 e2]/8",
  I: "db3 ~@2 b2 ~@4",
})).s("gm_tuba").gain(0.3)

stack(trombone, bass, bass_2)