Strudelify

uncle meat

F. Zappa

KeyF majorTempo138 bpm
0:00/0:00
// uncle meat — F. Zappa
// 138 bpm, 3/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/1587871; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138/3)

// 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.

// chords · marimba
const marimba = note(`<
  A@5 B A@5 B C D C E C D F G H I J K J L M N O P M Q R P M Q O P S T U V G A@5 B A@5 B G W X@4 Y Z ~ AA@6 AB@7 ~
>`.pickRestart({
  A: "bb3@3 g3@2 c4@3 f3 g3 ~ c3 d3 f3 ~ g3, [f4,bb4,c5]@5 [f4,bb4,c5]@5 ~ [f4,bb4,c5]@5", // Fsus4
  B: "bb3@3 g3@2 [f4,bb4,c5]@5 ~ [f4,bb4,c5]@5, [f4,bb4,c5]@5 c4@11", // Fsus4
  C: "[gb3,gb4,b4,db5]@5 ~@3 gb3!2 ~ [gb3,gb4,b4,db5]@5, ~@5 [gb4,b4,db5]@5 ~@6", // Gbsus4
  D: "~@3 gb3!2 [gb3,gb4,b4,db5]@5 ~ [gb4,b4,db5]@5, [gb4,b4,db5]@5 ~@11", // Gbsus4
  E: "[gb4,b4,db5]@5 ~@3 gb3!2 ~ gb3@2 db3@3, ~@5 [gb4,b4,db5]@5 ~ [gb4,b4,db5]@5", F: "gb3@5 ~@6 gb3@2 gb3 ~ gb3",
  G: "g3@5 f3@5 ~ e3@5", H: "[f3,f4,bb4,c5]@5 [f4,bb4,c5]@5 ~ [f4,bb4,c5]@5",
  I: "[bb2,bb3,f4,bb4,c5]@5 [bb2,bb3,f4,bb4,c5]@5 ~ [c3,c4,f4,bb4,c5]@5", // Bbsus2 Fsus4
  J: "[bb2,f4,bb4,c5]@5 f3@3 c4@3 [g3,f4,bb4,c5]@5, ~@5 [f4,bb4,c5]@5 ~@6", // Bbsus2 Gm7 Fsus4
  K: "[bb2,bb3,f4,bb4,c5]@5 [f3,f4,bb4,c5]@5 ~ [c3,c4,f4,bb4,c5]@5", // Bbsus2 Fsus4
  L: "bb2@3 f3@2 c4@3 g3@3 g3@2 g3@3, [f4,bb4,c5]@5 [f4,bb4,c5]@5 ~ [f4,bb4,c5]@5", // Fsus4
  M: "[eb4,bb4]@3 ~@2 [eb3,eb4,bb4]@3 ab3@3 [eb4,bb4]@3 ~@2, ab3@5 ~@6 eb3@5", // Eb5
  N: "[db4,ab4]@3 ~@2 [db3,db4,ab4]@4 ~@3 db3@4, gb3@5 ~@4 gb3@4 ~@3, ~@11 [db4,ab4]@3 ~@2", // Db5
  O: "[c4,g4]@3 ~@2 [c3,c4,g4]@3 f3@3 [c4,g4]@3 ~@2, f3@5 ~@6 c3@5", // C5
  P: "[b3,gb4]@3 ~@2 [b2,b3,gb4]@3 e3@3 [b3,gb4]@3 ~@2, e3@5 ~@6 b2@5", // B5
  Q: "[db4,ab4]@3 ~@2 [db3,db4,ab4]@3 gb3@3 [db4,ab4]@3 ~@2, gb3@5 ~@6 db3@5", // Db5
  R: "[c4,g4]@3 ~@2 [c3,c4,g4]@3 ~@3 [c4,g4]@3 ~@2, f3@5 ~@6 c3@5", // C5
  S: "[eb4,f4,bb4]@3 ~@2 [eb4,f4,bb4]@3 ~@3 [eb4,f4,bb4]@3 ~@2, eb3@5 eb3@5 ~ eb3@5", // Ebsus2
  T: "[e4,gb4,b4]@3 ~@2 [e4,gb4,b4]@3 ~@3 [e4,gb4,b4]@3 ~@2, e3@5 e3@5 ~ e3@5", // Esus2
  U: "[f4,g4,c5]@3 ~@2 [f4,g4,c5]@3 ~@3 [f4,g4,c5]@3 ~@2, f3@5 f3@5 ~ f3@5", // Fsus2
  V: "[gb4,ab4,db5]@3 ~@2 [gb4,ab4,db5]@3 ~@3 [gb4,ab4,db5]@3 ~@2, gb3@5 gb3@5 ~ gb3@5", // Gbsus2
  W: "eb4@3 gb4@2 e4@3 g4@3 f4@2 ab4@3, f3@5 gb3@5 ~ g3@5",
  X: "a2 b2 ~ d3 e3 gb3 ~ e3 d3 e3 ~@2 e3 b2 ~ e3, [a3,d4,g4]@5 [a3,d4,g4]@5 ~ [a3,d4,g4]@5", // Dsus4
  Y: "b4@3 a3@2 a3@3 db4@3 e4@2 d4@3", Z: "e4@3 d4@2 db4@3 b3@3 d4@2 db4@3",
  AA: "[~@15 [b2,e3]@10 [b2,e3]@5 g3@5 d3@5 a2@5 c5@3 eb5@2 bb4@3 f4@3 f3@2 ab3@3 eb3@2 bb2@3 ~@7 eb4 ~ bb3 eb4@15 gb4@5, ~@45 c3@10 ~ [c4,f4]@10 bb2@10 ~@20]/6", // E5 F5
  AB: "[db4@5 ~ ab3@5 eb5@5 gb5@5 db5@5 ab4@5 g4@5 bb4@5 f4@5 c4@5 ~ [eb3,eb5]@20 eb3@5 gb3@5 db3@5 ab3@5 [gb3,gb4]@20, ~@11 db4@20 ab3@20 ~@21 b4@20 ~@20]/7", // Eb Gb
})).s("gm_marimba").gain(0.3)

// other · vibraphone
const vibraphone = note(`<
  A B C D E F A B C D E F G H I J K L M N ~ O P Q R@2 S T U V W X Y Z AA AB AC AD AE AF AG AH AI A B C D E F A B C D E F
  AI AJ AK AL AM AN AO AP AQ@6 AR AS AT@6 ~
>`.pickRestart({
  A: "a4@3 c5@2 g4@3 d4@3 d4@5", B: "e4 f4 ~ e4 d4 e4@5 ~@3 d4@3", C: "g4@3 f4@2 c5@3 d4@3 c4@2 g4@3",
  D: "f4@3 e4@2 f4@3 c5@3 e5@5", E: "d5@3 c4@2 c4@3 e4@3 g4@2 f4@3", F: "g4@3 f4@2 e4@3 d4@3 f4@2 e4@3",
  G: "eb5@3 gb4@2 gb4@3 f4@3 f4@2 eb4@3", H: "eb4@3 bb4@2 bb4@5 ~@2 f4 eb4 ~ db4",
  I: "eb4@3 f4@2 f4@3 eb4@3 db4@2 eb4@3", J: "db5@8 gb5@3 f5@2 bb4@3", K: "gb4@3 f4@2 eb4@3 f4@3 eb4@2 db4@3",
  L: "b3@5 ~@3 eb4@3 db4@2 eb4@3", M: "gb4@2 ab4@2 ~ b3@5 ~ ab3@5, ~@2 gb4 ~@5", N: "b3@5 bb3@5 ~@6",
  O: "~@3 c5@2 g4@3 d4@3 d4@5", P: "bb4@3 f4@2 c4@3 c4@5 a4@3", Q: "e4@3 g4@2 d4@3 f4@3 c4@2 e4@3",
  R: "[f4 g4 ~ a4 bb4 c5@21 ~ c5@5]/2", S: "c4@8 d4@3 c4@2 bb3@3", T: "ab3@2 gb3@2 f3 f3@2 f3@2 gb3@2 ab3@2 bb3@3",
  U: "c4@3 f4@2 f4@3 bb4@3 bb4@2 eb5 ~ f5", V: "ab5@3 f5@2 eb5@3 db5@3 b4@2 bb4@3",
  W: "ab4 bb4 ~ ab4 g4 f4 ~ d4 eb4 f4 ~ g4 ab4 bb4@3", X: "~@8 gb3 ab3 ~ f4 eb4 bb3 ~ b3", Y: "d4 eb4 ~ d4@3 ~@10",
  Z: "eb4@3 ~@2 gb4@3 ~@3 db4@3 ~@2", AA: "f4@3 ~@2 ab4@3 ~@3 eb4@3 ~@2", AB: "g4@3 ~@2 f4@3 eb4@3 g4@3 ~@2",
  AC: "c4@3 ~@2 eb4@3 ~@3 bb3@2 c4@3", AD: "db4@3 ~@2 bb3@3 ~@3 ab3@3 ~@2", AE: "c4@3 d4@2 bb4@3 g4@3 f4@2 f4@3",
  AF: "f4@3 eb4@3 ~@6 gb4 f4 ~ bb3", AG: "a3 bb3 ~ d4 eb4 f4 ~ g4 f4@3 ~@5", AH: "~ eb4 ~ db4 b3 bb3 ~ b3 bb4@3 ~@5",
  AI: "d4@3 d4@2 d4@3 d4@3 d4@5", AJ: "eb4@5 e4@5 ~ f4@5", AK: "gb4@3 a4@2 e4@3 b3@3 b3@5",
  AL: "db4 d4 ~ db4 b3 db4@5 ~@3 b3@3", AM: "e4@3 d4@2 a4@3 b3@3 a3@2 e4@3", AN: "d4@3 db4@2 d4@3 a4@3 db5@5",
  AO: "b4@3 a3@2 a3@3 db4@3 e4@2 d4@3", AP: "e4@3 d4@2 db4@3 b3@3 d4@2 db4@3",
  AQ: "[b5@15 d6@5 a5@5 ~ e5@5 [b4,e5]@10 [b4,e5]@5 g5@5 d5@5 a4@5 c5@10 ~ f4@10 bb4@10 eb4@4]/6", // E5
  AR: "~ gb4@5 db4@5 ab3@5", AS: "ab3@10 ~ eb5@5",
  AT: "[gb5@5 db5@5 ab4@5 g4@5 bb4@5 f4@5 c4@5 ~ eb5@20 b4@20 gb4@20]/6",
})).s("gm_vibraphone").gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A B C A C D A B C A C D C E F@5 G F H I F J A F K F@3 L F M@2 N M O F P F Q C F@12 C A F@5 R ~@15
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@2 x!3 ~ x", B: "x ~@2 x ~ x ~ x!3 ~ x!3 ~@2", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  D: "x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2", E: "x ~@2 x ~ x ~@5 x ~@4", F: "x ~@4 x ~@5 x ~@4",
  G: "x ~@2 x ~ x ~@2 x ~@2 x ~@4", H: "~@3 x ~ x ~@2 x ~@2 x ~@4", I: "x ~@2 x ~ x ~@2 x ~@4 x ~@2",
  J: "x!2 ~ x!3 ~@5 x ~@4", K: "x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~@2", L: "x!6 ~@2 x ~@4 x ~@2",
  M: "x ~@4 x ~@2 x ~@2 x ~@4", N: "x ~@4 x ~@2 x ~@2 x ~ x ~@2", O: "x!2 ~ x!3 ~@2 x ~@4 x ~@2",
  P: "x!2 ~ x ~ x ~@5 x ~@4", Q: "x ~@4 x ~@5 x ~ x ~@2", R: "x",
})).gain(0.2)

stack(marimba, vibraphone, snare)