Strudelify

Shaddap Your Face

Joe Dolce

KeyE majorTempo118 bpm
0:00/0:00
// Shaddap Your Face — Joe Dolce
// 118 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · fretless bass · "FRETLESS"
const bass = note(`<
  A@3 B A@3 C D E F G A@3 C D E F G A@3 B D E F G D E F G A@3 B D E F H A@3 B D E F G A@3 B D E F G A@3 B D E F G A@3 B
  D E F G A@3 B D E F G A@3 B D E F G A@3 B D E F G A@3 B D E F G I J
>`.pickRestart({
  A: "e2 ~ b1 ~", B: "e2 ~ b2 b1", C: "e2 ~ e2 f#2", D: "b1 ~ f#2 ~", E: "b2 ~ f#2 ~", F: "e2 ~ e2 b1", G: "a1 ~ a1 ~",
  H: "a2@4 g2@4 f#2@3 ~ f2@4", I: "~@2 e1 g1 a1 a#1 b1 d2 e2 ~ g2 a2 a#2 d3 b2 ~", J: "~@2 f1@3 e1@11",
})).s("gm_fretless_bass").gain(0.48)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  A@8 B@2 A C A@4 B@2 A D A@4 B@2 A D B@2 A D E@4 F@2 G H A@4 B@2 A D A@4 B@2 A D A@4 B@2 A D A@4 B@2 A D A@4 B@2 A D
  A@4 B@2 A D A@4 B@2 A D A@4 B@2 A D I J
>`.pickRestart({
  A: "~@4 [e3,g#3,c#4] ~@7 [e3,g#3,b3] ~@3", B: "~@4 [d#3,f#3,b3] ~@7 [d#3,f#3,b3] ~@3",
  C: "~@4 [e3,g3,c#4] ~@7 [e3,g3,c#4] ~@3", D: "[e3,g3,c#4] ~@3 [e3,g3,c#4] ~@3 [e3,g3,c#4] ~@3 [e3,g3,c#4] ~@3",
  E: "[e4,g#4,c#5] ~@3 [e4,g#4,c#5] ~@3 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3", // C#m E
  F: "[b3,d#4,g#4] ~@3 [b3,d#4,g#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3", // G#m B
  G: "[e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3", // E
  H: "[e4,g4,c#5] ~@3 [e4,g4,c#5] ~@3 [e4,g4,c#5] ~@3 [e4,g4,c#5] ~@3", // C#dim
  I: "~@2 e3 g3 a3 a#3 b3 d4 e4 ~ g4 a4 a#4 d5 b4 ~", J: "~@2 [d#4,a4]@2 ~ [d4,f#4,g#4,c#5]@11, ~@2 [g4,d5] ~@13",
})).s("gm_epiano1").gain(0.4).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D C@4 E@2 C F C@4 E@2 C F A B C D E@2 C F E@2 C F ~@8 A B C D E@2 C F A B C D E@2 C F A B C D E@2 C F A B C D
  E@2 C F A B C D E@2 C F A B C D E@2 C F A B C D E@2 C F A B C D E@2 C F ~@2
>`.pickRestart({
  A: "[b3,e4]@4 [e3,g#3,e4]@3 ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@3 ~, ~@4 b3 ~@11", // E5 E
  B: "[e3,g#3,b3]@4 [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@3 ~", // E
  C: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@3 ~", // E
  D: "[e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3]@4 [e3,g#3,b3,e4]@3 ~", // E
  E: "[d#3,f#3,b3,d#4]@4 [d#3,f#3,b3,d#4]@3 ~ [d#3,f#3,b3,d#4]@4 [d#3,f#3,b3,d#4]@3 ~", // B
  F: "[a2,c#3,e3,a3,c#4]@4 [a2,c#3,e3,a3,c#4]@3 ~ [a2,c#3,e3,a3,c#4]@4 [a2,c#3,e3,a3,c#4]@3 ~", // A
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.4)

// chords · acoustic guitar steel · "+MANDOLIN"
const acoustic_guitar_steel_2 = note("<~@8 A B C D ~@3 E ~ F C D ~@86>".pickRestart({
  A: "~@15 [f#5,b5]", B: "[f#5,b5]!2 ~ f#5!2 ~@2 [f#5,b5]!2 ~@3 [f#5,b5] ~@3",
  C: "[g#5,c#6] ~@3 [g#5,c#6] ~@3 [g#5,b5] ~@3 [g#5,b5] ~@3", D: "[f#5,b5] ~@3 [f#5,b5] ~@3 [f#5,a5] ~@3 [f#5,a5] ~@3",
  E: "~@3 [g#5,c#6]!2 ~@2 [g#5,c#6] [g#5,b5] ~@3 [g#5,b5] ~@3", // C#5 G#m
  F: "[f#5,b5] ~@2 [f#5,b5]!2 ~@2 [f#5,b5]!2 ~@3 [f#5,b5] ~@3", // B5
})).s("gm_acoustic_guitar_steel").gain(0.27).pan(0.9)

// chords · accordion
const accordion = note(`<
  A@2 B@2 ~@14 C@2 D@2 E@2 F G H I J K L M ~@7 N O P Q P R S T U V W V X Y Z AA AB ~@2 AC AD ~ AE AF ~@3 AC AD ~ AE AG
  AH AI AJ V AK AL AM AN AO AP AQ AR AS AT AU AV AW V AX AY AZ BA BB BC BD@2 BE V BF BG BH BI BJ BK BL
>`.pickRestart({
  A: "[c#5@8 b4@8 c#5@8 [a#4,b4] ~ f#4 e4 [a#4,b4] ~ f#4 e4, e4@27 ~@5, g#4@24 ~ g#4@2 ~@2 g#4@2 ~]/2", // Bmaj7
  B: "[c#5 b4 ~ b4, e4]/2",
  C: "[~@12 c#5@2 ~ e5 e5@10 ~ [g4,b4,c#5,e5] [g4,b4,c#5,e5]@3 ~, ~@6 [g4,b4]@7 ~@3, ~@12 d#5 ~@2 c#5@12 ~@5]/2", // C#m7b5 G
  D: "[[g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,b4]@4 g#4 ~@2 [g#4,b4] [g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 [e4,g#4] [b4,e5] ~@3, e4@2 ~@6 g#4@3 ~@4 e4@2 ~@15]/2", // C#5 C#m E5 G#m C#5 C#m E E5
  E: "[[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~@2 [g#4,b4] [g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 g#4 [b4,e5] ~@3, ~@15 e4@2 ~@15]/2", // C#m E G#m C#5 C#m E E5
  F: "[d#4,f#4,g#4] ~@2 [d#4,f#4,g#4]!2 ~@2 [d#4,f#4,g#4] [d#4,f#4]@3 ~ [d#4,f#4,b4] ~@2 [d#4,f#4,b4]", // G#7 D#m B
  G: "[d#4,f#4,c#5] ~@2 [d#4,f#4,c#5]!2 ~@2 [d#4,f#4,c#5] [d#4,f#4,b4]@3 ~ [b3,c#4,f#4,g4] ~@2 [b3,c#4,f#4]", // D#m7 B Bsus2
  H: "[c#4,f#4] e4@2 c#4 [b3,e4]@2 ~ [b3,e4]@9, b3@3 ~@13", I: "~@3 [e4,g4,e5]@13, b4@15 ~, ~ c#5@14 ~",
  J: "d#5@2 f#5@10 d5!2 c#5@2, d5 ~@15", K: "b4@7 ~ [b4,d#5]@2 ~ [c#5,e5]@2 f#5@2 ~, ~@13 d#5 ~@2",
  L: "~@3 e6@7 ~@2 [f#5,g5] f#5 e5 c#5, g#5@11 ~@5", M: "e5@6 b4 c#5@3 b4 ~ [f#4,g4] f#4 e4@2", N: "[b3,c#4,e4,g4]",
  O: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~ [e4,g#4] c#5 [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~@2 [e4,g#4,b4]", // C#m E
  P: "[e4,g#4,c#5]!2 ~ [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4,e5] ~@3", // C#m E
  Q: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // C#m E
  R: "[d#4,f#4,c#5] ~ [d#4,c#5] f#4 [d#4,f#4,c#5] ~@2 [d#4,f#4,c#5] [d#4,f#4,b4]@3 ~ [d#4,f#4,b4] ~@2 [d#4,f#4,b4]", // D#m7 D#7 D#m7 B
  S: "[d#4,f#4,c#5] ~@2 [d#4,f#4,c#5]!2 ~ c#5 [d#4,f#4] [d#4,f#4,b4]@3 ~ [f#4,g4] ~@2 f#4", // D#m7 D#m B Gmaj7
  T: "f#4 e4 c#4 ~ [b3,e4]@2 ~ [b3,e4]@7 ~@2", U: "~@4 e5@11 ~, g4@15 ~, ~ b4@14 ~, ~@2 c#5@13 ~",
  V: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~@2 [e4,g#4,b4]", // C#m E
  W: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~ [e4,c#5] g#4 [e4,g#4,b4]@3 ~ [e4,g#4,b4,e5] ~@3", // C#m E
  X: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@7 ~", // C#m E
  Y: "[d#4,f#4,c#5] ~@2 [d#4,f#4,c#5]!2 ~@2 [d#4,f#4,c#5] [d#4,f#4,b4]@3 ~ [d#4,f#4,b4] ~@2 [d#4,f#4,b4]", // D#m7 B
  Z: "[d#4,f#4,c#5] ~@2 [d#4,f#4,c#5]!2 ~@2 [d#4,f#4,c#5] [d#4,f#4,b4]@3 ~ [f#4,g4] ~@2 f#4", // D#m7 B Gmaj7
  AA: "f#4 e4 c#4 ~ e4@2 ~ [b3,c#4,e4]@8 ~", AB: "~@3 c#5 e5@6 c#5 b4 g4@4, g4@5 ~@3, ~ b4@8 ~@7", AC: "~@15 b4",
  AD: "~@8 b4@7 ~", AE: "~@7 g#4 ~@8", AF: "g#4 ~@7", AG: "g#4@2 ~@6 b4@7 ~", AH: "~@6 [g4,a4,c#5]@9 ~",
  AI: "[e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,c#5] ~ c#5 [e4,g#4] [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~@2 [e4,g#4,b4]", // C#m E
  AJ: "[e4,g#4,c#5] ~ [e4,g#4] c#5 [e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,b4]@3 g#4 [b4,e5] ~@3, ~@8 c#5 ~@2 e4@2 ~@3", // C#m E C#m E E5
  AK: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4,e5] ~@3", // C#m E
  AL: "[d#4,f#4,b4] ~@2 [d#4,g#4]!2 ~@2 [d#4,g#4] [d#4,f#4]@3 ~ [d#4,f#4] ~ f#4 d#4", // B G#5 D#m
  AM: "[d#4,f#4,g#4] ~ d#4 [f#4,g#4] [d#4,f#4,g#4] ~@2 [d#4,f#4,g#4] [d#4,f#4,b4]@4 f#4 g4 ~ f#4, ~@8 a#4 ~@7", // G#7 F#sus2 G#7 B
  AN: "f#4 e4 ~ c#4 e4@2 ~ e4@8 ~", AO: "~@3 e5@10 c#5 b4 g4, b4@13 ~@3, ~ c#5@11 ~@4",
  AP: "[e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,c#5] ~ c#5 [e4,g#4] [e4,g#4,b4]@5 ~@2 [e4,g#4,b4]", // C#m E
  AQ: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [g#4,b4]@2 ~ g#4 [b4,e5] ~@3, ~@8 e4 ~@2 e4@2 ~@3", // C#m G#m E5
  AR: "[e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,c#5] g#4 g#4@4 g#4 ~@2 [e4,g#4,b4], ~@4 [e4,b4]@3 ~", // C#m E E5
  AS: "[e4,g#4,c#5]!2 ~ [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@7 ~", // C#m E
  AT: "[d#4,g#4] ~@2 [d#4,g#4]!2 ~@2 [d#4,g#4] [d#4,f#4]@3 ~ [d#4,f#4] ~@2 [d#4,f#4]", // G#5 D#m
  AU: "[d#4,g#4]!2 d#4 g#4 [d#4,g#4] ~ g#4 d#4 [d#4,f#4]@2 ~@2 [f#4,g4] ~@2 f#4", AV: "f#4 [f#4,g4] e4 c#4 e4 ~@2 e4@9",
  AW: "f#4 g4 g#4 ~ b4 c#5 ~ e5@4 ~ d5 b4 ~ a4, ~@7 d#5 ~@8",
  AX: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@2 ~ g#4 [b4,e5] ~@3, ~@8 c#5 ~@2 e4@2 ~@3", // C#m E E5
  AY: "[e4,g#4,c#5] ~ c#5 [e4,g#4] [e4,g#4,c#5] ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~@2 [e4,g#4,b4]", // C#m E C#m E
  AZ: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~ c#5 [e4,g#4] [e4,g#4,b4]@6 ~@2", // C#m E
  BA: "[d#4,f#4,c5] ~@2 [d#4,f#4,c#5]!2 ~@2 [d#4,f#4,c#5] [d#4,f#4,b4]@3 ~ [d#4,f#4,b4] ~@2 [d#4,f#4,b4]", // Cdim D#m7 B
  BB: "[d#4,f#4,c#5] ~@2 [d#4,f#4,c#5]!2 ~@2 [d#4,f#4,c#5] [d#4,f#4,b4]@7 ~", // D#m7 B
  BC: "[b3,e4,g#4] ~ g#4 [b3,e4] [b3,e4,g#4] ~ [b3,e4,g#4] ~ [e4,b4] ~@2 [e4,g#4,b4] [e4,g#4,e5] ~ e5 [e4,g#4]", // E E5 E E5 E
  BD: "[a#4 b4@5 ~ [g4,b4,c#5]@4 e4 [e4,g4,a4,b4]@3 ~ [g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~@2 [e4,g#4,c#5] [e4,g#4,b4]@3 ~ [e4,g#4,b4] ~@2 [e4,g#4,b4], [e4,g4,c#5]@6 ~ e4@3 ~@5 e4@2 ~@15, ~@7 a#4 ~@24]/2", // C#m7b5 Em C#5 C#m E C#dim
  BE: "[e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,c#5] ~ [e4,g#4,b4]@3 ~ [g#4,b4,e5] ~@3, ~@11 e4@2 ~@3", // C#m E
  BF: "[e4,g#4,c#5] ~@2 [e4,g#4,c#5]!2 ~ c#5 [e4,g#4] [e4,g#4,b4]@3 ~ [e4,g#4,b4,e5] ~@3", // C#m E
  BG: "[d#4,g#4] ~ [d#4,g#4] ~ [d#4,g#4] ~ [d#4,g#4] ~ [d#4,f#4]@3 ~ [d#4,f#4] ~@2 [d#4,f#4]", // G#5 D#m
  BH: "[d#4,g#4] ~ [d#4,g#4] ~ [d#4,g#4] ~ [d#4,g#4] ~ [d#4,f#4]@3 ~ [f#4,g4] ~@2 f#4", // G#5 D#m Gmaj7
  BI: "f#4 e4 c#4 ~ e4 ~@2 e4@5 f#4 [f4,g4] ~ a4", BJ: "[e4,g4,c#5]@6 a4 ~, ~@12 g#4 ~@3",
  BK: "~@2 e3 g3 a3 a#3 b3 d4 e4 ~ g4 a4 a#4 d5 b4 ~", BL: "~@2 [d#4,a4]@2 ~ [d4,f#4,g#4,c#5]@11, ~@2 [g4,d5] ~@13",
})).s("gm_accordion").gain(0.33)

// chords · accordion · soft notes
const accordion_soft = note("<~@2 A@2 ~@14 B ~@9 C ~ D ~@24 E F@6 G H I@7 ~@23 J ~@11>".pickRestart({
  A: "[~@2 c#5 ~, g#4]/2", B: "~@13 e5 ~@2", C: "~@12 d#5 ~@3", D: "e5@3 ~", E: "~@11 d#5 ~@4",
  F: "[c#5@8 b4@8 c#5@8 ~ b4@7 c#5 ~@2 c#5!2 ~@3 b4@5 ~@3 c#5 ~@2 c#5!2 ~@2 c#5 ~@11 f#4!2 ~@2 f#4 f#4@5 ~ f#4 ~ g#4 ~@2 g#4!2 ~@3 f#4@8, e4@65 ~@5 g#4@2 ~@24, g#4@46 ~ g#4@16 ~ [b3,d#4]@32]/6", // B
  G: "~@3 g#4 b4 ~@3 b4@7 ~, ~@7 g#4@9", H: "~@3 [g4,a4,c#5]@4 ~",
  I: "[~@8 b4@8 c#5@8 ~ b4@7 c#5 ~@2 c#5!2 ~@3 b4@5 ~@3 c#5 ~@2 c#5!2 ~@2 c#5 ~@11 f#4!2 ~@2 f#4 f#4@5 ~ f#4 ~ g#4 ~@2 g#4!2 ~@3 f#4@8 ~@3 g#4 b4 ~@2 g#4@9, e4@65 ~@5 g#4@2 ~@24 e4@15 ~, ~@47 g#4@16 ~ [b3,d#4]@33 ~@15]/7", // B
  J: "~@8 g#4 ~@7",
})).s("gm_accordion").gain(0.2)

// drums · kick
const kick = s("bd").struct("<[x!2]!32 ~@7 [~@3 x] [x!2]!63 [x ~@7 x ~@6 x] x [~@5 x ~@8 x ~]>").gain(0.43)

// drums · rim
const rim = s("rim").struct("<~@4 A@3 B A@3 B A@3 B A@3 C ~@86>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~@3", C: "~ x ~@2",
})).gain(0.43)

// drums · snare
const snare = s("sd").struct("<A@3 B ~@15 C A@12 ~@7 D A@7 E A@23 B A@32 F G>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~@2 x", C: "~@11 x!2 ~@2 x", D: "~@3 x!3 ~ x!2 ~@2 x!3 ~ x",
  E: "~@4 x ~@5 x ~ x ~@2 x", F: "x", G: "~@2 x ~@4 x!4 ~@3 x ~",
})).gain(0.43)

// drums · low tom
const low_tom = s("lt").struct("<~@104 [~@12 x!3 ~] [~@13 x ~@2]>").gain(0.49)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!3 [x!3 ~] [x!4]!28 ~@8 [x!4]!64 ~@2>").gain(0.43)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@32 [x!4]!7 x ~@66>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@104 [~@5 x!4 ~ x!3 ~@3] [~@11 x!2 ~@3]>").gain(0.43)

// drums · high tom
const high_tom = s("ht").struct("<~@104 [~@2 x!3 ~@11] ~>").gain(0.43)

// drums · crash
const crash = s("cr").struct("<~@105 [~@2 x ~@2 x ~@8 x ~]>").gain(0.43)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 [~ x ~ x]!12 ~@8 [~ x ~ x]!64 ~@2>").gain(0.37)

stack(
  bass, epiano1, acoustic_guitar_steel, acoustic_guitar_steel_2, accordion, accordion_soft, kick, rim, snare, low_tom,
  hihat, hihat_soft, mid_tom, high_tom, crash, tambourine
)