Strudelify
Still cover art

Encore

Still

Lionel Richie

KeyD♭ majorTempo65 bpm
0:00/0:00
// Still — RICHIE LIONEL
// 65 bpm, 4/4, key Db 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 62 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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
const piano = note("<~ A@4 B@2 C D E@2 F@3 G@7 H@2 I J@5 K@8 L@2 M N@8 O@7 P@6 ~>".pickRestart({
  A: "[~@12 db4@6 ab3@24 ~@18 db4@6 ab3@24 ~@18 db4@6 ab3@24 ~@18 db4@6 [ab3,db4,eb4,gb4,ab4]@29 ~, db3@48 db2@48 db2@48 db2@47 ~, ~@6 ab3@12 [eb4,f4,ab4]@50 ~@22 ab3@12 ab3@12 [db4,eb4]@35 ~@43, ~@18 db4@42 ~@6 [eb4,gb4,ab4]@49 ~@23 ab3@12 ab3@12 ~@30, ~@42 ab3@11 ~ ab3@12 db4@42 ~@6 ab4@48 ~@30]/4", // Absus4 Fm7 Dbsus2 Ab7
  B: "[~@9 f4@3 ~@21 ab3@2 ~@11 db4@2, [db2,gb4]@27 ab3@3 db4@5 db2@9 eb4@4, ~@6 ab3@24 ab3@12 eb4@29 db4@9 f4@15 ~, ~@12 db4@24 db4@12 ab4@23 ~ gb4@23 ~, ~@24 f4@47 ab3 eb4@5 ab3@18 ~]/2", // Gb5
  C: "bb3@2 ~@5 f4 ~@6 db4@2, gb2@15 ~, [gb3,f4]@3 gb4 ~@4, db4@2 db4@2 ~ bb3@3, ~ bb3@3 [gb3,eb4]@4", // Gbmaj7 Ebm
  D: "~@18 gb3@5 ~@7 gb3@6 gb3@6 gb3@6, [ab2,bb3,db4]@23 ~ ab2@23 ~, ~ gb3@2 ~@5, ~@12 [ab3,c4]@11 ~ [bb3,db4]@12 [bb3,c4,eb4]@12", // Bbm7 Ab Bbm Cm7
  E: "[~@18 f4@6 ~@67 ab4@5, db3, gb4@6 db4@3 ab3 db4@3 ab3@3, ~@3 ab3@9 f4@9 eb4@12 ab3@3 eb4@10 ~@2, ~@2 db4@3 ab3@3 ab4@6 db4@2]/2",
  F: "[~@19 f4@6 ~@43 ab3@4 ~@22 db4@4 bb3@6 ~@12 gb4@4 f4@3 ~@6 bb3@12 db4@3, ~ [db2,gb4]@54 ab3@7 db4@10 db2@18 eb4@8 [gb3,f4]@24 ~ [gb3,eb4]@21, ~@7 ab3@24 ab3@12 eb4@30 db4@9 f4@16 db4@12 ~ db4@12 ~@21, ~@13 db4@24 db4@12 ab4@24 ~ gb4@24 ~@6 bb3@19 ~@21, ~@25 f4@48 ab3 eb4@5 ab3@19 gb2@46]/3", // Gb5 Gbmaj7 Ebm
  G: "[~@21 gb3@6 ~@6 gb3@6 ab3@6 ~ gb3@4 ~@20 f4@6 ~@31 ab3@6 [db3,ab3,db4,f4]@13 [bb2,bb3,b3,eb4,gb4]@13 [ab2,b3,eb4,f4,ab4]@14 ~@39 gb4@3 eb4@4 ~@15 bb3@6 eb4@3 ~@3 [c4,eb4,ab4]@12 [bb3,eb4,ab4]@12 ~@42 ab3@4 ab4@3 ~ ab4@23 ~ [b3,eb4,ab4]@11 ~, ~@3 [ab2,bb3,db4]@24 ab2@23 ~@2 db3@61 ~@40 gb2@43 ~@140, ~@9 gb3@12 ~@18 [bb3,c4,eb4]@12 ~ gb4@36 db4@25 ~@46 gb3@30 f4@6 ~@13 gb3@13 ~@35 ab3@12 ab3@12 ~ ab3@11 ~@44, ~@15 [ab3,c4]@12 [bb3,db4]@14 ~@17 ab3@18 f4@18 eb4@19 ~@52 db4@12 bb4@18 ~@68 ab4@23 f4@5 gb4@4 ~@41, ~@64 db4@18 ab3@18 ab4@13 ~@58 f4@12 db4@12 ~@7 db4@20 ~@28 db4@12 db4@12 db4@12 ~ db4@12 [b3,eb4]@24 ~@13]/7", // Db Bmaj7 Fm7b5 Ab Ebsus4 Abm Bbm7 Cm7 …
  H: "[[b3,eb4,ab4]@12 ~@36 db4@6 eb4@6 ~@19 eb4@5 ~@7 ab3@5, ~@12 gb2@24 bb4@12 ~@25 bb3@11 ~@12, ~@18 gb3@19 ~@5 gb3@11 ~@13 gb3@17 ~@13, ~@24 db4@17 ~@19 db4@22 ~@3 [c4,eb4]@10 ~, ~@30 db5@19 ~@47]/2", // Abm Cm
  I: "~@7 ab2@5 ~@7 f3@7 ~@5 f3@6 ab3@6 f3@5, ~ [bb3,eb4]@10 ~@2 [ab3,c4,eb4]@11 ~@2 [c4,eb4]@21 ~", // Eb5 Ab Cm
  J: "[~@2 f4@4 gb4@3 ~ ab4@3 ~@45 ab3@5 ~@42 gb4@4 eb4@4 ~@15 bb3@6 eb4@4 ~@2 [c4,eb4,ab4]@12 ~ [bb3,eb4,ab4]@12 ~@38 f4@5 [ab3,gb4]@4 ab4@4 [b3,eb4,ab4]@12 ~@7 b3@5, ~@14 [b3,eb4,ab4]@11 ~ [db4,f4]@12 ~ [eb4,gb4]@12 [f4,ab4]@13 ~@8 gb3@30 f4@6 ~@13 gb3@13 ~@37 ab3@12 ~ ab3@12 ~ ab3@11 ~@32, ~@20 ab3@12 ~ ab3@12 ab3@13 ~@7 gb2@44 ~@131, ~@78 db4@12 bb4@19 ~@69 ab4@24 ~@38, ~@83 f4@13 db4@13 ~@6 db4@21 ~@29 db4@12 ~ [db4,eb4]@12 db4@12 ~ db4@12 ~@13 [db4,f4]@12]/5", // Ab Ebsus4 Ab7 Abm Db Ebm Fm Dbsus2 …
  K: "[~@22 b3@7 [bb3,f4,bb4]@14 ~@32 bb3@5 ~@2 [gb2,bb3,db4,f4]@13 [f2,ab3,c4,eb4]@14 [eb2,gb3,bb3,db4]@53 ab3@6 ~@14 ab3@6 ~@23 ab3@50 ~ [ab4,eb5,gb5]@16 ~@2 [ab4,db5,f5]@4 ~@2 [ab4,db5,f5]@6 ~@3 [ab4,ab5] ~@2 [ab4,f5,ab5]@8 ~ [eb5,gb5] ~@2 [ab4,eb5,gb5]@9 ~ [db5,f5] ~@2 [ab4,db5,f5]@10 ~@2 [ab4,eb5,gb5]@7 ~@2 [ab4,db5,f5]@7 eb5@4 db5@4 ~ [gb4,bb4,db5,f5]@15 ~@2 [gb4,eb5,gb5]@3 ~ [gb4,db5,f5]@3, ~@2 [eb4,gb4]@12 ~ f4@13 ~@15 bb4@11 ~@2 db4@13 f4@12 ~@81 eb4@13 [bb3,eb4]@15 ~@5 ab3@16 ~@173, ~@8 b3@14 ~@7 [gb2,f3]@51 ~@82 ab2@100 ~@122, ~@16 db4@13 ~@20 bb3@13 eb4@13 ~@87 c4@28 ~@13 [c4,eb4]@58 ~@46 ab4@2 ~@10 ab4@2 ~@63, ~@168 ab3@13 ~@7 [db4,eb4]@15 ~@92 f5@2 ~@87]/8", // Bb5 Gbmaj7 Fm7 Ebm7 Ab7 Db Ab Db …
  L: "[[f4,bb4,eb5]@17 ~ [gb4,bb4,db5]@6 ~@43 gb4@6 [ab4,eb5,gb5]@18 [ab4,db5,f5]@5, ~@24 [bb4,db5]@12 [ab4,c5]@12 [bb4,db5]@12 ~ [c5,eb5,ab5]@12 ~@23, ~@5 gb4@2 gb4@2 gb4@2 ~@5]/2", // Ebsus2 Gb Ab7 Db Bbm Ab Bbm Ab
  M: "~ [ab4,db5]@6 ~@19 ab5@12 [ab3,db4,f4]@10, ~ f5@17 ~ eb5@18 ~@11, ~@7 ab4@30 ~@11, ~@13 db5@24 ~@11", // Db5 Db
  N: "[~@3 [bb3,b3,eb4,gb4]@14 [b3,eb4,f4,ab4]@14 ~@41 gb4@3 eb4@4 ~@15 bb3@6 eb4@4 ~@3 [c4,eb4,ab4]@12 [bb3,eb4,ab4]@12 ~@38 f4@5 ~ ab3@4 ab4@4 ab4@12 f4@12 ~ [b3,eb4,gb4]@11 ~@2 [b3,eb4]@12 ~@31 gb3@9 ~ [c4,eb4,ab4]@9 ~@19 eb4@5 ~ c4@7 ab3@6 ~@6 ab2@5 ~@8 f3@6 ~@6 f3@6 ab3@6 f3@7 f4@4 gb4@4 ~ ab4@4, ~@31 gb2@38 f4@6 ~@99 gb4@4 ~@61 gb3@19 bb4@13 ~@12 [bb3,gb4]@12 bb3@11 ~@15 [bb3,eb4]@10 ~@2 [ab3,c4,eb4]@12 ~@39, ~@38 gb3@38 ~@12 gb3@13 ~@37 ab3@12 ~ ab3@12 ab3@12 ~@58 gb2@28 ~@28 gb3@18 ~@77, ~@44 db4@13 bb4@19 ~@69 ab4@24 ~@51 ab4@12 ~@19 db5@20 ~@63 eb5@12 ~@38, ~@50 f4@13 db4@13 ~@6 db4@21 ~@29 db4@12 ~ db4@12 db4@12 db4@12 ~@2 [b3,eb4]@25 ~@25 [db4,f4,bb4]@12 db4@17 ~@21 db4@23 ~@2 eb4@11 ~@27 [c4,eb4,ab4,ab5]@22 ~@16]/8", // Bmaj7 Fm7b5 Ab Ebsus4 B Ab Ebm Eb5 …
  O: "[~@47 ab3@6 ~@31 db4@9 [c4,eb4,ab4]@9 ~@18 eb4@3 ~@4 [c4,eb4,ab4]@12 [bb3,eb4,ab4]@12 ~@36 f4@5 ~ ab3@4 ab4@3 ~ ab4@11 ~@35 b3@7 [bb3,f4,bb4]@14 ~@34 bb3@6 ~ [gb2,bb3,db4,f4]@14 ~ [f2,ab3,c4,eb4]@12, [b3,eb4,ab4]@11 ~ [db4,f4]@13 ~ [eb4,gb4]@13 [f4,ab4]@14 ~ bb4@18 f4@25 ~@5 db4@20 ~@29 db4@12 [db4,eb4]@12 db4@12 db4@12 ~@13 [db4,f4]@13 ~ [eb4,gb4]@12 ~@2 [db4,f4]@14 ~@27 db4@17 ~@38, ~@6 ab3@13 ab3@13 ab3@14 ~@8 gb2@43 ~@12 gb3@13 ~@35 ab3@12 ab3@12 ab3@11 ~@62 [gb2,f3]@53 ~@29, ~@54 f4@12 db4@12 bb4@18 ~@68 ab4@23 ~@5 gb4@4 ~@72 bb4@11 ~@16 f4@13 ~@28, ~@54 db4@6 gb3@36 ~@6 [bb3,gb4]@12 ~ bb3@8 ~@77 [b3,eb4]@12 ~@7 b3@13 b3@14 ~@28 bb3@14 eb4@14 ~@34]/7", // Ab Ebsus4 Bb5 Gbmaj7 Fm7 Abm Db Ebm …
  P: "[~@2 [eb2,gb3,bb3,db4]@57 ab3@7 ~@14 ab3@7 ~@21 ab3@54 ~ ab4@7 ~@15 f5@8 ~ [db3,ab4,f5]@94, ~@59 ab2@103 db2@126, ~@59 c4@29 ~@13 [c4,eb4]@61 ~@8 ab4@24 ~@94, ~@59 eb4@14 [bb3,eb4]@15 ~@6 ab3@14 ~@55 [db3,gb5]@33 ~@92, ~@66 ab3@14 ~@7 [db4,eb4]@14 ~@62 db5@14 db5@16 db5@94 ~]/6", // Ebm7 Db Cm Eb5 Gb5 Dbsus2
})).s("gm_piano").gain(0.38).pan(0.6)

// bass · fretless bass
const bass = note("<~@16 A@2 B C D@3 E@2 F@4 G@8 H I J K@2 L@2 M@4 N O@3 P@3 Q@4 ~@3>".pickRestart({
  A: "[~@17 db2@12 ~ bb1@12 ~ ab1@12 ~@2 gb1@17 ~ gb1@4 ~@2 gb1@14 ~]/2", B: "~@3 f2@4 ~@2 eb2@16 ~@3 ab1@4 ~@2 ab1@14",
  C: "~@4 ab2@4 ~@2 db2@17 ~ db2@4 ~@2 db2@14",
  D: "[~@5 ab1@5 ~ db2@9 ~@3 db2@11 ~ bb1@10 ~@2 ab1@10 ~@3 gb1@16 ~@2 gb1@4 ~@2 gb1@17 ~ f1@5 ~ ab1@17 ~@2 ab1@5 ~ ab1@11]/3",
  E: "[~ ab2@11 ~ db2@17 ~@2 db2@5 ~ db2@23 ~ db2@9 ~@3 db2@11 ~@2 bb1@9]/2",
  F: "[~@4 ab1@9 ~@4 gb1@17 ~ gb1@5 ~@2 gb1@18 ~ f2@5 ~ eb2@18 ~ ab1@4 ~@2 ab1@25 db2@17 ~@2 db2@4 ~@2 db2@18 ~ ab1@5 ~ db2@24 ~]/4",
  G: "[~ bb1@12 ~@2 ab1@12 ~@2 gb1@51 ~@2 gb1@12 ~ f1@12 ~@2 eb2@52 ~ ab1@97 ~@3 db2@17 ~ db2@3 ~@3 db2@22 ~@3 db2@17 ~ db2@4 ~@2 db2@23 ~ gb1@17 ~ gb1@3 ~@4]/8",
  H: "gb1@23 ~ ab1@17 ~ ab1@3 ~@3", I: "ab1@11 ~@2 ab1@10 ~@2 db2@17 ~ db2@4 ~", J: "~ db2@23 ~@2 db2@11 ~ db2@10",
  K: "[~@3 bb1@11 ~@3 ab1@11 ~@3 gb1@22 ~@4 gb1@17 ~ f1@4 ~@3 eb2@14]/2",
  L: "[~@5 ab1@3 ~@3 ab1@20 ~@2 ab1@2 ~ db2@17 ~@2 db2@4 ~@2 db2@22 ~@3 db2@9 ~]/2",
  M: "[~@3 db2@11 ~ bb1@10 ~@3 ab1@10 ~@3 gb1@17 ~ gb1@4 ~@3 gb1@12 ~@3 f1@7 ~@3 eb2@18 ~ ab1@5 ~ ab1@22 ~@3 db2@18 ~ db2@5 ~ db2@18 ~ ab1@5 ~@2]/4",
  N: "db2@9 ~@3 db2@11 ~@3 bb1@12 ~ ab1@9",
  O: "[~@6 gb1@16 ~@2 gb1@4 ~@2 gb1@12 ~@3 f1@7 ~@2 eb2@17 ~ ab1@4 ~@3 ab1@11 ~ ab1@10 ~@2 db2@17 ~ db2@4 ~@2 db2@17]/3",
  P: "[~@2 ab1@5 ~ db2@11 ~ db2@13 ~ bb1@13 ab1@13 ~@2 gb1@53 ~@2 gb1@13 ~ f1@13]/3",
  Q: "[~@2 eb2@56 ~ ab1@101 ~@32]/4",
})).s("gm_fretless_bass").gain(0.44)

// chords · acoustic guitar steel · "steel string guitar"
const acoustic_guitar_steel = note("<~ A B C D ~@4 E@2 ~@17 F G@6 ~@18 H@2 I@4 J@3>".pickRestart({
  A: "~@3 [db4,eb4,f4,ab4]@5", B: "~@3 [db4,eb4,gb4,ab4]@5", C: "~@3 [db4,eb4,ab4]@5",
  D: "~@19 gb4@27 ~@2, ~@6 [db4,eb4,ab4]@9 ~", E: "[[ab3,eb4,gb4]@16 ~@2 [ab3,db4,f4]@5 ~ [ab3,db4,f4]@66 ~@6]/2",
  F: "~@3 [db4,f4]", // Db
  G: "[~ [eb4,gb4]@13 ~ [f4,ab4]@11 ~@30 bb3@26 ~ bb4@10 ~@4 ab4@8 ~@5 db4@6 bb3@7 ~@6 bb3@5 ~ [bb3,db4]@6 ~ [c4,eb4]@6 [db4,f4]@6 ~ [bb3,db4]@6 ~@7 ab3@7 bb3@6 ~ c4@6 db4@8 ab3@7 ~@9 ab3@47 ~@29, ~@29 db4@30 ~@23 [db4,f4]@12 ~ c4@10 ~@4 bb3@3 ~@11 db4@12 ~@27 [c4,eb4]@12 ~@29 c4@56 ~@29, ~@30 f4@12 f4@33 ~@21 eb4@9 ~@5 gb4@24 ~@41 ab4@12 ~@101, ~@31 bb4@43 ~@214]/6", // Ebm Fm Bbm Cm Db Bbm Db Cm
  H: "[~@34 bb3@4 ~@17 bb4@6 ~ bb3@7 ~@2 bb4@11 ~@3 ab4@9 ~@2, ~@14 db4@21 ~@13 db4@20 ~ [db4,f4]@13 ~@2 [c4,eb4]@11 ~, ~@21 bb3@13 ~@7 [bb3,f4]@17 ~@38, ~@28 f4@11 ~@57]/2", // Db Cm Bb5
  I: "[~@10 bb3@8 ~@7 bb3@5 ~@2 [bb3,db4]@6 [c4,eb4]@7 [db4,f4]@7 [bb3,db4]@7 ~@7 ab3@7 bb3@6 ~ c4@7 db4@7 ab3@7 ~@14 ab4@45 ~@32, ~@2 bb3@4 ~@102 ab3@51 ~@33, ~@3 db4@7 ~@8 db4@13 ~@28 [c4,eb4]@12 ~@30 c4@59 ~@32, ~@4 gb4@27 ~@42 ab4@13 ~@106]/4", // Bbm Cm Db Bbm Cm
  J: "[~@2 f4@31 ~@15, db3@25 ~@11, ~ ab3@97 ~@46, ~ db4@32 ~@15, ~@2 eb4@47 ~@23]/3",
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.1)

// chords · french horn
const french_horn = note("<~@9 A@2 ~@24 B C D E F G ~@21>".pickRestart({
  A: "[[eb4,gb4]@17 ~ f4@5 ~ [db4,f4]@68 ~@4, ~@17 db4@5 ~@74]/2", B: "~@11 ab3@10 ~ eb4 gb4 ab4@24, ~@21 db4@2 ~@25",
  C: "~@35 bb4@12 ~", D: "f4@12 eb4@5 ~ db4@5 ~ ab4@24", E: "bb4@12 ~ ab4@11 ~ [eb4,gb4]@18 [db4,f4]@5",
  F: "~ [db4,f4]@26 ~@11 ab3@10", G: "~@3 db4@14 eb4@14 ~@17",
})).s("gm_french_horn").gain(0.27).pan(0.3)

// other · orchestral harp · "harp"
const orchestral_harp = note("<~@2 A ~ B ~@5 C ~@23 D ~@27>".pickRestart({
  A: "~@6 ab4@2 ~@4 db5@2 ~@4 ab5@3 ~@27", B: "db6@4 ~@2 bb5@4 ~@8 ab5@4 ~@2 gb5@3 ~@3 eb5@3 ~@9 db5@2 ~@4",
  C: "~@6 ab4@6 db5@6 ab4@6 eb5@6 ab4@6 db5@6 ~ ab4@3 ~@2",
  D: "~@12 ab3 bb3 db4 eb4 [gb4,ab4] [bb4,db5] [eb5,gb5] [ab5,bb5] db6 eb6 db6 bb5 [gb5,ab5] [db5,eb5] [ab4,bb4] [eb4,gb4] ~@20", // Gbsus2 Bbm Ebm Absus2 Gbsus2 Dbsus2 Absus2 Ebm
})).s("gm_orchestral_harp").gain(0.27).pan(0.3)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note("<~@2 A ~ B C@2 ~@9 D@2 E@2 F@2 G@7 H@5 I@4 J K L@4 M@4 N@7 O@7>".pickRestart({
  A: "db4!3 db4@2 ~@13 [ab4,db5,eb5,gb5]@30", // Absus4
  B: "db4!3 bb5@3 ab5@3 bb5@3 ab5@3 bb5@3 ab5@3 bb5@3 ab5@3 bb5@3 ab5@3 bb5@3 ab5@3 bb5@3 ab5@3 bb5@3, ab5@3 db4 ~@2 bb3@12 ab3@6 gb3@6 eb3@12 db3@5 ~",
  C: "[gb5@3 ab5@9 ~@4, [ab2,db3]@3 ~]/2", // Db5
  D: "[~@17 [ab3,db4,f4]@12 ~ [bb3,eb4]@12 ~ [b3,f4]@13 ~ [db4,f4]@36 [db4,f4,bb4]@3, ~@29 gb4@13 ab4@14 bb4@36 ~@4]/2", // Db Eb5 Bdim Db Bbm
  E: "[~@4 eb4@5 ~ [bb3,db4]@24 ~@24 f4@35 ~@2 db4, ~@3 [c4,ab4]@6 gb4@24 ~ [c4,eb4,ab4]@60 f4@2]/2", // Bbm Fm Ab
  F: "[~@3 gb4@4 ab4@4 [b3,eb4,ab4]@11 ~ [ab3,db4]@12 gb4@12 ~@6 db6@6 ~@24 ab5 bb5@12, ~@22 f4@13 [b3,eb4]@25 [bb3,db4,f4]@36, ~@47 db5@6 ~@6 bb5@23 ~@14, ~@4 f4 ~@3]/2", // Abm Db5 B Bbm
  G: "[~@6 [c4,eb4,ab4,ab5,c6]@6 [db4,gb4,bb4,bb5,db6]@24 ~ c4@17 ~ [bb3,bb5,db6]@5 ~ [c4,c6,eb6]@36 ~ f3@4 [gb3,c4,gb5]@4 [ab3,c4,ab5]@4 eb6@12 ~@13 [gb4,bb4]@12 ~ eb4@13 bb4@18 ~ db5@3 [bb4,db5]@3 [db5,f5]@6 ~@13 c5@3 c5@3 [gb4,db5]@18 ~ c5@3 ~@3 eb5@12 [eb5,ab5]@13 [c5,eb5]@3 [bb4,db5]@3 [ab4,c5]@3 ~ db5@3 [c5,eb5]@25 [f3,f4]@4 [gb3,gb4]@4 [ab3,ab4]@4 ~ [ab3,b3,eb4,ab4]@12 [b3,db4,f4]@12, ~@36 eb4@24 ~ ab4@61 [f4,ab4]@13 ~@12 [ab4,b4]@13 ~@70 gb4@6 ~@25 ab3@38 ~@37, ~@36 [ab4,c6,eb6]@18 gb4@6 f4@61 ~ db4@25 ~@88 ab4@25 ~@10 bb4@4 ~@62, ~@97 [c4,f5]@4 ~@9 b3@50 ~ [gb3,db4,f4]@44 [ab3,eb4,f4,ab4]@6 [gb3,db4,bb4]@25 [ab3,eb4,c5]@25 [c4,eb4]@50 ~@25, ~@123 db6@25 ~@31 f5@3 ~@22 eb5@3 ~@22 eb5@3 ~ [db5,f5]@4 ~@99]/7", // Ab Gb Bbm Cm Gbdim Ab Gb Bbm …
  H: "[~ [eb4,gb4]@13 ~ [db4,f4]@14 gb4@7 f4@6 db4@40 ~ f4@12 [ab3,c4,eb4,c5,ab5]@13 [gb3,bb3,db4,bb4,gb5]@26 ~ [bb4,db5]@6 [c5,eb5]@6 ~ f5@7 [eb5,gb5]@6 ~ [ab3,c4]@73 ~@5, ~ b3@28 [gb2,db3,gb3,bb3]@53 [bb3,db4,db5,bb5]@13 ~@52 db5@7 ~@7 [c5,eb5]@73 ~@6]/5", // Ebm Db Ab Gb Bbm Cm Ebm Ab …
  I: "[~@22 [ab4,eb5,gb5]@18 [ab4,db5,f5]@4 ~@2 [ab4,db5,f5]@47 ~@2 [ab4,eb5,gb5]@8 ~ db5@6 ~ [ab4,db5,eb5]@4 [ab4,db5]@4 ~ f5@17 ~ gb5@3 f5@2 ~@19 db5@5 ~ [gb4,bb4,db5]@12 [gb4,ab4,c5]@12, ~@103 [ab4,f5]@8 ~@8 db5@24 f4@12 ~ gb4@11 ~@25, ~@5 bb4 bb4 ~, ~@24 eb5@3 ~@5]/4", // Ab7 Db Ab7 Absus4 Db5 Gb Ab7 Db
  J: "~ bb4@11 ~ [c5,eb5]@12 [ab4,eb5,gb5]@18 [ab4,db5,f5]@5, [gb4,db5]@12 gb4@11 ~@25", // Cm Ab7 Db Gb5
  K: "~ [ab4,db5,f5]@36 ~ [ab3,db4,f4]@10", // Db
  L: "[~@3 [bb3,eb4]@13 ~ [b3,f4]@14 ~ db4@37 [db4,f4,bb4]@6 ~ eb4@6 [bb3,db4,gb4]@25 ~@25 f4@37 ~@5 gb4@4 ab4@4 [b3,eb4,ab4]@10, ~@2 gb4@14 ab4@15 [f4,bb4]@38 ~@6 [c4,ab4]@7 ~@25 eb4@75 ~@10, ~@107 [c4,ab4]@62 f4@5 ~@18, ~@85 db4@6 ~@5]/4", // Eb5 Bdim Bbm Gb Abm Bb5 Fm
  M: "[~@3 [ab3,db4]@12 gb4@13 ~@4 db5@4 db6@4 ~@24 ab5 ~ bb5@16 [c4,eb4,ab4,ab5,c6]@9 [db4,gb4,bb4,bb5,db6]@24 ~ [c4,ab4,c6]@18 ~ [bb5,db6]@5 ~ [c4,ab4,c6,eb6]@38 [f4,f5]@4 [gb4,gb5]@4 [ab4,ab5]@4 ~, ~@2 f4@13 [b3,eb4]@26 [bb3,db4,f4]@41 ~@34 eb4@24 f4@38 ~@14, ~@28 [f4,ab4]@12 bb5@24 ~@51 eb6@19 [bb3,gb4]@7 ~@51]/4", // Db5 Ab Gb Fm Bbm Ab F Gb …
  N: "[eb6@13 db6@12 ~ gb4@13 [f4,ab4]@14 ~ bb4@18 [db5,f5]@3 [bb4,db5]@3 [db5,f5]@5 ~@10 [ab3,eb4,f4,ab4,c5,eb5]@6 c5@3 [gb4,db5]@18 ~@4 db5@2 ~ eb5@12 [eb5,ab5]@12 [c5,eb5]@3 [bb4,db5]@3 [ab4,c5]@3 [bb4,db5]@3 [c5,eb5]@24 ~ f3@4 [gb3,gb4]@4 [ab3,ab4]@4 [ab3,b3,eb4,ab4]@12 ~ [b3,db4]@13 [eb4,gb4]@13 ~ db4@14 ~ gb4@6 f4@6 [db4,f4]@42 ~ [bb3,f4]@13 [ab3,c4,eb4,c5,ab5]@13, b3@54 [gb3,db4,f4]@39 ~@9 [gb3,db4,bb4]@24 ~ [ab3,eb4,c5]@24 [c4,eb4]@49 ~@26 b3@29 ~@54 [db4,db5,bb5]@14 ~@13, [db4,f4,ab4]@25 bb5@28 ~@70 f5@4 ~@209, ~@25 eb4@14 ~@82 gb4@6 ~@24 ab3@36 ~@67 [gb2,db3,gb3,bb3]@55 ~@27, ~@26 bb4@27 ~@67 [c5,eb5]@3 ~@3 ab4@24 ~@37 f4@4 ~@21 f4@13 ~@14 f4@15 ~@82]/7", // Fm Db Bbm Db Fm7 Gb5 Ab5 Cm …
  O: "[~@2 bb4@29 [bb4,db5]@7 [c5,eb5]@6 [db5,f5]@8 [eb5,gb5]@7 [ab3,c4,ab4,c5,eb5]@102 ~ db6@130 ~@44, ~ [gb3,bb3,db4]@57 ~@278, ~ gb5@29 ~@306]/7", // Bbm Cm Db Ebm Ab Gb
})).s("gm_string_ensemble_1").gain(0.25)

// chords · trombone
const trombone = note("<~@17 A@8 B@4 C@2 D E@2 F@5 G@3 H@7 I@4 J@2 K L@2 ~@4>".pickRestart({
  A: "[~@9 [db4,f4]@35 ~ [db4,f4]@6 [c4,eb4]@7 [bb3,db4]@23 ~ [c4,eb4]@18 [bb3,db4]@6 [c4,eb4]@49 eb4@12 db4@11 ~ eb4@12 ~ db4@8 ~@4 [db4,f4]@42 [c4,eb4]@6 [bb3,gb4]@24 [c4,ab4]@24 ~ c4@47 ~@2 b3@12 ~@22, ~@155 b3@49 ~@97 eb4@61 ~@22]/8", // Db Cm Bbm Cm Bbm Cm Db Cm …
  B: "[~@17 [db4,f4]@43 ~ c4@6 [bb3,gb4]@24 ~ c4@75 ~ b3@12 f4@12, ~@30 eb4@3 ~@13 ab4@44 ~@6]/4", // Db Ebm
  C: "[~@2 gb4@13 [f4,ab4]@14 [f4,bb4]@53 f4@14]/2", D: "eb4@12 ~ gb4@26 ~@9, ~@6 db4@13 ~@5",
  E: "[~@32 bb3@13 db4@15 c4@32 ~@4, ~@31 [eb4,ab4]@61 ~@4]/2", // Ab5
  F: "[~@22 [gb3,eb4]@17 ~ [f3,db4]@4 ~@2 [f3,ab3]@46 ~@3 [f3,db4]@8 ~ db4@6 ~@2 f3@3 ~ f3@3 ~@19 bb3@5 ~ f3@23 ~ gb3@48 ~ [ab3,eb4]@16 ~@2 [ab3,db4]@4 ~, ~@103 f3@7 ~ db4@3 ~ db4@3 ~ db4@18 ~@6 bb3@24 ab3@49 ~@24, ~@120 f3@23 ~@97]/5", // Ebm Db Fm Db Ab5 Db5
  G: "[~ [f3,ab3]@24 ~@13 ab3@41 [db4,f4]@36 ~@2 [db4,f4]@6 [c4,eb4]@7 [bb3,db4]@14]/3", // Fm Db Cm Bbm
  H: "[~@11 [c4,eb4]@19 [bb3,db4]@6 [c4,eb4]@37 db4@5 eb4@4 db4@4 eb4@12 ~ db4@12 ~ eb4@12 f4@12 ~ [db4,f4]@40 ~ [c4,eb4]@7 ~@2 [bb3,gb4]@25 [c4,ab4]@25 c4@49 ~@2 b3@12 f4@13 eb4@13 ~ db4@9, ~@86 b3@50 ~@101 eb4@63 ~@36]/7", // Cm Bbm Cm Db Cm Ebm Fm
  I: "[~@6 [db4,f4]@36 ~@3 [c4,eb4]@9 [bb3,gb4]@23 ~@2 c4@73 b3@12 ~ db4@13 eb4@14, ~@79 ab4@86 ~@27]/4", // Db Cm Ebm
  J: "[f4@14 [db4,f4]@55 f4@15 eb4@12]/2", K: "~@2 [db4,gb4]@29 ~@17", L: "[~@11 [c4,ab4]@80 ~@5]/2",
})).s("gm_trombone").gain(0.27).pan(0.3)

// chords · muted trumpet · Dbsus2
const muted_trumpet = note("<~@4 [~@18 [db5,eb5]@29 ~] ~@57>").s("gm_muted_trumpet").gain(0.38).pan(0.7)

// other · trumpet
const trumpet = note("<~@2 [~@3 eb5@5] ~@59>").s("gm_trumpet").gain(0.27).pan(1)

// other · pizzicato strings · Ab5
const pizzicato_strings = note(`<
  ~
  [~@6 ab4@3 ~@3 db5@2 ~@4 db5@2 ~@28]
  ~
  [~@18 ab5@3 ~@3 [ab4,eb5]@4 ~@2 [eb4,ab4]@7 ~@11]
  [~@30 eb5@4 ~@8 db5 ~@5]
  ~@24
  [~@34 bb5@4 ~@5 bb4@5]
  ~@32
>`).s("gm_pizzicato_strings").gain(0.15).pan(0.9)

// other · celesta · "celestia pad"
const celesta = note("<~@9 A ~@22 B@2 ~@28>".pickRestart({
  A: "ab6@5 ~@7", B: "[~@24 ab5@6 ~@7 ab5@17 ~@42, ~@31 ab6@30 ~@35]/2",
})).s("gm_celesta").gain(0.27).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B C@2 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 AF AG AH AI AJ AK AL ~@5
>`.pickRestart({
  A: "~@17 x ~@12 x ~@12 x ~@4", B: "~@3 x ~@5 x ~ x ~@4", C: "~@5 x ~@8 x ~@2 x ~@6", D: "~@11 x ~@11 x ~@11 x ~@12",
  E: "x ~ x ~@2 x!2 ~", F: "~@12 x ~@18 x ~@5 x ~@10", G: "~@13 x ~@17 x ~@6 x ~@9", H: "~@14 x ~@11 x ~@12 x ~@8",
  I: "~@4 x ~@12 x ~@17 x ~@6 x ~@5", J: "~@19 x ~@18 x ~@5 x ~@3", K: "~@21 x ~@18 x ~@5 x ~", L: "~ x",
  M: "~@29 x ~@18", N: "~@13 x ~@34", O: "~@17 x ~@30", P: "~@11 x ~@8 x ~@2 x", Q: "~@16 x ~@6 x ~@17 x ~@5 x",
  R: "~@23 x ~@17 x ~@6", S: "x ~@2 x!2 ~@2 x", T: "x ~@12 x ~@11 x ~@17 x ~@4", U: "~ x ~@17 x ~@6 x ~@11 x ~@9",
  V: "~@3 x ~@13 x ~@13 x ~@16", W: "~@2 x ~@6 x ~@24 x ~@13", X: "~@4 x ~@6 x ~@24 x ~@11",
  Y: "~@7 x ~@5 x ~@24 x ~@9", Z: "~@3 x ~@11 x ~@12 x ~@12 x ~@6", AA: "~@11 x ~@6 x ~@14 x ~@9 x ~@4",
  AB: "~@14 x ~@5 x ~@24 x ~@2", AC: "~@8 x ~@2 x ~@12", AD: "x ~@11 x ~@13 x ~@12 x ~@8", AE: "~@2 x ~@5 x ~ x ~@4 x",
  AF: "~@6 x ~@17 x ~@6 x ~@16", AG: "~@7 x ~@17 x ~@5 x ~@16", AH: "~@4 x ~@12 x ~@6", AI: "x ~@6 x ~@16",
  AJ: "~@21 x ~@13 x ~@12", AK: "~ x ~@22", AL: "~@11 x ~@36",
})).gain(0.44)

// drums · rim
const rim = s("rim").struct("<A ~@16 B C D ~ E F G H I J K L ~@11 M N O P ~ Q R S ~ T U V ~@10>".pickRestart({
  A: "x!4", B: "~@7 x ~@7 x", C: "~@11 x ~@11 x", D: "~@22 x ~@24 x", E: "~ x", F: "x ~@24 x ~@22",
  G: "~ x ~@23 x ~@22", H: "~ x ~@22", I: "~@29 x ~@18", J: "~@6 x ~@24 x ~@16", K: "~@4 x ~@12 x ~@6",
  L: "~@11 x ~@36", M: "~@11 x", N: "~@21 x ~@24 x ~", O: "~@23 x ~@24", P: "~ x ~@24 x ~@21", Q: "~@5 x ~@24 x ~@17",
  R: "~@8 x ~@24 x ~@14", S: "~@10 x ~@24 x ~@12", T: "~@3 x ~@3 x", U: "~@18 x ~@24 x ~@4", V: "~@19 x ~@24 x ~@3",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct(`<
  ~@34
  [~@17 x ~@6]
  [~@10 x ~@24 x ~@12]
  [~@35 x ~@12]
  [~ x ~ x]
  [~@13 x ~@23 x ~@10]
  [~@13 x ~@34]
  ~@22
>`).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@17 A B C D E F G H I J K L ~@5 M N O P Q R S K T U ~ V W X Y Z AA AB ~@10
>`.pickRestart({
  A: "~@7 x ~@3 x ~@3 x", B: "~@5 x ~@5 x ~@5 x ~@5 x", C: "~@10 x ~@11 x ~@11 x ~@12 x",
  D: "~@11 x ~@11 x ~@11 x ~@12", E: "x!4", F: "x ~@11 x ~@12 x ~@11 x ~@10", G: "~ x ~@11 x ~@11 x ~@12 x ~@9",
  H: "~ x ~@5 x ~@5 x ~@10", I: "~@29 x ~@12 x ~@5", J: "~@6 x ~@12 x ~@11 x ~@12 x ~@3",
  K: "~@9 x ~@11 x ~@12 x ~@11 x ~", L: "~@11 x ~@36", M: "~@14 x ~@2 x ~@5 x",
  N: "~@4 x ~@5 x ~@11 x ~@6 x ~@5 x ~@5 x ~@6", O: "~@5 x!3", P: "x ~ x ~ x!4", Q: "x ~@36 x ~@10",
  R: "~ x ~@5 x ~@5 x ~@6 x ~@27", S: "~@11 x", T: "~@11 x ~@11 x ~@12 x ~@11", U: "~ x ~@11 x ~@12 x ~@11 x ~@9",
  V: "~@5 x ~@12 x ~@11 x ~@17", W: "~@7 x ~@12 x ~@12 x ~@11 x ~@2", X: "~@10 x ~@11 x ~@12 x ~@12", Y: "x",
  Z: "~@3 x ~ x ~ x", AA: "~@18 x ~@12 x ~@11 x ~@4", AB: "~@7 x ~@11 x ~@11 x ~@12 x ~@3",
})).gain(0.22)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@34 A B ~ C D ~@2 E F G ~ H I J ~ K L M N ~@9>".pickRestart({
  A: "~@5 x", B: "~ x ~", C: "~ x ~ x ~@4", D: "~@7 x ~@23 x ~@11 x ~@4", E: "~@2 x ~@12 x ~@11 x ~@12 x ~@7",
  F: "~@5 x ~@11 x ~@12 x ~@11 x ~@5", G: "~@7 x ~@11 x ~@12 x ~@12 x ~@2", H: "~ x!2 ~",
  I: "~ x ~@12 x ~@11 x ~@12 x ~@8", J: "~@4 x ~@11 x ~@12 x ~@11 x ~@6", K: "~ x!3", L: "~@12 x ~@12 x ~@11 x ~@10",
  M: "~ x ~@11 x ~@11 x ~@12 x ~@9", N: "~ x ~@22",
})).gain(0.11)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@11 B C ~@18 D ~ E ~ F ~@4 G ~@2 H I ~@12>".pickRestart({
  A: "~@39 x!9", B: "~@47 x", C: "x!2 ~ x!6 ~@39", D: "~@15 x!8 ~@25", E: "~@16 x!9 ~@23",
  F: "~@21 x!3 ~ x!2 ~ x!3 ~@17", G: "~@11 x ~@4", H: "~@40 x ~ x!5 ~", I: "x!5 ~@40 x ~@2",
})).gain(0.27)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@4 A ~@11 B ~@19 C ~ D ~ E ~@21>".pickRestart({
  A: "~@37 x!2 ~@9", B: "~@44 x!3 ~", C: "~@12 x!3 ~@33", D: "~@14 x!2 ~@32", E: "~@18 x!3 ~@27",
})).gain(0.16)

// drums · crash
// … 16 more lines

More by Lionel Richie