Strudelify
KeyD minorTempo88 bpm
0:00/0:00
// Home — Crow Sheryl
// 88 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 piano (copy of ch 2 piano, 0.108 beats late)
// note: Full arrangement: all 204 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · fretless bass
const bass = note(`<
  A@2 B@2 C@2 D@2 E F G H I F J H K@2 L@2 K@2 L@2 M@2 N@2 O@2 P@2 E Q R S@2 T U V W@2 X@2 Y Z AA@2 AB@2 AC@2 AD AE AF AG
  AH AI AJ@2 AK@2 AL@2 AM@2 AN@2 AO@2 AP@2 AQ@2 AR@2 AS@2 AP@2 AT@2 P@2 I AU AV@2 AW AX AY AZ BA@2 BB@2 BC@2 BD@2 BE@2
  BF@2 BG@2 BH@2 BI@2 BJ BK BL BM BN BO BP BQ BR BS BT BU BV@2 ~@80
>`.pickRestart({
  A: "[g1@6 ~ d1@9]/2", B: "[g1@4 g1@3 d1@7 d1@2]/2", C: "[g1@4 g1 g1@2 d1@5 d1@2 d1@2]/2",
  D: "[g1@4 g1!2 ~ d1@6 d1!3]/2", E: "g1@3 g1", F: "d1", G: "bb1@7 ~", H: "c2", I: "g1", J: "bb1@11 ~",
  K: "[g1@7 d1@9]/2", L: "[bb1@7 c2@9]/2", M: "[g1@5 g1@2 ~@6 d2!2 ~, ~@7 d1@9]/2",
  N: "[g1@2 g1@2 g1 g1@2 d1@7 f1 g1]/2", O: "[g1@4 g1!2 ~@7 d2!2 ~, ~@7 d1@9]/2", P: "[g1@4 g1 g1@2 d1@6 d1!3]/2",
  Q: "d1@3 d1", R: "bb1 ~", S: "[c2@5 c2@2 c2@2 ~@2 g1@3 g1@2]/2", T: "d1@3 d1@5", U: "bb1@3 ~@3 bb1@2", V: "c2@3 c2@5",
  W: "[g1@7 d1@5 d1 d1@3]/2", X: "[bb1@6 ~ c2@7 c2@2, ~@7 b1 ~@8]/2", Y: "g1@5 g1@2 ~", Z: "d1@5 d1 d1@2, e1 ~@7",
  AA: "[bb1@6 bb1 c2@5 ~ c2!2 ~]/2", AB: "[g1@4 g1!2 ~ d1@9]/2", AC: "[g1@3 ~ g1!2 ~ d1@7 g1 ~]/2", AD: "bb1@3 ~",
  AE: "c2@7 ~", AF: "f1@3 f1@2 f1 f1@2", AG: "g1@3 g1!5", AH: "c1@3 c1@2 c1!3", AI: "bb1@3 bb1 ~@2 bb1!2", AJ: "d2!8",
  AK: "[g1@5 g1!2 d1@6 d1 d1@2]/2", AL: "[~ bb1@5 ~ c2@7 [bb1,c2] ~, ~ db2 ~@14]/2",
  AM: "[g1@5 g1!2 d1@7 d1@2, ~@7 e1 ~@8]/2", AN: "[bb1@2 bb1@4 ~ c2@8 bb1]/2", AO: "[g1@5 g1 ~ d1@6 d1 d1@2]/2",
  AP: "[g1@4 g1 f1 g1 d1@6 d1!3]/2", AQ: "[g1@4 g1 f1 g1 d1@7 d1@2]/2", AR: "[g1@4 g1 g1@2 d1@3 d1@3 ~ d1!2]/2",
  AS: "[g1@7 d1@6 d1!3]/2", AT: "[g1@4 g1 g1@2 d1@3 d1@3 d1!3]/2", AU: "d1@5 [d1,e1] d1@2",
  AV: "[bb1@5 ~ bb1@3 c2@4 c2 c2@2]/2", AW: "~@3 g1@2 g1 g1@2", AX: "d1@3 d1@2 d1 d1@2", AY: "bb1@3 bb1@2 bb1 bb1@2",
  AZ: "c1@3 c1@2 c1 c1@2", BA: "[g1@4 g1 g1@2 d1@3 d1@2 d1 d1@3]/2", BB: "[bb1@5 bb1 ~ c1@2 c1 c1@2 c1!4]/2",
  BC: "[g1@4 g1 g1@2 d1@2 ~ d1@2 [c1,d1] d1@2 d1]/2", BD: "[bb1@4 bb1!2 ~ c2@5 ~ c2 ~ c2]/2",
  BE: "[g1@12 g1@2 ~ g1@6 d2@18 d2 ~@2 d2@2 ~ d2@3]/2", BF: "[g1@11 ~ g1@2 ~ g1@6 d2@16 ~@5 d2@2 ~ d2@3]/2",
  BG: "[g1@11 ~ g1@2 ~ g1@6 d2@16 ~@2 d2@2 ~ d2@2 ~ d2@3]/2",
  BH: "[g1@10 ~@2 g1@2 ~ g1@6 d2@16 ~@2 d2@2 ~ d2@2 ~ d2@3]/2", BI: "[g1@10 ~@5 g1@3 g1@3 ~@2 d2@19 d2@6]/2",
  BJ: "bb1@5 ~ bb1@2", BK: "c2@5 c2!3", BL: "g1@15 g1@5 ~ g1@3", BM: "d2@14 ~ d2@6 d2@3", BN: "~@9 bb1@2 ~",
  BO: "c2@3 c2@2 ~ c2@2", BP: "g1@5 g1 g1@2", BQ: "d2@14 ~@4 d2@2 ~ d2@3", BR: "~@18 bb1@2 ~ bb1@3",
  BS: "c2@11 ~ c2@2 ~ c2@2 ~ c2@6", BT: "g1@15 g1@2 ~ g1@6", BU: "d2@13 ~@2 d2@2 ~ d2@2 ~ d2@3",
  BV: "[bb1@15 ~@3 bb1@3 c2@22 ~@5]/2",
})).s("gm_fretless_bass").gain(0.48).pan(0.4)

// bass · fretless bass · soft notes
const bass_soft = note(`<
  ~@34 A B@2 ~ C ~@18 D ~@4 E F ~@2 E ~@8 G ~@10 H ~@7 E ~@4 I ~@3 J ~@4 K ~ H ~@2 L@2 M ~ J N ~@3 O ~@81
>`.pickRestart({
  A: "~@4 bb1@3 ~", B: "[~@23 g1@9 ~@16]/2", C: "~@3 bb1@2 bb1 ~@2", D: "~@4 bb1!2 ~@2", E: "~@6 bb1 ~", F: "~@7 bb1",
  G: "~@5 d1 ~@2", H: "~@5 bb1 ~@2", I: "~@4 c2 ~@3", J: "~@15 d2@2 ~@7", K: "~@6 g1 ~@5",
  L: "[~@22 bb1@15 ~@2 bb1@3 ~@6]/2", M: "~@5 c2 ~@2", N: "bb1@13 ~@2 bb1@2 ~@7", O: "~@15 bb1@2 ~@7",
})).s("gm_fretless_bass").gain(0.24).pan(0.4)

// chords · piano
const piano = note(`<
  A@2 B@2 C@2 D@2 E F G H I F J K I L M@2 I N O@2 P@2 Q@2 R@2 S@2 I T G H I F U K I L V@2 I N W@2 X@2 Y@2 Z AA AB AC AD
  AE@2 AF AG@2 AH@2 AI@2 AJ@4 AK@2 AL@2 AM@2 A@2 B@2 C@2 AN@2 I F G H I F J K I L M@2 I AO O@2 AP@2 AQ@2 R@2 S@2 I T G H
  AR F J K I L AS@2 I N W@2 ~@80
>`.pickRestart({
  A: "[[d3,g3,b3]@10 ~@2 [d3,g3]@3 [e3,g3]@3 ~@3 [d3,a3]@22 ~@5, ~@12 b3@6 ~@3 f3@19 ~@8]/2", // G G5 Em D5
  B: "[[d3,g3,b3]@10 ~@2 d3@3 e3@3 ~@3 a3@18 ~@6 f3@2 ~, ~@12 [g3,b3]@6 ~@3 d3@25 ~@2, ~@21 f3@16 ~@2 f3@5 ~@4, ~@42 a3@5 ~]/2", // G
  C: "[[d3,g3,b3]@10 ~@2 d3@3 e3@3 ~@3 f3@22 ~@5, ~@12 b3@9 a3@16 ~@11, ~@12 g3@6 ~@3 d3@19 ~@8]/2", // G
  D: "[[d3,g3,b3]@10 ~@2 [d3,g3]@3 e3@3 ~@3 f3@18 ~@3 f3@3 a3 ~@2, ~@4 b3@2 ~ a3@7 ~@2, ~@21 d3@16 ~@2 d3@6 ~@3]/2", // G G5
  E: "[d3,g3,b3]@5 ~", F: "[d3,f3,a3]@3 ~", G: "[bb2,d3,f3]@3 ~", H: "g3@7 ~, e3@3 ~, c3@2 ~", I: "[d3,g3,b3]@19 ~@5",
  J: "[bb2,d3,f3]@19 ~@5", K: "[c3,e3,g3]@19 ~@5", L: "[d3,f3,a3]@19 ~@5",
  M: "[[bb2,d3,f3]@18 ~@3 [c3,e3,g3]@15 g3@5 ~ c3@5 ~]/2", N: "[d3,f3,a3]@15 d3@2 ~ [d3,f3,a3]@3 ~@3",
  O: "[[bb2,d3,f3]@17 ~@4 [c3,e3,g3]@21 ~@6]/2", // Bb C
  P: "[[d3,g3,b3]@11 ~ [d3,g3]@3 [e3,g3]@3 ~@3 [d3,a3]@22 ~@5, ~@12 b3@6 ~@3 f3@20 ~@7]/2", // G G5 Em D5
  Q: "[[d3,g3,b3]@11 ~ d3@3 e3@3 ~@3 a3@18 ~@6 f3@2 ~, ~@12 [g3,b3]@6 ~@3 d3@25 ~@2, ~@21 f3@17 ~ f3@5 ~@4, ~@42 a3@5 ~]/2", // G
  R: "[[d3,g3,b3]@11 ~ d3@3 e3@3 ~@3 f3@22 ~@5, ~@12 b3@9 a3@17 ~@10, ~@12 g3@6 ~@3 d3@19 ~@8]/2", // G
  S: "[[d3,g3,b3]@10 ~@2 [d3,g3]@3 e3@3 ~@3 f3@18 ~@6 a3@2 ~, ~@12 b3@6 ~@3 a3@21 f3@5 ~, ~@21 d3@16 ~@2 d3@6 ~@3]/2", // G G5
  T: "[f3,a3]@2 ~, d3@3 ~", U: "[bb2,d3,f3]@5 ~", V: "[[bb2,d3,f3]@18 ~@3 [c3,e3,g3]@15 g3@4 ~@2 c3@6]/2",
  W: "[[bb2,d3,f3]@16 ~@5 [c3,e3,g3]@21 ~@6]/2", // Bb C
  X: "[[d3,g3,b3]@10 ~@2 d3@3 e3@4 ~@2 [d3,f3,a3]@24 ~@3, ~@12 [g3,b3]@7 ~@2 b3 ~@26]/2", // G Dm G
  Y: "[[d3,g3,b3]@10 ~@2 [d3,g3]@3 e3@3 ~@3 [d3,f3,a3]@17 ~ [f3,a3]@2 ~ [d3,f3,a3]@2 ~@4, ~@2 b3 ~@5, ~@15 g3 ~@23 d3 ~@8]/2", // G G5 Dm F Dm
  Z: "[bb2,d3,f3]@6 [bb2,d3,f3] ~", AA: "[c3,e3,g3]@9 [c3,e3,g3]@8 ~ [c3,e3,g3]@4 ~@2",
  AB: "[c3,f3,a3]@9 [c3,f3,a3]@2 ~", AC: "[d3,g3,b3]@17 ~ [d3,g3,b3]@4 ~@2", AD: "[c3,e3,g3]@8 ~ [c3,e3,g3] ~@2",
  AE: "[[bb2,d3,f3]@15 [bb2,d3,f3] ~@2 [bb2,d3,f3]@3 ~@3 [f3,a3]@9 [d3,f3,a3]@8 ~ [d3,f3,a3]@5 ~, ~@23 d3@9 ~@16]/2", // Bb F Dm
  AF: "d3@3 f3@3 a3@2 ~ f3@5 d3@6 ~@4, ~@4 d3@3 ~@5",
  AG: "[[d3,g3,b3]@18 ~@3 f3@18 ~@3 f3@4 ~@2, ~@7 a3@7 ~@2, ~@21 d3@17 ~ d3@7 ~@2]/2", // G
  AH: "[[d3,f3]@17 ~@4 [c3,g3]@20 ~ [c3,e3,g3]@4 ~@2, bb2@14 ~@7 e3@18 ~@9]/2", // Dm C5 C
  AI: "[~ d3@15 ~@5 d3@18 ~@3 f3@5 ~, [g3,b3]@19 ~@2 a3@22 ~@5, ~@21 f3@20 ~@7, ~@39 d3@8 ~]/2", // G
  AJ: "[d3@17 ~@4 [c3,e3,g3]@19 ~@2 e3@4 ~@2 [d3,g3]@11 ~ [d3,g3]@3 [e3,g3]@3 ~@3 [f3,a3]@18 ~@3 a3@5 ~, f3@14 ~@27 [c3,g3]@4 ~@2 b3@11 ~@2 b3@6 ~@3 d3@23 ~@4, ~@87 f3@5 ~@4]/4", // C G5 Em F C5
  AK: "[[d3,g3,b3]@10 ~@2 [d3,g3]@2 ~ [e3,g3]@3 ~@3 [d3,f3,a3]@17 ~ a3@2 ~ f3@3 a3 ~@2, ~@12 b3@6 ~@21 d3@7 ~@2]/2", // G G5 Em Dm
  AL: "[[d3,g3,b3]@10 ~@2 [d3,g3,b3]@3 [e3,g3,b3]@3 ~@3 [d3,a3]@20 ~@4 f3@2 ~, ~@21 f3@17 ~@4 d3@4 ~@2, ~@11 a3]/2", // G Em D5
  AM: "[[d3,g3,b3]@10 ~@2 [d3,g3,b3]@3 [e3,b3]@3 ~@3 [d3,f3,a3]@17 ~ a3@3 f3@3 a3 ~@2, ~@15 g3 ~@23 d3@6 ~@3, ~@39 f3 ~@8]/2", // G E5 Dm
  AN: "[[g3,b3]@11 ~ [d3,g3]@3 e3@3 ~@3 f3@18 ~@3 f3@3 a3@2 ~, d3@3 ~ b3@2 ~ a3@7 ~@2, ~@21 d3@16 ~@2 d3@6 ~@3]/2", // G G5
  AO: "d3@15 d3@2 ~ [d3,f3,a3]@3 ~@3, [f3,a3]@17 ~@7", // Dm F
  AP: "[[d3,g3,b3]@11 ~ [d3,g3]@3 [e3,g3]@3 ~@3 [d3,a3]@22 ~@5, ~@12 b3@6 ~@3 f3@19 ~@8]/2", // G G5 Em D5
  AQ: "[[d3,g3,b3]@11 ~ d3@3 e3@3 ~@3 a3@18 ~@6 f3@2 ~, ~@12 [g3,b3]@6 ~@3 d3@25 ~@2, ~@21 f3@16 ~@2 f3@5 ~@4, ~@42 a3@5 ~]/2", // G
  AR: "[d3,g3]@5 ~, b3@3 ~", AS: "[[bb2,d3,f3]@18 ~@3 [c3,e3,g3]@15 g3@5 ~ c3@6]/2",
})).s("gm_piano").gain(0.27).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x ~@3 x!2 ~ x", B: "~ x ~@3 x ~ x",
})).gain(0.4).pan(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@23 x",
})).gain(0.08).pan(0.4)

// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.4).pan(0.4)

// drums · clap
const clap = s("cp").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.08).pan(0.4)

stack(bass, bass_soft, piano, kick, kick_soft, snare, clap)

More by Crow Sheryl