Strudelify

Let's Stay Together

Al Green

KeyF majorTempo103 bpm
0:00/0:00
// Let's Stay Together — Al Green
// 103 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 acoustic guitar steel (copy of ch 9 electric guitar clean)
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · fretless bass
const bass = note(`<
  ~ A@2 B C D E F G H I J K L M N O L P Q R S T U V H I J W L M N O L P Q X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AE
  AF AM AN AO AP AQ AR AS@2 AT AU N AV L P Q AW AX AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BH BR BJ BK
  BL BM BS BT BF BU BH BI BJ BV BW BX BY ~@2
>`.pickRestart({
  A: "g1@8 a1@2 c2@2 a1@3 ~", B: "g1@4 a1 c2 a1@2", C: "g1@5 ~ g1@2 c2@4 ~@2 d2@2", D: "f2@2 ~ g2 a2 f2 c2@2, ~ c2 ~@2",
  E: "f2@2 ~ g2 a2 bb2 c3 d3, f1@3 ~@5, ~ c2 ~@2", F: "d2@6 a2@6 ~ c3 db3@2", G: "d3@2 a2 ~@2 f3 g3 ~, ~@3 d2@5",
  H: "bb2@2 c3 ~ d3@2 f2@2", I: "bb2@2 c3!2 d3 f2 bb2@2, bb1", J: "db3@3 ~ db3@2 ~@2 db3@3 ~ bb2@2 db3 ~, db2@15 ~",
  K: "db3@3 ~ db3@2 db3@2 db3@3 ~@3 db3@2, db2", L: "a2@2 c3 a2 g2@2 c3 g2", M: "f2@2 c3 f2 e2@2 c3 e2",
  N: "d2@4 c3@2 d2@2 ~@3 c3 c3@4, ~@8 d2@5 ~@3", O: "~@3 c3 ~@2 d2@2 d2@3 c3 c3@2 d2@2, d2 c3 ~@2",
  P: "f2@3 f2 g2@2 ab2@2 a2@2 a1@2 e2@2 eb2@2", Q: "d2@4 c3@2 d2 ~@4 c3 c3@4, ~@8 d2@5 ~@3",
  R: "d2@3 c3 ~@2 d2@2 d2@3 c3 c3@2 d2@2, ~ c3 ~@2", S: "f2@4 ~@2 g2@2 a2@2 f2@2 c2@3 ~, ~ c2 ~@2",
  T: "f2@4 ~@2 g2@2 a2@2 c3 ~ c3@2 d3@2, f1@3 ~@5, ~ c2 ~@2", U: "~@2 a2 d3@3 a1 c2, d2@3 ~",
  V: "d2@2 d2@2 a1 e2 f2 g2", W: "db3@3 ~ db3@2 bb2@2 db3@3 ~@3 db3@2, db2",
  X: "d2@3 c3 ~@2 d2@2 d2@3 c3 c3@2 a1@2, ~ c3 ~@2", Y: "g1@4 d2@3 g1@3 g1@2 d2@2 g2@2",
  Z: "g1@4 d2@3 g1 ~ g1 g1@2 d2@2 g2@2", AA: "a1 ~ a1@2 c2@2 ~ a1!2 ~ a1@2 c2@2 e1@2", AB: "a1!2 c2 e1 a1!2 c2 a1",
  AC: "g1@4 d2@3 g1!2 ~ g1@2 d2@3 ~", AD: "g1@4 d2@3 g1!2 ~ g1@2 d2@3 a1", AE: "bb1@2 bb1@2 d2@3 bb1 a1 ~ a1@2 d2@3 ~",
  AF: "d2@2 d2@2 f2@3 d2 c2@2 e1@2 f1@2 g1@2", AG: "g1 ~ g1@2 d2@2 ~@2 g1@2 g1@2 d2@2 g2@2",
  AH: "g1 ~ g1@2 d2@2 ~@2 g2@2 g1@2 d2@4", AI: "ab1 ~ ab1@2 c2@3 ab1!2 ~ ab1@2 eb2@2 ab1@2",
  AJ: "g1 ~ g1@2 d2@3 ~ g1@2 g1@2 d2@3 ~", AK: "ab1 ~ ab1@2 c2@2 ~ ab1!2 ~ ab1@2 c2@3 ~",
  AL: "ab1 ~ ab1@2 c2@3 ab1!2 ~ ab1@2 c2@3 eb2", AM: "f2@3 ~@3 g2@2 a2@2 f2@2 c2@3 ~, ~ c2 ~@2",
  AN: "f2@4 ~@2 g2@2 a2@2 c3 ~ d3@2 e3@2, f1@3 ~@5, ~ c2 ~@2", AO: "d2@4 a2@2 a1 ~ d2@4 d3 d3@2 ~",
  AP: "d2@3 ~ d2@4 a1@2 e2@2 f2@2 g2@2", AQ: "bb1@4 c2 ~@3 d2@3 ~ c2@4", AR: "bb1@2 c2!2 d2 f1 bb1 ~",
  AS: "[db3@3 ~ db3@2 db3@2 db3@3 db3 bb2@2 ~@6 db3@2 bb2@2 db3@3 db3 bb2@2 db3@2, db2@14 db3@5 ~@13, ~ db2]/2",
  AT: "a2@3 ~ c3@2 a2@2 g2@4 c3@2 g2@2", AU: "f2@3 c3 c3@2 f2@2 e2@3 e2 c2@2 e2@2",
  AV: "d2@3 c3 c3@2 c2@2 d2@2 e2@2 f2@2 g2@2", AW: "~@3 c3 ~@2 d2@2 d2@3 c3 c3@2 a1@2, d2 c3 ~@2",
  AX: "g1@4 d2@3 g1 g1@2 g1@2 d2@2 g2@2", AY: "g1@2 g1@2 d2@3 g1 ~@2 g1@2 d2@2 g2@2",
  AZ: "a1 ~ a1@2 c2@2 ~ e1 a1 ~ a1@2 c2@2 g1 ab1", BA: "a1 ~ a1@2 c2@2 g1 e1 a1@2 a1 ~ c2@2 a1@2",
  BB: "g1@4 d2@3 g1!2 ~ g1@2 d2@3 f1", BC: "g1@4 d2@2 f1 g1 ~@2 g1@2 d2@3 a1, ~@2 g2 ~",
  BD: "g1 ~ g1@2 d2@3 g1 a1 ~ a1@2 c2@3 a1", BE: "g1 ~ g1@2 d2@3 a1 c2!2 e1!2 f1!2 gb1 g1",
  BF: "g1 ~ g1@2 d2@2 ~ d2 g1@2 g1@2 d2@2 ~@2", BG: "g1 ~ g1@2 d2@2 ~ d2 g1 ~ g1@3 ~ g1@2",
  BH: "a1 ~ a1@2 c2@2 ~ c2 a1 ~ a1@2 c2 ~ d2@2", BI: "a1 ~ a1@2 c2@2 ~ c2 a1 ~ a1@2 c2 a1 e2@2",
  BJ: "g1 ~ g1@2 d2@3 g1!2 ~ f1 g1 d2!2 bb1!2", BK: "g1 ~ g1@2 bb1@2 g1 d2 g1!2 f1 e1 f1 e1 f1 gb1",
  BL: "g1 ~ g1@4 ~ g1 a1 ~ a1@4 ~ a1", BM: "g1 ~ g1@4 ~ g1 c2!2 e1!2 f1!2 gb1!2",
  BN: "g1 ~ g1@2 c2@3 g1 a1 ~ a1@2 c2@3 a1", BO: "g1 ~ g1@2 c2@3 a1 c2!2 e1!2 f1!2 gb1 g1",
  BP: "g1 ~ g1@2 d2@2 ~ d2 g1@2 g1@2 d2@2 f1 gb1", BQ: "g1@2 g1@2 d2@2 ~ d2 g1 ~ g1@2 d2!2 g1 ab1",
  BR: "a1 ~ a1@2 c2@2 ~ c2 a1 ~ a1@2 e2!2 c2@2", BS: "g1 ~ g1@4 c2 g1 a1 ~ a1@4 c2 a1",
  BT: "g1 ~ g1@4 c2 a1 c2!2 e1!2 f1!2 gb1 g1", BU: "g1@2 g1@2 d2@2 ~ d2 g1 ~ g1@3 ~ g1@2",
  BV: "g1 ~ g1@2 bb1@2 g1 d2 g2!2 f2 db2 d2 bb1 f2 gb2", BW: "g2!2 ~ g2 g1!2 ab1 a1 ~ a1 a2@2 ~ a1 ab1 ~, ~ g1 ~@6",
  BX: "g1 ~ g2 g1 g2 g1 g2 d2 c2!2 e1!2 f1!2 gb1!2", BY: "g1 g2 ~ g2 ~ g2 g1 ab1 ~@8",
})).s("gm_fretless_bass").gain(0.24).pan(0.6)

// bass · fretless bass · soft notes
const bass_soft = note(`<
  ~@7 A B C ~ D E F G H ~ I ~ J ~@5 K ~ D L F G H ~ I ~ J ~@7 M ~ N@2 ~ O P ~ M ~ Q ~@3 R S ~ T U ~ H ~ I ~ J ~@2 V ~@34
  W X Y
>`.pickRestart({
  A: "~@12 c3 ~@3", B: "~@7 e3", C: "~@3 c3 ~@4, bb1", D: "~@3 db3 ~@4", E: "~@6 bb2 ~", F: "~@11 c3 ~@4",
  G: "~@3 c3 ~@12", H: "~@3 c3 ~@10 d2@2", I: "~@3 c3 ~@7 c3 ~@4", J: "~@3 c3 ~@10 d2 ~", K: "~@3 c3 ~@4",
  L: "~@12 bb2@3 ~", M: "~@15 c2", N: "~@7 d2 ~@8", O: "~@7 g2 ~@8", P: "~@15 eb2", Q: "~@3 c2 ~@12",
  R: "~@6 c2 ~@4 d2 ~@4", S: "~@7 c2", T: "~@3 db3 ~@12", U: "~@3 a2 ~@7 c3 ~@4", V: "~@9 g1 ~@6",
  W: "~@8 a1 ~ a2 a1 a2 e2 bb1 a1", X: "g1 g2 ~ g2 ~ d2 g2 c2 ~ c3 a2 f2 c3 bb2 f2 d2, ~@4 d3 ~@3", Y: "[g1,g2]@9 ~@7",
})).s("gm_fretless_bass").gain(0.15).pan(0.6)

// other · percussive organ
const percussive_organ = note("<~@5 A B C@2 D@2 E@2 ~@8 A B C@2 D@2 E@2 ~@24 F B C@2 D@2 E@2 ~@47>".pickRestart({
  A: "a4@14 bb4 a4", B: "bb4 a4@6 ~", C: "e5/2", D: "d5/2", E: "[db5@31 ~]/2", F: "~@14 bb4 a4",
})).s("gm_percussive_organ").gain(0.07).pan(0.1)

// chords · rock organ
const rock_organ = note(`<
  ~@5 A@2 B@2 C@2 D@2 ~@8 E@2 B@2 C@2 D@2 ~@14 F G ~@8 H@2 B@2 C@2 I@2 ~@41 J K@3 L ~
>`.pickRestart({
  A: "[c5@7 d5@2 c5@7, f4]/2", B: "[[f4,c5]@31 ~]/2", C: "[f4,bb4,f5]/2", D: "[[f5,c6]@31 ~, b5 ~@31]/2",
  E: "[c5@14 d5@4 c5@13 ~, f4]/2", F: "[d4,bb4] [c4,a4]", G: "[f4,d5] [e4,c5]", H: "[~@14 d5@4 c5@13 ~]/2",
  I: "[[ab5,c6]@15 ~, f5@7 ~, b5 ~@31]/2", // Ab
  J: "~@11 [a1,b1] [f2,g2,a2,b2] [c3,d3,e3,f3,g3,a3] [b3,c4,d4,e4,f4,g4,a4,b4,c5] [d5,e5,f5,g5,a5,b5,c6,d6]", // Asus2 G7 Dm7 Bm7b5 Dm7
  K: "[[e6,f6,g6] ~@15 c7 ~@9 g6 a6 ~ g6 a6 ~@17, d7]/3", L: "~ [db7,d7] c7 ~@13",
})).s("gm_rock_organ").gain(0.11).pan(1)

// chords · rock organ · soft notes
const rock_organ_soft = note("<~@11 A@2 ~@14 A@2 ~@30 A@2 ~@41 B ~@3 C@2>".pickRestart({
  A: "[c7@31 ~]/2", B: "~@11 c2 [d2,e2] ~@3", C: "[~@3 a6 g6 c7 a6 g6 f6 g6 ~ d6 g6 f6 d6 c6@3 d6 ~@13]/2",
})).s("gm_rock_organ").gain(0.04).pan(1)

// other · trumpet
const trumpet = note(`<
  ~ A B C D ~@31 E F G H ~@11 I J ~@15 E F G H ~@3 K L F G H ~@3 K M K N ~@6 K M K N ~@6 O ~@4
>`.pickRestart({
  A: "~@4 a4!2 ~@4 g4 ~ g4@2 ~@2", B: "~@4 f4 ~@5 g4@4 ~@2", C: "~@4 a4@2 ~@4 g4 ~ g4@2 ~@2", D: "~@4 f4 ~@5 e4@4 ~@2",
  E: "~@7 db5", F: "d5 ~@15", G: "~@7 gb4", H: "g4 ~@15", I: "~ bb4@2 ~@2 a4@2 ~", J: "~@2 d5@5 ~@3 c5@5 ~",
  K: "~@2 a4@5 ~@3 g4@5 ~", L: "~@2 f4@5 ~@3 e4@2 ~@2 db5@2", M: "~@2 f4@5 ~@3 g4@5 ~", N: "~@2 f4@5 ~@3 e4@5 ~",
  O: "~@2 [a4,a5]@5 ~@3 [g4,g5]@5 ~", // A G
})).s("gm_trumpet").gain(0.15).pan(0.7)

// other · trumpet · soft notes · F G A G F E
const trumpet_soft = note(`<
  ~@104
  [~@2 [f4,f5]@5 ~@3 [g4,g5]@5 ~]
  [~@2 [a4,a5]@5 ~@3 [g4,g5]@5 ~]
  [~@2 [f4,f5]@5 ~@3 [e4,e5]@5 ~]
  ~
>`).s("gm_trumpet").gain(0.05).pan(0.7)

// other · trombone
const trombone = note(`<
  ~ A B C D ~@31 E@2 F G ~@11 H I ~@15 J ~ F G ~@3 K L ~ F G ~@3 K M K N ~@6 K M K N ~@6 K ~@4
>`.pickRestart({
  A: "~@4 f4!2 ~@4 e4 ~ e4@2 ~@2", B: "~@4 d4 ~@5 e4@4 ~@2", C: "~@4 f4@2 ~@4 e4 ~ e4@2 ~@2", D: "~@4 d4 ~@5 c4@5 ~",
  E: "[~@7 a3@2 ~@7]/2", F: "~@7 b3", G: "c4 ~@15", H: "~ d4@2 ~@2 c4@2 ~", I: "~@2 f4@5 ~@3 e4@5 ~", J: "~@7 a3",
  K: "~@2 d4@5 ~@3 c4@5 ~", L: "~@2 bb3@5 ~@3 a3@2 ~@2 a3@2", M: "~@2 bb3@5 ~@3 c4@5 ~", N: "~@2 bb3@5 ~@3 a3@5 ~",
})).s("gm_trombone").gain(0.15).pan(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@104 [~@2 bb3@5 ~@3 c4@5 ~] [~@2 d4@5 ~@3 c4@5 ~] [~@2 bb3@5 ~@3 a3@5 ~] ~>")
  .s("gm_trombone").gain(0.05).pan(0.3)

// other · tenor sax
const tenor_sax = note(`<
  ~ A B C D ~@31 E F G H ~@11 I J ~@15 E F G H ~@3 K L F G H ~@3 K M K N ~@6 K M K N ~@6 K ~@4
>`.pickRestart({
  A: "~@4 g2@2 ~@4 c3 ~ a2@2 ~@2", B: "~@2 g2 ~@2 c3@2 ~", C: "~@4 g2 ~@5 c3 ~ a2@2 ~@2", D: "~@4 g2 ~@5 c3@3 ~@3",
  E: "~@7 [a2,e3]", F: "[bb2,f3] ~@7", G: "~@7 eb3", H: "e3 ~@15", I: "~ f4@2 ~@2 e4@2 ~", J: "~@2 a4@5 ~@3 g4@5 ~",
  K: "~@2 f4@5 ~@3 e4@5 ~", L: "~@2 d4@5 ~@3 c4@3 ~ [a2,e3]@2", M: "~@2 d4@5 ~@3 e4@5 ~", N: "~@2 d4@5 ~@3 c4@5 ~",
})).s("gm_tenor_sax").gain(0.15).pan(0.9)

// other · tenor sax · soft notes
const tenor_sax_soft = note("<~@104 [~@2 d4@5 ~@3 e4@5 ~] [~@2 f4@5 ~@3 e4@5 ~] [~@2 d4@5 ~@3 c4@5 ~] ~>")
  .s("gm_tenor_sax").gain(0.05).pan(0.9)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A B C D E F G@2 H@2 I J K L M N A B C O P Q G R H@2 I J K L M N S@5 T@3 U@2 V W X@2 Y@2 Z AA AB D AC AD AE AF@3 I
  AG K L M AH@6 AI@3 AJ@5 AK@3 AL@2 AJ@5 AK@3 AM@2 AJ@5 AN@2 AO AP ~@2
>`.pickRestart({
  A: "~@2 f3 a3@2 f3@2 c3, c3@13 ~@3", B: "~@2 f3 a3@2 ~ c3@2, ~ c3@4 f3@2 ~",
  C: "~@6 c4@2 e4@4 c4@2 a3 ~, ~ d3@5 ~@2, ~@4 a3@7 ~@5", D: "~@3 c4 e4 c4 a3 d3, ~ d3@5 ~@2, ~@2 a3@3 ~@3",
  E: "~@2 bb3 d4 f4@2 d4 bb3, ~ f3@5 ~@2", F: "~@2 bb3 d4!2 bb3 ~ f3, ~ f3@3 ~@2 bb3@2",
  G: "~@2 bb3@2 db4@2 f4 ~ bb4@4 db4@2 bb3@2",
  H: "[[a3,c4,e4]@6 ~@2 [bb3,d4]@7 ~ [a3,c4]@6 ~@2 [g3,b3]@7 ~, ~@15 f3@6 ~@2 e3@7 ~@2]/2", // Am Bb Am G
  I: "[c4,e4,a4]@5 ~ [c4,e4,a4]@5 ~ [c4,e4,a4] ~@3", J: "[c4,e4,a4]@6 [c4,e4,a4] ~@9",
  K: "[a3,e4]@7 ~ [bb3,d4]@6 ~@2, c4@5 ~@11", L: "[f3,a3,c4]@6 ~@2 [c4,g4]@7 ~, ~@7 a3@8 ~",
  M: "[c4,e4,a4]@5 ~ [c4,e4,a4]@5 ~ [c4,e4,a4]@2 ~@2", N: "[c4,e4,a4]@5 ~ [c4,e4,a4]@4 c4@2 [e4,a4] ~@3",
  O: "~@2 c4@2 a3@2 ~@6 c4@2 e4 ~, e4@8 ~@2 a3@5 ~, ~@3 d3@4 ~", P: "~@2 bb3 d4 d4@2 bb3 f3, ~ f3@5 ~@2",
  Q: "~@2 [d4,g4]@9 ~@5", R: "~@2 bb3@2 db4@2 f4 ~ c5 ~@3 db4@2 bb3@2",
  S: "[[bb3,d4]@5 ~ bb3@8 ~@2 [bb3,d4]@5 ~ g3@4 a4!4 ~@2 [c4,g4]@4 ~@2 [a3,c4,g4]@8 ~@2 g4@5 ~ c4@3 ~ c4@2 c4 [c4,g4] ~@2 d4@5 ~ [d4,f4]@3 ~@7, g3@15 g3@6 ~@5 g3@5 a3@5 ~@11 c4@5 ~@11 bb3@6 ~@11, ~@8 a4 ~]/5", // Bb C5 Am7 C5 Dm
  T: "[[d4,f4]@5 ~ [d4,f4]@3 ~ [bb3,d4,f4] ~@5 [f4,a4]@7 ~ g4@7 ~ [f4,a4]@7 ~ [e4,g4]@8, ~@15 d4@7 ~ [c4,e4]@7 ~ c4@7 ~ c4@8 ~]/3", // Dm Bb F Em C
  U: "[[c4,d4,f4,a4]@3 ~ [c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~ [a3,d4]@4 ~@2 [f4,a4]@3 d4 [c4,d4,f4] ~@3 [c4,d4,f4,a4] ~ [a3,d4]@4 ~@2, ~@15 [c4,d4]@4 ~@13]/2", // Dm7 D5 F Dm7 D5 Csus2
  V: "[bb3,c4,eb4,g4]@3 ~ [bb3,c4,eb4] ~@3 [bb3,c4,eb4,g4] ~ [bb3,c4,eb4,g4]@5 ~", // Cm7
  W: "[d4,f4,a4]@4 [d4,f4,a4] ~@3 [d4,f4,a4] ~ [d4,f4,a4]@4 ~@2, e4 ~@15", // Dm
  X: "[[bb3,eb4,ab4]@4 [bb3,c4,eb4,ab4] ~@3 [bb3,c4,eb4,ab4] ~ [eb4,ab4]@4 ~ c4 [eb4,ab4]@4 [bb3,c4] ~@3 [bb3,eb4,ab4] ~ [bb3,c4,eb4,ab4]@4 ~@2, ~@10 c4 ~@4 bb3@4 ~@13]/2", // Ebsus4 Ab Ab5 Bbsus2 Ebsus4 Ab
  Y: "[[d4,f4,a4]@6 ~@2 g4@6 ~@2 a4@6 ~@2 [e4,g4]@7 ~, ~@7 [c4,e4]@6 ~@2 [c4,f4]@7 ~@10]/2", // Dm Em C F5
  Z: "~@2 f3 a3!2 f3!2 c3, ~ c3@5 ~@2", AA: "~@2 f3 a3!2 f3 c3@2, ~@2 c3@9 ~ f3@2 ~@2",
  AB: "~@3 c4 e4@2 c4 d3, ~ d3@5 ~@2, ~@4 a3@7 ~@5", AC: "~ f3 bb3 d4 [c4,f4]@4",
  AD: "~@2 f3@2 bb3@2 d4 ~ [c4,f4]@4 [bb3,d4]@2 ~@2", AE: "~@2 bb3@2 db4@2 f4 ~ bb4@4 f4@3 ~",
  AF: "[c5@2 bb4@2 f4@2 c5@2 bb4@2 f4@2 bb4@3 ~ [e4,a4]@6 ~@2 d4@7 ~ [c4,f4]@6 ~@2 [b3,e4]@7 ~, ~@15 c4@5 ~@3 bb3@6 ~@2 a3@6 ~@2 g3@6 ~@3]/3", // A5 F5 E5
  AG: "[c4,e4,a4]@6 [c4,e4,a4] ~ d3@2 e3@2 f3@2 g3@2", // Am
  AH: "[[c4,e4,a4]@5 ~ [c4,e4,a4]@4 c4@2 [e4,a4] ~@3 [bb3,d4]@5 ~ bb3@8 ~@2 [bb3,d4]@5 ~ g3@4 a4!4 ~@2 [c4,g4]@4 ~@2 [a3,c4,g4]@8 ~@2 g4@5 ~ c4@3 ~ c4@2 c4 [c4,g4] ~@2 d4@5 ~ [d4,f4]@3 ~@7, ~@15 g3@15 ~ g3@6 ~@5 g3@5 a3@5 ~@11 c4@5 ~@11 bb3@6 ~@11, ~@10 a4 ~]/6", // Am A5 Bb C5 Am7 C5 Dm
  AI: "[[d4,f4]@5 ~ [d4,f4]@3 ~ [bb3,d4,f4] ~@5 a4@7 ~ g4@7 ~ [d4,f4]@7 ~ [c4,e4]@7 ~, ~@15 d4@7 ~ [c4,e4]@7 ~ bb3@7 ~ g3@8 ~, ~@8 f4@3 ~@13]/3", // Dm Bb Dm C
  AJ: "[[bb3,d4]@5 ~ bb3@8 ~@2 [bb3,d4]@5 ~ g3@4 a4!4 ~@2 [c4,g4]@4 ~@2 [a3,c4,g4]@8 ~@2 g4@5 ~ c4@3 ~ c4@2 c4 [c4,g4] ~@2 d4@5 ~ [d4,f4]@3 ~@7, g3@13 ~@2 g3@6 ~@5 g3@5 a3@5 ~@11 c4@5 ~@11 bb3@6 ~@11, ~@8 a4 ~]/5", // Bb C5 Am7 C5 Dm
  AK: "[[d4,f4]@5 ~ [d4,f4]@3 ~ [bb3,d4,f4] ~@5 [f4,a4]@7 ~ g4@7 ~ [d4,f4]@7 ~ [c4,e4,g4]@8, ~@15 d4@7 ~ [c4,e4]@7 ~ bb3@7 ~@10]/3", // Dm Bb F Dm C
  AL: "[~@8 g4@7 ~ [d4,f4]@7 ~ [c4,e4]@8, [d4,f4]@7 [c4,e4]@7 ~ bb3@7 ~ g3@8 ~, ~ a4@8 ~@23]/2", // Dm C Dm C
  AM: "[~ a4@6 ~ g4@7 ~ [d4,f4]@7 ~ [c4,e4]@8, [d4,f4]@7 [c4,e4]@7 ~ bb3@7 ~ g3@8 ~]/2", // Dm C Dm C
  AN: "[[d4,f4]@5 ~ [d4,f4]@3 ~ [bb3,d4,f4] ~@5 f4@2 [d4,f4,a4] a4 [d4,f4,a4]!2 ~@2 [c4,e4,g4] ~ g4 [c4,e4,g4] ~@2 [c4,e4,g4] ~, ~@15 d4@2 ~@15]/2", // Dm Bb Dm C
  AO: "~@2 [d4,f4,a4] a4 [d4,a4] ~@3 [e4,g4,c5] ~@2 [e4,g4,c5] ~@2 [g3,c4] a3", // Dm D5 C C5
  AP: "~@2 [c4,f4]@3 ~ [a3,d4] ~ [g3,c4] ~@7", // F5 D5 C5
})).s("gm_electric_guitar_clean").gain(0.14).pan(0.1)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@13 A ~@3 B ~@10 C A ~@3 B ~@3 D ~ E@2 F@2 ~@3 G ~@2 H I ~ J ~@8 K ~@3 B ~@3 D ~ E@2 F@2 ~ L D ~ E@2 F@2 ~ M ~ N D ~
  E@2 F@2 ~ M ~ N D ~ E@2 F@2 O P Q R S
>`.pickRestart({
  A: "~@7 g3@7 ~@2", B: "~@7 g3@6 ~@3", C: "~@9 bb4@3 ~@4", D: "~@3 d4@4 ~",
  E: "[~@22 g4@3 ~@3 g4 ~@3, ~@15 a3@11 ~ a3@3 ~@2]/2", F: "[~ f4@4 ~ bb3@3 ~ [bb3,d4,f4]@3 ~@2 bb3@5 ~@2 bb3@3 ~@7]/2",
  G: "~@3 [c4,f4] ~@12", H: "c4 ~@9 bb3@4 ~@2", I: "~@4 ab4 ~@11", J: "~@7 c4@8 ~", K: "~@8 g4@7 ~", L: "~@8 a3@7 ~",
  M: "~@7 a3@7 ~@2", N: "~@7 a3@8 ~", O: "a4@2 ~@11 [c4,e4,g4] ~@2", P: "~@3 [d4,f4] f4 [f4,a4] ~@9 d4",
  Q: "~@9 [a3,d4] ~ [a3,d4] ~ c4 ~ [a3,d4]", // D5
  R: "~ [a3,d4] ~ [g3,c4] ~ [g3,c4] [a3,d4] ~ [a3,d4] ~ [c4,f4] [a3,d4] ~@2 [a4,c5] c5", S: "d5@3 ~@13, a4 ~@15",
})).s("gm_electric_guitar_clean").gain(0.07).pan(0.1)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A B A C ~@16 D@4 E@4 ~@8 F@4 G@2 H I J K L M N O H I ~@6 P@2 ~@8 F@4 G@2 Q A F@4 G@2 Q R Q A F@4 G@2 Q R Q A F@4 G@2
  Q R Q A ~
>`.pickRestart({
  A: "f5 e5", B: "d5 e5", C: "d5 c5", D: "[f4 e5, [a4,c5]@63 ~]/4", E: "[d5@31 c5@31 ~@2, [f4,bb4]@31 ~]/4",
  F: "[[f5,a5]@31 ~ e5@32, ~@31 g5@32 ~]/4", G: "[[d5,f5]@31 ~]/2", H: "bb5 a5", I: "d6 c6", J: "a4@13 ~ f4 g4",
  K: "a4@3 ~ a4 ~ bb4 ~", L: "c5@12 ~@2 ab4 bb4", M: "a4@3 ~", N: "ab4@13 ~ f4 g4", O: "ab4@7 ~ f4 ~@3 g4@2 ~@2",
  P: "[~@16 c7@15 ~, c6@15 ~]/2", Q: "a5 g5", R: "f5 g5",
})).s("gm_string_ensemble_2").gain(0.12).pan(0.3)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B A C ~@16 D@2 E@4 F@2 ~@14 G H I J K L M N G H ~@22 O ~@7 O ~ P Q ~@6 O ~ P Q ~@6 P R ~@3
>`.pickRestart({
  A: "a5 g5", B: "f5 g5", C: "f5 e5", D: "c5/2", E: "[e5 d5]/4", F: "[c6@31 ~]/2", G: "bb4 a4", H: "d5@8 c5@7 ~",
  I: "a5@13 ~ f5 g5", J: "a5@3 ~ a5 ~ bb5 ~", K: "c6@12 ~@2 ab5 bb5", L: "a5@3 ~", M: "ab5@13 ~ f5 g5",
// … 151 more lines

More by Al Green