Strudelify

Blow at High Dough

The Tragically Hip

KeyB majorTempo126 bpm
0:00/0:00
// Blow at High Dough — The Tragically Hip
// 126 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · electric bass finger · "BASS"
const bass = note(`<
  A B@8 C@2 B@6 C@2 B D E@2 F G F G@2 H G H I@2 G H G H G H I@2 G H J K J K L M L N H G O H G H G H I@2 G H G H G H I@2
  G H J K J K L M L P B@8 C@2 B@3 Q F G F G@2 H G H I@2 G H G H G H I@2 G H J K J K L M L N G H@3 G H@3 G H@2 R B@3 S@4
>`.pickRestart({
  A: "~@5 b3 e4 b3", B: "f#4 b3 f#4 b3 f#4 b3 e4 b3", C: "e4 a3 e4 a3 e4 a3 d4 a3", D: "f#4 b3 f#4 b3 f#4 b3 e4 d3",
  E: "[a2@27 ~@3 a2@2]/2", F: "b2 ~ a2 ~@2 a2 b2 a2, ~ b2@2 b2@3 ~@2", G: "b2!2 a2 b2!2 a2 b2 a2",
  H: "b2@2 b2@2 a2@2 b2@3 ~ a2@2 b2@2 a2@2", I: "a2!8", J: "e3@3 ~ e2@3 ~ e2@2 e2@2 e2@2 e2@2", K: "e2!5 a2 d3 a2",
  L: "f#3@3 ~ f#2@3 ~ f#2@2 f#2@2 f#2@2 f#2@2", M: "f#2!5 a2 e3 a2", N: "f#2!5 e2 d3!2",
  O: "b2 ~ a2 b2 ~ a2 b2 a2, ~ b2@2 ~ b2@2 ~@2", P: "f#2!4 e2 b3 e4 b3", Q: "f#4 b3 f#4 b3 f#4 a2 d3 a2",
  R: "b2@2 b2@2 a2@2 b2@3 ~ b3@2 e4@2 b3@2", S: "[f#4 b3 f#4 b3 f#4 b3 e4 ~ f#4@23 ~, ~@14 b3@47 ~@3]/4",
})).s("gm_electric_bass_finger").gain(0.51)

// chords · electric guitar clean · "Rythym Gu"
const electric_guitar_clean = note(`<
  ~ A@3 ~ B@4 C@2 ~@2 B@4 C@2 B@2 D@2 E F@3 E F@3 G@2 F@2 E F@3 G@2 F@2 H I H ~ J ~@7 E F@3 G@2 F@2 E F@3 G@2 F@2 H I H
  ~ J ~@17 E F@3 E F@3 G@2 F@2 E F@3 G@2 F@2 H I H ~ J ~@3 E F@3 E F@3 E F@2 K ~@7
>`.pickRestart({
  A: "[b5@7 ~]/3", B: "[~ [d#5,f#5]@30 ~, [b3,b4]@15 ~]/2", C: "[~ [e5,a5]@30 ~, [a3,a4,c#5]@15 ~]/2",
  D: "[~ a4@30 ~, [a3,e4]@15 ~]/2", E: "[b3,f#4]@2 [b3,e4] [b3,f#4]@2 [b3,e4] [b3,f#4] [b3,e4]",
  F: "[b3,f#4]!2 [b3,e4] [b3,f#4]!2 [b3,e4] [b3,f#4] [b3,e4]", G: "[a3,e4]!2 [a3,d4] [a3,e4]!2 [a3,d4] [a3,e4] [a3,d4]",
  H: "~@4 [e4,g#4,b4,e5]@11 ~, e3@7 ~", I: "~@2 g4 a4 b4@2 g4@2",
  J: "~@4 [a#4,c#5]@9 ~ [c#5,f#5]@2, f#4@7 ~, ~@4 f#5@7 ~@5", K: "[b3,f#4]!2 [b3,e4] [b3,f#4]!2 ~@3",
})).s("gm_electric_guitar_clean").gain(0.51)

// chords · distortion guitar · "Lead Guit"
const distortion_guitar = note(`<
  ~ A@3 ~ B@4 C@2 ~@2 B@4 C@2 B@2 D@2 E F@3 G@4 H@2 G@6 H@2 I@2 ~ J K L M N O@2 P Q R S G@4 H@2 G@6 H@2 I@2 ~ J K L M N
  O@2 T@2 U@6 V W X@2 Y Z E F@3 G@4 H@2 G@6 H@2 I@2 ~ J K L M N O@2 R AA R AB R AA R AB AC@2 AD@2 AE@2 AF@2 AG@3
>`.pickRestart({
  A: "[b5@7 ~]/3", B: "[~ [d#5,f#5]@30 ~, [b3,b4]@15 ~]/2", C: "[~ [e5,a5]@30 ~, [a3,a4,c#5]@15 ~]/2",
  D: "[~ a4@30 ~, [a3,e4]@15 ~]/2", E: "[b3,f#4]@2 [b3,e4] [b3,f#4]@2 [b3,e4] [b3,f#4] [b3,e4]",
  F: "[b3,f#4]!2 [b3,e4] [b3,f#4]!2 [b3,e4] [b3,f#4] [b3,e4]", // B5 E5 B5 E5 B5 E5
  G: "[[b4,d#5]@5 ~ e4@2 f#4@2 a4@4 b4@6 b4@2 [a4,d5,f#5]@5 ~ [c#5,e5] ~@3]/2", // B D C#m
  H: "[[a3,e4,a4]@5 ~ d4@2 e4@2 g4@4 a4@6 g4@2 a4@4 g4@2 e4@4]/2", // A5
  I: "[[b4,d#5]@5 ~ e4@2 f#4@2 a4@4 b4@6 b4@2 [a4,d5,f#5]@9 ~]/2", J: "~@2 g4 a4 b4@2 g4@2", K: "~@4 e5@2 b4 e5",
  L: "~@2 a5@2 ~@2 e5@9 ~, ~ g#5@3", M: "~@7 [c#5,f#5]", N: "~ f#4 a4 b4 c#5 b4 a4@2",
  O: "[~@4 [a#4,c#5,f#5]@5 ~ e5@4 f#5@6 e5@2 f#5@9 ~]/2", P: "[b3,f#4,b4]@5 ~ f#5@4 ~ f5@2 e5@2 ~",
  Q: "d5@5 ~ b4@4 b4@2 [e4,a4]@4", R: "[f#4,b4]@5 ~ f#5@4 ~ f5@2 e5@2 ~", S: "d5@5 ~ e5@4 ~@2 d5@4",
  T: "[[f#4,b4]@7 a4]/2", U: "[b4@11 ~@2 b4 e4 ~ b4@9 ~@2 b4 a4 b4 e4 ~ b4@13 ~ d5@2, ~@15 f#4@12 ~@4 f#4@15 ~@2]/6",
  V: "c#5@7 ~", W: "e5@7 ~", X: "[f#5@11 ~ b4!4]/2", Y: "f#5 d#5@2 b4@2 b4!3", Z: "f#5 d#5@2 [b4,d#5]@2 [b4,d#5]!3",
  AA: "d5@5 b4@6 ~ [e4,a4]@4", AB: "e5@7 ~ e5@4 d5@4",
  AC: "[[f#4,b4]@5 ~ f#4@2 [e4,a4]@2 [f#4,b4]@4 [a4,d5]@7 ~ [f#4,b4]@4 e4@2 f#4@4]/2", // B5 A5 B5 D5 B5
  AD: "[b4@5 ~ f#4@2 a4@2 b4@4 d5@7 ~ f#5@4 ~ f5@2 e5@2 ~]/2", AE: "[b4@26 [e4,a4]@5 ~]/2",
  AF: "[[f#4,b4]@13 ~ [e4,a4]@2]/2", AG: "[[f#4,b4]@23 ~]/3",
})).s("gm_distortion_guitar").gain(0.51)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@22 A B@3 ~ B@7 ~ B@7 C B@3 C B@3 D B@3 C B@7 E B@7 F B@3 G B@3 C ~@12 A H B@3 G B@7 D B@7 I B@3 D B@3 I B@7 E B@3 J
  ~@7
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x ~ x!6", D: "x ~@2 x ~@2 x ~", E: "x!3 ~ x ~ x ~@5 x ~@3", F: "~@9 x ~@2 x ~@3",
  G: "x ~@5 x ~@3 x ~@2 x ~@2", H: "~@4 x ~@7 x ~ x!2", I: "x!2 ~ x!2 ~ x!2 ~@2 x!3 ~@3", J: "~ x ~@2",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@26 A ~@7 A ~@7 B ~@3 B ~@3 C ~@3 B ~@7 C ~@11 D ~@3 B ~@17 D ~@7 C ~@7 E ~@3 C ~@3 E ~@19
>`.pickRestart({
  A: "~@10 x!6", B: "~@3 x!5", C: "~@3 x", D: "~@4 x ~@4 x ~@2 x ~@3", E: "~@7 x",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@112 [x!4] ~@7 [x!4] ~@19>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 A ~@7 A ~@15 B ~@23 C ~@21 C ~@7 B ~@7 D ~@3 B ~@3 D ~@19>".pickRestart({
  A: "~@4 x!4 ~@8", B: "~@3 x ~@4", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~@13 x ~@2",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@21 A ~ B@3 ~ B@7 ~ B@7 A ~@3 A ~@4 B@3 A B@7 ~ B@7 ~@8 A ~@12 A ~ B@3 ~ B@7 ~ B@7 ~@9 B@7 ~ B@3 C ~@5 A ~
>`.pickRestart({
  A: "x", B: "x!4", C: "x!3 ~",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@26 A ~@7 A ~@15 B ~@53 B ~@11 B ~@23>".pickRestart({
  A: "x!2 ~@14", B: "x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@21 A ~ A ~@3 A ~@7 A ~@6 B A ~@2 B A ~@3 A ~@2 B A ~@7 A ~@7 A ~@3 A ~@2 B ~@12 A ~ A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A
  ~@6 C A ~@10
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct("<~@43 A@3 ~ A B A ~@21 A B@2 ~ A@2 C ~@35 A@3 ~ A@3 ~@20>".pickRestart({
  A: "x!4", B: "x ~@3 x ~ x!3 ~@3 x ~@3", C: "x ~ x!3 ~ x ~",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B C B C B C B C B C B C B C B C B C B C ~@21 D E@3 D E@3 ~@4 D ~@16 E@3 ~ E@3 D B C B C B C B C B C B C ~@22 E@3 ~
  E@3 ~@12 A B C B C F ~@2
>`.pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2", D: "x ~ x!3 ~ x!2",
  E: "~ x!2 ~ x!4", F: "x ~ x ~ x ~ x!3 ~ x ~ x!4",
})).gain(0.5)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@42 A B@3 A B@3 ~@4 A ~@16 B@3 ~ B@3 A ~@34 B@3 ~ B@3 ~@20>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "x ~@2 x ~@4",
})).gain(0.3)

stack(
  bass, electric_guitar_clean, distortion_guitar, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride,
  tambourine, tambourine_soft
)

More by The Tragically Hip