Strudelify
KeyE♭ majorTempo100 bpm
0:00/0:00
// valerie — AnnenMayKantereit
// 100 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Trumpet" named as a brass, played on trumpet (its slap bass 1 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5909047; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 81 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.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · tenor sax
const tenor_sax = note("<~@8 A B C B A D E F ~@24 A B C B A D E F G@2 H@2 G@2 H@2 ~@16 G@2 H@2 G@2 H I B>".pickRestart({
  A: "ab3", B: "g3", C: "ab3@3 bb3", D: "g3 gb3", E: "f3", F: "bb3", G: "~@2 eb3 ~@3 eb3 ~ eb3 f3 ~ g3@2 ~@3",
  H: "~@2 f3 ~@3 f3 ~ f3 g3 ~ ab3@2 ~@3", I: "~@2 f3 ~@3 f3 ~ f3 g3 ~ ab3@5",
})).s("gm_tenor_sax").gain(0.2)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B C D A B C D@2 B D B D E F C A@9 B C D A B C G A B C D A B C G D B D B D E F C A B C D A B C G A@5 B C D A B C D A
  B C D A B C D A B C G H
>`.pickRestart({
  A: "eb2@3 eb2@2 eb2 eb2@3 eb2 eb2@2 eb2@4", B: "eb2@3 eb2@2 eb2 eb2@3 eb2 eb2@2 eb2@2 e2@2",
  C: "f2@3 f2@2 f2 f2@3 f2 f2@2 f2@4", D: "f2@3 f2@2 f2 f2@3 f2 f2@2 f2@2 e2@2",
  E: "eb2@3 eb2@2 eb2 d2@3 d2 d2@2 d2@2 d2@2", F: "db2@3 db2@2 db2 db2@3 db2 db2@2 db2@4",
  G: "f2@3 f2@2 f2 f2@3 f2 f2@2 f2@2 f2@2", H: "eb2",
})).s("gm_acoustic_bass").gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@58 [~ x ~ x ~ x ~ x]!6 ~@17>").gain(0.3)

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

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

// drums · open hat
const open_hat = s("oh").struct("<A@3 ~ A@3 ~ A@6 B@2 A@7 ~ A@22 B@2 ~@8 A@7 ~ A@3 ~ A@3 ~@10>".pickRestart({
  A: "~@7 x", B: "x!7 ~",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@3 A ~@6 A@2 ~@7 A ~@22 A@2 ~@15 A ~@3 A ~@3 A ~@8 B>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@48 [x!8]!8 ~@16 [x!8]!8 ~>").gain(0.3)

stack(tenor_sax, bass, rim, snare, hihat, open_hat, crash, ride)