Strudelify

Piggies

The Beatles

KeyA♭ majorTempo88 bpm
0:00/0:00
// Piggies — The Beatles
// 88 bpm, 4/4, key Ab 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, 3/4 at bar 44, 4/4 at bar 45) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 2 "Lead - Flute" named as a pipe, played on flute (its lead 5 charang patch is not one); ch 7 "Strings" named as a string part, played on string ensemble 1 (its synth bass 1 patch is not one)
// note: Full arrangement: all 47 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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 · slap bass 2 · "Bass (Muted Gtr)"
const bass = note("<~@2 A@3 B@2 C A@5 B@2 C A D E F G H E F G I@3 J@2 C A@5 B@2 C A@3 K ~@4>".pickRestart({
  A: "ab2 ~@3 eb2 ~@3", B: "f2 ~@3 bb2 ~@3", C: "eb2", D: "ab2 ~@3 c2 ~@3", E: "bb1 ~ bb1 ~ c2 ~ c2 ~",
  F: "db2 ~ db2 ~ eb2 ~ eb2 ~", G: "eb2 ~ eb2 ~ eb2 ~ eb2 ~", H: "bb2 ~ bb2 ~ eb2 ~ eb2 ~", I: "ab2 eb2", J: "f2 bb2",
  K: "bb2 ~@3 eb2@4",
})).s("gm_slap_bass_2").gain(0.62).pan(0.3)

// other · cello · "Choir Aahs" · C Db Eb C Bb C Db Bb …
const cello = note(`<
  ~@33
  [[c3,c4] [db3,db4] [eb3,eb4] [c3,c4] [bb2,bb3] [c3,c4] [db3,db4] [bb2,bb3]]
  [[ab2,ab3] [bb2,bb3]@2 [c3,c4]@2 [ab2,ab3]@2 [eb2,eb3]@5 ~@4]
  [[c3,c4]@2 [db3,db4] [eb3,eb4]@3 [c3,c4]@2 [bb2,bb3]@2 [c3,c4]@2 [db3,db4]@2 [bb2,bb3]@2]
  [[ab2,ab3]@2 [bb2,bb3]@2 [c3,c4] [ab2,ab3]@2 [f2,f3]@5 ~@4]
  [[ab2,ab3] [bb2,bb3] [c3,c4] [f3,f4] [d3,d4]@2 ~ [bb2,bb3]]
  [[eb3,eb4] [f3,f4] [gb3,gb4] [g3,g4]]
  ~@8
>`).s("gm_cello").gain(0.56).pan(0.3)

// other · harpsichord
const harpsichord = note("<A B ~@5 C D E ~@5 C D F G H I J K L M N@2 O@4 P Q R@3 S@2 T P U V W ~@4>".pickRestart({
  A: "[c4,ab4] [db4,bb4] [eb4,c5] [f4,db5] [g4,bb4]@2 eb4@2", // Fm Gb Cm Db Gm
  B: "[c4,c5]@2 [db4,db5]@2 eb5 db5 [ab4,c5]@2 [eb4,bb4]@4 eb4@4, ~@2 eb4 ~@5", C: "eb4 f4 gb4 g4",
  D: "ab4 bb4 c5 ab4 bb4@2 eb4@2", E: "c5@2 db5@2 eb5 db5 c5@2 bb4@4 eb4@4", F: "ab4@2 bb4@2 c5 db5 d5 eb5 e5@8",
  G: "[f4,bb4,db5] [g4,c5,e5]", H: "[ab4,db5,f5] [c5,eb5,ab5]", I: "[bb4,eb5,g5]",
  J: "eb4@2 g4@2 ab4@2 a4 bb4 ~ db5 ~ bb4 ab4@2 g4@2", K: "[f4,bb4,db5]!4 [g4,c5,e5]!4",
  L: "[ab4,db5,f5]!4 [bb4,eb5,g5]!4", M: "[bb4,eb5,g5]!8",
  N: "[~@14 g4 eb4, eb5 db5 c5 eb5 db5 c5 bb4 db5 c5 bb4 ab4 c5 bb4 ab4 ~@2, ~ eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 ~@3]/2",
  O: "[~@63 g4, ab4 bb4 c5 ab4 bb4 c5 db5 bb4 c5 bb4 ab4 c5 bb4 c5 d5 bb4 c5 bb4 ab4 c5 bb4 c5 d5 bb4 eb5!2 db5!2 c5!2 bb4!2, ~ eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 eb4@2 eb4@2 f4@2 f4@2 gb4@2 gb4@2 g4@2 ~]/4",
  P: "c5 db5 eb5 c5 bb4@4", Q: "c5@2 db5@2 eb5 db5 c5@2 bb4@8", R: "[eb4,ab4,c5] [eb4,g4,bb4]",
  S: "[f4,ab4,c5] [f4,bb4,d5]", T: "eb5 db5 c5 bb4", U: "b4@2 db5@2 eb5 db5 b4@2 bb4@8",
  V: "b4 db5 eb5 b4 bb4 b4 db5 bb4", W: "ab4 bb4 b4 d5 eb5@4",
})).s("gm_harpsichord").gain(0.54).pan(0.9)

// chords · acoustic guitar steel · "Gtr - Steel Str"
const acoustic_guitar_steel = note(`<
  A@2 B@2 C D E F G@2 H I C D J F K L M N O@2 M P Q R@3 S@2 F T@2 B@2 C D E F U V W X ~@4
>`.pickRestart({
  A: "[ab3,c4,ab4]!4 [eb3,bb3,eb4,g4]@4, [ab2,c3,eb3]!2 ~@2", // Ab Eb Ab
  B: "[ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab2,c3,eb3,ab3,c4,ab4]@3 [ab3,c4,ab4] [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@3 [bb3,eb4,g4], [ab2,c3,eb3] ~ eb3 ~", // Ab Eb Ab
  C: "[ab3,c4,ab4]@2 [ab3,c4,ab4] ~@3 [ab3,c4,ab4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2, [ab2,c3,eb3]@3 [ab3,c4,ab4]@3 ~@2 eb3@4 eb3@4, ~ [ab2,c3,eb3] ~@2", // Ab Eb Ab
  D: "[ab3,c4,f4]@2 [ab3,c4,f4] ~@2 [ab3,c4,f4] [ab3,c4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2, [f2,c3,f3]@3 [ab3,c4,f4]@2 ~@11, ~ [f2,c3,f3] [bb2,f3]!2", // Fm Ddim F5 Fm F5 Bb5
  E: "[ab3,c4,f4] [ab3,c4,f4]@3 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2, [f2,c3,f3]!2 [bb2,f3]!2", // Fm Ddim F5 Bb5
  F: "[eb3,bb3,eb4,g4]", // Eb
  G: "[ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2, [ab2,c3,eb3]!2 eb3!2", // Ab Eb Ab
  H: "[ab3,c4,ab4]!4 [bb3,eb4,g4]!4, [ab2,c3,eb3]!2 eb3!2", // Ab Eb Ab
  I: "[ab3,c4,ab4]@2 [ab3,c4,ab4]!2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2, [ab2,c3,eb3]!2 eb3!2", // Ab Eb Ab
  J: "[ab3,c4,f4]@2 [ab3,c4,f4]!2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2, [f2,c3,f3]!2 [bb2,f3]!2", // Fm Ddim F5 Bb5
  K: "[ab3,c4,ab4]!4 [eb3,bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@2, [ab2,c3,eb3]!2 ~@2", // Ab Eb Ab
  L: "[ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [bb3,c4,g4]@2 [bb3,c4,g4]@2 [bb3,c4,g4]@2 [bb3,c4,g4]!2, [ab2,c3,eb3]!2 [c3,e3]!2", // Ab C7 Ab C
  M: "[bb3,db4]!4 [bb3,c4,g4]!4, [bb2,f3]!2 [c3,e3]!2", N: "[ab3,db4,f4]!4 [ab3,c4,ab4]!4, [db3,f3]!2 [ab2,c3,eb3]!2",
  O: "[bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2, eb3!4", // Eb
  P: "[ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2, [db3,f3]!2 eb3!2", // Db Eb Db
  Q: "[bb3,eb4,g4]!8, eb3!4", // Eb
  R: "[ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2, [ab2,c3,eb3]!2 eb3!2", // Ab Eb Ab
  S: "[ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]!2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2, [f2,c3,f3]!2 [bb2,f3]!2", // Fm Ddim F5 Bb5
  T: "[ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [eb3,bb3,eb4,g4]@4, [ab2,c3,eb3]!2 eb3 ~", // Ab Eb Ab
  U: "[ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [ab3,c4,ab4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2, [ab2,c3,eb3]!2 eb3!2", // Ab Eb Ab
  V: "[b3,eb4,ab4]@2 [b3,eb4,ab4]@2 [b3,eb4,ab4]@2 [b3,eb4,ab4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2, [ab2,eb3,ab3]!2 eb3!2", // Abm Eb Ab5
  W: "[b3,eb4,ab4]@2 [b3,eb4,ab4]@2 [b3,eb4,ab4]@2 [b3,eb4,ab4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2, [ab2,eb3,ab3]!2 eb3!2", // Abm Eb Ab5
  X: "[ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]!2 [eb3,bb3,eb4,g4]@8, [bb2,f3]!2 ~@2", // Ddim Eb Bb5
})).s("gm_acoustic_guitar_steel").gain(0.45).pan(1)

// bass · contrabass
const bass_2 = note("<~@8 A@5 B@2 C D E F G H I F J K L M N O P C Q R A@3 B@2 C Q A@2 S@5>".pickRestart({
  A: "ab3 eb3", B: "f3 bb2", C: "eb2 f2 gb2 g2", D: "ab2 bb2 c3 db3 eb3@2 ~@2", E: "ab2@2 bb2@2 c3 db3 d3 eb3 e3@8",
  F: "bb2!4 c3!4", G: "db3!4 ab2!4", H: "eb3!8", I: "eb2@2 g2@2 ab2@2 a2 bb2 ~ db3 ~ bb2 ab2@2 g2@2", J: "db3!4 eb3!4",
  K: "eb3 g3 ab3 bb3 c4 db4 eb4 eb3", L: "ab2@3 c3 eb3@3 g3", M: "ab3@2 bb3@2 c4@2 ab3@2 eb3 d3 eb3 f3 eb3 db3 c3 bb2",
  N: "c3@3 ab2 eb3@3 g3", O: "ab3 g3 f3 eb3 d3 c3 bb2@2", P: "f2 g2 ab2 f2 bb2@4", Q: "ab2 eb3",
  R: "ab3@4 c4@4 eb3@4 eb3 d3 eb3@2", S: "[bb2@8 eb3@10 ~@12 a2@23 ~ e2@18 ~@8]/5",
})).s("gm_contrabass").gain(0.72).pan(0.1)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@8 A B A C A D E F ~@2 G H I@2 G J K ~@6 L B A C M D E F A N O P Q@4>".pickRestart({
  A: "c5 bb4", B: "ab4 bb4", C: "c5 bb4 ab4@2 bb4@4", D: "ab4 g4 ab4@2 f4@4", E: "ab4 g4 ab4@2 f4@2 eb4 f4",
  F: "g4 ab4 a4 bb4", G: "[bb4,db5]!4 [c5,e5]!4", H: "[ab4,db5]!4 [ab4,c5]!4", I: "[g4,bb4]!8",
  J: "[db5,f5]!4 [eb5,g5]!4", K: "[eb5,g5]!8", L: "c5@8 bb4@4 eb5 d5 eb5@2", M: "c5 db5 eb5 c5 bb4@4", N: "b4 bb4",
  O: "b4 db5 eb5 b4 bb4 b4 db5 bb4", P: "ab4 bb4 b4 d5 eb5@4",
  Q: "[eb5@2 ~@12 a5@17 ~ ab5@3 [e5,gb5]@3 [b4,e5,ab5]@23 ~@3, ~@14 db5@23 ~@27, ~@7 e5@10 ~@15]/4", // Esus2 E
})).s("gm_string_ensemble_1").gain(0.63).pan(0.7)

// other · shakuhachi · "Combined Tracks"
const shakuhachi = note("<~@2 A B C D E F ~@2 A B C G H F ~@2 I J K ~ L M@2 ~@8 N O P D H F ~@4 Q ~@3>".pickRestart({
  A: "c5 db5@2 eb5@3 c5@2 bb4 c5@2 db5@2 bb4@3", B: "ab4 bb4@2 c5@3 ab4@2 eb4@4 ~@4",
  C: "c5@2 db5 eb5@3 c5@2 bb4 c5@2 db5@2 bb4@3", D: "ab4@2 bb4@2 c5 ab4@2 f4@5 ~@4",
  E: "ab4@2 bb4@2 c5 f5@2 d5@5 ~@2 bb4@2", F: "eb5!4", G: "ab4@2 bb4 c5 ~@2 ab4 f4@5 ~@4",
  H: "ab4 bb4 c5 f5 d5@2 ~ bb4", I: "f5@2 eb5@2 db5@3 f5 e5@2 d5@2 e5 c5@3", J: "f5 db5 c5 ab4",
  K: "g4@2 bb4@5 bb4 bb4@4 ~@4", L: "f5@2 eb5 db5@3 f5@2 e5@2 d5@2 e5 c5@3",
  M: "[f5@2 eb5@2 db5@2 f5@2 eb5@2 f5@2 g5 eb5@7 ~@12]/2", N: "c5 db5 eb5 c5 bb4 c5 db5 bb4",
  O: "ab4 bb4@2 c5@2 ab4@2 eb4@5 ~@4", P: "c5@2 db5 eb5@3 c5@2 bb4@2 c5@2 db5@2 bb4@2", Q: "~@9 ab4 ~ ab4!2 ~@3",
})).s("gm_shakuhachi").gain(0.64).pan(0.6)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@5 B C@7 B D C@13 B C@7 B C@3 E ~@4>".pickRestart({
  A: "~ x ~ x", B: "x", C: "x!16", D: "~@4 x!12", E: "x!5 ~@11",
})).gain(0.25)

// drums · congas
const congas = s("conga:33").struct("<A@2 ~@8 B@5 C ~@16 D B@5 C ~@8>".pickRestart({
  A: "x!5 ~@3", B: "x!16", C: "x", D: "~@5 x!2 ~",
})).gain(0.79)

stack(bass, cello, harpsichord, acoustic_guitar_steel, bass_2, string_ensemble_1, shakuhachi, tambourine, congas)

More by The Beatles