Strudelify

by the time i get to phoenix

Jim Webb

KeyF majorTempo108 bpm
0:00/0:00
// by the time i get to phoenix — Jim Webb
// 108 bpm, 4/4, key F 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/5894365; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(108/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 · french horn · "Flügelhorn"
const french_horn = note(`<
  A B A C D@2 E F D@2 E G H I H J K D L M D@2 E F D@2 E G H I H N O ~ P Q R S T U V S W X Y Z AA AB K AC AD AE AF AG AH
  AI AJ@2 AK ~ AL AM AN AO AP@2 AQ@2 AR@2 AS@4
>`.pickRestart({
  A: "d4@3 bb3 ab3@2 c4 d4", B: "eb4@3 c4 ab3@2 ab3 bb3", C: "eb4@2 d4 ~", D: "~ c4 ~ c4", E: "~ d4 ~ d4",
  F: "~ d4 ~ bb3", G: "~ d4 ~ g4", H: "~ g4 ~ g4", I: "~ f4 ~ f4", J: "~ g4 ~@2", K: "~ eb4 ~ eb4", L: "~ ab3 ~ ab3",
  M: "~ ab3 ~ bb3", N: "~@4 g4@2 g4 ~@5 g4@4", O: "~@4 eb4@4 ~@4 eb4@2 eb4 ~", P: "~@4 db4@4 ~@4 db4@2 db4 ~",
  Q: "~ d4 ~@2", R: "~@2 c4@2 ~ c4!3", S: "c4!2 c4@2", T: "d4@2 d4!2 d4@2 bb3@2", U: "~ bb3!2 ~@5",
  V: "~@4 c4@4 c4@3 c4@2 c4@3", W: "d4@2 d4!2 d4@4", X: "~@2 bb3@2 bb3 ~@11", Y: "~ ab3 ~ eb4", Z: "f4!2",
  AA: "f4 f4@5 bb3@2", AB: "~ bb3@2 bb3", AC: "~ eb4 ~ c4", AD: "~@2 db4@2 ~@2 db4 c4", AE: "d4 c4 bb3@4 d4 eb4",
  AF: "f4@10 f4@2 f4!2 ~ eb4", AG: "f4 f4@5 eb4 bb4", AH: "bb4 g4@7", AI: "~@7 eb4",
  AJ: "[f4!2 ~ f4 f4@2 eb4@2 f4@12 eb4@4 f4@3 eb4@2 bb4@3]/2", AK: "g4", AL: "~@6 c5@2 c5@5 c5 ~ c5",
  AM: "c5 bb4 ~ ab4@7 ab4@2 bb4@2 c5@2", AN: "bb4 bb4@5 ~@2", AO: "bb4@3 g4",
  AP: "[ab4@3 ab4 ab4@7 g4 ab4 g4 ab4 bb4]/2", AQ: "[g4@7 eb4]/2", AR: "[f4@5 f4 ~ g4 f4@16 f4@2 eb4@2 d4@2 g4@2]/2",
  AS: "g4/4",
})).s("gm_french_horn").gain(0.25).pan(1)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  A B C D E F G@2 E H G I J K@2 L M E N O P Q R O S T U ~ J K@2 V W@2 X Y Z AA AB AC AD AA AE AF AG AH AI AJ ~@3 AK AL
  AM AN AO AP@2 AQ ~ AR AS AT AU AV@2 AW@2 AX AY AX AZ BA@2
>`.pickRestart({
  A: "bb3@3 ~@3 ab3!2", B: "c4@3 ab3 ab3@2 ~@2", C: "bb3@3 ~@3 c4!2", D: "c4@3 ~", E: "~ ab3 ~ ab3", F: "ab3 ~@3",
  G: "~ bb3 ~ g3", H: "~ ab3 ~@2", I: "~ g3 ~ d4", J: "~ eb4 ~ eb4", K: "~ d4 ~ d4", L: "~ eb4 ~@2", M: "~ c4 ~ c4",
  N: "~ f3 ~ f3", O: "~@6 d4 eb4", P: "f4@5 f4!3", Q: "f4 f4@5 eb4 bb4", R: "bb4 g4@7", S: "f4@6 f4@2 f4@3 f4@2 eb4@3",
  T: "f4@6 eb4 bb4", U: "g4", V: "~@2 eb4!2 ~@2 eb4@2", W: "~@2 c4@2 ~@2 c4!2", X: "~@2 ab3@2 ~@2 ab3!2",
  Y: "~ ab3 ~ bb3", Z: "~@2 ab3@2 ~ ab3!3", AA: "ab3!4 ab3@2 ~@2", AB: "bb3@2 bb3!2 bb3@2 g3@2", AC: "~ g3!2 ~@5",
  AD: "~@4 ab3@4 ab3@3 ab3@2 ab3@3", AE: "bb3@2 bb3!2 bb3@4", AF: "~@2 g3@2 g3 ~@11", AG: "~ eb3 ~ c4", AH: "d4!4",
  AI: "d4 d4@5 g3@2", AJ: "~ g3@2 g3", AK: "~@6 bb3 c4", AL: "c4@10 c4@2 c4!2 ~ c4", AM: "c4 c4@5 c4@2", AN: "d4 d4@7",
  AO: "~@7 bb3", AP: "[c4!2 ~ c4 c4@2 c4@2 c4@12 c4@4 c4@3 c4@2 c4@3]/2", AQ: "d4", AR: "~@6 eb4@2 eb4@5 eb4 ~ eb4",
  AS: "eb4 d4 ~ c4@7 c4@2 d4@2 eb4@2", AT: "d4 d4@5 ~@2", AU: "c4@3 eb4", AV: "[eb4@3 eb4 eb4@7 d4 eb4 d4 eb4 f4]/2",
  AW: "[bb3@7 ~]/2", AX: "~@2 c4@2 ~ c4 ~ c4", AY: "~ b3!3", AZ: "~@2 bb3@2 ~ bb3 ~ bb3", BA: "[~ c4@15]/2",
})).s("gm_french_horn").gain(0.25).pan(0.3)

// other · trombone
const trombone = note(`<
  A B A C D E F G H I J K L M N O P Q R ~ S T U ~ S V U W ~ V ~@2 X@2 Y Z AA I F G AB I J ~ AC AD N O AE AF R ~ AG AH AI
  ~ AG AH AJ AK AL AM AN AO AP AQ AR AS AT AU AV@4
>`.pickRestart({
  A: "g3@3 ~@3 ab3!2", B: "ab3@3 ~@5", C: "ab3@6 d3 eb3", D: "f3@5 f3!3", E: "f3 bb2@5 eb3 bb3", F: "bb3 g3@7",
  G: "~@7 eb3", H: "f3 f3@6 f3", I: "f3 f3@5 eb3 bb3", J: "g3", K: "~@6 bb3!2", L: "c4@6 c4!2", M: "c4@5 ab3 bb3 c4",
  N: "bb3 bb3@7", O: "~@6 f3 g3", P: "ab3!2 ab3@5 ab3", Q: "g3!2 f3@5 eb3", R: "f3", S: "~ ab3 ~ ab3", T: "ab3 ~@3",
  U: "~ bb3 ~ g3", V: "~ ab3 ~@2", W: "~ g3 ~ d4", X: "~@4 ab3@4 ~@4 ab3@2 ab3 ~", Y: "~@4 f3@4 ~@4 f3@2 f3 ~",
  Z: "~@6 d3 eb3", AA: "f3@5 f3!2 eb3", AB: "f3@6 f3@2 f3@3 f3@2 eb3@3", AC: "~@6 c4@2 c4@5 c4 ~ c4",
  AD: "c4@2 c4@2 c4 bb3 ~ ab3@3 ab3@2 bb3@2 c4@2", AE: "ab3@3 ab3 ab3@4", AF: "~ ab3 g3 f3 eb3@3 eb3",
  AG: "~@2 ab3!2 ab3@2 ab3@2", AH: "ab3@2 ab3 ~", AI: "bb3@2 bb3!2 bb3@2 g3@2", AJ: "bb3@2 bb3!2 bb3@2 bb3@2",
  AK: "~@2 g3@2 g3 ~@3 g3@2 g3 ~@5", AL: "eb3 c4", AM: "d4@3 d4 d4@2 d4 eb4", AN: "f4 f4@5 eb4 d4", AO: "eb4@3 bb3",
  AP: "c4!2", AQ: "bb3!2", AR: "~@2 g3@2 ~ g3 ~ g3", AS: "~ ab3@2 ~", AT: "~@2 ab3@2 ~ ab3 ~ ab3", AU: "~@3 f3",
  AV: "e3/4",
})).s("gm_trombone").gain(0.2).pan(0.7)

// bass · tuba
const bass = note(`<
  A@3 B@3 C D B@2 E D F G H I J K L M N@2 O P N@2 O P F B H I Q R L S N@2 O P N@2 O P T U V W X Y Z AA N@2 O P N@2 O P T
  AB V AC X AD AE AF AG AH AI AJ AK AL
>`.pickRestart({
  A: "bb2@3 bb2 bb2@2 bb2!2", B: "bb2@3 bb2 bb2@2 ~@2", C: "eb2 ~ bb2!2", D: "eb2@3 eb2 eb2@2 ~@2", E: "eb2 ~ bb2 ~",
  F: "ab2@3 ab2 ab2@2 ~@2", G: "bb2 ~ bb2 ~", H: "g2@3 g2 g2@2 ~@2", I: "c3@3 c3 c3@2 ~@2", J: "f2 ~ c2 ~",
  K: "f2@3 f2 f2@2 ~@2", L: "db2@3 db2 db2@2 ~@2", M: "bb1@2 bb1@2 f2@2 bb1 eb2", N: "f2@2 ~ bb2 f2@2 f2@2",
  O: "eb2@2 ~ bb2 eb2@2 eb2@2", P: "eb2@2 ~ bb2 eb2 bb2 eb2@2", Q: "f2 ~ c2!2", R: "f2@3 f2 c2@2 ~@2", S: "bb1!2 f2 ~",
  T: "ab2@3 ab2 ab2@3 ab2", U: "bb2@3 bb2 bb2@2 bb2@2", V: "g2@3 g2 g2@3 g2", W: "c2@3 c2 c2@4", X: "f2@3 f2 f2@3 f2",
  Y: "f2@3 f2 f2@4", Z: "db2@3 db2 db2@3 db2", AA: "bb1@3 bb1 bb1@4", AB: "bb2@3 bb2 bb2@3 bb2", AC: "c3@3 c3 c3@4",
  AD: "bb2 ~ bb2!2", AE: "eb2@3 eb2 eb2@2 eb2@2", AF: "ab2@3 ab2 ab2@2 ab2@2", AG: "f2 bb2", AH: "g2@2 g2!2",
  AI: "c2@3 c2 g2@2 c2@2", AJ: "bb1@3 bb1 f2@2 bb1@2", AK: "c2@6 e2@2 g2@2 ~ e2@2 g2@2 ~", AL: "e2 c2@7",
})).s("gm_tuba").gain(0.25)

stack(french_horn, french_horn_2, trombone, bass)