Strudelify

It's not goodbye

Lucky Chops

KeyB♭ majorTempo102 bpm
0:00/0:00
// It's not goodbye — Lucky Chops
// 102 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5821769; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 157 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@52 A@2 B C D@4 E F G@2 E H I@2 J F K L@2 H M N ~@33 O P@6 E F G@2 E H I@2 Q F K L@2 H R N E F G@2 E H S@2 E F G@2 E
  H S@2 E F G@2 E H T@3
>`.pickRestart({
  A: "[~@29 c5@2 eb5@4 eb5@2 eb5@2 ~ bb4@2 eb5@4 bb4@2 eb5@4 eb5@2 eb5@2 c5@2 eb5@4 c5@2]/2",
  B: "eb5@4 ~ eb5@2 eb5@2 bb4@2 eb5@4 bb4@2 eb5@4 eb5@2 eb5@2 c5@2 ~ eb5@4",
  C: "c5@2 eb5@4 eb5@2 eb5@2 bb4@2 eb5@4 bb4@2 eb5@4 ~ eb5@2 eb5@2 c5@2 eb5@3",
  D: "[~ c5@2 eb5@4 eb5@2 eb5@2 bb4@2 ~ eb5@4 bb4@2 eb5@4 eb5@2 eb5@2 c5@2 eb5@4 c5@2 eb5@4 ~ eb5@2 eb5@2 bb4@2 eb5@4 bb4@2 eb5@4 eb5@2 eb5@2 c5@2 eb5@4 ~ c5@2 eb5@4 eb5@2 eb5@2 bb4@2 eb5@4 bb4@2 eb5@4 ~ eb5@2 eb5@2 c5@2 eb5@4 c5@2 eb5@4 eb5@2 eb5@2 bb4@2 eb5@4 ~ bb4@2 eb5@4 eb5@2 eb5@2]/4",
  E: "~ c5", F: "bb4 c5", G: "ab4/2", H: "eb5@7 c5", I: "[bb4@3 ab4 ab4@22 eb4@2 eb5@2 c5@2]/2", J: "~@3 c5",
  K: "bb4 c5 bb4 bb4@2 ab4@2 ~", L: "[~@2 ab4@2 ab4@2 bb4 c5@5 ~@2 c5@2]/2", M: "bb4@6 ab4@2 ab4@16 ~@3 f4@2 eb4@3",
  N: "ab4 ~", O: "~@3 c5 eb5@2 eb5!2 bb4 eb5@2 bb4 eb5@2 eb5!2", P: "c5 eb5@2 c5 eb5@2 eb5!2 bb4 eb5@2 bb4 eb5@2 eb5!2",
  Q: "~@2 eb4 c5", R: "bb4@6 ab4@2 ab4@16 ~@3 c5@2 bb4@3", S: "[bb4@3 ab4 ab4@28]/2", T: "[bb4@3 ab4 ab4@44]/3",
})).s("gm_trumpet").gain(0.35)

// other · trumpet · "B♭ Trumpet" · soft notes
const trumpet_soft = note("<~@51 A@2 ~@55 B C ~@47>".pickRestart({
  A: "[~@22 c5@2 eb5@4 c5@2 eb5@4 eb5@2 eb5@2 bb4@2 eb5@4 bb4@2 ~ eb5@4 eb5@2 eb5@2 c5@2 eb5@4 ~@3]/2",
  B: "c5 eb5@2 c5 eb5@2 eb5!2 bb4 eb5@2 bb4 eb5@2 eb5!2", C: "c5 eb5@2 ~@13",
})).s("gm_trumpet").gain(0.2)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@26 A B@2 C@6 D@4 E@2 F@2 G@4 H@3 I J K@8 L M N@2 L O P@2 Q R S@2 T U Q@2 ~@16 V W X@2 Y Z X@2 V W X@2 Y Z AA AB AC
  AD AC AE AF@2 AG AH L M N@2 L O P@2 Q R S@2 T U Q@2 L M N@2 L O P@2 L M N@2 L O P@2 L M N@2 L O AI@3
>`.pickRestart({
  A: "~@11 ab4 bb4@2 bb4@2",
  B: "[~ bb4@4 bb4@2 bb4@4 bb4@4 bb4@4 ab4@4 ~ ab4@2 bb4@4 bb4@4 bb4@4 bb4@2 bb4@4 ab4@4 c5@8 ~ bb4@7]/2",
  C: "[~ bb4@4 bb4@2 bb4@6 ~ ab4@2 f4@27 ~@16 ab4@2 ~ bb4@4 bb4@4 bb4@4 bb4@2 bb4@4 eb5@4 bb4@4 ~ ab4@4 ab4@2 bb4@4 bb4@4 bb4@4 bb4@2 bb4@4 ~ eb5@4 c5@4 bb4@4 bb4@8 bb4@4 ~ bb4@2 bb4@6 ab4@2 f4@27 ~@16]/6",
  D: "[~ ab4@2 bb4@4 bb4@4 bb4@4 bb4@2 bb4@4 bb4@4 ~ bb4@4 ab4@4 ab4@2 bb4@4 bb4@4 bb4@4 ~ bb4@2 bb4@4 ab4@4 c5@8 bb4@8 ~ bb4@4 bb4@2 bb4@6 ab4@2 f4@27 ~@11]/4",
  E: "[~@6 ab4@2 bb4@4 bb4@4 bb4@4 bb4@2 ~ bb4@4 eb5@4 bb4@4 ab4@4 ab4@2 bb4@4 bb4@4 ~ bb4@4 bb4@2 bb4@4 eb5@4]/2",
  F: "[c5@4 bb4@4 bb4@8 ~ bb4@4 bb4@2 bb4@6 ab4@2 f4@27 g4@6]/2", G: "[~@3 f4@8 eb4@33 e4@33 ~ eb4@41 c4@9]/4",
  H: "[~@8 bb3@8 c4@33 ~ c4@29 ab3@4 db4@13]/3", I: "~@3 c4@2 bb3@3", J: "~@11 eb4@5",
  K: "[~@23 e4@33 eb4@67 c4@33 c4@29 ab3@4 db4@67]/8", L: "~ ab4", M: "g4 ab4", N: "f4/2", O: "c5@7 ab4",
  P: "[g4@3 f4 f4@28]/2", Q: "ab4", R: "g4@6 f4 g4", S: "[ab4@3 g4@4 f4@9]/2", T: "f4@3 ab4", U: "f4 g4",
  V: "ab4 bb4@2 bb4@2 bb4@2 bb4 bb4@2 bb4@2 bb4@2 ab4@2", W: "ab4 bb4@2 bb4@2 bb4@2 bb4 bb4@2 ab4@2 c5@4",
  X: "[bb4@4 bb4@2 bb4 bb4@3 ab4 f4@13 ~@8]/2", Y: "ab4 bb4@2 bb4@2 bb4@2 bb4 bb4@2 eb5@2 bb4@2 ab4@2",
  Z: "ab4 bb4@2 bb4@2 bb4@2 bb4 bb4@2 eb5@2 c5@2 bb4@2", AA: "bb4@4 bb4@2 bb4 bb4@3 ab4 f4@5", AB: "f4@2 g4 f4",
  AC: "eb4", AD: "e4", AE: "eb4@2 eb4 f4", AF: "c4", AG: "db4", AH: "bb3", AI: "[g4@3 f4 f4@44]/3",
})).s("gm_alto_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@26 A B@2 C@6 D@4 E@2 F@2 G ~@16 H I J@2 H K L@2 M N O@2 P Q M@2 ~@16 R S T@2 U V T@2 R S T@2 U V W X ~@5 Y Z AA H I
  J@2 H K L@2 M N O@2 P Q M@2 H I J@2 H K L@2 H I J@2 H K L@2 H I J@2 H K AB@3
>`.pickRestart({
  A: "~@11 ab3 bb3@2 bb3@2",
  B: "[~ bb3@4 bb3@2 bb3@4 bb3@4 bb3@4 ab3@4 ~ ab3@2 bb3@4 bb3@4 bb3@4 bb3@2 bb3@4 ab3@4 c4@8 ~ bb3@7]/2",
  C: "[~ bb3@4 bb3@2 bb3@6 ~ ab3@2 f3@27 ~@16 ab3@2 ~ bb3@4 bb3@4 bb3@4 bb3@2 bb3@4 eb4@4 bb3@4 ~ ab3@4 ab3@2 bb3@4 bb3@4 bb3@4 bb3@2 bb3@4 ~ eb4@4 c4@4 bb3@4 bb3@8 bb3@4 ~ bb3@2 bb3@6 ab3@2 f3@27 ~@16]/6",
  D: "[~ ab3@2 bb3@4 bb3@4 bb3@4 bb3@2 bb3@4 bb3@4 ~ bb3@4 ab3@4 ab3@2 bb3@4 bb3@4 bb3@4 ~ bb3@2 bb3@4 ab3@4 c4@8 bb3@8 ~ bb3@4 bb3@2 bb3@6 ab3@2 f3@27 ~@11]/4",
  E: "[~@6 ab3@2 bb3@4 bb3@4 bb3@4 bb3@2 ~ bb3@4 eb4@4 bb3@4 ab3@4 ab3@2 bb3@4 bb3@4 ~ bb3@4 bb3@2 bb3@4 eb4@4]/2",
  F: "[c4@4 bb3@4 bb3@8 ~ bb3@4 bb3@2 bb3@6 ab3@2 f3@10 ~ f3@8 eb3@4 f3@4 ab3@6]/2", G: "~@3 bb3@8 ~@21", H: "~ f4",
  I: "eb4 f4", J: "db4/2", K: "ab4@7 eb4", L: "[db4@3 db4 db4@28]/2", M: "ab3", N: "g3@6 f3 g3",
  O: "[ab3@3 g3@4 f3@9]/2", P: "f3@3 ab3", Q: "f3 eb3", R: "ab3 bb3@2 bb3@2 bb3@2 bb3 bb3@2 bb3@2 bb3@2 ab3@2",
  S: "ab3 bb3@2 bb3@2 bb3@2 bb3 bb3@2 ab3@2 c4@4", T: "[bb3@4 bb3@2 bb3 bb3@3 ab3 f3@13 ~@8]/2",
  U: "ab3 bb3@2 bb3@2 bb3@2 bb3 bb3@2 eb4@2 bb3@2 ab3@2", V: "ab3 bb3@2 bb3@2 bb3@2 bb3 bb3@2 eb4@2 c4@2 bb3@2",
  W: "bb3@4 bb3@2 bb3 bb3@3 ab3 f3@5", X: "f3@2 eb3 f3 ab3@2 bb3@2", Y: "g4 ab4", Z: "f4", AA: "f4 g4",
  AB: "[db4@3 db4 db4@44]/3",
})).s("gm_tenor_sax").gain(0.3)

// bass · baritone sax · "Baritone Saxophone"
const bass = note(`<
  A B C D E F G H@3 I J K L M N O P Q R S T U V@2 W X Y@3 Z AA AB@3 AC AD AE AF AG AH AI AJ AK AL AM@3 AN AO@2 AP AQ@8
  AR AS AT@2 AU AS AT@2 AR AV AW AT AS@2 AX@2 ~@16 AY AZ BA BB BC BD BA BE AY AZ BA BB BC BD BA BE BF BG BH@2 BI BG BH@2
  AR AS AT@2 AU AS AT@2 AR AV AW AT AS@2 AX@2 BJ BK BL@2 BM BK BL@2 BF BG BN@2 BI BG BN@2 BF BG BN@2 BI BG BN BH@2
>`.pickRestart({
  A: "~@7 ab2", B: "~@3 ab2@5 ~@2 ab2@3 ~@19", C: "~ c2@5 ~ c2@5 ~@2 c2@3 ~@15",
  D: "~@5 db2@5 ~@2 db2@5 ~@2 db2@3 ~@10", E: "~@10 db2@5 ~@2 db2@5 ~@2 db2@3 ~@5", F: "~@15 f2@5 ~ f2@5 ~@2 f2@3 ~",
  G: "~@19 c2@5 ~@2 c2@5 ~", H: "[~ c2@3 ~@20 db2@5 ~@2 db2@5 ~@2 db2@3 ~@20 db2@5 ~@2 db2@5 ~ db2@3 ~@19]/3",
  I: "~ ab2@4 ~@3 ab2@4 ~@2 ab2@3 ~@15", J: "~@3 c2@4 ~@2 c2@4 ~@2 c2@3 ~@14", K: "~@4 db2@4 ~@2 db2@4 ~@2 db2@3 ~@13",
  L: "~@5 db2@4 ~@2 db2@4 ~@3 db2@3 ~@11", M: "~@7 f2@4 ~@2 f2@4 ~@2 f2@3 ~@10", N: "~@8 c2@4 ~@2 c2@4 ~@2 c2@3 ~@9",
  O: "~@9 db2@4 ~@2 db2@4 ~@3 db2@3 ~@7", P: "~@10 db2@4 ~@3 db2@4 ~@2 db2@3 ~@6",
  Q: "~@12 ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~@5", R: "~@13 c2@4 ~@2 c2@4 ~@3 c2@3 ~@3",
  S: "~@14 db2@4 ~@3 db2@4 ~@2 db2@3 ~@2", T: "~@16 db2@4 ~@2 db2@4 ~@2 db2@3 ~", U: "~@17 f2@4 ~@2 f2@4 ~@2 f2@3",
  V: "[~@18 c2@4 ~@3 c2@4 ~@2 c2@3 ~@18 db2@4 ~@2 db2@4 ~@2]/2", W: "db2@3 ~@18 db2@4 ~@2 db2@4 ~",
  X: "~ db2@3 ~@18 ab2@4 ~@2 ab2@4",
  Y: "[~@3 ab2@3 ~@18 c2@4 ~@2 c2@4 ~@2 c2@3 ~@18 db2@4 ~@2 db2@4 ~@2 db2@3 ~@18 db2@4 ~@2]/3",
  Z: "db2@4 ~@3 db2@3 ~@17 f2@4 ~", AA: "~@2 f2@4 ~@2 f2@3 ~@18 c2@3",
  AB: "[~@3 c2@4 ~@2 c2@3 ~@18 db2@4 ~@2 db2@4 ~@3 db2@3 ~@17 db2@4 ~@3 db2@4 ~@2 db2@3 ~@17]/3",
  AC: "~ ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~@16", AD: "~@2 c2@4 ~@2 c2@4 ~@2 c2@3 ~@15",
  AE: "~@3 db2@4 ~@3 db2@4 ~@2 db2@3 ~@13", AF: "~@5 db2@4 ~@2 db2@4 ~@2 db2@3 ~@12",
  AG: "~@6 f2@4 ~@2 f2@4 ~@2 f2@3 ~@11", AH: "~@7 c2@4 ~@2 c2@4 ~@3 c2@3 ~@9", AI: "~@8 db2@4 ~@3 db2@4 ~@2 db2@3 ~@8",
  AJ: "~@10 db2@4 ~@2 db2@4 ~@2 db2@3 ~@7", AK: "~@11 ab2@21", AL: "~@3 c2@5", AM: "[~@7 db2@33 f2@8]/3",
  AN: "~@9 c2@7", AO: "[~@19 db2@45]/2", AP: "~@11 ab2@5", AQ: "[~@23 c2@33 db2@67 f2@33 c2@33 db2@67]/8",
  AR: "ab2@3 ~ ab2 ~ ab2@3 ~ ab2 ~ ab2@8 ab2 ~ ab2@3 ~ ab2 ~ ab2@3 ~", AS: "c2@2 c2 c2@2 c2 c2@4 c2 c2@2 c2 c2@2",
  AT: "db2@2 db2 db2@2 db2 db2@4 db2 db2@2 db2 db2@2", AU: "f2@2 f2 f2@2 f2 f2@4 f2 f2@2 f2 f2@2",
  AV: "e2@3 ~ e2 ~ e2@3 ~ e2 ~ e2@8 e2 ~ e2@3 ~ e2 ~ e2@3 ~", AW: "f2@2 f2 f2@2 f2 f2@2 eb2@2 eb2 eb2@2 eb2 eb2@2",
  AX: "ab2@2 ab2 ab2@2 ab2 ab2@4 ab2 ab2@2 ab2 ab2@2", AY: "ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~ ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~",
  AZ: "c3@4 ~@2 c3@4 ~@2 c3@3 ~ gb2@4 ~@2 gb2@4 ~@2 gb2@3 ~",
  BA: "db2@4 ~@2 db2@4 ~@2 db2@3 ~ db2@4 ~@2 db2@4 ~@2 db2@3 ~",
  BB: "db2@4 ~@2 db2@4 ~@2 db2@3 ~ db2@4 ~@2 eb2@4 ~@2 eb2@3 ~",
  BC: "f2@4 ~@2 f2@4 ~@2 f2@3 ~ f2@4 ~@2 f2@4 ~@2 f2@3 ~",
  BD: "ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~ gb2@4 ~@2 gb2@4 ~@2 gb2@3 ~",
  BE: "db2@4 ~@2 db2@4 ~@2 db2@3 ~ eb2@4 ~@2 eb2@4 ~@2 eb2@3 ~", BF: "ab2", BG: "c2", BH: "db2/2", BI: "f2",
  BJ: "ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~@17", BK: "c2@4 ~@2 c2@4 ~@2 c2@3 ~@17", BL: "db2@4 ~@2 db2@4 ~@2 db2@3 ~@17",
  BM: "f2@4 ~@2 f2@4 ~@2 f2@3 ~@17", BN: "db2",
})).s("gm_baritone_sax").gain(0.45)

// bass · tuba
const bass_2 = note(`<
  ~@26 A B@3 C D E@3 F G H I J K L M ~@17 N O P@2 Q O P@2 N R S P O@2 N@3 T P U Q V P U N T P U Q V P U N T P U Q V P W
  N T P U Q V P W ~@8 N O P@2 Q O P@2 N R S P O@2 N@2 X Y Z@2 AA Y Z@2 AB AC AD@2 AE AC AD@2 AB AC AD@2 AE AC AD AF@2
>`.pickRestart({
  A: "~@11 ab2@2 ~ ab2@2", B: "[~@3 ab2@3 ~@18 c2@4 ~@2 c2@4 ~@2 c2@3 ~@18 db2@4 ~@2 db2@4 ~@2 db2@3 ~@18 db2@4 ~@2]/3",
  C: "db2@4 ~@3 db2@3 ~@17 f2@4 ~", D: "~@2 f2@4 ~@2 f2@3 ~@18 c2@3",
  E: "[~@3 c2@4 ~@2 c2@3 ~@18 db2@4 ~@2 db2@4 ~@3 db2@3 ~@17 db2@4 ~@3 db2@4 ~@2 db2@3 ~@17]/3",
  F: "~ ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~@16", G: "~@2 c2@4 ~@2 c2@4 ~@2 c2@3 ~@15", H: "~@3 db2@4 ~@3 db2@4 ~@2 db2@3 ~@13",
  I: "~@5 db2@4 ~@2 db2@4 ~@2 db2@3 ~@12", J: "~@6 f2@4 ~@2 f2@4 ~@2 f2@3 ~@11", K: "~@7 c2@4 ~@2 c2@4 ~@3 c2@3 ~@9",
  L: "~@8 db2@4 ~@3 db2@4 ~@2 db2@3 ~@8", M: "~@10 db2@4 ~@2 db2@4 ~@2 db2@3 ~@7",
  N: "ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~ ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~", O: "c2@4 ~@2 c2@4 ~@2 c2@3 ~ c2@4 ~@2 c2@4 ~@2 c2@3 ~",
  P: "db2@4 ~@2 db2@4 ~@2 db2@3 ~ db2@4 ~@2 db2@4 ~@2 db2@3 ~", Q: "f2@4 ~@2 f2@4 ~@2 f2@3 ~ f2@4 ~@2 f2@4 ~@2 f2@3 ~",
  R: "e2@4 ~@2 e2@4 ~@2 e2@3 ~ e2@4 ~@2 e2@4 ~@2 e2@3 ~", S: "f2@4 ~@2 f2@4 ~@2 f2@3 ~ eb2@4 ~@2 eb2@4 ~@2 eb2@3 ~",
  T: "c3@4 ~@2 c3@4 ~@2 c3@3 ~ gb2@4 ~@2 gb2@4 ~@2 gb2@3 ~",
  U: "db2@4 ~@2 db2@4 ~@2 db2@3 ~ db2@4 ~@2 eb2@4 ~@2 eb2@3 ~",
  V: "ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~ gb2@4 ~@2 gb2@4 ~@2 gb2@3 ~",
  W: "db2@4 ~@2 db2@4 ~@2 db2@3 ~ eb2@4 ~@2 eb2@4 ~@2 eb2@3 ~", X: "ab2@4 ~@2 ab2@4 ~@2 ab2@3 ~@17",
  Y: "c2@4 ~@2 c2@4 ~@2 c2@3 ~@17", Z: "db2@4 ~@2 db2@4 ~@2 db2@3 ~@17", AA: "f2@4 ~@2 f2@4 ~@2 f2@3 ~@17", AB: "ab2",
  AC: "c2", AD: "db2", AE: "f2", AF: "db2/2",
})).s("gm_tuba").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@10 [~ x ~@30] ~@146>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@5 A B C D E F ~@32 G H I J K L I M N L O P Q R O S T ~@48 U V@2 W ~@45>".pickRestart({
  A: "~@23 x!6 ~ x!2", B: "x!5 ~ x!7 ~ x!7 ~ x!7 ~ x!2", C: "x!5 ~ x!7 ~ x!6 ~ x!7 ~ x!3",
  D: "x!4 ~ x!7 ~ x!7 ~ x!7 ~ x!3", E: "x!3 ~ x!7 ~ x!7 ~ x!7 ~ x!4", F: "x", G: "~@16 x!5 ~ x!10", H: "x!15 ~ x!16",
  I: "x!8 ~ x!23", J: "x!2 ~ x!24 ~ x!4", K: "x!14 ~@8 x!10", L: "x!14 ~ x!17", M: "x ~ x!25 ~ x!4", N: "x!19 ~@8 x!5",
  O: "x!7 ~ x!24", P: "x ~ x!24 ~ x!5", Q: "x!20 ~ x!4 ~@7", R: "x!13 ~ x!18", S: "~ x!25 ~ x!5", T: "x!19 ~ x!12",
  U: "~@5 x!27", V: "x!32", W: "x!30 ~@2",
})).gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@5 A ~@37 B ~@3 C ~@3 D ~@3 E ~@52 F ~@2 G H@4 ~@41>".pickRestart({
  A: "~@15 x!7 ~@10", B: "~@11 x!5 ~@16", C: "~@14 x!7 ~@11", D: "~@19 x ~ x!6 ~@5", E: "~@25 x!7", F: "x!5 ~@27",
  G: "~@30 x!2", H: "x!32",
})).gain(0.15)

stack(trumpet, trumpet_soft, alto_sax, tenor_sax, bass, bass_2, kick, snare, snare_soft)

More by Lucky Chops