Strudelify

Second Home by the Sea

Genesis

KeyE minorTempo128 bpm
0:00/0:00
// Second Home by the Sea — Genesis
// 128 bpm, 4/4, key E minor. 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 2 overdriven guitar (copy of ch 3 distortion guitar, 0.125 beats early)
// note: Full arrangement: all 174 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · distortion guitar · Em
const distortion_guitar = note("<[~@2 [b2,e3,g3] ~@3 [b2,e3,g3] ~]!12 ~@162>").s("gm_distortion_guitar").gain(0.02)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  A@12 ~@43 B C D E B C D E F C E@2 ~@16 A@11 ~@13 B C D E B C D E G C E@2 G C E@2 B C D E B C D E G C E@2 G C E@2 ~@35
>`.pickRestart({
  A: "~@7 [b2,e3,g3]@3 ~@9 [b2,e3,g3]@3 ~@2", B: "~@7 [g2,b2,e3,g3]@3 ~@9 [g2,b2,e3,g3]@3 ~@2",
  C: "~@7 [g2,b2,d3,g3]@3 ~@9 [g2,b2,d3,g3]@3 ~@2", D: "~@7 [f#2,b2,d3,f#3]@3 ~@9 [f#2,b2,d3,f#3]@3 ~@2",
  E: "~@7 [f#2,a2,d3,f#3]@3 ~@9 [f#2,a2,d3,f#3]@3 ~@2", F: "~@7 [g2,c3,e3]@3 ~@9 [g2,c3,e3]@3 ~@2",
  G: "~@7 [g2,c3,e3,g3]@3 ~@9 [g2,c3,e3,g3]@3 ~@2", // C
})).s("gm_distortion_guitar").gain(0.02)

// bass · electric bass pick
const bass = note(`<
  ~ A B C B D B C B E F G H@2 F I B@2 G J B@2 K L M L N O P Q B@2 D B R B H S T B@2 U L M L V W X Q Y L Z W AA Q AB AC
  AD AE AF AC AD AG AH AI AJ AK AL@2 AM H AN S AO AP AQ@2 AR@2 AS B AR AT H@2 F I B@2 H AU B@2 U L AV L AW W X Q AX L Z
  W AA Q AB AY AZ AG AB AC AZ AG BA AI AJ BB BA AI AJ BC AB AY AZ AG AB AC AZ AG BA AI AJ BD BA AI AJ BC B@2 BE BF BG BH
  AR BI BJ@2 AR@2 H B AR@4 B@2 ~@15
>`.pickRestart({
  A: "~@7 d#1", B: "e1 ~@2 e1 ~@4", C: "e1 ~@2 e1 ~@3 d#1", D: "e1 ~@2 e1 ~@2 d2@2", E: "e1@3 ~@6 e1@2 ~@7 d2@6",
  F: "e1@3 ~@6 e1@4 ~@11", G: "e1@4 ~@5 e1@3 ~@6 d2@6", H: "e1@4 ~@5 e1@3 ~@12", I: "e1 ~@2 e1 ~@2 g1 a1",
  J: "e1@3 ~@6 e1@4 ~@8 d#1@3", K: "e1@4 ~@5 e1@9 g1@3 a1@3", L: "c2@3 g2@3 a1 b1", M: "e1@2 e2 [d2,d3]@3 g1 a1",
  N: "e1@3 e2@5", O: "c2@3 a1@5", P: "d2@7 d2", Q: "c2!2 b1!2 a1!2 g1!2", R: "e1 ~@2 e1 ~@2 a1 b1",
  S: "e1@4 ~@5 e1@4 ~@11", T: "e1 ~@2 e1 ~@2 e2 ~", U: "e1@4 ~@5 e1@3 ~@6 g1@3 a1@3", V: "e1@3 d2@3 f#1@2",
  W: "c2@9 a1@14 ~", X: "d2!2 d3 d2@4 d2", Y: "e1@5 ~ e2@3 [d2,d3]@15", Z: "e1@3 a1", AA: "d2@2 d3 d2@4 d2",
  AB: "e1@3 d2@5", AC: "g1@3 g2@3 g1 a1", AD: "b1@2 d2 b1@3 a1 b1", AE: "d2@3 e2@3 g1 f#1", AF: "e1@7 ~@2 d2@12 e1@3",
  AG: "d2@3 e2@3 d2@2", AH: "a#1@3 e1@3 f#1@2", AI: "g1@3 b1@3 c2@2", AJ: "d2@3 f#1@3 g1@2",
  AK: "b1@9 d2@6 ~@3 c3 c3@2 ~@3, ~@15 [d2,e2]@2 [g#2,a#2]@2 ~@5, ~@8 f#2 d3 ~@2", AL: "[e1@47 ~]/2",
  AM: "a1@4 ~@5 a1@4 ~@11", AN: "c2@4 ~@5 c2@3 ~@12", AO: "g1 ~@2 g1 ~@4", AP: "g1@3 ~@6 g1@4 ~@11",
  AQ: "f1 ~@2 f1 ~@4", AR: "c2 ~@2 c2 ~@4", AS: "a1@4 ~@5 a1@3 ~@12", AT: "e1 ~@2 e1 ~@2 d2 d#1",
  AU: "e1@3 ~@6 e1@4 ~@2 e1@3 g1@3 d1@3", AV: "e1@2 e2 d2@3 g1 a1", AW: "e1@3 e1@3 g1 a1", AX: "e1@5 ~ e2@3 d2@15",
  AY: "g1@3 f2@3 g1 a1", AZ: "b1@3 d2@3 b1@2", BA: "c2@3 e1@3 f#1@2", BB: "a1@2 d2 d2@3 d2@2",
  BC: "a1@6 d2@3 d2@6 ~@3 c3 ~ a#2@2 ~@2, ~@15 [d2,e2]@2 [g#2,a#2]@2 c3@2 ~@3, ~@8 f#2 d3 ~@2", BD: "a1 ~ d2 d2@3 d2@2",
  BE: "g1@4 ~@5 g1@4 ~@11", BF: "g1@4 ~@5 g1@3 ~@12", BG: "f1@4 ~@5 f1@3 ~@12", BH: "f1@4 ~@5 f1@4 ~@11",
  BI: "c2@3 ~@6 c2@4 ~@11", BJ: "d2 ~@2 d2 ~@4",
})).s("gm_electric_bass_pick").gain(0.12)

// bass · electric bass pick · soft notes
const bass_soft = note("<~@66 A ~@28 B ~@5 C ~@20 D ~@15 D ~@35>".pickRestart({
  A: "~@11 [f#1,g#1,a#1,c2], ~@10 [g#2,a#2] ~, ~@21 [d2,e2,f#2]@2 ~", B: "~@3 d3@3 ~@2", C: "~@3 d3@5",
  D: "~@11 [f#1,g#1,a#1,c2], ~@10 g#2 ~, ~@21 [d2,e2,f#2]@2 ~", // G#7 D
})).s("gm_electric_bass_pick").gain(0.07)

// chords · piano
const piano = note("<~@8 A@2 B A C A@3 D A@2 E F B G ~@7 A H A@9 D ~@41 H A@9 D ~@80>".pickRestart({
  A: "[b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2", // E5
  B: "[b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~, ~@6 b3 ~@14 b3 ~@2", // E5
  C: "[b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~ [b3,e4] ~@2 e4@2 ~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2, ~@6 b3 ~@5 b3 ~@11", // E5
  D: "[b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~, ~@21 b3 ~@2", // E5
  E: "[b3,e4] ~@2 e4@2 ~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2, ~@3 b3 ~@20", // E5
  F: "[b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~ e4@2 ~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2, ~@6 b3 ~@2 b3 ~@14", // E5
  G: "e4@2 ~ e4@2 ~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~ e4@2 ~, b3 ~@2 b3 ~@14 b3 ~@2 b3 ~@2", // E5
  H: "[b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2 e4@2 ~ [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~@2, ~@12 b3 ~@11", // E5
})).s("gm_piano").gain(0.06)

// chords · lead 5 charang
const lead_5_charang = note(`<
  ~@12 A B@2 C@2 D@2 C@2 D@2 ~@8 A B@2 C@2 D@2 C@2 D@2 ~@41 A B@2 C@2 D@2 C@2 D@2 ~@80
>`.pickRestart({
  A: "[b3,e4,g4]@23 ~", B: "[[a3,d4,f#4]@47 ~]/2", C: "[b3,e4,g4]/2", D: "[a3,d4,f#4]/2",
})).s("gm_lead_5_charang").gain(0.07).pan(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@23 A@2 B@3 C D@2 ~@11 A@2 B@3 C E@2 B@3 C F@3 G@2 H I@3 J K L@2 ~@26 M@5 N@6 O@4 P@8 Q@8 P@8 R@7 ~@35
>`.pickRestart({
  A: "[g3@9 ~ a3@12 ~@2 [g3,b3]@24, e4@47 ~, c4@23 ~@25]/2", // G
  B: "[g3@8 ~@2 a3@13 ~ [g3,b3]@23 ~ g3@8 ~@2 a3@13 ~, e4@71 ~, c4@23 ~@25 c4@23 ~]/3", C: "[a3,d4,f#4]@23 ~",
  D: "[g3@8 ~ a3@14 ~ [g3,b3]@24, e4, c4@23 ~@25]/2", E: "[g3@8 ~ a3@14 ~ [g3,b3]@23 ~, e4, c4@23 ~@25]/2",
  F: "[g3@8 ~ a3@14 ~ g3@23 [d4,g4]@23 ~@2, e4@2 ~, c4@23 ~ b3@46 ~@2]/3", G: "[b3@23 ~ a3@24, [d4,f#4]@47 ~]/2",
  H: "[g3,b3,e4]", I: "[[d4,g4]@23 ~ d4@24 [a3,d4]@23 ~, b3@47 ~@25, ~@24 f#4@47 ~]/3", J: "[g3,c4,e4]@23 ~",
  K: "[b3,d4,g4]@23 ~", L: "[a3,d4,f#4]/2",
  M: "[~@23 g3@9 ~ a3@12 ~@2 [g3,b3]@24 g3@8 ~@2 a3@13 ~ [g3,b3]@23 ~ [g3,c4], ~@23 e4@47 ~ e4@49, ~@23 c4@23 ~@25 c4@23 ~@26]/5", // G C5
  N: "[~@9 a3@13 ~ [a3,d4,f#4]@23 ~ g3@8 ~ a3@14 ~ [g3,b3]@23 ~ g3@8 ~@2 a3@13 ~ [g3,b3]@23 ~ [g3,c4], ~@47 e4@48 e4@49, ~@47 c4@23 ~@25 c4@23 ~@26]/6", // D G C5
  O: "[~@9 a3@13 ~ [a3,d4,f#4]@23 ~ g3@8 ~ a3@14 ~ g3@23 [d4,g4]@2, ~@47 e4@48 ~, ~@47 c4@23 ~ b3@25]/4", // D G5
  P: "[~@23 b3@23 ~ a3@24 [g3,b3,e4]@24 [d4,g4]@23 ~ d4@24 [a3,d4]@23 ~ [g3,c4,e4]@23 ~ [b3,d4,g4], ~@23 [d4,f#4]@47 ~@25 b3@47 ~@50, ~@119 f#4@47 ~@26]/8", // Em G5 D5 C G D
  Q: "[~@23 [a3,d4,f#4]@48 [g3,c4,e4]@23 ~ [b3,d4,g4]@23 ~ [a3,d4,f#4]@48 [g3,b3,e4]@23 ~ b3, ~@95 [d4,g4]]/8", // D C G D Em G5
  R: "[~@23 [a3,d4,f#4]@48 [g3,c4,e4]@23 ~ [b3,d4,g4]@23 ~ [a3,d4,f#4]@49]/7", // D C G D
})).s("gm_string_ensemble_1").gain(0.06).pan(0.6)

// other · tinkle bell
const tinkle_bell = note("<~@23 A@2 B@3 C@4 ~@10 D@2 E F@5 G@3 H@4 ~@37 D@2 E F@5 G@3 H@4 ~@65>".pickRestart({
  A: "[~@3 e4@3 g4@3 a4@12 g4@12 e4@14 ~]/2", B: "[~@3 g4@3 a4@3 b4@18 d5@5 e5@40]/3",
  C: "[f#5@3 d5@3 b4@3 a4@3 g4@3 e4@3 d4@3 e4@18 d4@3 g4@3 e4@12 [e5,f#5,g5]@37 ~@2]/4", D: "[~ e4 g4 a4@4 g4@9]/2",
  E: "~ g4 a4 b4@5", F: "[~@3 b4@3 d5@3 e5@42 f#5@3 d5@3 b4@3 a4@2 g4@3 ~ d4@2 e4@19 d4@3 g4@2 e4@9 g4@3 ~ a4@15]/5",
  G: "[~@4 g4@2 a4@3 b4@18 f#5@3 e5@3 d5@3 e5@36]/3",
  H: "[f#5@3 d5@3 b4@3 a4@3 g4@3 e4@3 d4@2 ~ e4@18 d4@3 g4@3 e4@43 ~@8]/4",
})).s("gm_tinkle_bell").gain(0.18).pan(0.6)

// other · pad warm
const pad_warm = note(`<
  ~@67 A B C D E F G H I J K D C D E L@2 ~@55 M@2 N@2 O J P D C Q@2 R S@4 T@4 U@2 V@7 ~@6
>`.pickRestart({
  A: "e4@3 f#4@3 d4@2", B: "e4@3 f#4@5", C: "b4", D: "e4", E: "[f#4,d5]", F: "[g4,b4]", G: "a4@17 ~ b4@6", H: "d5",
  I: "c5@3 b4", J: "a4", K: "b4@3 a4", L: "[[g4,b4]@7 ~]/2", M: "[g4@17 a4@6 b4@25]/2", N: "[a4@17 b4@6 d5@25]/2",
  O: "c5@17 b4@7", P: "b4@17 a4@7", Q: "[d5@23 a4@19 g4@6]/2", R: "e4@3 g4",
  S: "[b4@17 c5@6 d5@18 e5@6 d5@7 g4@6 a4@5 b4@6 c5@7 b4@6 a4@6 g4@6]/4", T: "[~ b4, d5@13 ~@11]/4", U: "[d5,f#5]/2",
  V: "[~ b4@48 f#5@53 ~ b4@49 ~@16, ~ d5@151 ~@16]/7",
})).s("gm_pad_warm").gain(0.31)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@67 A@4 B@6 C@7 ~@55 D@2 E@4 F@2 G@2 H@2 I@8 J@4 K@5 ~@6>".pickRestart({
  A: "[b3@47 ~@3 c4@22 ~ [b3,e4]@23, g3@95 ~, e4@71 ~@25]/4", // E5
  B: "[~ [a3,d4,f#4]@24 ~ [g3,e4,g4]@24 d4@46 ~@2 c4@46, ~@25 b3@24 ~ [a3,f4]@94]/6", // D C Dm
  C: "[~@2 g3@46 ~ a3@23 ~ g3@24 ~ [a3,d4]@24 [g3,b3,e4,g4]@35 ~@11, ~@2 e4@95 f#4@24 ~@47, ~@2 c4@70 ~ b3@23 ~@72]/7", // D5 Em
  D: "[g3,b3,e4]/2", E: "[[a3,d4]@48 ~ [a3,c4]@47, f4@95 ~]/4", F: "[[g3,c4,e4]@47 ~]/2", G: "[[a3,d4,f#4]@47 ~]/2",
  H: "[g3,c4,e4]/2", I: "[~ b3@46 ~ [g3,c4]@96 ~ [g3,b3]@47, e4, g3@47 ~@145]/8",
  J: "[~ [g3,c4]@23 ~ b3@23, ~ e4@47, ~@49 g3@47]/4", K: "[~ e4@49 ~@10, ~ g3@52 ~@67, ~@2 c4@51 ~@67]/5",
})).s("gm_string_ensemble_2").gain(0.1).pan(0.4)

// other · french horn
const french_horn = note("<~@55 A@4 B@8 ~@40 C@8 D@8 E@4 F@8 G@4 ~@35>".pickRestart({
  A: "[~@3 e4@3 b4@3 g4@5 e4@3 b4@4 g4@9 d5@3 b4@6 g4@3 d5@3 b4@8 f#5@4 d5@6 b4@3 f#5@3 d5@9 a5@3 f#5@6 d5@3 a5@3 f#5@3]/4",
  B: "[~@3 e4@3 b4@3 g4@6 e4@3 b4@3 g4@9 d5@3 b4@6 g4@3 d5@3 b4@9 f#5@3 d5@6 b4@3 f#5@3 d5@9 a5@3 f#5@6 d5@3 a5@2 f#5@7 c5@3 g5@3 e5@6 c5@3 g5@3 e5@6 b4@3 g5@3 ~ d5@5 b4@3 g5@3 d5@6 a4@3 f#5@3 d5@6 a4@3 f#5@3 d5@6 a4@3 f#5@3 d5@6 a4@2 f#5@3 d5@4]/8",
  C: "[~@3 e4@3 b4@3 g4@5 e4@3 b4@4 g4@8 d5@3 b4@6 g4@3 d5@3 ~ b4@9 f#5@3 d5@5 b4@3 f#5@3 d5@10 a5@3 f#5@6 d5@2 a5@3 f#5@7 e4@3 b4@3 g4@6 e4@3 b4@3 g4@9 d5@3 b4@5 g4@3 d5@3 ~ b4@9 f#5@3 d5@6 b4@3 f#5@3 d5@9 a5@3 f#5@6 d5@3 a5@3 f#5@3]/8",
  D: "[~@3 c5@3 g5@3 e5@6 c5@3 g5@3 e5@6 b4@2 g5@4 d5@6 b4@2 g5@4 d5@6 a4@3 f#5@3 d5@6 a4@2 f#5@3 ~ d5@6 a4@3 f#5@3 d5@5 a4@3 f#5@3 d5@7 c5@3 g5@3 e5@5 c5@3 ~ g5@2 e5@7 b4@3 g5@3 d5@5 b4@3 g5@3 d5@7 a4@2 f#5@3 ~ d5@5 a4@3 f#5@3 d5@7 a4@3 f#5@3 d5@5 a4@4 f#5@2 d5@4]/8",
  E: "[~@2 e4@4 b4@3 g4@5 e4@3 ~ b4@3 g4@9 d5@3 b4@6 g4@3 d5@3 b4@9 f#5@3 d5@6 b4@3 f#5@3 d5@9 a5@3 f#5@6 d5@3 a5@3 f#5@3]/4",
  F: "[~@3 e4@3 b4@3 g4@6 e4@3 b4@3 g4@8 d5@4 b4@6 g4@3 d5@3 b4@8 f#5@3 ~ d5@6 b4@2 f#5@4 d5@8 a5@3 f#5@7 d5@3 a5@3 f#5@6 c5@3 g5@3 e5@6 c5@3 g5@3 e5@6 b4@3 g5@3 d5@6 b4@3 g5@3 d5@6 a4@3 f#5@3 d5@5 a4@3 f#5@3 d5@6 a4@3 f#5@3 d5@6 a4@3 ~ f#5@2 d5@4]/8",
  G: "[~@3 c5@3 g5@3 e5@5 c5@3 g5@3 e5@7 b4@3 g5@3 d5@5 b4@3 g5@3 d5@7 a4@3 f#5@3 d5@5 a4@3 f#5@3 d5@6 a4@3 f#5@3 d5@6 a4@3 f#5@3 d5@4]/4",
})).s("gm_french_horn").gain(0.14).pan(0.6)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@2 A@21 ~@7 B A@11 ~@41 B A@10 ~@80>".pickRestart({
  A: "[e2,e3] ~@2 [e2,e3] ~@4", B: "[e2,e3]@2 ~ [e2,e3] ~@4",
})).s("gm_lead_2_sawtooth").gain(0.04)

// other · recorder
const recorder = note("<~@67 A@7 ~ B@3 C@6 ~@58 D@2 E@3 F@3 ~ G H@2 ~ I@3 ~ J@2 K@3 L@3 ~@7>".pickRestart({
  A: "[~ a5@39 ~@11 g5@32 ~@10 d5@6 e5@57 ~@12, ~@45 e5@38 ~@85]/7", B: "[~@7 e6@22 ~@7]/3",
  C: "[~@13 a5@65 ~@6 d6@49 ~@11]/6", D: "[a5@2 ~]/2", E: "[~@9 e5@22 ~@5]/3", F: "[~@7 e5@20 ~@9]/3", G: "~@3 e5",
  H: "[g5@2 e5@13 ~]/2", I: "[e5@49 ~@23]/3", J: "[~ e5@38 ~@9]/2", K: "[~ b5@31 ~@4 e6@30 ~@6]/3",
  L: "[~@13 d5@43 ~@16]/3",
})).s("gm_recorder").gain(0.09)

// other · timpani
const timpani = note("<~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@14 A ~@3 A ~@43 A ~@3 A ~@3 A ~@83>".pickRestart({
  A: "~@7 d2",
})).s("gm_timpani").gain(0.25)

// other · synth drum
const synth_drum = note("<~@165 [~@7 g#2@8 ~@9] ~@8>").s("gm_synth_drum").gain(0.62)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@22 A@8 ~@11 A@8 B@6 ~@38 A@8 B@6 ~@67>".pickRestart({
  A: "[~@25 b2@8 [c3,e3,a3,d4]@9 [c3,e3,a3,d4]@3 [b2,e3,e4]@7 ~@2 [e2,b2,e3,e4]@3 ~@6 [e2,b2,e3,e4]@3 ~@5 b2@7 [b2,e3,g3,c4]@3 [c3,e3,a3,d4]@9 [c3,e3,a3,d4]@3 [b2,e3,e4]@7 ~@2 [e2,b2,e3,e4]@3 ~@6 [e2,b2,e3,e4]@3 ~@4 [b2,e3]@8 ~@3 [a3,d4]@12 ~ a3@11 [d3,f#3,a3,d4]@12 ~ [b2,e3]@8 ~@3 [c3,e3,a3,c4]@14 ~, ~@23 [g3,c4]@9 ~@37 c4@9 ~@63 [d3,f#3,d4]@11 ~@13 [g3,c4]@9 ~@18, ~@24 e3@8 ~@38 [e3,g3]@8 ~@39 [g3,c4]@9 ~@3 [c3,e3]@14 ~@49]/8", // Am E5 Cmaj7 Am E5 D5 D E5 …
  B: "[~@6 [e2,b2,e3,e4]@3 ~@6 [e2,b2,e3,e4]@3 ~@5 b2@7 [b2,e3,g3,c4]@3 [c3,e3,a3,d4]@9 [c3,e3,a3,d4]@3 [b2,e3,e4]@7 ~@2 [e2,b2,e3,e4]@3 ~@6 [e2,b2,e3,e4]@3 ~@4 [b2,e3]@8 ~@3 [a3,d4]@12 ~ a3@11 [d3,f#3,a3,d4]@12 ~ [b2,e3]@8 ~@3 [c3,e3,a3,c4]@14 ~, ~@21 c4@9 ~@63 [d3,f#3,d4]@11 ~@13 [g3,c4]@9 ~@18, ~@22 [e3,g3]@8 ~@39 [g3,c4]@9 ~@3 [c3,e3]@14 ~@49]/6", // E5 Cmaj7 Am E5 D5 D E5 Am …
})).s("gm_electric_guitar_clean").gain(0.06)

// chords · synth strings 2
const synth_strings_2 = note("<~@73 A@8 ~@93>".pickRestart({
  A: "[~@184 d#5@7 ~, ~@12 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@2 a#5@4 f#5@5 ~@6, ~@13 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@2 a5@4 f5@5 ~@5, ~@14 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 g#5@4 e5@7 ~@2, ~@15 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@4 d#5@7 g5@5 ~@7]/8",
})).s("gm_synth_strings_2").gain(0.06)

// other · overdriven guitar
const overdriven_guitar = note("<~@146 A@3 ~ B@3 C@2 D@7 ~ E@3 ~@8>".pickRestart({
  A: "[~@18 e4@43 ~@11, ~@17 a4@44 ~@11]/3", B: "[~@5 d4@46 ~@21]/3", C: "[~@13 g4@31 ~@4]/2",
  D: "[~@13 a4@40 ~@8 d5@38 ~@19 d4@37 ~@13]/7", E: "[~@13 d4@56 ~@3]/3",
})).s("gm_overdriven_guitar").gain(0.02).pan(0.4)

// other · xylophone
const xylophone = note("<~@151 A@8 B@7 ~@8>".pickRestart({
  A: "[~@191 g6, e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6 e6 c7 e6!2 c7 e6!2 c7 e6!2 c7 e6, ~ a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 ~]/8",
  B: "[~@15 c6@2 ~@78 e6@2 ~@22 c6@2 ~@8 e6@2 ~@6 a6@2 ~@4 e6@2 ~@4 g6@2 e6@2 ~@15, e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 ~@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 ~@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 ~@2 g6@2 a6@2 c6@2 g6@2 ~ a6@2 c6@2 g6@2 ~@2 c7@2 e6@2 ~@3 c7@2 e6@2 ~@18, ~ a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 ~@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 e6@2 e6@2 c7@2 ~@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 c6@2 g6@2 a6@2 ~@2 e6@2 e6@2 c7@2 e6@2 ~@3 c7@2 e6@2 e6@2 ~@2 c6@2 g6@2 ~ a6@2 c6@2 ~@19]/7",
})).s("gm_xylophone").gain(0.05).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~@2 x ~@4]!155 ~@17>").gain(0.13)

// drums · rim
const rim = s("rim").struct("<~@67 [~@19 x ~@4]!16 ~@56 [~@19 x ~@4]!18 ~@17>").gain(0.16)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@20 B A B A B A@2 B A@8 C A@2 B A B A B A@2 B A@2 B A@2 B C A@2 D C A@2 B A@4 ~@16 A@7 C A@2 B A B A B A@2 B A@2
  B A@2 B C A@2 D C A@2 B A@7 D C A@2 E C A@2 B A@7 F ~@35
>`.pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@11 x ~@2 x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@2 x ~@2 x!3", E: "~@6 x ~@8 x ~ x!2 ~@2 x ~ x",
  F: "~@2 x ~ x!4",
})).gain(0.19)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@9 A B@10 A B A B A B@2 A B@11 A B A B A B@2 A B@2 A B@2 A B@3 A B@3 A B@3 A B@26 A B A B A B@2 A B@2 A B@2 A
  B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@14 C B@2 ~@17
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!6 ~ x",
})).gain(0.16)
// … 19 more lines

More by Genesis