Strudelify

Carry on My Wayward Son

Kansas

KeyD majorTempo126 bpm
0:00/0:00
// Carry on My Wayward Son — Kansas
// 126 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 37, 4/4 at bar 38) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 6 "Horn" french horn (copy of ch 3 "Alto" alto sax)
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "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 · flute
const flute = note(`<
  A B A C A B D E F G H F G H I J I J K L M N I J I J K L M O A B A C A B D P ~@12 Q R S Q R T U@2
>`.pickRestart({
  A: "~@2 e5 f5 g5 c6 ~ b5", B: "~@2 g5@2 ~@2 g5@4 a5 g5 f5@4", C: "~ g5 ~ e5 d5@2 ~@2", D: "~@2 e5 d5 e5@2 d5 c5",
  E: "c5@3 ~", F: "~@2 c6 ~", G: "~ d6 ~@2", H: "~ g5 ~ f#5", I: "e5 ~ e5 ~ d5 ~ d5 ~", J: "c5 ~ c5 ~ d5 ~ d5 ~",
  K: "g5 d5@2 ~ e5 ~ e5 ~", L: "d5@2 f4 ~ f4@2 e5 ~", M: "f5 ~ f5 ~ e5 ~ e5 ~", N: "d5@2 d5 ~ g5 a5 b5 ~",
  O: "d5@2 d5 ~ g5 a5 b5 d6", P: "c5 ~@3", Q: "c6 ~@2 d6", R: "~@3 g5", S: "~ f#5 ~@2",
  T: "~@4 f#5@4 a5@2 ~ g5@2 a5@2 ~", U: "[b5@2 ~ a5@2 b5@2 ~ c6@16 ~@8]/2",
})).s("gm_flute").gain(0.31)

// other · clarinet
const clarinet = note(`<
  A B A C A B D E F G H F G H I J I K L M N O I J I K L M P Q A B A C A B D R ~@12 S T U S T V W@2
>`.pickRestart({
  A: "~@2 e4 f4 g4 c5 ~ b4", B: "~@2 g4@2 ~@2 g4@4 a4 g4 f4@4", C: "~ g4 ~ e4 d4@2 ~@2", D: "~@2 e4 d4 e4@2 d4 c4",
  E: "c4@3 ~", F: "~@2 c5 ~", G: "~ d5 ~@2", H: "~ g5 ~ f#5", I: "~@2 a4 c5 d5 c5 b4 a4", J: "a4@2 a4 g4 a4@2 b4 ~",
  K: "e5@2 d5 c5 d5@2 e5 ~", L: "~@2 f5!2 e5 d5!2 c5", M: "e5 d5@2 ~", N: "~@2 f5!2 e5@2 d5 c5", O: "g4",
  P: "~@2 f5!2 e5@2 g5@2", Q: "g5", R: "c4 ~@3", S: "c5 ~@2 d5", T: "~@3 g5", U: "~ f#5 ~@2",
  V: "~@4 f#5@4 a4@2 ~ g4@2 a4@2 ~", W: "[b4@2 ~ a4@2 b4@2 ~ f5@16 ~@8]/2",
})).s("gm_clarinet").gain(0.31)

// other · alto sax · "Alto"
const alto_sax = note(`<
  A B A C A B D E F G H F G H I J I K L M N O I J I K L M P Q A B A C A B D R ~@12 S T U S T V W@2
>`.pickRestart({
  A: "~@2 e5 f5 g5 c6 ~ b5", B: "~@2 g5@2 ~@2 g5@4 a5 g5 f5@4", C: "~ g5 ~ e5 d5@2 ~@2", D: "~@2 e5 d5 e5@2 d5 c5",
  E: "c5@3 ~", F: "~@2 g5 ~", G: "~ a5 ~@2", H: "~ d5 ~ d5", I: "~@2 a4 c5 d5 c5 b4 a4", J: "a4@2 a4 g4 a4@2 b4 ~",
  K: "e5@2 d5 c5 d5@2 e5 ~", L: "~@2 f5!2 e5 d5!2 c5", M: "e5 d5@2 ~", N: "~@2 f5!2 e5@2 d5 c5", O: "g4",
  P: "~@2 f5!2 e5@2 g5@2", Q: "g5", R: "c5 ~@3", S: "g5 ~@2 a5", T: "~@3 d5", U: "~ d5 ~@2",
  V: "~@4 d5@4 e5@2 ~ d5@2 e5@2 ~", W: "[g5@2 ~ f5@2 g5@2 ~ a5@16 ~@8]/2",
})).s("gm_alto_sax").gain(0.31)

// other · trumpet · "Trumpet 1"
const trumpet = note(`<
  A B A C A B D E F G H F G H I J I K L M N O I J I K L M N P A B A C A B D Q ~@12 R S T R S U V@2
>`.pickRestart({
  A: "~@2 e4 f4 g4 c5 ~ b4", B: "~@2 g4@2 ~@2 g4@4 a4 g4 f4@4", C: "~ g4 ~ e4 d4@2 ~@2", D: "~@2 e4 d4 e4@2 d4 c4",
  E: "c4@3 ~", F: "~@2 g4 ~", G: "~ a4 ~@2", H: "~ d4 ~ d4", I: "c5 a4 c5 a4 b4 g4 d4 b4", J: "a4 f4 a4 f4 b4 g4 d4 b4",
  K: "a4 f4 c4 f4 b4 g4 b4 g4", L: "a4 d4@2 a4 g4 c4 g4 c4", M: "f4@2 f4 ~ f4@2 g4 c4", N: "a4 d4 a4 d4 g4 c4 g4 c4",
  O: "g4@2 g4 ~ g4 a4 b4 ~", P: "g4@2 g4 ~ g4 a4 b4 d5", Q: "c4 ~@3", R: "g4 ~@2 a4", S: "~@3 d4", T: "~ d4 ~@2",
  U: "~@4 d4@4 a4@2 ~ g4@2 a4@2 ~", V: "[b4@2 ~ a4@2 b4@2 ~ f5@16 ~@8]/2",
})).s("gm_trumpet").gain(0.31)

// other · trumpet · "Trumpet 2"
const trumpet_2 = note(`<
  A B A C A B D E F G H F G H I J I K L M N O I J I K L M N P A B A C A B D Q ~@12 R S T R S U V@2
>`.pickRestart({
  A: "~@2 e4 f4 g4 c5 ~ b4", B: "~@2 g4@2 ~@2 g4@4 a4 g4 f4@4", C: "~ g4 ~ e4 d4@2 ~@2", D: "~@2 e4 d4 e4@2 d4 c4",
  E: "c4@3 ~", F: "~@2 e4 ~", G: "~ f#4 ~@2", H: "~ b3 ~ a3", I: "c5 b4 e4 a4 b4 g4 d4 b4", J: "f4!2 c4 f4 b4 g4 d4 b4",
  K: "f4!2 c4 f4 b4 g4 d4 g4", L: "f4 d4@2 f4 e4 c4 e4 c4", M: "d4@2 d4 ~ d4@2 e4 c4", N: "f4 d4 f4 d4 e4 c4 e4 c4",
  O: "d4@2 d4 ~ d4 a4 b4 ~", P: "d4@2 d4 ~ d4 a4 b4 d5", Q: "c4 ~@3", R: "e4 ~@2 f#4", S: "~@3 b3", T: "~ a3 ~@2",
  U: "~@4 a3@4 e4@2 ~ d4@2 e4@2 ~", V: "[g4@2 ~ f4@2 g4@2 ~ c5@16 ~@8]/2",
})).s("gm_trumpet").gain(0.31)

// other · trombone · "Trombone 1"
const trombone = note(`<
  ~@8 A B C A B C D E D F G H I J D E D F G H I J K L K M K L ~ N O P Q@2 O P R@2 S T U V@2 W X@2 W Y Z@2
>`.pickRestart({
  A: "a2 g2 a2 c3@3 a2 g2", B: "a2@2 d3@4 ~@2 e3@2 g3@2 e3 d3 c3@2", C: "d3 g2@3 d3 f#2@3", D: "e3@3 ~ d3@3 ~",
  E: "e3@7 ~ d3@6 ~@2", F: "e3@6 ~@2 d3@5 ~@3", G: "~@2 a3 d4 ~ c4 e4 ~, d3@3 ~ c3@2 ~@2, ~ f3@2 ~@5",
  H: "~@2 a#3@2 d4@2 f4@2 d4@2 a#3 ~ c3@2 c4@2, a#2@7 ~@9", I: "~@2 d4@2 f4@2 a4@2 ~@2 c4@2 g4 ~@3, d3@3 ~ c3@2 ~@2",
  J: "d4!8", K: "c3!2", L: "b2 a2", M: "b2", N: "~@8 a2 ~ a3 g3 e3 d3 c3 a2", O: "c3 d3 ~ g2 ~ a2 ~ a3",
  P: "~@2 g3@6 a2 ~ a3 g3 e3 d3 c3 a2", Q: "[c3@2 d3@2 ~@2 g2@2 ~@2 a2@2 ~@2 a3@8 ~@2 a2 ~ a3 g3 e3 d3 c3 a2]/2",
  R: "[c3 d3 ~ g2 ~ a2 ~ a3@4 ~ e3 e4 ~ d#4]/2", S: "~ c#4 ~ b3 ~ a3 ~ g3", T: "~@2 d4@3 g4@3 e3@2 e4@2 ~@2 d#4@2",
  U: "~ c#4 ~ b3 d4 f#3 ~ g3", V: "[~ g#3 ~ c4 a2 g2 a2 c3@3 a2 g2 a2 d3@2 ~]/2", W: "e3@2 g3@2 e3 d3 c3@2 d3@2 g2@6",
  X: "[d3 f#2@3 a2 g2 a2 c3@3 a2 g2 a2 d3@2 ~]/2", Y: "d3@2 f#2@6 e3@2 ~ d3@2 e3@2 ~",
  Z: "[g3@2 ~ f3@2 g3@2 ~ a3@16 ~@8]/2",
})).s("gm_trombone").gain(0.31)

// other · trombone · "Trombone 2"
const trombone_2 = note(`<
  ~@8 A B C A B C D@2 E F G H I J D@2 E F G H I J K L K M K L ~ N O P Q@2 O P R@2 S T U V@2 W X@2 W Y Z@2
>`.pickRestart({
  A: "a2 g2 a2 c3@3 a2 g2", B: "a2@2 d3@4 ~@2 e3@2 g3@2 e3 d3 c3@2", C: "d3 g2@3 d3 f#2@3", D: "c3@4 b2@3 ~",
  E: "c3@3 ~ b2@4", F: "c3@3 ~ b2@3 ~", G: "~@2 a3 d4 ~ c4 e4 ~, d3@3 ~ c3@2 ~@2, ~ f3@2 ~@5",
  H: "~@2 a#3@2 d4@2 f4@2 d4@2 a#3 ~ c3@2 c4@2, a#2@7 ~@9", I: "~@2 d4@2 f4@2 a4@2 ~@2 c4@2 e4 ~@3, d3@3 ~ c3@2 ~@2",
  J: "b3!8", K: "a2 g2", L: "g2 f2", M: "g2", N: "~@8 a2 ~ a3 g3 e3 d3 c3 a2", O: "c3 d3 ~ g2 ~ a2 ~ a3",
  P: "~@2 g3@6 a2 ~ a3 g3 e3 d3 c3 a2", Q: "[c3@2 d3@2 ~@2 g2@2 ~@2 a2@2 ~@2 a3@8 ~@2 a2 ~ a3 g3 e3 d3 c3 a2]/2",
  R: "[c3 d3 ~ g2 ~ a2 ~ a3@4 ~ e3 e4 ~ d#4]/2", S: "~ c#4 ~ b3 ~ a3 ~ g3", T: "~@2 d4@3 g4@3 e3@2 e4@2 ~@2 d#4@2",
  U: "~ c#4 ~ b3 d4 f#3 ~ g3", V: "[~ g#3 ~ c4 a2 g2 a2 c3@3 a2 g2 a2 d3@2 ~]/2", W: "e3@2 g3@2 e3 d3 c3@2 d3@2 g2@6",
  X: "[d3 f#2@3 a2 g2 a2 c3@3 a2 g2 a2 d3@2 ~]/2", Y: "d3@2 f#2@6 c3@2 ~ b2@2 c3@2 ~",
  Z: "[d3@2 ~ c3@2 d3@2 ~ e3@16 ~@8]/2",
})).s("gm_trombone").gain(0.31)

// other · baritone sax · "Bari-Sax"
const baritone_sax = note(`<
  ~@8 A B C A B C D E D F G H I J D E D F G H I J K L K M K N O P Q R S@2 Q R T@2 U V W X@2 Y Z@2 Y AA AB@2
>`.pickRestart({
  A: "a3 g3 a3 c4@3 a3 g3", B: "a3@2 d4@4 ~@2 e4@2 g4@2 e4 d4 c4@2", C: "d4 g3@3 d4 f#3@3", D: "a3@3 a3 g3@3 g3",
  E: "f3@3 f3 g3@3 g3", F: "f3@3 f3 g3@2 a3 b3", G: "d4@3 d4 c4@3 c4", H: "a#3@3 a#3 c4@3 c4", I: "d4@3 d4 c4@3 ~",
  J: "g2@2 g3 g2 g3 g3@2 g2", K: "a3@5 ~ a3@2 c4@4 ~@2 c4@2", L: "g3@2 g4 g3 f3 f4@2 f3",
  M: "g3@2 g3@3 ~ g3@4 g4@2 g3@2 g4@2", N: "g3 g3@2 g#3 f3!2 f4@2", O: "f3 ~@7", P: "~@8 a3 ~ a4 g4 e4 d4 c4 a3",
  Q: "c4 d4 ~ g3 ~ a3 ~ d4", R: "~@2 c4@6 a3 ~ a4 g4 e4 d4 c4 a3",
  S: "[c4@2 d4@2 ~@2 g3@2 ~@2 a3@2 ~@2 d4@8 ~@2 a3 ~ a4 g4 e4 d4 c4 a3]/2",
  T: "[c4 d4 ~ g3 ~ a3 ~ d4@4 ~ e4 e5 ~ d#5]/2", U: "~ c#5 ~ b4 ~ a4 ~ g4", V: "~@2 d5@3 g5@3 e4@2 e5@2 ~@2 d#5@2",
  W: "~ c#5 ~ b4 d5 f#4 ~ g4", X: "[~ g4 ~ c5 a3 g3 a3 c4@3 a3 g3 a3 d4@2 ~]/2", Y: "e4@2 g4@2 e4 d4 c4@2 d4@2 g3@6",
  Z: "[d4 f#3@3 a3 g3 a3 c4@3 a3 g3 a3 d4@2 ~]/2", AA: "d4@2 f#3@6 c4@2 ~ b3@2 c4@2 ~",
  AB: "[d4@2 ~ c4@2 d4@2 ~ f4@16 ~@8]/2",
})).s("gm_baritone_sax").gain(0.31)

// bass · tuba
const bass = note(`<
  ~@8 A B C A B C D E D F G H I J D E D F G H I J K L K M K N O P Q R S@2 Q R T@2 U V W X@2 Y Z@2 Y AA AB@2
>`.pickRestart({
  A: "a1 g1 a1 c2@3 a1 g1", B: "a1@2 d2@4 ~@2 e2@2 g2@2 e2 d2 c2@2", C: "d2 g1@3 d2 f#1@3", D: "a2@3 a2 g2@3 g2",
  E: "f2@3 f2 g2@3 g2", F: "f2@3 f2 g2@2 a2 b2", G: "d3@3 d3 c3@3 c3", H: "a#2@3 a#2 c3@3 c3", I: "d3@3 d3 c3@3 ~",
  J: "g1@2 g2 g1 g2 g2@2 g1", K: "a1@5 ~ a1@2 c2@4 ~@2 c2@2", L: "g1@2 g2 g1 f1 f2@2 f1",
  M: "g1@2 g1@3 ~ g1@4 g2@2 g1@2 g2@2", N: "g1 g1@2 g#1 f1!2 f2@2", O: "f1 ~@7", P: "~@8 a1 ~ a2 g2 e2 d2 c2 a1",
  Q: "c2 d2 ~ g1 ~ a1 ~ d2", R: "~@2 c2@6 a1 ~ a2 g2 e2 d2 c2 a1",
  S: "[c2@2 d2@2 ~@2 g1@2 ~@2 a1@2 ~@2 d2@8 ~@2 a1 ~ a2 g2 e2 d2 c2 a1]/2",
  T: "[c2 d2 ~ g1 ~ a1 ~ d2@4 ~ e2 e3 ~ d#3]/2", U: "~ c#3 ~ b2 ~ a2 ~ g2", V: "~@2 d3@3 g3@3 e2@2 e3@2 ~@2 d#3@2",
  W: "~ c#3 ~ b2 d3 f#2 ~ g2", X: "[~ g#2 ~ c3 a1 g1 a1 c2@3 a1 g1 a1 d2@2 ~]/2", Y: "e2@2 g2@2 e2 d2 c2@2 d2@2 g1@6",
  Z: "[d2 f#1@3 a1 g1 a1 c2@3 a1 g1 a1 d2@2 ~]/2", AA: "d2@2 f#1@6 c2@2 ~ b1@2 c2@2 ~",
  AB: "[d2@2 ~ c2@2 d2@2 ~ f2@16 ~@8]/2",
})).s("gm_tuba").gain(0.31)

// chords · vibraphone · "Mallet Perc." · E5 Csus2 Em D# C Cmaj7 G7 A7
const vibraphone = note(`<
  ~@45
  [~@9 e6!2 [b5,e6] e6 ~ [b5,e6] ~]
  [g6@2 ~ c6 [c5,d5] ~@5 [e6,g6] ~@2 [d#6,g6] ~ b5, ~@7 g6]
  [a5 g6 d6 b5 a5 ~ a#5 g5 e6@2 e5 ~ g5 [g4,e5] b4 d5, ~@8 a5 ~@7]
  [g5 a5 b5 d6 b5 e6 d6 g6 e6!2 a#6 a6 g6 b6 e6 a6]
  [g6 d6 g6 e6 ~ [b5,c6,d6,e6,f6,g6] [f5,g5,a5,b5,d6] [g4,a4,e5,a5] ~@8]
  ~@8
>`).s("gm_vibraphone").gain(0.41)

// chords · vibraphone · "Mallet Perc." · soft notes · Bm
const vibraphone_soft = note("<~@46 [~@2 f6 ~@13] ~@2 [~@7 [b4,c5,d5] ~@8] ~@8>").s("gm_vibraphone").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@7 A B C D B C D B E@4 F G H B E@4 B E ~ I J E K I J L M N O N O N O N P ~@3 Q R S T R S U V ~
>`.pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x!2 ~ x ~ x ~ x", C: "x ~@3 x!2 ~@2", D: "~ x!2 ~@2 x!2 ~", E: "x ~@2 x ~ x ~ x",
  F: "x ~@2 x ~@3 x", G: "x ~@2 x ~ x ~@2", H: "~ x!2 ~@5", I: "x ~@2 x!2 ~@2 x", J: "~ x ~ x ~ x ~ x",
  K: "~ x ~ x ~@4", L: "x", M: "~@4 x!2 ~@2", N: "x!2 ~@2 x!2 ~@2", O: "x ~ x ~@2 x ~@2 x ~ x ~@5",
  P: "x ~ x ~@2 x ~@10", Q: "~@4 x!2 ~ x", R: "~ x ~ x!2 ~@3", S: "x!2 ~@3 x!2 ~", T: "~ x!2 ~ x!2 ~ x",
  U: "~@2 x ~ x ~@6 x ~ x ~@2", V: "~@3 x ~@4 x ~@7",
})).gain(0.31)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B C D B C D B@7 E B@7 F B@3 G B@2 ~ B@2 H B@3 H B G ~@3 I B J K B J D L ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "x!2", E: "~@2 x!2", F: "~ x!2 ~", G: "~ x ~@2",
  H: "~@4 x ~ x!2 ~@4 x ~@3", I: "~@3 x ~@2 x ~", J: "~@4 x ~ x!3 ~@7", K: "x ~@2 x", L: "x ~@4 x ~@10",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B ~ A B ~ A@5 C A D A@7 E ~@7 F G H G F G H G I A J K L A M I A M ~@3
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~@2", C: "x!5 ~ x!2", D: "x", E: "~@5 x ~@10", F: "~@3 x", G: "~ x ~ x",
  H: "~@7 x ~@4 x ~@3", I: "~@4 x!4", J: "x!3 ~ x!4", K: "x!5 ~ x ~", L: "x ~ x ~ x!4", M: "x ~ x ~@2 x ~@10",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@29 [~@2 x!2 ~@3 x ~@7 x] ~@3 [~@14 x!2] ~@24>").gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct("<~@29 [~@3 x ~@3 x] ~@3 [~@10 x!3 ~@3] ~@24>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@10 A ~@2 A ~@5 B ~ C ~@19 D ~@3 D ~ E F G ~ H I ~ H I ~@2>".pickRestart({
  A: "x!2", B: "~@5 x ~@2", C: "~@3 x ~ x ~ x", D: "~@5 x ~@10", E: "~@3 x ~@4", F: "~@5 x ~ x", G: "~ x ~@6", H: "~ x",
  I: "x",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct("<~@29 [x!2 ~@8 x!2 ~ x ~@2] ~@3 [~@8 x!2 ~@3 x ~@2] ~@24>").gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@2 A ~@16 B ~@3 B ~@2 C ~@3 C ~@9 D E ~ D E C ~>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~ x", D: "~@3 x", E: "~ x ~@2",
})).gain(0.31)

// drums · ride
const ride = s("rd").struct("<~@30 A B@2 C A B ~ D B E B F B E B G ~@12>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!4 ~@4", D: "~@5 x!3", E: "x!2 ~@2 x!4", F: "x!2 ~@3 x!3", G: "x!2 ~@6",
})).gain(0.31)

stack(
  flute, clarinet, alto_sax, trumpet, trumpet_2, trombone, trombone_2, baritone_sax, bass, vibraphone, vibraphone_soft,
  kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom, crash, ride
)

More by Kansas