Strudelify

three in the morning

Clark Plazmataz Powell

KeyF majorTempo195 bpm
0:00/0:00
// three in the morning — Clark Plazmataz Powell
// 195 bpm, 6/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (6/8 at bar 1, 2/2 at bar 89, 6/8 at bar 135) are rendered on a constant 6/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3132036; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 176 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(195/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · acoustic bass · "Contrabass"
const bass = note(`<
  ~@16 A@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 F G H I J K L@2 M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH X AI U V W X
  Y Z AA AB AC AD AE AF AG AH AJ AK@3 ~@14 AL@5 AM@2 AN@8 AO AP@3 ~@5 AQ@8 AR@6 AS@8 AT@8 ~@23 AU@3
>`.pickRestart({
  A: "d2/2", B: "a2/2", C: "[f2@29 e2@3]/2", D: "[d2@29 a2@3]/2", E: "a1/2", F: "a1 bb1", G: "a1 c2", H: "d2@13 a1@3",
  I: "g1", J: "a1 g1", K: "a1 eb2", L: "[d2@3 bb1@2 gb1@3 gb1@13 f1@3 gb1@8]/2", M: "g1 a1", N: "bb1 d2",
  O: "eb2@3 d2@2 eb2@3 e2@3 eb2@2 e2@3", P: "f2 db3", Q: "e3 eb3", R: "d3", S: "c3", T: "c2", U: "d2 a2", V: "f2 e2",
  W: "d2 a1", X: "a2 f2", Y: "e2 a1", Z: "c2 f2", AA: "e2 c2", AB: "a2 e2", AC: "bb1 f2", AD: "f2 d2", AE: "bb1 a2",
  AF: "a2 d2", AG: "db2 a1", AH: "db2 bb2", AI: "~ e2", AJ: "a2", AK: "[e2@11 ~@5]/3",
  AL: "[~ a2@2 f2@2 e2@2 c2@2 d2@2 f2@2 a2@2 c2@2 d2@2 c2@2 b1@2 a2@2 f2@2 e2 d2 e2@2 a2@2 d2 ~ e2 ~ f2 ~ a2]/5",
  AM: "[~@2 d3@3 bb2@2 a2@3 db3@3 a2@2 db3@3 d3@2 ~@2 db3@2 ~@2 bb2@4 a2@2]/2",
  AN: "[~ a2 ~ d2@2 g2 ~ db2@2 d2@2 f2@2 g2@2 a2@2 d2@2 f2@2 e2@2 c2@2 d2@2 f2@2 g2@2 a2@2 f2@2 g2@2 f2@2 c2@2 d2@2 f2@2 g2@2 ab2@2 d2@2 ab2@2 c3@2 db3@2 d3 ~ db3 ~ bb2@2 ab2]/8",
  AO: "~@2 g2 ~ f2@2 e2@2 d2@2 ab2@2 g2@2 f2@2", AP: "[e2 d2@16 ~@7]/3",
  AQ: "[~ d2@12 f2@8 e2@8 c2@8 d2@8 a2@8 e2@8 c2@3]/8", AR: "[~@5 e2@8 c2@4 a2@4 f2@8 e2@19]/6",
  AS: "[~ d2@32 c2@31]/8", AT: "[~ bb1@32 a1@16 a1@15]/8", AU: "[~ a2@16 ~@7]/3",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A ~ A ~ A ~ A ~ B ~@2 C ~ D E ~ E ~ E F E ~ E ~ E ~ E F E ~ A ~ B ~@2 C ~ D A ~ B ~@2 C ~ D@3 G B ~ B@2 ~ D@2 G B
  ~ B@2 ~ D@2 G B ~ B@2 ~ D@2 G B ~ B@2 ~@97
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@5 x ~@7 x ~@2", C: "x ~@4 x ~@5 x ~@4", D: "x", E: "x ~@12 x ~@2", F: "~@5 x ~@10",
  G: "~@13 x ~@2",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@112 [~@3 x ~@4]!16 ~@48>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B A B C D E F E@2 G H G H G H G ~ G H G H G H G ~ A B C D E F E@2 A B C D E F E@3 ~ B C E I J ~ E ~ B C E I J ~
  E ~ B C E I J ~ E ~ B C E I J ~@29 K L M N B ~@63
>`.pickRestart({
  A: "~@5 x ~@10", B: "x", C: "~@11 x ~@4", D: "x ~@12 x ~@2", E: "~@13 x ~@2", F: "x ~@4 x ~@10", G: "~ x",
  H: "~@8 x ~@4 x ~@2", I: "x ~@2 x ~@7 x ~@4", J: "~@3 x ~@4 x ~@2 x ~@4", K: "x!2", L: "x ~ x ~@2 x!2 ~",
  M: "x ~@3 x ~@2 x", N: "~ x!7",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<[~@5 x ~@10] x [~@5 x ~@10] x [~@5 x ~@10] x ~@170>").gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@52 A ~@2 B ~@4 A ~@2 B ~@4 A ~@2 B ~@4 A ~@99>".pickRestart({
  A: "x ~@4 x ~@10", B: "~@8 x ~@2 x ~ x ~@2",
})).gain(0.4)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[~ x]!79 ~@17 [~@3 x ~@3 x]!32 ~@48>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@15 A ~@23 A ~@7 A ~@48 B ~@7 B ~@71>".pickRestart({
  A: "x", B: "~ x ~@6",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct(`<
  A@15 B C ~@2 D C ~@2 B ~@3 D C ~@2 B A@7 B A@7 B A@5 B A@7 B A C A@5 B A@7 B A C ~@16 E F@2 G H F@3 I F@2 G F@3 C H@2
  F H@2 F@2 H@9 ~@48
>`.pickRestart({
  A: "x ~@7 x ~@4 x ~@2", B: "~@8 x ~@4 x ~@2", C: "x", D: "~@13 x ~@2", E: "~@3 x ~ x ~ x", F: "x!2 ~ x!3 ~ x",
  G: "x!2 ~ x ~ x ~ x", H: "~ x ~ x!3 ~ x", I: "x ~@2 x ~ x ~ x",
})).gain(0.4)

// drums · mt
const mt = s("mt").struct("<~@55 A ~@7 A ~@7 A ~@7 B ~@96>".pickRestart({
  A: "x ~@4 x ~@10", B: "x ~@10 x ~@4",
})).gain(0.4)

stack(bass, kick, rim, snare, snare_soft, low_tom, pedal_hat, crash, ride, mt)