Strudelify

Summer Time

DJ Jazzy Jeff

KeyG minorTempo96 bpm
0:00/0:00
// Summer Time — DJ Jazzy Jeff
// 96 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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.

// chords · brass section
const brass_section = note(`<
  ~@2 A@3 ~ B@4 C ~@11 D@4 E@6 F@3 ~@2 G ~@7 H ~@4 I@2 J@4 K@3 ~@11 L@2 M@4 N@4 O@2
>`.pickRestart({
  A: "[c4 g5@53 ~@18]/3",
  B: "[~@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 f5@6 d5@3 g5@9 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@9 g5@6 d5@3 g5@3]/4", // Dm Eb F Eb F Gm F Dm …
  C: "f5@3 ~@5",
  D: "[~@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 g5@6 f5@3 ~@9 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@3 g5@2 a5 ~@2 bb5 ~@2 a5 ~@2 g5 ~@2 f5 ~@2 g5, ~@45 g5@11 ~@40]/4", // Dm Eb F Eb F Gm F Dm …
  E: "[~@2 f5 d5@3 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 g5@5 f5@3 d5 ~@2 f5@5 ~@2 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@9 f5@5 g5@4 d5@7 ~@2 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 d6@2 c6 ~@2 c6 ~@2 bb5 ~@2 c6]/6", // Dm Eb F Eb F Gm F Dm …
  F: "[~@2 bb5 g5@3 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@8 g5 ~@2 a5 ~@2 bb5 ~@2 f5 ~@2 f5@5 ~@20]/3", // Dm Eb F Gm Dm
  G: "~ bb4@3 f4@2 d4@2", H: "~ bb4@3 f4@4",
  I: "[~@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 g5@6 d5@3 g5@3]/2", // Dm Eb F Eb F Gm F
  J: "[f5@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@3 g5@2 bb5 ~@2 c6 ~@2 bb5 ~@2 c6 ~@2 bb5 ~@2 c6@3 bb5 g5@3 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 g5@6 d5@3 g5@3]/4", // Dm Eb F Gm Dm Eb F Eb …
  K: "[f5@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@9 eb6@2 d6 ~@2 c6 ~@2 bb5 ~@2 c6@3 bb5 g5@6 ~@15]/3", // Dm Eb F Gm Dm
  L: "[~@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 bb4@2 a4 ~@2 f4@5 ~@2]/2", // Dm Eb F Eb F Gm F
  M: "[~@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@9 d6@2 c6 ~@2 c6 ~@2 bb5 ~@2 c6@3 bb5 g5@3 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 g5@6 d5@3 g5@3]/4", // Dm Eb F Gm Dm Eb F Eb …
  N: "[f5@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@8 g5 ~@2 g5 ~@2 g5 ~@2 f5 ~@2 g5@3 bb5@4 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5]@3 [f4,f5,a5]@2 ~@8 bb5@2 a5 ~@2 f5@5 ~@2]/4", // Dm Eb F Gm Dm Eb F Eb …
  O: "[~@6 [d4,d5,f5]@2 [eb4,eb5,g5] ~@2 [eb4,eb5,g5] ~@2 [f4,f5,a5] ~@2 [g4,g5,bb5] ~@2 [d4,d5,f5] ~@2 [d4,d5,f5]@4 ~@21]/2", // Dm Eb F Gm Dm
})).s("gm_brass_section").gain(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@2 A@2 B@2 C@2 D E ~@6 F G H I J K L M N@4 D E J K J K O P J Q K Q R Q S T U S R Q S V L M N@4 D E R Q J Q S T U S R
  Q W X L M N@4 D E J K J Y
>`.pickRestart({
  A: "~@3 g5@2 ~ g5@2 ~ g5 ~ g5 ~@2 g5 g5@2 ~ g5@2 ~ g5@3",
  B: "[~@3 g4@2 ~ g4@2 ~ g4 ~ g4 ~@2 g4 g4@2 ~ g4@2 ~ g5@5 ~ g5@2 ~ g5@2 ~ g5 ~ g5 ~@2 g5 g5@2 ~ g5@2 ~ g5 ~@2]/2",
  C: "[~@21 g5@5 ~ g5@2 ~ g5@2 ~ g5 ~ g5 ~@2 g5 g5@2 ~ g5@2 ~ g5 ~@2, ~@21 f4 ~@26]/2",
  D: "~@3 g5@2 ~ g5@2 ~ g5 ~ g5 ~@2 g5 g5@2 ~ g5@2 ~ [f4,g5] ~@2", E: "~@3 g5@2 ~ g5@2 ~ g5 ~ g5 ~@2 g5 g5@2 ~@7",
  F: "~@3 g4, ~@18 f3 ~@5", G: "g4@2 ~ g4@2 ~ g4@2 ~ g4 ~ g4 ~@2 g4 g4@2 ~@7", H: "g3@23 ~",
  I: "g4@2 ~ g4@2 ~ g4@2 ~ g4 ~ g4 ~@2 g4 g4@2 ~ g4@2 ~ g4@2 ~", J: "g5@10 ~ g5 ~@2 g5@2 ~ g5 g5@2 ~ g5@3",
  K: "g6@10 ~ g6 ~@2 g6@2 ~ g6 g6@2 ~ g6@3", L: "g7@10 ~ g7 ~@2 g7@2 ~ g7 g7@2 ~ g7 ~@2",
  M: "g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2",
  N: "[g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g7 ~@2 g6@13 ~ g6 ~@2 g6 g6@2 ~ g6@2 ~ g5@5 ~@19 g5@5 ~ g5@2 ~ g5@2 ~ g5 ~ g5 ~@2 g5 g5@2 ~ g5@2 ~ g5 ~@2, ~@69 f4 ~@26]/4",
  O: "g3", P: "g4", Q: "g4@10 ~ g4 ~@2 g4@2 ~ g4 g4@2 ~ g4@3", R: "g3@10 ~ g3 ~@2 g3@2 ~ g3 g3@2 ~ g3@3",
  S: "g6@10 ~ g6 ~@2 g6@2 ~ g6 g5@2 ~ g5@3", T: "g4@10 ~ g3 ~@2 g3@2 ~ g3 g3@2 ~ g3@3",
  U: "g4@10 ~ g4 ~@2 g4@2 ~ g4 g5@2 ~ g5@3", V: "g5@10 ~ g4 ~@12", W: "g4@2 g4 ~@2 g4 ~@2 g4 ~@2 g4 ~@2 g4@2 ~ g4 g4@6",
  X: "g5@2 g5 ~@2 g5 ~@2 g5 ~@2 g5 ~@2 g5@2 ~ g5 g5@6", Y: "g6@10 ~ g6 ~@2 g6@2 ~@8",
})).s("gm_lead_2_sawtooth").gain(0.11)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C E A B C D A B C D A
  B C D A B C D A B F D A B C D A B C D A B C G
>`.pickRestart({
  A: "c2@10 ~ c2 c2@2 ~ c2@5 bb1@4", B: "d2@11 f2 g2@2 d2 g1@5 g1@4", C: "c2@11 c2 c2@2 ~ c2@5 bb1@4",
  D: "d2@11 f2 g2@2 d2 g1@5 bb1@4", E: "d2@11 d2 f2@2 f2 ~ g2@5 ~@3", F: "c2@13 ~@10 bb1",
  G: "d2@11 f2 g2@2 d2 g1@5 ~@4",
})).s("gm_acoustic_bass").gain(0.42)

// chords · epiano2
const epiano2 = note(`<
  ~@2 A B C B D B D B D B D B E F E F D B D B D B D B D B D B D B D B D B D B E G@2 F E G@2 F E F E H D B D B D B D B E
  G@2 F E G@2 F D B D B D B D B D B D B D B D I
>`.pickRestart({
  A: "~@3 bb4@5, [eb3,g3,bb3,c4,d4,g5], ~ eb5@7, ~ d5@3", B: "[a3,c4,d4,f4,g4]@3 [a3,c4,d4,f4,g4]",
  C: "~@5 g6@3, [eb3,g3,bb3,c4,d4]", D: "[eb3,g3,bb3,c4,d4]", E: "[g3,bb3,c4,d4,eb4]",
  F: "[c4,d4,f4,g4,a4]@3 [c4,d4,f4,g4,a4]", G: "[g4@11 ~ [bb3,c4]@12, [c4,d4,f4,a4]@23 [d4,eb4]@25, ~@11 g4@2 ~@11]/2",
  H: "[c4,d4,f4,g4,a4]", I: "[a3,c4,d4,f4,g4]@3 ~",
})).s("gm_epiano2").gain(0.19)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@2 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D A B A C A B A C A
  B A C A B A C A B ~@2 A B A C A B A C A B A E
>`.pickRestart({
  A: "[eb3,g3,bb3,d4]@2 ~ [eb3,g3,bb3,d4]@2 ~ [eb3,g3,bb3,d4]@2 ~@6 [bb3,d4,eb4,g4] ~@3 [bb3,d4,eb4,g4]@2 [bb3,d4,eb4,g4] ~@3", // Ebmaj7
  B: "[a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~@6 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4]@2 [a3,c4,d4,f4] ~@3", // Dm7
  C: "[a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~@6 [a3,c4,d4,f4] ~@3 [a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4] ~@2", // Dm7
  D: "[a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~@16", // Dm7
  E: "[a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4]@2 ~@6 [a3,c4,d4,f4] ~@9", // Dm7
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.4)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@2 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D A B A C A B A C A
  B A C A B A C A B ~@2 A B A C A B A C A B A D
>`.pickRestart({
  A: "~@2 [eb3,g3,bb3,d4] ~@2 [eb3,g3,bb3,d4] ~@2 [eb3,g3,bb3,d4] ~@8 [bb3,d4,eb4,g4] ~@6", // Ebmaj7
  B: "~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@8 [a3,c4,d4,f4] ~@6", // Dm7
  C: "~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@8 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@3", // Dm7
  D: "~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4] ~@15", // Dm7
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@2
  [x ~@2 x ~@8 x ~@2 x ~@4 x ~@2 x]!66
  [x ~@22 x]
  [x ~@2 x ~@8 x ~@2 x ~@4 x ~@2 x]!12
  [x!2 ~@2 x!2 ~@2]
>`).gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~ B A@3 B A@3
  B A@4
>`.pickRestart({
  A: "~@11 x ~@12", B: "~@11 x ~@5 x ~@6",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!79 [~ x ~@2]>").gain(0.54)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@3 C B@3 D B@3 C B@3 C B@3 D B@3 C B@3 C B@3 D B@3 C B@3 C B@3 C B@3 D B@3 C B@3 D B@3 C B@3 C B D ~ B@4 C B@3 C
  B@3 E
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x", B: "~ x ~ x", C: "~@3 x ~@3 x ~ x ~@2",
  D: "~@6 x ~@7 x!2 ~@2 x ~ x ~@3", E: "~@3 x ~@3 x ~@4",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2
  [x ~ x ~@3 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!47
  [x ~ x ~@3 x ~ x!2 ~ x ~@12]
  [x ~ x ~@3 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!18
  [~ x ~@2]
  [x ~ x ~@3 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!12
  [x ~ x ~@3 x ~ x!2 ~ x!2 ~ x!2 ~@8]
>`).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~@11 A ~@11 A ~@15 A ~@7 A ~@9 A ~@14>".pickRestart({
  A: "~@23 x",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@2 [~ x ~@6]!80>").gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@7 B ~@11 B ~@11 B ~@15 B ~@7 B ~@9 B ~@14>".pickRestart({
  A: "~@21 x ~ x", B: "~@7 x",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<[~@16 x!8] [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~@3] ~@80>").gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!47
  [x ~ x!2 ~ x!2 ~ x!2 ~ x ~@12]
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!18
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!12
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@8]
>`).gain(0.18)

stack(
  brass_section, lead_2_sawtooth, bass, epiano2, electric_guitar_clean, electric_guitar_clean_2, kick, kick_soft, clap,
  snare, hihat, low_tom, open_hat, mid_tom, high_tom, tambourine
)