Strudelify

For You, for Me, for Evermore

Gershwin

KeyE♭ majorTempo102 bpm
0:00/0:00
// For You, for Me, for Evermore — Gershwin
// 102 bpm, 4/4, key D# 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 38, 4/4 at bar 59, 3/4 at bar 65) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 69 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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@3 B C@8 D@6 E@3 F G H I H J K L M N O P Q@6 R@3 S@5 T@5 U@7 V@6 W X@3>".pickRestart({
  A: "[~@14 g2@16 gb2@16 ~ f2@16 bb1@16 ~ g2@16]/3", B: "gb2 f2",
  C: "[~ bb1@18 eb2@16 ~ bb1@16 f1@16 f2@16 ~ bb1@16 f2@16 bb2@17 bb1@16 eb2@16 bb1@16 ~ eb2@30 ~@2 f2@16 ~ c2@16 d2@8]/8",
  D: "[eb2@8 d2@8 c2@9 bb1@16 f2@16 eb2@17 bb1@15 ~ bb1@16 eb2@16 ~ ab1@16 eb2@16 c2@16 ~ g2@16 f2@4]/6",
  E: "[~@4 eb2@8 d2@8 c2@8 b1@50 ~ bb1@17]/3", F: "eb1 bb1", G: "f1 f2", H: "bb1 f2", I: "bb1@22 ~@2 bb1@7 ~",
  J: "a1 e2", K: "ab1 eb2", L: "db2 ~", M: "eb1@8 eb2@8 f1@7 ~ f2@8", N: "g1@7 ~ g2@8 f1@8 f2@8",
  O: "eb1@8 d2@7 ~ c2@7 ~ bb1@8", P: "a1",
  Q: "[~@4 f1@7 ~ c2@8 ab2@9 eb2@7 ~ d2@8 c2@8 bb1@16 ~ eb1@45 ~@3 bb1@7 ~@2 bb1@7 ~ bb1@6 ~@2 bb1@7 ~ bb1@6 ~@2 bb1@4 ab1@4 g1@18 ~@3 g1@4]/6",
  R: "[gb1@17 ~@3 gb1@3 ~ f1@17 f2@4 f1@4 bb1@20 ab1@4 g1@18 ~@3 g1@2]/3",
  S: "[~@2 gb1@17 ~@3 gb1@4 f1@14 ~@3 f1@8 bb1@22 ~@2 bb1@14 ~@3 bb1@8 eb2@24 bb1@17 eb2@7 ~ ab1@11]/5",
  T: "[~@5 ab1@8 c2@24 ~ f1@15 ~ c2@8 b1@24 ~ bb1@15 ~@2 bb1@8 eb2@23 ~@2 c2@23]/5",
  U: "[~ f1@14 ~@3 f1@8 bb1@24 g1@24 ~ e1@24 f1@25 ab1@26 ~ eb2@16 f2@16 g2@16 ab2@16 eb2@8 ~]/7",
  V: "[d2@8 c2@9 bb1@10 a1@35 f1@16 c2@16 ~ d2@7 c2@8 bb1@17 eb1@47 ~@2 bb1@7 ~ bb1@6 ~@2]/6",
  W: "~ bb1@6 ~@2 bb1@6 ~@2 bb1@6 ~@2 bb1@6 ~", X: "[~ eb1@22 ~@3 eb1@55 ~@15]/3",
})).s("gm_acoustic_bass").gain(0.25)

// chords · piano · "A.PIANO 1"
const piano = note("<A@3 B@5 C@7 D@6 E F G H I J K L M N O P@7 Q@3 R@3 S@7 T@7 U@7 V@3>".pickRestart({
  A: "[~@14 [g3,bb3]@16 [gb3,a3]@11 ~@5 [f3,ab3]@17 [bb2,ab3]@16 [g3,bb3]@16 ~]/3", // Gm Gbm Fm Bb7 Gm
  B: "[[gb3,a3]@16 f3@17 bb2@18 [eb3,g3]@33 [f2,eb3]@33 [bb2,eb3,ab3]@32 eb4@8 d4@3, ~@4 ab3@9 ~@27]/5", // Gbm Eb F7 Ebsus4
  C: "[~@6 c4@8 b3@8 bb3@8 c4@8 bb3@16 ~ a3@8 bb3@8 a3@16 ab3@8 bb3@9 ab3@16 d3@8 eb3@8 d3@8 c3@8 ~@9 f3@8 ab3@16 ~@8 ab3@8 ~ g3@16 bb2@6, ~@22 eb3@33 eb3@32 eb3@32 ~ ab3@33 bb2@32 eb3@33 ~@6]/7",
  D: "[~@2 ab3@8 [eb3,g3]@17 ~@8 eb3@8 f3@16 ~@16 bb3@16 ~ f3@8 eb3@8 d3@8 c3@9 [b2,a3]@50 [bb2,ab3]@17, ~@27 ab2@32 c3@33 ~@100, ~@67 g3@25 a3@33 ~@67]/6", // Eb B7 Bb7
  E: "~ g3, eb2, ~ bb2@3", F: "~ a3, f2, ~ eb3@3", G: "~ ab3, bb2, ~ f3@3", H: "eb4@3 d4, [f3,ab3]",
  I: "~ f3 ab3@2, bb2", J: "~ e3 g3@2, a2", K: "ab2 ~@2 g3, ~ eb3@3, ~ f3", L: "[db3,ab3]@19 ~@13",
  M: "[eb2,bb2] [f2,c3]", N: "[g2,d3] [f2,c3]", O: "[eb2,bb2] d3 c3 bb2",
  P: "[~@9 eb3@9 ~ f3@17 ~@24 eb3@8 ~ [d3,g3]@8 [c3,f3]@8 f3@8 ab3@8 ~@9 bb2@4 ~@4 bb2@8 bb2@8 bb2@7 ~ bb2@7 ~ bb2@6 ~@3 bb2@8 bb2@8 bb2@8 bb2@8 bb2@8 ~@8 [c4,f4]@16 ~, a2@36 f2@32 ~@33 eb2@48 ~@75, ~@44 c3@24 ~@17 bb2@16 ~@123, ~@52 ab3@16 ~@82 ab3@49 g3@25]/7", // G5 F5
  Q: "[~@8 [c4,f4]@16 ~@9 [ab3,eb4]@16 ~@8 [d4,f4]@16 ~@8 [c4,f4]@15, gb3@24 f3@25 ab3@24 g3@23]/3", // F5 Ab5 Dm F5
  R: "[~@10 [a3,eb4]@16 ~@8 [ab3,eb4]@16 ~@9 [f3,ab3]@16 ~@8 [db4,f4]@13, ~@2 gb3@24 f3@25 bb2@24 ab3@21]/3", // Adim Ab5 Fm Db
  S: "[~@12 [db4,f4]@16 ~@8 [db4,eb4]@16 ~@9 [c4,eb4]@16 ~@8 [eb4,g4]@16 ~@9 [eb4,g4]@16 ~@8 [eb4,gb4]@17 ~@8 [d4,f4]@17 eb4@8 d4@8 ~ c4@8 ~@16 g4@7, ~@4 g3@24 bb3@24 ~ ab3@24 bb3@24 ~ a3@24 a3@25 ab3@25 g4@24 ~ a3@23, ~@209 eb4@15]/7", // Db Dbsus2 Cm Eb Ebm Dm
  T: "[~@9 f4@8 ~ eb4@8 d4@24 ~@8 [db4,f4]@17 ~@8 [bb3,c4]@16 f3@16 g3@8 ~@9 eb4@9 f4@9 [eb3,bb3]@17 [f3,c4]@16 [g3,d4]@16 c4@8 b3@8 ~ eb3@8, ~ ab3@48 ~ g3@25 e3@25 ~@24 ab3@27 ~@48 ab3@16 ~@9]/7", // Db Bbsus2 Eb5 F5 G5
  U: "[d3@8 c3@9 bb2@9 ~@10 eb3@9 f3@17 ~@24 eb3@7 ~ [d3,g3]@8 [c3,f3]@9 [bb2,ab3]@16 ~@8 bb2@8 bb2@8 ~ bb2@8 bb2@8 bb2@8 bb2@8 bb2@8 bb2@8 bb2@8 ~ bb2@8 bb2@7, ~@26 a2@35 ~ f2@32 ~@33 eb2@49 ~@48, ~@35 c3@12 ~@65, ~@78 ab3@15 ~@83 ab3@48]/7", // G5 F5 Bb7
  V: "[~@13 [g3,c4,f4]@27 ~@8, ~ [eb2,bb2]@64 ~@31]/3", // Csus4 Eb5
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A@3 B@8 C@4 D@6 E F G H I J K@2 L M N O@7 P@2 Q R@3 S@7 T U@6 V@7 W@3>".pickRestart({
  A: "[~@14 c4@5 d4@3 eb4@4 ~@2 c4@2 d4@5 eb4@12 [c4,eb4,f4]@16 [b3,d4,g4]@16 c4@6 d4@3 eb4@4 ~ c4@3]/3", // F7 G
  B: "[d4@5 eb4@11 ~@8 c4@8 ~@10 g4@7 ~@27 eb4@8 d4@24 eb4@9 f4@8 g4@8 f4@16 f5@5 ~@3 g5@8 ~ f5@7 ~ g4@8 [f4,g4,bb4]@25 eb4@8 d4@24 eb4@8 f4@8 g4, ~@16 bb4@33 c4@35 b3@34 ~@138, ~@33 d4@17 f4@34 ~@33 c4@32 ~@107, ~@52 bb4@33 ~@64 ab4@23 ~@84]/8", // Gm7
  C: "[~@7 [c4,f4]@33 f4@4 g4@4 ab4@4 bb4@4 ~@25 bb4@8 ~@25 eb4@8 [db4,c5]@6, ~@56 [db4,f4,c5]@33 [bb3,db4]@32 ~@7]/4", // F5 Dbmaj7 Bbm
  D: "[~@2 c5@8 c5@8 ~@4 c5@4 bb4@8 ~@17 c5@8 ~@25 c5@8 [c4,eb4]@24 [eb4,f4]@8 ~@42 db5@8 ~@9 g5@9, ~@10 e4@17 ~@8 ab4@25 ~@65 eb4@49 ~ [d4,g4]@17, ~@18 bb4@8 c4@33 [eb4,g4,d5]@34 ~@31 [db4,gb4]@33 b4@17 bb4@18, ~@133 b4@16 eb5@25 ~@18, ~@47 gb5@11 ~@6]/6", // Cm Ebsus2 G5 Ebmaj7 Gb5
  E: "[c5,f5,bb5]@3 [f4,bb4,eb5]", F: "~@3 [c5,eb5], [g4,b4,d5]", G: "~@2 g5@2 ~@3 g4, [ab4,c5], f5@15 ~ f5@16, ~@3 f4",
  H: "~@3 d5 ~@3 ab5, ab4@2 ~ g5, ~ bb4@3 ~ f5@3, ~ c5 eb5@2", I: "f5@3 [f5,bb5], [db5,c6]", J: "~@3 c5, [g4,db5]",
  K: "[bb4@4 b4@2 eb4 f4, [f4,eb5]@49 ~@15]/2", L: "g4 bb4!3, d4 eb4", M: "~@2 c5@2 eb4@2 ~ f4, [f4,bb4] bb4, ~@3 eb4",
  N: "[d4,g4] [f4,bb4] [eb4,bb4] [d4,c5]", // G5 Bb5 Eb5 D7
  O: "[~@28 c5@8 ~@24 c5@8 ~ [f4,bb4]@8 [eb4,g4]@8 [c4,eb4]@8 [d4,f4]@8 [g3,eb4]@49 eb4@8 ab4@9 c5@8 eb5@8 ab5@8 c6@8 bb5@16 ~ eb5@8, [eb4,g4,d5]@9 [f4,ab4,eb5]@8 ~@39]/7", // Bb5 Eb Cm Dm Cm Ebmaj7 Fm7
  P: "[d5@16 eb5@8 f5@4 g5@4 f5@8 ~ eb5@8 e5@8 g5@7, ~@12 c5@9 ~@11]/2", Q: "~ c6@8 ~@17 eb5@6, ~@9 bb5@20 ~@3",
  R: "[~@2 d5@16 eb5@8 ~ g5@3 f5@3 ~@2 f5@7 c5@9 eb5@4 d5@2 ~@10 g5@8 ~@17 bb5@4, ~@27 c5@13 ~@11 ab4@24 c6@21, ~@59 d5@18 ~@19]/3",
  S: "[~@20 c5@8 ~@20 c6@4 ~ g5@8 [f5,ab5]@8 [ab5,c6]@8 [bb5,d6]@17 [a5,c6]@8 [c5,eb5]@16 [d5,f5]@8 ~@17 ab5@8 ~@17 g5@9 ~@15 eb5@8 ~ d5@8 ~@4 c5@4 ~@4 eb5@3, ~@4 db5@23 ~ c6@20 ~@4 bb5@8 ~@117 bb5@24 ~@23, ~@40 eb5@12 ~@74 [db5,gb5]@25 [c5,f5]@26 ~@32 b4@8 d5@7, ~@45 g5@8 ~@171]/7", // Fm Ab Bb Am Cm Dm Gb5 F5
  T: "~ f5@4 g5@4 f5@23, ~ c5@31",
  U: "[~@2 f5@4 g5@4 ~@4 bb5@4 ~@16 bb5@9 ~@16 c5@8 ~@8 ab4@7 ~ bb4@8 ~ b4@26 ~@9 bb4@8 bb4@6 ~@2 bb4@8 ~@8 c5@8 eb4@8 ~@4 f4@4 ~ d4@7 bb4, ~@10 ab5@8 c6@25 db5@24 eb5@51 g4@8 ~@9 ab4@17 ~@15 bb4@16 g4@8 ~, ~@119 f4@16 ~@16 [f4,bb4]@16 ~@8 eb4@8 ~@9]/6", // Bb5
  V: "[f4@7 ~ [eb4,bb4]@8 ~ [eb4,c5]@9 ~@27 c5@9 ~@24 c5@8 [f4,bb4]@8 [eb4,g4]@8 ~ [c4,eb4]@7 ~ [d4,f4]@8 [g3,eb4]@49 ~@40 c6@8, ~@26 [g4,d5]@36 [f4,ab4,eb5]@32 ~@90 ab4@25 ab5@15, ~@27 eb4@36 ~@113 eb4@48, ~@6 c5, ~@25 eb5@3]/7", // Eb5 Cm Bb5 Eb Cm Dm Cm G5 …
  W: "[~ [f5,bb5,eb6]@78 ~@17]/3", // Ebsus2
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D E F G H I J K@2 L M N O P Q ~ R S T@2 U T@2 U@2 T@2 V W F X Y Z Q AA AB AC AD AE ~ AF AG AH AI AJ J S AK AL
  AM AN AO ~ AP AQ AR AS@2 AT AU ~ AV AL ~@2
>`.pickRestart({
  A: "~@15 x ~@16", B: "~ x ~ x ~@4", C: "~@13 x ~@2 x ~@15", D: "~ x ~@17 x ~@12", E: "~ x ~@3 x ~@2", F: "~ x ~@6",
  G: "~@5 x ~@15 x ~@10", H: "~@3 x ~@7 x ~@4", I: "~@6 x ~@16 x ~@8", J: "~@23 x ~@8", K: "~ x ~ x",
  L: "~@9 x ~@15 x ~@6", M: "~@9 x ~@16 x ~@5", N: "~@10 x ~@16 x ~@4", O: "~@27 x ~@4", P: "~@3 x ~@3 x",
  Q: "~@12 x ~@16 x ~@2", R: "~@3 x ~@17 x ~@10", S: "~ x", T: "x!2", U: "x", V: "x ~ x!2", W: "~ x ~@30",
  X: "~@5 x ~@23 x ~@2", Y: "~@3 x ~@12", Z: "~@11 x ~@4", AA: "~@7 x ~@20 x ~@3", AB: "x ~@20 x ~@2 x ~@7",
  AC: "~@13 x ~@3 x ~@14", AD: "~@9 x ~@20 x ~", AE: "~ x ~@11 x ~@2", AF: "~@8 x ~@2 x ~@20", AG: "~ x ~@5 x",
  AH: "~@21 x ~@10", AI: "~@13 x ~@18", AJ: "~@3 x ~@11 x", AK: "~@9 x ~@22", AL: "~ x ~@24 x ~@5", AM: "~@9 x ~@6",
  AN: "~@11 x ~@20", AO: "~@3 x ~@24 x ~@3", AP: "~@7 x ~@15 x ~@8", AQ: "~@7 x ~@16 x ~@7", AR: "~@17 x ~@9 x ~@4",
  AS: "~@15 x", AT: "~@23 x ~@7 x", AU: "~@29 x ~@2", AV: "~@25 x ~@6",
})).gain(0.2)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A ~@4 B ~@13 C ~@6 D ~@8 E ~@4 F ~@12 G ~ H ~@12>".pickRestart({
  A: "~@3 x ~@4", B: "~@21 x ~@10", C: "~@29 x ~@2", D: "~@3 x", E: "~@5 x ~@2", F: "~@3 x ~@12", G: "~ x ~@2",
  H: "~@11 x ~@4",
})).gain(0.1)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C D E F G H I J K L M N O ~ P Q@3 ~ Q@3 ~@3 P ~@3 R S T U V W X Y Z AA S AB AC AD AE P AF AG AH AI S AJ ~@3 AK
  AD H ~ AK AL ~@3
>`.pickRestart({
  A: "~@5 x ~@8 x ~", B: "~@3 x ~@3 x", C: "~@13 x ~@15 x ~@2", D: "~@13 x ~@16 x ~", E: "~@15 x", F: "~@15 x ~@15 x",
  G: "~@31 x", H: "~@15 x ~@16", I: "x", J: "~ x ~@15 x ~@14", K: "~ x ~@16 x ~@13", L: "~ x ~@7 x ~@6",
  M: "~@3 x ~@15 x ~@12", N: "~@3 x ~@16 x ~@11", O: "~ x ~@3 x ~@2", P: "~@3 x", Q: "~ x ~ x", R: "~@27 x ~@4",
  S: "~@3 x ~@4", T: "~@4 x ~@26 x", U: "~ x", V: "~ x ~@2", W: "~ x ~@23 x ~@6", X: "~@9 x ~@6", Y: "~@5 x ~@10",
  Z: "~ x ~@14", AA: "~@5 x ~@2", AB: "~@4 x ~@24 x ~@2", AC: "~@21 x ~@10", AD: "~@7 x ~@8", AE: "~@7 x ~@23 x",
  AF: "~@17 x ~@14", AG: "~@9 x ~@22", AH: "~ x ~@11 x ~@2", AI: "~@19 x ~@12", AJ: "~ x ~@6", AK: "~@13 x ~@18",
  AL: "~@11 x ~@2 x ~@7 x ~@4 x ~@2 x ~",
})).gain(0.15)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 A ~@3 B ~@11 C ~@11 D ~@4 E ~@27 D ~@3>".pickRestart({
  A: "~@3 x ~@12", B: "~@13 x ~@18", C: "~@21 x ~@10", D: "~@19 x ~@12", E: "~@9 x ~@22",
})).gain(0.05)

// drums · ride
const ride = s("rd").struct(`<
  A B C D E F G H I J K L M N O P Q R S T C U@4 V U D U@4 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ BA BB BC BD BE ~@2
>`.pickRestart({
  A: "~@7 x ~@7 x", B: "~@31 x", C: "~@15 x ~@16", D: "x!2", E: "~ x ~@17 x ~@7 x ~@4",
  F: "~@4 x ~@7 x ~@4 x ~@2 x ~@7 x ~@3", G: "~@4 x ~@7 x ~@8 x ~@7 x ~@2", H: "~@13 x ~@7 x ~@7 x ~@2",
  I: "~@3 x ~@3 x ~@3 x ~@4", J: "~@6 x ~@16 x ~@8", K: "~@7 x ~@7 x ~@7 x ~@8", L: "~@8 x ~@7 x ~@4 x ~@2 x ~@7",
  M: "~ x!3", N: "~ x ~@7 x ~@7 x ~@5 x ~ x ~@6", O: "~ x ~@7 x ~@16 x ~@5", P: "~ x ~@3 x ~@7 x ~@2",
  Q: "~@3 x ~@7 x ~@7 x ~@7 x ~@4", R: "~@3 x ~@8 x ~@7 x ~@4 x ~@2 x ~@3", S: "~ x ~ x ~ x ~ x", T: "~@29 x ~@2",
  U: "x!4", V: "x ~@7 x ~@7 x ~@7 x ~@4 x ~@2", W: "x ~@18 x ~@12", X: "~@4 x ~@7 x ~@16 x ~@2",
  Y: "~@5 x ~@7 x ~@7 x ~@10", Z: "~@5 x ~@16 x ~@7 x ~", AA: "~@7 x ~@3 x ~@4", AB: "~@7 x ~@7 x ~@15 x",
  AC: "~@7 x ~@16 x ~@7", AD: "x ~ x!2", AE: "~@17 x ~@14", AF: "~ x ~@7 x ~@7 x ~@14", AG: "~ x ~@3 x ~@5 x ~ x ~@2",
  AH: "~@2 x ~@16 x ~@3 x ~@3 x ~@4", AI: "~@11 x ~@8 x ~@11", AJ: "x!2 ~@4 x!2", AK: "~@12 x ~@8 x ~@10",
  AL: "~@9 x ~@3 x ~@16 x ~", AM: "~@3 x ~@7 x ~@3 x", AN: "~@19 x ~@3 x ~@8", AO: "~ x",
  AP: "~ x ~@7 x ~@7 x ~@11 x ~@2", AQ: "~ x ~@11 x ~@4 x ~@3 x ~@3 x ~@5", AR: "~@5 x ~@3 x ~@6",
  AS: "~@3 x ~@7 x ~@15 x ~@4", AT: "~@3 x ~@15 x ~@4 x ~@3 x ~@3", AU: "~@11 x ~@3 x", AV: "~@7 x ~@7 x ~@7 x ~@7 x",
  AW: "~@7 x ~@7 x ~@4 x ~@3 x ~@7", AX: "x ~@7 x ~@8 x ~@8 x ~@5", AY: "~@13 x ~@16 x ~", AZ: "~@3 x ~@3 x ~@7 x",
  BA: "~@6 x ~@16 x ~@7 x", BB: "~@15 x ~@7 x ~@8", BC: "~ x!2 ~", BD: "x ~@7 x ~@16 x ~@6", BE: "~ x ~@24 x ~@5",
})).gain(0.2)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~ A B ~@4 C ~ D ~@4 E@2 ~@3 C ~@7 F ~@2 G ~@9 H ~@2 A B ~ I J ~ A ~@12 A ~@6
>`.pickRestart({
  A: "~@15 x ~@16", B: "~@7 x ~@24", C: "~@5 x ~@26", D: "~@31 x", E: "~@9 x ~@6", F: "~ x ~ x", G: "~@29 x ~@2",
  H: "~@9 x ~@22", I: "~@17 x ~@14", J: "~ x ~@30",
})).gain(0.1)

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

More by Gershwin