Strudelify

Late In The Evening

Paul Simon

KeyF majorTempo120 bpm
0:00/0:00
// Late In The Evening — Simon Paul
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 electric guitar jazz (copy of ch 1 electric guitar muted); ch 7 distortion guitar (copy of ch 6 electric guitar muted); ch 14 distortion guitar (copy of ch 13 electric guitar muted)
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger
const bass = note(`<
  ~@4 A B C D A B C E F G C H I@2 J K L I@2 J K M N O K L I@2 J C P I@2 J C P F G K L A@2 B C P A@2 B C P F G K L A B C
  D A B C E F G C H A@2 B C P A@2 B C P F G K L ~@8 A B C D A B C E F G C@9 Q
>`.pickRestart({
  A: "bb1 f2 ~@2 bb2 ~@3 c3 ~@2 bb2 ~ bb2 ~ f2", B: "bb1 f2 ~@2 bb2 ~@3 c3 ~@2 bb2 ~ bb2 ~ c2",
  C: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~ f2 ~ c2", D: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~ f2 a1@2",
  E: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~ f2 d2@2", F: "c2 g2 ~@2 c3 ~@3 d3 ~@2 c3 ~ c3 ~ g2",
  G: "c2 g2 ~@2 c3 ~@3 d3 ~@2 c3 ~ c3 ~ c2", H: "f1 c2 ~@2 g1 g2 ~@2 ab1 ab2 ~ a2 ~ a2 ~ f2",
  I: "bb1 f2 ~@2 bb2 ~@3 c3 ~@2 bb2 ~@3 f2", J: "bb1 f2 ~@2 bb2 ~@3 c3 ~@2 bb2 ~@3 c2",
  K: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~@3 c2", L: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~@3 f2",
  M: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~@3 g2", N: "c2 g2 ~@2 c3 ~@3 d3 ~@2 c3 ~@3 g2",
  O: "c2 g2 ~@2 c3 ~@3 d3 ~@2 c3 ~@3 c2", P: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~ f2 ~ f2",
  Q: "f1 c2 ~@2 f2 ~@3 g2 ~@2 f2 ~@4",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · brass section
const brass_section = note(`<
  ~@56 A B C D E F G H I J K@2 L M ~@4 N ~@4 N ~@3 O ~@3 P Q R S T C D E F G H I J K@2 L M O ~ O ~ O ~ O ~
>`.pickRestart({
  A: "~@15 [c4,c5]", // C
  B: "[c4,c5] ~ [c4,f4,a4,c5] ~ [f4,a4,c5,f5] ~ [a4,c5,f5,a5] ~ [bb4,d5,g5,bb5] ~@2 [a4,c5,f5,a5] ~@2 [g4,g5]!2", // C F Gm F G
  C: "[f4,f5] ~ [d4,d5] [bb3,bb4] ~ [d4,d5] ~ [f4,f5] ~@3 [f3,f4] [bb3,bb4] [d4,d5] ~ [f4,f5]", // F D Bb D F Bb D F
  D: "[f4,f5] ~ [d4,d5] [bb3,bb4] ~ [d4,d5] ~ [f4,f5]!2 ~@5 [c4,c5] [bb3,bb4]", // F D Bb D F C Bb
  E: "[a3,a4] [c4,c5] ~ [f4,f5]!2 ~ [c4,f4,a4,c5,a5] ~ [bb3,d4,g4,bb4,g5]@3 [a3,c4,f4,a4,f5] ~@2 [c4,c5] [bb3,bb4]", // A C F Gm F C Bb
  F: "[a3,a4] [c4,c5] ~ [f4,f5]!2 ~ [f4,a4,c5,a5] ~ [bb3,d4,g4,bb4,g5]@2 ~ [a3,c4,f4,a4,f5]!3 ~ [d4,f4,d5,f5]", // A C F Gm F Dm
  G: "[d4,f4,d5,f5] ~ [bb3,d4,bb4,d5] [f3,bb3,f4,bb4] ~ [bb3,d4,bb4,d5] ~ [d4,f4,d5,f5] ~@3 [d3,f3,d4,f4] [f3,bb3,f4,bb4] [bb3,d4,bb4,d5] ~ [d4,f4,d5,f5]", // Dm Bb Bb5 Bb Dm Bb5 Bb Dm
  H: "[d4,f4,d5,f5] ~ [bb3,d4,bb4,d5] [f3,bb3,f4,bb4] ~ [bb3,d4,bb4,d5] ~ [bb3,f4,bb4,f5] [d4,bb4,d5,bb5]!2 ~ [c4,a4,c5,a5] [bb3,g4,bb4,g5] ~ [a3,f4,a4,f5] ~", // Dm Bb Bb5 Bb Bb5 Gm F Eb …
  I: "[c4,a4,c5,a5]@3 [a3,f4,a4,f5] ~@7 [f3,c4,f4,c5] [a3,f4,a4,f5] [c4,a4,c5,a5] ~ [d4,bb4,d5,bb5]", // F Dm F5 Dm F Gm
  J: "[c4,a4,c5,a5]@3 [a3,f4,a4,f5] ~@3 [c3,c4,c5] [f3,f4,f5] ~ [a3,a4,a5] ~ [c4,c5,c6] ~ [a3,a4,a5] ~", // F Dm C F A C A
  K: "[[bb3,bb4,bb5] ~ [a3,a4,a5] [g3,g4,g5] ~ [f3,f4,f5] ~ [e3,e4,e5] ~@5 [c4,c5] [e4,e5] [g4,g5] [bb4,d5,g5,bb5]!2 ~ [a4,c5,f5,a5] [g4,bb4,e5,g5] ~ [f4,a4,d5,f5] [e4,g4,c5,e5] [g4,bb4,d5,g5] [f4,a4,c5,f5] ~ [e4,g4,bb4,e5] [d4,f4,a4,d5] [c4,e4,g4,c5] ~ [bb3,d4,f4,bb4], ~@3 c3@3 ~@2]/2", // Bb A G F E C E G …
  L: "[a3,c4,f4,a4] ~@5 f4 a4 c5@2 a4!2 ~ [f4,a4,c5,f5,a5,f6] ~ [f4,a4,c5,f5,a5,f6]", M: "[f4,a4,c5,f5,a5,f6] ~@15",
  N: "~@4 [c3,f3,a3] ~@3 [d3,f3,bb3] ~@2 [c3,f3,a3] ~@4", // F Bb F
  O: "~@4 [c3,f3,a3,c4,f4,a4] ~@3 [d3,g3,bb3,d4,g4,bb4] ~@2 [c3,f3,a3,c4,f4,a4] ~@4", // F Gm F
  P: "~@5 [a3,a4] ~ [c4,c5] [f4,f5] [e4,e5] ~ [d4,d5] [c4,c5] ~ [a3,a4] ~", // A C F E D C A
  Q: "[d4,d5]@2 ~ [c4,c5] ~ [a3,a4] ~ [c4,c5] [f3,f4] [a3,a4] ~ [d4,d5] [a3,a4] ~ [c4,c5]@2", // D C A C F A D A …
  R: "~@5 [f3,f4] [a3,a4] [c4,c5] [f4,f5] [e4,e5] ~ [d4,d5] [c4,c5] ~ [a3,a4] ~", // F A C F E D C A
  S: "[d4,d5]@2 ~ [c4,c5] ~ [a3,a4] ~ [c4,c5] [a3,a4] [c4,c5] ~ [c4,c5] [f3,f4] ~ [f3,f4]@2", // D C A C A C F
  T: "~@7 [f4,f5]!3 ~ [f4,f5]!2 ~ [f4,f5]!2", // F
})).s("gm_brass_section").gain(0.59)

// other · fretless bass
const fretless_bass = note(`<
  ~@16 A@2 B@2 ~ A@2 B@2 C D E F ~ A@2 B@2 ~ A@2 B@2 C D E F ~ A@2 B@2 ~ A@2 B@2 C D E F ~@13 A@2 B@2 ~ A@2 B@2 C D E F
  ~@29
>`.pickRestart({
  A: "[d4@2 ~ d4!2 ~ d4 eb4@2 eb4 ~ bb3@3 bb3 d4@3 d4 ~ d4!2 ~ eb4@2 ~@7]/2",
  B: "[d4 ~ d4 ~ d4@2 eb4@4 d4 ~ d4 c4@2 c4@3 ~@14]/2", C: "~@12 c4 c4@3", D: "e4@4 d4@2 c4 c4@3 c4 ~@5, eb4 ~@15",
  E: "~@6 c4!2 eb4@2 d4@2 c4@2 c4 ~", F: "c4 ~@3",
})).s("gm_fretless_bass").gain(0.46)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@30 A@3 B@2 A@3 B@2 C@2 B@2 A@3 B@2 A@3 B@2 C@2 B@2 ~@12 A@3 B@2 A@3 B@2 C@2 B@2 ~@4 D@4 A@2 B@2 A@2 B@2 C@2 B@10
>`.pickRestart({
  A: "~@4 [f4,bb4,d5]@3 ~ [f4,bb4,eb5]@3 [f4,bb4,d5]@4 ~", B: "~@4 [c4,f4,a4]@3 ~ [c4,f4,bb4]@3 [c4,f4,a4]@4 ~",
  C: "~@4 [g4,c5,e5]@3 ~ [g4,c5,f5]@3 [g4,c5,e5]@4 ~", // C Csus4 C
  D: "[f4,a4] [f4,a4]@2 [c4,f4,a4]@3 [c4,f4,a4]@2 [f4,a4] [f4,a4]@2 [c4,f4,a4]@3 [c4,f4,a4]@2, c4@3 ~@5 c4@3 ~@5", // F
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.4)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@43 A@2 B C D E F@3 G H I@2 J K ~@21 L ~@23 L ~ M N M N M N M>".pickRestart({
  A: "[~@16 d5@8 f4 [bb4,d5] ~@2 [g4,c5] ~ [eb4,g4,c5] ~, ~@15 [f4,bb4]@9 ~@3 eb4@2 ~@3]/2", // Bb C5 Cm Bb5
  B: "[d4,f4,bb4]@8 d4 [f4,bb4] ~@2 [g4,c5] ~ [eb4,g4,c5] ~, ~@11 eb4@2 ~@3", // Bb Bb5 C5 Cm
  C: "[f4,bb4,d5]@8 f4 [bb4,d5] ~@2 [g4,c5] ~ [eb4,g4,c5] ~, ~@11 eb4@2 ~@3", D: "~@2 eb5@5 ~@2 g4@2 ~ g4 f4 d4 c4",
  E: "f4@3 ~ g4@3 ~ c5 g4 ~ f4 f4@2 d4@2",
  F: "[~@2 [f4,bb4]@9 ~@5 d5@12 ~@4 [bb4,d5]@12 ~@4, d4@11 eb4@3 f4@14 ~@2 f4@14 ~@4, ~@12 [g4,c5]@3 bb4@13 ~@20]/3", // Bb5 Bb C5
  G: "~@6 f5 ~ g5@3 ~ f5@2 d5 c5", H: "f5@4 d5 ~ g4@2 g4 f4 d4 c4 f4 ~ g4@2",
  I: "[~@6 c5@2 ~@2 e5@11 ~@11, ~ c4 e4@3 ~@3, ~@5 [e4,g4]@4 [g4,c5]@11 ~@12]/2", J: "~@2 a4@10 ~ c5 a4@2, ~@3 f5",
  K: "~ a4 ab4@3 a4 g4@3 a4 f4@4 d4@2", L: "g4@3 ~ g4 f4 d4 c4 f4@6 ~@2", M: "~@2 g4@2 g4 f4 d4 c4 f4@6 ~@2",
  N: "[c3,f3] ~@3", // F5
})).s("gm_electric_guitar_muted").gain(0.35).pan(0.7)

// other · electric guitar muted
const electric_guitar_muted_2 = note("<~@56 A B ~@21 C ~@23 C ~ D ~ D ~ D ~ D>".pickRestart({
  A: "~@2 c5@9 ~@5", B: "c5@4 c5@4 c5@7 ~", C: "c5 ~@3", D: "~@2 c5@3 ~@11",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.7)

// other · woodblock
const woodblock = note("<~@73 [~@8 bb4 gb5 db6 bb6 ~@4] ~@6 [bb4 gb5 db6 bb6 ~@4 bb6 db6 gb5 bb4 ~@4] ~@31>")
  .s("gm_woodblock").gain(0.36).pan(0.2)

// drums · kick
const kick = s("bd").struct("<[~ x ~ x]!16 [x!4]!96>").gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@15
  [~@8 x!2 ~ x ~ x!2 ~]
  ~@53
  [~@8 x!2 ~ x ~ x!2 ~]
  ~@13
  [x ~@2 x!2 ~@3 x ~@2 x!2 ~@2 x]
  ~@28
>`).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@83 [~@9 x!2 ~@5] ~@28>").gain(0.24)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B@14 C B@13 D B@13 E F@2 B F B F@2 B F B F@2 B E B@11 G F@2 B F B F@2 B F B F@2 B H B@28
>`.pickRestart({
  A: "~@2 x ~@6 x ~ x ~@4", B: "x ~@5 x ~@4 x ~@4", C: "x ~@2 x ~@4", D: "x ~@7 x!8", E: "x ~@10 x!2 ~@3",
  F: "x ~@5 x ~@4 x ~@2 x!2", G: "x ~@5 x!2 ~@8", H: "x ~@5 x ~@6 x!2 ~",
})).gain(0.4)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@15 [x!4]!97>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<x ~@28 [~@4 x!4 ~@8] ~@82>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<A B@14 C B@12 D E B@12 F G B@12 F G B@11 H B@12 F I B@27 J>".pickRestart({
  A: "~@7 x ~@6 x ~", B: "~@3 x ~@4 x ~@5 x ~", C: "~@3 x ~@12", D: "~@3 x ~@4 x ~@5 x!2", E: "~ x!3 ~@12",
  F: "~@3 x ~@4 x ~@4 x ~ x", G: "x!5 ~@2 x", H: "~@3 x!3 ~@10", I: "x", J: "~@3 x ~@4 x ~@7",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@2 A ~ A ~ A ~ A ~@4 A@13 ~ A ~@2 A ~ A ~@2 A ~@3 A ~@13 A ~@2 A ~ A ~@2 A ~@3 A ~@29
>`.pickRestart({
  A: "x",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@4
  [x ~ x ~@2 x ~ x ~@2 x ~@5]
  ~@53
  [x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x]!11
  x
  ~@14
  [x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x]!27
  [x ~ x ~@2 x ~ x ~@2 x ~@5]
>`).gain(0.56)

// drums · ride bell · soft notes
const ride_bell_soft = s("rd").struct(`<
  ~@4
  [~@4 x ~@4 x ~@6]
  ~@53
  [~@4 x ~@4 x ~@2 x ~@3]!11
  ~@15
  [~@4 x ~@4 x ~@2 x ~@3]!28
>`).gain(0.32)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@4 A@11 B ~@17 C D ~@23 E F E F E F E F E F E B ~@14 E F E F E F E F E F E F E F E F E F E F E F E F E F E G
>`.pickRestart({
  A: "x ~ x ~ x!2 ~ x ~ x!2 ~ x!2 ~ x", B: "x", C: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  D: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", E: "x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x", F: "x ~ x ~@2 x ~ x ~@2 x ~ x!2 ~@2",
  G: "x ~ x ~@2 x ~ x ~@2 x ~ x ~@3",
})).gain(0.56)

// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct(`<
  ~@58 A B A B A B A B A B A ~@15 A B A B A B A B A B A B A B A B A B A B A B A B A B A C
>`.pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "~@4 x ~@4 x ~@5 x", C: "~@4 x ~@4 x ~@6",
})).gain(0.24)

// drums · bongos
const bongos = s("bongo:4").struct("<A B@14 C B@13 D B@13 E B@13 E B@11 F B@13 G B@28>".pickRestart({
  A: "~@2 x ~@6 x ~ x ~@4", B: "x ~@5 x ~@4 x ~@4", C: "x ~@2 x ~@4", D: "x ~@7 x!8", E: "x ~@10 x!2 ~@3",
  F: "x ~@5 x!2 ~@8", G: "x ~@5 x ~@6 x!2 ~",
})).gain(1.05)

// drums · congas
const congas = s("conga:13").struct("<A B@14 C B@12 D E B@12 F G B@12 F G B@11 H B@12 F I B@27 J>".pickRestart({
  A: "x ~@6 x ~@6 x ~", B: "~@3 x ~@4 x ~@5 x ~", C: "~@3 x ~@12", D: "~@3 x ~@4 x ~@5 x!2", E: "~ x!7 ~@8",
  F: "~@3 x ~@4 x ~@4 x ~ x", G: "x!5 ~@2 x", H: "~@3 x!3 ~@10", I: "x", J: "~@3 x ~@4 x ~@7",
})).gain(1.28)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  A B@14 C D B@2 D B D B D B D B@2 E ~ D@12 F ~ D B@2 D B D B@2 D B@3 F ~ B@11 C D B@2 D B D B@2 D B@3 F ~ B@27 G
>`.pickRestart({
  A: "x ~@2 x ~ x!2 ~ x ~ x ~ x!2 ~ x", B: "x ~ x ~ x!2 ~ x ~ x!2 ~ x!2 ~ x", C: "x",
  D: "~@2 x ~ x!2 ~ x ~ x!2 ~ x!2 ~ x", E: "x ~ x ~ x!2 ~ x ~ x!2 ~ x!2 ~@2", F: "~@2 x ~ x!2 ~ x ~ x!2 ~ x!2 ~@2",
  G: "x ~ x ~ x!2 ~ x ~ x!2 ~ x ~@3",
})).gain(3.57)

stack(
  bass, brass_section, fretless_bass, acoustic_guitar_steel, electric_guitar_muted, electric_guitar_muted_2, woodblock,
  kick, snare, snare_soft, low_tom, pedal_hat, mid_tom, high_tom, crash, ride_bell, ride_bell_soft, cowbell,
  cowbell_soft, bongos, congas, agogo_bells
// … 1 more lines

More by Paul Simon