Strudelify

K.K. Cruisin'

Kazumi Totaka

KeyD♭ majorTempo165 bpm
0:00/0:00
// K.K. Cruisin' — Kazumi Totaka
// 165 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5825480; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 157 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(165/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 · glockenspiel
const glockenspiel = note(`<
  A@2 ~@19 B@3 C D E@2 F G H I J K L ~@66 M N O@2 M N P Q R@3 S T ~ U V R@3 S T ~ U V W X Y@2 W X Z AA AB AC AD@2 AB AC
  AE AF AG@3 AH AI ~ AJ AK AL AM AN AO AP AQ ~@2
>`.pickRestart({
  A: "[bb6@2 eb7 ~@2 db7 ~@2 bb6 ~@2 ab6@3 gb6 ab6@2 bb6 gb6@2 eb6 ~@3]/2",
  B: "[~@6 eb7@3 db7@2 bb6@10 gb6@2 bb6@10 ~@3]/3", C: "~@4 eb7 bb6", D: "a6 ab6 gb6@4", E: "[~@3 a6 ab6 gb6@4 ~@3]/2",
  F: "bb6 db7 eb7 gb7", G: "bb7@9 bb7@2 ab7", H: "~@6 bb6@2 db7 eb7@3", I: "bb7@3 bb7 ab7 gb7",
  J: "f7@2 eb7@2 db7@2 ~@5 c7", K: "bb6@9 ~@2 ab6", L: "gb6 ~@5", M: "bb6@3 ab6@2 ab6 ~@6", N: "ab6@3 gb6@2 gb6 ~@6",
  O: "[ab6@3 gb6@2 gb6 ~@2 eb6@3 bb6@4 ab6@2 ab6 ~@6]/2", P: "ab6!2 db6 eb6", Q: "gb6@3 ab6@3 bb6@2 db7@4",
  R: "[~@6 [eb6,eb7]@3 [gb6,gb7]@2 [d6,d7]@10 [bb5,bb6]@2 [eb6,eb7]@10 ~@3]/3", S: "~@4 [eb6,eb7] [bb5,bb6]",
  T: "[a5,a6] [ab5,ab6] [gb5,gb6]@4", U: "[db6,db7] [eb6,eb7] [gb6,gb7] [ab6,ab7]",
  V: "[bb5,bb6] [db6,db7] [eb6,eb7] [gb6,gb7]", W: "[bb6,bb7]@3 [ab6,ab7]@2 [ab6,ab7] ~@6",
  X: "[ab6,ab7]@3 [gb6,gb7]@2 [gb6,gb7] ~@6", // Ab Gb
  Y: "[[ab6,ab7]@3 [gb6,gb7]@2 [gb6,gb7] ~@2 [eb6,eb7]@3 [bb6,bb7]@4 [ab6,ab7]@2 [ab6,ab7] ~@6]/2", // Ab Gb Eb Bb Ab
  Z: "[ab6,ab7] ~ [ab6,ab7] ~ [db6,db7]@2 [eb6,eb7]@2", AA: "[gb6,gb7]@3 [ab6,ab7]@3 [bb6,bb7]@2 db7@4",
  AB: "[b6,b7]@3 [a6,a7]@2 [a6,a7] ~@6", AC: "[a6,a7]@3 [g6,g7]@2 [g6,g7] ~@6",
  AD: "[[a6,a7]@3 [g6,g7]@2 [g6,g7] ~@2 [e6,e7]@3 [b6,b7]@4 [a6,a7]@2 [a6,a7] ~@6]/2", // A G E B A
  AE: "[a6,a7] ~ [a6,a7] ~ [d6,d7]@2 [e6,e7]@2", AF: "[g6,g7]@3 [a6,a7]@3 [b6,b7]@2 d7@4",
  AG: "[~@6 [e6,e7]@3 [g6,g7]@2 [eb6,eb7]@10 [b5,b6]@2 [e6,e7]@10 ~@3]/3", AH: "~@4 [e6,e7] [b5,b6]",
  AI: "[bb5,bb6] [a5,a6] [g5,g6]@4", AJ: "[d6,d7] [e6,e7] [g6,g7] [a6,a7]", AK: "[b5,b6] [d6,d7] [e6,e7] [g6,g7]",
  AL: "[b6,b7]@9 [b6,b7]@2 [a6,a7]", AM: "~@6 [b5,b6]@2 [d6,d7] [e6,e7]@3", AN: "[b6,b7]@3 [b6,b7] [a6,a7] [g6,g7]",
  AO: "[gb6,gb7]@2 [e6,e7]@2 [d6,d7]@2 ~@5 db7", AP: "b6@9 ~@2 a6", AQ: "g6 ~@5",
})).s("gm_glockenspiel").gain(0.4)

// other · vibraphone
const vibraphone = note(`<
  A@2 ~@3 B@3 C D ~ E F B@3 G H ~ I J K@3 C D ~ L M K@3 G H ~ N O ~@32 P Q R@2 P Q S T P Q R@2 P Q S T P Q R@2 P Q S T P
  Q R@2 P Q S T P U V@2 P U W ~ X@3 Y Z AA AB AC X@3 Y Z AA AB AC AD AE AF@2 AD AE AG AH AI AJ AK@2 AI AJ AL AM AN@3 AO
  AP AQ AR AS AT@3 AU AV ~ AW AX
>`.pickRestart({
  A: "[bb4@2 eb5 ~@2 db5 ~@2 bb4 ~@2 ab4@3 gb4 ab4@2 bb4 gb4@2 eb4 ~@3]/2",
  B: "[~@12 d5 eb5@5 gb5@4 d5@20 bb4@4 f5@20 ~@6]/3", C: "~@4 eb5 bb4", D: "a4 ab4 gb4@4", E: "db4 eb4 gb4 ab4",
  F: "bb4 db5 eb5 gb5", G: "~@4 bb5 ab5", H: "gb5@3 ab5@2 f5@6 ~", I: "~@6 db5@2 bb4@3 ~",
  J: "bb4@4 db5@6 ~@2 db5 eb5@5 ~@6", K: "[~@6 eb5@3 gb5@2 d5@10 bb4@2 f5@10 ~@3]/3", L: "f4 gb4 bb4 c5",
  M: "eb5 gb5 ab5 db6", N: "~@2 db5 ~", O: "eb5 ~ gb5 ~", P: "[bb4,bb5]@3 [ab4,ab5]@2 [ab4,ab5] ~@6",
  Q: "[ab4,ab5]@3 [gb4,gb5]@2 [gb4,gb5] ~@6", // Ab Gb
  R: "[[ab4,ab5]@3 [gb4,gb5]@2 [gb4,gb5] ~@2 [eb4,eb5]@3 [bb4,bb5]@4 [ab4,ab5]@2 [ab4,ab5] ~@6]/2", // Ab Gb Eb Bb Ab
  S: "[ab4,ab5] ~ [ab4,ab5] ~ db4@2 eb4@2", T: "gb4@3 ab4@3 bb4@2 db5@4", U: "[ab4,ab5]@3 [f4,f5]@2 [f4,f5] ~@6",
  V: "[[ab4,ab5]@3 [f4,f5]@2 [f4,f5] ~@2 [f4,f5]@3 [bb4,bb5]@4 [g4,g5]@2 [g4,g5] ~@6]/2", W: "[ab4,ab5]!2 ~@2",
  X: "[~@6 [eb4,eb5]@3 [db4,db5]@2 bb3 bb3@9 [gb3,gb4]@2 bb3 bb3@9 ~@3, ~@11 bb4@10 ~@2 bb4@10 ~@3]/3", // Eb Db Gb
  Y: "~@4 [eb4,eb5] [bb3,bb4]", Z: "[a3,a4] [ab3,ab4] [gb3,gb4]@4", AA: "~@3 [a4,a5] [ab4,ab5] [gb4,gb5]",
  AB: "[f4,f5] [gb4,gb5] [bb4,bb5] [c5,c6]", AC: "[eb4,eb5] [gb4,gb5] [ab4,ab5] [db5,db6]",
  AD: "[f4,f5]@3 [eb4,eb5]@2 [eb4,eb5] ~@6", AE: "[eb4,eb5]@3 [eb4,eb5]@2 [eb4,eb5] ~@6",
  AF: "[[eb4,eb5]@3 [eb4,eb5]@2 [eb4,eb5] ~@2 [bb3,bb4]@3 [f4,f5]@4 [eb4,eb5]@2 [eb4,eb5] ~@6]/2", // Eb Bb F Eb
  AG: "[eb4,eb5] ~ [eb4,eb5] ~ [ab3,ab4]@2 [bb3,bb4]@2", AH: "[db4,db5]@3 [eb4,eb5]@3 [f4,f5]@2 [ab4,ab5]@4",
  AI: "[gb4,gb5]@3 [e4,e5]@2 [e4,e5] ~@6", AJ: "[e4,e5]@3 [e4,e5]@2 [e4,e5] ~@6",
  AK: "[[e4,e5]@3 [e4,e5]@2 [e4,e5] ~@2 [b3,b4]@3 [gb4,gb5]@4 [e4,e5]@2 [e4,e5] ~@6]/2", // E B Gb E
  AL: "[e4,e5] ~ [e4,e5] ~ [a3,a4]@2 [b3,b4]@2", AM: "[d4,d5]@3 [e4,e5]@3 [gb4,gb5]@2 [a4,a5]@4",
  AN: "[~@6 [e4,e5]@3 [d4,d5]@2 b3 b3@9 [g3,g4]@2 b3 b3@9 ~@3, ~@11 b4@10 ~@2 b4@10 ~@3]/3", AO: "~@4 [e4,e5] [b3,b4]",
  AP: "[bb3,bb4] [a3,a4] [g3,g4]@4", AQ: "~@3 [bb4,bb5] [a4,a5] [g4,g5]", AR: "[gb4,gb5] [g4,g5] [b4,b5] [db5,db6]",
  AS: "[e4,e5] [g4,g5] [a4,a5] [d5,d6]", AT: "[~@6 [e4,e5]@3 [g4,g5]@2 [eb4,eb5]@10 [b3,b4]@2 [e4,e5]@10 ~@3]/3",
  AU: "~@4 b5 a5", AV: "g5@3 a5@2 gb5@6 ~", AW: "~@2 d5 ~", AX: "e5 ~ g5 ~",
})).s("gm_vibraphone").gain(0.4)

// other · vibraphone
const vibraphone_2 = note(`<
  ~@21 A@3 B C ~ D E A@3 ~@5 F@2 G@2 H@2 I@2 H@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 H@2 G@2 H@2 I@2 ~@8 J K L@2 J K M N J K L@2
  J K M N J K L@2 J K M N J K L@2 J K O ~ A@3 B C ~ D E A@3 B C ~ D E J K L@2 J K P Q R S T@2 R S U V W@3 X Y ~ Z AA W@3
  ~@5
>`.pickRestart({
  A: "[~@6 eb4@3 gb4@2 d4@10 bb3@2 f4@10 ~@3]/3", B: "~@4 bb4!2", C: "eb5 bb4 bb4@4", D: "db4 eb4 gb4 ab4",
  E: "bb4 db5 eb5 gb5", F: "[[b3,gb4,eb5,bb5]@11 [bb3,f4,d5,ab5]@13]/2",
  G: "[[bb3,eb4,db5,gb5]@11 [c4,eb4,eb5,gb5]@13]/2", H: "[[b3,gb4,eb5,bb5]@11 [bb3,f4,db5,ab5]@13]/2",
  I: "[[bb3,eb4,db5,gb5]@11 [b3,gb4,eb5,ab5]@13]/2", J: "[eb4,eb5]@3 [db4,db5]@2 [db4,db5] ~@6",
  K: "[db4,db5]@3 [bb3,bb4]@2 [bb3,bb4] ~@6", // Db Bb
  L: "[[db4,db5]@3 [bb3,bb4]@2 [bb3,bb4] ~@2 [bb3,bb4]@3 [eb4,eb5]@4 [c4,c5]@2 [c4,c5] ~@6]/2", // Db Bb Eb C
  M: "[db4,db5]!2 db5 eb5", N: "gb5@3 ab5@3 bb5@2 db6@4", O: "[db4,db5]!2 ~@2", P: "[db4,db5]!3 [eb4,eb5]",
  Q: "[gb4,gb5]@3 [ab4,ab5]@3 [bb4,bb5]@2 [db5,db6]@4", R: "[e4,e5]@3 [d4,d5]@2 [d4,d5] ~@6",
  S: "[d4,d5]@3 [b3,b4]@2 [b3,b4] ~@6", // D B
  T: "[[d4,d5]@3 [b3,b4]@2 [b3,b4] ~@2 [b3,b4]@3 [e4,e5]@4 [db4,db5]@2 [db4,db5] ~@6]/2", U: "[d4,d5]!3 [e4,e5]",
  V: "[g4,g5]@3 [a4,a5]@3 [b4,b5]@2 [d5,d6]@4", W: "[~@6 e4@3 g4@2 eb4@10 b3@2 gb4@10 ~@3]/3", X: "~@4 b4!2",
  Y: "e5 b4 b4@4", Z: "d4 e4 g4 a4", AA: "b4 d5 e5 g5",
})).s("gm_vibraphone").gain(0.3)

// chords · xylophone
const xylophone = note(`<
  ~@21 A B C D A E F G A B C D ~@4 H@2 I@2 J@2 K@2 H@2 L@2 M@2 N@2 H@2 I@2 J@2 K@2 H@2 L@2 M@2 N@2 ~@32 O P Q@2 O P R ~
  S@2 T@2 U@2 V@2 S@2 T@2 U@2 V@2 W X Y@2 W X Z AA AB AC AD@2 AB AC AE AF AG@2 AH@2 AI@2 AJ@2 AG@2 AK@2 ~@4
>`.pickRestart({
  A: "[eb5,gb5]@2 [eb5,gb5] [eb5,gb5]@3 [bb5,eb6]@6", B: "[d5,f5]@2 [d5,f5] [d5,f5]@3 [bb5,d6]@6",
  C: "[gb5,bb5]@2 [gb5,bb5] [gb5,bb5]@3 [eb6,gb6]@6", D: "[c5,eb5]@5 [c5,eb5]@4 [c5,eb5]@3",
  E: "[db5,f5]@2 [db5,f5] [db5,f5]@3 [bb5,db6]@6", F: "db5 eb5 gb5 ab5", G: "bb5 db6 eb6 gb6",
  H: "[[b5,eb6]@3 [b5,eb6]@3 ~@5 [bb5,d6]@3 ~ [bb5,d6]@3 ~@6]/2", // B Bb
  I: "[[eb6,gb6]@3 [db6,eb6]@3 ~@5 [c6,f6]@3 ~ [c6,eb6]@3 ~@6]/2", // Ebm Dbsus2 F5 Cm
  J: "[[b5,eb6]@3 [b5,eb6]@3 ~@5 [bb5,db6]@3 ~ [bb5,db6]@3 ~@6]/2", // B Bbm
  K: "[[bb5,eb6]@3 [bb5,eb6]@3 ~@5 [b5,eb6]@3 ~ [b5,eb6]@3 ~@6]/2", // Eb5 B
  L: "[[eb6,gb6]@3 [eb6,gb6]@3 ~@5 [eb6,gb6]@3 ~ [eb6,gb6]@3 ~@6]/2", // Ebm
  M: "[[b5,eb6]@3 [b5,eb6]@3 ~@5 db6 f6@2 ~ [bb5,f6]@3 ~@6, ~@11 bb5@3 ~@10]/2", // B Bb5
  N: "[[eb6,gb6]@3 [eb6,gb6]@3 ~@5 [b5,eb6]@3 ~ [b5,eb6]@3 ~@6]/2", // Ebm B
  O: "bb5 gb5 eb5 bb5 gb5 eb5 bb5 gb5 eb5 bb5 gb5 eb5", P: "bb5 f5 db5 bb5 f5 db5 bb5 f5 db5 bb5 f5 db5",
  Q: "bb5 ab5 eb5 bb5 ab5 eb5 bb5 ab5 eb5 bb5 ab5 eb5", R: "[db5,f5,ab5]!2 ~@2",
  S: "[[b5,eb6,gb6,bb6]@6 [b5,eb6,gb6,bb6]@3 ~@13 [bb5,d6,f6,ab6]@6 ~@2 [bb5,d6,f6,ab6]@3 ~@15]/2", // Bmaj7 Bb7
  T: "[[eb6,gb6,bb6,db7]@6 [eb6,gb6,bb6,db7]@3 ~@13 [eb6,gb6,c7,f7]@6 ~@2 [eb6,gb6,c7,f7]@3 ~@15]/2", // Ebm7 Cdim
  U: "[[b5,eb6,gb6,bb6]@6 [b5,eb6,gb6,bb6]@3 ~@13 [bb5,db6,f6,ab6]@6 ~@2 [bb5,db6,f6,ab6]@3 ~@15]/2", // Bmaj7 Bbm7
  V: "[[bb5,eb6]@6 [bb5,eb6]@3 ~@13 [b5,eb6,gb6,ab6]@6 ~@2 [b5,eb6,gb6,ab6]@3 ~@15]/2", // Eb5 Abm7
  W: "[eb5,eb6]@3 [db5,db6]@2 [db5,db6] ~@6", X: "[db5,db6]@3 [bb4,bb5]@2 [bb4,bb5] ~@6",
  Y: "[[db5,db6]@3 [bb4,bb5]@2 [bb4,bb5] ~@2 [bb4,bb5]@3 [eb5,eb6]@4 [c5,c6]@2 [c5,c6] ~@6]/2", // Db Bb Eb C
  Z: "[db5,db6]!3 [eb5,eb6]", AA: "[gb5,gb6]@3 [ab5,ab6]@3 [bb5,bb6]@2 db6@4", AB: "[e5,e6]@3 [d5,d6]@2 [d5,d6] ~@6",
  AC: "[d5,d6]@3 [b4,b5]@2 [b4,b5] ~@6", // D B
  AD: "[[d5,d6]@3 [b4,b5]@2 [b4,b5] ~@2 [b4,b5]@3 [e5,e6]@4 [db5,db6]@2 [db5,db6] ~@6]/2", AE: "[d5,d6]!3 [e5,e6]",
  AF: "[g5,g6]@3 [a5,a6]@3 [b5,b6]@2 d6@4", // G A B
  AG: "[[c6,e6,g6,b6]@6 [c6,e6,g6,b6]@3 ~@13 [b5,eb6,gb6,a6]@6 ~@2 [b5,eb6,gb6,a6]@3 ~@15]/2", // Cmaj7 B7
  AH: "[[e5,g5,b5,d6]@6 [e5,g5,b5,d6]@3 ~@13 [e5,g5,db6,gb6]@6 ~@2 [e5,g5,db6,gb6]@3 ~@15]/2", // Em7 Dbdim
  AI: "[[c6,e6,g6,b6]@6 [c6,e6,g6,b6]@3 ~@13 [b5,d6,gb6,a6]@6 ~@2 [b5,d6,gb6,a6]@3 ~@15]/2", // Cmaj7 Bm7
  AJ: "[[b5,e6]@6 [b5,e6]@3 ~@13 [c6,e6,g6,a6]@6 ~@2 [c6,e6,g6,a6]@3 ~@15]/2", // E5 Am7
  AK: "[[e6,g6,b6,d7]@6 [e6,g6,b6,d7]@3 ~@13 [e6,g6,db7,gb7]@6 ~@2 [e6,g6,db7,gb7]@3 ~@3 [db5,e5]@6 [db5,e5]@6]/2", // Em7 Dbdim Dbm
})).s("gm_xylophone").gain(0.3)

// bass · acoustic bass · "Contrabass"
const bass = note(`<
  ~@21 A B C D A E F G A B C D F ~@3 H I J K H L H M H I J K H L H N H I J K H L H M H I J K H L H N ~@24 O P Q R S P Q
  ~ O P Q R S P Q ~ T U V W T X U Y T U V W T X U Y Z AA AB@2 Z AA AC AD AE AF AG@2 AE AF AH AI AJ AK AL AM AJ AN AK AO
  AJ AK AL AM AP ~@3
>`.pickRestart({
  A: "eb2", B: "d2", C: "bb1 db2 eb2 gb2", D: "bb2@2 ab2 gb2@3 eb2@3 db2@3", E: "db2@3 db2", F: "bb1",
  G: "bb1@2 eb2 gb2", H: "eb2@2 eb2 eb2@3 ~@6", I: "d2@2 d2 d2@3 ~@6", J: "gb2@2 gb2 gb2@3 ~@6", K: "eb2@5 eb2@4 eb2@3",
  L: "db2@2 db2 db2@3 ~@6", M: "gb2@5 gb2@4 gb2@3", N: "db2@5 db2@4 db2@3", O: "[b1,bb2]!2 ~@2", P: "[bb1,bb2]!2 ~@2",
  Q: "[eb2,eb3]!2 ~@2", R: "[eb2,eb3]!4", S: "[b1,b2]!2 ~@2", T: "[b1,b2] [db2,db3] [eb2,eb3] [f2,f3]",
  U: "[gb2,gb3] [f2,f3] [eb2,eb3] [db2,db3]", V: "[bb1,bb2] [db2,db3] [eb2,eb3] [gb2,gb3]",
  W: "[bb2,bb3]@2 [ab2,ab3] [gb2,gb3]@3 [eb2,eb3]@3 [db2,db3]@3", X: "[gb2,gb3] [f2,f3] [eb2,eb3] [f2,f3]",
  Y: "[bb1,bb2] [db2,db3] [bb1,bb2] [db2,db3]", Z: "[eb2,eb3]@3 [db2,db3]@2 [db2,db3] ~@6",
  AA: "[db2,db3]@3 [bb1,bb2]@2 [bb1,bb2] ~@6", // Db Bb
  AB: "[[db2,db3]@3 [bb1,bb2]@2 [bb1,bb2] ~@2 [bb1,bb2]@3 [eb2,eb3]@4 [c2,c3]@2 [c2,c3] ~@6]/2", // Db Bb Eb C
  AC: "[db2,db3]!3 [eb2,eb3]", AD: "[gb2,gb3]@3 [ab2,ab3]@3 [bb2,bb3]@2 [db3,db4]@4",
  AE: "[e2,e3]@3 [d2,d3]@2 [d2,d3] ~@6", AF: "[d2,d3]@3 [b1,b2]@2 [b1,b2] ~@6",
  AG: "[[d2,d3]@3 [b1,b2]@2 [b1,b2] ~@2 [b1,b2]@3 [e2,e3]@4 [db2,db3]@2 [db2,db3] ~@6]/2", AH: "[d2,d3]!3 [e2,e3]",
  AI: "[g2,g3]@3 [a2,a3]@3 [b2,b3]@2 [d3,d4]@4", AJ: "[c2,c3] [d2,d3] [e2,e3] [gb2,gb3]",
  AK: "[g2,g3] [gb2,gb3] [e2,e3] [d2,d3]", AL: "[b1,b2] [d2,d3] [e2,e3] [g2,g3]",
  AM: "[b2,b3]@2 [a2,a3] [g2,g3]@3 [e2,e3]@3 [d2,d3]@3", AN: "[g2,g3] [gb2,gb3] [e2,e3] [gb2,gb3]",
  AO: "[b1,b2] [d2,d3] [b1,b2] [d2,d3]", AP: "[c2,c3]",
})).s("gm_acoustic_bass").gain(0.3)

// chords · epiano1 · "Electric Piano"
const epiano1 = note(`<
  ~@2 A@2 ~@17 B@2 C@2 D@2 E@2 B@2 C@2 D@2 F@2 G@2 H@2 I@2 J@2 I@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 I@2 H@2 I@2 J@2 K@2 L@2
  M@2 N ~ K@2 L@2 M@2 N ~ K@2 L@2 M@2 N ~ K@2 L@2 M@2 N ~ K@2 L@2 M@2 N ~ B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 O P Q@2 O P R
  S T U V@2 T U W X Y@2 Z@2 AA@2 AB@2 Y@2 Z@2 AA@2 AC@2
>`.pickRestart({
  A: "[[eb3,gb3,bb3,db4]@3 ~@7 [eb3,gb3,bb3,db4]@3 ~@5 [eb3,gb3,bb3,db4]@30]/2", // Ebm7
  B: "[[b2,eb3,gb3,bb3]@6 [b2,eb3,gb3,bb3]@3 ~@13 [bb2,d3,f3,ab3]@6 ~@2 [bb2,d3,f3,ab3]@3 ~@15]/2", // Bmaj7 Bb7
  C: "[[eb3,gb3,bb3,db4]@6 [eb3,gb3,bb3,db4]@3 ~@13 [eb3,gb3,c4,f4]@6 ~@2 [eb3,gb3,c4,f4]@3 ~@15]/2", // Ebm7 Cdim
  D: "[[b2,eb3,gb3,bb3]@6 [b2,eb3,gb3,bb3]@3 ~@13 [bb2,db3,f3,ab3]@6 ~@2 [bb2,db3,f3,ab3]@3 ~@15]/2", // Bmaj7 Bbm7
  E: "[[bb2,eb3]@6 [bb2,eb3]@3 ~@13 [b2,eb3,gb3,ab3]@6 ~@2 [b2,eb3,gb3,ab3]@3 ~@15]/2", // Eb5 Abm7
  F: "[[eb3,gb3,bb3,db4]@6 [eb3,gb3,bb3,db4]@3 ~@13 [b2,eb3,gb3,ab3]@6 ~@2 [b2,eb3,gb3,ab3]@3 ~@15]/2", // Ebm7 Abm7
  G: "[[b3,gb4,eb5,bb5]@11 [bb3,f4,d5,ab5]@13]/2", H: "[[bb3,eb4,db5,gb5]@11 [c4,eb4,eb5,gb5]@13]/2",
  I: "[[b3,gb4,eb5,bb5]@11 [bb3,f4,db5,ab5]@13]/2", J: "[[bb3,eb4,db5,gb5]@11 [b3,gb4,eb5,ab5]@13]/2",
  K: "[[b2,eb3,gb3,bb3]@6 [b2,eb3,gb3,bb3]@3 ~@13 [bb2,db3,f3,ab3]@6 ~@2 [bb2,db3,f3,ab3]@6 ~@12]/2", // Bmaj7 Bbm7
  L: "[[eb3,gb3,bb3,db4]@6 [eb3,gb3,bb3,db4]@3 ~@13 [ab2,c3,eb3,ab3]@6 ~@2 [ab2,c3,eb3,ab3]@6 ~@12]/2", // Ebm7 Ab
  M: "[[b2,eb3,gb3,bb3]@3 [b2,eb3,gb3,bb3]@3 ~@5 [bb2,db3,f3,ab3]@3 ~ [bb2,db3,f3,ab3]@3 ~@3 eb3@3]/2", // Bmaj7 Bbm7
  N: "[eb3,gb3,bb3,db4] ~ [eb3,gb3,bb3,db4] ~@5", O: "[ab2,ab3]@3 [gb2,gb3]@2 [gb2,gb3] ~@6",
  P: "[gb2,gb3]@3 [gb2,gb3]@2 [gb2,gb3] ~@6", // Gb
  Q: "[[gb2,gb3]@3 [gb2,gb3]@2 [gb2,gb3] ~@2 [db2,db3]@3 [ab2,ab3]@4 [gb2,gb3]@2 [gb2,gb3] ~@6]/2", // Gb Db Ab Gb
  R: "[gb2,gb3] ~ [gb2,gb3] ~ [gb2,gb3]@2 [ab2,ab3]@2", S: "[b2,b3]@3 [db3,db4]@3 [eb3,eb4]@2 [gb3,gb4]@4",
  T: "[a2,a3]@3 [g2,g3]@2 [g2,g3] ~@6", U: "[g2,g3]@3 [g2,g3]@2 [g2,g3] ~@6",
  V: "[[g2,g3]@3 [g2,g3]@2 [g2,g3] ~@2 [d2,d3]@3 [a2,a3]@4 [g2,g3]@2 [g2,g3] ~@6]/2", // G D A G
  W: "[g2,g3] ~ [g2,g3] ~ [g2,g3]@2 [a2,a3]@2", X: "[c3,c4]@3 [d3,d4]@3 [e3,e4]@2 [g3,g4]@4",
  Y: "[[c3,e3,g3,b3]@6 [c3,e3,g3,b3]@3 ~@13 [b2,eb3,gb3,a3]@6 ~@2 [b2,eb3,gb3,a3]@3 ~@15]/2", // Cmaj7 B7
  Z: "[[e3,g3,b3,d4]@6 [e3,g3,b3,d4]@3 ~@13 [e3,g3,db4,gb4]@6 ~@2 [e3,g3,db4,gb4]@3 ~@15]/2", // Em7 Dbdim
  AA: "[[c3,e3,g3,b3]@6 [c3,e3,g3,b3]@3 ~@13 [b2,d3,gb3,a3]@6 ~@2 [b2,d3,gb3,a3]@3 ~@15]/2", // Cmaj7 Bm7
  AB: "[[b2,e3]@6 [b2,e3]@3 ~@13 [c3,e3,g3,a3]@6 ~@2 [c3,e3,g3,a3]@3 ~@15]/2", // E5 Am7
  AC: "[[e3,g3,b3,d4]@6 [e3,g3,b3,d4]@3 ~@13 [c3,e3,g3,a3]@6 ~@2 [c3,e3,g3,a3]@3 ~@15]/2", // Em7 Am7
})).s("gm_epiano1").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A C A C A C A C A C ~@4 A B A C A B A C A B A C ~@4 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 ~@32 D@6 E ~ A B A B A B A B A B A B A B A B F@2 G H F@2 D@2 F@2 G H F@2 D@2 A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "x ~@2 x ~@5 x ~ x", B: "~@2 x!2 ~@5 x ~@2", C: "~@2 x!2 ~@8", D: "x!4", E: "x!2 ~@2", F: "x ~@2 x ~ x ~@6",
  G: "x ~@2 x ~ x ~@2 x ~@2 x", H: "~@3 x ~ x ~@6",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@3 A B A@12 ~@4 A@12 ~@94 A C ~@6 A C ~@20>".pickRestart({
  A: "~ x", B: "x!2", C: "x!6",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@37 A@32 ~@36 A@2 B ~ A C A D A C A D A C A D A C A D E F G ~ H I J K E F G ~ H I J K A C A D A C A D A C A D ~@4
>`.pickRestart({
  A: "~ x", B: "x!2 ~@2", C: "~@6 x ~@4 x", D: "~@6 x!6", E: "~@6 x ~@3 x ~ x ~ x ~ x ~ x!3 ~ x!2", F: "x ~@2 x!3",
  G: "x!2 ~ x!2 ~ x ~ x ~ x ~@13", H: "~@3 x ~ x!2 ~ x ~ x ~", I: "~@3 x ~ x ~@6", J: "x!4", K: "x ~@2 x ~@2 x!6",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@125 A ~@4 B ~@2 A ~@4 B ~@18>".pickRestart({
  A: "x!3 ~@9", B: "~@12 x!2 ~ x!2 ~@7",
})).gain(0.4)
// … 33 more lines

More by Kazumi Totaka