Strudelify

that man

Caro Emerald

KeyC♭ majorTempo100 bpm
0:00/0:00
// that man — Caro Emerald
// 100 bpm, 4/4, key Cb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4919479; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · flute · "Flüt"
const flute = note(`<
  ~@7 A ~ B C A ~ B C D ~ E F G ~ H I J ~ H I J A ~ B C D ~ E F G ~ H I J ~ H I J ~ H I J ~ H I J ~ H I J ~
>`.pickRestart({
  A: "~@4 [eb5,e5] eb5@2 ~ bb5@2 ~ eb5@2 db5 eb5@2, ~@5 gb5 ~@10", B: "~@5 eb5 e5 g5", C: "ab5 g5 gb5 f5",
  D: "e5@4 eb5@11 ~", E: "~@12 eb6 b5 ab5 eb5", F: "~@6 bb4 gb5", G: "db5@2 e5!2", H: "~@13 eb5 e5 g5", I: "ab5 ~@7",
  J: "~@12 eb5 [e5,ab5] eb5 [e5,ab5]", // E
})).s("gm_flute").gain(0.3)

// other · tenor sax · "TenorSaks"
const tenor_sax = note("<~@4 A@4 ~@3 A ~@7 B A@9 ~@7 B A@20 C>".pickRestart({
  A: "ab3@2 ~@2 bb3@2 ~@2 b3 ~@2 bb3@3 eb3@2", B: "~@4 eb3 db3 b2 bb2", C: "ab3 ~@7",
})).s("gm_tenor_sax").gain(0.3)

// other · alto sax · "Alto Saksafon"
const alto_sax = note("<~@4 A@3 ~@2 B C ~@2 B C D E F G H A@8 ~@2 B C D E F G H A@20 ~>".pickRestart({
  A: "~@11 eb5@3 db5@2", B: "~@5 eb5 e5 g5", C: "ab5 g5 gb5 f5", D: "e5 eb5@3", E: "db5 ~", F: "~@5 ab4 bb4 b4",
  G: "db5@4 ~@2 eb4 b4", H: "g4@2 bb4!2",
})).s("gm_alto_sax").gain(0.3)

// bass · electric bass pick · "Bas Gitar"
const bass = note(`<
  A@4 B@5 C B@3 C B C D@3 E B C B F B C B F B@2 C B C D@3 E B C B F B C B F B C B F B C B F B C B F A
>`.pickRestart({
  A: "ab2 ~@7", B: "ab2 ~ bb2 ~ b2 ~ eb3 ~", C: "ab2@2 ~@2 bb2@2 ~@2 b2@2 ~@2 eb3 ~ bb2 ~", D: "db3 ~@3",
  E: "~@4 eb3 db3 b2 bb2", F: "ab2@2 ~@2 bb2@2 ~@2 b2@2 ~@2 eb3 ~ eb2 ~",
})).s("gm_electric_bass_pick").gain(0.3)

// chords · piano · "Piyano" · Abm Bbdim Abm Bbdim Dbm Bbdim Abm Bbdim …
const piano = note(`<
  [ab2 [ab4,b4,eb5] bb2 [bb4,db5,e5] b2 [ab4,b4,eb5] eb2 [bb4,db5,e5]]!16
  [[db4,e4,ab4] ~@3]!3
  [[db4,e4,ab4]@2 ~@2 eb3 db3 b2 bb2, db3@2 [bb3,db4,e4] ~]
  [ab2 [ab4,b4,eb5] bb2 [bb4,db5,e5] b2 [ab4,b4,eb5] eb2 [bb4,db5,e5]]!13
  [[db4,e4,ab4] ~@3]!3
  [[db4,e4,ab4]@2 ~@2 eb3 db3 b2 bb2, db3@2 [bb3,db4,e4] ~]
  [ab2 [ab4,b4,eb5] bb2 [bb4,db5,e5] b2 [ab4,b4,eb5] eb2 [bb4,db5,e5]]!20
  [[ab4,b4,eb5] ~@3]
>`).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@16 [x ~@2 x!2 ~@2 x]!3 [x!2 ~@2] ~@13 [x ~@2 x!2 ~@2 x]!3 [x!2 ~@2] ~@21>").gain(0.3)

// drums · rim
const rim = s("rim").struct(`<
  [~ x ~ x ~ x ~ x]!16
  ~@3
  [~@5 x ~ x]
  [~ x ~ x ~ x ~ x]!13
  ~@3
  [~@5 x ~ x]
  [~ x ~ x ~ x ~ x]!20
  ~
>`).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@16 [~@3 x ~@7 x ~@4]!3 ~@14 [~@3 x ~@7 x ~@4]!3 ~@22>").gain(0.3)

// drums · splash
const splash = s("cr").struct("<~@3 A ~@3 A ~@3 A ~@7 A ~@8 A ~@7 A ~@20 B>".pickRestart({
  A: "~@4 x!4", B: "x",
})).gain(0.3)

stack(flute, tenor_sax, alto_sax, bass, piano, kick, rim, snare, splash)