Strudelify

Coco - Lucky Chops

Mary Greenwood

KeyA♭ majorTempo128 bpm
0:00/0:00
// Coco - Lucky Chops — Mary Greenwood
// 128 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/8 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3783986; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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.

// other · flute
const flute = note(`<
  ~@17 A B C D ~@2 E F ~@8 G H I D G H I J K ~@2 L ~@8 A B C D ~@2 E F ~@8 G H I D G H I J M N O ~@7 O ~@7 G H I D G H I
  D P Q R D G H I S O
>`.pickRestart({
  A: "~@4 eb6@2 db6@2 c6@4 db6 ~@3", B: "c6@4 bb5 ~@3 c6@4 ab5@4", C: "~@2 ab5@2 eb6@2 db6@2 c6@4 db6 ~@3",
  D: "c6 bb5 ab5@2", E: "~@2 f5@2 c6@2 c6@2 c6@4 c6 ~@3", F: "ab5 f5 bb5@2 f5@2 ~@2", G: "~@2 f6 eb6 c6 bb5 ab5 bb5",
  H: "c6 eb6 eb6@2", I: "~ ab5 f6 eb6 c6 bb5 ab5 bb5", J: "c6 bb5 c6 db6", K: "eb6@15 ~", L: "~@5 bb4!3",
  M: "eb6 ~ f5 ab5", N: "eb6 db6 c6 bb5", O: "f5@15 ~", P: "~@4 eb5 ab5 ab5@2 ab5@2 g5@2 f5@2 eb5@2",
  Q: "eb5@4 f5@4 f5 ab5 g5@4 ~@2", R: "~ eb5 ab5!3 g5 eb5 c6", S: "c6@4 bb5@4 ab5@3 f5 g5@4",
})).s("gm_flute").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@17 A B C D ~@2 E F ~@8 G H I D G H I J K ~@2 L ~@8 A B C D ~@2 E F ~@8 G H I D G H I J M N O ~@7 O ~@7 G H I D G H I
  D P Q R D G H I S O
>`.pickRestart({
  A: "~@4 eb5@2 db5@2 c5@4 db5 ~@3", B: "c5@4 bb4 ~@3 c5@4 ab4@4", C: "~@2 ab4@2 eb5@2 db5@2 c5@4 db5 ~@3",
  D: "c5 bb4 ab4@2", E: "~@2 f4@2 c5@2 c5@2 c5@4 c5 ~@3", F: "ab4 f4 bb4@2 f4@2 ~@2", G: "~@2 f5 eb5 c5 bb4 ab4 bb4",
  H: "c5 eb5 eb5@2", I: "~ ab4 f5 eb5 c5 bb4 ab4 bb4", J: "c5 bb4 ab4 g4", K: "bb4", L: "~@5 ab4!3", M: "bb4 ~ f4 ab4",
  N: "eb5 db5 c5 bb4", O: "f5", P: "~@4 eb5 ab5 ab5@2 ab5@2 g5@2 f5@2 eb5@2", Q: "eb5@4 f5@4 f5 ab5 g5@4 ~@2",
  R: "~ eb5 ab5!3 g5 eb5 c5", S: "c5@4 bb4@4 ab4@3 f5 g5@4",
})).s("gm_clarinet").gain(0.3)

// other · trumpet · "B♭ Trumpet 1"
const trumpet = note(`<
  ~@7 A@2 B C B D B C B D E F G H B C B D ~@4 I J K L M N O H M N O P Q ~@2 R B C B D B C B D E F G H B C B D ~@4 I J K
  L M N O H M N O P S T U ~@7 U ~@7 M N O H M N O H V W X H M N O Y Z
>`.pickRestart({
  A: "f5/2", B: "~@2 f4@2 c5@2 c5@2 c5@4 c5 ~@3", C: "c5@4 c5 ~@3 ab4@2 bb4@2 c5@2 c5 ~", D: "ab4 f4 bb4@2 f4@2 ~@2",
  E: "~@4 eb5@2 db5@2 c5@4 db5 ~@3", F: "c5@4 bb4 ~@3 c5@4 ab4@4", G: "~@2 ab4@2 eb5@2 db5@2 c5@4 db5 ~@3",
  H: "c5 bb4 ab4@2", I: "bb4@3 b4@3 c5@3 ~ db5@3 d5@3", J: "eb5 e5 f5 gb5", K: "g5 ab5 a5@2", L: "bb5",
  M: "~@2 f5 eb5 c5 bb4 ab4 bb4", N: "c5 eb5 eb5@2", O: "~ ab4 f5 eb5 c5 bb4 ab4 bb4", P: "c5 bb4 c5 db5", Q: "eb5",
  R: "~@5 ab4!3", S: "eb5 ~ f4 ab4", T: "eb5 db5 c5 bb4", U: "f4", V: "~@4 eb5 ab5 ab5@2 ab5@2 g5@2 f5@2 eb5@2",
  W: "eb5@4 f5@4 f5 ab5 g5@4 ~@2", X: "~ eb5 ab5!3 g5 eb5 c5", Y: "c5@4 bb4@4 ab4@3 f5 g5@4", Z: "f5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet 2"
const trumpet_2 = note(`<
  ~@7 A@2 B C B D B C B D E F G H B C B D ~@4 I J K L M N O P M N Q R S ~@2 T B C B D B C B D E F G H B C B D ~@4 I J K
  L M N O P M N Q R U V W ~@7 W ~@7 M N O P M N O P X Y Z P M N O AA W
>`.pickRestart({
  A: "c5/2", B: "~@2 f4@2 c5@2 c5@2 c5@4 c5 ~@3", C: "c5@4 c5 ~@3 ab4@2 bb4@2 c5@2 c5 ~", D: "ab4 f4 bb4@2 f4@2 ~@2",
  E: "~@4 c5@2 bb4@2 ab4@4 bb4 ~@3", F: "ab4@4 g4 ~@3 ab4@4 f4@4", G: "~@2 f4@2 c5@2 bb4@2 ab4@4 bb4 ~@3",
  H: "ab4 g4 f4@2", I: "f4@3 gb4@3 g4@3 ~ ab4@3 a4@3", J: "bb4 b4 c5 db5", K: "d5 eb5 e5@2", L: "f5",
  M: "~@2 f4 eb4 c4 bb3 ab3 bb3", N: "c4 eb4 eb4@2", O: "~ ab3 f4 eb4 c4 bb3 ab3 bb3", P: "c4 bb3 ab3@2",
  Q: "~ ab4 f5 eb5 c5 bb4 ab4 bb4", R: "c5 bb4 ab4 g4", S: "bb4", T: "~@5 ab4!3", U: "bb4 ~ f4 ab4",
  V: "eb5 db5 c5 bb4", W: "f4", X: "~@4 eb4 ab4 ab4@2 ab4@2 g4@2 f4@2 eb4@2", Y: "eb4@4 f4@4 f4 ab4 g4@4 ~@2",
  Z: "~ eb4 ab4!3 g4 eb4 c4", AA: "c4@4 bb3@4 ab3@3 f4 g4@4",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet 3"
const trumpet_3 = note(`<
  ~@7 A@2 B C B D B C B D E F G H B C B D ~@4 I J K L M N O P M N O Q R ~@2 S B C B D B C B D E F G H B C B D ~@4 I J K
  L M N O P M N O Q T U V ~@7 V ~@7 M N O P M N O P W X Y P M N O Z V
>`.pickRestart({
  A: "[c4,f4]/2", B: "~@2 f4@2 c4@2 c4@2 c4@4 c4 ~@3", C: "c4@4 c4 ~@3 ab3@2 bb3@2 c4@2 c4 ~",
  D: "ab3 f4 bb3@2 f4@2 ~@2", E: "~@4 c5@2 bb4@2 ab4@4 bb4 ~@3", F: "ab4@4 g4 ~@3 ab4@4 f4@4",
  G: "~@2 f4@2 c5@2 bb4@2 ab4@4 bb4 ~@3", H: "ab4 g4 f4@2", I: "bb3@3 b3@3 c4@3 ~ db4@3 d4@3", J: "eb4 e4 f4 gb4",
  K: "g4 ab4 a4@2", L: "bb4", M: "~@2 f4 eb4 c4 bb3 ab3 bb3", N: "c4 eb4 eb4@2", O: "~ ab3 f4 eb4 c4 bb3 ab3 bb3",
  P: "c4 bb3 ab3@2", Q: "c4 bb3 c4 db4", R: "eb4", S: "~@5 ab4!3", T: "eb4 ~ f4 ab4", U: "eb5 db5 c5 bb4", V: "f4",
  W: "~@4 eb4 ab4 ab4@2 ab4@2 g4@2 f4@2 eb4@2", X: "eb4@4 f4@4 f4 ab4 g4@4 ~@2", Y: "~ eb4 ab4!3 g4 eb4 c4",
  Z: "c4@4 bb3@4 ab3@3 f4 g4@4",
})).s("gm_trumpet").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@17 A B C D ~@2 E F ~@8 G H I D G H I J K ~@2 L ~@8 A B C D ~@2 E F ~@8 G H I D G H I J M N O ~@7 O ~@7 G H I D G H I
  D P Q R D G H I S O
>`.pickRestart({
  A: "~@4 eb4@2 db4@2 c4@4 db4 ~@3", B: "c4@4 bb3 ~@3 c4@4 ab3@4", C: "~@2 ab3@2 eb4@2 db4@2 c4@4 db4 ~@3",
  D: "c4 bb3 ab3@2", E: "~@2 f4@2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@4 [c4,c5] ~@3", F: "[ab3,ab4] f4 [bb3,bb4]@2 f4@2 ~@2",
  G: "~@2 f4 eb4 c4 bb3 ab3 bb3", H: "c4 eb4 eb4@2", I: "~ ab3 f4 eb4 c4 bb3 ab3 bb3", J: "c4 bb3 c4 db4", K: "eb4",
  L: "~@5 db4!3", M: "eb4 ~ f4 ab4", N: "eb5 db5 c5 bb4", O: "f4", P: "~@4 eb4 ab4 ab4@2 ab4@2 g4@2 f4@2 eb4@2",
  Q: "eb4@4 f4@4 f4 ab4 g4@4 ~@2", R: "~ eb4 ab4!3 g4 eb4 c4", S: "c4@4 bb3@4 ab3@3 f4 g4@4",
})).s("gm_alto_sax").gain(0.3)

// chords · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@5 A B A C A B A C A B A C A B A C A B A C D ~@3 E F E F A B A G A B A C H ~@2 I ~@8 A B A C A B A C D ~@3 E F E F A
  B A G A B A C J K L M L M L M L M L M L M L M L M A B A C A B A C A B A C A B A C N
>`.pickRestart({
  A: "[f3,c4]!2 ~ [f3,c4] [eb3,bb3]!2 ~ [eb3,bb3]", B: "[ab3,eb4]!2 ~ [ab3,eb4] [db3,ab3]!2 ~ [db3,ab3]",
  C: "[ab3,eb4]!2 ~ eb4 db4 c4 db4 eb4", D: "f3", E: "[f3,f4]@2 [f3,f4]!2 [f3,f4]@2 [f3,f4]!2",
  F: "[f3,f4] [db3,eb4] [c3,c4] [db3,eb4] [f3,f4] ~@3", G: "[ab3,eb4]!2 ~ ab3 db4 c4 db4 eb4", H: "bb3", I: "~@5 ab3!3",
  J: "ab3 ~ ab3 c4", K: "g4 f4 eb4 db4", L: "[ab3,c4] [g3,bb3]", M: "[c4,eb4] [f3,ab3]", N: "db4",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~ A B A C A B A C A B A C A B A C A B A C A B A C D E D E F G F G A B A C A B A C A B A H A B A C A B A C A B A C A B
  A C D E D E F G F G A B A C A B A C I J K L K L K L K L K L K L K L K L A B A C A B A C A B A C A B A C M
>`.pickRestart({
  A: "f3!2 ~ f3 eb3!2 ~ eb3", B: "ab3!2 ~ ab3 db3!2 ~ db3", C: "ab3!2 ~ ab3 db3 c3 db3 eb3",
  D: "[f2,f3]@2 [f2,f3]!2 [f2,f3]@2 [f2,f3]!2", E: "[f2,f3] [eb2,eb3] [c2,c3] [eb2,eb3] [f2,f3] ~@3",
  F: "f3@2 f3!2 f3@2 f3!2", G: "f3 eb3 c3 eb3 f3 ~@3", H: "ab3!2 ~ ab3 db3!4", I: "f2 ~ f2 ab2", J: "eb3 db3 c3 bb2",
  K: "f3 eb3", L: "ab3 db3", M: "f3",
})).s("gm_baritone_sax").gain(0.3)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~ A B A C A B A C A B A C A B A C A B A C A B A C D E D E F@2 G H A B A C A B A C A B A I A B A C A B A C A B A C A B
  A C D E D E F@2 G H A B A C A B A C J K A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C L
>`.pickRestart({
  A: "f2!2 ~ f2 eb2!2 ~ eb2", B: "ab2!2 ~ ab2 db2!2 ~ db2", C: "ab2!2 ~ ab2 db2 c2 db2 eb2", D: "f2@2 f2!2 f2@2 f2!2",
  E: "f2 eb2 c2 eb2 f2 ~@3", F: "f2 ~ f2 ~", G: "f2!4", H: "f2!5 ~@3", I: "ab2!2 ~ ab2 db2!4", J: "f2 ~ f2 ab2",
  K: "eb3 db3 c3 bb2", L: "f2",
})).s("gm_electric_bass_finger").gain(0.3)

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

// drums · snare
const snare = s("sd").struct("<A B@24 ~@8 B@11 C B@16 ~@8 B@8 D@10 ~@8 B@16 ~>".pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "x!2",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@25 [x!4]!7 [x!5 ~@3] ~@28 [x!4]!7 [x!5 ~@3] ~@43>").gain(0.3)

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

stack(
  flute, clarinet, trumpet, trumpet_2, trumpet_3, alto_sax, tenor_sax, baritone_sax, bass, kick, snare, low_tom, crash
)