Strudelify

In The Mood Quartet

Ryan Rusch

KeyA♭ majorTempo180 bpm
0:00/0:00
// In The Mood Quartet — Ryan Rusch
// 180 bpm, 4/4, key Ab 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/5383245; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/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 · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A@2 B@2 ~ C ~@2 D E D E F G D E H I@2 J D E D E F G D E H K@2 L M N M O M P Q R M N M O M P S T ~@2 U V ~ W X R ~@4 Y
  Z AA AB AC AD AE AF AG AH@2 AI@2 ~@2 AJ@2 AH@2 AI@2 ~@2 AK AL@2 ~@10 AM AN ~ AO AP@3 AQ AP@3 AR AS AT AU ~@13 AV@2
  AW@2 AX@2 AY@2 AZ@2 ~ BA BB BC BD BE BF BG@4
>`.pickRestart({
  A: "[ab3@3 c4 eb4@3 ab4@4 ab4@3 ~ ab4@4 ab4@3 ~ ab4 g4@3 ab4 eb4@3 c4]/2",
  B: "[eb4@3 d4 db4@3 c4 b3@3 bb3@3 ~ ab3@17]/2", C: "~@11 g4@4 ~", D: "ab3@3 c4 f4@2 ~ ab3 c4@3 f4 ab3@3 c4",
  E: "f4@2 ~ ab3 c4@3 f4@5 ~@4", F: "bb3@3 db4 f4@2 ~ bb3 db4@3 f4 bb3@3 db4", G: "f4@2 ~ bb3 db4@3 f4@5 ~@4",
  H: "db4@3 f4 ab4@2 ~ db4 f4@3 ab4 db4@3 f4",
  I: "[ab4@2 ~ db4 f4@3 ab4@4 ab4@3 ~ ab4@4 ab4 ab4@3 ab4 ab4@3 ab4 ab4@3 ab4]/2",
  J: "ab4@3 ab4 ab4@3 ab4 ab4@2 ~ ab4@3 ~ ab4", K: "[ab4@2 ~ db4 f4@3 ab4@4 ab4@3 ~@2 c4@8 db4@8, ~@15 ab4@4 ~@13]/2",
  L: "d4@2 ~ db4@3 ~ c4@9", M: "f4@2 ~ eb4@4 f4@9", N: "~@3 bb3 db4@3 f4 g4@3 g4@5", O: "~@3 bb3 db4@3 f4 g4@3 c5@5",
  P: "~@3 bb3 db4@3 f4 g4@3 c5@3 ~ f4", Q: "g4@3 g4 g4@3 g4 gb4@3 gb4 gb4@3 gb4", R: "g4@4 d4@2 ~ db4@4 c4@5",
  S: "eb4@2 ~ eb4 ~@3 c4 eb4@2 ~ eb4 ~@3 c4", T: "eb4@4 b3@2 ~ bb3@4 ab3@5", U: "c4@3 eb4 f4@3 eb4 ab4@3 f4 d4@3 b3",
  V: "bb3@3 db4 f4@3 ab4 b4@3 eb5 ~@4", W: "~@11 g4@3 ~ eb4", X: "g4@2 ~ g4 ~@3 eb4 gb4@2 ~ gb4 ~@3 eb4",
  Y: "ab3 ~ b3 ~", Z: "~@11 eb5@3 ~ c5", AA: "eb5@2 ~ eb5 ~@3 c5 eb5@2 ~ eb5 ~@3 c5", AB: "eb5@4 b4@2 ~ bb4@4 ab4@5",
  AC: "ab4@3 bb4 c5@3 db5 eb5@3 ab5@4 eb5", AD: "e5@2 ~ d5@3 ~ eb5@9", AE: "~@3 eb5 db5@4 b4@2 ~ bb4@3 ~ d5",
  AF: "db5@4 b4@3 ab4@9", AG: "ab3@8 c4@3 eb4 ~@4", AH: "[~@12 ab4@12 f4@3 eb4 ~@4]/2",
  AI: "[~@12 ab4@12 c5@3 eb5 ~@4]/2", AJ: "[~@12 ab3@12 c4@3 eb4 ~@4]/2", AK: "~@12 c4@3 b3",
  AL: "[bb3@3 c4 db4@3 eb4 e4@2 ~ f4@3 ~ f4@4 ~@5 eb4@5 ~@3]/2", AM: "~ eb4 d4 eb4 e4 f4 gb4 g4", AN: "ab4 ~@7",
  AO: "~@2 ab4!2", AP: "~ ab4 ~ ab4", AQ: "~ gb4 ab4!2", AR: "~ ab4 ~ bb4", AS: "~ bb4 ~ bb4",
  AT: "~@2 ab4@2 ~ eb4 d4 eb4", AU: "e4 f4 gb4 g4 ab4 ~@3", AV: "[~@10 eb4@3 ~ eb4@17 ~]/2",
  AW: "[~@10 eb4@2 ~@2 eb4@17 ~]/2", AX: "[~@10 gb4@2 ~@2 f4@17 ~]/2", AY: "[~@10 f4@2 ~@2 eb4@17 ~]/2",
  AZ: "[~@10 eb4@2 ~@2 g4@17 ~]/2", BA: "eb4 ~ d4 db4 d4 ~ eb4 ~ e4 ~ f4 ~ gb4 ~ g4 ~",
  BB: "ab4 ~ g4 gb4 g4 ~ ab4 ~ a4 ~ bb4 ~ b4 ~ c5 ~", BC: "db5 ~ c5 bb4 b4 ~ c5 ~ db5 ~ d5 ~ eb5 ~ e5 ~",
  BD: "f5 ~ e5 eb5 e5 ~ f5 ~ gb5@2 ~@2 gb5 ~ f5 e5", BE: "f5 ~ gb5 ~ g5@2 ~@2 g5 ~ gb5 f5 gb5 ~ g5 ~",
  BF: "ab5@4 ab5 a5 bb5 b5", BG: "[c6@14 ab5@11 ~@7]/4",
})).s("gm_clarinet").gain(0.4)

// other · clarinet · "B♭ Clarinet" · soft notes
const clarinet_soft = note("<~@113 A B@2 C B@4 D E F G ~@20>".pickRestart({
  A: "f4 ~ c4 ~", B: "~ ab4 ~ ab4", C: "~ ab4 ~ gb4", D: "~ bb4 ~ bb4", E: "~ bb4 ~ ab4",
  F: "~ eb4 d4 eb4 e4 f4 gb4 g4", G: "ab4 ~@7",
})).s("gm_clarinet").gain(0.2)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@3 A B C D E F G F G H I F G J K L M F G F G H I F G J K N O P@2 Q@4 R S P@2 Q@4 T U ~@5 V W X Y Z ~@3 AA W AB ~ AC@2
  AD AE AF AG AH AI AJ@2 AK AL AM AN AO AP AQ AR AS AT@2 ~ AU@8 AV@3 ~@3 AW@6 AX@2 AY@2 ~@3 AU@8 AZ@4 BA@6 BB@2 ~ BC BD
  BE BF BG BH BI@4
>`.pickRestart({
  A: "~@3 c4 eb4@3 ab4@4 eb4 c4@3 ab3", B: "bb3@2 ~ c4 bb3@3 ab3 f3@4 bb3@2 ~ c4", C: "bb3@3 ab3 f3@3 f3@4 c4@4 ~",
  D: "bb3@2 ~ c4 bb3@3 g3 f3@4 bb3@2 ~ c4", E: "bb3@3 g3 f3@3 f3@4 ~@5", F: "eb3@3 f3 c4@2 ~ eb3 f3@3 c4 eb3@3 f3",
  G: "c4@2 ~ eb3 f3@3 c4@5 ~@4", H: "ab3@3 bb3 db4@2 ~ ab3 bb3@3 db4 ab3@3 bb3", I: "db4@2 ~ ab3 bb3@3 db4@5 ~@4",
  J: "g3@3 bb3 db4@2 ~ g3 bb3@3 db4 g3@3 bb3", K: "db4@2 ~ g3 bb3@3 db4@5 ~@4",
  L: "eb3@3 eb3 eb3@3 eb3 f3@3 f3 f3@3 f3", M: "e3@3 e3 e3@3 e3 eb3@2 ~ f3@3 ~ eb3",
  N: "~@3 eb3 eb3@3 eb3 f3@3 f3 f3@3 f3", O: "e3@2 ~ eb3@3 ~ eb3@9", P: "[~@12 b3@2 ~ bb3@13 ~@4]/2",
  Q: "[c4@3 ab3@4 d4@5 b3@2 ~ bb3@13 ~@4]/2", R: "bb3@3 bb3 bb3@3 bb3 a3@3 a3 a3@3 a3", S: "bb3@4 ab3@3 g3@4 f3@5",
  T: "bb3 ~ a3 ~", U: "bb3 b3 bb3 ab3", V: "bb2 ~ eb3 ~", W: "db4@2 ~ db4 ~@3 g3 c4@2 ~ c4 ~@3 a3",
  X: "db4@4 e3@2 ~ eb3@4 eb3 b4@2 ~ ab4", Y: "b4@2 ~ ab4 f4@3 ab4 f4@3 d4 f4@2 ~ d4", Z: "db4@3 bb3 f3@3 gb3@4 eb3@5",
  AA: "~@11 db4@3 ~ db4", AB: "db4@4 e3@2 ~ eb3@4 eb3@5", AC: "[~@12 e3@2 ~ eb3@9 e3@2 ~ eb3@3 ~ e3]/2",
  AD: "eb3@4 eb3@2 ~ ab2 f3@4 ab3@4", AE: "bb3@15 ab3", AF: "f3@3 eb3@9 f3@3 ab3",
  AG: "bb3 ab3 ~ bb3 ab3@3 ab3 b3@7 ab3", AH: "f3@3 eb3@3 ~ eb3@9", AI: "~ c4@2 eb4",
  AJ: "[gb4@2 ~ eb4 gb4@2 ~ eb4 gb4@4 eb4@3 eb4@9 b3@4 ab3@3 ab3]/2", AK: "g3@3 eb3 g3@3 ab3@9", AL: "~ eb4 ab4@2",
  AM: "gb4@2 ~ eb4 gb4@2 ~ eb4 gb4@4 eb4@3 c4", AN: "b3@3 bb3 ab3@3 f3 bb3@7 ab3", AO: "b3@7 ab3 f3@3 eb3@5",
  AP: "~@3 eb3 f3@3 ab3 bb3 ab3 ~ bb3 ab3@3 ab3", AQ: "b3@7 ab3 f3@3 ab3@5", AR: "~@3 b3@3 ~ b3@4 ab3@3 ~ eb3",
  AS: "g3@3 eb3 g3@3 ab3@5 c4@3 b3", AT: "[bb3@3 c4 db4@3 eb4 e4@2 ~ f4@3 ~ f4@4 ~@5 eb4@5 ~@3]/2",
  AU: "[~@12 ab2@27 ~@5 ab2@27 ~@5 ab2@27 ~@5 bb2@20]/8", AV: "[~@6 ab2@11 ~@7]/3", AW: "[~@4 ab2@27 ~]/2",
  AX: "[~@4 bb2@27 ~]/2", AY: "[~@2 ab2@11 ~@3]/2", AZ: "[~@12 ab2@21 ~@9 ab4@3 ~ ab4@17 ~]/4",
  BA: "[~@10 ab4@2 ~@2 ab4@17 ~]/2", BB: "[~@10 ab4@2 ~@2 bb4@17 ~]/2",
  BC: "c3 ~ b2 bb2 b2 ~ c3 ~ db3 ~ d3 ~ eb3 ~ e3 ~", BD: "f3 ~ e3 eb3 e3 ~ f3 ~ gb3 ~ g3 ~ ab3 ~ a3 ~",
  BE: "bb3 ~ a3 g3 ab3 ~ a3 ~ bb3 ~ b3 ~ c4 ~ db4 ~", BF: "d4 ~ db4 c4 db4 ~ d4 ~ eb4@2 ~@2 eb4 ~ d4 db4",
  BG: "d4 ~ eb4 ~ e4@2 ~@2 e4 ~ eb4 d4 eb4 ~ e4 ~", BH: "f4@4 f4 gb4 g4 ab4", BI: "[ab4@14 ab3@11 ~@7]/4",
})).s("gm_tenor_sax").gain(0.4)

// bass · clarinet · "Bass Clarinet"
const bass = note(`<
  ~@4 A B C D E F E G H I E F J K L M E F E G H I E F J K L N O@6 P Q O@6 R S ~@3 T U V W X Y Z Y Z AA AB AC AD ~ AE@2
  AF AG@2 AH AI AH@4 AG@2 AH AI AH@4 AJ@2 E F E G H I E F J AK ~@3 AL AM AN AM AO AP AQ AM AR AS AT ~@2 AU E F E G H I E
  F J AK ~@2 E F E G H I E F J AV@8 AW@3
>`.pickRestart({
  A: "bb2 ~@2 bb2", B: "~@11 bb2@5", C: "eb3 ~@2 eb3", D: "~@11 db3@3 ~ ab2", E: "ab2 c3 eb3 f3", F: "ab3 f3 eb3 c3",
  G: "ab3 f3 eb3 ab2", H: "db3 f3 ab3 bb3", I: "db4 bb3 ab3 f3", J: "eb3 g3 bb3 g3", K: "eb3 db3 bb2 eb3",
  L: "ab2!2 db3!2", M: "e3!2 eb3!2", N: "e3@2 ~ eb3@3 ~ ab2@9", O: "[~@12 ab2@2 ~ g2@13 ~@4]/2", P: "bb2 ~ a2 ~",
  Q: "bb2 b2 bb2 ab2", R: "~@4 eb3@3 ~@5 eb3@3 ~", S: "~@4 e3@3 ~ eb3@3 ~ ab2@3 ~", T: "~@12 eb3 f3 ~ eb3",
  U: "ab3@2 ~ gb3@5 d3@2 ~ b2@5", V: "f3@2 ~ db3@5 bb2@2 ~ eb2@5", W: "bb3@3 bb3 ~@3 eb3 a3@3 a3 ~@3 gb3",
  X: "bb3@4 ab3@3 g3@4 f3@4 ~", Y: "ab2 ~ b2 ~", Z: "bb2 ~ eb3 ~", AA: "~@4 ab2@3 ~@5 b2@3 ~",
  AB: "g3@2 ~ g3 gb3@3 ~ eb3@3 e3 eb3@3 ~", AC: "eb3@2 ~ eb3 ~@3 c3 eb3@2 ~ eb3 ~@3 c3", AD: "eb3@4 b2@2 ~ bb2@4 ab2@5",
  AE: "[~@12 e2@2 ~ eb2@9 b2@2 ~ bb2@3 ~ b2]/2", AF: "bb2@4 c3@3 ab2@5 ~@4", AG: "ab2 ~ ab2 ~", AH: "ab2 ~ eb2 ~",
  AI: "eb2 ~ eb2 ~", AJ: "[~@8 b2@2 ~ bb2@3 ~ ab2@4 ~@5 c3@5 ~@3]/2", AK: "eb3 db3 bb2 ab2", AL: "~ eb3 ab2 c3",
  AM: "eb3 f3 ab3 f3", AN: "eb3 c3 ab2 c3", AO: "eb3 ab2 db3 f3", AP: "ab3 bb3 db4 bb3", AQ: "ab3 f3 ab2 c3",
  AR: "eb3 c3 eb3 g3", AS: "bb3 g3 eb3 db3", AT: "bb2 ab2 ~@2", AU: "~ eb3 db3 bb2",
  AV: "[eb3 db3 bb2 ab2@26 c3 eb3 f3]/8", AW: "[ab3@4 f3@4 eb3@4 ab2@21 ~@15]/3",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · piano
const piano = note(`<
  ~@4 A B C D E F G H I J K L M N O P E F G H I J K L M N Q R S T S U S V W X S T S U S V Y Z AA AB AA AB AA AB AC AD AE
  AF AE AG AH AF ~@2 AI AJ@2 AK AL@2 AM AN ~@14 AO AP@2 AQ@2 ~@54
>`.pickRestart({
  A: "[bb1,bb2,d4,ab4,bb4] ~@2 [bb1,bb2,d4,ab4,bb4]", B: "~@11 [bb2,ab3,d4,g4,c5]@5",
  C: "[eb2,eb3,db4,g4,bb4] ~@2 [eb2,eb3,db4,g4,bb4]", D: "~@11 [db2,db3,bb3,db4,f4,ab4]@4 [c4,eb4,f4,ab4]",
  E: "~@4 [gb3,c4,ab4,eb5] ~@6 [gb3,c4,ab4,eb5] ~@4", F: "[gb3,c4,eb4,ab4,eb5] ~@15",
  G: "~@4 [gb3,c4,eb4,ab4,eb5] ~@10 f5", // Ab7
  H: "[gb3,c4,eb4,ab4,eb5]@2 ~ [gb3,c4,eb4,ab4,eb5] ~@3 [gb3,c4,eb4,ab4,eb5]@5 ~@4", // Ab7
  I: "~@4 [f3,b3,db4,ab4] ~@6 [f3,b3,db4,ab4,db5] ~@4", J: "[db4,ab4,db5]@3 ~@4 [f3,b3,db4,ab4,db5] ~@8, [f3,b3] ~@15",
  K: "~@4 [gb3,c4,eb4,ab4] ~@10 f4", L: "[gb3,c4,eb4,ab4]@2 ~@2 f4@3 [gb3,c4,eb4,ab4]@5 ~@4",
  M: "[eb3,db4,g4,bb4]@15 ~", N: "~@11 [eb3,db4,g4,bb4] ~@4", O: "[ab3,c4,f4,ab4] [db4,f4,ab4]",
  P: "[ab3,d4,e4,b4]@3 [ab3,d4,e4,b4] ~@3 bb4 bb4@4 ~@4, ~@7 [bb3,d4,ab4]@5 ~@4", Q: "[ab3,c4,f4,ab4] [bb3,db4,f4,ab4]",
  R: "[ab3,d4,e4,b4]@3 bb4 bb4@3 [ab3,c4,eb4,f4,ab4]@8 ~, ~@3 [bb3,db4,ab4]@4 ~@9", // E7 Fm7 Bbm7
  S: "[c4,ab4,eb5] ~@6 [eb4,ab4,eb5] ~@4 [b2,f4,d5]@3 ~, ab2@4 ~@3 ab2@4 ~@5", T: "bb2!2 eb3!2, ~ [f4,g4,c5]",
  U: "[bb2,f4,bb4,db5] bb2 eb3!2, ~ [eb4,g4,c5,eb5]", V: "[bb2,f4,g4,bb4] bb2 eb3!2, ~ [eb4,g4,c5]",
  W: "[eb2,eb3,db4,g4,bb4]!2 [eb2,eb3,c4,gb4,a4]!2", // Eb7 Ebdim
  X: "[eb2,eb3,db4,g4,bb4] [e2,e3,d4,ab4,b4] [eb2,eb3,db4,g4,bb4] [c2,c3,c4,eb4,f4,ab4]", // Eb7 E7 Eb7 Fm7
  Y: "~ [eb2,eb3,db4,g4,bb4] ~ [eb2,eb3,c4,gb4,a4]", // Eb7 Ebdim
  Z: "[db4,g4,bb4] [e2,e3,d4,ab4,b4] [eb2,eb3,db4,g4,bb4] [c2,c3,c4,eb4,f4,ab4]", AA: "ab1 [c4,eb4,ab4] b1 [d4,f4,ab4]",
  AB: "bb1 [db4,f4,ab4] eb2 [db4,eb4,g4]", AC: "~@3 eb3 eb2@4 ~@3 eb3 eb2@4",
  AD: "[eb3,db4,g4,bb4]@4 [b2,d4,ab4,b4]@3 [bb2,db4,g4,bb4]@4 [ab2,c4,ab4]@5", AE: "ab2 ~ b2 ~", AF: "bb2 ~ eb3 ~",
  AG: "bb2 ~ eb2 ~", AH: "[ab2,c5]@3 eb5 ab5@3 ~ [b2,d5]@3 f5 ab5@3 ~",
  AI: "[ab2,ab4]@3 [bb2,bb4] [c3,c5]@3 [db3,db5] [eb3,eb5]@3 [ab3,ab5]@4 [eb3,eb5]", // Ab Bb C Db Eb Ab Eb
  AJ: "[[e3,e5]@2 ~ [d3,d5]@3 ~ [eb3,eb5] ~@4 [e2,e3,e4]@3 [eb2,eb3,eb4]@9 [e2,e3]@3 [eb2,eb3]@4 [e2,e3]]/2", // E D Eb E Eb E Eb E
  AK: "[eb2,eb3]@4 [eb2,eb3]@3 [ab1,ab2]@5 ~@4", AL: "[ab1,ab2] ~ [ab1,ab2] ~",
  AM: "[ab1,ab2]@3 [ab3,c4,eb4]@3 ~@2 [eb2,eb3,g3,bb3,db4,eb4]@5 ~@3", AN: "[eb2,eb3] ~ [eb2,eb3] ~",
  AO: "~@4 [f3,c4,eb4,ab4] ~@6 [f3,c4,eb4,ab4] ~@4", // Fm7
  AP: "[[f3,c4,eb4,ab4] ~@6 [f3,c4,eb4,ab4] ~@3 [f3,c4,eb4,ab4]@4 [f3,c4,eb4,ab4]@4 ~ [f3,c4,eb4,ab4] ~@6 [f3,c4,eb4,ab4] ~@4]/2", // Fm7
  AQ: "[[f3,c4,eb4,ab4] ~@6 [f3,c4,eb4,ab4] ~@3 [f3,c4,eb4,ab4]@4 [f3,db4,f4,ab4]@4 ~@13]/2", // Fm7 Db
})).s("gm_piano").gain(0.4)

stack(clarinet, clarinet_soft, tenor_sax, bass, piano)