Strudelify
KeyF majorTempo140 bpm
0:00/0:00
// The Great Gig In The Sky — Samuel Mattern percussion by AAP Mixter (Mickey McIntyre)
// 140 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/2631301; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 55 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · flute
const flute = note("<~@25 A@2 B C D@2 B C E@2 F@2 G@2 H@2 G@2 I J K@2 L@3 M@5>".pickRestart({
  A: "[g5@35 ~ d6@6 bb5@6]/2", B: "c6@17 ~ d6@6", C: "c6@23 ~", D: "[~@12 g5@29 ~ g5@6]/2", E: "[g5@17 ~ d6@6]/2",
  F: "[c6@23 ~]/2", G: "[~@12 g5@23 ~ g5@3 g5@2 ~@7]/2", H: "[~@12 c6@23 ~ c6@3 c6@2 ~@7]/2", I: "~ c6", J: "bb5 c6",
  K: "[f5@23 ~]/2", L: "[f5@71 ~]/3", M: "[~@5 b5@106 ~@9]/5",
})).s("gm_flute").gain(0.09)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<~@25 A@2 B C D@2 B C E@2 F@2 G@2 H@2 I@2 J K L@2 M@8>".pickRestart({
  A: "[bb4@6 c5 d5]/2", B: "c5@3 d5", C: "c5", D: "[~@2 bb4@5 bb4]/2", E: "[bb4@3 bb4]/2", F: "[c5@3 c5]/2",
  G: "[bb4@36 bb4@3 bb4@2 ~@7]/2", H: "[~@12 c5@24 c5@3 c5@2 ~@7]/2", I: "[~@12 bb4@24 bb4@3 bb4@2 ~@7]/2", J: "~ c5",
  K: "c5!2", L: "c5/2", M: "[f5@77 g4@112 ~@3]/8",
})).s("gm_clarinet").gain(0.09)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@25 A@2 B C D@2 B C E@2 F@2 G@2 H@2 I@2 J K L@2 M@8>".pickRestart({
  A: "[d4@6 e4 f4]/2", B: "g4@3 f4", C: "g4", D: "[~@2 d4@5 d4]/2", E: "[d4@3 d4]/2", F: "[g4@3 g4]/2",
  G: "[d4@36 d4@3 d4@2 ~@7]/2", H: "[~@12 g4@24 g4@3 g4@2 ~@7]/2", I: "[~@12 d4@24 d4@3 d4@2 ~@7]/2", J: "~ g4",
  K: "g4!2", L: "c4/2", M: "[f4@77 g4@112 ~@3]/8",
})).s("gm_alto_sax").gain(0.02)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@25 A@2 B@2 C@2 B@2 D@2 B@2 E@2 F@2 G@2 H I J@2 K@8>".pickRestart({
  A: "[g3@6 e3 d3]/2", B: "c3/2", C: "[~@2 g3@5 g3]/2", D: "[g3@3 g3]/2", E: "g3/2", F: "[~ c3@3]/2", G: "[~ g3@3]/2",
  H: "~ c3", I: "c3!2", J: "f3/2", K: "[bb3@77 eb3@112 ~@3]/8",
})).s("gm_tenor_sax").gain(0.01)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@25 A@2 B@2 C@2 B@2 D@2 B@2 E@2 F@2 E@2 G H I@2 J@8>".pickRestart({
  A: "[g4@6 a4 bb4]/2", B: "c5/2", C: "[~@2 g4@5 c5]/2", D: "[g4@3 g4]/2", E: "[~@12 g4@24 g4@3 g4@2 ~@7]/2",
  F: "[~@12 c5@24 c5@3 c5@2 ~@7]/2", G: "~ c5", H: "bb4 c5", I: "f4/2", J: "[bb4@77 eb4@112 ~@3]/8",
})).s("gm_trumpet").gain(0.45)

// other · french horn · "Horn in F"
const french_horn = note("<~@25 A@2 B@2 C@2 D E F G H I J K L M N O P Q ~@2 R@2 S@6>".pickRestart({
  A: "[d4@6 f4!2]/2", B: "g4/2", C: "[~@12 d4@30 d4 eb4 e4 ~ f4 gb4]/2", D: "g4", E: "g3 bb3 d4 f4 bb4 a4 g4 a4",
  F: "a4@3 g4@3 d4@2", G: "a4@3 d4", H: "a4@3 g4@3 d4@2 c4@2 bb3@2",
  I: "bb3@6 c4@12 c4 [db4,d4] [eb4,e4] f4 [gb4,g4] [ab4,a4]", J: "bb4@2 a4@2 bb4@2 bb4@3 g4@3",
  K: "bb4 a4 g4@2 bb4@2 ~@2", L: "g4@4 a4@4 g4 [ab4,a4] [bb4,b4] [c5,db5] d5@6 c5@6",
  M: "c5@3 bb4@3 a4@3 bb4@3 c5 [c5,d5] d5 c5 [c5,d5] d5 ~@6", N: "bb4 a4 bb4@3 d5 c5 bb4", O: "c5 a4 bb4@4 a4 bb4",
  P: "c5@3 bb4@3 g4@2 f4@2 g4@11 bb4@3", Q: "c5 bb4 d5@3 c5 bb4 a4", R: "[~@9 f4@4 c5@15 bb4@20]/2",
  S: "[a4@29 g4@112 ~@3]/6",
})).s("gm_french_horn").gain(0.5)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<A B@2 C@2 ~ D C@2 E@2 F@4 G@2 H@2 I J K@4 ~@20 L@2 ~@8>".pickRestart({
  A: "~ e3", B: "[f3@6 bb3 b3]/2", C: "[c4@3 ~]/2", D: "~@2 bb3 b3", E: "e4/2", F: "d4/2", G: "bb3/2", H: "eb4/2",
  I: "f4", J: "d4", K: "[f4@7 ~]/4", L: "[a4@3 c5@3 f4@10]/2",
})).s("gm_french_horn").gain(0.2)

// other · french horn · "Horn in F"
const french_horn_2 = note("<~@25 A@2 B@2 C@2 B@2 D@2 E@2 F@2 G@2 H@2 I J K@2 L@2 M@6>".pickRestart({
  A: "[d4@6 f3!2]/2", B: "g3/2", C: "[~@12 d4@30 d4 db4 c4 [bb3,b3] a3 ab3]/2", D: "[g3@3 g3]/2", E: "c4/2",
  F: "[~@12 g3@24 g3@3 g3@2 ~@7]/2", G: "[~@12 c4@24 c4@3 c4@2 ~@7]/2", H: "[~@12 g4@24 g4@3 g4@2 ~@7]/2", I: "~ c4",
  J: "bb3 c4", K: "e4/2", L: "[~@9 f3@4 c4@15 bb3@20]/2", M: "[a3@29 g3@112 ~@3]/6",
})).s("gm_french_horn").gain(0.16)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft_2 = note("<A B@2 C@2 ~ D C@2 E@2 F@4 G@2 H@2 I J K@4 ~@30>".pickRestart({
  A: "~ e3", B: "[f3@6 bb3 b3]/2", C: "[c4@3 ~]/2", D: "~@2 bb3 b3", E: "e4/2", F: "d4/2", G: "bb3/2", H: "eb4/2",
  I: "f4", J: "d4", K: "[f4@7 ~]/4",
})).s("gm_french_horn").gain(0.08)

// bass · tuba · "Euphonium"
const bass = note("<~@9 A@2 B@2 C@2 D@2 A@2 E F G@4 H@2 I J K@2 D@2 L@2 M@2 L@2 M@2 L@2 M@2 A@2 N@8>".pickRestart({
  A: "c3/2", B: "f3/2", C: "bb2/2", D: "g3/2", E: "f3", F: "bb2", G: "[f3@7 ~]/4", H: "d3/2", I: "g3@6 f3 gb3", J: "g3",
  K: "[d3@42 d3 eb3 e3 ~ f3 gb3]/2", L: "[d3@3 d3]/2", M: "[g3@3 g3]/2", N: "[f3@77 eb3@112 ~@3]/8",
})).s("gm_tuba").gain(0.25)

// bass · tuba · "Euphonium" · soft notes
const bass_soft = note("<A B@2 C@2 ~ D C@2 ~@46>".pickRestart({
  A: "~@2 c3 db3", B: "[d3@6 f3 gb3]/2", C: "[g3@3 ~]/2", D: "~@2 f3 gb3",
})).s("gm_tuba").gain(0.13)

// other · trombone
const trombone = note("<~@25 A@2 B C D@2 ~@2 E F G H I@2 J@2 I@2 K L ~@2 M@2 N@6>".pickRestart({
  A: "[bb2@12 c3 db3 d3 eb3]/2", B: "e3@3 f3", C: "e3", D: "d3/2", E: "~@2 a3 bb3 a3 g3 a3 bb3",
  F: "a3 g3 a3 bb3 a3 g3 bb3 b3", G: "c4@3 bb3", H: "a3 g3 a3 a3@2 g3@2 ~", I: "[c4 d4 c4 bb3 g3@8 ~@4]/2",
  J: "[c4@3 c4]/2", K: "~ c4", L: "bb3 c4", M: "[~@9 f3@4 c4@15 bb3@20]/2", N: "[a3@29 bb3@112 ~@3]/6",
})).s("gm_trombone").gain(0.64)

// other · trombone · soft notes
const trombone_soft = note("<A B@2 C@2 D E C@2 F@2 G@2 H@2 I@2 F@2 J K L@4 ~@20 F@2 ~@8>".pickRestart({
  A: "~ a2", B: "[bb2@6 d3 eb3]/2", C: "[e3@3 ~]/2", D: "~ d3", E: "c3@2 d3 eb3", F: "a2/2", G: "d3/2", H: "g2/2",
  I: "eb3/2", J: "d3", K: "g2", L: "[d3@7 ~]/4",
})).s("gm_trombone").gain(0.26)

// other · trombone
const trombone_2 = note(`<
  ~@9 A@2 B@2 C@2 D@2 A@2 E F G@4 H@2 I J K@2 D@2 L@2 M@2 L@2 M@2 L@2 M@2 N@2 O@8
>`.pickRestart({
  A: "f3/2", B: "bb2/2", C: "eb3/2", D: "c3/2", E: "bb2", F: "eb3", G: "[bb2@7 ~]/4", H: "[bb2@12 c3 db3 d3 db3]/2",
  I: "c3@6 d3 db3", J: "c3", K: "[bb2@7 bb2]/2", L: "[bb2@3 bb2]/2", M: "[c3@3 c3]/2", N: "f2/2",
  O: "[bb2@77 bb2@112 ~@3]/8",
})).s("gm_trombone").gain(0.4)

// other · trombone · soft notes
const trombone_soft_2 = note("<A B@2 C@2 B@2 C@2 ~@46>".pickRestart({
  A: "~@2 a2 ab2", B: "[g2@9 a2 bb2 b2]/2", C: "c3/2",
})).s("gm_trombone").gain(0.2)

// bass · tuba
const bass_2 = note("<~@9 A@2 B@2 C@2 D@2 A@2 E F G@4 H@2 D@2 I@2 J@2 H@2 D@2 H@2 D@2 H@2 D@2 A@2 K@8>".pickRestart({
  A: "f2/2", B: "bb1/2", C: "eb2/2", D: "c2/2", E: "bb1", F: "eb2", G: "[bb1@7 ~]/4", H: "g2/2", I: "[g2@7 g2]/2",
  J: "[c2@5 bb2 a2@2]/2", K: "[bb2@77 eb2@112 ~@3]/8",
})).s("gm_tuba").gain(0.27)

// bass · tuba · soft notes
const bass_soft_2 = note("<A B@2 C@2 B@2 C@2 ~@46>".pickRestart({
  A: "~ a2", B: "[g2@3 a2]/2", C: "c2/2",
})).s("gm_tuba").gain(0.18)

// drums · high tom
const high_tom = s("ht").struct("<~@24 A B ~ C D E F G H I J K L M N O P M N O P Q@2 E ~ R S ~@4>".pickRestart({
  A: "~@3 x", B: "x", C: "x!24", D: "x!13 ~@2 x ~@8", E: "x!5 ~@19", F: "~@6 x!2 ~ x!2 ~ x ~@2 x!2 ~ x!2 ~ x ~@2",
  G: "x ~@2 x ~@2 x!2 ~ x!2 ~ x ~@5 x!2 ~ x!2 ~", H: "x!2 ~ x!2 ~ x ~@5 x ~@2 x ~@2 x ~@2 x ~@2", I: "x ~@5 x ~@5 x!12",
  J: "~@6 x ~@5 x!12", K: "~@3 x!2 ~ x ~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2",
  L: "x!2 ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@2", M: "x!2", N: "~@12 x ~@2 x ~@5 x!2 ~",
  O: "x ~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~", P: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~",
  Q: "x ~@2 x ~@2 x!2 ~ x!2 ~ x ~@2 x ~@2 x!2 ~ x!2 ~", R: "x ~@6 x ~@16", S: "~ x ~@3 x ~@18",
})).gain(0.64)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@29 [~@5 x!19] ~@17 [~@5 x!19] [x!4 ~@5 x ~@4 x ~@4 x ~@4] [~@7 x ~@4] ~@5>")
  .gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@26 [x!3 ~@3] ~@28>").gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@27 A ~@2 B ~@8 C ~@3 C ~@11>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@15 x!2 ~ x!2 ~ x ~@2", C: "~@4 x!3 ~",
})).gain(3.24)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<~@26 A B ~@2 C D E ~@2 F G ~@2 H ~@3 H ~ I@2 ~@2 J ~@5>".pickRestart({
  A: "~@3 x!3", B: "~@18 x!6", C: "~@7 x ~@8 x ~@7", D: "~@3 x!2 ~@16 x!2 ~", E: "~@5 x ~@2",
  F: "x!2 ~@4 x ~@5 x!2 ~@4 x ~@5", G: "x!2 ~@4 x ~@17", H: "~@12 x!2 ~ x!2 ~ x!2 ~@4", I: "~@7 x ~@11 x ~@4",
  J: "~@7 x ~@16",
})).gain(0.83)

// drums · guiro
const guiro = s("guiro:0").struct("<~@27 A ~@3 A ~@6 B ~@3 B ~@4 A ~@2 C ~@4>".pickRestart({
  A: "x", B: "~ x", C: "~@5 x ~@18",
})).gain(16.9)

stack(
  flute, clarinet, alto_sax, tenor_sax, trumpet, french_horn, french_horn_soft, french_horn_2, french_horn_soft_2, bass,
  bass_soft, trombone, trombone_soft, trombone_2, trombone_soft_2, bass_2, bass_soft_2, high_tom, high_tom_soft, crash,
  cabasa, whistle, guiro
)