Strudelify

pitch perfect two riff off

Pitch Perfect

KeyD majorTempo84 bpm
0:00/0:00
// pitch perfect two riff off — Pitch Perfect
// 84 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 15, 4/4 at bar 15, 7/8 at bar 22, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/879121; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 83 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(84/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.

// bass · choir aahs · "Bass"
const bass = note(`<
  A B C@2 D E@2 F@2 G@2 H I@2 ~@8 J K@2 L@2 M@2 N K@2 O P@2 Q R S@2 T@2 ~@3 U@2 V@3 W@3 ~@18 X Y X Y Z AA Z AA Z AA Z AB
  ~
>`.pickRestart({
  A: "~@16 d3@7 d3@3 d3@2 ~@5 d3@3 d3@4 ~@3 d3@5",
  B: "~ d3@3 ~ d3@2 ~@4 d3@3 ~ d3@4 ~@2 d3@7 d3@3 d3@2 ~@5 d3@3 d3@4 ~@3",
  C: "[d3@6 d3@3 ~ d3@2 ~@4 d3@3 ~ d3@4 ~@2 d3@7 d3@3 d3@2 ~@5 d3@3 d3@4 ~@3 d3@6 d3@3 ~ d3@2 ~@4 d3@3 ~ d3@4 ~@2 d3@7 d3@3 d3@2 ~@5]/2",
  D: "d3@3 d3@4 ~@3 d3@8 ~@30",
  E: "[~@29 d3@4 b2@4 a2@4 ~ d3@4 d3@4 b2@4 a2@4 b2@4 ~ d3@4 b2@4 a2@4 d3@4 d3@4 ~ b2@4 a2@4 b2@4]/2",
  F: "[e3@4 e3@4 ~ e3@4 e3@4 e3@4 e3@4 e3@4 ~ b2@4 b2@4 b2@4 b2@4 b2@4 ~ b2@4 b2@4 b2@4 b2@4 e3@4 ~ e3@4 e3@4 e3@4 e3@4 e3@4 ~ e3@3]/2",
  G: "[~ b2@4 b2@4 b2@4 b2@4 ~ b2@4 b2@4 b2@4 b2@4 b2@4 ~ a2@8 a2@8 a2@8 ~ a2@4 a2@4 a2@4 a2@4 ~ a2@8 a2@7]/2",
  H: "~ a2@8 ~ d3@4 b2@4 a2@4 d3@4 ~ d3@4 b2@4 a2@4 b2@4 d3@4 ~",
  I: "[b2@4 a2@4 d3@4 d3@4 b2@4 ~ a2@4 b2@4 d3@4 b2@4 a2@4 ~ d3@4 d3@4 b2@4 a2@4 b2@4 ~ d3@4 b2@4 a2@4 d3@4 d3@8 ~@9]/2",
  J: "~@15 d#3@8 ~ d#3@8 g#3@8 g#3@8",
  K: "[~ b2@4 b2@8 c#3@8 ~ c#3@8 c#3@4 d#3@8 ~ d#3@8 g#3@8 ~ g#3@8 b2@4 b2@8 ~ c#3@8 c#3@7]/2",
  L: "[~ c#3@4 ~ d#3@8 d#3@8 g#3@8 ~ g#3@8 b2@4 b2@8 ~ c#3@8 c#3@8 ~ c#3@4 d#3@8 d#3@8 ~ g#3@6]/2",
  M: "[~@2 g#3@8 b2@4 ~ b2@8 c#3@8 f#3@4 ~ f3@4 c#3@4 d#3@8 d#3@8 ~ g#3@8 g#3@8 ~ b2@4 b2@8 c#3@6]/2",
  N: "~@3 c#3@8 c#3@4 d#3@8 ~ d#3@8 g#3@8 g#3@8", O: "~ c#3@4 ~ d#3@11 ~@31",
  P: "[~@29 [f3,a#3]@5 [f3,a#3]@3 [f3,a#3]@3 [f3,a#3]@5 [a#3,d4]@5 ~ [c4,d#4]@2 [a#3,d4]@5 ~ [c4,d#4]@8 [a#3,d4]@5 ~ [c4,d#4]@2 [a#3,d4]@5 ~ [f3,a#3]@8 [f3,a#3]@7]/2", // A#5 A# Cm A# Cm A# Cm A# …
  Q: "~ [d3,f3]@8 [g3,c4]@5 ~@6 a#2@5 ~ a#2@4 g2@3 c3@15", R: "g2@5 ~@11 a#2@5 ~ a#2@2 a#2@3 a#2@5 ~ a#2@5 ~@10",
  S: "[~@12 [a#2,f3]@5 ~ [a#2,f3]@2 [a#2,f3]@3 [a#2,f3]@5 ~ [a#2,f3]@8 [g2,d3]@8 [c3,g3]@5 ~@46]/2", // A#5 G5 C5
  T: "[c#3@8 c#3@8 c#3@8 ~@7 g#3@7 c#3@8 a#2@8 a#2@7 a#2@8 a#2@8 ~@19, c#4@46 a#3@31 ~@19]/2",
  U: "[~@24 a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~, ~ a2@3]/2",
  V: "[a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~ a3@4 a3@4 ~@5 [a#2,a#3]@4 ~@5 f2@4 ~ f2@9 f2@9 a3@4 a3@4 ~ f2@9 f2@9 ~@9 f2@9 f2@9, a2@54 ~@13 a3@22 ~ f2@9 ~@9 a#3@13 a#3@13 ~@10, ~@13 f2 ~@2]/3", // A#
  W: "[f2@9 f2@9 a#3@4 a#3@4 ~ f2@9 b3@4 a#3@4 ~ [f2,a#3]@9 c3@4 d3@4 ~ d#3@4 e3@4 ~ f2@9 f2@9 a3@4 a3@4 ~ f2@9 f2@9 ~@9 f2@9 f2@9, a#3@18 f2@9 ~@9 f2@9 ~@9 a3@9 ~@9 a3@13 ~@5 f2@9 ~@9 a#3@13 a#3@13 ~@10, ~@13 f2 ~@2]/3", // A#5
  X: "d#3@4 ~@3 d#3 d#3@4 ~@4", Y: "d#3@4 ~@3 d#3 d#3@2 c3@2 c#3@2 d3@2",
  Z: "d#3@2 d#3@2 d#3@2 d#3!2 f#3@2 g#3@2 f#3@2 a#3@2, ~@2 d#3 ~", AA: "d#3@4 ~@3 d#3 d#3@2 c3@2 c#3@2 d3@2, g#3@3 ~",
  AB: "d#3@4 ~@3 d#3 d#3@2 d#3@2 d#3@2 d#3@2, g#3",
})).s("gm_synth_bass_1").gain(0.3)

stack(bass)