Strudelify
Saturday In The Park cover art

Chicago V

Saturday In The Park

Chicago

KeyC majorTempo135 bpm
0:00/0:00
// Saturday In The Park — Chicago
// 135 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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.

// other · trumpet
const trumpet = note(`<
  A@8 B C D@2 B C E@2 F G H@2 I@2 ~@12 B C D@2 B C E@2 F G H@2 I@2 ~@4 J@2 K ~ L M N@2 O P Q@2 R@2 S@2 A@4 B C D@2 B C
  E@2 F G H@2 I@2 ~@8 T@2 U V W@2 ~
>`.pickRestart({
  A: "[e4@3 ~ d4@3 ~ d4 ~ d4@3 ~ e4@5 ~ d4@3 ~ d4 ~ d4@3 ~ e4@5 ~ d4@3 ~ d4 ~ d4@3 ~ e4@5 ~ g4@3 ~ g4 ~ g4@4 ~@2]/4",
  B: "c5@2 ~ c5@4 ~", C: "[f#4,c5]@4 ~@2 [f#4,c5]@5 ~@3 [a4,d5] ~",
  D: "[[f4,a4]@3 ~ [f4,a4]@3 ~ [f4,a4]@4 ~@2 [e4,g4]@8 ~@2 e4 ~ f4 ~ f#4 ~ g4 ~]/2", // F Em
  E: "[[f4,a4]@3 ~ [f4,a4]@3 ~ [f4,a4]@4 ~@2 [e4,g4]@6 [e4,g4]@3 ~ [e4,g4] ~ [e4,g4]@4 ~@2]/2", // F Em
  F: "b4 ~ c#5@3 ~ d5@3 ~ f#5@4 ~@2", G: "g5 ~ f#5@3 ~ e5@3 ~ d5@3 ~ a4 ~",
  H: "[e5@3 ~ e5 ~ f#5 ~ e5@3 ~ c#5@16 ~@4]/2", I: "[c5 ~ b4@3 ~ a4@4 ~@2 g4 ~ a4@4 ~@14]/2",
  J: "[~@14 a3@4 e4 ~ c4 ~ g4 ~ e4 ~ b4 ~ g4 ~ d4 ~]/2", K: "c5 ~ d5 ~ d5@11 ~", L: "f5@5 ~@3 e5@3 ~ c5 ~ a#4@2",
  M: "~@2 a#4@4 ~@6 a#4 ~ c5 ~", N: "[f5 ~ e5@3 ~ d5@3 ~ c5@3 ~ a#4@8 ~@8 a#4 ~]/2", O: "f5@3 ~ g5@5 ~@6 [f5,g#5]",
  P: "[f5,g#5] [d#5,g5] ~ [c#5,f5] g5@5 ~@3 g5@3 ~", // Fm D# C#
  Q: "[c#5@3 ~ d#5@3 ~ c#5 ~ c5@3 ~ a#4@4 ~@2 d#4 f4 ~ g4 g#4 a#4 ~ c5 c#5 d#5 ~ f5]/2",
  R: "[c5 ~ c5@3 ~ b4@3 ~ b4@3 ~ c5@5 d5 c5 ~ d5@5 ~@3 c5@2]/2", S: "[~@3 d5 c5 ~ d5@5 ~@3 f5@8 d5@3 ~ c5@3 ~@3]/2",
  T: "[b4 ~ c5 ~ b4@3 ~ b4 ~ c5 ~ b4 ~ c5@4 b4 ~ c5@3 ~ b4 ~ c5 ~ b4@3 ~]/2", U: "c5 ~ d5 ~ c5@3 ~ c5 ~ d5 ~ c5 ~ d5@2",
  V: "~@2 c5 ~ d5@3 ~ c5 ~ d5 ~ c5@3 ~", W: "[g4 ~ a4 ~ g4@3 ~ g4 ~ f4@3 ~ e4@16 ~@2]/2",
})).s("gm_trumpet").gain(0.51)

// other · french horn
const french_horn = note(`<
  A@8 B C D@2 B C E@2 F G H@2 ~@2 I@3 J K@2 L M ~@4 B C D@2 B C E@2 F G H@2 ~@2 I@3 J K@2 L M N O P@2 Q R S@2 T@2 U@2
  V@4 B C D@2 B C E@2 F G H@2 ~@2 I@3 J K@2 L M W X W X Y@2 ~
>`.pickRestart({
  A: "[c4@3 ~ c4@3 ~ c4 ~ c4@3 ~ c4@5 ~ c4@3 ~ c4 ~ c4@3 ~ c4@5 ~ c4@3 ~ c4 ~ c4@3 ~ c4@5 ~ c4@3 ~ c4 ~ c4@4 ~@2]/4",
  B: "c5@2 ~ c5@4 ~", C: "f#4@4 ~@2 f#4@5 ~@3 a4 ~", D: "[f4@3 ~ f4@3 ~ f4@4 ~@2 e4@8 ~@10]/2",
  E: "[f4@3 ~ f4@3 ~ f4@4 ~@2 e4@6 e4@3 ~ e4 ~ e4@4 ~@2]/2", F: "d4@4 ~@2 f#4@3 ~ a4@4 ~@2",
  G: "b4@4 ~@2 g4@5 ~@3 a4 ~", H: "[c#5@3 ~ c#5 ~ d5 ~ c#5@3 ~ a4@11 ~@9]/2",
  I: "[~@10 b4@3 ~ c5@8 ~@4 c5@3 ~ c5@5 ~@3 g4@3 ~ e4@4 ~@2]/3", J: "b4@4 ~@2 d5@3 ~@7",
  K: "[g4@11 ~@3 a3@4 e4 ~ c4 ~ g4 ~ e4 ~ b4 ~ g4 ~ d4 ~]/2", L: "c5 ~ d5 ~ d5@11 ~", M: "~@2 d4@3 ~ g4@3 ~ a4@4 ~@2",
  N: "d5@5 ~@3 c5@3 ~ a4 ~ g4@2", O: "~@2 g4@4 ~@6 g4 ~ a4 ~", P: "[a#4 ~ c5@3 ~ a#4@3 ~ a4@3 ~ g4@11 ~@5 g4 ~]/2",
  Q: "a4@3 ~ a#4@5 ~@7", R: "~@4 e5@5 ~@3 e5@3 ~", S: "[c#5@3 ~ d#5@3 ~ c#5 ~ c5@3 ~ a#4@4 ~@14]/2",
  T: "[c5 ~ c5@3 ~ b4@3 ~ b4@3 ~ c5@5 d5 c5 ~ d5@5 ~@3 c5@2]/2", U: "[~@3 d5 c5 ~ d5@5 ~@3 f5@8 d5@3 ~ c5@3 ~@3]/2",
  V: "[c4@3 ~ c4@3 ~ c4 ~ c4@3 ~ c4@5 ~ c4@3 ~ c4 ~ c4@3 ~ c4@5 ~ c4@3 ~ c4 ~ c4@3 ~ c4@5 ~ e4@3 ~ e4 ~ e4@4 ~@2]/4",
  W: "g4 ~ a4 ~ g4@3 ~ g4 ~ a4 ~ g4 ~ a4@2", X: "~@2 g4 ~ a4@3 ~ g4 ~ a4 ~ g4@3 ~",
  Y: "[e4 ~ f4 ~ e4@3 ~ e4 ~ d4@3 ~ c4@16 ~@2]/2",
})).s("gm_french_horn").gain(0.46)

// other · trombone
const trombone = note(`<
  A@8 ~@7 B ~@2 C@2 ~ D E@3 F G ~@2 H I@4 ~@7 B ~@2 C@2 ~ D E@3 F G ~@2 H J K L@2 M N ~@6 O@4 ~@7 B ~@2 C@2 ~ D E@3 F G
  ~@2 H P Q R S T@2 ~
>`.pickRestart({
  A: "[a3@3 ~ a3@3 ~ a3 ~ a3@3 ~ a3@5 ~ a3@3 ~ a3 ~ a3@3 ~ a3@5 ~ a3@3 ~ a3 ~ a3@3 ~ a3@5 ~ a3@3 ~ a3 ~ a3@4 ~@2]/4",
  B: "~@8 c4 ~ c4@4 ~@2", C: "f#4@11 ~@5", D: "~@2 a3 ~ d4 ~ f#4 ~ e4 ~ a4 ~ f#4 e4 d4 ~",
  E: "[d4@8 ~@6 g4@12 g4@4 g4@5 ~@13]/3", F: "g4@4 ~@2 b4@3 ~@7", G: "e4@11 ~@5", H: "~@2 d4@3 ~ e4@3 ~ f#4@4 ~@2",
  I: "[g4@5 ~@3 g4 ~ e4@3 ~ d4@5 ~ d4@3 ~ d4 ~ e4 ~ f4 ~ e4@8 ~@2 e4 ~ f4@3 ~ e4@11 ~@7]/4",
  J: "a#4@5 ~@3 a#4@3 ~ a4 ~ g4@2", K: "~@2 g4@4 ~@6 g4 ~ a4 ~", L: "[a#4 ~ c5@3 ~ a#4@3 ~ a4@3 ~ g4@11 ~@5 g4 ~]/2",
  M: "a4@3 ~ a#4@5 ~@7", N: "~@4 a#4@5 ~@3 e5@3 ~",
  O: "[[g3,a3]@3 ~ [g3,a3]@3 ~ [g3,a3] ~ [g3,a3]@3 ~ a3@4 ~@2 a3@3 ~ a3 ~ a3@3 ~ a3@5 ~ a3@3 ~ a3 ~ a3@3 ~ [g3,a3]@5 ~ a3@3 ~ a3 ~ a3@4 ~@2]/4", // Gsus2
  P: "d4 ~ e4 ~ d4@3 ~ d4 ~ e4 ~ d4 ~ f4@2", Q: "~@2 d4 ~ e4@3 ~ d4 ~ e4 ~ d4@3 ~",
  R: "e4 ~ f4 ~ e4@3 ~ e4 ~ f4 ~ e4 ~ f4@2", S: "~@2 e4 ~ f4@3 ~ e4 ~ f4 ~ e4@3 ~",
  T: "[c4 ~ d4 ~ c4@3 ~ c4 ~ a3@3 ~ g3@16 ~@2]/2",
})).s("gm_trombone").gain(0.41)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B C D A B C E F G C E F G C H I J K@2 L M C@3 N O@2 P Q C@2 R S F G C E F G C H I J K@2 L M C@3 N O@2 P Q D@4 T@4
  C@3 U F B C E F G C E F G C H I J K@2 L M C@3 N O@2 P Q V@2 W@2 X@2 ~
>`.pickRestart({
  A: "a2 ~ a2!2", B: "d2!4", C: "g2!4", D: "c2!4", E: "c2@4 c2@4 c3 ~ b2 ~ a2 ~ g2 ~", F: "a2!4",
  G: "d2@4 d2@4 d2@4 e2 ~ f#2 ~", H: "c2!2 g2 c3", I: "[b2,a3]@2 ~ d3", J: "e3@3 ~",
  K: "[d3@4 ~@2 d3 ~ d3@4 ~@2 d3@4 d3 ~ d3@4 ~@2 d3 ~ d3@4, a3@3 ~@5]/2", L: "c3 ~ b2@4 a2@4 ~@2 g2@4, g3@2 ~ e3@4 ~",
  M: "f#2 ~ a2 ~ d3 ~ f#3 ~ e3 ~ a3 ~ f#3 e3 d3 ~", N: "g2@4 g2@4 ~@2 g2@4 g2 ~",
  O: "[a2@12 ~@2 a2@4 e3 ~ c3 ~ g3 ~ e3 ~ b3 ~ g3 ~@3]/2", P: "a3 ~ c4 ~ c4@12, d3@3 ~", Q: "~@2 d3@4 d3@4 d3@4 d2 ~",
  R: "c2!3 g2", S: "c3!3 g2", T: "d#2!4", U: "g2@4 a2 ~ b2 ~ d3 ~ e3 ~ g3 ~ e3 ~",
  V: "[g2@4 ~@4 d3 ~ b2 ~ a2 ~ g2@8 b2@4 d3@4 g3 ~]/2",
  W: "[c3@4 ~@2 e2 ~ g2 ~ a2 ~ c3 ~ c3@4 ~@4 e2 ~ g2 ~ a2 ~ c3@4]/2", X: "[e3 ~ d3 ~ c3@4 c3 ~ a2 ~ g2 ~ c2@16 ~@2]/2",
})).s("gm_acoustic_bass").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B@5 C@3 D E@3 F G C H@2 I J K L@3 H@3 J L@4 B C B C B C B A C@2 H M C J L@3 N O P H J L@8 I J@2 Q B R A@10 C@2 H M
  L P B A@3 H S H J T U B V W ~@2
>`.pickRestart({
  A: "x ~@3 x!2 ~ x", B: "x ~@2 x!3 ~ x", C: "x ~@2 x ~ x ~ x", D: "x ~@2 x ~ x!3", E: "~@2 x ~@2 x ~ x",
  F: "~@2 x ~@2 x!2 ~", G: "x ~@2 x ~@2 x ~", H: "x ~@2 x!2 ~@2 x", I: "x!2 ~ x ~ x ~ x", J: "~ x ~ x ~ x ~ x",
  K: "~ x!3", L: "x!4", M: "~ x!2 ~@2 x!2 ~", N: "x ~ x ~ x ~ x!2", O: "x!2 ~ x!2 ~@2 x", P: "x ~ x ~ x!4",
  Q: "x!2 ~ x!5", R: "~@3 x!3 ~ x", S: "~ x!7", T: "x!2 ~ x!3 ~ x", U: "~ x ~ x!3 ~ x", V: "x ~@2 x!4 ~",
  W: "x!3 ~ x!2 ~ x",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!7 [~@3 x!5] [x ~@2 x ~@3 x] [~ x ~ x]!12 [~ x!7] [~ x ~ x]!77 ~@2>").gain(0.46)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@7 B A@83 C A C D E A@3 ~@2>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x ~ x!5 ~", D: "x ~ x ~ x ~@2 x", E: "~ x!3",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@3 A ~@3 A ~@7 B ~@9 C ~@3 D ~@7 E ~@5 D ~@7 D ~@7 D ~@3 F ~@3 A ~@3 A ~@3 A ~@11 D ~ D ~@7
>`.pickRestart({
  A: "~@3 x!3 ~@2", B: "~@5 x ~@2", C: "~ x ~ x ~@4", D: "~@5 x!2 ~", E: "~@3 x!2 ~@3", F: "~@5 x!3",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@3 A ~@3 A ~ A ~ A ~ A@4 ~ A@70 ~ B C A@2 ~@2 D ~>".pickRestart({
  A: "~@7 x", B: "~ x ~@5 x", C: "~@3 x", D: "x",
})).gain(0.41)

// drums · china
const china = s("cr").struct(`<
  A ~@2 B A ~@3 A ~ C ~ A ~@3 A@2 D@2 ~@2 A ~@3 A ~ A ~ A ~@3 A@2 ~@2 A@2 ~@2 E A D@2 A ~ A@5 ~ A ~ A ~@3 A ~@3 A ~ A@6
  ~@4 A ~@3 A ~ B@2 A ~ B F ~ A@4 ~ A ~@4 A ~
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~@2 x ~@4", D: "x!2", E: "x!2 ~@6", F: "x!2 ~@2",
})).gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@7 A B@2 C@2 B C@2 B@3 A@15 D ~@3 A ~@3 A ~@2 A@8 E ~@2 F ~@12 A@12 E ~@6 G A@2 E ~ H A@6 E ~
>`.pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~", C: "x ~ x!2", D: "x ~ x ~ x!2 ~ x", E: "x", F: "~ x ~@6", G: "~@3 x", H: "~ x!3",
})).gain(0.36)

stack(trumpet, french_horn, trombone, bass, kick, snare, low_tom, pedal_hat, mid_tom, open_hat, china, ride_bell)

More by Chicago