Strudelify

The Little House I Used to Live In

Zappa

KeyG majorTempo116 bpm
0:00/0:00
// The Little House I Used to Live In — Zappa
// 116 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/8 at bar 1, 3/4 at bar 5, 5/8 at bar 10, 3/4 at bar 14, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/3)

// 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.

// chords · piano · "klavier"
const piano = note(`<
  A@2 B C D E@4 F G@2 H@7 I J@2 K L M N O P Q R@7 S ~@3 T U@5 V W@8 X@8 Y@4 Z@5 AA AB@3 AC AD@3 AE@2 AF AG@2 AH AI AJ@2
  AK@2 AL@2 AM@2 AN@4
>`.pickRestart({
  A: "[[e4,g4]@5 [b4,d#5]@5 ~ [f#4,a#4,d5]@8 [f4,a4,c#5]@8 [f4,a4,c#5]@5]/2", B: "[e4,a4,c5]@5 [e4,a4,c5]@10 ~",
  C: "[d#4,g4,b4]@5 [d#4,g4,b4]@3 ~ [b4,d5]@3 [d5,a#5]@3 ~", D: "[c#6,f6,a6]",
  E: "[[c#6,f6,a6] ~ [d#6,b6] ~ [g6,d#7] [f6,c#7] ~ [e6,b6] ~ [b5,g6] ~ [a#5,d6,f#6]@10 [a5,c#6,f6]@16 [a5,c#6,f6]@21 ~@4 c5@2]/4", // C#aug G#m Cm C# E5 Em A#aug Aaug
  F: "~@2 g#4@3 [d4,g4]@10 ~", G: "[a4@10 ~ b4@10 [e4,g#4,a#4,d#5]@10 ~]/2",
  H: "[c#5@10 ~ f#5@10 [e4,g#4,a#4,d#5]@16 c#5@16 [f4,g4,b4,c5,d5]@32 [c#4,a#4,c5]@16 [a#3,a4,c5]@10 ~]/7", // Emaj7 G7 F# F
  I: "[a3,g#4,c5]", J: "[[c4,g4,d5]@10 ~ [b3,f#4,d5]@21]/2",
  K: "[b3,f#4,d5] ~ [c4,d4,f4]@3 [d4,a4,a#4]@8 [b3,g#4,b4]@2 ~", L: "[b3,g#4,b4]", M: "[f#5,a#5,a6]",
  N: "[f#5,a#5,a6]@10 ~ [c6,e6,g#6]@5", O: "[b5,d#6,g6]@5 [b5,d#6,g6]@5 ~@6", P: "[a#5,d6,f#6]@5 ~@6 [a5,c#6,f6]@5",
  Q: "~@5 [g#5,c6,e6]@5 ~@6", // G#aug
  R: "[[g5,b5,d#6]@5 ~@6 [f#5,a#5,d6]@16 [f5,a5,c#6]@16 [e4,b4,f#5]@32 [g5,g6]@16 [a5,a6]@16 [a5,c#6,f6]@5]/7", // Gaug F#aug Faug Esus2 G A Aaug
  S: "[g#5,c6,e6]@5 [g#5,c6,e6]@5 ~@6", T: "[f#4,b4]@5 [f4,c5]@5 ~ [f#4,b4]@5",
  U: "[[f4,c5]@5 [f#4,b4]@5 ~ [e4,b4]@5 [f4,a#4]@5 [e4,b4]@5 ~ [f4,a#4]@5 [e4,b4]@5 [f4,a#4]@5 ~ [d4,a4]@5 [c#4,f#4]@5 [d4,a4]@5 ~ [c#4,f#4]@5 [d4,a4]@5 [c#4,f#4]@5 ~ [a#4,d5]@5, ~@11 d#5@32 c#5@32 ~@5]/5", // F5 B5 E5 A#5 E5 A#5 E5 A#5 …
  V: "[a4,c#5]@5 [a4,c#5]@5 ~ [g#4,c5]@5", // A G#
  W: "[[g#4,c5]@5 [g4,b4]@5 ~ [c4,g4]@5 [b3,e4]@5 [c4,g4]@5 ~ [b3,e4]@5 [c4,g4]@5 [b3,e4]@5 ~ [c4,g4]@5 [b3,e4]@5 [c4,g4]@5 ~ [b3,e4]@5 [c4,g4]@5 [b3,e4]@5 ~ [c4,g4]@5 [b3,e4]@5 [c4,g4]@5 ~ [b3,e4]@5 [c4,g4]@5 [b3,e4]@5 ~ [c4,g4]@5 [b3,e4]@5 [c4,g4]@5 ~ [b3,e4]@5, ~@11 b4@32 b5@32 b4@32 b5@21]/8", // G# G C5 E5 C5 E5 C5 E5 …
  X: "[[c4,g4]@5 [b3,e4]@5 ~ [d4,a4]@5 [c4,e4]@5 [d4,a4]@5 ~ [c4,e4]@5 [d4,a4]@5 [c4,e4]@5 ~ [d4,a4]@5 [c4,e4]@5 [d4,a4]@5 ~ [c4,e4]@5 [d4,a4]@5 [c4,e4]@5 ~ [d4,a4]@5 [c4,e4]@5 [d4,a4]@5 ~ [c4,e4]@5 [d4,a4]@5 [c4,e4]@5 ~ [d4,a4]@5 [c4,e4]@5 [d4,a4]@5 ~ [c4,e4]@5, ~@11 b4@32 b5@32 b4@32 b5@21]/8", // C5 E5 D5 C D5 C D5 C …
  Y: "[[d4,a4]@5 [c4,e4]@5 ~ [c#4,g#4]@5 [d4,g4]@5 [c#4,g#4]@5 ~ [d4,g4]@5 [c#4,g#4]@5 [d4,g4]@5 ~ [d#4,f4]@5 [c4,g4]@5 [e4,a4]@5 ~ [d#4,a#4]@5, ~@11 c5@32 d5@21]/4", // D5 C C#5 G5 C#5 G5 C#5 G5 …
  Z: "[d5 e5 d5!2 ~ e5 d5 c5!2 e5 ~ [d#4,a#4]@5 [d4,g4]@5 [d#4,a#4]@5 ~ [d4,g4]@5 [d#4,a#4]@5 [d4,g4]@5 ~ [d#4,a#4]@5 [d4,g4]@5 [d#4,a#4]@5 ~ [d4,g4]@5 [d#4,a#4]@5 [d4,g4]@5 ~ [g#4,f5,g5]@5, [f4,a4]@5 ~@6 d5@32 d6@32 ~@5]/5", // D#5 G5 D#5 G5 D#5 G5 D#5 G5 …
  AA: "[g4,d5,a5]@5 [g#4,f5,g5]@5 ~ [g4,d5,a5]@5", AB: "[[g#4,f5,g5]@5 [d4,c#5,e5]@21 ~ [b4,f#5,a#5,c#6]@11 ~@10]/3",
  AC: "g#4@11 [g5,b5]@5", AD: "[[c5,c#5,f5]@5 [d#4,f4,f#4]@5 ~ d4@10 [c#5,f5]@5 ~ [c#5,f5]@16 [c#5,f5]@3 [e5,g5]@2]/3",
  AE: "[~@2 [b5,d#6]@3 [f#5,a#5,d6]@8 [f5,a5,c#6]@8 [f5,a5,c#6]@5 ~ [e5,g#5,c6]@5]/2", // B F#aug Faug Eaug
  AF: "[e5,g#5,c6]@11 [d#5,g5,b5]@5", // Eaug D#aug
  AG: "[[d#5,g5,b5]@4 [b3,d4]@3 [d4,a#4]@4 [f4,c#5,a5]@16 [d#4,b4] ~ [g4,d#5] ~ [f4,c#5]]/2", // D#aug Bm Gm Faug G#m Cm C#
  AH: "~ [e4,b4] ~@2 [b3,g4] [d4,a#4,f#5]@11", AI: "[a4,c#5,f5]", AJ: "[~@18 c6@7 g#5@7, [g#4,c5,e5]@31 ~]/2",
  AK: "[g5@11 a5@10 b5@11]/2", AL: "[d#6@11 c#6@10 f#6@11]/2", AM: "[d#6@11 c#6@21]/2", AN: "[f5,g5,b5,c6,d6]/4",
})).s("gm_piano").gain(0.31)

// chords · piano · "klavier" · soft notes
const piano_soft = note("<~@26 A B C D ~@7 E@2 F@3 ~@33 G ~@23>".pickRestart({
  A: "~@11 [a#5,d6,f#6]@5", B: "~@5 [a5,c#6,f6]@5 ~@6", C: "[g#5,c6,e6]@5 ~@6 [g5,b5,d#6]@5",
  D: "~@5 [f#5,a#5,d6]@5 ~@6", E: "f5 g5 f5 g5 [f5,g5] f5 g5 f5 g5 f5 g5 f5 [f5,g5] g5 f5 g5",
  F: "[f5 g5 f5 g5 [f5,g5] f5 g5 f5 g5 f5 ~ [f4,c5]@5 ~@32, ~@11 e5@32 ~@5]/3", G: "~@5 [g5,b5]@5 ~ [a4,c5]@5",
})).s("gm_piano").gain(0.15)

// chords · piano · "klavier"
const piano_2 = note(`<
  A@2 B C D E@4 F@8 G@2 H I@2 J K L M N O P Q@3 R S T U V W X Y@7 Z AA@8 AB@8 AC@4 AD@6 AE AF@2 AG AH@3 AI@2 AJ AK@3 AL
  AM@2 AN@2 AO@4 AP@4
>`.pickRestart({
  A: "[~@11 [e3,g#3,c4]@8 [f#3,a#3,d4]@8 [d#3,g3,b3]@5]/2", B: "[f3,a3,c#4]@5 [d3,f#3,a#3]@10 ~",
  C: "[e3,g#3,c4]@5 ~@11", D: "[d5,f#5,a#5]",
  E: "[[d5,f#5,a#5]@4 [c5,e5,g#5]@5 ~@2 [g#4,c5,e5]@10 [a#4,d5,f#5]@16 [b4,d5,f5]@21 ~@6]/4", // Daug Caug G#aug A#aug Bdim
  F: "[~@5 [g3,a3,c4]@29 ~@3 [c#3,f#3,b3]@29 ~@3 [c#3,f#3,b3]@29 ~@25 e2@5, ~@5 c3@31 ~@65 [g3,g#3,c#4,d4]@24 ~@3]/8", // Am7 F#sus4
  G: "[~@5 d#3@8 g#2@8 g3@2 e4@2 f#3@2 ~ f3@2 d3@2, ~@27 e4@2 ~@3]/2", H: "d#3@8 b2@7 ~",
  I: "[b2@4 a#2@3 f3@4 e3@8 a2@8 ~@5]/2", J: "a#1@4 ~ g2@4 f#3@3 e3@4, ~@2 d#3 ~@5", K: "e3 d#4", L: "[c#3,c4,g4]",
  M: "~@4 f2@3 e3@4 [a#4,d5,f#5]@5, [c#3,c4,g4]@5 ~@3", N: "~@5 [a4,c#5,f5]@5 ~@6",
  O: "[g#4,c5,e5]@5 ~@6 [g4,b4,d#5]@5", P: "[a4,c#5,f5]@5 [f#4,a#4,d5]@5 ~@6",
  Q: "[[f4,a4,c#5]@5 ~@6 [e4,g#4,c5]@16 [f#4,a#4,d5]@16 [c3,g3,d4]@5]/3", R: "~@5 [c3,g3,d4]@5 ~@6",
  S: "[d3,g3,b3]@5 ~@6 [d#4,a#4,f5]@5", T: "~@5 [d#4,a#4,f5]@5 ~@6", U: "[f4,d5,e5]@5 ~@6 [g4,b4,d#5]@5",
  V: "~@5 [f#4,a#4,d5]@5 ~ g#3@5", W: "[c#4,a#4,c5]@5 ~@11", X: "~@5 [a#3,g4,a4]@5 ~@6",
  Y: "[[g#3,f4,g4]@5 ~@6 a#3@5 ~@5 a#3@5 ~ c#4@5 a#3@5 c#4@5 ~ a3@5 c4@5 a3@5 ~ c4@5 a3@5 c4@5 ~ g3@5 a3@5 g3@5 ~ a3@5 g3@5 a3@5 ~ b3@5, ~@11 d3@32 c2@32 c3@32 ~@5]/7", // C#
  Z: "d4@5 d#3@5 ~ g3@5",
  AA: "[c#3@5 g#3@5 ~ f3@5 g3@5 f3@5 ~ g3@5 f3@5 g3@5 ~ f3@5 g3@5 f3@5 ~ g3@5 f3@5 g3@5 ~ f3@5 g3@5 f3@5 ~ g3@5 f3@5 g3@5 ~ f3@5 g3@5 f3@5 ~ g3@5, ~@11 g#2@32 g#2@32 a2@32 a2@21]/8",
  AB: "[f3@5 g3@5 ~ f#3@5 g3@5 f#3@5 ~ g3@5 f#3@5 g3@5 ~ f#3@5 g3@5 f#3@5 ~ g3@5 f#3@5 g3@5 ~ f#3@5 g3@5 f#3@5 ~ g3@5 f#3@5 g3@5 ~ f#3@5 g3@5 f#3@5 ~ g3@5, ~@11 a2@32 a2@32 d2@32 d2@21]/8",
  AC: "[f#3@5 g3@5 ~ f#3@5 a3@5 f#3@5 ~ a3@5 f#3@5 a3@5 ~ g#3@5 f3@5 b3@5 ~ a3@5, ~@11 a#2@32 a#2@10 f#2@11]/4",
  AD: "[[d3,a#3]@11 g#3@5 b3@5 g#3@5 ~ b3@5 g#3@5 b3@5 ~ g#3@5 b3@5 g#3@5 ~ b3@5 g#3@5 b3@5 ~ a#3@5 c#4@5 a#3@5 ~ c#4@5, ~@11 c3@32 [c3,d5]@32 c3@21]/6", // Gm Csus2
  AE: "[c3,a#3]@5 [g2,a3]@9 ~@2", AF: "[a3 ~ a3 g3 ~ f#2 ~ e3 d#3@2 ~ c3@2 a#3@8 d4@5 ~ a#3@5, ~@8 d4@5 ~@19]/2",
  AG: "~@11 f4@5, c4@11 ~@5, ~@5 a2@11",
  AH: "[e4@5 b3@5 ~@11 d4@5 ~ [e2,d4]@16 ~@5, ~@11 c#4@11 ~@26, ~@8 e2@5 ~@11]/3", // E7
  AI: "[~@5 [e4,g#4,c5]@8 [f#4,a#4,d5]@8 [d#4,g4,b4]@5 ~ [f4,a4,c#5]@5]/2", AJ: "[c#4,f4,a4]@11 [e2,c3,g#3]@5",
  AK: "[[e2,c3,g#3]@11 [d3,f#3,a#3]@16 [e2,c3,g#3]@10 [e3,g#3,b3]@11]/3", AL: "[f#2,d3,a#3]", AM: "[[g2,d3,b3]@31 ~]/2",
  AN: "[[g3,a3,c4,d4]@31 ~]/2", AO: "[[b3,e4,g#4,a#4]@31 ~]/2", AP: "[g4,g#4,c#5,d5]/4",
})).s("gm_piano").gain(0.31)

// chords · piano · "klavier" · soft notes
const piano_soft_2 = note("<~@26 A B C D ~@2 E F G H I J K L M ~@58>".pickRestart({
  A: "[c5,e5,g#5]@5 ~@6 [b4,d#5,g5]@5", B: "~@5 [a#4,d5,f#5]@5 ~@6", C: "~@11 [g#4,c5,d#5]@5",
  D: "~@5 [f#4,a#4,d#5]@5 ~@6", E: "[d3,f#3,b3]@5 ~@6 [c#3,a3,e4]@5", F: "~@5 [c3,a3,e4]@5 ~@6",
  G: "[f4,a4,d5]@5 ~@6 [e4,c#5,f#5]@5", H: "~@5 [e4,c5,f5]@5 ~@6", I: "[a4,c#5,f5]@5 ~@11",
  J: "~@5 [c4,a4,d5]@5 ~ [c4,a4,b4]@5", K: "[b3,g4,c#5]@5 ~@6 [a3,f#4,b4]@5", L: "~@5 [g3,e4,a4]@5 ~@6",
  M: "c#4@5 ~@11",
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft, piano_2, piano_soft_2)

More by Zappa