Strudelify

Gay Activities

Clive Richardson

KeyD minorTempo160 bpm
0:00/0:00
// Gay Activities — Clive Richardson
// 160 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Flute" named as a pipe, played on flute (its tremolo strings patch is not one); ch 2 "B♭ Trumpet" named as a brass, played on trumpet (its electric guitar muted patch is not one); ch 4 "Trombone" named as a brass, played on trombone (its string ensemble 1 patch is not one); ch 5 "Horn in F" named as a brass, played on brass section (its pizzicato strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/3562876; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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("<~@3 A ~@4 B C D E F B ~@4 G H I J ~@13 K L ~@9 M ~@7 M ~@2 N@2 O@2 ~@4>".pickRestart({
  A: "~@2 a6 ~ f6 ~ d6 ~ b5 ~ a5 ~ f5 ~ d5 ~", B: "~@2 e6 f6 c6@2 ~@10", C: "~@2 e6 f6 c6@2 ~@4 e6 f6 c6@2 ~@2",
  D: "~@2 d6 e6 c6@2 ~@4 d6 e6 c6@2 ~@2", E: "~@14 [c6,db6,d6] [eb6,e6,f6,gb6]", F: "[g6,ab6] ~@15, a6 ~@7",
  G: "a5 ~ a5 ~ a5 ~ a5 ~ g5 ~ g5 ~ c6 ~ g6 ~", H: "a6 ~ g6 ~ a6 ~ g6 ~ g6 ~ f6 ~ g6 ~ f6 ~",
  I: "g6 ~ f6 ~ g6 ~ f6 ~ d6 ~ c6 ~ bb5 ~ c6 ~", J: "d6 ~@7", K: "c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~",
  L: "ab5 ~ ab5 ~ ab5 ~ ab5 ~ gb5 ~ gb5 ~ gb5 ~ gb5 ~", M: "~@4 a4 d5 f5 a5 d6@2 ~@6", N: "~@4 d5 f5 ab5 a5 d6@2 ~@6",
  O: "~@4 d5 f5 a5 c6 d6@2 ~@6",
})).s("gm_flute").gain(0.41).pan(0.6)

// chords · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@2 A B C@2 D E F G H I C@2 D E J ~@4 K@2 L@2 K@2 M N K@2 L@2 O P ~@9 Q R@2 S T@5 R@2 S T U V T@2 W X Y@2
>`.pickRestart({
  A: "~@8 c5 ~ c5 ~ c5 ~ c5 ~", B: "b4 ~@3", C: "a4@2 [c4,f4]@2 ~@2 [c4,f4]@2 ~@2 [c4,f4]@2 g4@2 [c4,f4] ~, ~@7 ab4",
  D: "a4@2 [c4,f4]@2 ~@2 [c4,f4]@2 c5@2 [c4,f4]@2 ~@2 [c4,f4,c5] ~, ~@6 a4 ~@9", // F5
  E: "e5 ~ [c4,f4]@2 ~@2 [c4,f4]@2 ~@2 [c4,f4]@2 f5@2 [c4,f4] ~, ~ g5 ~@2", // F5
  F: "e5@2 [e4,a4]@2 ~@2 [e4,a4]@2 ~@2 [e4,a4]@2 d5@2 [e4,a4] ~, ~@7 eb5", // A5
  G: "e5@2 [e4,a4]@2 ~@2 [e4,a4]@2 ~@2 [e4,a4]@2 ~@2 [e4,a4] ~, ~@7 d5", // A5
  H: "d5@2 [f4,bb4]@2 ~@2 [f4,bb4,c5]@2 d5@2 [e4,a4]@2 ~@2 [e4,a4] ~, ~@7 c5", // Bb5 Fsus4 A5
  I: "c5@2 [d4,g4]@2 ~@2 [d4,g4,b4]@2 c5@2 [d4,g4]@2 g4@2 [d4,g4] ~, ~@7 ab4", J: "[c4,f4,e5]@3 ~@13",
  K: "~@2 [d4,g4]@2 d5!4 d5@2 [d4,g4]@2 ~@2 [d4,g4] ~, ~@3 [d4,g4] ~@4", // G5
  L: "~@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4] ~", // G5
  M: "~@2 [c4,f4,bb4]@2 ~@2 [c4,f4]@2 ~@2 [c4,f4,bb4]@2 ~@2 [c4,f4] ~", // Fsus4 F5 Fsus4 F5
  N: "~@2 [c4,f4,g4]@2 ~@2 [c4,f4]@2 ~@2 [c4,f4,g4]@2 ~@2 [c4,f4] ~", // Csus4 F5 Csus4 F5
  O: "~@2 db5!2 db5@2 [f4,bb4]@2 ~@2 db5!2 db5@2 [f4,bb4] ~, ~ [f4,bb4] ~@3 [f4,bb4] ~@2", // Bb5
  P: "~@2 gb5!2 gb5@2 [f4,bb4]@2 ~@2 gb5!2 gb5@2 [f4,bb4] ~, ~ [f4,bb4] ~@3 [f4,bb4] ~@2", // Bb5
  Q: "a4 ~ a4 ~ b4 ~ c5 ~ d5 ~@3 f5@4", R: "~@2 [e4,a4]@2 ~@2 [e4,a4]@2 a4 ~ [e4,a4]@2 ~@2 [e4,ab4]@2",
  S: "~ [e4,a4] ~ [e4,a4] ~ [g4,c5] ~ [a4,db5]", T: "~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5]",
  U: "~ [e4,ab4] ~ [e4,ab4] ~ [e4,ab4] ~ [e4,ab4]", V: "~ [e4,ab4] ~ [e4,ab4] ~ [e4,ab4] ~@2",
  W: "~@4 c5@4 c5 ~ c5 ~ c5 ~ c5 ~", X: "~ d5 ~ f5", Y: "[f5@7 ~]/2",
})).s("gm_trumpet").gain(0.29)

// other · brass section · "Horn in F"
const brass_section = note(`<
  ~ A B C D@2 E F G H I J D@2 E K L ~@4 M@2 ~@2 N@2 O@2 M@2 ~@4 P Q ~@7 R ~@18 S T
>`.pickRestart({
  A: "c4", B: "~@8 c4 ~ c4 ~ c4 ~ c4 ~", C: "b3 ~@3", D: "a3 ~@5 g3 ab3", E: "a3@2 ~@4 a3 ~ c4@2 ~@4 c4 ~",
  F: "e4 ~@3 g4@4 ~@4 f4@2 ~@2", G: "e4 ~@5 d4 eb4", H: "e4 ~@7", I: "d4 ~@2 c4 d4 ~@2 c4", J: "c4 ~@2 b3 c4 ~ g3 ab3",
  K: "e4 ~@3 g4@4 ~@4 f4@3 ~", L: "e4 ~@3", M: "~@8 d4@3 ~@5", N: "~@4 d4 ~@3", O: "~ c4 ~@3 c4 ~@2",
  P: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", Q: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~",
  R: "a4 ~ a4 ~ a4 ~ c5 ~ d5 ~@3 f5@4", S: "~ g4 bb4 f4", T: "[g4,bb4]@3 ~",
})).s("gm_brass_section").gain(0.3).pan(0.6)

// other · brass section · "Horn in F" · soft notes
const brass_section_soft = note(`<
  ~@16
  [~@3 e4!2 ~@2 db4]
  [db4 ~@2 db4!2 ~@2 db4]
  [a4!4 g4!4]
  [g4!4 ab4!4]
  [ab4!6 bb4 c5]
  ~@44
>`).s("gm_brass_section").gain(0.15).pan(0.6)

// other · tremolo strings · "Timpani"
const tremolo_strings = note("<[d3!16] c3 ~@42 [~@6 f3 d3] [bb2 ~] ~@7 [bb2 ~] ~@11>")
  .s("gm_tremolo_strings").gain(0.4).pan(0.6)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  ~@3 A B C D E F G H I B C J E G K L ~@2 M N O P Q R S T U N O V W X Y ~ Z X@2 Z AA AB AC AD AE AF AE N AG N AH AI AE
  AF AE N AJ AK AG@2 W AL AM@2
>`.pickRestart({
  A: "b1 ~", B: "f2@4 c2@4 f2@4 c2 db2 [d2,eb2] e2", C: "f2!4", D: "f2 c2 f2 c2", E: "a2!4",
  F: "a2@4 d2 [eb2,e2] [f2,gb2] [g2,ab2] a2@4 d2 [eb2,e2] [f2,gb2] [g2,ab2]", G: "a2 d2 a2 d2", H: "g2!2 g1!2",
  I: "c2@4 c2@4 c2@4 c2 db2 [d2,eb2] e2", J: "f2@4 c2 db2 [d2,eb2] e2 f2@4 f2@2 ab2@2", K: "gb2!4", L: "d2 ~ a1 ~",
  M: "d2@4 a1 bb1 [b1,c2] db2 d2@4 a1 bb1 [b1,c2] db2", N: "d2!4",
  O: "d2@4 a1@4 d2@4 [a1,bb1] [b1,c2] [db2,d2,eb2] [e2,f2]", P: "g2!2 bb2 eb2, gb2 ~@15", Q: "g2 c2 g2 c2",
  R: "g2@4 c2@4 g2@4 c2 db2 [d2,eb2] e2", S: "f2@4 f2@4 f2@4 f2 gb2 [g2,ab2] a2", T: "bb2!4", U: "d2 a1 d2 a1",
  V: "g2!2 g1!2, gb2 ~@15", W: "c2!4", X: "e2 b2 e2 b2", Y: "c2 ~", Z: "d2 a2 d2 a2", AA: "d2 a2 e2 b2",
  AB: "b1 d2 f2 g2", AC: "a2 ~ e2 ~", AD: "d2 a1 d2 ~", AE: "bb1 f2 bb1 f2", AF: "bb1!4", AG: "d2 g2 d2 g2",
  AH: "c2!2 eb2!2", AI: "f2!2 f1!2", AJ: "db2 gb2 db2 gb2", AK: "db2 gb2 db2 ~", AL: "~ f2 ~ f2", AM: "[bb1@7 ~]/2",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.3)

// other · string ensemble 1
const string_ensemble_1 = note("<~ A B C ~@20 D E ~@19 F@2 G H I J K L F@2 G H M@2 I J N O P@2>".pickRestart({
  A: "c6 b5 a5 g5 f5 e5 d5 c5 b4 a4 g4 f4 e4 d4 c4 b3", B: "c4 e4 g4 b4 c5 e5 g5 c6", C: "b5 ~@3",
  D: "~@8 bb5 g5 f5 e5 d5 c5 bb4 c5", E: "d5 ~@7", F: "a4@6 g4 ab4", G: "a4@3 d5 f5@3 g5", H: "a5 c6@2 bb5",
  I: "a5@6 g5 ab5", J: "a5@3 g5", K: "f5@3 eb5 f5@3 eb5", L: "d5@3 c5 d5@3 c5", M: "ab5@6 gb5 g5",
  N: "f5@3 eb5 d5 eb5 g5 bb5", O: "d6 f6", P: "[f6@7 ~]/2",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.4)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@4 A@2 ~@2 B@2 ~ C A@2 ~ D E F G H I J ~@5 K@2 L M L N ~ O P Q R S T U V W X Y ~@20
>`.pickRestart({
  A: "~ f5 a5 c6 e6@2 ~@2", B: "~@2 a5 d6 e6 ~@3", C: "~ c5 e5 g5 c6 ~@3", D: "~ a4 c5 e5 g5 ~@3",
  E: "e5@2 ~ db5 eb5 ~@2 db5", F: "ab5 ~@2 gb5 ab5 ~@2 gb5", G: "b5 a5 ~@2 a5 g5 ~@2", H: "a5 g5 ~@2 g5 f5 ~@2",
  I: "g5 f5 g5 f5 d5 c5 bb4 c5", J: "d5 ~@3", K: "~ bb5 ~ bb5", L: "~ bb5 ~@2", M: "~ d6 ~@2", N: "~@2 bb5 ~",
  O: "~ b5 ~ b5", P: "c6@2 ~@2 g5 f5 ~@2", Q: "ab5 gb5 ~@2 gb5 e5 ~@2", R: "a4 b4 db5 d5 e5 gb5 g5 a5",
  S: "bb5 b5 ~ g5 db5 ~@3", T: "bb5 b5 ~ e5 g5 ~ gb5 g5", U: "ab5 a5 ~ a4 d5 ~ a4 b4", V: "db5 d5 e5 gb5 g5 a5 b5 db6",
  W: "d6 b5 ab5 f5 d5 ~ db5 b4", X: "a4 b4 db5 d5 e5 gb5 g5 ab5", Y: "a5 b5 c6 db6 d6 ~@3",
})).s("gm_pizzicato_strings").gain(0.34).pan(0.4)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~ A B C ~@20 D E ~@19 F@2 G H I J K L F@2 G H M@2 I N O P Q@2>".pickRestart({
  A: "c6 b5 a5 g5 f5 e5 d5 c5 b4 a4 g4 f4 e4 d4 c4 b3", B: "c4 e4 g4 b4 c5 e5 g5 c6", C: "b5 ~@3",
  D: "~@8 bb5 g5 f5 e5 d5 c5 bb4 c5", E: "d5 ~@7", F: "d4@6 c4 db4", G: "d4@3 a4 c5@3 d5", H: "f5 a5@2 f5",
  I: "d5@6 c5 db5", J: "d5@3 d5", K: "d5@3 c5 d5@3 c5", L: "a4@3 g4 a4@3 g4", M: "db5@6 b4 c5", N: "d5@3 c5",
  O: "f4@3 eb4 d4 eb4 g4 bb4", P: "d5 f5", Q: "[f5@7 ~]/2",
})).s("gm_string_ensemble_1").gain(0.33)

// other · pizzicato strings
const pizzicato_strings_2 = note(`<
  ~@4 A@2 ~@2 B@2 ~ C A@2 ~ D E F G H I J ~@5 K@2 L M L N ~ O P Q R S T U V W X Y ~@20
>`.pickRestart({
  A: "~ f5 a5 c6 e6@2 ~@2", B: "~@2 a5 d6 e6 ~@3", C: "~ c5 e5 g5 c6 ~@3", D: "~ a4 c5 e5 g5 ~@3",
  E: "e5@2 ~ db5 eb5 ~@2 db5", F: "ab5 ~@2 gb5 ab5 ~@2 gb5", G: "b5 a5 ~@2 a5 g5 ~@2", H: "a5 g5 ~@2 g5 f5 ~@2",
  I: "g5 f5 g5 f5 d5 c5 bb4 c5", J: "d5 ~@3", K: "~ g5 ~ g5", L: "~ g5 ~@2", M: "~ bb5 ~@2", N: "~@2 g5 ~",
  O: "~ b5 ~ b5", P: "c6@2 ~@2 g5 f5 ~@2", Q: "ab5 gb5 ~@2 gb5 e5 ~@2", R: "a4 b4 db5 d5 e5 gb5 g5 a5",
  S: "bb5 b5 ~ e5 a4 ~@3", T: "bb5 b5 ~ db5 d5 ~ eb5 e5", U: "ab5 a5 ~ a4!2 ~ a4 b4", V: "db5 d5 e5 gb5 g5 a5 b5 db6",
  W: "d6 b5 ab5 f5 d5 ~ db5 b4", X: "a4 b4 db5 d5 e5 gb5 g5 ab5", Y: "a5 b5 c6 db6 d6 ~@3",
})).s("gm_pizzicato_strings").gain(0.34)

// other · string ensemble 1
const string_ensemble_1_3 = note(`<
  ~ A B C D E@2 F G@2 H F D E@2 F ~@5 I@2 J K L M N O I@2 J P Q R ~@2 S T@2 U V W ~@2 X@2 Y Z AA AB AC AD X@2 Y Z AE@2
  AA AB AF AG AH@2
>`.pickRestart({
  A: "c5 b4 a4 g4 f4 e4 d4 c4 b3 a3 g3 f3 e3 d3 c3!2", B: "c3 e3 g3 b3 c4 e4 g4 c5", C: "b4 ~@3", D: "a3",
  E: "[ab3 a3@3]/2", F: "c4", G: "[~ g3 a3 c4 e4@12]/2", H: "d4 db4", I: "d3@6 c3 db3", J: "d3@3 eb3 g3@2 bb3 c4",
  K: "d4@2 f4@4 eb4 ~", L: "d4@6 c4 db4", M: "d4@6 ~ c4", N: "bb3@3 ab3 bb3@3 ab3", O: "g3@3 gb3 g3@3 f3",
  P: "d4 f4@2 eb4", Q: "db4@3 b3 db4@3 b3", R: "gb4@3 e4 gb4@3 e4",
  S: "~@2 [a3,d4]@2 ~@2 [a3,d4] ~@3 [a3,d4] ~@3 [a3,d4] ~", T: "~@2 [b3,e4] ~@3 [b3,e4] ~@3 [b3,e4] ~@3 [b3,e4] ~",
  U: "~@2 [a3,d4] ~@3 [a3,d4] ~@3 [a3,d4] ~@3 [a3,d4] ~", V: "~@2 [a3,d4] ~@3 [a3,d4] ~@3 [b3,e4] ~@3 [b3,e4] ~",
  W: "~@2 [c4,gb4] ~@3 [c4,gb4] ~@3 [c4,gb4] ~@3 [c4,gb4] ~", X: "a3@6 g3 ab3", Y: "a3@3 d4 f4@2 g4@2",
  Z: "a4 c5@2 bb4", AA: "a4@6 g4 ab4", AB: "a4@3 g4", AC: "f4@3 eb4 f4@3 eb4", AD: "d4@3 c4 d4@3 c4",
  AE: "ab4@6 gb4 g4", AF: "f4@3 eb4 d4 eb4 g4 bb4", AG: "d5 f5", AH: "[f5@7 ~]/2",
})).s("gm_string_ensemble_1").gain(0.51)

// other · pizzicato strings
const pizzicato_strings_3 = note("<~@16 A B C D E ~@14 F G ~@6 H ~@21>".pickRestart({
  A: "e4@2 ~ e4!2 ~@2 db4", B: "db4 ~@2 db4!2 ~@2 db4", C: "a4!4 g4!4", D: "g4!4 ab4!4", E: "ab4!6 bb4 c5",
  F: "c5@2 ~@2 g4 f4 ~@2", G: "ab4 gb4 ~@2 gb4 e4 ~@2", H: "~@2 a4 ~",
})).s("gm_pizzicato_strings").gain(0.26)

// other · orchestral harp · "Harp"
const orchestral_harp = note("<~@4 A@2 ~@2 B@2 C D A@2 ~ E F G H I J K ~@5 L@2 M N ~@2 O P ~@29 Q>".pickRestart({
  A: "~ f5 a5 c6 e6@2 ~@2", B: "~@2 a5 d6 e6 ~@3", C: "~ g5 a4 ~@2 g5 a4 ~", D: "~ g4 a4 ~@3 c6@2",
  E: "~ a4 c5 e5 g5 ~@3", F: "e5@2 ~ db5 eb5 ~@2 db5", G: "ab5 ~@2 gb5 ab5 ~@2 gb5", H: "b5 a5 ~@2 a5 g5 ~@2",
  I: "a5 g5 ~@2 g5 f5 ~@2", J: "g5 f5 g5 f5 d5 c5 bb4 c5", K: "d5 ~@3", L: "~ [g5,bb5] ~ [g5,bb5]", M: "~ [g5,bb5] ~@2",
  N: "~ [bb5,d6] ~@2", O: "~@2 [f4,a4] ~", P: "[d5,a5] ~@3",
  Q: "[d4,eb4] [e4,f4,gb4,g4] [ab4,a4,bb4] [b4,c5,db5,d5] [eb5,e5,f5] [gb5,g5,ab5] [a5,bb5,b5,c6] [db6,d6,eb6] f6@2 ~@6, ~@8 e6 ~@7", // Ebmaj7
})).s("gm_orchestral_harp").gain(0.23)

stack(
  flute, trumpet, brass_section, brass_section_soft, tremolo_strings, bass, string_ensemble_1, pizzicato_strings,
  string_ensemble_1_2, pizzicato_strings_2, string_ensemble_1_3, pizzicato_strings_3, orchestral_harp
)