Strudelify

Sunday Morning

Earth, Wind & Fire

KeyD♭ majorTempo80 bpm
0:00/0:00
// Sunday Morning — Earth, Wind & Fire
// 80 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 55, 4/4 at bar 55, 2/4 at bar 70, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 11 "#WARM BELL" Warm Bell -> pad bowed
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · piano · "A.PIANO 2"
const piano = note(`<
  ~ A B C B C B C B C B C B C B C B D E F G@2 B C B C B C B H I C I C J C B D E K L@2 B C B C B C B H M@2 N@2 ~@3 O@8 P
  Q R S@8 T@8 ~
>`.pickRestart({
  A: "~@10 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3", // Db Ebm Db
  B: "[gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4", // Gbsus2 Absus2
  C: "[gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3", // Gbsus2 Db Ebm Db
  D: "[gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@2 [f3,ab3,db4] [gb3,bb3,eb4] [ab3,f4] ~ [ab3,db4]@2 ~@2, ~@3 gb3", // Gbsus2 Db Ebm Db Db5
  E: "[gb3,ab3,db4]@3 gb3@2 bb3 gb3 [gb3,ab3,db4] [ab3,bb3,eb4]@4 ab3 bb3 [ab3,db4] [ab3,bb3,eb4]", // Gbsus2 Absus2 Db5 Absus2
  F: "[f3,bb3,db4]@2 ab3 [f3,db4]@2 bb3 ab3 bb3 [gb3,bb3,db4,f4]@4 ab3 db4 eb4 db4, ab3 ~@2 bb3 ~ [f3,db4]@3 ~@8", // Bbm Db Gbmaj7 Db
  G: "[[gb3,bb3,db4,eb4]@2 ~ [gb3,bb3,db4]@2 bb3 [f3,ab3,bb3,db4]@6 [gb3,bb3,db4,eb4]@3 [gb3,db4]@2 bb3 [gb3,ab3,db4]@6 ~@2 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3, ~@15 bb3 ~@16]/2", // Ebm7 Gb Bbm7 Ebm7 Gb5 Gbsus2 Db Ebm …
  H: "[gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 db4 ~ bb3 db4 eb4@2", // Gbsus2
  I: "[gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 bb3 ab3 [ab3,bb3,eb4]@4", // Gbsus2 Absus2
  J: "[gb3,ab3,db4]!3 [gb3,ab3]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4, ~@3 db4 ~@12", // Gbsus2 Absus2
  K: "[f3,bb3,db4]@2 ab3 [f3,db4]@2 bb3 ab3 bb3 [f3,ab3,bb3,db4]@4 ab3 db4 eb4 db4, ab3 ~@2 bb3 ~ [f3,db4]@3 ~@8", // Bbm Db Bbm7 Db
  L: "[[gb3,bb3,db4,eb4]@2 ~ [gb3,bb3,db4]@2 bb3 ~@5 db4 [gb3,bb3,db4,eb4]@3 [gb3,db4]@2 bb3 [gb3,ab3,db4]@6 ~@2 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3, ~@6 [f3,ab3,bb3,db4]@4 ab3@2 ~@3 bb3 ~@16, ~@9 f4@3 ~@20]/2", // Ebm7 Gb Ebm7 Gb5 Gbsus2 Db Ebm Db …
  M: "[[gb3,ab3,bb3,db4]@3 bb3@2 db4 [ab3,bb3,db4,eb4]@3 db4@2 eb4 [ab3,db4,f4]@2 ~ eb4@2 db4 [g3,bb3,eb4]@4 [g3,bb3,eb4] ~ [ab3,bb3,c4,eb4]@3 c4@2 eb4 [bb3,c4,d4,f4]@2]/2", // Gb Absus4 Db Eb Ab Bb
  N: "[~ eb4@2 f4 [ab3,bb3,db4,gb4]@3 eb4@2 gb4 [c4,eb4,f4,ab4]@11 ~ [c4,eb4,f4,ab4] ~@9]/2", // Gb Fm7
  O: "[~@8 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@2]/8", // Gbsus2 Absus2 Gbsus2 Db Ebm Db Gbsus2 Absus2 …
  P: "~@2 db4 ~ bb3 db4 eb4@2 [ab3,bb3,eb4]@2 [bb3,eb4] [ab3,db4] [gb3,bb3] ~ [ab3,bb3,db4,eb4]@2, ~@8 [db4,f4] ~@5 f4 ~", // Absus2 Eb5 Db5 Gb Absus4 Db
  Q: "eb4 db4 [ab3,bb3,db4,gb4] ~@5 db3@2 eb3@2 e3 gb3 ab3 a3", // Gb
  R: "[a3,b3,e4]!3 [a3,b3,e4]@2 db4 [a3,b3,e4]@4 b3 db4 [b3,db4,gb4]@4", // Asus2 Bsus2
  S: "[~@2 [ab3,b3,e4] [a3,db4,gb4] ~ [b3,e4,ab4]@3 [a3,b3,e4]!3 [a3,b3,e4]@2 db4 [a3,b3,e4]@4 b3 db4 [b3,db4,gb4]@4 [a3,b3,e4]!3 [a3,b3,e4]@2 db4 [a3,b3,e4]@4 [ab3,b3,e4] [a3,db4,gb4] ~ [b3,e4,ab4]@3 [a3,b3,e4]!3 [a3,b3,e4]@2 db4 [a3,b3,e4]@4 b3 db4 [b3,db4,gb4]@4 [a3,b3,e4]!3 [a3,b3,e4]@2 db4 [a3,b3,e4]@4 [ab3,b3,e4] [a3,db4,e4,gb4] ~ [a3,b3,d4,gb4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@2]/8", // E Gbm E Asus2 Bsus2 Asus2 E Gbm …
  T: "[~@2 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 [f3,ab3,db4] [gb3,bb3,eb4] ~ [ab3,db4,f4]@3 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@4 ab3 bb3 [ab3,bb3,eb4]@4 [gb3,ab3,db4]!3 [gb3,ab3,db4]@2 bb3 [gb3,ab3,db4]@2]/8", // Db Ebm Db Gbsus2 Absus2 Gbsus2 Db Ebm …
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 A@2 B C D E F G H I J G K L M N O P Q R S T U V W X F G H Y J G Z L AA N O P Q R S T U V W X AB AC AD AE ~@3 AF AG
  AH AI AJ AK AL AM AN AO AP AQ AR AS AR AT AG AH AU AH AK AL AM AV AW AX AY AZ
>`.pickRestart({
  A: "[eb1@26 f2 gb2 ~ bb2@3]/2", B: "eb1 ~@4 eb2 eb1!2 ~@3 ab1 bb1@3 ~", C: "eb1 ~@4 eb2 eb1 ~@3 ab1 bb1@2 eb1@2 ~",
  D: "eb1 ~@4 eb2 eb1!2 ~@3 bb1 eb1@2 f1 db1", E: "eb1 ~@4 eb2 eb1 ~@3 f1 gb1 ~ bb1@3",
  F: "eb1 ~@4 eb2 eb1!2 ~@3 ab1 bb1@2 ab1 db2", G: "eb1 ~@4 eb2 eb1 ~@3 f1 gb1@2 bb1@3",
  H: "eb1 ~@3 eb2 eb1!2 ~@4 ab1 bb1@2 db1@2", I: "eb1 ~@4 eb2 eb1 ~@3 f1 gb1@2 bb1 ab1 gb1",
  J: "eb1 ~@3 eb2 eb1!2 ~@4 eb2 db2@2 bb1 ab1", K: "eb1 ~@3 eb2 db1 eb1 ~@4 db2 eb2@2 bb1 ab1",
  L: "eb1 ~@4 eb2 eb1 ~ f1 gb1 ab1@2 bb1@3 ~", M: "gb1@2 ~ gb1 ~@2 gb1@2 ab1@3 ~ bb1 [g1,ab1,a1] ab1 eb1",
  N: "bb1@5 ab1@2 bb1 gb1@6 eb1 gb1", O: "eb1 eb1@4 ~ bb1@5 ~ b1@4", P: "~ bb1 gb1@7 ~ f1 gb1 bb1 eb1@3",
  Q: "eb1 ~@3 eb2 eb1!2 ~@4 ab1 bb1@2 ab1 bb1", R: "eb1 ~@3 eb2 eb1!2 ~@3 f1 gb1 ~ bb1@3",
  S: "eb1 ~@3 eb2 eb1!2 ~@4 bb1 ab1@2 gb1 f1", T: "eb1 ~@3 eb2 eb1!2 ~@3 f1 gb1 ~ bb1 eb1@2",
  U: "eb1 ~@3 eb2 eb1!2 ~@4 db2 bb1@2 gb1 f1", V: "eb1 ~@3 eb2 eb1!2 ~@2 eb2 db2 bb1 gb1 eb1@3",
  W: "eb1 ~@3 eb2 db2 eb2 ~@3 db2!2 ~ eb2 db2@2", X: "eb1 ~@3 eb2 eb1!2 ~ eb1 ~@7",
  Y: "eb1 ~@4 eb2 eb1 ~@3 f1 gb1 ~ bb1 ab1 gb1", Z: "eb1 ~@3 eb2 db2 eb2 ~@4 db2 eb2@2 bb1 ab1",
  AA: "gb1@2 ~ gb1 ~@2 gb1@2 ab1@2 ~ ab1 eb1@2 ab1 eb1", AB: "bb1@3 gb1@3 b1@2",
  AC: "~@2 c1@3 ~ c2 ~ c2!3 c2@2 c2 d2!2", AD: "d2 d2@2 d2 eb2 ab1@2 ab1@2 bb1@7", AE: "bb1 f1 bb1 f1 bb1!2 ~@10",
  AF: "~@8 eb1 ~@3 eb2 eb1!2 ~", AG: "~@3 ab1 bb1@2 ab1 bb1 eb1 ~@3 eb2 eb1!2 ~",
  AH: "~@2 f1 gb1 ~ bb1@3 eb1 ~@3 eb2 eb1!2 ~", AI: "~@3 bb1 ab1@2 gb1 f1 eb1 ~@3 eb2 eb1!2 ~",
  AJ: "~@2 f1 gb1 ~ bb1 eb1@2 eb1 ~@3 eb2 eb1!2 ~", AK: "~@3 db2 bb1@2 gb1 f1 eb1 ~@3 eb2 eb1!2 ~",
  AL: "~ eb2 db2 bb1 gb1 eb1@3 eb1 ~@3 eb2 db2 eb2 ~", AM: "~@2 db2!2 ~ eb2 db2@2 eb1 ~@3 eb2 eb1!2 ~",
  AN: "eb1 ~@7 eb2@2 bb1 db2 eb1 ~ eb2@2", AO: "bb1 db2 eb1 ~@5 db2 ~ eb2@2 e2 gb2 ab2 a2",
  AP: "gb1 db1 e1 gb1 ~ gb1!2 ~@4 b1 db2@2 b1 db2", AQ: "~@2 ab1 a1!2 db2@3 gb1 e1 gb1 ~@2 db2 gb1@2",
  AR: "~@3 db2 b1@2 a1 ab1 gb1 ~@3 gb2 gb1!2 ~", AS: "~@2 ab1 a1 b1 db2 gb1 e1 gb2 ~@3 gb2 gb1!2 ~",
  AT: "~@2 ab1 a1 ~ b1 e1 d1 eb1 ~@3 eb2 eb1!2 ~", AU: "~@3 bb1 ab1@2 gb1 f1 eb1 ~ eb1 bb1 ab1 db2 eb1 ~",
  AV: "~@2 f1 gb1 ~ bb1@2 ~ eb1 ~@4 eb2 eb1!2", AW: "~@3 ab1 bb1@2 ab1 db2 eb1 ~@4 eb2 eb1 ~",
  AX: "~@2 f1 gb1@2 bb1@3 eb1 ~@3 eb2 eb1!2 ~", AY: "~@3 ab1 bb1@2 db1@2 eb1 ~@4 eb2 eb1 ~",
  AZ: "~@2 f1 gb1@2 bb1 ab1 ~@9",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@6 A B A B C D E F C D E G ~@4 A B A B A B A H C D E F C D E G ~@4 A B A B A B A I ~@7 J K J K J K J K L ~@6 J K J K
  J K J K J K J K ~
>`.pickRestart({
  A: "~@2 [db4,f4] [bb3,db4] ~@2 [gb3,db4]@2 [db4,f4] ~ [db4,f4] ~ [ab3,bb3,eb4]@4", // Db Bbm Gb5 Db Absus2
  B: "~@2 [bb3,eb4] [ab3,db4]@2 ~ [ab3,db4]@3 ~@7", C: "~@2 [db4,f4]!2 bb3@2 ~@2 [bb3,db4,f4] ~@3 [ab3,bb3,eb4]@4",
  D: "~@2 [db4,f4]!2 bb3@2 [ab3,db4]@3 eb4 [ab3,db4] [bb3,eb4] ~ [db4,f4]@2 ~", // Db Db5 Eb5 Db
  E: "~@2 [db4,f4] [ab3,db4]@3 ~@2 [bb3,db4,f4] ~@3 [ab3,bb3,eb4]@4", // Db Db5 Bbm Absus2
  F: "~@2 [bb3,eb4] [ab3,db4]@2 ~ [ab3,db4]@3 eb4 [ab3,db4] [bb3,eb4] ~ [db4,f4]@2 ~", // Eb5 Db5 Eb5 Db
  G: "~@2 [bb3,eb4] [ab3,db4]@2 ~ [ab3,db4]@2 [ab3,db4] [bb3,eb4] [db4,f4] ~ [ab3,db4]@2 ~@2", // Eb5 Db5 Eb5 Db Db5
  H: "~@2 [bb3,eb4] [ab3,db4]@2 ~ [ab3,db4]@3 ~ [ab3,db4,f4] [bb3,eb4] ~ [ab3,bb3,eb4] ~@2", // Eb5 Db5 Db Eb5 Absus2
  I: "~@2 [bb3,eb4] [ab3,db4]@2 ~ [ab3,db4]@3 ~@3 bb3 db4 eb4@2", J: "~@10 [db4,f4] [bb3,db4] ~@2 [gb3,db4]@2",
  K: "[db4,f4] ~ [db4,f4] ~ [ab3,bb3,eb4]@4 ~@2 [bb3,eb4] [ab3,db4]@2 ~ [ab3,db4]@2", // Db Absus2 Eb5 Db5
  L: "~@2 [ab3,db4,f4] [bb3,eb4] ~ db4 eb4@2 ~@8", // Db Eb5
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.3)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@6 A@2 B@2 C D E@2 F G H@2 I J K@2 L@2 B@2 L@2 M@2 N D E@2 F G H@2 I J K@2 L@2 B@2 L@2 B@2 ~@3 O P Q R S T U V W T U
  V X ~@6 Y T U V W T U V W T U V X
>`.pickRestart({
  A: "[~@12 [db4,f4,ab4] ~ [eb4,gb4,bb4] [db4,f4,ab4]@2 [bb3,db4,f4] db4 bb3 db4@2 ~ bb3 db4 bb3 db4@3 ~@3]/2", // Db Ebm Db Bbm
  B: "[~ db4!2 eb4 f4 ~ f4 ~ eb4@3 ~ [db4,f4,ab4]@2 [eb4,gb4,bb4] [db4,f4,ab4]@2 [bb3,db4,f4] db4 eb4 f4 ~ f4 ~ eb4@3 ~@5, ~@8 e4 ~@15 e4 ~@7]/2", // Db Ebm Db Bbm
  C: "eb4@8 ~@6 bb3 db4, f4 ~@15", D: "~ eb4@3 ~@12",
  E: "[~@2 db4 eb4 f4 ~ f4 ~ eb4@3 ~ db4@2 bb3 eb4@2 bb3@5 ~@8 f4@2, ~@8 e4 ~@23]/2", F: "eb4@4 ~@8 db4@2 bb3 db4",
  G: "~ eb4@5 ~@10", H: "[~@2 db4 eb4 f4@2 f4 ~ eb4@3 ~ db4@2 bb3 eb4@2 bb3@5 ~@8 db4 eb4, ~@8 e4 ~@23]/2",
  I: "f4@3 eb4@2 db4 db4@7 ~ db4 eb4", J: "f4@2 ~ eb4@2 db4 gb4@2 f4@6 ~ db4",
  K: "[[eb4,gb4,bb4]@3 [db4,f4,ab4]@2 [bb3,db4,f4] [db4,f4,ab4]@6 [bb3,eb4,bb4]@3 [ab3,db4,ab4]@2 [f3,bb3,f4] [db3,db4,ab4]@5 ~@9]/2", // Ebm Db Bbm Db Eb5 Db5 Bb5 Db5
  L: "[~@2 db4 bb3 db4@3 bb3 db4 bb3 db4@2 [db4,f4,ab4] ~ [eb4,gb4,bb4] [db4,f4,ab4]@2 [bb3,db4,f4] db4 bb3 db4@2 ~ bb3 db4 bb3 db4@3 ~@3]/2", // Db Ebm Db Bbm
  M: "[~ db4!2 eb4 f4 ~ f4 ~ eb4@3 ~ [db4,f4,ab4]@2 [eb4,gb4,bb4] [db4,f4,ab4]@2 [bb3,db4,f4] db4 eb4 f4 ~ f4 ~ [eb4,e4]@2 ~@2 f4@4, ~@8 e4 ~@23]/2", // Db Ebm Db Bbm Emaj7
  N: "eb4@8 ~@6 bb3 db4", O: "~@14 db4 b3", P: "~@6 e4 ~ e4!2 ~ e4 ~ db4 b3 db4", Q: "~ db4 ~@2 b3 db4 b3 db4@2 ~@7",
  R: "~@10 gb4!2 e4 db4 ~@2", S: "b3 db4!2 ab3 b3 db4 ~@4 db4 bb3 db4@3 bb3",
  T: "db4 bb3 db4@2 [db4,f4,ab4] ~ [eb4,gb4,bb4] [db4,f4,ab4]@2 [bb3,db4,f4] db4 bb3 db4@2 ~ bb3", // Db Ebm Db Bbm
  U: "db4 bb3 db4@3 ~@4 db4!2 eb4 f4 ~ f4 ~",
  V: "eb4@3 ~ [db4,f4,ab4]@2 [eb4,gb4,bb4] [db4,f4,ab4]@2 [bb3,db4,f4] db4 eb4 f4 ~ f4 ~, e4 ~@15", // Db Ebm Db Bbm
  W: "eb4@3 ~@7 db4 bb3 db4@3 bb3, e4 ~@15", X: "eb4@3 ~@13, e4 ~@15", Y: "~@10 db4 bb3 db4@3 bb3",
})).s("gm_electric_guitar_jazz").gain(0.48)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~ A B ~@2 A B A B C B ~@10 A D A B A D A B E ~@11 A D A B A D A B E F@2 G@2 ~ H I J ~ K ~ L ~ K M@2 N O P ~ P ~ Q ~ K
  ~ K ~@3 K ~@4
>`.pickRestart({
  A: "~@10 [f4,ab4,db5,f5,ab5] [gb4,bb4,eb5,gb5,bb5] ~ [ab4,db5,ab5,db6] [ab4,bb4,db5,eb5,ab5,bb5,db6,eb6] [ab4,bb4,eb5,ab5,bb5,db6,eb6], ~@13 f5@3", // Db Ebm Db5 Absus4
  B: "[ab5,db6] ~@15", // Db5
  C: "db5 ~ [ab4,db5] [ab4,db5]@2 [bb4,eb5] [ab4,db5]@4 [f4,ab4,db5,f5,ab5] [gb4,bb4,eb5,gb5,bb5] ~ [ab4,db5,ab5,db6] [ab4,bb4,db5,eb5,ab5,bb5,db6,eb6] [ab4,bb4,eb5,ab5,bb5,db6,eb6], ~@13 f5@3", // Db5 Eb5 Db5 Db Ebm Db5 Absus4
  D: "[ab5,db6] ~@3 [db4,db6]!2 [bb3,bb5] ~@9", E: "db5 ~ [ab4,db5] [ab4,db5]@2 [bb4,eb5] [ab4,db5]@4 ~@6",
  F: "[[db4,db5]@3 [bb3,bb4]@2 [db4,db5] [eb4,eb5]@3 [db4,db5]@2 [eb4,eb5] [f4,f5]@3 [eb4,eb5]@2 [db4,db5] [eb4,eb5]@4 [c4,eb4,g4,bb4,eb5,g5] ~ [eb4,eb5]@3 [c4,c5]@2 [eb4,eb5] [f4,f5]@2]/2", // Db Bb Db Eb Db Eb F Eb …
  G: "[~ [eb4,eb5]@2 [f4,f5] [gb4,gb5]@3 [eb4,eb5]@2 [gb4,gb5] [ab4,ab5]@12 [f4,ab4,c5,eb5,f5,ab5] ~@9]/2", // Eb F Gb Eb Gb Ab Fm7
  H: "~@9 [db4,db5,db6] ~@6", I: "~@3 [db4,db5,db6] ~ [db4,db5,db6] ~@10", J: "~@12 [db4,db6]!2 [bb3,bb5] ~",
  K: "~@2 [f4,ab4,db5,f5,ab5] [gb4,bb4,eb5,gb5,bb5] ~ [ab4,db5,ab5,db6] [ab4,bb4,db5,eb5,ab5,bb5,db6,eb6] [ab4,bb4,eb5,ab5,bb5,db6,eb6] [ab5,db6] ~@7, ~@5 f5@3 ~@8", // Db Ebm Db5 Absus4 Db5
  L: "~@2 [f4,ab4,db5,f5,ab5] [gb4,bb4,eb5,gb5,bb5] ~ [ab4,db5,ab5,db6] [ab4,bb4,db5,eb5,ab5,bb5,db6,eb6] [ab4,bb4,eb5,ab5,bb5,db6,eb6] [ab5,db6] ~@3 [db4,db6]!2 [bb3,bb5] ~, ~@5 f5@3 ~@8", // Db Ebm Db5 Absus4 Db5 Db Bb
  M: "[~@8 db5 ~ [ab4,db5] [ab4,db5]@2 [bb4,eb5] [ab4,db5]@4 ~@6 [ab3,ab4,bb4,db5,eb5,f5]@2 eb5 db5 bb4 ~ [ab3,ab4,bb4,db5,eb5,f5]@2]/2", // Db5 Eb5 Db5 Bbm7
  N: "eb5 db5 [ab3,ab4,bb4,db5,eb5,gb5] ~@5 [db4,db5]@2 [eb4,eb5] ~ [e4,e5] [gb4,gb5] [ab4,ab5] [a4,a5]", // Ebm7 Db Eb E Gb Ab A
  O: "~ [f4,gb4,g4,e5,f5] [e4,a4,b4,c5,d5] ~@13, [ab4,ab5] ~@7", // Am Ab
  P: "~@2 [b3,ab4,b4,e5,ab5] [db4,a4,db5,gb5,a5] ~ [e4,b4,e5,b5] [gb4,b4,db5,e5,gb5,b5,db6] [e4,gb4,b4,db5,gb5,b5,db6] [e4,b5] ~@7, ~@5 ab5@3 ~@8", // E Gbm E5 Gbsus4 Esus2 E5
  Q: "~@2 [ab4,b4,e5,ab5,b5] [a4,db5,gb5,a5,db6] ~ [a4,a5,d6] [a4,b4,a5,b5,e6] [b4,a5,b5,d6,e6] [a5,d6] ~@7, ~@5 [d5,gb5]@3 ~@8", // E Gbm D5 Asus2 Bm7 D5 D
})).s("gm_brass_section").gain(0.48)

// chords · brass section · "BRASS 1" · soft notes
const brass_section_soft = note(`<
  ~ A B ~@2 A B A B C B ~@10 A B A B A B A B D ~@11 A B A B A B A B D ~@9 E ~ E ~ E F ~@3 G ~ G ~ H ~ E ~ E ~@3 E ~@4
>`.pickRestart({
  A: "~@15 db5", B: "[ab4,db5] ~@15", C: "ab4 [ab4,db5] ~@13 db5", D: "ab4 [ab4,db5] ~@14", E: "~@7 db5 [ab4,db5] ~@7",
  F: "~@8 ab4 [ab4,db5] ~@6", G: "~@7 e5 [b4,e5] ~@7", H: "~@7 a4!2 ~@7",
})).s("gm_brass_section").gain(0.32)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@2 A@2 ~@10 B ~ C D ~@9 E ~ F G ~@2 H ~ I@2 J ~@7 K ~ L ~ M ~@10 N@2 O@2 ~@2 P Q R S T@2 U ~@4 V W ~ N@2 O@2 ~
>`.pickRestart({
  A: "[~@14 eb5@5 ~@13]/2", B: "[ab3,db4,f4,ab4]@7 [f3,gb3,g3,a3,bb3,b3,c4,db4,d4,eb4,e4] c4 ~@7", C: "~@14 eb4 bb3",
  D: "db4@2 eb4 ~@9 [ab3,a3,bb3] [e3,f3,gb3,g3,e4,f4] [db3,d3,eb3,c4,db4,d4,eb4] [a3,bb3,b3]",
  E: "~@5 bb3 db4@3 eb3 bb3 [db4,db6]@3 ~@2", F: "~@12 bb3 db4 [bb3,eb4] [bb3,b3,c4,db4,d4]", G: "[gb3,g3,ab3,a3] ~@15",
  H: "~@5 bb3 ~@2 bb3!2 ~@6", I: "[~@14 bb3 [ab3,db6]@5 ~@12]/2",
  J: "[db5,ab6]@12 [ab3,a3,bb3] [e3,f3,gb3,g3,e4,f4] [db3,d3,eb3,c4,db4,d4,eb4] [a3,bb3,b3]", // Db5
  K: "~@6 eb5@4 eb5@3 db5@3", L: "~@2 ab5@8 f5!2 ab5!2 f5 [eb5,e5]",
  M: "~@10 [ab4,c5,db5] [e4,f4,gb4,g4,ab4,a4,bb4,b4] [b3,c4,db4,d4,eb4,e4,f4,gb4,g4] [f3,gb3,g3,ab3,a3,bb3,b3,c4,db4,d4] [eb3,e3,ab3] ~", // Dbmaj7 Emaj7
  N: "[~@14 eb5@4 eb5@3 db5@3 ~@8]/2", O: "[~@10 ab5@8 f5!2 ab5!2 f5 [eb5,e5] ~@8]/2", P: "~@14 db4 [d4,eb4,e4,f4,gb4]",
  Q: "[g4,ab4] gb4@3 a4@3 ~@3 b4@3 b4@3", R: "~@2 b4 ~ gb4@3 ~ e4 db4 gb4 b3 a3 b3@3",
  S: "~@2 gb4 [db4,e4] c4 [b3,db4] ~ [gb3,a3] db4 a3@3 [e3,gb3] db3 [e3,gb3]!2", // Dbm Bsus2 Gbm Esus2
  T: "[[e3,gb3] gb3@4 ~ gb4 db4 a4@2 ~ bb4@3 b4@4 gb4 a4 gb4@3 db5 gb5 db5 e5 gb5 gb5@2 e5 db5, ~ e3 ~@30]/2", // Esus2
  U: "b4 [a4,b4,db5] b4!2 a4@2 [eb4,e4,f4,gb4,g4,ab4] [ab3,a3,bb3,b3,c4,db4,d4] ~@8", // A
  V: "~@9 f4 ab4 f4 ab4@2 [eb4,e4] [db4,eb4]", W: "bb3 db4!2 eb4 ~ eb4@3 ~@8",
})).s("gm_overdriven_guitar").gain(0.4)

// chords · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note("<~@14 A ~@2 B ~@9 C ~@5 D ~@3 B ~@9 E F G ~@13 H ~@19 H ~>".pickRestart({
  A: "~@7 [e3,f4,gb4,g4] [eb3,ab3,eb4] ~@7", B: "~@15 c3", C: "~@4 eb3 ~@11", D: "~@5 eb4 ~@2 eb4!2 ~@6", E: "~@15 d5",
  F: "[c5,db5] ~@15", G: "~@14 [c3,db3,d3,f3,gb3,g3] [bb2,b2,eb3]", H: "~@7 d5 [c5,db5] ~@7",
})).s("gm_overdriven_guitar").gain(0.24)

// chords · harpsichord · "HARPSICHRD" · Bbm Bb7 Ebm7 Bbm7 Gb5 Gb Eb7 Gb …
const harpsichord = note(`<
  ~@50
  [[bb4,db5] [f5,ab5,bb5] [db6,eb6,gb6] [ab5,bb5,db6] [db5,gb5] [gb5,ab5,bb5] [bb4,db5,eb5] [gb5,bb5] [bb4,db5,eb5] [db5,eb5,gb5] [bb5,db6] [bb4,eb5,gb5] [db5,f5,ab5] [b5,db6,f6] [ab5,b5,db6] [b4,db5,f5]]
  [[db5,f5,ab5] [f5,ab5,b5] [c5,db5,eb5] [g5,bb5,c6] [g5,bb5] [c6,e6] [g5,bb5,c6] [eb5,g5,bb5] [c5,bb5,c6] [c5,eb5,ab5] [eb5,ab5,bb5] [c6,eb6,ab6] [bb5,c6,eb6] [c5,eb5,ab5] [eb5,f5,ab5] [bb5,d6,f6]]
  [[bb5,c6,d6] [c5,d5,f5] [d5,f5,ab5] [bb5,d6,f6] [bb5,db6,d6] [db5,eb5,ab5] [eb5,ab5,bb5] [bb5,db6,eb6] [db5,eb5,ab5] [eb5,ab5,bb5] [bb4,c5,eb6] [eb5,f5,ab5] [bb5,c6,eb6] [f6,ab6] [bb5,c6,eb6] [ab5,eb6,f6]]
  [[ab5,bb5,c6] [f5,c6,eb6] [f5,ab5,bb5] [eb5,bb5,c6] [eb5,f5,ab5] [c5,eb5,f5] [bb4,c5] ~@9]
  ~@31
>`).s("gm_harpsichord").gain(0.22)

// chords · pad bowed · "#WARM BELL"
const pad_bowed = note("<~@20 A@2 ~@18 A@2 ~@43>".pickRestart({
  A: "[[db5,gb5]@2 ~ [db5,f5]@2 [bb4,db5] [db5,f5]@5 ~ [bb4,eb5]@3 [ab4,db5]@2 [gb4,bb4] [ab4,db5]@5 ~@9]/2", // Gb5 Db Bbm Db Eb5 Db5 Gb Db5
})).s("gm_pad_bowed").gain(0.2)

// chords · pad poly · "POLYSYNTH"
const pad_poly = note("<~@2 A@4 ~@12 B C ~@18 B C ~@45>".pickRestart({
  A: "[[gb3,ab3,db4,db5]@57 ~@7]/4", // Gbsus2
  B: "[gb4,ab4,db5]@3 gb4@2 bb4 gb4 [gb4,ab4,db5] [ab4,bb4,eb5]@5 ~ [ab4,db5] [bb4,eb5]", // Gbsus2 Absus2 Db5 Eb5
  C: "[f4,ab4,db5,f5]@3 [bb4,eb5]@2 [f4,ab4,db5]@3 [f4,ab4,db5]@8, ~@3 f4 ~@12", // Db Eb5 Db
})).s("gm_pad_poly").gain(0.15).pan(0.6)

// chords · lead 5 charang · "CHARANG" · Dbm
const lead_5_charang = note(`<
  ~@53
  [~@8 [db5,e5,ab5,db6] [db5,e5,ab5,db6]@2 ~@5]
  [[db5,e5,ab5,db6] ~ [db5,e5,ab5,db6]!2 ~ [db5,e5,ab5,db6]!2 ~@9]
  [~@6 [db5,e5,ab5,db6] ~]
  ~@29
>`).s("gm_lead_5_charang").gain(0.39)

// chords · lead 5 charang · "CHARANG" · soft notes
const lead_5_charang_soft = note("<~@53 [~@8 bb4 bb4@2 ~@5] [bb4 ~ bb4!2 ~ bb4!2 ~@9] [~@6 bb4 ~] ~@29>")
  .s("gm_lead_5_charang").gain(0.2)

// other · woodblock
// … 122 more lines

More by Earth, Wind & Fire