Strudelify

All That I Need (7" edit)

Boyzone

KeyC majorTempo93 bpm
0:00/0:00
// All That I Need (7" edit) — Boyzone
// 93 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 piano (copy of ch 1 voice oohs)
// note: Full arrangement: all 92 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93/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 · synth bass 2
const bass = note(`<
  ~@5 A B C D E F G H@2 I J K@2 L M N@2 O P Q@2 R S@8 T U V W X Y Z AA AB AC AD AE@8 AF@2 AG AH AI AJ AK AL ~@4 AM AN AO
  AP AQ AR AS AT AU AV AW AX AY AZ BA@3 BB BC BD BE BF@2 BG BH@2
>`.pickRestart({
  A: "~@32 c1@3 ~@3 c1@5 ~@5", B: "~@2 c1@17 ~@2 e1@5 ~ g1@3 ~@3 g1@3 ~@3 g1@4 ~@5",
  C: "~@3 g1@17 ~ g1@10 ~@2 a1@3 ~@3 a1@5 ~@4", D: "~@4 a1@16 ~ a1@5 ~@2 g1@4 ~@2 d1@3 ~@2 d1@9",
  E: "~@4 g1@10 ~@2 g1@3 ~@3 g1@4 ~@2 c1@4 ~ c1@3 ~@3 c1@5 ~@4", F: "~@3 c1@17 ~@2 e1@4 ~@2 g1@3 ~@3 g1@3 ~@3 g1@4 ~@4",
  G: "~@4 g1@16 ~@2 g1@10 ~@2 a1@3 ~@3 a1@5 ~@3",
  H: "[~@4 a1@10 ~@2 a1@4 ~@2 g1@5 ~ d1@4 ~@2 d1@5 ~ e1@4 ~@2 f1@5 ~@2 f1@10 ~@2 g1@10 ~@2 c1@5 ~ c1@3 ~@3 c1@4 ~@3]/2",
  I: "~@5 c1@17 ~ e1@5 ~ g1@3 ~@3 g1@3 ~@3 g1@4 ~@3", J: "~@5 g1@17 ~ g1@5 ~ g1@5 ~ a1@3 ~@3 a1@5 ~@2",
  K: "[~@6 a1@11 ~ a1@4 ~@2 a1@4 ~@2 g1@5 ~ d1@3 ~@3 d1@10 ~@2 g1@10 ~@2 g1@3 ~@3 g1@4 ~@2 c1@4 ~@2 c1@3 ~@4 c1@4 ~]/2",
  L: "~@7 c1@17 ~ e1@5 ~ g1@3 ~@3 g1@3 ~@3 g1@5", M: "~@7 g1@23 ~ g1@5 ~ a1@3 ~@3 a1@4 ~",
  N: "[~@7 a1@10 ~@2 a1@5 ~ g1@4 ~@2 d1@5 ~ d1@4 ~@2 e1@10 ~@2 f1@10 ~@2 g1@10 ~@2 c1@4 ~@2 c1@3 ~@3 c1@4 ~]/2",
  O: "~@7 c1@16 ~@2 e1@4 ~@2 g1@3 ~@3 g1@3 ~@3 g1@5", P: "~@7 g1@16 ~@2 g1@10 ~@3 a1@3 ~@2 a1@5",
  Q: "[~@8 a1@17 ~ a1@4 ~@2 g1@5 ~ d1@3 ~@3 d1@10 ~@2 g1@10 ~@2 g1@2 ~@4 g1@4 ~@2 c1@4 ~@2 c1@3 ~@3 c1@4]/2",
  R: "~@8 c1@17 ~ e1@4 ~@3 g1@3 ~@2 g1@3 ~@4 g1@3",
  S: "[~@9 g1@23 ~ g1@4 ~@2 a1@3 ~@3 a1@5 ~@7 a1@10 ~@2 a1@4 ~@2 g1@5 ~ d1@5 ~@2 d1@4 ~@2 e1@11 ~ f1@10 ~@2 g1@11 ~ c1@5 ~ c1@3 ~@3 c1@5 ~@7 c1@17 ~ e1@5 ~ g1@3 ~@3 g1@3 ~@3 g1@5 ~@7 g1@23 ~@2 g1@4 ~@2 a1@3 ~@3 a1@4 ~@8 a1@10 ~@2 a1@4 ~@2 g1@4 ~@2 d1@10 ~@2 e1@11 ~ f1@10 ~@2 g1@10 ~@2 c1@5 ~ c1@3 ~@3 c1@5 ~@7 c1@17 ~@2 e1@4 ~@2 g1@3 ~@3 g1@3 ~@3]/8",
  T: "g1@4 ~@8 g1@17 ~ g1@10 ~@2 a1@3 ~@3", U: "a1@5 ~@7 a1@17 ~@2 a1@4 ~@2 g1@5 ~ d1@3 ~@2",
  V: "~ d1@10 ~@2 g1@10 ~@2 g1@3 ~@3 g1@5 ~ c1@4 ~@2 c1@3 ~@2", W: "~ c1@4 ~@8 c1@16 ~@2 e1@5 ~ g1@3 ~@3 g1@3 ~@2",
  X: "~ g1@5 ~@7 g1@17 ~@2 g1@10 ~@2 a1@3 ~", Y: "~@2 a1@4 ~@8 a1@11 ~ a1@5 ~ g1@4 ~@2 d1@5 ~ d1@4",
  Z: "~@2 e1@4 ~@2 f1@5 ~ f1@11 ~ g1@10 ~@2 c1@5 ~ c1@3 ~", AA: "~@2 c1@5 ~@8 c1@17 ~ e1@5 ~ g1@3 ~@3 g1@3",
  AB: "~@3 g1@4 ~@8 g1@17 ~@2 g1@4 ~@2 g1@4 ~@2 a1@2", AC: "~@4 a1@4 ~@8 a1@10 ~@2 a1@4 ~@2 a1@5 ~ g1@5 ~ d1@2",
  AD: "~@4 d1@11 ~ g1@11 ~ g1@3 ~@3 g1@4 ~@2 c1@4 ~@2 c1@2",
  AE: "[~@4 c1@5 ~@8 c1@17 ~ e1@5 ~ g1@3 ~@3 g1@3 ~@3 g1@4 ~@8 g1@22 ~@2 g1@4 ~@2 a1@3 ~@3 a1@5 ~@7 a1@11 ~ a1@5 ~ g1@5 ~ d1@4 ~@2 d1@4 ~@2 e1@11 ~ f1@10 ~@2 g1@10 ~@2 c1@5 ~ c1@3 ~@3 c1@5 ~@7 c1@16 ~@2 e1@4 ~@2 g1@3 ~@3 g1@3 ~@3 g1@5 ~@7 g1@16 ~@2 g1@10 ~@2 a1@3 ~@3 a1@4 ~@8 a1@16 ~@2 a1@4 ~@2 g1@4 ~@2 d1@3 ~@3 d1@10 ~@2 g1@10 ~@2 g1 ~@5 g1@5 ~ c1@5 ~ c1]/8",
  AF: "[~@5 c1@5 ~@7 c1@16 ~@2 e1@5 ~ g1@3 ~@3 g1@3 ~@3 g1@5 ~@8 g1@23 ~ g1@5 ~]/2",
  AG: "a1@3 ~@3 a1@4 ~@8 a1@10 ~@2 a1@5 ~ g1@4 ~@2 d1@4 ~@2", AH: "d1@4 ~@2 e1@11 ~ f1@10 ~@2 g1@11 ~ c1@4 ~@2",
  AI: "a1@5 ~ a1@4 ~@8 a1@22 ~@2 g1@4 ~@2", AJ: "f1@5 ~ f1@4 ~@8 f1@11 ~ f1@4 ~@2 f1@5 ~ g1@4 ~@2",
  AK: "a#1@5 ~ a#1@5 ~@7 a#1@11 ~ a#1@2 ~@4 a#1@2 ~@4 a1@5 ~", AL: "d1@2 ~ e1@5 ~ f1@5 ~ g1@2 ~ g1@5 ~",
  AM: "~ c1@3 ~@3 c1@5 ~@7 c1@16 ~@2 e1@4 ~@2 g1@3 ~@2", AN: "~ g1@3 ~@3 g1@5 ~@7 g1@23 ~ g1@5",
  AO: "~ a1@3 ~@3 a1@4 ~@8 a1@11 ~ a1@5 ~ g1@4 ~@2 d1@5", AP: "~ d1@5 ~@2 e1@10 ~@2 f1@10 ~@2 g1@11 ~ c1@4",
  AQ: "~@2 c1@3 ~@3 c1@4 ~@8 c1@17 ~ e1@4 ~@2 g1@3 ~", AR: "~@2 g1@3 ~@4 g1@4 ~@8 g1@16 ~ g1@10",
  AS: "~@2 a1@3 ~@4 a1@4 ~@8 a1@17 ~ a1@4 ~@2 g1@3", AT: "~@3 d1@3 ~@3 d1@10 ~@2 g1@10 ~@2 g1@2 ~@4 g1@5 ~ c1@3",
  AU: "~@3 c1@3 ~@3 c1@5 ~@7 c1@17 ~ e1@5 ~ g1@3", AV: "~@3 g1@3 ~@3 g1@4 ~@8 g1@22 ~@2 g1@3",
  AW: "~@3 a1@3 ~@3 a1@5 ~@7 a1@10 ~@2 a1@5 ~ g1@4 ~@2 d1@3", AX: "~@3 d1@5 ~ e1@10 ~@2 f1@10 ~@2 g1@10 ~@2 c1@3",
  AY: "~@3 c1@3 ~@3 c1@5 ~@8 c1@17 ~ e1@4 ~@2 g1@2", AZ: "~@4 g1@3 ~@3 g1@4 ~@8 g1@17 ~ g1@8",
  BA: "[~@4 a1@3 ~@3 a1@5 ~@8 a1@17 ~ a1@4 ~@2 g1@4 ~@2 d1@3 ~@3 d1@11 ~ g1@10 ~@2 g1 ~@5 g1@5 ~ c1@5 ~ c1@3 ~@3 c1@5 ~@8 c1@17 ~ e1@5 ~]/3",
  BB: "g1@3 ~@3 g1@3 ~@3 g1@4 ~@8 g1@23 ~", BC: "g1@5 ~ a1@3 ~@3 a1@4 ~@8 a1@11 ~ a1@4 ~@2 g1@4 ~@2",
  BD: "d1@4 ~@2 d1@5 ~ e1@11 ~ f1@10 ~@2 g1@10 ~@2", BE: "c1@5 ~ c1@3 ~@3 c1@5 ~@7 c1@17 ~ e1@5 ~",
  BF: "[g1@3 ~@3 g1@3 ~@3 g1@4 ~@8 g1@17 ~ g1@10 ~@2 a1@3 ~@3 a1@4 ~@8 a1@17 ~ a1@5 ~]/2",
  BG: "g1@4 ~@2 d1@3 ~@3 d1@11 ~ g1@11 ~@2 g1 ~@6 g1@3 ~", BH: "[~ c1@29 ~@18]/2",
})).s("gm_synth_bass_2").gain(0.45)

// chords · epiano1
const epiano1 = note(`<
  ~@22 A B ~ C D@2 ~ E@5 ~ F G ~@7 H@7 I@2 J@2 K@2 ~ L M N@2 ~ O ~@6 P@6 ~@6 Q R S T ~@6
>`.pickRestart({
  A: "~@13 e5@6 d5@6 c5@12 ~@11", B: "~ g5@6 f5@6 e5@6 d5@6 d5@6 e5@17", C: "~@20 [f3,a3,c4]@11 ~ [e3,g3,c4]@16",
  D: "[~@15 g4@2 g5@2 f5@2 e5@2 d5@2 b4@2 c5@2 ~@3]/2",
  E: "[~@34 c5@3 d5@3 g5@24 ~@18 [b4,d5,g5]@30 ~@31 c5@6 e5@6 a5@12 c6@12 g5@18 ~@43, ~@17 [c4,g4]@15 ~@88]/5", // G C5
  F: "~@7 c6", G: "g6@6 c7@37 ~@5",
  H: "[~@22 e4@6 f4@6 g4@6 [c4,f4,g4]@23 ~ [c4,f4,a4,c5]@23 ~ [g4,c5,e5,g5]@23 ~@26 [d4,g4,b4]@29 ~@19 c5@16 ~@2 c5@10 ~@2 c5@10 ~@2 [f4,a4]@6 [e4,g4]@11 ~ [a4,c5,e5]@10 ~@2 [f4,a4,c5]@11 ~ c5@6 f5@6 g5@6 c5@3 e5@3 g5@3 c6@3 ~@37, ~@64 g4@2 ~@22 d5 ~@96 [e4,a4]@41 ~@110]/7", // Csus4 F C G F Em Am F …
  I: "[~@23 g5@6 f5@6 e5@6 d5@18 ~@37]/2", J: "[~@29 [a4,c5,f5]@6 [g4,c5,e5]@5 ~ [a4,c5,f5]@6 [g4,c5,e5]@11 ~@38]/2",
  K: "[~@6 g4@5 g5@6 ~ f5@6 e5@6 d5@6 c5@6 e5@17 ~@37]/2", L: "[a3,c4,e4]@3 ~", M: "[f3,a3,c4]@3 ~",
  N: "[~@18 c5@11 ~ [c4,f4,a4]@10 ~@2 [c4,f4,g4]@23 ~@25 c5@6, [f3,a3,d4]@29 ~@49 d5@18, ~@6 f4@23 ~@37 g4@30, ~@3 a4@4 ~@11 g5@6, ~@7 e5]/2", // F Csus4 Dm
  O: "~@2 g5 f5!2 e5 d5 e5",
  P: "[~@44 [g4,b4,d5,g5]@30 ~ g5@6 e5@5 d5@6 ~ [a4,c5,e5]@30 ~@18 [c5,f5,a5]@24 ~@12 [c5,e5,g5]@5 ~ [a4,c5,f5]@5 ~ [g4,c5,e5]@5 ~ g6@5 ~ f6@5 ~ e6@5 ~ d6@5 ~ c6@5 ~ b5@5 ~ a5@5 ~ g5@5 ~ f5@5 ~ e5@5 ~ d5@12 ~@21]/6", // G Am F C F C
  Q: "~@2 g5@3 c6 b5 a5", R: "g5@3 g5@2 g5 a5 b5", S: "a5@2 ~@3 a5 g5@2", T: "f5 e5 f5 g5",
})).s("gm_epiano1").gain(0.13)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A@2 ~@18 B@4 C@4 D@6 ~@10 E@8 F@3 G H ~@4 I@5 J K L M N O P Q R S P Q T@2 U@2 V@7 W@2
>`.pickRestart({
  A: "[~@29 [g3,c4]@43 ~@24]/2", B: "[~@37 c5@48 d5@48 ~ e5@48 f5@10]/4",
  C: "[~@14 g5@24 c5@48 ~ d5@48 e5@48 ~ f5@8]/4", D: "[~@16 g5@24 g6@229 ~@19]/6",
  E: "[~@46 c4@48 ~ b3@48 c4@48 [a3,c4]@48 c5@48 d5@48 e5@48 f5]/8", F: "[~@23 g5@24 c5@48 d5@48 ~]/3", G: "e5",
  H: "f5 g5", I: "[g6@193 c5@47]/5", J: "~ d5@47", K: "~ e5@47", L: "~ f5@24 ~ g5@22", M: "~ c5@23", N: "~ d5@23",
  O: "~ e5@23", P: "~ f5@8 g5@7", Q: "~ c5@15", R: "~ d5@15", S: "~ e5@15", T: "[~ d5@12 e5@11]/2",
  U: "[~@5 f5@24 g5@24 c5@43]/2", V: "[~@6 d5@48 e5@48 f5@24 g5@24 c5@48 d5@48 e5@48 f5@25 g5@17]/7",
  W: "[~ c5@29 ~@18]/2",
})).s("gm_string_ensemble_2").gain(0.05).pan(0.4)

// chords · string ensemble 2
const string_ensemble_2_2 = note(`<
  ~ A@6 ~@14 B@2 C D@2 E@7 F@2 ~@6 G H@3 I J@8 K@2 L M N@4 L O L M P Q P R S T U V W X W V W Y@2 Z@2 AA@7 AB@2
>`.pickRestart({
  A: "[~@30 c3@42 ~@7 d4@42 ~ c4@48 f4@24 g4@24 [c3,e3,g3,c4]@43 ~@27, ~@29 g3@92 ~@167, ~@29 [e3,c4]@43 d3@49 [e3,a3,e4]@49 [f3,a3,c4]@48 ~@70, ~@73 b3@49 ~@166]/6", // C A5 F
  B: "[~@37 [g4,c5,e5]@48 [g4,b4,d5]@11]/2", C: "~@19 g4@5, ~@37 [c5,e5]@11", D: "[~@19 [f4,a4,c5]@24 [g4,c5,e5]@5]/2",
  E: "[~@38 [g4,b4,d5]@49 [g4,c5,e5]@48 ~ [f4,a4,c5]@48 [c3,e3,c4]@42 ~@6 d4@42 ~ [e3,e4]@48 [f3,a3,c4,f4]@13, ~@92 g3@45 [a3,c4]@24 ~@7, ~@113 [d3,b3]@24 ~@31]/7", // G C F C E F Am G
  F: "[~@11 g4@24 [c3,e3,g3,c4]@43 ~@18]/2", G: "~@11 [e4,g4,c5]",
  H: "[~@45 [d4,g4,b4]@49 [e4,g4,c5]@48 [f4,a4,c5]@2]/3", I: "~@23 [e4,g4,c5]",
  J: "[~@47 [d4,g4,b4]@48 [e4,g4,c5]@48 [f4,a4,c5]@48 [g4,c5,e5]@48 [g4,b4,d5]@48 [g4,c5,e5]@48 [f4,a4,c5]@48 [g4,c5,e5]]/8", // G C F C G C F C
  K: "[~@47 [g4,b4,d5]@48 ~]/2", L: "[g4,c5,e5]", M: "[f4,a4,c5]", N: "[[a4,a5]@23 [g4,g5]@9]/4", O: "[g4,b4,d5]",
  P: "~ [g4,c5,e5]@47", Q: "~ [g4,b4,d5]@47", R: "~ [f4,a4,c5]@47", S: "~ [g4,c5,e5]@23", T: "~ [g4,b4,d5]@23",
  U: "~ [c5,e5]@15, ~ g4@23", V: "~ [f4,a4,c5]@15", W: "~ [g4,c5,e5]@15", X: "~ [g4,b4,d5]@15",
  Y: "[~ [g4,b4,d5]@12 [g4,c5,e5]@11]/2", Z: "[~@5 [f4,a4,c5]@48 [g4,c5,e5]@43]/2",
  AA: "[~ [g4,b4,d5]@8 [g4,c5,e5]@8 [f4,a4,c5]@8 [g4,c5,e5]@8 [g4,b4,d5]@8 [g4,c5,e5]@8 [f4,a4,c5]@7]/7", // G C F C G C F
  AB: "[~ [g4,c5,e5]@29 ~@18]/2", // C
})).s("gm_string_ensemble_2").gain(0.06)

// chords · pad warm
const pad_warm = note(`<
  ~ A B@2 C@2 D@2 E@2 F@2 G@3 H I@4 J@3 K@8 L M@2 N@2 O@3 P Q@2 R@2 S@2 T@2 U@8 V W ~@4 X Y V W Z AA AB AC AD AE AF AG
  AH AI AJ AG AH AK@2 AL@2 AM@7 AN@2
>`.pickRestart({
  A: "~@5 e3@3", B: "[~@25 [d3,g3,b3]@49 [e3,a3,c4]@22]/2", C: "[~@13 [f3,a3,c4]@27 [e3,g3,c4]@8]/2",
  D: "[~@9 [d3,g3,b3]@16 [e3,a3,c4]@7]/2", E: "[~@28 [f3,a3]@53 ~ [g3,c4]@14, ~@9 c4@18 e3@5]/2",
  F: "[~@7 [d3,g3,b3]@12 [e3,a3,c4]@5]/2", G: "[~@28 [f3,a3,c4]@55 [e3,g3,c4]@42 [d3,g3,b3]@19]/3",
  H: "~@29 [e3,a3,c4]@19", I: "[~@30 [f3,a3,c4]@54 ~ [e3,c4]@42 [d3,g3,b3]@48 [e3,a3,c4]@17, ~@84 g3@43 ~@65]/4",
  J: "[~@31 [f3,a3,c4]@54 [e3,g3,c4]@48 [d3,g3,b3]@11]/3", // F C G
  K: "[~@37 [e3,a3,c4]@49 [f3,a3,c4]@48 [e3,g3,c4]@48 ~ [g3,b3]@48 [e3,a3,c4]@49 [f3,a3,c4]@48 [e3,g3,c4]@42 [d3,g3,b3]@14, ~@182 d3@49 ~@153]/8", // Am F C G Am F C G
  L: "~@35 [e3,c4]@13, ~@17 a3@7", M: "[~@35 [f3,a3,c4]@54 [e3,g3,c4]@7]/2", N: "[~@3 [d3,g3,b3]@4 [e3,a3,c4]]/2",
  O: "[~@37 [f3,a3,c4]@54 [e3,g3,c4]@42 [d3,g3,b3]@11]/3", P: "~@19 [e3,a3,c4]@5",
  Q: "[~@19 [f3,a3,c4]@27 [e3,g3,c4]@2]/2", R: "[~@39 [d3,g3,b3]@49 [e3,a3,c4]@8]/2",
  S: "[~@20 [f3,a3,c4]@27 [e3,g3,c4]]/2", T: "[~@41 [d3,g3,b3]@48 [e3,a3,c4]@7]/2",
  U: "[~@41 [f3,a3,c4]@54 [e3,g3,c4]@48 [d3,g3,b3]@48 [e3,a3,c4]@48 [f3,a3,c4]@48 [e3,g3,c4]@48 [d3,g3,b3]@49]/8", // F C G Am F C G
  V: "[e3,a3,c4]", W: "[f3,a3,c4]", X: "[e3,g3,c4]", Y: "[d3,g3,b3]", Z: "~ [e3,g3,c4]@47", AA: "~ [d3,g3,b3]@47",
  AB: "~ [e3,a3,c4]@47", AC: "~ [f3,a3,c4]@47", AD: "~ [e3,g3,c4]@23", AE: "~ [d3,g3,b3]@23",
  AF: "~ a3@15, ~ [e3,c4]@23", AG: "~ [f3,a3,c4]@15", AH: "~ [e3,g3,c4]@15", AI: "~ [d3,g3,b3]@15",
  AJ: "~ [e3,a3,c4]@15", AK: "[~ [d3,g3,b3]@12 [e3,a3,c4]@11]/2", AL: "[~@5 [f3,a3,c4]@48 [e3,g3,c4]@43]/2",
  AM: "[~ [d3,g3,b3]@8 [e3,a3,c4]@8 [f3,a3,c4]@8 [e3,g3,c4]@8 [d3,g3,b3]@8 [e3,a3,c4]@8 [f3,a3,c4]@7]/7", // G Am F C G Am F
  AN: "[~ [e3,g3,c4]@29 ~@18]/2", // C
})).s("gm_pad_warm").gain(0.06)

// other · pad warm
const pad_warm_2 = note("<~@13 A@3 B@6 ~@19 C D@8 ~@8 E F G@2 ~@30>".pickRestart({
  A: "[~@35 c4@36 a4@6 g4@42 a4@6 c5@19]/3", B: "[~@24 a4@6 g4@42 a4@6 c4@48 ~ g4@48 c5@48 g4@54 ~@11]/6", C: "~@11 c4",
  D: "[~@33 a4@6 g4@43 a4@6 c5@42 a4@6 g4@42 a4@6 c4@49 g4@48 c5@48 g4@54 ~]/8", E: "[g3,c4,e4]", F: "[f3,a3,c4]",
  G: "[d4 c4, [f3,a3]]/2", // F
})).s("gm_pad_warm").gain(0.11)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@62 A B C D E F G H I J K L M N O P Q R S T@3 U V W ~@5>".pickRestart({
  A: "[e4,g4]@2 ~@4 g3 ~@2 c4@2 ~ [e4,g4,c5] ~@5 g3@2 ~ c4 ~@2 [e4,g4,c5] ~@5 [d4,b4] ~@5 [g4,a4] ~@5 [b3,d4,g4]@2 ~@4, c5 ~@29 g4@2 ~@4 c4@2 ~@10", // Em C G Gsus2 G
  B: "g3@2 ~@4 d3 ~@2 g3@2 ~ [d4,g4] ~@5 d3 ~@2 g3@2 ~ [d4,g4] ~@5 [c4,a4]@2 ~@4 [d4,g4,b4] ~@5 [c4,a4] ~@5, ~@12 b3@2 ~@10 b3@2 ~@4 e4 ~@11 e4@2 ~@4", // G5 F G F
  C: "a3@2 ~@4 e3 ~@2 a3 ~@2 [c4,e4,a4] ~@5 e3 ~@2 a3@2 ~ [e4,a4]@2 ~@4 e3 ~@2 a3@2 ~ [c4,e4,g4] ~@5 [e4,g4]@2 ~@4, ~@24 c4 ~@17 c4 ~@5", // Am A5 C Em
  D: "d2@2 ~@4 [a3,c4,f4] ~@2 [a3,c4,g4] ~@2 [a3,c4,f4]@2 ~@4 [g2,a3,c4] ~@2 [c4,f4]@2 ~ [a3,c4,e4]@2 ~@4 [a3,d4]@2 ~@2 e4 ~@2 [a3,c4]@2 ~@4 [e3,g3,c4] ~@4, ~@18 e4@2 ~ [a2,a3] ~@2 g2 ~@5 c4 ~@2 [a3,c4]@2 ~ d4@2 ~@10", // F Am7 F Am7 F5 Am D5 Am …
  E: "~ [e4,g4] ~@5 g3 ~@2 c4 ~@2 [e4,g4] ~@5 g3 ~@2 c4@2 ~ [e4,c5]@2 ~@4 [d4,b4] ~@5 [c4,g4]@2 ~@4 [b3,g4] ~@4, ~ c5@2 ~@10 c5@2 ~@10 g4 ~@5 g4@2 ~@4 a4 ~@5 d4@2 ~@3", // Em C G C5 Em
  F: "~ g3 ~@5 d3@2 ~ g3 ~@2 [b3,d4,g4] ~@5 d3@2 ~ g3 ~@2 [d4,g4] ~@5 [c4,e4,a4] ~@5 [d4,g4,b4]@2 ~@4 [e4,a4] ~@4, ~@25 b3@2 ~@16 c4@2 ~@3", // G G5 Am G A5
  G: "~ [c4,a4] ~@5 e3@2 ~ a3@2 ~ [e4,a4] ~@5 e3 ~@2 a3@2 ~ [c4,e4,a4]@2 ~@4 e3 ~@2 a3@2 ~ [c4,e4,a4] ~@5 [c4,a4]@2 ~@3, ~ e4@2 ~@10 c4@2 ~@28 e4 ~@4", // F A5 Am F
  H: "~@7 d3@2 ~ f3@2 ~ [a3,c4,f4]@2 ~@4 e3@2 ~ g3 ~@2 [g3,c4,e4]@2 ~@5 d3 ~ f3@2 ~@2 a3@2 ~@4 [g3,c4,e4]@2 ~@2, ~@37 [c4,f4]@2 ~@9", // F C F5
  I: "~@2 [e4,g4,c5] ~@5 g3 ~@2 c4@2 ~ [g4,c5] ~@5 g3@2 ~ c4 ~@2 [e4,g4] ~@5 [d4,g4,b4] ~@5 [c4,a4]@2 ~@4 [b3,d4,g4] ~@3, ~@14 e4@2 ~@10 c5@2 ~@10 g4 ~@9", // C C5 Em G F G
  J: "~@2 g3 ~@5 d3@2 ~ g3 ~@2 [b3,d4,g4] ~@5 d3 ~@2 g3 ~@2 [d4,g4] ~@5 [c4,a4]@2 ~@4 [g4,b4] ~@5 [c4,e4]@2 ~@2, ~@26 b3@2 ~@4 e4 ~@5 d4@2 ~@4 a4 ~@3", // G G5 F G C
  K: "~@2 a3 ~@5 e3 ~@2 a3 ~@2 [c4,e4] ~@5 e3 ~@2 a3 ~@2 [c4,a4]@2 ~@5 e3 ~@2 a3 ~@2 g4 ~@5 [c4,g4] ~@2, ~@14 a4@2 ~@10 e4 ~@11 [c4,e4]@2 ~@5 e4@2 ~", // C F C5 C
  L: "~@3 d2@2 ~@4 [c4,f4]@2 ~ [c4,g4] ~@2 [a3,c4,f4]@2 ~@4 [g2,a3,c4]@2 ~ [a2,f4]@2 ~ [g2,a3,c4,e4]@2 ~@4 [a3,d4]@2 ~ [a3,c4] ~@2 [a3,c4,d4]@2 ~@4 [g3,c4]@2 ~, ~@9 a3 ~@2 a3@2 ~@7 e4 ~@2 [a3,c4] ~@8 c4 ~@2 e4@2 ~@7 e3 ~@2", // F5 C5 F Am7 Dm Am7 D5 Am …
  M: "~@3 [e4,g4,c5] ~@5 g3@2 ~ c4 ~@2 [e4,c5]@2 ~@4 g3 ~@2 c4 ~@2 [e4,g4,c5] ~@5 [d4,g4,b4] ~@5 [g4,a4] ~@5 [b3,d4,g4] ~@2, ~@15 g4 ~@23 c4@2 ~@7", // C G Gsus2 G
  N: "~@3 g3 ~@5 d3 ~@2 g3 ~@2 [b3,g4] ~@5 d3 ~@2 g3 ~@2 [d4,g4] ~@5 [c4,e4,a4] ~@5 [g4,b4] ~@5 [c4,e4,a4] ~@2, ~@15 d4@2 ~@10 b3@2 ~@10 d4@2 ~@7", // Em G5 Am G Am
  O: "~@3 [c4,e4]@2 ~@4 e3 ~@2 a3 ~@2 [c4,e4] ~@5 e3@2 ~ a3 ~@2 [c4,e4,a4]@2 ~@4 e3 ~@2 a3 ~@2 [e4,a4] ~@5 [c4,e4] ~@2, ~@3 a4 ~@11 a4@2 ~@22 c4@2 ~@4 a4@2 ~", // C Am A5 C
  P: "~@9 d3 ~@2 f3 ~@2 [a3,c4,f4]@2 ~@4 e3 ~@2 g3@2 ~ [g3,c4,e4]@2 ~@4 d3@2 ~ f3 ~@2 [a3,c4,f4]@2 ~@4 [g3,c4,e4]@2 ~", // F C F C
  Q: "~@3 [e4,c5] ~@5 g3 ~@2 c4 ~@2 [e4,g4]@2 ~@4 g3 ~@2 c4 ~@2 [g4,c5] ~@5 [d4,g4]@2 ~@4 [c4,g4,a4]@2 ~@4 [b3,d4,g4]@2 ~, ~@3 g4@2 ~@10 c5 ~@11 e4@2 ~@4 b4 ~@14", // C Em C5 G5 Am7 G
  R: "~@4 g3@2 ~@4 d3@2 ~ g3 ~@2 [d4,g4]@2 ~@4 d3@2 ~ g3 ~@2 [d4,g4]@2 ~@4 [c4,e4,a4] ~@5 [d4,g4,b4]@2 ~@4 [e4,a4] ~, ~@16 b3 ~@11 b3 ~@17 c4@2", // G5 Am G A5
  S: "~@4 a3 ~@5 e3 ~@2 a3 ~@2 [c4,a4]@2 ~@4 e3 ~@2 a3 ~@2 [c4,e4]@2 ~@5 e3 ~@2 a3 ~@2 [c4,e4] ~@5 [c4,e4,g4], ~@16 e4 ~@11 a4 ~@11 g4@2 ~@6", // F C
  T: "[~@5 d2@2 ~@4 [c4,f4] ~@2 [a3,c4,g4] ~@2 [a3,c4,f4]@2 ~@4 [g2,c4,e4]@2 ~ [a2,a3,c4,f4] ~@2 [a3,c4,e4]@2 ~@4 [a3,d4] ~@2 [a3,e4] ~@2 [a3,c4,d4]@2 ~@4 [g3,c4] ~@5 [e4,g4]@2 ~@4 g3 ~@2 c4 ~@2 [e4,g4]@2 ~@4 g3 ~@2 c4 ~@2 [e4,c5]@2 ~@4 [g4,b4] ~@5 [c4,g4]@2 ~@4 [b3,g4]@2 ~@4 g3@2 ~@4 d3@2 ~ g3 ~@2 [d4,g4] ~@5 d3 ~@2 g3@2 ~ [b3,d4] ~@5 [c4,e4,a4] ~@5 [g4,b4] ~@5 [c4,e4,a4], ~@11 a3@2 ~@10 a3 ~@5 g2 ~@5 c4@2 ~ c4@2 ~@7 e3@2 ~@4 c5 ~@11 c5 ~@11 g4 ~@5 d4@2 ~@4 a4 ~@5 d4 ~@17 b3@2 ~@10 g4@2 ~@10 d4@2 ~@5]/3", // F5 Am7 F C F Am D5 A5 …
  U: "~@5 [c4,e4,a4] ~@5 e3@2 ~ a3 ~@2 [c4,e4,a4] ~@5 e3@2 ~ a3 ~@2 [c4,a4] ~@6 e3 ~ a3@2 ~@2 c4 ~@5, ~@29 e4@2 ~@10 [e4,a4]@2 ~@5", // Am F A5
  V: "[c4,a4] ~@11 d3 ~@2 f3 ~@2 [a3,c4,f4]@2 ~@4 e3 ~@2 g3 ~@2 [g3,c4,e4]@2 ~@4 d3 ~@2 f3 ~@2 [a3,c4,f4]@2 ~@4, e4 ~@23", // F C F
  W: "[g3,c4,e4] ~@23", // C
})).s("gm_string_ensemble_1").gain(0.28)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~ A@4 B@8 C ~@16 D@5 E F G H I J K L M@7 ~@36 N O P Q R@2>".pickRestart({
  A: "[~@42 c4@24 c4@6 ~ b3@42 b3@6 ~ c4@18 c4@30 ~@22]/4",
  B: "[~@26 c4@42 ~ c4@6 b3@12 d3@6 b3@18 d3@6 b3@18 e3@6 ~ c4@24 c4@18 f3@5 c4@18 f3@6 c4@18 ~ e3@6 c4@18 e3@6 c4@6 b3@12 d3@6 b3@18 d3@6 b3@18 e3@6 c4@18 f3@6 c4@18 ~ [a3,c4]@7, ~@47 f3]/8", // Am
  C: "~@5 [a3,c4]@12 [f3,a3,c4]@12 ~@19, ~ f3@3 ~@8", // Am F
  D: "[~@4 c4@18 g3@6 c4@6 b3@12 g3@6 b3@18 g3@6 b3@6 ~ c4@18 c4@24 c4@6 c4@24 c4@24 c4@43 c4@6 b3@12]/5",
  E: "d3 b3@3 d3 b3@3", F: "e3@6 c4@24 ~ c4@17", G: "~ f3@6 c4@18 f3@6 c4@17", H: "~ e3@6 c4@18 e3@6 c4@6 b3@11",
  I: "~ d3@6 b3@18 d3@6 ~ b3@16", J: "~ e3@3 c4@9 f3@3 c4@8",
  K: "~@3 [a3,c4]@11 ~ [a3,c4]@11 ~ [a3,c4]@12 ~@9, ~ f3@6 f3@6 f3@6 ~@5", L: "~@11 c4@2 b3@3",
  M: "[~@3 d3@6 b3@19 d3@6 b3@18 e3@6 c4@24 c4@18 f3@6 c4@18 f3@6 c4@18 e3@6 ~ c4@18 e3@6 c4@6 b3@12 d3@6 b3@18 d3@6 b3@18 e3@6 c4@18 f3@6 c4@18 ~ c4@11 ~ c4@11 ~ [a3,c4]@12 ~@6, ~@293 [f3,a3]@12 [f3,a3]@12 f3@12 ~@7]/7", // Am F
  N: "~@3 c4@3 g3 c4", O: "b3@2 g3 b3@3 g3 b3", P: "c4@3 c4@4 c4", Q: "c4!2", R: "[~ c4@25 ~@22]/2",
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.8)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C@2 D@2 ~@6 E@2 F@3 G@5 ~@7 H@5 ~@6 I@5 J@5 ~@7 K L@3 ~@24 M N O P@3
>`.pickRestart({
  A: "~@7 c5", B: "c5!2 b4 a4 g4@4",
  C: "[~ g4@6 g4@6 a4@6 b4@6 ~ a4@9 g4@3 e4@15 ~@3 e4@6 f4@6 g4@6 g4@12 f4@6 e4@4]/2", D: "[~ c4@9 f4@3 e4@15 ~@20]/2",
  E: "[~@29 c4@42 c4@3 d4@3 g3@18 ~, ~@23 g3@48 ~@25]/2", F: "[~@23 b3@6 a3@36 ~ e3@6 f3@6 g3@42 g3@6 c4@18]/3",
  G: "[~ c4@24 c4@6 b3@42 b3@6 a3@36 e3@6 f3@6 g3@42 g3@6 c4@30 ~@35]/5",
  H: "[~@4 c5@6 c5@6 c5@6 b4@6 a4@6 g4@24 g4@6 g4@6 a4@6 ~ b4@5 a4@9 ~ g4@3 e4@15 ~@3 e4@6 f4@6 g4@6 g4@12 f4@6 e4@6 c4@18 f4@6 e4@30 ~@31]/5",
  I: "[~@38 c4@42 ~ c4@3 d4@3 g3@19 ~@18 e4@6 b3@6 a3@36 e3@6 f3@6 g3@42 g3@6 c4@8, ~@32 g3@49 ~@159]/5",
  J: "[~@10 c4@24 ~ c4@6 b3@42 b3@6 a3@36 e3@6 f3@6 g3@36 g3@6 c4@6 g4@30 ~@25]/5",
  K: "b4@3 a4@15 a4@5 ~ c5@5 ~ b4@4 ~@2 a4@10 ~@2",
  L: "[f4@12 e4@17 ~ d4@12 d4@24 ~@6 f4@3 e4@3 d4@3 c4@3 d4@4 ~@2 a3@3 g3@27 ~@24]/3", M: "~@3 c5!3 b4 a4",
  N: "g4@4 g4!2 a4 b4", O: "a4@3 g4 e4@5 ~ e4@2 f4@2 g4@2", P: "[g4@12 f4@6 e4@6 c4@19 ~ a4@6 g4@58 ~@36]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.3)

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

More by Boyzone