Strudelify

Surf City

Jan & Dean

KeyA♭ majorTempo152 bpm
0:00/0:00
// Surf City — Jan & Dean
// 152 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(152/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.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B C D E F G D H I J K L A M N O P Q R S T U V ~ A B W X W Y G X Z AA AB AC AD A M AE AF P Q AG AH AI Q AJ ~ A B
  W AK H AL E X AM AA J AN AO A@2 B AI AP AI AQ AR AS AI Q AJ ~@3 AT AU AT AV AT AW AX AV AT AY AZ@2 BA BB
>`.pickRestart({
  A: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~", B: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~",
  C: "ab1@5 ~ ab1@2 eb2@3 ~ ab1@4", D: "f1@5 ~ f1@2 c2@4 f1@4", E: "ab1@2 ~ ab1 eb2@2 ~ eb2",
  F: "ab1@4 ~@2 ab1@2 eb2 ~ eb2@3 ~ eb2@2", G: "ab1@2 ~ ab1 eb2@2 ab1@2", H: "ab1@4 ~@2 ab1@2 eb2@5 ~ eb2@2",
  I: "f1@4 ~@2 f1@2 c2@4 f1@3 ~", J: "db2@5 ~ db2@2 ab1@4 db2@4", K: "bb1@5 ~ bb1@2 f1@4 bb1@3 ~",
  L: "gb1@5 ~ gb1@2 db2@4 gb1@3 ~", M: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2@2",
  N: "ab1@3 ~ f1@3 ~ eb2@3 ~ f1@3 ~", O: "ab1@3 ~ f1@2 eb2@2 ~@2 eb2 ~ f1@2 eb2 ~",
  P: "ab1@4 f1@3 ~ eb2@3 ~ f1@2 ab1@2", Q: "~@2 ab1@2 f1@3 ~ eb2 ~ eb2@2 f1@2 ab1 ~",
  R: "db2@4 f1@3 ~ ab1@4 bb1 ~ ab1 ~", S: "db2 ~ db2@2 f1@4 ab1@4 bb1@3 ~, ~@2 d2 ~@13",
  T: "ab1@3 ~ f1@3 ~ eb2@3 ~ f1@2 eb2 ~", U: "ab1 ~ ab1@2 f1@3 ~ eb2@2 f1@2 ab1@3 ~", V: "b1 ~@3",
  W: "ab1@4 ~@2 ab1@2 eb2@4 ab1@3 ~", X: "f1@2 ~ f1 c2@2 f1@2", Y: "ab1@2 ab1@3 ~ ab1@2 eb2 ~ eb2@2 f1@2 eb2@2",
  Z: "ab1@4 ~@2 ab1@2 eb2@7 ~", AA: "f1@4 ~@2 f1@2 c2 ~ c2@2 f1@3 ~", AB: "db2@2 ~ db2 ab1@2 db2@2",
  AC: "bb1@2 ~ bb1 f1@2 bb1@2", AD: "gb1@4 ~@2 gb1@2 db2@4 gb1@3 ~", AE: "ab1 ~ ab1@2 f1@3 ~ eb2@4 f1 ~ eb2 ~",
  AF: "ab1 ~ ab1@2 f1@2 eb2@2 ~@2 eb2@2 f1@2 eb2 ~", AG: "db2@4 f1@3 ~ ab1@4 bb1@2 ab1 ~",
  AH: "db2 ~ db2@2 f1@3 ~ ab1@4 f1@2 ab1 ~", AI: "ab1@3 ~ f1@3 ~ eb2@4 f1@2 ab1@2", AJ: "b1@5 ~@11",
  AK: "f1@4 ~@2 f1@2 c2@5 ~ f1@2", AL: "ab1 ~ ab1@3 ~ ab1@2 eb2 ~ eb2@2 ab1@2 eb2@2", AM: "ab1@5 ~ ab1@2 eb2@4 ab1@4",
  AN: "bb1@5 ~ bb1@2 f1@4 bb1@4", AO: "gb1@4 ~@2 gb1@2 db2 ~ db2@2 gb1@2 db2 ~",
  AP: "~@2 ab1@2 f1@3 ~ eb2 ~ eb2@2 f1@2 eb2 ~", AQ: "~@2 ab1@2 f1@4 eb2 ~ eb2@2 f1@3 ~",
  AR: "db2@4 f1@3 ~ ab1@4 f1@2 ab1 ~", AS: "db2@4 f1@4 ab1@4 f1@3 ~", AT: "c2@4 a1@3 ~ g1@3 ~ a1@3 ~",
  AU: "c2@4 a1@3 ~ g1@4 a1@2 g1@2", AV: "c2@2 a1 g1 ~ g1 a1 g1", AW: "c2@4 a1@2 g1@2 ~@2 g1@2 a1@2 g1 ~",
  AX: "c2 a1 g1 a1", AY: "c2@4 a1@3 ~ g1 ~ g1 ~ a1@2 g1 ~", AZ: "[c2@2 bb1@2 g1@2 c2 ~@5 c1@19 ~]/2", BA: "eb1@2 f1 g1",
  BB: "c2@5 ~@11",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · piano · "A.PIANO"
const piano = note(`<
  A B C D E F G@2 E F H I J K L M N O@4 P@2 O@2 Q R S T U V W@2 X Y X Y Z K L AA D O AB O@2 AC@2 AD AE Q AF S D AG AH
  AI@2 H AH H AH Z K AJ M AK AL O AM AN AO AC AP O@2 AQ AR AS AT AU AV AW AX AY AW AZ BA BB BC BD@3 BE
>`.pickRestart({
  A: "[eb4,gb4,b4]@7 ~", B: "[e4,ab4]@6 ~@2 [e4,bb4]@5 ~@3",
  C: "[eb4,eb6] ~@3 [eb4,eb5,eb6] ~@3 [eb5,eb6]@2 ~@2 [eb4,eb5,eb6] ~@3, eb5@2 ~@6 eb4 ~@7", // Eb
  D: "[eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~", // Eb
  E: "[c4,eb4,ab4]@7 ~", F: "[c4,f4,ab4]@7 ~", G: "[[c4,eb4,ab4]@27 ~@5]/2", H: "[c4,eb4,ab4]@15 ~",
  I: "[c4,f4,ab4]@3 ~", J: "[db4,f4,ab4]@7 ~", K: "[bb3,db4,f4,bb4]@13 ~@3", L: "[gb3,db4,gb4,bb4]@11 ~@5",
  M: "[eb4,eb5,eb6] ~@3 [eb4,eb5,eb6] ~@3 [eb4,eb5,eb6] ~@3 [eb4,eb5,eb6] ~@3", // Eb
  N: "[eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ [eb4,eb5,eb6] ~ eb4 ~", // Eb
  O: "[ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~", // Ab5
  P: "[[ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~, eb6]/2", // Db5
  Q: "[eb5,gb5,b5] ~@5 [eb5,gb5,b5] ~@5 [eb5,gb5,b5] ~@3", R: "[e5,ab5] ~@3 [e5,bb5] ~@3",
  S: "[eb5,eb6] ~@3 [eb5,eb6] ~@3 [eb5,eb6] ~@3 [eb5,eb6] ~@3", // Eb
  T: "eb4 ~ [eb5,eb6] ~ eb6@2 eb4 ~ [eb5,eb6] ~ [eb5,eb6] ~ eb4 ~ [eb5,eb6] ~, ~@4 eb5 ~@11", U: "[c4,eb4,ab4]@3 ~",
  V: "[f3,c4,f4,ab4]@7 ~", W: "[[ab3,c4,eb4,ab4]@3 ~]/2", X: "[c4,eb4,ab4]@15 ~, ab3@3 ~", Y: "[f3,c4,f4,ab4]@13 ~@3",
  Z: "[db4,f4,ab4]@13 ~@3", // Db
  AA: "[eb4,eb5,eb6] ~ [eb5,eb6] ~ [eb4,eb5,eb6] ~ eb4 ~ [eb4,eb5,eb6] ~ eb4 ~ [eb4,eb5,eb6] ~ eb4 ~", // Eb
  AB: "[ab5,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,d6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,d6,ab6] ~ [ab5,eb6,ab6] ~", // Ab Ab5 Abdim Ab5 Abdim Ab5
  AC: "[ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~", // Db5
  AD: "[ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,f6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,f6,ab6] ~ [ab5,eb6,ab6] ~", // Ab5 Db Ab5 Db Ab5
  AE: "[ab5,f6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~", // Db Ab5
  AF: "[e5,ab5]@5 ~@3 [e5,bb5]@4 ~@4", AG: "[c4,eb4]@7 ~, ab4@11 ~@5", AH: "[c4,f4,ab4]@13 ~@3",
  AI: "[[c4,eb4,ab4]@25 ~ eb4@2 f4@2 eb4 ~]/2", AJ: "[gb3,db4,gb4,bb4]@3 ~",
  AK: "[eb4,eb5,eb6] ~@3 [eb3,eb4,eb5,eb6] ~@3 [eb3,eb4,eb5,eb6] ~@3 [eb3,eb4,eb5,eb6] ~@3", // Eb
  AL: "[eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~ [eb3,eb4,eb5,eb6] ~", // Eb
  AM: "[ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,d6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~", // Ab5 Abdim Ab5
  AN: "[ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,f6,ab6] ~ [ab5,eb6,ab6] ~", // Ab5 Db Ab5
  AO: "[ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,f6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,f6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~ [ab5,eb6,ab6] ~", // Ab5 Db Ab5 Db Ab5
  AP: "[ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [ab5,db6,ab6] ~ [bb5,db6,ab6] ~ [ab5,db6,ab6] ~", // Db5 Bbm7 Db5
  AQ: "[eb5,gb5,b5]@4 ~@2 [eb5,gb5,b5]@4 ~@2 [eb5,gb5,b5]@3 ~", AR: "[e5,ab5]@7 ~ [e5,bb5]@5 ~@3",
  AS: "[e4,g4,c5]@4 ~@2 [e4,g4,c5]@4 ~@2 [e4,g4,c5]@3 ~", AT: "[f4,a4]@6 ~@2 [f4,b4]@7 ~",
  AU: "[c4,g4,c5] ~ [c4,g4,c5] ~ [c4,d4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,bb4,c5] ~", // C5 Csus2 C5 C7
  AV: "[c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~", // C5
  AW: "[c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~", // C5
  AX: "[c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,gb4,c5] ~ [c4,gb4,c5] ~ [c4,gb4,c5] ~", // C5 Cdim
  AY: "[c4,gb4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~", // Cdim C5
  AZ: "[c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~", // Cm7
  BA: "[c4,bb4,eb5] ~ c4 ~ c4 ~ c4 ~ c4 ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~", // Cm7
  BB: "c4 ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~ [c4,bb4,eb5] ~", // Cm7
  BC: "[c4,bb4,eb5] ~ [c4,g4,c5,db5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~, ~@6 d5!2", // Cm7 C C5
  BD: "[[c4,d5] ~ [bb3,bb4]@2 g3@2 [bb3,g4,c5] ~@5 bb4@2 bb4 g4 [bb4,c5] g4 [bb4,c5] g4 [bb4,c5] g4 [bb4,c5] g4 bb4 g4 bb4 g4 bb4 g4 bb4 g4 bb4 g4@2 eb4 ~ eb4 g4 ~ [c4,f4,a4]@4 ~ a4 ~@2, ~@4 g4 ~ c4@2 ~@4 c4@23 ~ bb3@3 ~@5 [d4,g4,b4]@3 ~, ~@3 [g4,c5] ~@8]/3", // Csus2 Bb C7 Bbsus2 F G C5
  BE: "~ c4@7 ~@8, [g4,bb4,c5] ~", // C7
})).s("gm_piano").gain(0.35).pan(0.3)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@2 A B C D C@3 D C D E F G H B C@4 E@2 C@2 I J K B C D C L C D C D E M N O B C@4 E P C@2 Q R A B C D C@3 D S@5 T U B
  C@4 E@2 C@2 V W X Y Z@10 AA@2 AB AC
>`.pickRestart({
  A: "[bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3", // Eb
  B: "[bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~", // Eb
  C: "~@4 [c4,eb4,ab4] ~ [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@3", D: "~@4 [c4,f4,ab4] ~ [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@3",
  E: "~@4 [db4,f4,ab4] ~ [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@3", F: "~@4 [bb3,db4,f4] ~ [bb3,db4,f4] ~@5 [bb3,db4,f4] ~@3",
  G: "~@4 [bb3,db4,gb4] ~ [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@3", // Gb
  H: "[bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@3 ~ [bb3,g4]@2 eb4 ~, ~@12 eb4 ~@3", // Eb
  I: "[eb4,gb4,b4] ~@5 [eb4,gb4,b4]@2 ~@4 [eb4,gb4,b4] ~@3", J: "[b3,e4,ab4]@3 ~@5 [bb3,e4,bb4]@3 ~@5",
  K: "[bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3", // Eb
  L: "~@4 [c4,eb4,ab4] ~ [c4,eb4,ab4] ~@5 [c4,eb4,ab4]@2 ~@2", // Ab
  M: "~@4 [db4,f4,bb4] ~ [db4,f4,bb4] ~@5 [db4,f4,bb4] ~@3", // Bbm
  N: "~@4 [db4,gb4,bb4] ~ [db4,gb4,bb4] ~@5 [db4,gb4,bb4] ~@3", // Gb
  O: "[bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@2 ~@2", // Eb
  P: "~@4 [db4,f4,ab4] ~ [db4,f4,ab4] ~@5 [db4,f4,ab4]@2 ~@2", Q: "[eb4,gb4,b4] ~@5 [eb4,gb4,b4] ~@5 [eb4,gb4,b4] ~@3",
  R: "[b3,e4,ab4] ~@3 [bb3,e4,bb4] ~@3", // E Bbdim
  S: "[~@4 [c4,eb4,ab4] ~ [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@7 [c4,f4,ab4] ~ [c4,f4,ab4] ~@5 [c4,f4,ab4] ~@7 [db4,f4,ab4] ~ [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@7 [db4,f4,bb4] ~ [db4,f4,bb4] ~@5 [db4,f4,bb4] ~@7 [db4,gb4,bb4] ~ [db4,gb4,bb4] ~@5 [db4,gb4,bb4] ~@3, ~@3 gb4@14 ~@3]/5", // Ab Fm Db Bbm Gb
  T: "[bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~ bb3 ~", // Eb
  U: "[bb3,eb4,g4] ~@3 [bb3,eb4,g4]@2 ~@2 [bb3,eb4,g4] ~ bb3 ~ [bb3,eb4,g4] ~ bb3 ~", // Eb
  V: "[eb4,gb4,b4]@2 ~@4 [eb4,gb4,b4] ~@5 [eb4,gb4,b4] ~@3", W: "[b3,e4,ab4]@3 ~@5 [e4,bb4]@2 ~@6",
  X: "[c4,e4,g4] ~@2 [c4,e4,g4] ~@2 [c4,e4,g4] ~", Y: "[c4,f4,a4]@3 ~@5 [b3,f4,b4]@2 ~@6",
  Z: "~@4 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~@3", AA: "[c4 ~ bb3 ~ g3 ~ c4 ~@5 c4@16 ~@4]/2",
  AB: "eb4@6 ~@2 f4@3 ~ g4@4, ~@12 f4 ~@3", AC: "c4@3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.54).pan(0.7)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted_2 = note(`<
  ~@3 A B C D E B C B C F G H I J K@4 L@2 K@2 M ~ N J B C K O B C D C F G P Q J K@4 L@2 K O R ~ S J T C T K B C D C F G
  P U V J K@4 L@2 K@2 W ~@3 X@10 Y@2 Z AA
>`.pickRestart({
  A: "eb4 ~ eb4 ~ eb4 ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~", // Eb5
  B: "[ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~", // Ab5
  C: "[f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~", // F5
  D: "[ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~", // Ab5 Db Ab5
  E: "[ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [gb3,ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~", // Ab5 Db Ab5 Ab7 Ab5
  F: "[db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~", // Db5
  G: "[bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~", // Bb5
  H: "[gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~", // Gb5
  I: "[bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4]@2 ~@2", // Eb5
  J: "[bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~", // Eb5
  K: "[ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4] ~ [ab3,eb4] ~", // Ab5 Db Ab5 Db Ab5
  L: "[db4,ab4] ~ [db4,ab4] ~ [db4,bb4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,ab4] ~ [db4,bb4] ~ [db4,ab4] ~", // Db5 Gb Db5 Gb Db5
  M: "[b3,gb4] ~@7", N: "[bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~",
  O: "[ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4]@2 [ab3,eb4] ~", // Ab5 Db Ab5 Db Ab5
  P: "[gb3,db4] ~ [gb3,db4] ~ [gb3,eb4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~ [gb3,db4] ~", // Gb5 Ebm Gb5
  Q: "[bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,d4,eb4] ~@3", R: "[b3,gb4]@3 ~@13",
  S: "[bb3,eb4]@2 ~@2 [bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~@3", // Eb5
  T: "[ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4]@2 [ab3,eb4] ~ [ab3,eb4] ~ [ab3,eb4] ~ [ab3,f4] ~ [ab3,eb4] ~", // Ab5 Db Ab5 Db Ab5
  U: "[bb3,eb4] ~@3 [bb3,eb4]@2 ~@2 [bb3,eb4] ~@3 [bb3,eb4] ~@3", // Eb5
  V: "[bb3,eb4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~ eb4 ~ [bb3,eb4] ~@3", W: "[b3,gb4]@5 ~@11",
  X: "[c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~", // C5 F C5 F C5
  Y: "[c4 bb3 g3 c4 ~@2 [c4,g4]@9 ~]/2", Z: "[eb3,eb4]@7 ~ [f3,c4,f4]@2 ~@2 [g3,d4,g4]@2 ~@2", AA: "[c4,g4] ~@3",
})).s("gm_electric_guitar_muted").gain(0.54).pan(0.4)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  A B@3 C@8 D@5 E@4 F@4 G B@3 H@6 I@7 E@4 J@2 K@2 G L@3 M@8 N@6 E@4 J@2 O@2 P Q R S T@8 ~@4 U V
>`.pickRestart({
  A: "[eb4,gb4,b4]", B: "[[b3,ab4]@8 bb4@8 [eb4,g4]@29 ~@3, e4@7 ~@17, ~@8 bb3@37 ~@3]/3",
  C: "[eb4@15 ~ f4@16 eb4@48 f4@16 eb4@16 f4@16, ab4, c4@63 ~]/8",
  D: "[~@32 gb4@15 ~@17 bb3@15 ~, db4@47 ~ eb4@31 ~, ~@16 bb4@49 ~@15, ~@48 g4@27 ~@5]/5", E: "[[c4,eb4,ab4]@63 ~]/4",
  F: "[[db4,f4]@31 ~ [c4,eb4]@29 ~@3, ab4@61 ~@3]/4", G: "[gb4,b4], eb4@7 ~",
  H: "[eb4@16 f4@16 eb4@48 f4@15 ~, [c4,ab4]@47 ~]/6", // Fm
  I: "[eb4@16 ~@48 gb4@15 ~@25 g3@8, ab4@24 bb4@24 bb3@7 ~, c4@31 ~ db4@47 ~ eb4@31 ~, ~@16 f4@47 ~@17 g4@24 ~@8]/7",
  J: "[[db4,f4,ab4]@31 ~]/2", K: "[[c4,eb4,ab4]@15 ~]/2",
  L: "[[b3,ab4]@8 bb4@8 eb4@29 ~@3, e4@15 ~ g4@24 ~@8, ~@8 bb3@37 ~@3]/3", // E
  M: "[[c4,eb4,ab4] ~ eb4@14 f4@16 eb4@48 f4@16 eb4@16 f4@15 ~, ~ [c4,ab4]@62 ~]/8", // Ab Fm
  N: "[ab4@15 ~@17 gb4@15 ~@33 [g3,eb4]@16, db4@16 [eb4,g4]@11 ~@5, f4@15 ~@17 bb3@16, ~@5 bb4@16 ~@11]/6", // Cm Eb
  O: "[[c4,eb4,ab4]@29 ~@3]/2", P: "[eb4,gb4,b4]@15 ~", Q: "[b3,ab4]@4 [bb3,bb4]@3 ~, e4@7 ~", R: "[e4,g4,c5]@15 ~",
  S: "[c4,a4] [b3,b4], f4@7 ~", T: "[[e4,g4,c5], c4@7 ~@57]/8", U: "[bb3,eb4,g4]@7 ~ [c4,f4,a4]@3 ~ [d4,g4,b4]@3 ~",
  V: "[e4,g4,c5] ~@3", // C
})).s("gm_synth_strings_1").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B@2 C@11 D B C@8 A@2 B@2 C@11 D B C@8 A@2 B@2 C@11 B@3 C@8 A@4 C@10 E ~@2 F
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!4", C: "x!2", D: "x ~ x!2", E: "x ~@2 x ~@2 x ~", F: "x",
})).gain(0.71)

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

// drums · low tom
const low_tom = s("lt").struct("<~@28 [~@13 x!3] ~@24 [~@13 x ~@2] ~@38 [~@12 x!2 ~ x] ~>").gain(0.57)

// drums · hihat
const hihat = s("hh").struct("<A@2 B C@12 D C@9 A@2 D C@12 D C@9 E A D C@12 F C@10 A@4 C@10 G A ~ H>".pickRestart({
  A: "~ x ~ x", B: "~ x!3", C: "x!8", D: "x!4", E: "x!2 ~ x", F: "x!5 ~ x!2", G: "x!4 ~@2 x ~", H: "x",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 [~@11 x!2 ~@3] ~@24 [~ x ~ x] ~@38 [~@8 x!2 ~ x ~@4] ~>").gain(0.57)

// drums · high tom
const high_tom = s("ht").struct("<~@28 [~@4 x ~@4 x!2 ~@5] ~@24 [~@10 x!2 ~@4] ~@38 [~@4 x!2 ~ x ~@8] ~>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@12 A ~@11 A ~@12 A ~@11 A ~@13 A ~@11 A ~ A ~@5 A ~ B ~ C A>".pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~", C: "x ~ x!2",
})).gain(0.57)

stack(
  bass, piano, electric_guitar_muted, electric_guitar_muted_2, synth_strings_1, kick, snare, low_tom, hihat, mid_tom,
  high_tom, crash
)

More by Jan & Dean