Strudelify

here with me

Lydia

KeyA♭ majorTempo100 bpm
0:00/0:00
// here with me — Lydia
// 100 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5890483; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)

// 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.

// other · trumpet · "B♭ Trumpet 2"
const trumpet = note(`<
  A B A B A B A C A B A B A B A C D E D E D E D ~ F G F H I J K L A B A B A B A C D E D E D E D ~ F G F H I J K L A B A
  B A B A M
>`.pickRestart({
  A: "g4 bb4", B: "c5 g4", C: "g4@3 bb4@3 g4@8 ~@2", D: "g4@3 g4@5 f4@3 f4@5", E: "eb4@3 eb4@13",
  F: "eb5 d5@2 bb4@2 g4@2 bb4@3 c5@4 bb4@2", G: "bb4 c5@2 bb4@2 eb4 f4@2 ab4@2 g4@2 bb4@2 bb4@2",
  H: "bb4 eb4@2 eb5@3 eb4!2 eb4@2 eb4@2 c4@2 eb4@2", I: "eb5 d5@2 bb4@2 g4@2 bb4@3 c5@4 ~@2",
  J: "bb4@2 c5 bb4@2 g4 f4@2 eb4@4 ~@4", K: "eb4 g4 bb4@2 ~@2 g4 bb4 c5@2 ~@6", L: "eb5@3 eb4@3 eb4@4 ~@6",
  M: "g4@3 bb4@3 g4@10",
})).s("gm_trumpet").gain(0.2)

// other · trombone
const trombone = note(`<
  A B A C A B D@2 A B A C A B E@3 F@2 G@2 H I J K L K M N O P Q A B A C A B E@3 F@2 G@2 H I J K L K M N O P Q A B A C A
  B R@2
>`.pickRestart({
  A: "~@2 eb3 bb2@5", B: "~@2 c3 g2@5", C: "~@2 bb2 g3@5", D: "[eb3@4 g3@4 ab3@11 d4@3 eb4@8 ~@2]/2",
  E: "[eb3@4 g3@4 ab3@11 d4@3 eb4@4 eb3@2 bb3@2 bb3@6 ~@10 bb3@2]/3",
  F: "[bb3@2 bb3!2 bb3@2 g3 bb3 c4@2 bb3@2 ab3@2 bb3@4 ~@12 bb3!2]/2",
  G: "[bb3@2 ab3!2 ab3@2 g3!2 g3@2 f3@2 eb3 g3 g3@4 ~@10 eb3 g3@3]/2", H: "ab3@2 g3 eb3@2 eb3 g3@2 g3@4 ~@4",
  I: "~ bb2 g3@2 f3@2 eb3@2", J: "f3@3 eb3@3 eb3@4 ~@6", K: "eb4 d4@2 bb3@2 g3@2 bb3@3 c4@4 bb3@2",
  L: "bb3 c4@2 bb3@2 eb3 f3@2 ab3@2 g3@2 bb3@2 bb3@2", M: "bb3 eb3@2 eb4@3 eb3!2 eb3@2 eb3@2 c3@2 eb3@2",
  N: "eb4 d4@2 bb3@2 g3@2 bb3@3 c4@4 ~@2", O: "bb3@2 c4 bb3@2 g3 f3@2 eb3@4 ~@4", P: "eb3 g3 bb3@2 ~@2 g3 bb3 c4@2 ~@6",
  Q: "eb4@3 eb3@3 eb3@4 ~@6", R: "[eb3@4 g3@4 ab3@11 d4@3 eb4@10]/2",
})).s("gm_trombone").gain(0.25)

// bass · tuba
const bass = note(`<
  A B A B A B A C A B A B A B A C D E D E D E D ~ F G F G F G H I A B A B A B A C D E D E D E D ~ F G F G F G H I A B A
  B A B A J
>`.pickRestart({
  A: "eb2 g2", B: "ab2 eb2", C: "eb2@3 g2@3 g2@8 ~@2", D: "g2@3 g2@5 f2@3 f2@5", E: "eb2@3 eb2@13", F: "c3@3 g2@5",
  G: "ab2@3 eb2@5", H: "f2 g2", I: "bb2@3 bb2@3 eb2@4 ~@6", J: "eb2@3 g2@3 g2@10",
})).s("gm_tuba").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@8 A@7 B ~@6 C ~ A@15 B ~@6 C ~ A@8 ~@8>".pickRestart({
  A: "x ~@4 x ~@2", B: "x", C: "x ~ x ~ x!4",
})).gain(0.3)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@8 A B A B A B A C A@7 ~ A B A B A B A D A B A B A B A C A@7 ~ A B A B A B A D ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~ x ~@2", D: "~@4 x ~@7 x ~ x!2",
})).gain(0.3)

stack(trumpet, trombone, bass, kick, rim, clap)