Strudelify

full heart fancy

Lucky Chopsarr. JKS

KeyG minorTempo110 bpm
0:00/0:00
// full heart fancy — Lucky Chopsarr. JKS
// 110 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5912987; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · baritone sax · "Baritone Saxophone"
const bass = note(`<
  A B C D A B C D A B C D A B C D E@3 F G H I J G H I K A B C D A B C D A B C D A B C D A B C D A B C D L@7 M@3 N F G H
  I J G H I K G H I K G H I K G H I K G H I K O H I K G H I K A B C D
>`.pickRestart({
  A: "g2@2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 a2 ~@2", B: "bb2@2 ~@2 bb2 ~@2 bb2 ~@2 bb2 ~@2 f2 ~@2",
  C: "eb2@2 ~@2 eb2 ~@2 eb2 ~@2 eb2 ~@2 d2 ~@2", D: "c2@2 ~@2 c2 ~@2 c2 ~@2 f2 ~@2 f2 ~@2",
  E: "[~@2 c2@11 d2@2 eb2@9]/3", F: "eb2!3 f2", G: "g2@2 ~@2 g2@3 g2@3 g2@3 a2@3",
  H: "bb2@2 ~@2 bb2@3 bb2@3 bb2@3 f2@3", I: "eb2@2 ~@2 eb2@3 eb2@3 eb2@3 d2@3",
  J: "c2@2 ~@2 c2@3 c2@2 d3 ~ d3 c3@2 d3 ~", K: "c2@2 ~@2 c2@3 c2@3 f2@3 f2@3",
  L: "[~@2 c2@11 d2@2 c2@14 d2@2 eb2@14 d2@2 c2@9]/7", M: "[~@5 d2@2 eb2@17]/3", N: "eb2", O: "~@13 a2@3",
})).s("gm_baritone_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@16 A@3 B C D E F C D E G ~@3 H I@2 J@2 ~@16 K@7 L@3 M B C D E F C D E N ~@8 C O E F C O E P C D E F C D E N ~@3 Q
>`.pickRestart({
  A: "[eb4@13 f4@2 g4@9]/3", B: "a4", C: "f5 g5 bb5@2 g5@2 f5 d5@2 g5@2 f5@2 d5@3",
  D: "c5@2 c5 bb4 c5@2 bb4 c5@2 [eb5,f5] ~ d5@3 c5 bb4", E: "~ g4@12 ~ c5 bb4", F: "~ g4@3 g4@7 ~@5",
  G: "~ g4@9 f4 g4 bb4 g4@3", H: "~@3 f5", I: "[f6@24 ~@2 d6@3 c6@3]/2", J: "[d6@9 ~@7]/2",
  K: "[eb4@13 f4@2 eb4@14 f4@2 g4@14 f4@2 eb4@9]/7", L: "[~@5 f4@2 g4@17]/3", M: "f4", N: "~ g4@9 f5 g5 bb5 g5@3",
  O: "c5@2 c5 bb4 c5@2 bb4 c5@2 f5@2 d5@3 c5 bb4", P: "~ g4@3 g5 d5 f5@2 f5 d5 bb4 g4 bb4@2 f5!2",
  Q: "~@10 f4 g4 bb4 g4@3",
})).s("gm_trumpet").gain(0.4)

// other · trombone
const trombone = note(`<
  ~@8 A B C D A B C D E@3 F G H I J G H I J ~@8 K@8 L@3 M@4 N O@7 P@3 F Q G H I J G H I J G H I J G H I J G H I J G H I
  J R H I J G H I J ~@3 S
>`.pickRestart({
  A: "bb3@2 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 c4 ~@2", B: "d4@2 ~@2 d4 ~@2 d4 ~@2 d4 ~@2 a3 ~@2",
  C: "g3@2 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 f3 ~@2", D: "eb3@2 ~@2 eb3 ~@2 eb3 ~@2 a3 ~@2 a3 ~@2", E: "[g3@13 a3@2 bb3@9]/3",
  F: "c4", G: "bb3@2 ~@2 bb3@3 bb3@3 bb3@3 c4@3", H: "d4@2 ~@2 d4@3 d4@3 d4@3 a3@3", I: "g3@2 ~@2 g3@3 g3@3 g3@3 f3@3",
  J: "eb3@2 ~@2 eb3@3 eb3@3 a3@3 a3@3",
  K: "[~@6 g3@2 g3@2 g3@2 g3@2 c4@4 d4@2 ~@2 g3@2 g3@2 g3@2 g3@2 c4@4 d4@2 ~@2 g3@2 f4@3 eb4 d4@2 c4@4 d4@18 ~@2 bb3@2 bb3@2 bb3@2 bb3@2 c4@4 d4@2 ~@2 g3@2 g3!2 g3@2 g3@2 c4@4 d4@2 ~@2 c4@2 d4@2 g4@2 g4@2 d4@4 c4@14]/8",
  L: "[~@6 g3@2 g3@2 g3@2 g3@2 c4@4 d4@2 ~@2 g3@2 g3@2 g3@2 g3@2 c4@4 d4@2 ~ d4 ~ eb4 f4@5 eb4 ~ d4]/3",
  M: "[c4@3 eb4@3 d4@12 ~@4 bb3@2 bb3@2 bb3@2 bb3@2 c4@4 d4@2 ~@2 g3@2 g3@2 g3@2 g3@2 c4@4 d4@2 ~@2 c4@2 d4@2 f4@2 g4@2 d4@2]/4",
  N: "bb3 c4@5 ~@2", O: "[bb3@13 c4@2 bb3@14 c4@2 d4@14 c4@2 bb3@9]/7", P: "[~@5 c4@2 d4@17]/3", Q: "f4",
  R: "~@13 c4@3", S: "~@10 f3 g3 bb3 g3@3",
})).s("gm_trombone").gain(0.4)

// bass · tuba
const bass_2 = note(`<
  ~@16 A@3 B C D E F C D E F G H I J G H I J ~@16 K@7 L@3 M B C D E F C D E F C D E F C D E F C D E F C D E F N D E F C
  D E F ~@4
>`.pickRestart({
  A: "[~@2 c2@11 d2@2 eb2@9]/3", B: "eb2!3 f2", C: "g2@2 ~@2 g2@3 g2@3 g2@3 a2@3",
  D: "bb2@2 ~@2 bb2@3 bb2@3 bb2@3 f2@3", E: "eb2@2 ~@2 eb2@3 eb2@3 eb2@3 d2@3", F: "c2@2 ~@2 c2@3 c2@3 f2@3 f2@3",
  G: "g2@2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 a2 ~@2", H: "bb2@2 ~@2 bb2 ~@2 bb2 ~@2 bb2 ~@2 f2 ~@2",
  I: "eb2@2 ~@2 eb2 ~@2 eb2 ~@2 eb2 ~@2 d2 ~@2", J: "c2@2 ~@2 c2 ~@2 c2 ~@2 f2 ~@2 f2 ~@2",
  K: "[~@2 c2@11 d2@2 c2@14 d2@2 eb2@14 d2@2 c2@9]/7", L: "[~@5 d2@2 eb2@17]/3", M: "eb2", N: "~@13 a2@3",
})).s("gm_tuba").gain(0.4)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@16 [~@3 x] [~ x ~ x] ~@34 [~@3 x] [~ x ~ x]!6 [~@2 x!3 ~@3] ~@40>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@18 A B C@8 ~@8 C@3 D C@3 E C@8 ~@10 A F C@24 G C@7 ~@4>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x!2 ~ x!2 ~@3", C: "~@3 x ~@2 x ~@4 x ~@2 x ~", D: "~@3 x ~@2 x ~@9",
  E: "~@3 x ~@2 x ~@2 x ~ x ~@2 x ~", F: "x ~ x ~ x ~ x ~ x!2 ~ x!2 ~ x!2", G: "~@11 x ~@2 x ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@3 B C A@2 D E ~@3 F@8 G H@2 I G H@2 J K J@2 L ~@24 F@24 ~ F@7 ~@4>".pickRestart({
  A: "x ~@3 x ~@2 x ~@2 x ~@2 x ~@2", B: "x ~@3 x ~@2 x ~@2 x!2 ~ x!3", C: "~@4 x ~@2 x ~@2 x ~@2 x ~@2",
  D: "x ~@3 x ~@2 x ~@2 x ~@5", E: "x", F: "~@2 x!2 ~@2 x ~@3 x!2 ~@2 x ~", G: "~@4 x!12", H: "x!16", I: "x!12 ~@4",
  J: "x!4", K: "~ x!3", L: "x!3 ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 A B ~@19 C ~@22 A D ~@36>".pickRestart({
  A: "~@3 x!5", B: "x!4 ~@3 x", C: "~@12 x!4", D: "x!4 ~@4",
})).gain(0.25)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@18 [x!3 ~@5] ~@43 [x!3 ~@5] ~@37>").gain(0.15)

// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~@12 B ~@2 A B ~@3 B ~@15 B ~@47>".pickRestart({
  A: "~@12 x!4", B: "x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@12 A ~@3 B ~@3 A ~@31 B ~@7 A ~@3 A ~@7 A ~@15 C A ~@10>".pickRestart({
  A: "x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@16 A B ~@34 A B@7 C B ~@38>".pickRestart({
  A: "~@3 x!5", B: "x!8", C: "~ x!7",
})).gain(0.2)

// drums · cowbell
const cowbell = s("cb").struct("<~@3 [~@13 x!3] x ~@30 [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2] ~@64>").gain(0.3)

stack(
  bass, trumpet, trombone, bass_2, kick, kick_soft, snare, hihat, mid_tom, mid_tom_soft, open_hat, crash, ride, cowbell
)