Strudelify

That's What Friends Are For

Stevie Wonder

KeyE♭ majorTempo60 bpm
0:00/0:00
// That's What Friends Are For — Wonder Stevie
// 60 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 10, 4/4 at bar 11, 2/4 at bar 24, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/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 · epiano2
const epiano2 = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB K AC AD AE AF AG AH AI S T AJ V AK AL AM AN@2 AO AP AQ V AF
  AR AS AT AU AV U AW AX AY AZ BA BB BC@2 BD ~
>`.pickRestart({
  A: "~@2 [f4,g4,bb4] [f4,bb4]", B: "[g4,bb4] [f4,bb4] [eb4,ab4,bb4]!2",
  C: "[eb4,ab4,bb4] [ab4,bb4,eb5] ~ d4, ~ [g3,bb3,f4]", D: "eb4!2 [bb3,eb4,ab4]@2, [g3,bb3] ~",
  E: "[bb3,eb4,ab4]@2 [c4,eb4,g4]@2 f4@3 f4, ~ [g4,bb4]", F: "[d4,bb4] [eb4,g4,bb4] [c4,eb4,ab4] [c4,eb4,f4,ab4]",
  G: "[c4,eb4,f4,ab4]!2 [c4,f4]!2", H: "[c4,d4,f4]@4 [g3,b3,d4]@4 [bb3,eb4]@6 bb3 eb4, ~ g3",
  I: "[g3,c4,eb4]@6 ab4 bb4 [ab4,c5]@5 bb5 [bb4,f5,g5] eb5, ~ bb3", // Cm Ab Gm7
  J: "[bb4,g5]@4 [f4,g4,bb4]@3 [bb3,g4] [g3,bb3,d4,f4]@4 [g3,bb3,eb4]@4", K: "[c4,eb4,ab4]!4",
  L: "[c4,d4,f4]!3 [b3,d4,f4]", M: "[g3,bb3,eb4]@6 [g4,eb5] [f4,d5] [eb4,c5]@4 [c4,eb4,g4]@4",
  N: "c5@6 ~@2 [eb4,ab4,c5,bb5]@4 eb4 ~ ab4 c5, [eb4,ab4]@7 eb5@3 ~@3 eb4@3, ~@3 c5 ~@2 c4@2", // Ab Ab5
  O: "[f4,g4,bb4]!2 [d4,f4,bb4] [d4,f4,bb4,eb5]", P: "[eb4,g4,ab4,bb4,c5] [g4,ab4,bb4,eb5]!2 [d4,f4,bb4]",
  Q: "bb3@3 bb3@5 ~@7 eb4, [d4,f4] [g3,bb3,eb4], ~@13 bb4@3, ~@7 g4", // Dm Eb
  R: "[bb3,eb4,g4]@3 [bb3,eb4,g4]@2 [bb3,f4,ab4]@2 [c4,eb4,ab4]@5 ~ [g4,d5,bb5] [f4,c5,ab5]@2", // Eb Bb7 Ab Gm Fm
  S: "[eb4,bb4,g5]@4 [f4,g4,bb4]@3 d5 [g4,bb4,eb5]@4 [eb4,g4,bb4]@4", // Eb Gm7 Eb
  T: "[db4,f4,bb4] [bb3,db4,f4] [c4,f4,g4] [c4,e4,g4]", // Bbm Csus4 C
  U: "[b3,eb4,f4,ab4]@3 [b3,eb4,f4,ab4] [bb3,b3,f4,bb4,eb5]@2 [ab3,b3,f4,ab4,eb5]@2", V: "[bb3,eb4,ab4]!4",
  W: "[bb3,eb4,ab4]!2 [bb3,eb4,g4]!2", X: "[g3,bb3,d4,f4] [g3,bb3,c4,eb4] [c4,eb4,ab4] [bb3,eb4,ab4]",
  Y: "[c4,eb4,ab4] [bb3,c4,eb4,f4] [f4,c5]!2", Z: "[d4,f4,c5]@4 [g3,b4]@4 [g3,bb3,eb4]@6 bb3 eb4",
  AA: "[g3,c4,eb4]@6 ab4 bb4 [eb4,ab4,c5]@4 [c4,f4] c5 eb5 bb5", // Cm Ab F5
  AB: "[g4,bb4,g5] [g4,eb5] [bb4,f5] [g4,eb5], f4 [d4,f4]", AC: "[c4,d4,f4]!2 [c4,d4,f4,c5] [b3,d4,f4,b4], c5 ~",
  AD: "[g3,bb3,eb4,bb4]@6 [g4,eb5] [f4,d5] [eb4,c5]@2 [f4,d5] [g4,eb5]@5", // Eb Cm Dm Cm Dm Cm
  AE: "[ab4,c5]@4 [bb4,bb5]@2 ~@2 [eb5,eb6]@2 [f5,f6]@3 eb5 f5 ab5, eb4@3 eb4@2 ~@3, ~@3 [c5,c6] ~@4, ~@7 [bb3,f4]@3 [bb3,eb4,f4]@6", // Ab Bb Eb F C Bb5 Bbsus4
  AF: "[f4,g4,bb4,g5]@4 [f4,g4,bb4]@3 [g4,bb4,eb5] [g4,bb4,f5]@4 [g4,bb4,eb5]@4", // Gm7 Eb Gm7 Eb
  AG: "[eb4,ab4,bb4,c5]!3 [d4,f4,ab4,bb4]", AH: "[d4,f4,bb4]@5 d5 [g4,eb5] f5 [g4,bb4,eb5]@4 [g4,bb4,eb5]@2 eb4 g4",
  AI: "[bb3,eb4,g4]@3 [bb3,eb4,g4]@2 [bb3,f4,ab4]@2 [c4,eb4,ab4]@5 ~ [bb4,bb5] [ab4,ab5]@2", // Eb Bb7 Ab Bb Ab
  AJ: "[b3,eb4,f4,ab4]@6 [g3,g4] [ab3,ab4] [bb3,b3,eb4,bb4]@4 [ab3,b3,eb4,ab4]@4", // Fm7b5 G Ab Bmaj7 Abm
  AK: "[bb3,eb4,ab4]@4 [bb3,eb4,ab4]@4 [f4,g4,bb4,g5]@4 [f4,g4,bb4]@3 [g4,bb4,eb5]", // Ebsus4 Gm7 Eb
  AL: "[g4,bb4,f5] [g4,bb4,eb5] [eb4,f4,ab4,c5]!2", // Gm7 Eb Fm7
  AM: "[eb4,f4,ab4,c5]@4 [ab3,d4,f4,bb4]@4 [d4,f4,g4,bb4]@5 [f4,d5] [g4,eb5] [bb4,f5]", // Fm7 Bb7 Gm7 Dm Cm Bb5
  AN: "[[g4,eb5]@4 [bb3,eb4,g4]@4 [bb3,eb4,g4]@3 [bb3,eb4,g4]@2 [bb3,f4,ab4]@2 [c4,eb4,ab4]@5 ~ [g4,d5,bb5] [f4,c5,ab5]@2 [eb4,bb4,g5]@4 [f4,g4,bb4]@3 d5]/2", // Cm Eb Bb7 Ab Gm Fm Eb Gm7
  AO: "[g4,bb4,eb5] [eb4,g4,bb4] [db4,f4,bb4] [bb3,db4,f4]", // Eb Bbm
  AP: "[c4,f4,g4]@2 [c4,e4,g4]@2 [b3,eb4,f4,ab4]@3 [b3,eb4,f4,ab4]", // Csus4 C Fm7b5
  AQ: "[bb3,b3,f4,bb4,eb5] [ab3,b3,f4,ab4,eb5] [bb3,eb4,ab4]!2", AR: "[eb4,ab4,bb4,c5]!3 [d4,f4,bb4]",
  AS: "[d4,f4,bb4] [d4,f4,g4,bb4] [c4,eb4,bb4] [g4,bb4,eb5]", AT: "[eb4,ab4,c5]!4",
  AU: "[f4,g4,bb4]!2 [d4,f4,bb4] [f4,bb4,eb5]", AV: "[db4,f4,bb4]!2 [c4,f4,bb4] [c4,e4,g4]", AW: "[ab3,bb3,eb4]!4",
  AX: "[ab3,bb3,eb4]@2 [ab3,bb3,eb4]@2 [f4,g4] ~@2 eb4, ~ bb4, ~@4 eb4@3 ~, ~@5 [bb3,f4]@3, ~@11 g4@5", // Absus2 Fsus2 Bb5
  AY: "~@7 g4 ~@4 bb4@4, bb3 [bb3,eb4,ab4], [d4,f4]@3 bb4@5 ~@8, ~ g4@2 f4 ~@4, ~@3 f4 d4@4 ~@8", // Ebsus4 Dm
  AZ: "[bb3,eb4,ab4]@4 [bb3,eb4,ab4]@4 [bb3,d4,f4,bb4]@4 [bb3,d4,f4,bb4]@3 d5", // Ebsus4 Bb
  BA: "[bb3,eb4,g4]@2 ~ c5 [bb3,eb4]@2 [bb3,eb4]@2, eb5 ab4, ~ [bb3,eb4,g4] ~@2", // Eb Eb5 Eb
  BB: "[bb3,eb4,ab4]@4 [bb3,eb4,ab4,c5]@4 f4 ~@4 g4@3, ~ [bb3,eb4,bb4], ~@8 g4@5 ~@3, ~@11 f4@5", // Ebsus4 Ab Eb5
  BC: "[f4@4 [f4,d5]@4 [bb3,eb4,ab4]@7 ~ [bb3,eb4]@4 ~@2 bb4@2 bb4@4 ~@3 c5, [bb3,d4,bb4]@8 ~@7 [ab4,eb5]@5 [bb3,eb4,ab4]@4 [g3,bb3,f4]@8, ~@12 g4@3 [d4,g4], ~@7 bb4]/2", // Dm Ebsus4 Eb5 Bb Ab5 Ebsus4 Gm7 G5
  BD: "~ eb5 [f3,c4,eb4,ab4]@2, [c4,eb4,g4,bb4] ~", // Fm7 Cm7
})).s("gm_epiano2").gain(0.35)

// bass · electric bass finger
const bass = note(`<
  A B@2 C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE R O AF AG AH AI AJ U AK AL AM AD AN AO AP AQ AR
  AH O AS AT R AU AV AW AX AY@2 AZ BA BB@2 BC ~
>`.pickRestart({
  A: "~ eb4", B: "[d4@8 bb3@12 bb3 ~ g3 ab3 bb3@8]/2", C: "c4 f3", D: "bb3 bb2 eb2@2", E: "g1 c2 f1@2", F: "f1 d2",
  G: "g1@8 c2@7 bb1", H: "ab1@2 bb1 bb2", I: "eb2@4 eb3@3 gb1 g1@4 c2@4", J: "f1@7 f1 f1@8", K: "d2@8 g1@7 d2",
  L: "c2@8 ab1@7 ab1", M: "bb1@7 bb1 bb1@3 f2 bb2@2 bb1@2", N: "eb2 d2", O: "c2@7 c2 c2@4 ab1@4", P: "g1@7 g1 c2@7 c2",
  Q: "ab1@7 ab1 bb1@3 f2 bb2@2 f2@2", R: "eb2@8 d2@7 d2", S: "db2@7 db2 c2@4 c3@4", T: "b1@7 b1 b1@7 gb1",
  U: "bb1@7 bb1 bb1@7 bb1", V: "bb1@3 f2 bb2@4 eb1@7 eb1", W: "g1@4 c2@4 f1@7 f1", X: "f1@7 db2 d2@7 d2",
  Y: "g1@7 g1 c2@7 bb1", Z: "ab1@7 ab1 bb1@3 f2 bb2@4", AA: "eb1@7 eb1 g1@4 c2@4", AB: "f1@7 f1 f1@6 c2 db2",
  AC: "d2@7 d2 g1@6 c2@2", AD: "c2@7 c2 ab1@7 ab1", AE: "bb1@7 bb1 ~@3 bb2 bb2@2 f2@2, ~@8 bb1@5 ~@3",
  AF: "g1@5 g1 bb1 d2 c2@7 c2", AG: "ab1@7 ab1 bb1@3 f2 bb2 f2 bb1@2", AH: "eb1@8 d2@7 d2",
  AI: "db2@7 db2 c2@4 b2@2 c2@2", AJ: "b1@7 b1 b1@8", AK: "b1 f2 bb2@2 bb2 f2 bb1@2 eb2@7 eb2", AL: "d2@7 d2 c2@7 c2",
  AM: "c2@4 ab1@4 g1@7 d2", AN: "bb1@3 f2 bb2@2 bb1@2 eb1@7 eb1", AO: "d2@7 d2 db2@7 db2",
  AP: "c2@2 bb2 b2 c3 g2 c2@2 b1@7 b1", AQ: "b1@7 b1 bb1@7 bb1", AR: "bb1@3 bb1!3 bb1@2 bb1 f2 bb2@2 bb2 f2 bb1@2",
  AS: "g1@5 bb1 b1 d2 c2@4 b2@2 g2 c2", AT: "ab1@7 ab1 bb1 f2 bb2@2 bb2 f2 bb1@2",
  AU: "db2@7 db2 c2@2 bb2 b2 c3 g2 c2@2", AV: "b1@7 b1 b1@4 b2@4", AW: "bb1@7 bb1 bb1@7 bb2", AX: "bb1!2 eb4@2",
  AY: "[d4@8 bb3@12 bb3!2 g3 ab3 bb3@8]/2", AZ: "bb3 f3", BA: "bb3 bb2 eb3@2", BB: "[d3@8 bb2@12 bb2 ~ g2 ab2 bb2@8]/2",
  BC: "c3 f2",
})).s("gm_electric_bass_finger").gain(0.28)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@4 A B C D E F G H I J K@2 L M N O P@3 B C D E F G H I J Q R L M N O S@3 ~@15 T@2 U V U V U V U ~
>`.pickRestart({
  A: "~@8 bb2 eb3!7", B: "~@4 bb2!2 eb3!2 ~@8", C: "~@4 eb4 ~ c4 ab3 [g3,c4,d4]@7 ~",
  D: "[g3,c4,d4]@3 ~ [g3,b3,d4]@4 [g3,bb3]@3 ~ bb3 ~ g3 ab3", // Gsus4 G Gm
  E: "bb3@4 ~@3 ab3 ~@8, g3 ~ g4@2 ~@4, ~@5 eb4@3 ~@8, ~@3 c4 ~@4", F: "bb2 eb3!3 ~@5 bb2 c3 eb3 ~@4",
  G: "bb2 eb3!3 ~@3 eb3 ~@3 bb2 eb3 f3 eb3 ~", H: "[c4,d4,f4]@4 [c4,d4,f4]@3 ~ [c4,d4,f4]@4 [b3,d4,f4]@4",
  I: "[bb3,eb4]@7 ~ ab3@2 ~@3 ab3 bb3!2", J: "~@8 [bb3,c4,f4]@7 ~",
  K: "[~@4 bb2 eb3!3 ~@5 bb2 d3 d3@3 ~@2 [eb4,ab4,bb4]@4 [eb4,ab4,bb4]@3 ~ [bb3,d4,f4]@4]/2", // Ebsus4 Bb
  L: "[g3,bb3,d4]@7 ~ [g3,c4,eb4]@5 ~@2 eb4, ~@13 bb4@3, ~@7 g4", M: "[ab3,c4]@7 ~ [ab3,bb3,eb4]@7 ~",
  N: "bb2 ~ eb3!2 ~ eb3!3 ~@5 d3!3", O: "~@12 e3@3 ~",
  P: "[b3@8 bb3@4 [ab3,bb3] ab3@10 ~ [c4,f4]@12 ~@4 bb2 eb3!7, ~@24 bb3@7 ~@17]/3", Q: "~@4 bb2 eb3!3 ~@5 bb2 d3!2",
  R: "~@4 [eb4,bb4]@4 [eb4,ab4,bb4]@3 ~ [d4,f4,bb4]@4, ~@4 ab4 ~@11", // Eb5 Ebsus4 Bb
  S: "[b3@8 bb3@4 [ab3,bb3] ab3@10 ~ [c4,f4]@12 ~@2 ab3 bb3 ~@8, ~@24 bb3@7 ~@17]/3", // Absus2 F5
  T: "[~@4 [bb3,eb4,ab4]@15 ~ [bb3,eb4,ab4]@4 bb2!2 bb3!6]/2", U: "~@3 bb2 bb3!4 ~@8", V: "~@8 bb2!2 bb3!6",
})).s("gm_electric_guitar_muted").gain(0.11)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@2 A B@3 ~@3 C D E F ~ G H I J K L M N@2 O@3 P Q R S T U K V W X K L M Y@2 Z@4 AA@4 AB AC@2 AD AE@2 AF@3 ~@8
>`.pickRestart({
  A: "~ [g2,d4]", B: "[c3@8 ab3@16 bb3@13 ~@11, eb4 ~]/3", C: "eb3@2 d3 eb3, g3", D: "[bb3,c4]", E: "c4@3 b3, d3",
  F: "[c3,eb4]@5 ~@3", G: "[eb3,g3] [d3,f3]", H: "[c3,bb3]@3 [ab2,bb3]", I: "[g2,bb3] [c3,bb3]",
  J: "[ab2,f3] [bb2,bb3]", K: "[g3,eb4]", L: "[bb3,f4]@2 [c4,f4] [c4,e4]", M: "[bb3,eb4]",
  N: "[[bb2,bb3]@3 [eb3,g3]]/2", O: "[[d3,f3] [eb3,g3] [c4,eb4]@4 c4@3 b3 [c3,bb3]@2, ~@3 f4@2 ~]/3",
  P: "[ab2,c4] [ab3,c4]", Q: "[eb3,g3]@2 [d3,f3] [eb3,g3]", R: "[c4,eb4]", S: "c4@3 b3, f4", T: "[c3,bb3] [ab2,c4]",
  U: "[bb2,bb3]", V: "[c3,bb3]@3 [f3,d4]", W: "[g2,d4] [c3,bb3]", X: "[ab2,eb4] [ab3,eb4]", Y: "[[bb2,bb3]@3 g5]/2",
  Z: "[bb5@4 eb5@6 f5@2 [bb3,bb4]@8 c4@4 ~ d5 eb5 f5 bb5@3 g5, ~@20 c5@5 ~@7, ~@6 bb3 eb4]/4", // Bb
  AA: "[d4 db4 c4 ~@2 bb3@3, bb5 eb6, ~@3 b3@2 ~@3]/4", AB: "[eb4,g6] [d4,bb6]",
  AC: "[[c4,eb6]@3 bb5 [bb3,bb6]@4, ~@3 d4@4 ~]/2", AD: "c4@2 bb3 ab3, c7",
  AE: "[bb6@3 g6 bb6@8 f6@2 e6@2, eb4 bb3@3]/2", AF: "[ab6@2 bb6 ab6@7 ~@2, ab4@5 ~]/3",
})).s("gm_string_ensemble_1").gain(0.09).pan(0.2)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@2 A@4 ~@3 B C D E ~ F G H I J K L M@6 N C O P C E Q R S J K L T@2 U@4 V@2 W@2 X Y Z@2 AA@2 AB@3 ~@8
>`.pickRestart({
  A: "[~@8 d4@8 ~@16 bb3@4 c4@4 [g3,bb3]@13 ~@11, ~ bb3@2 ab4@2 ~@3, ~@2 eb4@3 ~@3]/4", B: "f3@3 g3, bb3",
  C: "[ab3,eb4]", D: "[c4,f4]@3 [b3,d4]", E: "[bb3,eb4]", F: "eb3 d3, bb3", G: "[ab3,c4]@3 [f3,d4]",
  H: "[f3,d4] [g3,eb4]", I: "[g3,eb4] [ab3,eb4]", J: "[f3,eb4]", K: "[f3,db4] [f3,c4]", L: "[f3,b3]",
  M: "[[ab3,eb4]@6 f3@2 g3 [bb3,eb4] [ab3,eb4]@4 c4@3 b3 g3@2 ab3@2 [bb2,eb4]@2, ~@6 bb3@3 ~@5 d4@4 eb4@4 ~@2]/6", // Ab5 Eb5 Ab5 Eb5
  N: "f3@2 g3 [bb3,eb4], bb3@3 ~", O: "c4@3 b3, d4", P: "g3 ab3, eb4", Q: "[ab3,eb4]@3 [bb2,bb3]",
  R: "[bb3,d4] [g3,eb4]", S: "[ab3,c4] [bb2,bb3]", T: "[[ab3,eb4]@3 [eb4,g5]]/2",
  U: "[[bb3,bb5]@4 [c4,eb5]@6 [d4,f5]@2 g3@4 c3@4 ab3@4 ~ d5 eb5 f5 bb5@3 g5, ~@12 bb4@8 c5@5 ~@3 g4@4, ~@6 bb2 ~]/4", // Bb Cm Dm
  V: "[bb3@2 f4@3 e4 eb4@2, bb5]/2", W: "[bb4 ab4@7, eb6]/2", X: "[g4,g6] [f4,bb6]", Y: "[eb4,eb6]@3 [f4,bb5]",
  Z: "[g3 ~ c7@2, bb6 ~, ~ eb4@3]/2", AA: "[bb6@3 g6 [f4,bb6]@8 [f4,f6]@2 [e4,e6]@2, g4 ~@3]/2",
  AB: "[[eb4,ab6]@8 [bb4,bb6]@4 [eb4,ab6]@33 ~@3]/3", // Ab5 Bb Ab5
})).s("gm_string_ensemble_2").gain(0.1).pan(0.8)

// other · harmonica
const harmonica = note("<A B@3 C ~@14 D@2 ~ E F ~@8 G H@2 I ~@16 J ~ K@2 ~ A B@3 L M@3 ~>".pickRestart({
  A: "~@8 bb4 ~ d5 eb5@3 ~@2",
  B: "[bb4 ~ d5 eb5@3 ~@2 bb4 ~ d5 eb5@3 g5 ab5@3 [gb5,g5] eb5 ~ c5@2 bb4@5 ~@2 d5 eb5@5 ~@2 [a4,bb4] ab4@4 ~@2 bb4 c5 eb5, ~@21 bb4 ~@26]/3", // Gmaj7 Bbmaj7
  C: "ab5 ~ [gb5,g5] eb5 ~ [b4,c5] ~ bb4@7 ~@2", D: "[f5@2 f5 f5@2 f5@2 f5@2 ~ f5 e5@2 c5@2 eb5@16 ~]/2",
  E: "~ bb5@2 ab5 eb5 bb4 ~ g4 ab4 bb4@2 ~@3 g4 ab4", F: "bb4@2 f5 eb5@2 ~ g5 ab5@3 ~@6",
  G: "~@2 eb5 eb5@2 bb4@2 ~@3 eb5 eb5@2 bb4@2 ~",
  H: "[c5@2 ab4 c5@2 eb5@2 ab5@2 g5@2 eb5@2 c5@2 bb4@4 ~@3 f5 eb5@3 ~@6, ~@9 gb5 ~@22]/2",
  I: "eb5 ~ f5 g5 ~ ab5 ~ f5@4 ~@5", J: "g5 ~ f5 eb5 ~ c5 ~ bb4@4 ~@5",
  K: "[f5@2 f5 f5@2 f5 ~ f5@3 f5 e5@2 c5 ~ eb5@14 ~@3]/2",
  L: "ab5 ~ [gb5,g5] eb5 ~ c5@3 bb4 ~ d5 eb5@3 ~@2, ~@5 b4 ~@10", // Gmaj7
  M: "[bb4 ~ d5 eb5@3 ~@2 bb4 ~ d5 eb5@3 g5 ab5@3 [gb5,g5] eb5 ~ c5@2 bb4@5 ~@2 d5 eb5@5 ~@2 a4 ~@9, ~@21 b4 ~@26]/3", // Gmaj7
})).s("gm_harmonica").gain(0.24)

// other · harmonica · soft notes
const harmonica_soft = note("<~ A B ~@55 A B ~@2 A B C D>".pickRestart({
  A: "c4 ~@2 c4 ~@12", B: "~@14 c4 ~", C: "~@6 bb4 ab4@4 ~@2 bb4 c5 eb5", D: "ab5 ~ [gb5,g5] eb5 ~ [b4,c5] ~@10",
})).s("gm_harmonica").gain(0.08)

// other · french horn
const french_horn = note("<~@37 A B@3 C@2 D E F@4 G H I@2 J@2 K@3 ~@8>".pickRestart({
  A: "f4@3 e4", B: "[eb4@5 g4]/3", C: "[eb4 d4 eb4@3 f4@3]/2", D: "eb4", E: "f4@4 ~ bb3 eb4@2",
  F: "[f4 eb4 f4@3 e4 eb4@10]/4", G: "g4 bb4", H: "eb4@3 d4", I: "[d4 eb4@3]/2", J: "[bb4@3 g4 bb4@12]/2",
  K: "[ab4@2 bb4 ab4@7 ~@2]/3",
})).s("gm_french_horn").gain(0.22)

// other · vibraphone
const vibraphone = note(`<
  A B C D E ~@9 F G@2 H I J@2 K ~@7 L M ~@6 N@2 O ~ P Q@3 ~ R S@2 T U@2 V W X@2 Y@2 Z@3 AA@4 ~
>`.pickRestart({
  A: "~@3 g4", B: "g4 [f4,g4] [ab4,bb4]!2", C: "[ab4,bb4]!2 [g4,d5] g4", D: "bb4!2 ab4!2", E: "ab4 c5 ~@2",
  F: "~@2 eb4!2 ~ bb3@3 ~@2 eb4!2 ~ bb3@2 ~",
  G: "[c4@2 ab3 c4@2 eb4 ~ ab4@2 g4@2 eb4 ~ c4@2 bb3@6 ~ f4 eb4@5 ~@4, ~@7 g4 ~ gb4 ~@3 b3 ~@9 d4 ~@8]/2",
  H: "[d4,eb4] ~ f4 g4 ~ [g4,ab4] ~ f4@7 ~@2", I: "~@2 [d4,eb4] eb4 ~ bb3@3 ~@2 [d4,eb4] f4 ~ g4@2 ~",
  J: "[bb4@2 bb4 ~ bb4!2 ~ c5@2 ~ bb4 g4 ~ [g4,ab4] ~@10 bb4@3 ~ ab4@3 ~, a4 ~@6 bb4 ~@7 f4@12 ~@5]/2", // Abmaj7
  K: "g4 ~ f4 ~ g4 [g4,ab4] ~ bb3@9", L: "c4@7 ~ c4@4 b3@4", M: "bb3@5 ~ g4 f4 eb4@5 ~@3",
  N: "[f5@2 f5 ~ f5!2 ~ f5@2 ~ f5 e5 ~ c5 ~ eb5@12 ~@5, e5 ~@14 d5 ~@16]/2", O: "g5 ~ f5 g5 ~ [g5,ab5] ~ bb4@9",
  P: "~@8 [bb4,c5] ~ ab4 c5 ~ eb5 ~ [g5,ab5]", // Bbsus2 Abmaj7
  Q: "[~ [f5,g5] ~ eb5 ~ c5@2 bb4@4 ~@2 bb5 f5 eb5@5 ~@4 eb5 ~ f5 g5 ~ [g5,ab5] ~ f5@6 ~@11]/3", // Fsus2 Abmaj7
  R: "f4@3 ~ e4@3 ~ eb4@7 ~, e4 ~@15", S: "[bb3@3 ~ ab3@4 ab3@11 ~@13, ab3 ~@31]/2",
  T: "~ [gb5,g5] ~ g5@3 eb5 ~@2 [gb5,g5] ~ g5@2 ~ eb5 ~, ~@11 gb5 ~@4", // Gmaj7
  U: "[c5@2 ab4 c5@2 eb5 ~ ab5 ~ g5@2 eb5 ~ f5@2 bb4@4 ~@2 bb4 [f4,g4] eb4@5 ~@4, b4 ~@8 gb5 ~@3 e5 ~@18]/2", // Fsus2
  V: "[d4,eb4] ~ f4 g4 ~ [g4,ab4] ~ f4@6 ~@3", // Ebmaj7 Abmaj7
  W: "~ [d4,eb4] ~ eb4@3 bb3 ~@2 [d4,eb4] ~ f4 ~ g4@2 ~, ~@3 d4 ~@9 gb4 ~@2", // Ebmaj7
  X: "[[c4,db4] ~ db4!2 ~ db4 ~ eb4@3 db4 c4@2 c4@2 b3@7 ~@2 bb4@4 ab4@4]/2", // Dbmaj7
  Y: "[g4 ~ f4 g4 ~ [g4,ab4] ~ bb4@13 ~@4 g4@7 ~, ~@7 ab4 ~@24]/2", // Abmaj7
  Z: "[~@8 bb4@15 ~ d4@8 eb4@7 ~ c4@8, ~@8 ab4@8 ~@8 g4@15 ~@9]/3",
  AA: "[~@8 f4@15 ~ eb4@2 bb3@12 ~@4 g4 ab4 bb4 [gb4,g4] eb4@5 ~@13]/4", // Gmaj7
})).s("gm_vibraphone").gain(0.19).pan(0.4)

// other · vibraphone · soft notes
const vibraphone_soft = note("<A B ~ C ~@10 D E ~@41 F G H ~ I ~@4>".pickRestart({
  A: "~@2 [f4,g4] f4", B: "f4 ~@3", C: "g4!2 f4!2", D: "~@2 d4 ~@7 d4 ~@5", E: "b3 ~@15", F: "~@8 f4@7 ~",
  G: "[f4,g4]@3 ~@5", H: "eb4@7 ~@9", I: "bb3 ~",
})).s("gm_vibraphone").gain(0.1).pan(0.4)

// other · pad new age
const pad_new_age = note("<~@12 A ~@3 B C ~@2 D E ~@4 F G ~ H I ~@3 J ~@3 K E ~@7 L ~@3 M N O ~ P ~@10>".pickRestart({
  A: "~@6 g5 f5 eb5 ~ f5 g5 ~ ab5 ~ f5", B: "~@6 bb5 g5 ~@8", C: "g5 ~ ab5 bb5 ~ c6 ~ ab5 ~@8",
  D: "~@8 bb5 ~@3 ab5 ~@3", E: "g5 ~@15", F: "~@14 c6 g5", G: "bb5 ~@15", H: "c6 ~@11 b5 ~@3", I: "~@6 g5 f5 eb5 ~@7",
  J: "~@5 d6 eb6 f6 eb6 ~@7", K: "~@6 g5 ab5 bb5 ~@3 ab5 ~@3", L: "bb5 ~@3 ab5 ~@3 eb6 ~@7", M: "~@5 bb5 g5 eb5 ~@8",
  N: "eb5 ~ f5 g5 ~ ab5 ~ f5 ~@4 bb5 ~ eb6 ~", O: "g6 ~@15", P: "~@8 bb6 ~@3 ab6 ~@3",
})).s("gm_pad_new_age").gain(0.12)

// other · harmonica
const harmonica_2 = note("<A B C D E ~@17 F G ~@33 A B C D H I J K ~>".pickRestart({
  A: "~@9 bb4 ~ d5 eb5@3 ~", B: "~ bb4 ~ d5 eb5@3 ~@2 bb4 ~ d5 eb5@3 g5",
  C: "~ ab5@2 [gb5,g5] eb5 ~ bb4 ~ bb4@5 ~@2 d5, ~@7 c5@2 ~@7", D: "eb5@5 ~@2 [a4,bb4] ab4@4 ~@3 bb4",
  E: "c5 eb5 ab5 [gb5,g5] ~ eb5 b4 c5 bb4@7 ~", F: "~@4 ab5 ~ eb5 bb4 g4 ab4 bb4@2 ~@3 g4, ~@3 bb5@2 ~@11",
// … 111 more lines

More by Stevie Wonder