Strudelify

nostalgia in times square

Charles Mingus

KeyF majorTempo144 bpm
0:00/0:00
// nostalgia in times square — Charles Mingus
// 144 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5937586; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 33 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(144/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "B♭ Trumpet"
const trumpet = note("<~@4 A B@2 C D E F C D G H I J B@2 C D E F C D G H I J ~@4>".pickRestart({
  A: "~@11 c4", B: "eb4@2 eb4@7 ~@2 c4", C: "eb4!3 f4@2 f4 eb4@2 eb4 db4@2 bb3", D: "eb4@2 eb4@7 ~@2 f4",
  E: "ab4@2 ab4@7 ~@2 f4", F: "ab4@2 ab4@7 ~@2 c4", G: "c5@4 f5@2 c5 d5 c5 f4@3 a4@4 b4@6 f4@2",
  H: "f4@3 g4@2 eb4 ~@5 f4", I: "eb4@3 eb4@3 eb4@2 f4 ~@2 f4", J: "~@2 c4 d5@2 db5 c5@2 a4 f4@2 c4",
})).s("gm_trumpet").gain(0.3)

// chords · piano
const piano = note("<~ A@8 B@2 A@2 C D E F A@4 B@2 A@2 C D E F G@3 H>".pickRestart({
  A: "~@2 [f3,eb4,f4,a4,c5]@3 ~@3 [eb3,db4,eb4,g4,bb4]@3 ~", B: "~@2 [ab3,eb4,f4,ab4,b4]@3 ~@3 [db3,db4,f4,ab4,b4]@3 ~",
  C: "[d3,d4,f4,a4,c5] [a3,d4,f4,a4,c5] [g3,d4,f4,g4,b4]!2", // Dm7 G7
  D: "[c3,c4,eb4,g4,bb4] [g3,c4,eb4,g4,bb4] [a3,eb4,f4,a4,c5] [c4,eb4,f4,a4,c5]", // Cm7 F7
  E: "[bb2,db4,f4,ab4,bb4]@6 [bb2,db4,f4,ab4,bb4]@6 [eb3,db4,eb4,g4,bb4]@3 ~ [eb3,db4,eb4,g4,bb4]@2 ~@4 [f3,eb4,f4,a4,c5]@2", // Bbm7 Eb7 F7
  F: "~@4 [c3,c4]@2 [d4,d5]@3 ~ [db4,db5]@2 [c4,c5]@3 ~ [a3,a4]@2 [f3,f4]@3 ~ [c3,c4]@2", // C D Db C A F C
  G: "[f3,eb4,f4,a4,c5] ~ [eb3,db4,eb4,g4,bb4] ~", H: "[f3,eb4,f4,a4,c5]@2 ~@2 [eb3,db4,eb4,g4,bb4] ~@3",
})).s("gm_piano").gain(0.3)

// bass · acoustic bass
const bass = note("<A B@8 C@2 B@2 D@2 E F B@4 C@2 B@2 D@2 E F G@4>".pickRestart({
  A: "~@11 c3", B: "f2@3 ~@2 f2 eb2@3 ~@2 e2", C: "f2@3 ~@2 f2 db2@3 ~@2 e2", D: "d2 a2 g2 d2",
  E: "bb1@3 bb1@3 eb2@2 eb2 ~@2 f2", F: "~@2 c2 d3@2 db3 c3@2 a2 f2@2 c2",
  G: "[~@3 f2@2 eb2@3 ~ e2@2 f2@3 ~ f2@2 eb2@3 ~ e2@2 f2@3 ~ f2@2 eb2@3 ~ e2@2 f2@3 ~ f2@2 eb2@3 ~@4]/4",
})).s("gm_acoustic_bass").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!15 ~ [x!2]!11 ~ [x!2]!4>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<A B@12 C B D A B@8 C B D A B@4>".pickRestart({
  A: "~@21 x!3", B: "~ x ~ x", C: "~@4 x ~ x!4 ~@8 x ~@5", D: "~ x ~@2",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~
  [x ~@2 x ~ x!2 ~@2 x ~ x]!14
  [x ~@2 x ~ x!2 ~@4 x]
  ~
  [x ~@2 x ~ x!2 ~@2 x ~ x]!10
  [x ~@2 x ~ x!2 ~@4 x]
  ~
  [x ~@2 x ~ x!2 ~@2 x ~ x]!4
>`).gain(0.3)

stack(trumpet, piano, bass, kick, snare, hihat)