Strudelify

god only knows

Brian Wilson & Tony Asher

KeyF majorTempo117 bpm
0:00/0:00
// god only knows — Brian Wilson & Tony Asher
// 117 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5851211; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 83 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117/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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C ~ D@3 E F G H I J F J K L J G E M N O@2 P@2 Q@2 R@3 S T S T U@2 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM
  AN C AO ~@2 AP@3 AQ AR@3 AS AP@3 AQ AR@3 AS AP@3 AQ AT@2 E
>`.pickRestart({
  A: "~@3 c4@8 d4", B: "eb4@3 bb4", C: "ab4", D: "eb4@5 eb4@6 eb4", E: "eb4@5 eb4 f4@2 gb4@4",
  F: "ab4@3 ~ f4 ~ ab4@3 ~ f4 ~ ab4@12", G: "g4@3 ~ f4 ~ g4@3 ~ f4 ~ g4@12", H: "c5@3 ~ ab4 ~ c5@3 ~ ab4 ~ c5@12",
  I: "f4@3 ~ d4 ~ f4@3 ~ d4 ~ f4@12", J: "bb4@3 ~ g4 ~ bb4@3 ~ g4 ~ bb4@12", K: "g4@3 ~ eb4 ~ g4@3 ~ eb4 ~ g4@12",
  L: "eb4@3 ~ c4 ~ eb4@3 ~ c4 ~ eb4@12", M: "~@3 db5 c5 db5", N: "c5@2 bb4@3 f4@3 bb4@4",
  O: "[~@9 ab4 ~ g4 ab4@4 g4@2 ab4@4 c5@6 f5@6 ab4@2 bb4@4 c5@8]/2", P: "[~@2 eb5!2 d5 eb5@2 f5 ab4 bb4 b4@2]/2",
  Q: "[~@5 eb5 eb5@2 d5@2 eb5@4 g5@2 c5@2 d5@2 eb5@4]/2",
  R: "[~@5 eb4 c5@2 bb4 c5@2 bb4@3 eb5@2 bb4@2 ab4@3 g4@2 eb4@3 f4@9 ~]/3", S: "ab3@3 ~@3 ab4@3 ~@7 ab3@3 ~@3 ab4 ~",
  T: "gb4@3 ~@7 e4 ~ eb4 ~@3 db4 ~ c4 ~@3 bb3 ~", U: "[ab3 ~@17 eb4@22 ~@2 ab4@6]/2", V: "f4@2 ~ bb3", W: "db4@2 ~ g3",
  X: "ab3@5 g3 ab3@5 eb3", Y: "g3@2 ab3 bb3@3 ~@2 ab3 g3@2 eb3", Z: "ab3@5 g3 ab3@5 g3",
  AA: "f3@6 f3 gb3 g3 [ab3,a3] bb3 b3 c4@12", AB: "db4@2 f4 db4@2 f4 ab4@6", AC: "ab4@3 ~ c5 ~ ab4@3 ~ c5 ~ eb5@12",
  AD: "bb4@2 f4 db4@2 bb3 db4@2 f4 bb4@2 db5", AE: "db4@3 ~ f4 ~ db4@3 ~ f4 ~ db4@12",
  AF: "bb3@3 ~ db4 ~ bb3@3 ~ db4 ~ bb4@3 ~ g4 ~ f4@3 ~ g4 ~", AG: "c4@3 ~ ab3 ~ c4@3 ~ ab3 ~ c4@12",
  AH: "bb3@3 ~ db4 ~ bb3@3 ~ db4 ~ bb3@12", AI: "eb4@12 eb4@3 ~ g4 ~ eb4@3 ~ g4 ~",
  AJ: "d4@3 ~ f4 ~ d4@3 ~ f4 ~ bb4@2 ab4@2 f4@2 d4@2 f4@2 ab4@2", AK: "g4",
  AL: "c4@3 ~ eb4 ~ c4@3 ~ eb4 ~ c5@2 g4@2 eb4@2 c4@2 eb4@2 eb4@2", AM: "c4", AN: "eb4@13 ~ f4 g4 ~ ab4 bb4@6",
  AO: "g4@6 f4 ~ eb4 d4 ~ c4 bb3@12", AP: "[~@6 c4@2 bb3 c4@2 bb3@3 eb4@2 bb3@2 ab3@3 g3@2 eb3@7 f3@6]/3", AQ: "g3 ~",
  AR: "[~@6 c5@2 bb4 c5@2 bb4@3 eb5@2 bb4@2 ab4@3 g4@2 eb4@7 f4@6]/3", AS: "g4 ~",
  AT: "[~@6 c5@2 bb4 c5@2 bb4@3 eb5@2 bb4@2 ab4@3 g4@2 eb4]/2",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B A B C D C E F G H I J K J L M J M E N O P Q R S R T U R V W X W X Y Z AA AB Y AC Y AD AE AF AG AH AI AJ@2 AK@2
  AL@2 AM@3 AN ~@4 AO AP AQ AR AO AP AQ AR AO AP AQ AR AO AP AQ AR AO AP AQ AR E
>`.pickRestart({
  A: "c4@21 ~ c4@2", B: "bb3@21 ~ bb3@2", C: "c4 ~ c4 ~ c4 ~ c4 ~", D: "bb3 ~ bb3 ~ bb3 ~ bb3 ~",
  E: "eb3@5 eb3 f3@2 gb3@4", F: "db3@12 db3@3 ~ f3 ~ db3@3 ~ f3 ~", G: "bb2@12 bb2@3 ~ db3 ~ bb2@3 ~ db3 ~",
  H: "f3@12 f3@3 ~ ab3 ~ f3@3 ~ ab3 ~", I: "bb3@12 bb3@3 ~ d4 ~ bb3@3 ~ d4 ~", J: "eb3@12 eb3@3 ~ g3 ~ eb3@3 ~ g3 ~",
  K: "d3@12 d3@3 ~ f3 ~ d3@3 ~ f3 ~", L: "c3@12 c3@3 ~ eb3 ~ c3@3 ~ eb3 ~", M: "ab3@12 ab3@3 ~ c4 ~ ab3@3 ~ c4 ~",
  N: "db3@21 ~ f3@2", O: "bb2@21 ~ db3@2", P: "f3@5 f3 ab3@5 eb3", Q: "bb2@21 ~ d3@2", R: "eb3@21 ~ eb3@2",
  S: "d3@21 ~ b2@2", T: "c3@21 ~ eb3@2", U: "ab3@21 ~ c4@2", V: "ab3@5 c4 f3@5 f3",
  W: "eb3@3 ~@3 eb4@3 ~@7 f4 ~@5 eb4 ~", X: "ab3@3 ~@7 b3 ~ db4 ~@3 eb4 ~ gb4 ~@3 ab4 ~", Y: "ab3 ~ ab3 ~ ab3 ~ ab3 ~",
  Z: "c4 ~ c4 ~ ab3 ~ eb3 ~", AA: "bb3 f3 bb2 ab3", AB: "~@3 eb3@2 f3 g3@2 ab3 bb3@2 eb3", AC: "g3 ~ g3 ~ g3 ~ g3 ~",
  AD: "f3@6 f3 gb3 g3 [ab3,a3] bb3 b3 c4@12", AE: "f3@6 f3@5 g3", AF: "ab3@3 eb4", AG: "~ db4",
  AH: "~@6 db4@2 c4@3 db4", AI: "c4@2 bb3@3 f3@3 bb3@4", AJ: "[~@5 g3 ab3@2 g3 ab3@2 c4@3 f4@3 ab3 bb3@2 c4@4]/2",
  AK: "[~@5 eb4 eb4@2 d4@2 eb4@4 f4@2 ab3@2 bb3@2 b3@4]/2", AL: "[~@5 eb4 eb4@2 d4@2 eb4@4 g4@2 c4@2 d4@2 eb4@4]/2",
  AM: "[~@6 c4@2 bb3 c4@2 bb3@3 eb4@2 bb3@2 ab3@3 g3@2 eb3@7 f3@6]/3", AN: "g3@3 ~", AO: "c4@4 c4 d4", AP: "eb4@3 bb4",
  AQ: "ab4", AR: "eb4@3 ~@3 bb3@2 c4@2 db4@2",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B A C D E F G D H I J H K H L D E F G D H I J H K H L D E F M N M N O P Q O P R P S O T H D H I J H K H L D E F E D
  E F E U V W V U V W V U V W V U V W V U V W V G
>`.pickRestart({
  A: "ab2@21 ~ ab2@2", B: "g2@21 ~ g2@2", C: "g2@6 ~@2 bb2 eb2@2 f2", D: "ab2@5 ab2@6 ab2", E: "g2@5 g2@6 g2",
  F: "f2@5 f2@6 f2", G: "eb2@5 eb2 f2@2 gb2@4", H: "bb2@5 bb2@6 bb2", I: "f3@5 f3@6 f3", J: "ab3@5 ab3@6 ab3",
  K: "b2@5 b2@6 b2", L: "a2@5 a2@6 a2", M: "eb2@3 ~@3 eb3@3 ~@7 f3 ~@5 eb3 ~",
  N: "ab2@3 ~@7 b2 ~ db3 ~@3 eb3 ~ gb3 ~@3 ab3 ~", O: "db3@5 db3@6 db3", P: "eb3@5 eb3@6 eb3", Q: "f3@5 f3 bb2@5 bb2",
  R: "e3@5 e3@6 e3", S: "d3@5 d3@6 d3", T: "c3@5 c3@6 c3", U: "ab2@2 eb2 ab2 eb2 c3 ~@5 ab2",
  V: "g2@2 eb2 g2 eb2 bb2 ~@5 g2", W: "f2@2 f2 ab2 f2 c3 ~@5 f2",
})).s("gm_baritone_sax").gain(0.3)

stack(alto_sax, tenor_sax, baritone_sax)