Strudelify

My Best Friend

Lois Lane

KeyD majorTempo83 bpm
0:00/0:00
// My Best Friend — Lois Lane
// 83 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "ACOU GTR" named as a guitar, played on acoustic guitar steel (its acoustic bass patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(83/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 · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@10 A@2 B@2 C@2 D@4 E@2 F@2 G H I@2 J K I@2 L M N ~@3 O@6 P@4 Q@2 R@2 S@2 T U V W X I L M Y Z@2 ~@11 AA AB AC AD AE@2
  AF AG AH AB AI AD AJ@2 AK AL AM AN AO AD AP AQ@2 AR AS AB AC AT
>`.pickRestart({
  A: "[~@8 b4@2 d5@2 ~@2 f#5@5 ~@3 a4@2 f#5@2 e5@2 ~@2 e5@2]/2",
  B: "[d5@6 ~@2 b4@2 d5@2 ~@2 f#5@5 ~@5 f#5@4 e5 ~ e5@2]/2",
  C: "[d5@6 ~@2 b4@2 d5@3 ~ f#5@5 ~@3 a4@2 f#5@4 e5 ~ e5@2]/2",
  D: "[d5@6 ~@2 b4@2 d5@2 ~@2 f#5@6 ~@2 a4@2 f#5 ~ f#5 ~ f#5@2 e5 d5@6 ~@3 b4@2 d5@2 ~@2 f#5@5 ~@3 a4@2 f#5@4 e5@2 d5 ~]/4",
  E: "[e5 f#5@5 ~@2 f#5@2 e5@2 d5@2 e5 f#5@6 ~@3 f#5@2 e5@2 d5@2 e5@2]/2",
  F: "[b4@4 ~@4 b4@2 d5@2 ~@2 f#5@6 ~@4 f#5 ~ f#5 ~ f#5@2 e5@2]/2", G: "f#5@6 ~@2 f#5@2 e5@2 d5@2 f#5 ~",
  H: "f#5@2 ~@2 f#5@3 ~ e5 d5 ~ d5@4 ~",
  I: "[d5,f#5] [d5,a5] ~ [d5,a5]@2 ~ [d5,a5] ~ [e5,b5] ~ [e5,b5] ~ [d5,a5]@2 ~@2", // D D5 E5 D5
  J: "f#5 e5 ~ e5@2 ~ e5 ~ e5@2 b4 ~ b4@3 ~", K: "f#5 ~ f#5@2 e5 d5 e5@2 d5@2 ~ d5@4 ~",
  L: "f#5 e5 ~ e5@2 ~ e5 ~ e5@2 b4 ~ b4@2 ~@2", M: "f#5 ~ f#5@4 b4@2 d5@4 e5@2 d5@2", N: "a5@7 f#5@7 ~@2",
  O: "[~@8 b4@2 d5@2 ~@2 [d5,f#5]@7 ~ a4 ~ e5@2 d5 ~ f#5@2 e5 d5@7 ~@2 b4@2 d5@4 f#5@6 ~@2 d5@2 a5@4 e5@2 d5@6 ~@2 a4@2 f#5@2 e5@2 d5@2 f#5@6 ~@2 a4@2 f#5@4 e5 ~ e5@2]/6", // D
  P: "[d5@6 ~@2 b4@2 d5@4 f#5@6 ~@2 a4@2 f#5 ~ f#5@2 a5@2 d5@6 ~@4 b4@2 d5@4 f#5@6 ~@2 a4@2 f#5@4 e5@2 d5@2]/4",
  Q: "[e5 f#5@4 ~@3 f#5@2 e5@2 d5@2 e5 f#5@3 a5@3 b5@3 f#5@2 e5 f#5@4 ~]/2",
  R: "[~@8 b4@2 d5@4 f#5@6 ~@4 f#5 ~ f#5 ~ f#5@2 e5@2]/2",
  S: "[f#5@4 ~@4 f#5@2 e5@2 d5@2 f#5@4 a5@4 b5@2 f#5@2 d5 e5@3 ~@2]/2",
  T: "~ a5 ~ [d5,a5]@2 ~ [d5,a5]@2 [e5,b5] ~ [e5,b5] ~ [d5,a5]@2 ~@2, [d5,f#5] ~@7", // D5 E5 D5 D
  U: "[d5,f#5] [d5,a5] ~ [d5,a5]@2 ~ [d5,a5]@2 [e5,b5] ~ [e5,b5] ~ [d5,a5]@2 ~@2", // D D5 E5 D5
  V: "f#5 e5 ~ e5@3 e5 ~ e5@2 b4 ~ b4@3 ~", W: "f#5 ~ f#5@4 e5 d5 e5 d5 ~ d5 ~ d5 e5 d5",
  X: "[d5,f#5] [d5,a5] ~ [d5,a5]@2 ~ [d5,a5]@2 [e5,b5] ~ [e5,b5]@2 [d5,a5]@2 ~@2", Y: "a5@6 f#5@6 e5@3 ~",
  Z: "[~@3 b5 a5 g5 f#5 e5@3 ~@6]/2", AA: "~@2 [d5,f#5]!2 [d5,f#5]@2 ~ [d5,f#5] [e5,g5]!2 ~ [d5,f#5]@4 ~",
  AB: "~@2 [d5,f#5]!4 ~ [e5,g5] ~ [e5,g5] ~ [d5,f#5]@4 ~", AC: "d5 b4 d5@3 b4@3 f#5@2 b4@2 d5@2 ~@2",
  AD: "d5 b4 d5@4 b4 ~ [d5,b5]@3 ~ [d5,f#5]@3 ~", // G D
  AE: "[[d5,f#5] [c#5,e5] c#6!3 ~ b5 b5@3 a5@2 f#5 a5@2 b5@4 ~@7 a5@2 b5@2 a5 f5]/2", AF: "e5@7 d5@7 d5!2",
  AG: "b5@3 a5@3 a5!2 b5@3 ~ b5@3 ~", AH: "a5 [d5,f#5]!2 ~ [d5,f#5] ~ [d5,f#5] [e5,g5] ~ [e5,g5] ~ [d5,f#5]@4 ~",
  AI: "d5 b4 d5@3 b4@2 ~ f#5@2 b4@2 d5@2 ~@2",
  AJ: "[[d5,f#5] [c#5,e5] c#6!3 ~ b5!2 ~ a5 ~ f#5 a5@3 b5@4 ~@7 a5@2 b5@2 a5 f5]/2", // D C#m
  AK: "e5@3 d5 d5@7 ~@2 d5!3, ~@4 e5 ~@11", AL: "b5@3 a5@2 ~ a5!2 b5@3 ~ b5@2 a5 ~",
  AM: "b5 ~ [d5,f#5]!2 [d5,f#5,a5] ~ [d5,f#5] [e5,g5] ~ [e5,g5] ~ [d5,f#5]@4 ~", // D Em D
  AN: "~@2 [d5,f#5]!2 [d5,f#5]@2 [d5,f#5] [e5,g5] ~ [e5,g5] ~ [d5,f#5]@4 ~", AO: "d5 b4 d6 d5@4 b4 f#5@2 b4@2 d5@3 ~",
  AP: "[d5,f#5] e5 c#6 b5@4 c#6@5 b5@2 a5@2", AQ: "[b5 ~ b5 ~ b5@2 c#6 a5@5 b5@2 d6@12 ~@6]/2",
  AR: "~@6 d5@2 b5@4 f5 e5@2 ~", AS: "d5 ~ [d5,f#5]!3 ~ [d5,f#5] [e5,g5] ~ [e5,g5] ~ [d5,f#5]@4 ~",
  AT: "d5 b4 d5@4 b4 ~ [d5,b5]@3 ~ [d5,f#5]@2 ~@2", // G D
})).s("gm_electric_guitar_muted").gain(0.64)

// other · acoustic guitar steel · "ACOU GTR"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J K L M N K O M P Q R S@2 Q R S T K U M@2 K V M N I W I X K@2 M@2 K L M P Q R S T R@2 T Y L Z N M K
  V M AA I W I X AB AC AD AE AF AG AH AI AJ AK AB AL AM AN AO AP AQ AR AS AL AM AN AO AT AU AV AB AW AM AN AX AT AY AK
  AB AL AZ BA
>`.pickRestart({
  A: "d3@12 a3 b3 d4 e4", B: "d4@12 a3 b3 a3@2", C: "g3@3 f#3", D: "g3@11 ~ e4@4", E: "c#4@3 b3", F: "a3@15 ~",
  G: "e3@7 b3@9", H: "f#3@7 g3@7 d3 e3", I: "e2@7 b2@9", J: "f#2@8 g2@7 ~", K: "d3 ~ d3@12 ~@2", L: "d3 ~ d3@13 ~",
  M: "b2 ~ b2@12 ~@2", N: "b2 ~ b2@13 ~", O: "d3 ~ d3@14", P: "b2 ~ b2@5 ~ b2@4 a2@4", Q: "g2 ~ g2@12 ~@2",
  R: "g2 ~ g2@13 ~", S: "f#2 ~ f#2@12 ~@2", T: "f#2 ~ f#2@13 ~", U: "d3 ~ d3@8 ~@2 c#3 d3 c#3@2",
  V: "d3 ~ d3@9 ~ c#3 d3 c#3@2", W: "f#2@7 g2@7 g2 f#2", X: "f#2@7 g2@9", Y: "f#2 ~ f#2@2 a2@4 c#3@4 d3@3 ~",
  Z: "d3 ~ d3@9 ~ c#3 d3 c#3 ~", AA: "b2@13 ~ g2@2", AB: "d3 ~ d3@4 ~ d3@4 ~ a2 b2 d3 e3",
  AC: "d3 ~ d3@4 ~ d3@4 ~ b2@4", AD: "g2 ~ g2@4 ~ g2@4 ~ g2@3 ~", AE: "g2 ~ g2@4 ~ g2@4 ~ g2 ~ g2@2",
  AF: "c#3 ~ c#3@3 ~@2 c#3@4 ~ b2@3 ~", AG: "a2 ~ a2@3 ~@2 a2@4 ~ b2@2 d3 e3", AH: "e2 ~ e2@4 ~ b2@4 ~ b2@3 ~",
  AI: "f#2 ~ f#2@4 ~ g2@5 ~@2 g2 f#2", AJ: "e2 ~ e2@4 ~ b2@3 ~@2 b2@3 ~", AK: "f#2 ~ f#2@4 ~ g2@4 ~ a2 b2 d3 e3",
  AL: "d3 ~ d3@4 ~ d3@4 ~ b2@3 ~", AM: "g2 ~ g2@4 ~ g2@5 b2@3 ~", AN: "g2 ~ g2@4 ~ g2@5 e3@2 d3@2",
  AO: "c#3 ~ c#3@4 ~ c#3@5 b2@3 ~", AP: "a2 ~ a2@4 ~ a2@4 ~ a2@2 g2@2", AQ: "e2 ~ e2@5 b2@3 ~@2 b2@4",
  AR: "f#2 ~ f#2@4 ~ g2@4 ~ g2@4", AS: "d3 ~ d3@4 ~ d3@5 a2 b2 d3 e3", AT: "a2 ~ a2@4 ~ a2@4 ~ b2@2 d3 e3",
  AU: "e2 ~ e2@3 ~@2 b2@4 ~ b2@3 ~", AV: "f#2 ~ f#2@4 ~ g2@4 ~ g2@2 a2@2", AW: "d3 ~ d3@4 ~ d3@5 b2@3 ~",
  AX: "c#3 ~ c#3@4 ~ c#3@5 b2@4", AY: "e2 ~ e2@4 ~ b2@4 ~ b2@4", AZ: "g2 ~ g2@4 ~ g2@5 b2@4",
  BA: "g2 ~ g2@5 g2@4 ~ e3@2 d3 ~",
})).s("gm_acoustic_guitar_steel").gain(0.5)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I@2 ~@8 J@2 K@2 L@2 M@2 N@3 O@2 P Q R S T U V W X@3 Y ~ Z ~ J@2 K@2 L@2 M@2 AA@2 AB AC AD AA AE AF AG
  AH AI AJ ~@38
>`.pickRestart({
  A: "a4 d5 ~@13 d5, ~@2 e5@3 a4@2 d5@3 e5@2 e5@2 e5@2, ~@3 f#5@5 a4@7 ~, ~@4 d5@2 e5@3 f#5@4 f#5@2 ~, ~@11 d5@4 ~",
  B: "a4 d5 e5 f#5 d5 ~@6 f#5 ~@3 d5, ~@5 a4@2 d5@8 ~, ~@6 e5@3 f#5@2 ~ f#5@4, ~@8 a4@5 a4@3, ~@5 e5@2 e5",
  C: "b5 d5 g5 a5 d5 ~@9 a5 g5, ~@5 f#5@7 a5 g5@2 ~, ~@6 g5@2 b4@7 ~, ~@7 d5@8 ~, ~@9 g5 a5 b5@4 ~",
  D: "~@7 g5, b5, ~ d5@2 a5@5 g5 a5@3 g5 a5@3, ~@2 g5@3 f#5@11, ~@4 d5@2 g5 d5@3 g5 d5@5",
  E: "e5 ~@13 c#5 e5, ~ a5@2 e5@2 c#5@8 b5@2 ~, ~@2 c#5@2 a5@5 a5@2 e5@4 ~, ~@6 e5@2 e5@2 c#6@5 ~, ~@7 b5@5 a5@3 ~",
  F: "a5 ~@9 c#6 a5@5, ~ e5@2 e5@2 c#5@6 ~@5, ~@2 c#5@2 a5@5 a5@2 ~@5, ~@6 e5@2 e5@3 ~@5, ~@7 b5@4 ~@5",
  G: "g5 d5 ~@4 f#5 d5@2 ~ d5 d5@4 ~, ~@2 b4@5 ~@9, ~@3 d5@2 d5@2 ~@2 c#5@5 ~@2, ~@4 g5@3 ~@9",
  H: "~@6 f#5 ~@7 a5@2, c#6@7 ~@3 g5@2 f#5@3 ~, ~ b5@2 f#5@2 a5@2 ~@2 a5@4 g5@2 ~, ~@2 a5@2 b5@3 b5@8 ~, ~@11 d5@4 ~",
  I: "[g5 e5 ~@5 d5@2 c#5 d5 ~@7 a5 f#5 ~@8 d5@3 d5, ~@2 d5@2 g5@5 ~@7 c#6@3 ~@2 a5@4 a5@7, ~@3 b4@2 d5@2 ~@4 d5@8 ~@3 f#5@10, ~@6 b4@3 ~@8 b5@2 ~ b5@3 b5@9, ~@13 g5@3]/2",
  J: "[[a4,b4,d5]@30 g#4 a4]/2", K: "[[f#4,g#4,b4,c#5]@7 g#4]/2", L: "[a4,b4,d5]@7 [g4,b4,d5]@9",
  M: "[[f#4,g#4,c#5]@7 [f#4,a4,c#5]@18 [f#4,a4,c#5]@2 c#5 ~@3 f#4, ~@14 f#5 a4, ~@29 c#5@3]/2", // F#sus2 F#m
  N: "[[d5,f#5,a5]@4 a5 e5 ~@6 a5 ~ d5 ~ a5@4 ~@2 f#5 e5 f#5 a4 d5 ~@2 f#5 d5 ~ [b4,c#5,f#5]@4 c#5 b4 ~@3 d5 c#5 ~@4 b4, ~@6 f#5@2 f#5@2 d5@3 ~@3 [d5,f#5]@7 ~@15 d5@3 ~@5 d5@2, ~@7 e5@6 ~@8 e5@2 ~@4 f#5@2 ~@10 f#5@3 ~@3 f#5@3, ~@9 a4@4 ~@2 a4@8 ~@8 a4@6 ~@3 c#5@2 ~ b4@4 ~, ~@11 f#5@2 f#5@2 ~@5 a5@3 ~@5 a5@2 ~@14 b5@4]/3", // D Bsus2 D
  O: "[[b4,c#5,f#5]@3 c#5 ~@2 c#5 b4@2 ~@4 d5 b4 ~ [d5,f#5,a5]@4 a5 e5 ~@9 a4, ~@4 b4@3 ~@2 b4@2 b4@3 ~ a4@6 ~@2 e5@9, ~@5 d5@2 ~@3 d5@2 f#5@2 ~@8 f#5@2 f#5@2 d5@3 f#5@3, ~@25 a4@5 d5@2, ~@27 f#5 a5@4]/2", // Bsus2 D
  P: "a5@4 ~@7 f#5 a5 f#5 d5 a4, d5@9 a4@3 ~@4, f#5@5 e5@2 e5@5 ~@4, ~ a5@2 ~, ~@3 f#5!2 d5 ~@2",
  Q: "[b4,c#5,f#5]@4 ~@4 c#5 d5 c#5 ~@4 b4, ~@4 c#5@3 f#5@2 ~@3 b5@4, ~@5 b4@4 ~@2 b4@3 d5@2, ~@6 d5@3 ~@4 f#5@3", // Bsus2
  R: "[b4,c#5,f#5]@3 c#5 b4 d5 ~ b4@2 ~ d5 b4 f#5 d5 b4 a4, ~@6 c#5@5 ~@5, ~@9 b4@2 ~@5", // Bsus2
  S: "~@2 b4 d5 g5 d5 ~ d5@2 ~ d5 d5@4 ~, g5@3 ~@3 f#5@2 ~@8, ~ d5@2 ~@6 c#5@4 ~@3",
  T: "~@5 a5 f#5 b5@2 a5 ~@4 a5@2, c#6@6 ~@6 f#5@3 ~, ~ b5@2 f#5@3 ~@4 g5@3 g5@2 ~, ~@2 a5@2 b5@2 ~@5 d5@4 ~",
  U: "g5 e5 ~ b4 g5 d5 b4 d5@2 ~ d5 d5@4 ~, ~@2 d5@2 ~@5 c#5@2 ~@5",
  V: "c#6 ~@2 f#5 b5 a5 ~ b5@2 a5 ~@2 d5 d5@3, ~ b5@3 ~@12, ~ a5 ~ f#5 ~ g5@2 ~",
  W: "[a4,d5]@3 [a4,d5,e5] ~@2 [a4,d5,f#5]@10", // D5 Asus4 D
  X: "[[a4,d5,a5]@3 [a4,d5,e5] ~@2 f#5 f#5@8 ~ b4@3 [b4,d5]@3 ~@16 f#5@2 b4 c#5 d5@6, ~@3 a4@15 d5@2 ~@4, ~@6 d5@13 ~@3 b4@18 ~@8, ~@15 f#5@7 f#5@5 c#5 d5@4 f#5@6 ~@10, ~@8 c#5@3 d5@2 b5@3 [c#5,b5]@4 ~@4]/3", // D5 Asus4 Bm C#7
  Y: "[a4,d5,f#5]@8 ~@4 a5 f#5 d5@2", Z: "[b4,c#5,f#5]@15 ~",
  AA: "[d5,f#5,a5]@3 [d5,f#5,a5]@3 [d5,f#5,a5]@3 [d5,f#5,a5]@3 [d5,f#5,a5]@4", // D
  AB: "[b4,c#5,f#5]@4 c#5 ~@4 d5 c#5 b4 b5 f#5 d5 b4, ~@5 b4@5 ~@6, ~@3 d5 c#5 ~@3, ~@7 f#5@3 ~@6", // Bsus2
  AC: "[b4,c#5,f#5]@3 c#5 b4 d5 c#5 b4@2 b4 d5 b4 ~@2 b4 a4, ~@12 f#5@3 ~, ~@13 d5@2 ~", // Bsus2
  AD: "[d5,f#5,a5]@3 [d5,f#5,a5]@3 [d5,f#5,a5]@3 [d5,f#5,b5]@3 [d5,f#5,a5]@4", // D Bm D
  AE: "[b4,c#5]@4 ~@2 d5 f#5 c#5 d5 c#5 b4 ~@3 b4, f#5@7 ~@5 b5@4, ~@4 c#5@3 ~@6 f#5@3, ~@5 b4@2 ~@7 d5@2", // Bsus2
  AF: "[b4,c#5,f#5]@3 c#5 b4 d5 c#5 b4@2 b4 ~@4 b4 a4, ~@10 d5@2 f#5@3 ~, ~@11 b4@2 d5@2 ~", // Bsus2
  AG: "g5 d5 b4 ~@2 d5 f#5 d5@2 c#5 d5 d5@4 ~, ~@3 d5@2 ~@11, ~@2 g5 ~@5",
  AH: "c#6 b5 ~@4 f#5 b5@2 a5 g5 ~@3 a5@2, ~@2 a5@2 b5@3 ~@5 f#5@3 ~, ~@3 f#5@2 a5@2 ~@4 d5@4 ~, ~@13 g5@2 ~",
  AI: "g5 e5 d5 ~@3 b4 d5@2 c#5 d5 d5@4 ~, ~@3 b4@2 d5@2 ~@9, ~@4 g5@3 ~@9",
  AJ: "c#6 b5 a5 ~@3 f#5 b5@2 a5 g5@2 e5 d5 ~ f#5, ~@3 f#5@2 a5@2 ~@7 e5@2, ~@4 b5@3 ~@9",
})).s("gm_piano").gain(0.61)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@38 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 ~@12 E F G H I J K L ~@2 E F G H I J K L E F G H I J K L E F G H I J K L ~@4
>`.pickRestart({
  A: "[d4,f#4,a4,d5] ~@2 [d4,f#4,a4,d5] ~@2 [d4,f#4,a4,d5] ~@9", // D
  B: "[b3,d4,f#4,b4] ~@2 [b3,d4,f#4,b4] ~@2 [b3,d4,f#4,b4] ~@9", C: "[d4,g4,b4] ~@2 [d4,g4,b4] ~@2 [d4,g4,b4] ~@9",
  D: "[c#4,f#4,a4,c#5] ~@2 [c#4,f#4,a4,c#5] ~@2 [c#4,f#4,a4,c#5] ~@9", // F#m
  E: "~@2 [f#4,a4,d5] ~@2 [a4,d5] [f#4,a4,e5] [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5]", // D D5 F#m7 D
  F: "~@2 [f#4,a4,d5] ~@2 [a4,d5] [f#4,a4,e5] [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~@2", // D D5 F#m7 D
  G: "[g4,b4,d5] ~ [g4,b4,d5] ~@2 g4 [g4,b4,e5] [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@2", // G Em G
  H: "[g4,b4,d5] ~ [g4,b4,d5] ~@3 [g4,b4,e5] [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ g4 [g4,b4,d5] ~", // G Em G
  I: "~ [c#4,e4,b4] ~ [c#4,e4,b4]!2 ~ c#4 [c#4,e4,b4] ~@2 e4 [c#4,e4,b4] ~ c#4 e4 [c#4,e4,b4]", // C#m7
  J: "~@2 [c#4,e4,a4] ~ [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2 e4 [c#4,e4,a4] ~@2 e4!2", // A
  K: "[b3,d4,g4] ~ [b3,d4,g4] ~@2 b3 [b3,d4,g4] [a3,d4,f#4] ~ [a3,d4,f#4] ~ a3 [a3,d4,f#4] ~ [a3,d4,f#4] ~", // G D
  L: "[c#4,e4,a4] ~ [c#4,e4,a4] ~@3 [c#4,e4,a4] [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,f#4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4]", // A G Gmaj7 G
})).s("gm_electric_guitar_clean").gain(0.51)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@66 A B ~@3 C ~ D ~@2 A B ~@3 C ~ D A B ~@3 C ~ D A B ~@3 C ~ D ~@4
>`.pickRestart({
  A: "~@5 f#4 ~@10", B: "~@5 f#4 ~@9 [f#4,a4,d5]", C: "~@6 c#4 ~@2 c#4!2 ~@2 c#4!2 [c#4,a4]",
  D: "~@4 c#4!2 ~@3 f#4 ~@3 f#4 ~@2",
})).s("gm_electric_guitar_clean").gain(0.25)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A@4 B@2 C D E@3 ~@7 F@4 G@2 H@8 I@2 J K L M N@8 O@8 P@8 Q M R M A@4 S T U M L M V@4 S T W M X@4 S T Y@2 Z@4 S T J M
  AA@4
>`.pickRestart({
  A: "[a3 b3, [d4,f#4]]/4", B: "[a3,c#4,e4]/2", C: "[b3,g4]@7 [a3,f#4]@9, d4@15 ~", D: "[a3,c#4,f#4]@7 [b3,d4,g4]@8 ~",
  E: "[[b3,e4,g4]@7 [b3,d4]@8 ~ [a3,c#4]@8 [b3,d4,g4]@7 d3@16 ~, ~@7 f#4@17 ~@24]/3", // Em Bm A G
  F: "[[d4,g4]@4 ~ a3@3, b3@5 ~@3, ~ [c#4,f#4]]/4", G: "[b3,d4,g4]/2",
  H: "[~ d4 [b3,c#4] [a3,d4], f#4, c#4 ~@3, ~@7 a3@57 ~@64]/8", I: "[b3,c#4]/2", J: "[b3,d4,g4]@7 [a3,d4,f#4]@9",
  K: "[a3,c#4,e4,f#4]@7 [b3,e4,g4]@9", L: "[b3,e4,g4]@7 [a3,d4,f#4]@9", M: "[a3,c#4,e4,f#4]@7 [b3,d4,g4]@9",
  N: "[a3 b3 a3 b3, [d4,f#4]@117 ~@11]/8", O: "[[d5,g5]@4 ~ a4@3, b4@5 ~@3, ~ [c#5,f#5]]/4",
  P: "[[a3,d4]@32 [b3,c#4]@32 [a3,d4]@31 ~ b3@32, f#4@125 ~@3, ~@95 c#4@32 ~]/8", Q: "[b3,d4,g4]@3 [a3,d4,f#4]@5",
  R: "[b3,e4,g4]@6 ~ [a3,d4,f#4]@9", S: "[c#4,e4]", T: "[a3,c#4,e4]", U: "[b3,g4]@6 ~ f#4@9, d4, ~@6 a3@9 ~",
  V: "[a3 b3, [d4,f#4]@15 ~]/4", W: "[b3,g4]@7 [a3,f#4]@9, d4", X: "[a3 b3, [d4,f#4]@7 ~]/4",
  Y: "[[b3,d4,g4]@6 ~ [a3,f#4]@8 ~ f#4@7 [b3,d4,g4]@9, ~@6 d4@9 [a3,c#4,e4]@7 ~@10]/2", Z: "[a3 b3, [d4,f#4]@59 ~@5]/4",
  AA: "[a3@32 b3@31 ~, [d4,f#4]@63 ~]/4", // D
})).s("gm_string_ensemble_2").gain(0.18)

// other · piano · "A.PIANO 2"
const piano_2 = note("<~@10 A B C D E F G H I@2 J@2 I@2 J@2 ~@12 A B K D E F G H I@2 J@2 I@2 J@2 ~@50>".pickRestart({
  A: "d5 d5@2 d5!3 f#5 d5!2 f#5@2 d5@2 e5 f#5 a5", B: "a5 a4 d5 f#5 d5 a4 d5 a4 d5 f#5 d5 f#5 a5 a4 d5 a5",
  C: "f#5 d5 c#5 d5 b5 c#5 d5 f#5 c#5 d5 f#5 c#5 d5 c#5 f#5@2",
  D: "b5 c#5 d5 f#5 c#5 b4 c#5 d5 f#5 d5 c#5 d5 b5 d5 c#5 d5", E: "a5 f#5@2 d5 e5 d5 d4 f#5@2 d5@2 e5 f#5 e5 d5 e5",
  F: "a5 a4 f#5 d5!2 a4 d5!2 a4 d5 a5 d5!2 a4 d5 f#5", G: "b4 d5 c#5 d5!2 b5 c#5 d5 b4 c#5 d5 c#5 d5 f#5 c#5 d5",
  H: "b5 f#5 c#5 d5!2 c#5 d5 c#5 d5 f#5!2 d5 c#5 e5 d5 a5", I: "b4 a4 b4 d5 b4 a4 b4 d5 b4 a4 b4 d5 b4 a4 b4 d5",
  J: "a4 g#4 a4 c#5 a4 g#4 a4 c#5 a4 g#4 a4 c#5 a4 g#4 a4 c#5",
  K: "f#5 d5 c#5 d5 b5 c#5 d5 f#5 c#5 d5 f#5 c#5 d5 c#5 f#5 ~",
})).s("gm_piano").gain(0.48)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@65 A@2 B@2 C D ~ E F E G ~@2 H I J ~ E K ~@2 H I J ~ E G ~@2 H I J ~ E K ~@2 H I
>`.pickRestart({
  A: "[~@9 [b3,b4] ~ [d4,d5] ~ [e4,e5] ~ [f#4,f#5]@4 ~ [a4,e5,a5] ~@11]/2", // B D E F# A5
  B: "[~@9 [b3,b4] ~ [d4,d5] ~ [e4,e5] ~ [e4,e5]@5 [b4,d5,f#5] ~@8 a4 b4 d5]/2", C: "~@5 a4 b4 d5 ~ d5 ~ d5 ~@4",
  D: "[a4,e5,a5]@3 ~ [b4,e5,b5] ~@11", E: "b4 d5@2 e5@2 f#5@2 a5@2 b5@2 a5 b5 d6 e6 ~",
  F: "~ e5@2 f#5@2 a5 ~ [d5,g5,b5]@3 ~@2 [d5,g5,b5] ~@3", G: "~ a5@2 b5@2 d6@2 [a5,e6]@3 ~@2 [f#5,a5,d6] ~@3",
  H: "[f#4,f#5] [e4,e5]", I: "[b3,d4]@7 ~ [b3,d4,f#4]@7 ~", J: "[c#4,e4]@15 ~",
  K: "~ a5@2 b5@2 d6@2 [a5,e6]@3 ~@2 [a5,d6] ~@3", // A5 D5
})).s("gm_brass_section").gain(0.44)

// other · flute
const flute = note("<A@2 B C A@2 D@2 E@2 ~@36 F@2 G@2 H@2 I@2 ~@50>".pickRestart({
  A: "[a4@6 b4 e4]/2", B: "f#4@3 g4", C: "f#4", D: "[g4@7 f#4@17 ~@8]/2", E: "[g4@7 f#4@21 ~@4]/2", F: "[a4@7 b4]/2",
  G: "f#4/2", H: "[a4@3 b4]/2", I: "[f#4@31 ~]/2",
})).s("gm_flute").gain(0.52)

// drums · kick
const kick = s("bd").struct("<~@26 A@36 ~@4 B C D@5 E D E D@7 F D@20>".pickRestart({
  A: "x!2 ~@6", B: "x ~@6 x ~@3 x ~@4", C: "x ~ x ~@4 x ~@3 x ~@3 x", D: "x ~ x ~@4 x ~@3 x ~@4",
  E: "x ~ x ~@4 x ~ x ~ x ~ x!2 ~", F: "x ~ x ~@4 x ~ x ~ x ~ x ~@2",
})).gain(0.57)

// drums · rim
const rim = s("rim").struct("<~@38 [~ x ~ x]!28 ~@38>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@65 A B@7 C B C B@7 D B E B@18>".pickRestart({
  A: "~@9 x ~ x!2 ~@3", B: "~ x ~ x", C: "~@4 x!4 ~ x ~@6", D: "~@4 x ~ x ~@2 x ~@2 x ~@3", E: "~@4 x ~@7 x!3 ~",
})).gain(0.64)

// … 48 more lines

More by Lois Lane