Strudelify

full heart fancy

Lucky Chops

KeyG minorTempo110 bpm
0:00/0:00
// full heart fancy — Lucky Chops
// 110 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5641628; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 104 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 · "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.

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B C D E F G H I@4 J@3 K L M@3 ~@3 N ~@28 O P Q R O P Q R L S L T L S L U L U V@2 ~@3 N ~@11 W X@3 Y Z@2 AA AB AC AD
  AE AF AG@2 AH AI
>`.pickRestart({
  A: "~@2 g4!3 f4!2 d4", B: "c4@3 bb3 bb3@2 ~ bb3 g4@2 f4@2 f4@2 d4@2", C: "c4@3 bb3 g3@2 ~ bb3 g4@2 f4@2 f4@2 d4@2",
  D: "c4 ~", E: "~@2 bb4 g4!2 f4!2 d4", F: "c4@3 d4 bb3@2 ~ bb3 g4@2 f4@2 f4@2 d4@2",
  G: "c4@3 bb3 g3@2 ~ f4 g4@2 f4@2 f4@2 d4@2", H: "c4 d4",
  I: "[~@6 g3@2 g3@2 g3@2 g3@2 c4@4 d4@4 g3@2 g3@2 g3@2 g3@2 c4@4 d4@4 ~ c4 f4@2 d4@2 c4@2 c4@4 d4@6 ~@8]/4",
  J: "[~@3 bb3!4 c4@2 d4@2 g3!4 c4@2 d4@2 bb3 c4 d4 g4 d4]/3", K: "d4@3 c4@3 ~@2", L: "~@3 bb3!5",
  M: "[bb3@2 bb3!3 f4 d4 c4@17]/3", N: "~@9 f3 a3 bb3 ~ a3 bb3 eb4", O: "g3@2 ~@2 g3@2 ~ g3@2 ~ g3@2 ~ a3@2 ~",
  P: "bb3@2 ~@2 bb3@2 ~ bb3@2 ~ bb3@2 ~ f3@2 ~", Q: "eb3@2 ~@2 eb3@2 ~ eb3@2 ~ eb3@2 ~ d3@2 ~",
  R: "c3@2 ~@2 c3@2 ~ c3@2 ~ d3@2 ~ d3@2 ~", S: "bb3@2 bb3!3 c4 d4 ~", T: "bb3@2 bb3!3 f4 d4 ~",
  U: "bb3@2 bb3!3 f4 d4 c4", V: "c4/2", W: "~@4 f4 g4 bb4 d5",
  X: "[d5 eb5@2 d5@2 c5@2 c5@2 bb4 ~ bb4 g4 bb4 d5 d5@2 eb5 f5@2 eb5 d5 c5!2]/3", Y: "c5 d5 ~ g4 f4 g4 bb4 d5",
  Z: "[d5 eb5@2 d5@2 eb5@2 d5@2 c5@3 ~ bb4 c5 d5]/2", AA: "[g4,c5] g4@7 ~@8", AB: "~@4 f5 g5 bb5 c6", AC: "c6",
  AD: "d6@3 c6", AE: "c6@12 c6 b5 [a5,bb5] ab5", AF: "g5", AG: "[~@4 f6@9 eb6 d6 c6]/2", AH: "c6 d6@3", AI: "d6 c6",
})).s("gm_tenor_sax").gain(0.4)

// 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 F@2 G H I J K H I J L H I J L H I J L A B C D A B C D A B C D A B C D A B C D A B C
  D E M N M N M N M E F@2 G H I J K H I J L H I J O H I J L H I J K H I J L H I P L H I J L
>`.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 ~ d2@2 ~ d2@2 ~", E: "~ c2@3",
  F: "[c2@4 ~ d2@2 eb2@9]/2", G: "eb2 f2", H: "g2 ~ g2@5 a2", I: "bb2 ~ bb2@5 f2", J: "eb2 ~ eb2@5 d2",
  K: "c2@2 ~@2 c2@4 ~ f2 a2 bb2 ~ a2 bb2 eb3", L: "c2 ~ c2@6", M: "c2@6 ~ d2", N: "c2", O: "c2 ~ c2@5 d2",
  P: "eb2 ~ eb2@6",
})).s("gm_baritone_sax").gain(0.45)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@16 A@3 B C D E F C D E F C D E F C D E F ~@3 G H@2 I ~@17 J@2 K@2 J@4 K@2 L 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 C D E F C D E F
>`.pickRestart({
  A: "[eb4@12 ~ f4@2 g4@9]/3", B: "bb4", C: "f5 g5 bb5 ~ g5@2 f5 d5 ~ g5 ~ f5 ~ d5@3, ~@13 c5 ~@2",
  D: "c5 ~ c5 bb4 c5 ~ bb4 c5 ~ f5 ~ d5@3 c5 bb4", E: "~ g4@11 ~ g4 c5 bb4", F: "~ g4@3 g4@12", G: "~@3 [bb4,d5,f5]",
  H: "[[bb5,d6,f6]@27 [g5,bb5] [g5,bb5]@2 [f5,a5,c6]@2, ~@27 d6@3 ~@2]/2", // Bb Gm F
  I: "[g5,bb5,d6]@3 [g5,bb5] [g5,bb5]@4 ~@8, ~@3 d6@5 ~@8", J: "[eb4@12 ~ f4@3]/2", K: "[g4@12 ~ f4@3]/2", L: "g4",
})).s("gm_trumpet").gain(0.45)

// bass · tuba
const bass_2 = note(`<
  ~@8 A B C D A B C D E@3 F G H I J G H I J G H I J G H I J ~@24 K@8 E@3 F G H I J G H I J G H I L G H I J G H I J G H I
  J G H I J G H I J
>`.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 ~ d2@2 ~ d2@2 ~", E: "[c3@12 ~ d2@2 eb2@9]/3",
  F: "eb2 f2", G: "g2 ~ g2@5 a2", H: "bb2 ~ bb2@5 f2", I: "eb2 ~ eb2@5 d2", J: "c2 ~ c2@6", K: "[c3@12 ~ d3@3]/2",
  L: "c2 ~ c2@5 d2",
})).s("gm_tuba").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A@16 ~@2 A@26 B@2 C D A@12 ~@8 A@36>".pickRestart({
  A: "x!4", B: "x", C: "x!2", D: "x ~ x!2",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct(`<
  ~@7
  [~@9 x ~@2 x!2 ~@2]
  [~@2 x!2 ~@2 x ~@2 x!4 ~@2 x]!8
  ~@20
  [~@2 x!2 ~@2 x ~@2 x!4 ~@2 x]!8
  ~@23
  [~@2 x ~@2 x ~@4 x ~@2 x ~@2]!4
  ~@33
>`).gain(0.3)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@60 [~@2 x ~@2 x ~@4 x ~@2 x ~@2]!7 ~@37>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@19 A B@16 ~@8 C@2 B D B@10 ~@9 E@4 A B@31 D>".pickRestart({
  A: "~@12 x!3 ~", B: "~@3 x ~@2 x ~@4 x ~@2 x ~", C: "~@3 x ~@2 x ~@9", D: "~@3 x ~@2 x ~@4 x ~@4",
  E: "~@2 x!2 ~@2 x!2",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@58 [~@3 x ~@2 x ~@4 x ~@2 x ~]!2 [~@2 x!2 ~@2 x!2]!7 ~@37>").gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@20 A@16 ~@12 A@10 ~@9 B@4 ~ A@31 C>".pickRestart({
  A: "x!16", B: "~ x ~ x ~ x ~ x", C: "x!14 ~@2",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@58 [x!16]!2 [~ x ~ x ~ x ~ x]!7 ~@37>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@10 x!2 ~@4] ~@51 [~@10 x!2 ~@4] ~@32>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@19 [~@8 x!2 ~@6] ~@51 [~@8 x!2 ~@6] ~@32>").gain(0.35)

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

// drums · ride
const ride = s("rd").struct("<~@18 [x!8] [x!8 ~@8] ~@40 [x!16]!11 [x!8 ~@8] ~@32>").gain(0.2)

stack(
  tenor_sax, bass, trumpet, bass_2, kick, rim, rim_soft, snare, snare_soft, hihat, hihat_soft, mid_tom, high_tom, crash,
  ride
)

More by Lucky Chops