Strudelify

By Strauss

Gershwin

KeyG majorTempo111 bpm
0:00/0:00
// By Strauss — Gershwin
// 111 bpm, 3/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 76 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(111/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E B F G H I J K L M N O P@2 Q@2 R@7 S@7 T@2 U@8 V W X Y Z@4 AA AB AC AD AE AF AG@4 AH AI AJ@6 AK@5
>`.pickRestart({
  A: "g1@16 d2@7 ~", B: "c2@15 ~ c2@8", C: "f1@2 c2", D: "f2 ~@2", E: "g1@15 ~ d2@7 ~", F: "f2@15 ~ c2@8", G: "f1",
  H: "e2@17 ~@7", I: "c#2@2 ~", J: "d2@2 ~", K: "g1@8 d2@7 ~ a#2@8", L: "d2", M: "g1", N: "d2@2 g1 a1 a#1 b1",
  O: "~ c2@6 ~@17", P: "[~@3 g1@15 ~ d2@8 c2@15 ~ c2@5]/2", Q: "[~@3 f1@16 c2@8 f2@9 ~@12]/2",
  R: "[~@3 g1@15 ~ d2@8 c2@15 ~ c2@8 f1@15 ~ c2@8 d2@15 ~ d#2@8 d2@24 c#2@15 ~ c#2@8 c2@21]/7",
  S: "[~@3 d2@8 ~@10 g#1@8 ~ g1@24 c2@23 ~ f1@24 ~@8 d#2@7 ~ d2@9 g1@16 d2@6 ~@2 c2@14 ~@2 c2]/7",
  T: "[~@7 f1@16 c2@8 f#2@8 ~@9]/2",
  U: "[~@7 a1@24 d2@14 ~@2 d2@8 g1@24 d2@14 ~@2 d2@8 a1@24 d2@14 ~@2 d2@8 g1@24 d2@14 ~@2 d2]/8", V: "~@7 e2@17",
  W: "~@3 e2@4 d#2@17", X: "~@3 d#2@4 d2@17", Y: "~@3 d2@4 c2@17", Z: "[~@3 c2@4 e2@24 c#2@23 ~ d#2@25 d2@8 ~@8]/4",
  AA: "~@8 a1@15 ~", AB: "~ a1@7 d2@16", AC: "~ d2 g1@4", AD: "~@4 g1@4 ~ d2@15", AE: "~@5 d2@4 a1@15", AF: "~ a1 d2@4",
  AG: "[~@4 d2@4 ~ g1@24 f2@23 ~ e2@23 d#2@13 ~@3]/4", AH: "d#2 d2@2", AI: "~ f2@9 e2@9 ~@5",
  AJ: "[~@13 a1@17 ~@3 a1@4 d2@16 ~@4 d2@4 ~ g1@24 e2@17 ~@2 e2@4 a1@24 ~ d2@10]/6",
  AK: "[~@6 d2@10 g1@25 c#2@24 c2@23 ~@3 g2@11 g1@14 ~@4]/5",
})).s("gm_acoustic_bass").gain(0.25)

// chords · piano · "A.PIANO 1"
const piano = note("<~ A B C@2 D E F G H I J A K L M N O@4 P@5 Q@7 R@4 S@7 T U@8 V@4 W@7 X Y@4 Z@5 AA@2>".pickRestart({
  A: "~@2 a#3, g2, ~ d3@2", B: "~ g3 a#3, c3", C: "[~@3 f3 ~@2, f2@8 a3@7 ~@9, ~ c3@2 ~@3]/2",
  D: "~@2 a#3, g2, ~@7 d3@17", E: "~@2 a#3, c3, ~ e3@2", F: "f3 c3 d3", G: "e3 g3 f3",
  H: "~@8 [g#3,d4]@9 ~@7, e3@17 ~@7", I: "~@8 [g3,a3]@9 ~@7, c#3@17 ~@7", J: "~@8 [a3,c4]@9 ~@7, d3@17 ~@7",
  K: "[d3,f3]", L: "[g2,f3]", M: "d3@2 c#3, f3", N: "~ [c3,g3]@7 ~@16",
  O: "[~@19 a#3@8 ~@16 a#3@8 ~@24 f3@8 ~@13, ~@3 g2@24 c3@24 f2@25 ~@20, ~@11 d3@17 ~@7 g3@17 ~@7 c3@17 ~@20, ~@67 a3@16 ~@13]/4",
  P: "[~@43 a#3@8 ~@16 e3@8 d3@16 [d#3,c4]@8 ~@8 a#3@13, ~@3 g2@24 c3@25 ~@7 c3@17 ~@23 d3@21, ~@11 d3@17 ~@7 e3@17 ~@68, ~@19 a#3@24 ~@8 f2@25 ~@44]/5", // Cm
  Q: "[~@11 g#3@8 a#3@8 ~@8 g3@8 ~@8 d3@9 ~@9 [g#2,f3]@8 ~@17 a#3@8 ~@8 e3@8 a#3@8 ~@16 a3@8 f3@7 ~ d#3@8 d3@2, ~@3 c#3@24 c3@24 f#3 ~@34 d3@16 c3@17 ~@15 c3@17 ~@17, ~@43 f3@12 ~@23 g2@24 ~@24 f2@25 ~@17]/7", // C#
  R: "[~@23 a#3@8 ~@16 a#3@8 ~@16 f3@8 f#3@8 ~@9, ~@7 g2@24 c3@24 f2@25 ~@16, ~@15 d3@17 ~@7 g3@17 ~@7 c3@18 ~@15]/4",
  S: "[~@15 e4@8 [e4,g4]@8 ~@8 [c4,d4]@8 [c4,d4]@8 g3@4 a3@4 b3@4 c4@4 d4@4 e4@4 f#4@8 e4@8 d4@8 ~@8 [e4,g4]@8 [e4,g4]@8 ~@8 [d4,f#4]@8 [d4,f#4]@8 g3@4 a3@4 b3@4 c4@4 d4, ~@7 a3@25 ~@71 a3@24 a3@26 ~@15, ~@14 g4@8 ~@9 f#3@25 ~@112]/7", // Em Csus2 Em D
  T: "~@3 e4@4 d4@7 ~ g3@8 f#3",
  U: "[~@15 a#3@8 c#4@8 ~@16 b3@8 ~@8 g#3@8 b3@8 ~@8 e3@8 a3@8 ~@8 g3@8 b3@8 ~@16 a3@8 ~@16 c#4@9 [d3,c4]@9 ~@7, ~@6 e3@25 d#3@25 ~@23 c3@17 ~@31 c#3@24 d#3@26 ~@15, ~@38 a3@17 d3@25 ~@23 e3@25 ~@7 g3@17 ~@7 g3@18 ~@15]/8", // D7
  V: "[~@16 [e3,a3,c4]@8 ~ [e3,c4]@7 ~@8 [f#3,c4]@8 [f#3,c4]@8 ~@8 [b3,d4]@8 [b3,d4]@8 ~@8 [b3,d4]@8, ~@8 a2@25 ~@23 g3@24 f#3@16, ~@24 a3@8 d3@25 ~@39]/4", // Am C F#dim Bm
  W: "[[f3,g#3,d4]@8 ~@8 [a3,c4]@8 ~ a3@8 ~@8 [f#3,c4]@7 [f#3,c4]@8 ~@8 [b3,d4]@8 ~ d4@7 ~@8 [b3,d4]@8 [b3,d4]@8 ~@8 [g3,c4]@8 ~ c4@7 ~@8 [g3,c#4]@8 ~ [g3,c#4]@7 d3@16, ~@8 e3@24 ~ d3@24 ~@15 b3@8 f3@24 e3@25 ~@39, ~@24 c4@8 ~@24 g3@25 ~@39 g3@8 d#3@25 ~@15]/7", // Ddim Am F#dim Bm C5 Gdim
  X: "~ [f3,a3]@9 [e3,b3]@10 ~@4", // F E5
  Y: "[~@29 g3@9 ~@16 c4@8 g2@7 d3@8 e3@8 f#3@8 f3@3, ~@13 a2@25 ~@7 f#3@17 ~@34, ~@21 e3@17 d3@25 ~@33]/4",
  Z: "[~@6 e3@8 ~@7 e3@8 g3@8 ~@9 d3@18 ~@8 d3@17 ~@8 g3@16 c3@7, ~@5 g#3@8 ~ a2@17 ~@7 d2@26 g2@25 c#3@24 ~@7]/5",
  AA: "[~@9 a2@9 ~ g2@11 ~ g1@12 ~@5, ~ g3@18 ~@29]/2",
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B C D E F@2 G@2 H I J K L M N@8 O@6 P@8 Q@8 R@8 S T U@2 V W X@2 Y Z AA@2 AB@4 AC@3 AD AE AF@2
>`.pickRestart({
  A: "~@2 c4 d4 e4 g4", B: "f4 e4 d4@4", C: "~@2 d4 e4 f4 a4", D: "~@16 c5@7 ~, [e4,g4]@11 ~",
  E: "[e5,g5]@7 ~ f4@4 g4@4 a4@4 c5@4", F: "[a#4 a4 g4@8 [g#4,d5]@2]/2", G: "[[f4,a4,d5]@5 [a4,e5]]/2",
  H: "[g#4,e5]@15 ~ a4@8", I: "[g4,a4]@2 d5", J: "[f#4,d5]@3 a#4 a4@2", K: "g4", L: "g4@8 a4@7 ~ g4@8, [c4,e4]@23 ~",
  M: "a4 g4 a4, b3",
  N: "[d4@15 ~ d#4@9 e4@5 ~@5 c4@4 d4@4 e4@4 g4@4 f4@4 g4@4 e4@4 f4@4 d4@16 d4@4 e4@4 f4@4 a4@4 ~@16 e4@8 d4@8 f4@4 g4@4 a4@4 c5@4 a#4@4 a4@4 g4@32 [g#4,d5]@5, [a#3,g4]@29 ~@70 g4@32 ~@61]/8", // G#dim D#
  O: "[~@3 a4@16 g4@8 f4@16 [a4,f5]@8 [a#4,f5]@15 ~ f4@8 f4@16 g4@8 a4@8 a#4@8 a4@8 [e4,c5]@6 ~@2 c4@5 d4@4 e4@4, ~@3 d5@40 ~@56 f4@18 ~@27]/6", // Dm A#5 C
  P: "[~ g4@5 f4@4 e4@4 d4@17 ~@15 [g#4,c5]@8 g4@7 ~ f4@8 e4@7 ~ d4@4 ~@4 f4@4 g4@4 ~@4 c5@5 a#4@4 a4@4 g4@31 ~ [g4,d5,f5]@8 f5@24 d5@5 ~@3 d5@4 e5@4 f#5, ~@54 c5@28 ~@12 [f#4,a4]@7 ~@50 [a4,c5]@29 ~@12]/8", // G# G7 F#m Am
  Q: "[~@3 a5@4 [e5,g5]@4 f#5@4 [c5,e5]@21 ~@3 e5@4 f#5@4 g5@4 b5@4 [f#5,a5]@31 ~ g5@4 a5@4 b5@4 d6@4 [e5,c6]@7 ~ [d5,b5]@8 [c5,a5]@14 ~@2 a5@4 b5@4 ~@4 e6@4 [g5,b5,e6]@25 ~@7 b4@4 c5@4 d5, ~@11 d5@2 ~@130 c6@8 ~@41]/8", // Em C F#m C G F Em
  R: "[~@3 e5@4 f#5@4 f#4@4 ~@4 f#4@4 ~@4 f#4@4 b4@4 ~@8 f#4@4 ~@4 f#4@3 ~ e5@4 e4@4 ~@4 e4@4 ~@4 e4@4 ~@4 e4@4 ~@4 e4@4 ~@4 e4@4 a4@8 b4@8 a4@8 b4@8 a4@8 b4@7 ~ f4@25 f#4@7 ~ d5@4 e5@4, ~@15 c#5@7 ~ f#5@7 ~@5 f#4@8 ~@4 b4@7 ~@9 c5@7 ~ b4@7 ~ a4@7 ~@9 a4@8 d4@24 e4@24 a4@33 ~@8, ~@39 f#5@7 ~@41 e5@8 ~@97]/8",
  S: "f#5 a5 [e5,g5]@2 [d5,f#5]@2", T: "[c5,e5]@4 e5 f#5", U: "[g5@4 b5@4 ~ a5@28 ~@3 g5@4 a5@4, ~@8 f#5@27 ~@13]/2",
  V: "b5@4 d6@4 [a5,c6]@9 [g5,b5]@7", W: "~ [f#5,a5]@16 a5@3 b5@4",
  X: "[c6@4 e6@3 ~@2 [g5,b5]@19 ~@5 a4@3 b4@4 c5@4 d5@4, ~@4 e6@9 ~@11]/2", Y: "e5 f5 g5@4", Z: "~ g4@7 g4@16",
  AA: "[a4@8 b4@8 c5@8 ~ b4@9 [g#4,d5]@8 ~ d4@5, ~@8 g4@25 ~@15]/2", // G#dim
  AB: "[e4@4 f#4@5 a4@4 [e4,g4]@4 f#4@4 ~ [c4,e4]@31 [a#4,d5]@8 [b4,d5]@31 ~ g4@3, ~@17 d4@2 ~@77]/4", // Em C A# Bm
  AC: "[~ a4@4 b4@4 d5@4 [e4,c5]@8 [d4,b4]@8 [c4,a4]@26 [c5,e5,g5]@8 ~ [b4,d5,g5]@8]/3", // C G F C G
  AD: "d4@4 e4@4 f#4@4 a4@5 g4@4 f#4@3", AE: "~ e4@4 f#4@4 g4@4 b4@4 a4@4 g4@3",
  AF: "[~ f#4@3 ~ g4@4 c5@5 e5@5 ~ d5@23 ~@5, ~@19 [b4,g5]@24 ~@5]/2", // Em
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~ A@15 B C@12 D@4 E@18 F G H@2 G H@3 G H@3 G I J K@5 L M@2 N E>".pickRestart({
  A: "x", B: "~ x ~@22", C: "~ x ~@6", D: "~ x ~@2", E: "~@7 x ~@16", F: "~@7 x ~@11 x ~@3 x", G: "~ x ~",
  H: "~@3 x ~@4", I: "~@5 x ~@6", J: "~@13 x ~@10", K: "~@7 x ~@4", L: "~@2 x", M: "~@17 x ~@6", N: "~@14 x ~@4 x ~@4",
})).gain(0.25)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@8 A ~@8 B ~@3 B ~@8 C ~@11 D ~@3 B ~@3 D@2 ~@4 E ~@3 E ~@2 E ~@2 F ~@9
>`.pickRestart({
  A: "~@2 x", B: "~@23 x", C: "~ x ~@10", D: "~ x ~@6", E: "~ x ~@22", F: "~ x ~@2",
})).gain(0.15)

// drums · rim
const rim = s("rim").struct("<~ A@3 ~ A@3 ~ A@6 B C D@3 ~ D@3 E D E D F G@3 H I J@2 K ~@39>".pickRestart({
  A: "~ x!2", B: "~ x ~", C: "~ x ~@22", D: "~@11 x ~@7 x ~@4", E: "~@11 x ~@12", F: "~ x ~@6", G: "~@7 x ~@3 x",
  H: "~ x ~@2", I: "~@2 x ~@12 x ~@7 x", J: "~@15 x ~@7 x", K: "~@7 x ~@16",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  ~@15 A ~@13 B ~@7 C D@7 E F E F D@2 G H I J K L M J K L K@2 J N A O P Q R Q ~ S T U ~
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@10", C: "~@3 x ~@11 x ~@7 x", D: "~@15 x ~@7 x", E: "~@5 x ~@2", F: "~ x ~@3 x ~@2",
  G: "~@15 x ~@5 x ~ x", H: "~ x ~", I: "~@2 x", J: "x ~@16 x ~@6", K: "x ~ x", L: "~ x ~@15 x ~@6",
  M: "~ x ~@14 x ~@7", N: "~@3 x ~ x ~@6", O: "~@2 x ~@4 x", P: "~@5 x ~@15 x ~@2", Q: "~@5 x ~@16 x ~",
  R: "~@10 x ~@10 x ~@2", S: "x ~@12 x ~@10", T: "~ x ~@11 x ~@10", U: "~ x ~@12 x ~@2 x ~ x ~@4",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  ~ A B@3 A B@5 C B@4 D E F E@3 F E@6 G H G ~ I J I@2 J K@2 L K@3 L J@4 I@2 J M N O P O Q R P R P S N T U V W X W@2 Y
  Z@2 ~ AA
>`.pickRestart({
  A: "x ~@4 x", B: "x", C: "x ~ x", D: "~ x ~@22", E: "~ x ~@6", F: "~@3 x ~@15 x ~@4", G: "~ x ~@2", H: "~@3 x ~@7 x",
  I: "~@7 x ~@16", J: "~@7 x ~@15 x", K: "~@7 x ~@7 x ~@8", L: "~@3 x ~@3 x ~@16", M: "~ x ~", N: "~@3 x ~@4", O: "x!3",
  P: "~@4 x ~@4 x ~@14", Q: "~@5 x ~@2 x ~@15", R: "~@9 x ~@7 x ~@6", S: "~ x ~@7 x ~@14", T: "~@5 x ~@6",
  U: "~@13 x ~@7 x ~@2", V: "~@9 x ~@4 x ~@9", W: "~@5 x ~@7 x ~@10", X: "~@13 x ~@10", Y: "~@3 x ~@4 x ~@3",
  Z: "~@13 x ~@3 x ~@6", AA: "~@6 x!2 ~@16",
})).gain(0.25)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@3 A ~@3 A ~@9 B ~@7 B ~ C ~@2 D ~ E ~ F ~@5 B ~@9 F ~@12 G ~@12>".pickRestart({
  A: "~@2 x", B: "~@23 x", C: "~@19 x ~@4", D: "~ x ~@10", E: "~ x ~@2", F: "~ x ~@6", G: "~ x ~@22",
})).gain(0.15)

stack(bass, piano, piano_2, kick, kick_soft, rim, snare, ride, ride_soft)

More by Gershwin