Strudelify

Daydreamin'

Tatyana Ali

KeyB♭ minorTempo98 bpm
0:00/0:00
// Daydreamin' — Tatyana Ali
// 98 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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 · electric bass finger
const bass = note(`<
  A B C@2 D B C B E B C@2 E B C B D B C@2 E B C B D B C B E B C@2 D B C B E B C@2 D B C B D B C B E B C@2 D B C B E B
  C@2 D B C B E B C@2 D B C B E B C@2 D B C B E B C@2 D B C B E ~@7
>`.pickRestart({
  A: "bb2 ~@2 db2 bb2 ~@2 db2 bb2 ~@2 db2 bb2 ~@2 db2", B: "bb2 ~@2 db2 ~@2 db2 ~@9", C: "bb2 ~@2 db2 ~@2 db2@2 ~@8",
  D: "bb2 ~@2 db2 ~@2 db2@2 bb2 ~@2 db2 bb2 ~@2 db2", E: "bb2 ~@2 db2 ~@2 db2 ~ bb2 ~@2 db2 bb2 ~@2 db2",
})).s("gm_electric_bass_finger").gain(0.18)

// other · flute
const flute = note(`<
  A B C D E F G H I ~@15 A J C D E F G H I ~@15 A K C D E F G H I ~@23 A B C D E F G H I B C D E F G H
>`.pickRestart({
  A: "~@8 ab4@2 bb4 ~ db5@2 eb5 ~", B: "f5@2 ~@2 f5 ~@3 eb5@3 ~ f5 ~ eb5@2", C: "db5@6 ~@2 ab4 ~ bb4 ~ db5 ~ eb5 ~",
  D: "~@2 f5 ~ f5@2 ~@2 eb5@2 ~@2 f5 ~ eb5@2", E: "db5@6 ~@2 ab4@2 bb4 ~ db5@2 eb5 ~",
  F: "f5 ~@3 f5 ~@3 eb5@3 ~ f5 ~ eb5@2", G: "db5@3 ~ eb5 db5 bb4 db5", H: "eb5@4 db5 ~ db5@8 ~@2",
  I: "ab4 bb4 ab4 bb4 ab4 bb4 ab4 bb4", J: "f5@2 ~@2 f5 ~@3 eb5@3 ~ f5 ~ eb5@2, bb4 ~@15",
  K: "[bb4,f5] ~@3 f5 ~@3 eb5@3 ~ f5 ~ eb5@2", // Bb5
})).s("gm_flute").gain(0.64)

// other · music box
const music_box = note(`<
  A ~ B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B
  ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~ A ~@3
>`.pickRestart({
  A: "~@8 bb6 ~ ab6 ~ ab6 ~ bb6 f6", B: "~@8 ab5 ~ bb5 ~ db6 ~ eb6 db6",
})).s("gm_music_box").gain(0.64)

// bass · piano
const bass_2 = note("<~@34 A@7 ~@55>".pickRestart({
  A: "[f1@97 ~@15]/7",
})).s("gm_piano").gain(0.15)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A
  ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~ A ~@3 A ~ B ~@3
>`.pickRestart({
  A: "~@15 x", B: "~@11 x ~@3 x",
})).gain(0.21)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ B A@6 ~ A@7 ~ A@7 ~ B A@5 ~@2 A@4 B A@2 ~ A@7 ~ A@7 ~ A@4 ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.37)

// drums · clap
const clap = s("cp").struct(`<
  ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ B A@6 ~ A@7 ~ A@7 ~ B A@5 ~@2 A@4 B A@2 ~ A@7 ~ A@7 ~ A@4 ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.26)

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

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

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

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~@2 B C D A B C ~ A B C D A B C ~ A B C D A B C ~@2 B
  C D A B E ~ A B C D ~ B C ~ A B C D A B C ~ A B C D A B C ~ A B C D ~@3
>`.pickRestart({
  A: "~@4 x ~ x ~ x!3 ~@5", B: "~@5 x ~ x ~@8", C: "~@6 x ~ x!3 ~@5", D: "~@4 x!2 ~@2 x ~ x ~@5", E: "~@3 x ~@4",
})).gain(0.21)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~ A B C D A B C ~@2 B C D A B C ~ A B C D A B C ~ A B C D A B C ~@2 B
  C D A B E ~ A B C D ~ B C ~ A B C D A B C ~ A B C D A B C ~ A B C D ~@3
>`.pickRestart({
  A: "~ x!2 ~@5", B: "~@4 x ~ x ~@3 x!3 ~@3", C: "x ~ x ~@2 x ~@8 x!2", D: "x!2 ~@5 x", E: "x ~@13 x!2",
})).gain(1.37)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~ A B A C A B A ~ A B A C A B A ~ A B A C A B A ~ A B A C A B A ~@2 B A C A B A ~ A B A C A B A ~ A B A C A B A ~@2 B
  A C A B ~@2 A B A C ~ B A ~ A B A C A B A ~ A B A C A B A ~ A B A C ~@3
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@2 x ~@12 x", C: "~ x",
})).gain(1.37)

stack(bass, flute, music_box, bass_2, kick, kick_soft, snare, clap, hihat, crash, cabasa, shaker, triangle, triangle_2)