Strudelify

Porgy and Bess: I Got Plenty of Nothing

Gershwin

KeyG majorTempo128 bpm
0:00/0:00
// Porgy and Bess: I Got Plenty of Nothing — Gershwin
// 128 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 51 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U@2 V W X@2 Y X Z AA AB AC AD AE AF@5 AG AH@4 AI@2 AJ@5
>`.pickRestart({
  A: "~@6 d2@3 ~@3 g1@2 ~@4 d2@2 ~@4", B: "g1@2 ~@4 d2@2 ~@4 g1@3 ~@3 d2@3 ~@3", C: "g1@3 ~@3 d2@2 ~@16",
  D: "g1@2 ~@4 d2@2 ~@4 g1@3 ~@9", E: "g1@3 ~@3 d2@2 ~@4 g1@3 ~@3 e2@3 ~@3", F: "g1 ~ d2 ~ g1 ~ e2 ~",
  G: "~@3 d2 ~@5 e2 ~@2", H: "g1@3 ~@3 d2@3 ~@3 b1@11 ~", I: "e1@7 ~@5 a1@6 ~@6", J: "e1@6 ~@6 a1@7 ~@5",
  K: "e1 ~ a1 ~", L: "c#2@4 ~@2 g#1@3 ~@3", M: "c#2 ~ d2 ~", N: "g1@2 ~@2 a1@3 ~", O: "b1@9 ~@3 a1@10 ~@2",
  P: "g1@8 ~@4 a1@9 ~@3", Q: "g1@9 ~@3 b1@10 ~@2", R: "~@3 e1@2 ~@4 e1@2 ~ a1@11 ~", S: "~@3 e1@3 ~@3 e1@2 ~ a1@10 ~@2",
  T: "e1@8 ~@4 a1@5 ~ e1@5 ~", U: "[c#1@36 d1@11 ~]/2", V: "g1@8 ~@4 g1@7 ~@5", W: "g1@7 ~@5 a#1@11 ~", X: "b1 b2",
  Y: "b1 ~", Z: "b1@4 b2@3 f#2", AA: "~ b2", AB: "b1@11 ~ c2@12", AC: "d2 e2", AD: "d2@11 ~ d2@10 ~@2",
  AE: "d2@4 ~@2 c2@4 ~@3 b1@4 ~@3 a1@4",
  AF: "[~@4 g1@11 g2@12 ~ g1@11 g2@6 ~ d2@5 g1@12 ~ g2@12 g1@8 ~ g1 ~ b1@12 e2@7 ~@3 g#1@3 a1@6 ~@2, ~@43 a1 ~@16]/5",
  AG: "c#2@3 e2@7 ~@2 g#1@3 ~ a1@6 ~@2",
  AH: "[~ c#2@3 e2@6 ~@2 g#1@3 a1@6 b1@6 ~ c#2@34 ~@2 d2@11 g1@6 ~@7 g2@6 ~@2]/4",
  AI: "[~@3 g1@6 ~@6 d2@12 g1@7 ~@6 g2@6 ~@2]/2",
  AJ: "[~@4 g1@7 ~@5 c2@11 g1@12 ~ a#1@12 d#2@11 g#1@12 ~ g1@30 ~@5 g1@6 ~@3]/5",
})).s("gm_acoustic_bass").gain(0.3)

// bass · acoustic bass · "ACOU BASS" · soft notes
const bass_soft = note("<A ~ B ~@3 C ~@19 D ~@2 E ~@21>".pickRestart({
  A: "g1 ~@7", B: "~@6 g1 ~@2 d2 ~@2", C: "g1 ~@3 g1 ~@3", D: "~ b2", E: "b1 ~",
})).s("gm_acoustic_bass").gain(0.2)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I J K L@2 M N O P Q R S T@2 U@2 V W X@2 Y@2 Z AA AB AC@6 AD AE@7 AF@4
>`.pickRestart({
  A: "~@3 [a3,b3,d4] ~@5 [c4,e4] ~@2", B: "~@2 [b3,f#4] ~@3 [c4,e4] ~", C: "~@3 [b3,d4] ~@5 [c4,e4] ~@2, ~@6 a3 ~@17",
  D: "~@3 [b3,f#4] ~@2 [c4,e4] ~@2 d4 ~@2", E: "g4@2 ~@4 [b3,g4]@2 ~@4 a4@4 ~@2 [c4,g4]@2 ~ a4 ~@2",
  F: "b4@3 d5@11 ~@4 [c4,d4]@3 ~@3, d4@5 ~@3", G: "[d4,b4]@3 ~@3 [d4,b4] ~@2 a4@5 ~ b4@3 a4@5 ~, ~@9 c4@14 ~",
  H: "g4@6 [b3,d4]@5 ~ [a3,d#4,f#4]@11 ~", I: "e4@3 ~@3 [g#3,e4]@3 ~@3 [a3,c#4]@11 ~",
  J: "e4@3 ~@3 [g#3,e4]@2 ~@4 [a3,c#4]@8 ~ c#4@2 ~", K: "e4@4 ~@2 [g#3,e4]@5 ~ c#4@6 [g#3,e4]@2 ~@4",
  L: "[~@6 [g#3,c#4]@6 ~@6 c#4@2 ~ [g#3,c#4] ~@8 [g#3,c#4]@3 ~@9 [a3,d4]@4 ~@2, f4@34 ~@2 f#4@9 ~@3, ~@18 g#3 ~@29]/2", // C#5 D5
  M: "g4@4 ~@2 g4@3 ~@3 a4@6 g4@2 ~ a4 ~@2, b3@3 ~ c4@3 ~", N: "b4 d5@6 ~, d4@11 ~",
  O: "[d4,b4]@3 ~@3 [d4,b4] ~@2 a4@6 b4@3 a4@3 ~@3, ~@9 c4@11 ~@4", P: "[b3,g4]@5 ~ [a3,d#4,f#4]@4 ~@2",
  Q: "[g#3,b3,e4]@2 ~@4 [g#3,b3,e4]@2 ~@4 [a3,c#4]@8 ~ c#4 ~@2", // E A
  R: "[g#3,b3,e4]@2 ~@4 [g#3,b3,e4]@2 ~@4 [a3,c#4]@8 ~ c#4@2 ~", // E A
  S: "e4@4 ~@2 e4@5 ~ c#4@6 [g#3,b3,e4]@3 ~@3, [g#3,b3]@10 ~@2 a3@3 ~@9", // E G#m
  T: "[f4@3 ~@5 f5@4 [f#4,a4,f#5]@4, ~@3 f3@4 g#4@5 ~@4, ~ g#3@2 ~, ~@5 c#4@7 ~@4, ~@3 f4@3 ~@2]/2", // F#m
  U: "[~@2 [b4,d5] ~@3 [c5,e5] ~@3 [b4,d5] ~ c#5 d5 e5 c#5, g4@35 ~@13, g5@11 ~@5]/2", // Bm C Bm
  V: "f#5@6 d5@3 b4@3 d5@5 ~ b4@3 d5@3", W: "f#5@4 e5 f#5 e5 b4", X: "[d5@10 ~@2 e5 f#5 e5 b4]/2",
  Y: "[d5@2 b4 d5 f#5@8 e5 f#5 e5 b4]/2", Z: "d5@2 b4 d5 e5@2 c5 e5", AA: "f#5@2 d5 f#5 g5@2 e5 g5",
  AB: "a5@2 f#5 a5 [e5,a5,c6] ~ d4 e4", // Am
  AC: "[f#4@3 g4@3 a4@3 b4@3 ~ c5@3 d5@4 e5@3 ~ f#5@4 g5@6 g5@6 ~@9 a5@3 b5@3 ~@15 d5@6 [d5,b5]@6 [d5,b5]@3 ~@9 a5@6 [b4,d5,g5]@12 [a4,d#5,f#5]@11 ~@4 g#4@3 b4@3 e5@3 c#5@8, ~@20 c5@6 ~@2 b4@12 c5@12 d5@18 ~@15 c5@15 ~@24 e5@5 ~@15, ~@40 a5@9 ~@6 d6@21 ~@15 b5@9 ~@44, ~@46 g5@6 ~@33 a5@9 ~@50]/6", // G D#dim
  AD: "~ c#5@3 e5@3 b4@3 c#5@3 e5@3 g5@3 f#5@3 e5@2",
  AE: "[~ c#5@2 ~ e5@5 ~ e5@6 c#5@6 e5@6 c#5@6 ~@24 g#3@6 f#3@12 ~@6 [b3,d4]@2 ~@10 [c4,e4] ~@2 [c4,e4]@2 ~@7 [b3,d4]@3 ~@3 [a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 ~@8 [b3,d4]@2 ~@10 [c4,e4] ~@2 [c4,e4] ~@8 [b3,d4]@2 ~@4 e4@3 ~@3 e4@2, ~@28 f5@24 c#4@12 ~@12 g3@33 ~@51 [g3,c4]@8, ~@17 c#5@15 ~@52, ~@10 g#4@6 ~@15 g4@8 ~@3, ~@23 f4@9 ~@52]/7", // Bm C Bm F Bm C Bm C5
  AF: "[~@4 g4@3 ~@3 g4@6 a4@5 ~@4 a4@3 a#4@5 ~ a#4@6 c5@6 ~@3 c5@3 [g4,b4,d5]@28 ~@8 [b4,d5,g5]@6 ~@2, ~@2 [b3,d4]@6 d4@4 ~@11 a#4@3 ~@22, ~@11 g4@3 f4@6 g4@6 ~@22]/4", // G Bm
})).s("gm_piano").gain(0.35)

// drums · kick
const kick = s("bd").struct("<A@17 B@2 A C D A@2 ~ E C E C E A@3 F G@3 H G I@3 J H@6 G K>".pickRestart({
  A: "x!2", B: "~ x ~ x ~@4", C: "x", D: "~ x", E: "~@7 x", F: "~@6 x ~@6 x ~@6 x ~@3", G: "~ x ~@4", H: "~ x ~@2 x ~",
  I: "~ x ~@2 x ~@19", J: "~@2 x", K: "~@5 x ~@2 x ~@3",
})).gain(0.35)

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

// drums · hihat
const hihat = s("hh").struct("<A B A C A D B E A D A B F ~@7 G E ~@29>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~ x!3 ~@3", D: "x ~ x!3 ~ x ~", E: "x!2 ~@2", F: "x!3 ~", G: "~ x!3",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~ x] ~@4 [~@3 x] ~@38>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@17 A@2 ~@2 B C ~@10 D E F E F ~@3 F G F ~@3 E@2 F G>".pickRestart({
  A: "~ x ~ x ~@4", B: "~ x", C: "x", D: "~@5 x", E: "~ x ~@2 x ~", F: "~ x ~@4", G: "~@2 x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  ~@13 A@2 B A C@2 A D ~ E F G H G A H I D A@2 J ~ K ~ L M N O ~@2 K N P N ~@2 Q R
>`.pickRestart({
  A: "x!2", B: "x!4", C: "~ x", D: "x", E: "~ x!3", F: "x ~ x ~ x ~ x!2", G: "x!3 ~", H: "x ~@3 x ~@2 x",
  I: "x ~ x ~ x ~@2 x", J: "x ~@5 x ~@6 x ~@10", K: "~@5 x ~@2 x ~@2 x", L: "~@5 x ~@2 x ~@3",
  M: "~@2 x ~@2 x ~@2 x ~@3", N: "~ x ~@2 x ~@5 x ~@5 x ~@5 x ~", O: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@5 x ~",
  P: "~@2 x ~@2 x ~@2 x ~@2 x", Q: "~@10 x ~@2 x ~@2 x ~@2 x ~@2 x ~", R: "~ x ~@2 x ~@19",
})).gain(0.35)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@13 A@2 ~ A ~@7 B A C D ~@2 E ~@5 F ~@14>".pickRestart({
  A: "~ x ~@2", B: "~@7 x", C: "~@3 x ~@3 x", D: "~@2 x!2 ~@3 x", E: "~ x", F: "~ x ~@22",
})).gain(0.2)

stack(bass, bass_soft, piano, kick, snare, hihat, open_hat, crash, ride, ride_soft)

More by Gershwin