Strudelify

Summertime (From Porgy and Bess)

Gershwin

KeyA minorTempo72 bpm
0:00/0:00
// Summertime (From Porgy and Bess) — Gershwin
// 72 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 46 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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("<~@4 A B@5 C@2 D E F@2 G H@3 I J K L M B@3 N@2 D E F@2 G O@3 P@3 Q@4 ~>".pickRestart({
  A: "~ a2", B: "b2 a2", C: "[b2@11 ~ e2@11 ~ d2@23 f2@16 g2@4 g#2@4 ~ a2@22 ~@2]/2", D: "a2@23 g#2@24 ~",
  E: "b1@23 ~ e2@23 ~", F: "[b2@11 ~ a#2@12 a2@23 b2@24 ~ a2@23 ~]/2", G: "b2@15 ~@9 a2@23 ~",
  H: "[b2@21 ~@3 a2@22 ~ d2@16 ~ f#2@4 d2@4 ~ g2@22 c2@23 ~ d2@24 ~]/3", I: "g2@23 ~ a1@22 ~@2",
  J: "a1@22 ~@2 a1@21 ~@3", K: "a1@20 ~@21 a1@6 ~", L: "a2@17 ~@2 a2@2 ~@3 d2@22 ~@2", M: "d2@5 ~ a2@6",
  N: "[b2@12 e2@8 ~@4 d2@23 f2@16 g2@4 g#2@4 ~ a2@22 ~@2]/2",
  O: "[b2@21 ~@3 a2@23 d2@16 ~ f#2@4 d2@4 ~ g2@22 c2@23 ~ d2@24 ~]/3", P: "[g2@23 ~ a1@47 ~ d2@23 g1@24 ~ c2@23 ~]/3",
  Q: "[f1@24 a#1@23 e1@24 ~ a1@96 ~@24]/4",
})).s("gm_acoustic_bass").gain(0.44)

// chords · trombone
const trombone = note("<~@12 A@3 ~@15 B@4 C D@2 E@8 ~>".pickRestart({
  A: "[~@24 e3@23 d#3@24 e3@6 ~ b3@5 [c#3,c#4]@6 [c3,b3]@6 [b2,c#4]@12 ~ a#2@14 ~@22, ~@24 b2@47 e2@48 ~@25, ~@77 d#3@6 ~@24 d4@13 ~@24]/3", // C# Cmaj7 Bsus2
  B: "[~@24 e3@23 d#3@24 e3@6 ~ b3@5 [c#3,c#4]@6 [c3,b3]@6 [b2,c#4]@12 ~ a#2@12 [a2,f#3]@23 [b2,g#3]@24 [a2,f#3]@24 ~, ~@24 b2@47 e2@48 ~@73, ~@77 d#3@6 ~@24 d4@13 ~@72]/4", // C# Cmaj7 Bsus2 D E D
  C: "[b2,g#3]@23 [a2,f#3]@24 ~", D: "[[b2,g#3]@23 [a2,f#3]@48 ~ c3@24]/2",
  E: "[~@17 a2@6 d3@48 ~ c3@47 d3@48 c3@47 ~ a#2@49 a2@120]/8",
})).s("gm_trombone").gain(0.46).pan(0.6)

// chords · french horn · "FR.HORN"
const french_horn = note("<A@3 ~@7 B@2 C@3 ~@2 D E@3 F@7 G@2 H@6 I@2 J@8>".pickRestart({
  A: "[e4 c4 e4@8 ~@2]/3", B: "[~@24 d3@59 e3@12 ~]/2",
  C: "[f3@11 f#3@12 ~@6 b3@5 ~ e4@5 d#4@5 ~@8 b3@6 f#4@6 f4@6 b3@24 c#4@12 ~ a#3@12 ~@24, ~@23 b3@4 ~@19 d4@7 ~@18 e4@47 ~@26, ~@24 g#3@23 f#3@24 g#3@36 ~@37, ~@48 a3@24 ~@35 d4@12 ~@25]/3",
  D: "~@24 c4@6 d4@6 e4@6 f#4@5 ~", E: "[g#4@11 a4@12 g4@48 f#4@24 f4@24 ~@13 g4@6 f#4@5 ~, ~@5 e4]/3",
  F: "[g4@5 a4@6 ~ f#4@11 ~@25 g#3@23 ~ f#3@24 g#3@23 ~ [f#3,a3]@23 g#3@22 ~@3 [f#3,c4]@23 ~ g#3@23 ~ [f#3,c4]@23 ~ d4@23 [f#3,c4]@24 ~ g#3@23 ~ f#3@23 g#3, ~@23 a3@24 ~@24 a3@24 ~@144 g#3@24 ~@73, ~@24 [c4,e4]@143 ~@24 d4@25 ~@71 d4@24 c4@24 ~]/7", // F#m F#dim C
  G: "[d4@11 ~ e3@11 ~ d3@59 e3@12 ~]/2",
  H: "[f3@11 f#3@12 ~@6 b3@5 ~ e4@5 d#4@5 ~@8 b3@6 f#4@6 f4@6 b3@24 c#4@12 ~ a#3@11 [f#3,c4]@24 ~ d4@23 [f#3,c4]@24 ~ d4@23 ~ [f#3,c4]@23 [g#3,d4]@24 c4@7 ~@6 e4@6 f#4@5 ~, ~@23 b3@4 ~@19 d4@7 ~@18 e4@47 ~@155 c4@13 ~@2, ~@24 g#3@23 f#3@24 g#3@36 ~@36 g#3@24 ~@24 g#3@24 ~@48 f#3@25, ~@48 a3@24 ~@35 d4@12 ~@151 d4@6 ~@12]/6", // F#dim G#dim
  I: "[g#4@11 a4@12 g4@48 f#4@24 f4]/2",
  J: "[~@24 [e3,c4,e4]@46 ~@2 d4@22 ~ f3@24 [e3,e4]@24 d#4@24 ~ d4@22 ~ [g#3,c#4]@25 ~@96 f#4@47 ~@25, ~@70 f#4@24 f4@25 ~@24 f3@47 e3@140 ~@54, ~@71 f#3@24 c4@72 a#3@24 ~@25 [a3,c4]@131 ~@37]/8", // C E C#5 Am
})).s("gm_french_horn").gain(0.25).pan(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A B@8 C@3 D E F@8 ~@2 G@7 E H@8 I@4 J@2>".pickRestart({
  A: "~@42 a5@5 ~",
  B: "[f5@4 d5@3 ~ b4@3 ~ g4@2 ~ e4@2 ~ c4@2 ~ a3@2 ~ f#3@2 ~ g#3@2 ~ f#3@2 ~ g#3@2 f#3@3 g#3@2 ~ f#3@3 g#3@2 f#3@3 g#3@3 f#3@3 g#3@3 f#3@3 ~ g#3@3 f#3@3 g#3@2 ~@2 [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4,e4]@24, ~@24 e4@46 ~@2 e4@47 ~ e4@47 ~ e4@47 ~ e4@47 ~ e4@47 ~ e4@47 ~@25]/8", // F#dim G#dim F#dim G#dim F#dim G#dim F#dim G#dim …
  C: "[[g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ d4@23 ~@24 f4@13 e4@12, ~@24 e4@47 ~ [f3,a3]@72, ~@95 c4@48 ~]/3", // G#dim F#dim G#dim F
  D: "~@12 f#3@11 [e3,g#3,b3,e4]@23 ~@2, [a3,c4,d#4] ~", // E Adim
  E: "~@24 e4@5 [d#3,d#4]@6 [c#3,c#4]@5 ~ [c3,c4]@6 [b2,b3], ~@23 e3@5 ~@20", // D# C# C B
  F: "[~@12 a#3@11 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [a2,e4]@23 ~ d4@22 ~@25 a3@23 ~ [f#3,a3,c4,d4]@24 [f3,a3,c4,d4]@24 [a3,c4,e4]@49 ~@24, ~@11 a#2@11 ~@2 e4@47 ~ e4@47 ~ e4@47 ~ [f#3,a3,c4]@46 ~@2 [c4,e4,g4]@48 ~@120, ~@191 d2@23 ~@170]/8", // F#dim G#dim F#dim G#dim F#dim G#dim A5 D7 …
  G: "[~@24 [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,d4]@23 ~ d4@23 ~@24 f4@13 e4@12 ~@12 f#3@11 [e3,g#3,b3,e4]@23 ~@2, ~@24 e4@47 ~ e4@47 ~ e4@47 ~ e4@47 ~@24 c4@48 ~ [a3,c4,d#4]@24 ~@24, ~@192 b3@11 ~@13 [f3,a3]@73 ~@47]/7", // F#dim G#dim F#dim G#dim F#dim G#dim F#dim G#dim …
  H: "[~@12 a#3@11 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [f#3,a3,c4]@23 ~ [g#3,b3,d4]@23 ~ [a2,e4]@23 ~ d4@22 ~@25 a3@23 ~ [f#3,a3,c4,d4]@23 ~ [f3,a3,c4,d4]@13 ~@12 a3@72, ~@11 a#2@11 ~@2 e4@47 ~ e4@47 ~ e4@47 ~ [f#3,a3,c4]@46 ~@2 [c4,e4,g4]@48 ~@120, ~@191 d2@23 ~@170]/8", // F#dim G#dim F#dim G#dim F#dim G#dim A5 D7 …
  I: "[~@22 g3@25 a3@24 a#3@24 g#3@22 ~@2 a3@71 ~@2]/4",
  J: "[~@12 f#4@23 ~@13, ~@5 a3@11 ~ e4@53 ~@26, ~@11 c4@59 ~@26]/2",
})).s("gm_string_ensemble_1").gain(0.22).pan(0.2)

// other · vibraphone
const vibraphone = note("<~@2 A@8 ~@4 B@4 ~@3 C@7 ~@4 D@4 ~@10>".pickRestart({
  A: "[~@36 [f#3,f#4]@23 ~ [g#3,g#4]@13 ~@11 [f#3,f#4]@24 [g#3,g#4]@12 ~@12 [f#3,f#4]@23 [g#3,g#4]@12 ~@13 f#3@24 [g#3,g#4]@12 ~@12 [f#3,f#4]@24 [g#3,g#4]@11 ~@13 f#4@23 [g#3,g#4]@11 ~@14 [f#3,f#4]@24 [g#3,g#4]@11 ~@25, ~@179 f#4@24 ~@72 f#3@24 ~@85]/8", // F# G# F# G# F# G# F# G# …
  B: "[~@36 [f#3,f#4]@23 [g#3,g#4]@24 ~ [f#3,f#4]@24 [g#3,g#4]@24 [f#3,f#4]@24 [g#3,g#4]@11 ~@25]/4", // F# G# F# G# F# G#
  C: "[~@36 [f#3,f#4]@23 [g#3,g#4]@14 ~@11 [f#3,f#4]@24 [g#3,g#4]@13 ~@11 [f#3,f#4]@24 [g#3,g#4]@11 ~@13 [f#3,f#4]@24 [g#3,g#4]@11 ~@13 [f#3,f#4]@24 [g#3,g#4]@11 ~@13 [f#3,f#4]@24 [g#3,g#4]@11 ~@25]/7", // F# G# F# G# F# G# F# G# …
  D: "[~@35 [f#3,f#4]@24 [g#3,g#4]@24 [f#3,f#4]@25 [g#3,g#4]@14 ~@10 [f#3,f#4]@24 [g#3,g#4]@10 ~@26]/4", // F# G# F# G# F# G#
})).s("gm_vibraphone").gain(0.36).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<~@2 A@2 ~@4 B@8 ~ C@7 ~@2 D@8 ~ E F G H@8>".pickRestart({
  A: "[~@24 c4@43 ~@29]/2",
  B: "[~@24 c4@38 ~@10 c4@37 ~@11 [d2,f3]@15 [d#2,g3]@4 [e2,g#3]@3 ~@17 [g2,a#3]@4 [g#2,b3]@4 f4@24 d#4@24 ~ e4@4 ~@2 b4@5 ~ [e4,e5]@5 [d#4,d#5]@5 ~ [d4,d5]@6 [b3,b4]@6 [f#4,f#5]@5 ~ [f4,f5]@6 [e4,e5]@47 ~@2 c4@43 ~@29, ~@120 c4@23 [f2,a3]@16 ~@8 [a2,c4]@48 b3@4 ~@2 b3@6 ~@157, ~@144 d4@22 ~@49 g#2@21 ~@148]/8", // Dm D# E Gm G#m E D# D …
  C: "[~@24 c4@6 d4@6 e4@5 f#4@5 ~ g#4@11 ~ a4@13 ~@11 d3@11 ~ c3@12 b2@5 ~ a2@5 ~ [d2,f#4]@24 ~ g2@23 ~@12 g4@6 f#4@6 g4@5 ~ a4@5 ~ f#4@12 ~@13 d3@5 c3@6 d3@6 e3@6 c3@12 a2@48 ~@25, ~@143 f4@24 a2@48 e4@48 ~@73]/7", // D
  D: "[~@24 c4@38 ~@10 c4@37 ~@11 [d2,f3]@15 [d#2,g3]@4 [e2,g#3]@3 ~@17 [g2,a#3]@4 [g#2,b3]@4 f4@24 d#4@24 ~ e4@5 ~ b4@6 [e4,e5]@5 [d#4,d#5]@5 ~ [d4,d5]@6 [b3,b4]@6 [f#4,f#5]@5 ~ [f4,f5]@6 [e4,e5]@48 ~ c4@43 ~@29, ~@120 c4@23 [f2,a3]@16 ~@8 [a2,c4]@48 b3@5 ~ b3@6 ~@157, ~@144 d4@22 ~@49 g#2@21 ~@148]/8", // Dm D# E Gm G#m E D# D …
  E: "~@24 c4@6 d4@6 e4@5 f#4@6 g#4", F: "~@11 a4@13 ~@11 d3@11 ~ c3", G: "~@11 b2@5 ~ a2@5 ~ [d2,f#4]@24 f4",
  H: "[g2@23 ~@12 d6@5 ~ c6@6 d6@6 e6@6 c6@6 ~@7 d3@23 g2@23 ~ c3@24 f2@23 ~ a#2@24 e2@24 ~@97 f#4@47 ~@25, ~@23 a2@48 ~@144 a2@143 ~@26, ~@65 a5@294 ~@25]/8",
})).s("gm_string_ensemble_1").gain(0.26).pan(0.9)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<~@2 A@8 ~@4 B@4 ~@6 C@5 ~@3 B@4 ~@10>".pickRestart({
  A: "[~@24 [f#3,a3]@43 ~@5 [f#3,a3,c4]@43 ~@5 [f#3,a3,c4]@41 ~@7 [f#3,a3,c4]@42 ~@6 [f#3,a3,c4]@36 ~@12 [f#3,a3,c4]@36 ~@12 [f#3,a3]@38 ~@10 [f#3,a3]@24]/8", // F#m F#dim F#m
  B: "[~@24 [f#3,a3]@43 ~@5 [f#3,a3,c4]@43 ~@5 [f#3,a3,c4]@41 ~@31]/4", // F#m F#dim
  C: "[~@24 [f#3,a3,c4]@36 ~@12 [f#3,a3,c4]@36 ~@12 [f#3,a3]@38 ~@10 [f#3,a3]@37 ~@35]/5", // F#dim F#m
})).s("gm_string_ensemble_1").gain(0.16).pan(0.9)

// drums · rim
const rim = s("rim").struct("<~@4 [~@3 x] [~ x ~ x]!33 [~ x ~@2] ~@7>").gain(0.25)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@5 A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B@2 ~@7
>`.pickRestart({
  A: "x!2", B: "x",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@4 [~@2 x!2] [x!4]!33 [x!2 ~@2] ~@7>").gain(0.3)

stack(
  bass, trombone, french_horn, string_ensemble_1, vibraphone, string_ensemble_1_2, string_ensemble_1_soft, rim,
  pedal_hat, ride
)

More by Gershwin