Strudelify

Our Song

Yes

KeyD majorTempo164 bpm
0:00/0:00
// Our Song — Yes
// 164 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 2, 4/4 at bar 3, 3/4 at bar 4, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 170 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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.

// chords · synth strings 1 · "Kaye1"
const synth_strings_1 = note(`<
  A B C D E F@2 C D E G H I J K L M N O P Q@2 R S T U ~@33 V W@11 X Y ~@31 Q@2 R S T U Z R S T AA AB AC AD AE AF AG ~ AH
  AI AJ@6 AK AJ@4 AL AM@8 AN@8 AO T AA AP AQ@3 AR M N AS ~@7
>`.pickRestart({
  A: "[e5,a5,c#6]@5 ~ [e5,g#5,b5]@2 ~@2 [e5,a5,c#6]@2 ~@2 [f#5,a5,d6]@2", // A E A D
  B: "~ [e5,a5,c#6] ~ [e5,g#5,b5] [e5,a5,c#6] ~ [e5,a5,c#6]@2", // A E A
  C: "~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [f#5,a5,d6] ~ [e5,a5,c#6]", // E A D A
  D: "~@2 [e5,g#5,b5]@2 [e5,a5,c#6]@2 ~@2 [e5,a5,c#6]@5 ~ [e5,g#5,b5]@2", // E A E
  E: "~ [e5,a5,c#6] ~ [f#5,a5,d6] ~ [e5,a5,c#6] ~ [e5,g#5,b5]", // A D A E
  F: "[[d5,f#5,a5]@5 ~ [f#5,a5,c#6]@6 [e5,g#5,b5]@6 ~@2 [d5,f#5,a5]@2 [d5,f#5,a5]@2 [d5,f#5,a5]@2 ~@2 [e5,a5,c#6]@4]/2", // D F#m E D A
  G: "[e5,a5,c#6]@2 ~@2 [e5,a5,c#6]@5 ~ [e5,g#5,b5]@2 ~@2 [e5,a5,c#6]@2", // A E A
  H: "~ [f#5,a5,d6] ~ [e5,a5,c#6] ~ [e5,g#5,b5] [f#5,a5,d6]@2", I: "~ [f#5,a5,c#6]@3 [e5,g#5,b5]@3 ~",
  J: "[d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~@3 [e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~", // D A E A
  K: "[e5,a5,c#6] ~ [f#5,a5,d6] ~ [f#5,a5,d6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~", // A D A E A
  L: "[e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [f#5,a5,d6] ~", // A E A D
  M: "[f#5,a5,d6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~", // D A E A
  N: "[e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [f#5,a5,d6] ~ [f#5,a5,d6] ~ [e5,a5,c#6] ~", // A E A D A
  O: "[e5,a5,c#6] ~ [e5,g#5,b5] ~ [f#5,a5,d6] ~ [f#5,a5,d6] ~ [f#5,a5,d6] ~ [f#5,a5,c#6] ~ [f#5,a5,c#6] ~ [f#5,a5,c#6] ~", // A E D F#m
  P: "[e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~", // E D
  Q: "[[a5,c#6]@5 ~ [g#5,b5]@2 ~@2 [a5,c#6]@2 ~@2 [a5,d6]@4 [a5,c#6]@3 ~ [g#5,b5]@2 [a5,c#6]@2 ~@2 [a5,c#6]@4]/2", // A G#m A D5 A G#m A
  R: "~ [g#5,b5] ~ [a5,c#6] ~ [a5,d6]@2 [a5,c#6]", S: "~@2 [g#5,b5]@2 [a5,c#6]@2 ~@2 [a5,c#6]@5 ~ [g#5,b5]@2",
  T: "~@2 [a5,c#6]@2 ~@2 [a5,d6]@4 [a5,c#6]@3 ~ [g#5,b5]@2", U: "[a5,d6]@5 ~ [a5,c#6]@6 [g#5,b5]@4", V: "~ d5 b5 g5",
  W: "a5 d5 b5 g5", X: "[c5,e5,a5]@3 ~ e5@3 ~ [a4,d5,f#5]@3 ~ d5@3 ~", Y: "[g4,a4,b4,e5]",
  Z: "~ d5 e5 f#5 a5 d6 [a5,c#6]@2", AA: "[a5,c#6]@2 ~@2 [a5,c#6]@5 ~ [g#5,b5]@2 ~@2 [a5,c#6]@2",
  AB: "~@2 [a5,d6]@4 [a5,c#6]@3 ~ [g#5,b5]@2 [d6,f#6]@4", AC: "~ [c#6,e6] ~ [d6,f#6] ~ [d6,g6]@2 [d6,f#6]",
  AD: "~@2 [c#6,e6]@2 [d6,f#6]@5 ~ [c#6,e6]@2 ~@2 [d6,f#6]@2", // C#m D C#m D
  AE: "~@2 [d6,g6]@4 [d6,f#6]@3 ~ [c#6,e6]@2 [f#5,a5,d6] ~ [f#5,a5,d6] ~", // G5 D C#m D
  AF: "[f#5,a5,d6] ~ [e5,a5,d6] ~ [e5,a5,d6] ~ [f#5,a5,d6] ~ [f#5,a5,d6] ~ [g5,a5,d6] ~ [g5,a5,d6] ~ [g5,a5,d6] ~", // D Dsus2 D Gsus2
  AG: "[g5,a5,d6] ~ [g5,a5,d6] ~@13", AH: "~@4 a4 ~@3", AI: "~@8 a5@3 ~ d5@3 ~", AJ: "b5@3 ~ g5@3 ~ a5@3 ~ d5@3 ~",
  AK: "b5@3 ~ f#5@3 ~ g5@3 ~ d5@3 ~", AL: "b5@3 ~ g5@3 ~@5 d5@3 ~, ~@4 [c5,e5,a5]@3 ~",
  AM: "[b5@3 ~ g5@3 ~ [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@13 ~@3 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@13 ~@3 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@13 ~@3 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@8, [d5,f#5,a5]@3 ~@61]/8", // Cmaj7 D Cmaj7 D Cmaj7 D Cmaj7 D
  AN: "[~@8 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@13 ~@3 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@13 ~@3 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@13 ~@3 [b4,c5,e5]@13 ~@3 [a4,d5,f#5]@8]/8", // Cmaj7 D Cmaj7 D Cmaj7 D Cmaj7 D
  AO: "~@8 [a5,c#6]@5 ~ [g#5,b5]@2", AP: "~@2 [a5,d6]@4 [a5,c#6]@3 ~ [g#5,b5]@2 [a5,c#6]@2 ~@2",
  AQ: "[[a5,c#6]@5 ~ [g#5,b5]@2 ~@2 [a5,c#6]@2 ~@2 [a5,d6]@4 [a5,c#6]@3 ~ [g#5,b5]@2 [a5,d6]@5 ~ [a5,c#6]@6 [e5,g#5,b5]@6 ~@2 [d5,f#5,a5] ~ [d5,f#5,a5] ~]/3", // A G#m A D5 A G#m D5 A …
  AR: "[d5,f#5,a5] ~@3 [e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [f#5,a5,d6] ~", // D A E A D
  AS: "[e5,a5,c#6] ~ [e5,g#5,b5] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~@7", // A E A
})).s("gm_synth_strings_1").gain(0.33)

// bass · synth bass 2 · "Squire"
const bass = note(`<
  ~@7 A B C D@2 E F G H I J K L M@2 N O P Q R@6 S T@3 S T@3 S T@3 S T@3 U V@3 W X Y@3 Z AA AB@2 AC AD AB@2 AE AF AG@2 AH
  AI AJ AK AL@6 S T@3 S T@3 S AM@3 S T@3 U V@3 AN@2 Y@2 Z M@2 N O P AO AP AQ AR AS AT AU@2 AV@4 AW AX AY@8 AZ@5 BA V@3
  BB X@2 BC BD BE BF BG BH BI BJ@2 BK BL BM BN BO BP@2 BQ BR BS@5 BT@4
>`.pickRestart({
  A: "~@5 a1 c#2 b1", B: "d2 c#2 e2 c#2 f#2 ~@3", C: "~@4 f#2 c#2 e2 a1", D: "[d2@2 a1@2 e1@19 ~ e1@2 b1@2 d2@4]/2",
  E: "~ f#2@3 e2@3 ~", F: "d2 ~ d2 ~ d2 ~ g#1 ~ a1@2 ~@6", G: "~@3 a1 c#2 b1 d2 c#2", H: "e2 c#2 f#2 ~@5",
  I: "~ f#2@2 c#2 e2 a1 d2 a1", J: "e1@15 ~", K: "e1 ~ b1 ~ d2@5 ~ f#2@6", L: "e2@3 ~ d2!4",
  M: "[a2@2 a2@2 a2@2 a2@2 a2@5 ~ c#3@4 e3@3 ~ c#3@2 a2@2 g#2@2 f#2@2 f#2@2]/2", N: "f#2@2 a2@4 c#3@3 ~ c#3@4 a2@2",
  O: "~ g#2 f#2!2 e2!3 b2", P: "e2!3 b2 e2!2 b2 e2", Q: "d2@3 f#2@3 e2@2",
  R: "[~@2 g2@2 a2@2 c3@2 f3@2 c3@2 d3@2 [d2,d3]@52 g2@2 a2@2 c3@2 f3@2 c3@2 d3@2 [d2,d3]@6 d2@5 ~ d2@6]/6", // D
  S: "d3@5 ~ d3@6 d2@4", T: "[~@2 d2@6 d3@5 ~ d3@4 g2@2 a2@2 c3@2 f3@2 c3@2 d3@2 [d2,d3]@6 d2@5 ~ d2@6]/3",
  U: "d3@2 d3@2 d3@2 d3@4 d3@5 ~", V: "c2!2 ~ c2!3 ~ c2", W: "c2!2 ~ c2!5", X: "d2!2 ~ d2!3 ~ d2", Y: "d2!8", Z: "e2!8",
  AA: "e2@3 ~@13", AB: "d2/2", AC: "a1@11 ~ b1@4", AD: "c2@5 b1@2 g1", AE: "e1@3 f#1", AF: "g1@5 b1@2 c2", AG: "d2",
  AH: "a1@3 b1", AI: "c2", AJ: "c2@3 ~@5 d2@3 ~@5", AK: "e2",
  AL: "[~@2 g2@2 a2@2 c3@2 f3@2 c3@2 d3@2 [d2,d3]@51 ~ g2@2 a2@2 c3@2 f3@2 c3@2 d3@2 [d2,d3]@6 d2@5 ~ d2@6]/6", // D
  AM: "[~@2 d2@6 d3@5 ~ d3@4 g2@2 a2@2 c3@2 f3@2 c3@2 d3@2 d2@6 d2@5 ~ d2@6]/3", AN: "[c2!5 b1 c2 d2@2 d2!7]/2",
  AO: "d2@5 ~ f#2@6 e2@4", AP: "~ d3@3 f#2 g#2 a2!2", AQ: "a2 e3!4 d3!2 c#3", AR: "c#3 b2 a2 g#2 f#2!3 a2",
  AS: "a2@2 c#3@3 ~ c#3@4 a2@3 ~ g#2@2", AT: "f#2!2 e2!3 b2 e2!2", AU: "[e2 b2 e2!2 b2 a2 d2@9 d2]/2",
  AV: "[c#2@2 b1@20 b1@2 ~@2 a1@24 ~@2 g1@5 ~ b1@6]/4", AW: "a1@5 ~ b2@6 a2@4", AX: "~@2 f#3@6 [e3,a3]@3 ~@5",
  AY: "[~@8 d2@29 ~@3 a1@10 ~@2 b1@3 ~ c2@10 b1@3 ~ g1@2 d2@29 ~@3 e1@10 ~@2 f#1@3 ~ g1@8]/8",
  AZ: "[~@2 b1@3 ~ c2@2 d2@29 ~@3 a1@10 ~@2 b1@3 ~ c2@13 ~@3 c2@6 ~@2]/5", BA: "d2@3 ~ c2!2 ~ c2",
  BB: "c2!2 ~ c2@2 d2 ~ d2", BC: "d2!2 ~ d2 e2!2 ~ e2", BD: "e2!2 ~ e2 f#2!2 ~ f#2", BE: "f#2!4 g2!2 ~ g2",
  BF: "g2!4 a2!2 ~ a2", BG: "a2!4 b2!4", BH: "b2!4 c3!4", BI: "c3!4 d3!4", BJ: "d3!8", BK: "d3!4 a2!4",
  BL: "a2@5 ~ c#3@4 e3@3 ~ c#3@2", BM: "a2 g#2 f#2!3 a2@2 c#3", BN: "~@2 c#3@4 a2@3 ~ g#2@2 f#2@2 f#2@2",
  BO: "e2!3 b2 e2!3 b2", BP: "[e2@2 e2@2 b2@2 e2@2 d2@5 ~ f#2@6 e2@6 ~@2 d2 ~ d2 ~]/2", BQ: "d2 ~ g#1 ~ a1@2 ~@10",
  BR: "~ a1 c#2 b1 d2 c#2 e2 c#2",
  BS: "[f#2@2 ~@12 f#2@4 c#2@2 e2@2 a1@2 d2@2 a1@2 ~@2 e1@26 ~@2 e1@2 b1@2 d2@5 ~ f#2@6 e2@5 ~]/5",
  BT: "[f#3@6 e3@5 ~ c#4@6 [b3,e4]@2 e2@38 ~@6, ~@20 e1@31 ~@13]/4", // E5
})).s("gm_synth_bass_2").gain(0.64)

// chords · piano · "Kaye2"
const piano = note(`<
  ~@7 A B C D@2 E F G H I J K L M@2 N O P Q ~ R S@4 T@4 U@8 V@4 W X Y X Y X Y X Y@2 Z ~@15 R S@4 AA@4 S@4 AB@4 AC@4 W X
  Y X AD@2 Y X Y ~@32 AE AF AG AH AI@2 AF AG AH AI@2 AF AG AH AI@2 AJ@4 AK@2 AL AM AN AO@4 AP AQ AR@3
>`.pickRestart({
  A: "~@5 a1 c#2 b1", B: "d2 c#2 e2 c#2 f#2 ~@3", C: "~@4 f#2 c#2 e2 a1", D: "[d2@2 a1@2 e1@19 ~ e1@2 b1@2 d2@4]/2",
  E: "~ f#2@3 e2@3 ~", F: "d2 ~ d2 ~ d2 ~ g#1 ~ a1@2 ~@6", G: "~@3 a1 c#2 b1 d2 c#2", H: "e2 c#2 f#2 ~@5",
  I: "~ f#2@2 c#2 e2 a1 d2 a1", J: "e1@15 ~", K: "e1 ~ b1 ~ d2@5 ~ f#2@6", L: "e2@3 ~ d2!3 ~",
  M: "[a2@2 a2@2 a2@2 a2@2 a2@5 ~ c#3@4 e3@3 ~ c#3@2 a2@2 g#2@2 f#2@2 f#2@2]/2", N: "f#2@2 a2@4 c#3@3 ~ c#3@4 a2@2",
  O: "~ g#2 f#2!2 e2!3 b2", P: "e2!3 b2 e2!2 b2 e2", Q: "d2@5 ~ f#2@6 e2@4", R: "~ [f#5,a5,d6,f#6]@3",
  S: "[[g#5,b5,e6,g#6]@3 [g5,c6,e6,g6]@3 [f#5,a5,d6,f#6]@7 [f#5,a5,d6,f#6]@3]/4", // E C D
  T: "[[g#5,b5,e6,g#6]@12 [g5,c6,e6,g6]@12 [f#5,a5,d6,f#6]@28 [f#5,a5,d6,f#6]@11 ~]/4", // E C D
  U: "[[g#5,b5,e6,g#6]@11 ~ [g5,c6,e6,g6]@11 ~ [f#5,a5,d6,f#6]@28 [f#5,a5,d6,f#6]@11 ~]/4", // E C D
  V: "[[g#5,b5,e6,g#6]@11 ~ [g5,c6,e6,g6]@11 ~ [f#5,a5,d6,f#6]@28 [a5,d6,f#6,a6]@11 ~]/4", W: "[g#5,b5,e6,g#6]@11 ~@5",
  X: "[c6,e6,g6,b6]", Y: "[d6,f#6,a6,d7]", Z: "[e6,a6]@3 ~@13",
  AA: "[[g#5,b5,e6,g#6]@3 [g5,c6,e6,g6]@3 ~@7 [f#5,a5,d6,f#6]@3, ~@6 [f#5,a5,d6,f#6]@7 ~@3, ~@46 [d1,d2]@15 ~@3]/4", // E C D
  AB: "[[g#5,b5,e6,g#6]@3 [g5,c6,e6,g6]@3 ~@7 [f#5,a5,d6,f#6]@3, ~@6 [f#5,a5,d6,f#6]@7 ~@3, ~@23 [d1,d2]@7 ~@2]/4", // E C D
  AC: "[[g#5,b5,e6,g#6]@12 [g5,c6,e6,g6]@12 [f#5,a5,d6,f#6]@28 [a5,d6,f#6,a6]@11 ~]/4", // E C D
  AD: "[[d6,f#6,a6,d7]@7 [c6,e6,g6,b6]@8 ~]/2", AE: "~@8 a6@3 ~ d6@2 b6@2", AF: "g6@2 a6@3 ~ d6@2 b6@2 g6@2 a6@3 ~",
  AG: "d6 b6 g6 a6@2 d6 b6 g6", AH: "a6@3 ~ d6@2 b6@2 g6@2 a6@3 ~ d6@2",
  AI: "[b6@2 g6@2 a6@3 ~ d6@2 b6@2 g6@2 a6@4 d6@2 b6@2 g6@2 a6@3 ~ d6@2 b6@2]/2",
  AJ: "[g6@2 a6@5 ~ a1@25 ~@3 f#1@25 ~@3]/4", AK: "[e1@21 ~@3 d1@5 ~ f#1@2]/2", AL: "~@4 e1@7 ~ d2 ~ d2 ~",
  AM: "d2 ~ g#1 ~ a1@2 ~@10", AN: "~ a1 c#2 b1 d2 c#2 e2 c#2",
  AO: "[f#2 ~@6 f#2@2 c#2 e2 a1 d2 a1 ~ e1@13 ~ e1 b1 ~]/4", AP: "a3 d4 f#3 c#4 f#4 e3 b3 e4",
  AQ: "f#4 c#5 f#5 e4 b4 e5 f#4 c#5", AR: "[f#5 e5 [e1,e2]@19 ~@3]/3",
})).s("gm_piano").gain(0.4)

// chords · distortion guitar · "Rabin1"
const distortion_guitar = note(`<
  ~@7 A B C D@3 E F G H I J K L@3 M N O@2 ~@3 P@2 ~@2 P@2 ~@2 P@2 ~@2 P@2 ~@2 P@2 ~@25 P@2 ~@2 P@2 ~@2 P@2 ~@2 P@2 ~@2
  P@2 ~@2 P@2 ~@9 L@3 M N Q@3 M N R S@2 T U@2 V W X ~@29 Y N R Z AA@3 AB AC AD@4 AE AF AG ~@2
>`.pickRestart({
  A: "~@5 a2 c#3 b2", B: "d3@2 c#3@2 e3@2 c#3@2 f#3@3 ~@5", C: "~@4 f#3 c#3 e3 a2",
  D: "[d3@2 a2@2 e2@19 ~ e2@2 b2@2 [d3,a3]@6 [f#3,c#4]@3 ~@3 [e3,b3]@7 ~]/3", E: "d3 ~ d3 ~ d3 ~ g#2@2 a2@3 ~@5",
  F: "~@3 a2 c#3 b2 d3 c#3", G: "e3@2 c#3@2 f#3@3 ~@9", H: "~ f#3@2 c#3 e3 a2 d3 a2", I: "e2",
  J: "e2 ~ b2 ~ [d3,a3]@6 [f#3,c#4]@4 ~@2", K: "[e3,b3]@7 ~ d3@2 d3@2 d3@2 e3 ~",
  L: "[[a4,c#5]@6 [g#4,b4]@2 ~@2 [a4,c#5]@2 ~@2 [a4,d5]@4 [a4,c#5]@2 ~@2 [g#4,b4]@2 [a4,c#5]@3 ~ [a4,c#5]@6 [g#4,b4]@2 ~@2 [a4,c#5]@2 ~@2 [a4,d5]@4 [a4,c#5]@2]/3", // A G#m A D5 A G#m A G#m …
  M: "~@2 [g#4,b4]@2 [a4,c#5]@3 ~ [a4,c#5]@6 [g#4,b4]@2", N: "~ [a4,c#5] ~ [a4,d5]@2 [a4,c#5] ~ [g#4,b4]",
  O: "[[a4,d5]@6 [a4,c#5]@6 [g#4,b4]@7 ~@13]/2", P: "[~ g2 a2 c3 f3 c3 d3 d3@4 ~@5]/2",
  Q: "[[a4,d5]@3 [a4,c#5]@3 [g#4,b4]@3 d4 e4 f#4 a4 d5 [a4,c#5]@3 [g#4,b4] ~ [a4,c#5] ~ [a4,d5]@2 [a4,c#5]]/3", // D5 A G#m A G#m A D5 A
  R: "[a4,c#5]@3 ~ [a4,c#5]@6 [g#4,b4]@2 ~@2 [a4,c#5]@2", // A G#m A
  S: "[~ [a4,d5]@2 [a4,c#5] ~ [a4,b4] [d5,f#5]@3 [d5,e5] ~ [d5,f#5] ~ [d5,g5]@2 [d5,f#5]]/2", // D5 A Asus2 D Dsus2 D G5 D
  T: "~ [d5,e5] [d5,f#5]@3 [d5,e5] ~ [d5,f#5]", // Dsus2 D Dsus2 D
  U: "[~ [d5,g5]@2 [d5,f#5] ~ [d5,e5] [d5,f#5]@3 [d5,e5] ~ [d5,f#5] ~ [d5,g5]@2 [d5,f#5]]/2", // G5 D Dsus2 D Dsus2 D G5 D
  V: "~ [d5,e5] ~ d3 g3 b2 f#3 b3", W: "a2 e3 a3 b3 f#4 b4 a3 e4", X: "a4@2 b3@2 f#4@2 b4@2 a4@3 ~@5",
  Y: "~@4 [a4,c#5]@3 [g#4,b4]", Z: "~@2 [a4,d5]@4 [a4,c#5]@2 ~@2 [g#4,b4]@2 [a4,c#5]@3 ~",
  AA: "[[a4,c#5]@6 [g#4,b4]@2 ~@2 [a4,c#5]@2 ~@2 [a4,d5]@4 [a4,c#5]@2 ~@2 [g#4,b4]@2 [a4,d5]@6 [a4,c#5]@6 [e3,b3]@7 ~ d3 ~ d3 ~]/3", // A G#m A D5 A G#m D5 A …
  AB: "d3 ~ g#2@2 a2@3 ~@9", AC: "~ a2 c#3 b2 d3 c#3 e3 c#3",
  AD: "[f#3@3 ~@11 f#3@4 c#3@2 e3@2 a2@2 d3@2 a2@2 ~@2 e2@26 ~@2 e2@2 b2@2 d3@2]/4", AE: "a3 d4 f#3 c#4 f#4 e3 b3 e4",
  AF: "f#4 c#5 f#5 e4 b4 e5 f#4 c#5", AG: "f#5 e5 ~@6",
})).s("gm_distortion_guitar").gain(0.4)

// other · electric guitar jazz · "Rabin2"
const electric_guitar_jazz = note("<~@74 A B@3 C D E@3 ~@28 F G@2 ~@56>".pickRestart({
  A: "~@2 f#3 ~ f#4 [d4,e4] b3@2 a3@2 f#3@2 a3@2 f#3@2", // Dsus2
  B: "[g#3@2 b3@2 [e4,g#4]@2 [e4,g#4]@4 ~ e3 d4 c4 a3@9 ~ [f#4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@5 ~@13]/3", // E D D5
  C: "~@4 f#4!2 g4 f#4 e4!2 f#4 e4 d4@2 f#3@2", D: "g#3 b3 e4 b3 e4 g4 e4 c4",
  E: "[e4@2 g4@2 c5@2 g4@2 d5@2 g4@2 e5@2 [g4,d5]@6 ~@2 f5@3 ~ g5@3 ~ a5@4 ~@14]/3", F: "~@10 e5@4 c#5 b4",
  G: "[a4 b4 a4 b4 c5 c#5@5 ~@6]/2",
})).s("gm_electric_guitar_jazz").gain(0.64)

// other · electric guitar muted · "Rabin3"
const electric_guitar_muted = note(`<
  ~@59 A@2 B C A@2 D E A F G H I J ~@50 K L@2 M N L O P Q L Q R S T ~@33
>`.pickRestart({
  A: "a3 ~ d4 ~ f#4 ~ a4 ~ g4 ~ f#4 ~ e4 ~ d4 ~", B: "a3 ~ d4 ~ f#4 ~ a4 ~ d5 ~ b4 ~ g4 ~ d4 ~",
  C: "c4 ~ g4 ~ e4 ~ c4 ~ g4 ~ e4 ~ c4 ~ g3 ~", D: "d4 ~ e4 ~ f#4 ~ g4 ~ d5 ~ a4 ~ g4 ~ c4 ~",
  E: "b3 ~ d4 ~ a4 ~ d4 ~ g4 ~ [f#4,g4] f#4 e4 ~ d4 ~", F: "a3 ~ d4 ~ f#4 ~ a4 ~ g4 ~ [f#4,g4] f#4 e4 ~ d4 ~",
  G: "a3 ~ d4 ~ f#4 ~ a4 ~ f#4 ~ a4 ~ a4 ~ f#4 ~", H: "a3 ~ d4 ~ f#4 ~ a4 ~ g4 ~ e4 ~ c4 ~ g3 ~",
  I: "e3@2 f#3@2 g3@2 a3 ~ f#3@2 g3@2 a3@2 b3 ~", J: "b3", K: "~@8 a3 ~ d4 ~ f#4 ~ a4 ~",
  L: "g4 ~ f#4 ~ e4 ~ d4 ~ a3 ~ d4 ~ f#4 ~ a4 ~", M: "d5 ~ b4 ~ g4 ~ d4 ~ c4 ~ g4 ~ e4 ~ c4 ~",
  N: "g4 ~ e4 ~ c4 ~ g3 ~ a3 ~ d4 ~ f#4 ~ a4 ~", O: "g4 ~ f#4 ~ e4 ~ d4 ~ d4 ~ e4 ~ f#4 ~ g4 ~",
  P: "d5 ~ a4 ~ g4 ~ c4 ~ b3 ~ d4 ~ a4 ~ d4 ~", Q: "g4 ~ [f#4,g4] f#4 e4 ~ d4 ~ a3 ~ d4 ~ f#4 ~ a4 ~",
  R: "f#4 ~ a4 ~ a4 ~ f#4 ~ a3 ~ d4 ~ f#4 ~ a4 ~", S: "g4 ~ e4 ~ c4 ~ g3 ~ e3@2 f#3@2 g3@2 a3 ~",
  T: "f#3@2 g3@2 a3@2 b3 ~@9",
})).s("gm_electric_guitar_muted").gain(0.3)

// chords · electric guitar clean · "Kaye4"
const electric_guitar_clean = note("<~@27 A B@4 C@4 ~@134>".pickRestart({
  A: "~ [a4,d5,f#5]@3", B: "[[b4,e5,g#5]@3 [c5,e5,g5]@3 [a4,d5,f#5]@7 [a4,d5,f#5]@3]/4",
  C: "[[b4,e5,g#5]@3 [c5,e5,g5]@3 [a4,d5,f#5]@7 ~@3]/4", // E C D
})).s("gm_electric_guitar_clean").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A ~ B C D E F@3 G H I J@4 K L M ~@3 M H L N O H L P Q H L N R H L N R H S J@9 ~ T U@2 V U V U V U W U W I@2 M H L
  N R H L Q X H L N O H L N O H L N O H S J@3 Y Z J@9 AA AB@5 AC AD AE AC H L AF A AG@2 AH AI AH AI AH AI AJ AI AK A Z
  J@3 AL J@3 AM J AN AO AM ~ AM AP J@7 AQ AR@2 E ~ E H C AS ~@2
>`.pickRestart({
  A: "~ x", B: "~ x ~@2", C: "~@3 x", D: "~ x ~@2 x ~@3", E: "~@7 x", F: "x ~@2 x!2 ~@2 x", G: "x ~@2 x!2 ~@3",
  H: "~@2 x ~@2 x ~@2", I: "x", J: "x!2 ~@2 x!2 ~@2", K: "x!2 ~@2 x ~@3", L: "x ~@2 x ~@2 x ~", M: "~@3 x ~ x!3",
  N: "~ x ~@2 x ~@2 x", O: "~@4 x ~@2 x", P: "~ x ~@3 x ~@2", Q: "~ x ~@3 x ~ x", R: "~@4 x!2 ~ x", S: "x ~@2 x ~@4",
  T: "x ~@6 x", U: "x ~ x ~@4 x", V: "x ~@5 x!2 ~@2 x ~@3 x ~", W: "x ~@2 x ~ x ~ x", X: "~ x ~ x ~ x ~ x",
  Y: "x!2 ~@2 x!3 ~", Z: "~@4 x!2 ~@2", AA: "x!2 ~ x ~@2 x!2", AB: "~@2 x!2 ~@2 x!2", AC: "~@2 x!2 ~@2 x ~",
  AD: "~ x ~ x ~@2 x!2", AE: "~@2 x ~@2 x ~ x", AF: "~ x ~@6", AG: "~@3 x!2 ~ x ~", AH: "~@6 x ~ x ~@5 x!2",
  AI: "~ x ~ x!2 ~ x ~", AJ: "~@3 x!2 ~@2 x", AK: "~@3 x!2 ~@3", AL: "x!2 ~@3 x ~@2", AM: "x ~ x ~@3 x!3 ~ x ~@5",
  AN: "x ~@3 x!2 ~ x", AO: "~ x ~@2 x!2 ~@2", AP: "x ~ x ~@3 x!3 ~ x ~@3 x!2", AQ: "~@5 x!2 ~", AR: "~ x!2 ~@2 x!2 ~",
  AS: "x!2 ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B C D@3 E F G H@4 I J K ~@3 K L H@2 M L H N O L H@2 O L H@2 O L H@10 P K@13 ~ K L H@2 O L H Q R L H@2 M L H@2 M
  L H@2 M L H@4 S H@10 T U@9 F V K ~ P@11 W X H@3 O H@4 Y Z AA Y AB H@2 AA H@5 N AC AD@2 R ~ AE AF AG AH ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@2", B: "x ~@2 x ~@4", C: "x!3 ~@2 x ~@2", D: "~ x ~@3 x ~@2", E: "~ x ~@3 x ~ x", F: "x!2 ~@2 x ~@2 x",
  G: "~@4 x!4", H: "~ x ~ x", I: "~@2 x ~@2 x!3", J: "~@2 x ~@2 x ~@2", K: "~ x", L: "~@3 x", M: "~@2 x!2 ~ x!2 ~",
  N: "~@2 x ~@3 x!2", O: "~@2 x!2 ~@2 x ~", P: "x", Q: "~ x ~@2", R: "~ x!3", S: "~@2 x ~@4 x", T: "~@2 x ~ x!2 ~@2",
  U: "x!2", V: "~ x!2 ~@2 x ~@2", W: "x ~ x!2 ~@4", X: "x ~ x!2 ~@2 x ~", Y: "~@4 x ~@7 x ~ x!2",
  Z: "~@2 x ~ x ~ x!2 ~@4 x ~@3", AA: "~@4 x ~ x!2 ~@4 x ~@3", AB: "~@2 x ~ x!2 ~@2 x ~ x!2 ~@4", AC: "x ~@2 x ~@3 x",
  AD: "~@3 x ~@3 x", AE: "~@5 x!2 ~", AF: "x!2 ~ x!2 ~@3", AG: "~@7 x", AH: "~ x ~@6",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@13 A B@4 C D B@5 ~ E F@3 G F@3 G F@3 G F@3 G F@3 G F@2 H F@5 I F I ~@15 E F@3 G F J F G F@3 G F@3 G F@3 G F@2 H F@3
  H F@2 ~@33 K F@3 L F@11 G ~@6 M ~@10
>`.pickRestart({
// … 52 more lines

More by Yes