Strudelify

Pop Muzik

M

KeyA♭ majorTempo120 bpm
0:00/0:00
// Pop Muzik — M
// 120 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 1 "organ2" named as an organ, played on drawbar organ (its synth strings 1 patch is not one); ch 2 "organ 22" named as an organ, played on drawbar organ (its synth strings 1 patch is not one)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · drawbar organ · "organ2"
const drawbar_organ = note("<A@3 B ~@78>".pickRestart({
  A: "[~@10 [eb4,ab4,eb5]@4 c5@5 [c4,eb4,ab4]@5 [ab4,db5,f5]@2 [c5,eb5]@2 ~ [gb4,db5]@5 bb4@4 [ab4,db5,f5]@5 [f4,ab4,db5]@5]/3", // Ab5 Ab Db Cm Gb5 Db
  B: "[ab4,c5,eb5]@15 ~", // Ab
})).s("gm_drawbar_organ").gain(0.72)

// other · drawbar organ · "organ 22"
const drawbar_organ_2 = note("<A@2 B C ~@78>".pickRestart({
  A: "[~@10 ab2@4 c3@4 ~ eb3@4 ~ db3@4 ~ gb2@3]/2", B: "~@2 gb2@4 db2@4 ~ db2@4 ~", C: "ab2@15 ~",
})).s("gm_drawbar_organ").gain(0.72)

// chords · pad poly · "rythm2"
const pad_poly = note("<~@3 A B@12 C@2 D@6 ~@2 D@4 B@12 ~@2 B@8 ~@4 B@4 ~@4 B@17 ~>".pickRestart({
  A: "~ [ab4,c5] ~ [ab4,c5] ~ [ab4,c5] ~ [ab4,c5]", B: "~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [bb3,db4,gb4] ~ [f3,ab3,db4]",
  C: "~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [gb3,bb3,db4,eb4] ~ [f3,ab3,db4]", // Ab Ebm7 Db
  D: "~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [gb3,bb3,db4] ~ [f3,ab3,db4]", // Ab Gb Db
})).s("gm_pad_poly").gain(0.56)

// bass · synth bass 1 · "base12"
const bass = note("<~@4 A@14 B@6 C@2 B@16 D E B@8 ~@4 B@4 F@4 B@17 ~>".pickRestart({
  A: "ab2@3 ~ ab2@3 ~ gb2@3 ~ db2@3 ~", B: "ab2@3 ~ ab2@2 eb2 f2 gb2@3 ~ db2@3 ~", C: "ab2@3 ~ ab2@3 ~ ab2@3 ~ ab2@3 ~",
  D: "ab2@2 c2 eb2 ab2@2 eb2@2 ab2 eb2 ab2 eb2 c2@2 ab2@2", E: "ab2@2 c2 eb2 ab2@2 eb2@2 ab2 eb2 ab2 eb2 ab1@3 ~",
  F: "ab2@3 ~ ab2@2 eb2 f2 gb2 ~ gb3@2 db2 ~ db3@2",
})).s("gm_synth_bass_1").gain(0.72)

// other · distortion guitar · "scratchy sound2"
const distortion_guitar = note("<~@16 A@2 ~@8 B@2 C B C D C B C D ~@16 A@3 E A@3 E ~@10 A E ~@2 A E ~@6>".pickRestart({
  A: "ab4 eb4 c4 ab3 ab4 eb4 ab4 c5 gb4 bb4 db5 eb5 ab4 db5 ab4 f4",
  B: "ab4 ~ ab4!3 ~ c4 db4 eb4 ~ eb4!2 db4 ~ eb4 db4", C: "ab4!5 ~ c4 db4 eb4 ~ eb4!2 db4 ~ eb4 db4",
  D: "ab4 ~ ab4!3 ~ c4 db4 eb4 ~ eb4!2 db4!2 eb4 db4", E: "ab4 eb4 c4 ab3 ab4 eb4 ab4 c5 gb4 bb4 db5 eb5 ab4 ~@3",
})).s("gm_distortion_guitar").gain(0.48)

// other · tubular bells · "bells2"
const tubular_bells = note("<~@48 [ab4@3 ~@5 eb5@3 ~ bb4@3 ~]!4 [ab4@15 ~] ~ [ab4@15 ~] ~@27>")
  .s("gm_tubular_bells").gain(0.72)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A B@20 A C B@15 D A@2 B D B D B D B D B D B D B D B D A@21 ~>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x!3 ~", D: "x ~ x ~ x ~@2 x",
})).gain(0.48)

// drums · splash
const splash = s("cr").struct(`<
  ~@4 A@4 B A B A B A B A B A B@3 A@3 C@2 B A B A B A B A B A B A B A B A C ~ B A B A B A B A B A B A B A B A ~@6 C ~@3
  C ~@3 C ~ C ~ C ~ C ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "x ~@2 x ~@4", C: "x",
})).gain(0.48)

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

stack(drawbar_organ, drawbar_organ_2, pad_poly, bass, distortion_guitar, tubular_bells, snare, mid_tom, splash, cabasa)