Strudelify

There was a Pig went Out to Dig

Grainger

KeyD majorTempo180 bpm
0:00/0:00
// There was a Pig went Out to Dig — Grainger
// 180 bpm, 6/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5955818; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@3 A B ~ C D E ~@2 F G ~@3 H ~@2 I J ~@2 K L ~@2 M N ~@2 O P Q R ~@7 S ~@7 S ~@10 T U V W X@2 Y Z AA@2 Y Z AB AC AD
  AE AF AG AH AI AJ ~@2 AK AL AM ~ AK AL AN ~ AK AL AM ~ AO AP@4 AQ ~@9 Q AR
>`.pickRestart({
  A: "d4@3 e4@2 f4@3 e4@8", B: "d4@3 e4@2 f4@3 e4@5 ~@3", C: "~@13 d4@3", D: "d4@3 e4@2 f4@3 e4@3 d4@2 c#4@3",
  E: "d4@8 a4@3 ~@5", F: "~ e5", G: "~@8 e5@5 ~@3", H: "d5 ~", I: "d5@3 e5@2 f5@3 e5@3 f5@2 g5@3",
  J: "f5@3 e5@2 d5@3 e5@5 ~@3", K: "f5@3 e5@2 d5@3 e5@3 f5@2 g5@3", L: "f5@3 e5@2 d5@3 c5@3 a#4@2 a4@3",
  M: "c5@3 c5@2 c5@3 b4@8", N: "c5@3 c5@2 c5@3 b4@5 ~@3", O: "d5@3 e5@2 f5@3 e5@3 d5@2 c#5@3", P: "d5@13 e5@3",
  Q: "f5@3 e5@2 d5@3 c#5@3 d5@2 e5@3", R: "d5@8 d4 ~@7", S: "b4 ~", T: "a4 ~", U: "c5 c#5", V: "d5 e5",
  W: "f5@8 g5@3 f5@2 d#5@3", X: "d5@8 c5@3 a#4@2 c5@3", Y: "d5 a#4", Z: "c5@8 c5@3 a#4@2 c5@3", AA: "d5 c5",
  AB: "f#4 a4", AC: "d4@8 d5@3 c5@2 a#4@3", AD: "a4@5 a#4@3 c5@3 d5@2 c5@3", AE: "a#4@3 c5@2 a#4@3 a4@3 a#4@2 a4@3",
  AF: "g4@3 a4@2 g4@3 f4@3 g4@2 f4@3", AG: "e4@3 f4@2 e4@3 d4@3 e4@2 d4@3", AH: "c4@5 e4@3 f4@3 g4@2 f4@3",
  AI: "e4@5 g4@3 f4@3 g4@2 f4@3", AJ: "e4@3 ~@13", AK: "~@13 d5@3", AL: "a4@5 b4@3 c5@3 d5@2 e5@3",
  AM: "d5@5 a4@3 a4@8", AN: "d5@3 c5@2 b4@3 a4@3 g4@2 f4@3", AO: "~@13 a4@3", AP: "d5@3 ~@5 d4@3 ~@5",
  AQ: "d5 ~@4 d4@3 e4@5 ~@3", AR: "d5@8 d5@3 ~@5",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note(`<
  ~@11 A@2 ~@2 B C ~@17 D E F G H I F J K E F G H I F J L ~@7 M N O P ~@40 Q R@6 S@2 ~@2
>`.pickRestart({
  A: "d5@3 e5@2 f5@3 ~@8", B: "d5@3 e5@2 f5@3 e5@3 d5@2 c#5@3", C: "~@8 d5@3 ~@5", D: "~@13 a4 ~@2",
  E: "d5@3 ~@5 e5@3 ~@5", F: "f5@3 ~@5 e5 ~@4 d5 ~@2", G: "c5@3 ~@5 b4@3 ~@5", H: "c5@3 ~@5 b4 ~@4 b4 ~@2",
  I: "a4@3 ~@5 d5@3 ~@5", J: "d5@3 ~@5 c5@3 ~@5", K: "~@8 a4 ~@4 a4 ~@2", L: "~@8 a4 ~@7", M: "~@13 a3@3",
  N: "d4@3 d4@2 e4@3 f4@3 f4@2 g4@3", O: "a4@5 d5@3 a4@8", P: "~ b4", Q: "f4@3 ~@13", R: "a4 d5", S: "[a4 d5@2 ~]/2",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@3 A B ~ C D E ~@2 F G ~@3 H ~@2 I J ~@2 I K ~ L M N O P Q R S T ~@2 U V ~@3 W ~@17 X@3 Y Z AA AB AC AD AE@2 AC AD AF
  AG AH AI AJ AK AL@2 AM AN O AO AP AQ O AO AR AS O AO AP AQ O AT AP@4 AU AV@2 AW@5 AX@2 AY AZ
>`.pickRestart({
  A: "d4@3 e4@2 f4@3 e4@8", B: "d4@3 e4@2 f4@3 e4@5 ~@3", C: "~@13 d4@3", D: "d4@3 e4@2 f4@3 e4@3 d4@2 c#4@3",
  E: "d4@8 a3@3 ~@5", F: "~ g#3", G: "~@8 g#3@5 ~@3", H: "g3 ~", I: "a3@3 c4@2 a#3@3 a3@3 a#3@2 c4@3",
  J: "a#3@3 a3@2 g3@3 a3@5 ~@3", K: "a#3@3 a3@2 g3@3 f3@3 e3@2 d3@3", L: "~@5 b3@3 a3@8", M: "a3@3 a3@2 a3@3 g#3@8",
  N: "a3@3 a3@2 a3@3 g#3@5 a3@3", O: "d4@5 e4@3 f4@5 g4@3", P: "a3@5 b3@3 a3@8", Q: "a3@3 a3@2 a3@3 g3@3 g3@2 g3@3",
  R: "f3@13 e3@3", S: "d4@5 d4@3 e4@3 f4@2 g4@3", T: "e4@8 a3 ~@7", U: "~ e4", V: "~@8 e4@5 ~@3", W: "d4 ~",
  X: "[~ a4@4 g4]/3", Y: "f4 e4", Z: "d4 d#4", AA: "d4@8 g4@3 a4@2 g4@3", AB: "f#4@8 g4@3 a4@2 g4@3", AC: "f#4 f4",
  AD: "e4@8 g4@3 a4@2 g4@3", AE: "f#4 g4", AF: "d4 e4", AG: "f4 g4", AH: "a4@8 a4@3 e4@2 f4@3",
  AI: "g4@3 a4@2 g4@3 f4@3 g4@2 f4@3", AJ: "e4@3 f4@2 e4@3 d4@3 e4@2 d4@3", AK: "c4@3 d4@2 c4@3 a#3@3 c4@2 a#3@3",
  AL: "a3@3 c4@2 e4@3 d4@3 c4@2 a#3@3", AM: "a3@3 ~@13", AN: "~@13 a3@3", AO: "a4@5 d5@3 d4@8",
  AP: "f4@3 e4@2 d4@3 e4@8", AQ: "f4@3 e4@2 d4@3 e4@3 ~@2 a3@3", AR: "f4@3 e4@2 d4@3 e4@3 d4@2 c4@3",
  AS: "d4@8 a4@3 ~@2 a3@3", AT: "a4@5 d5@3 d4@5 e4@3", AU: "f4@3 e4@2 d4@3 c#4@3 d4@2 e4@3", AV: "[d4 a4@2 g#4]/2",
  AW: "a4 g#4", AX: "[a4 g#4@2 ~]/2", AY: "a4@5 a4@3 g4@3 f4@2 e4@3", AZ: "f4@8 f4@3 ~@5",
})).s("gm_french_horn").gain(0.45)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@11 A@2 ~@2 B C ~@17 D E F G H E F I J K L M N O P Q R ~@62>".pickRestart({
  A: "a3@3 a3@2 a3@3 ~@8", B: "a3@3 a3@2 a3@3 g#3@3 g#3@2 g#3@3", C: "~@8 f3@3 ~@5", D: "~@13 a3 ~@2",
  E: "d4@5 e4@3 f4@3 f4@2 g4@3", F: "a4@5 d5@3 d4@3 d4@5", G: "d4@3 e4@2 f4@3 ~@8", H: "d4@3 e4@2 f4@3 ~@5 e4@3",
  I: "d4@3 e4@2 f4@3 e4@3 f4@2 e4@3", J: "~@8 d4 ~@4 e4 ~@2", K: "d4@3 ~@5 c4@3 ~@5", L: "b3@3 ~@5 a#3 ~@4 a#3 ~@2",
  M: "a3@5 ~@3 g#3@5 ~@3", N: "a3@3 ~@5 g#3 ~@4 g#3 ~@2", O: "a3@3 ~@5 d4@3 ~@5", P: "c4@5 ~@3 b3 ~@4 b3 ~@2",
  Q: "a3@3 ~@5 a3@3 ~@5", R: "g3@8 d4 ~@7",
})).s("gm_french_horn").gain(0.25)

// other · trombone
const trombone = note(`<
  ~@3 A B ~ C D E F G H I F G J K F G L M F G N O ~ P Q R F S J T U V ~@7 W ~@7 X ~@7 Y ~@2 Z AA AB AC AD@2 AE AF AG@2
  AE AF AB AH AI AJ AK AL@2 AM AN AO AP AQ AR@2 AS AQ AT AU AV AQ AR@2 AS AW AX@5 AY AZ@3 BA AZ BA BB@2 BC BD
>`.pickRestart({
  A: "d4@3 e4@2 f4@3 e4@8", B: "d4@3 e4@2 f4@3 e4@5 ~@3", C: "~@13 d4@3", D: "d4@3 e4@2 f4@3 e4@3 d4@2 c#4@3",
  E: "d4@8 a3@3 ~@2 a2@3", F: "d3@5 e3@3 f3@5 g3@3", G: "a3@5 d4@3 d3@8", H: "~ d3", I: "~@8 d3@5 a2@3",
  J: "d3@3 d3@2 d3@3 d3@3 d3@2 d3@3", K: "d3@8 d3@3 ~@2 a2@3", L: "f3@3 e3@2 d3@3 e3@8", M: "d3@3 e3@2 f3@3 e3@5 a2@3",
  N: "d3@3 e3@2 f3@3 e3@3 f3@2 e3@3", O: "d3@8 d4@5 ~@3", P: "~@5 g3@3 f3@8", Q: "d3@3 d3@2 d3@3 d3@8",
  R: "d3@3 d3@2 d3@3 d3@5 a2@3", S: "a3@5 g3@3 f3@8", T: "c3 b2", U: "a#2@5 a#2@3 a2@3 a2@2 a2@3", V: "d3@8 d3 ~@7",
  W: "g2 ~", X: "d3 ~", Y: "~@8 d4@3 ~@5", Z: "a3 g3", AA: "f3 e3", AB: "d3 c3", AC: "a#2@8 a2@3 a#2@2 c3@3",
  AD: "d3@8 d#3@3 f3@2 d#3@3", AE: "d3 c#3", AF: "c3@8 d#3@3 f3@2 d#3@3", AG: "d3 d#3", AH: "a#2",
  AI: "a2@5 a3@3 g3@3 a3@2 g3@3", AJ: "f3@3 g3@2 f3@3 e3@3 f3@2 e3@3", AK: "d3@3 e3@2 d3@3 c3@3 d3@2 c3@3",
  AL: "[a#2@3 c3@2 a#2@3 a2@11 a3@2 g3@3 f3@3 e3@2 d3@3]/2", AM: "a2@5 e3@3 f3@3 e3@2 d3@3", AN: "a2@3 ~@10 e3@3",
  AO: "a3@11 ~@5", AP: "~@5 a2@3 d3@5 e3@3", AQ: "f3@5 g3@3 a3@5 d4@3", AR: "d3@8 c3@3 b2@2 a2@3",
  AS: "d3@3 ~@2 a2@3 d3@5 e3@3", AT: "d3@8 g3@3 a3@2 g3@3", AU: "g3@3 f3@2 e3@3 d3@8", AV: "a3@3 ~@2 a2@3 d3@5 e3@3",
  AW: "f3@5 g3@3 a3@5 d3@3", AX: "c3@3 ~@5 a#2@3 ~@5", AY: "a2@3 ~@13", AZ: "a3 f3", BA: "a3 e3", BB: "[a3 d#3@2 ~]/2",
  BC: "a3@5 a3@3 a2@3 a2@2 a2@3", BD: "d3@8 d4@3 ~@5",
})).s("gm_trombone").gain(0.4)

// other · trombone · soft notes
const trombone_soft = note("<~@11 A@2 ~@21 B C D E F G H I J K L M N K L O P Q R M S Q R T U ~@54>".pickRestart({
  A: "d3@3 d3@2 d3@3 ~@8", B: "~@13 e3 ~@2", C: "d3@3 ~@5 c3 ~@7", D: "b2@3 ~@5 a#2 ~@4 a#2 ~@2",
  E: "a2@3 ~@5 g#2@3 ~@5", F: "b2@3 ~@5 g#2 ~@4 g#2 ~@2", G: "a2@3 ~@5 d3@3 ~@5", H: "c3@3 ~@5 b2 ~@4 b2 ~@2",
  I: "a2@3 ~@5 a2@3 ~@5", J: "~@8 a2 ~@4 a2 ~@2", K: "d3@5 e3@3 f3@3 f3@2 g3@3", L: "a3@5 d4@3 d3@3 d3@5",
  M: "d3@3 e3@2 f3@3 e3@8", N: "d3@3 e3@2 f3@3 e3@5 e3@3", O: "d3@3 e3@2 f3@3 e3@3 f3@2 e3@3", P: "~@8 a3 ~@4 a2@3",
  Q: "d3@5 e3@3 f3@5 g3@3", R: "a3@5 d4@3 d3@8", S: "d3@3 e3@2 f3@3 e3@5 a2@3", T: "d3@3 e3@2 f3@3 e3@3 d3@2 c#3@3",
  U: "d3 ~",
})).s("gm_trombone").gain(0.2)

// bass · tuba
const bass = note(`<
  ~@16 A B C D E B C F G ~@2 H I B J K L M N ~@15 N ~@10 O P Q R S@2 T U V@2 T U Q W X@7 Y ~@8 V@6 Z@5 ~@9 AA AB
>`.pickRestart({
  A: "~@13 a1@3", B: "d2@5 e2@3 f2@5 g2@3", C: "a2@5 d3@3 d2@8", D: "f2@3 e2@2 d2@3 e2@8",
  E: "d2@3 e2@2 f2@3 e2@5 a1@3", F: "d2@3 e2@2 f2@3 e2@3 f2@2 e2@3", G: "d2@8 d2@5 ~@3", H: "d2@3 d2@2 d2@3 d2@8",
  I: "d2@3 d2@2 d2@3 d2@5 a1@3", J: "a2@5 g2@3 f2@8", K: "d2@3 d2@2 d2@3 d2@3 d2@2 d2@3", L: "c2 b1",
  M: "a#1@5 a#1@3 a1@3 a1@2 a1@3", N: "d2 ~", O: "a2 ~", P: "f2 e2", Q: "d2 c2", R: "a#1 a1", S: "d2 d#2", T: "d2 c#2",
  U: "c2 d#2", V: "d2 a1", W: "a#1", X: "[a1@99 ~@13]/7", Y: "~@5 e2@3 a2@5 ~@3", Z: "c2@3 ~@5 a#1@3 ~@5",
  AA: "a1@5 a1@3 a1@3 a1@2 a1@3", AB: "d2@8 d2@3 ~@5",
})).s("gm_tuba").gain(0.45)

// bass · tuba · soft notes
const bass_soft = note("<~@34 A B C D E F G H I B C D@2 F G H A ~@10 J ~@40 K L@8 ~@2>".pickRestart({
  A: "~@8 d2 ~@7", B: "d2 c2", C: "b1 a#1", D: "a1 g#1", E: "b1 g#1", F: "a1 d2", G: "c2 b1", H: "a1!2", I: "b1 a1",
  J: "~ g2", K: "a1@3 ~@13", L: "[a1@15 ~]/8",
})).s("gm_tuba").gain(0.2)

stack(trumpet, trumpet_soft, french_horn, french_horn_soft, trombone, trombone_soft, bass, bass_soft)

More by Grainger