Strudelify

Blue Hotel

Chris Isaak

KeyB♭ minorTempo149 bpm
0:00/0:00
// Blue Hotel — Chris Isaak
// 149 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(149/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 · electric bass finger · "bass"
const bass = note(`<
  ~@15 A B A B C B D@3 E F G D H F I J K L M N O P Q R O P S T U V W X U V Y J Z AA M R O P Q R O P Q A B A B C B AB AC
  AD Q AB AC AD AE AF AG AA AH@2 AI AC P Q AB AC P AJ X AK V W X AK V Y AL Z AA M AM AC P AJ R AC P Q AN AC P Q AO@2 ~@2
>`.pickRestart({
  A: "bb1@3 bb1 bb1@4", B: "gb1@3 f1@5", C: "bb1@3 bb1 bb1@2 a1@2", D: "bb1@3 bb1 f2@4",
  E: "bb1@5 ~ bb1@2 [eb2,f2]@4 db2@4", F: "eb2@3 eb2 bb2@4", G: "eb2@3 eb2 ab2@2 f2@2", H: "bb1@5 ~ bb1@2 db2@4 bb1@4",
  I: "eb2@5 ~ eb2@2 eb2@4 db2@4", J: "gb2@3 gb2 gb1@2 gb2@2", K: "gb2@3 gb2 ab2@2 gb2@2", L: "f2@3 f2 c2@2 eb2@2",
  M: "f1", N: "bb1@3 bb1 f2@3 [e2,f2]", O: "bb1@3 bb1 db2@2 eb2@2", P: "eb2@3 eb2 bb2@3 bb2", Q: "eb2@3 eb2 db2@2 c2@2",
  R: "bb1@3 bb1 f2@3 f2", S: "eb2@3 eb2 ab1@2 bb1@2", T: "bb1@3 ~@3 bb1@2 f2@8", U: "bb1@5 ~ bb1@2 db2@4 eb2@3 ~",
  V: "eb2@5 ~ eb2@2 bb2@8", W: "eb2@5 ~ eb2@2 ab1@4 bb1@4", X: "bb1@5 ~ bb1@2 f2@8", Y: "eb2@5 ~ eb2 ~ eb2@4 db2@4",
  Z: "gb1@6 gb1@2 gb1@3 ~ gb1@4", AA: "f1@2 eb2 f2 c2 eb2 bb1 c2", AB: "bb1@3 bb1 f1@3 f1", AC: "bb1@3 bb1 db2@2 d2@2",
  AD: "eb2@3 eb2 bb1@3 bb1", AE: "eb2@3 eb2 [db2,eb2]@2 c2@2", AF: "gb1@6 gb1@2 db2@3 ~ db2@4",
  AG: "gb1@6 gb1@2 db2@3 ~ gb1@4", AH: "[f1@5 ~@3]/2", AI: "bb1@6 bb1@2 f2@6 f2 ~", AJ: "eb2@3 eb2 ab1@2 a1@2",
  AK: "bb1@5 ~ bb1@2 db2@4 d2@4", AL: "gb1@3 gb2 gb1@2 gb2@2", AM: "bb1@6 f2@2 f2@3 ~@3 f2@2",
  AN: "bb1@6 bb1@2 f2@3 ~ f2@4", AO: "[bb1@11 ~@5]/2",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · electric guitar jazz · "e guitar"
const electric_guitar_jazz = note(`<
  ~@3 A@2 ~ B ~@3 C ~@2 D ~ E F@2 G@2 H@3 ~@8 I@4 ~@16 I@4 ~@8 E F@2 G@2 J@5 K@4 I@4 ~@17 I@4 ~@16
>`.pickRestart({
  A: "[~@15 bb2@3 ~@11 bb3@3]/2", B: "~@7 eb3@3 ~@6", C: "~@7 bb2@2 ~ bb4@3 ~@3, ~@9 f4@3 ~@4", D: "~@2 bb4@3 ~@11",
  E: "~@6 db4 ~ db4@3 ~@5", F: "[[db4,db5]@5 ~ c5@13 ~@5 db4@3 ~ db4@3 ~, ~@3 c4@5 ~@8]/2",
  G: "[[db4,db5]@6 c5@15 ~ db4 ~ db4@2 ~@2 db4@2 ~@2, ~@6 c4@11 ~@15]/2", // Db
  H: "[[db4,db5]@5 ~ [c4,c5]@7 ~@3 [bb4,db5]@31 ~, ~@15 f4@32 ~, ~@4 bb3 ~@7]/3", // Db C Bbm
  I: "[~@3 e4@2 ~@2 gb4@2 gb4@2 ~@5 f4@10 ~@6, ~@2 db4@7 ~ e4@6 ~@6 gb4@5 ~ gb4@7 ~@29, ~@12 db4@6 ~@6 ab4@9 ~@31]/4",
  J: "[[db4,db5]@5 ~ [c4,c5]@7 ~@9 f2@2 bb2@2 db3@2 eb3@2 f3@24 f2@2 bb2@2 db3@2 eb3@2 f3@5 ~@3 eb3@3 ~ eb3@2 db3@4, ~@15 f4@32 ~@21 f3@4 ~@8]/5", // Db C
  K: "[bb2@4 ~@2 f2@2 bb2@2 db3@2 eb3@2 f3@19 ~@5 f2@3 ~ db3@2 eb3@2 f3@4 ~@2 f3@2 eb3@3 ~ eb3@2 db3@4]/4",
})).s("gm_electric_guitar_jazz").gain(0.8)

// chords · electric guitar jazz · "e guitar" · soft notes
const electric_guitar_jazz_2 = note("<~@4 A ~ B ~@3 C D E@2 ~ F G H ~ I ~@43 F G H ~ I ~@4 J ~@2 K ~@42>".pickRestart({
  A: "~ db4@3 ~@12, bb3@3 ~@13", B: "~@8 bb3@3 ~@5", C: "~@8 db4@3 ~@5, ~@7 bb3@3 ~@6", D: "~@4 bb3@3 bb4@3 ~@6",
  E: "[~@17 gb4@3 ~@12, ~@15 [eb3,bb3]@3 ~@14, ~@16 eb4@3 ~@13]/2", F: "~@4 db4 ~@7 db4@3 ~", G: "~@6 db5 ~@9",
  H: "db4 ~ db4 ~ db4 ~ db4 ~@9", I: "~@4 db4 ~@11", J: "~@12 eb3 ~@3", K: "~@8 bb2@3 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.08)

// chords · acoustic guitar steel · "guitar 1"
const acoustic_guitar_steel = note(`<
  ~ A@3 B@4 C@5 D@2 ~@8 E F@8 G H I ~@8 J K@8 G H I ~@14 E F@8 G H I ~@2 L M N O@2 P@2 E F@8 G H I ~@8 Q R S T U@2 ~@2
>`.pickRestart({
  A: "[~@3 bb2@44 ~]/3",
  B: "[~@39 eb3@23 ~@2, ~@2 f4@13 g4@29 ~@20, ~@13 [eb3,bb3]@27 ~@24, ~@14 eb4@27 ~@23, ~@16 bb4@27 ~@21]/4", // Eb5
  C: "[~@2 [bb2,bb3]@37 ~@12 eb3@28 ~, ~@39 bb2@17 ~@24, ~@41 f4@13 ~@26, ~@21 bb4@6 ~@13]/5", D: "[~@2 bb4@29 ~]/2",
  E: "bb3",
  F: "[~@8 bb3@5 ~@3 bb3@14 ~@3 bb3@12 ~@3 bb3@19 ~@5 bb3@5 ~@3 bb3@14 ~@3 bb3@12 ~@3 bb4@2 ~ e4@4 bb4@2 db4@4 bb4 ~ bb4, ~@7 f4@6 ~@2 g4@14 ~ bb4@13 ~@4 f4@22 ~@2 f4@6 ~@2 g4@14 ~ bb4@13 ~@4 f4@17]/8",
  G: "~@2 e4@3 ~ e4@2 gb4@4 e4@4", H: "f4 c4@2 f4!2 c4@2 f4", I: "f4 ~@15", J: "[bb3,db4]",
  K: "[~@10 db4@2 eb4@2 ~@2 bb3@14 ~@3 bb3@12 ~@3 db4@21 ~@5 db4@2 eb4@2 ~@2 bb3@14 ~@3 bb3@12 ~@3 bb4@2 ~ e4@4 bb4@2 db4@4 bb4 ~ bb4, ~@6 f3@5 ~@37 bb3@19 ~@3 f3@5 ~@53, ~@7 f4@6 ~ eb4@2 ~@16 db4@15 f4@21 ~@3 f4@6 ~ eb4@2 ~@16 db4@15 f4@17, ~@8 bb3@4 ~@3 g4@14 ~ bb4@13 ~@29 bb3@4 ~@3 g4@14 ~ bb4@13 ~@21]/8",
  L: "~ db4", M: "eb4", N: "db4@7 ~", O: "[db4@11 ~ db4@4]/2", P: "[~ gb4, eb4@9 ~@7]/2",
  Q: "bb2 ~ bb2 [db4,f4,bb4] bb2 ~ bb2 [db4,f4,bb4], [db4,f4,bb4]@5 ~@3 [db4,f4,bb4]@5 ~@3, ~@2 bb3@4 ~@4 bb3@5 ~", // Bbm
  R: "~@2 bb2 [db4,f4,bb4] [bb2,f4] ~@2 [bb3,bb4], [bb2,db4,f4,bb4]@2 ~@3 bb3@2 ~, ~@2 bb3@5 ~ [db4,bb4]@6 ~@2, ~@3 bb2", // Bbm Bb5 Bb Bbm Gb
  S: "[eb3,eb4,g4,bb4]@15 ~, bb3 ~@15", T: "[bb3,eb4,gb4,bb4]@7 ~, eb3", U: "[[bb2,bb3,db4,f4,bb4]@27 ~@5]/2",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.7)

// chords · acoustic guitar steel · "guitar 1" · soft notes
const acoustic_guitar_steel_2 = note("<A@6 B@2 C@7 ~@7 D@2 E@8 ~@12 F@7 G ~@18 E@8 ~@13 E@8 ~@19>".pickRestart({
  A: "[~@18 bb3@45 ~@2 db4@15 ~@16, ~@15 bb4@11 ~@37 bb2@19 ~@14, ~ f4@3 ~@2, ~@17 db4@47 bb3@13 ~@19]/6",
  B: "[~@11 bb4 ~@19 bb4, ~ bb3@3, ~@9 eb4@18 ~@5, ~@10 gb4@17 ~@5]/2",
  C: "[~ db4@38 ~@42 gb4@30 ~, f4@4 ~@35 bb3@13 bb3@27 [eb3,bb3]@32 ~, ~@40 db4@13 eb4@27 eb4@31 ~, ~@27 g4@14 ~@15, ~@55 bb4@27 ~@30]/7", // Eb5
  D: "[~@15 gb4 db4@16, ~@15 f4@17, ~@15 bb4@12 ~@5]/2",
  E: "[~@8 db4@5 ~@3 eb4@13 ~@3 eb4@11 ~@4 db4@22 ~@3 db4@5 ~@3 eb4@13 ~@3 eb4@11 ~@8 d4 ~@12, ~@6 bb4@8 ~ bb4@14 ~@2 gb4@12 ~@3 bb4@22 ~@2 bb4@8 ~ bb4@14 ~@2 gb4@12 ~@3 bb4@2 ~@16, ~@111 db4@10 ~@7]/8",
  F: "[~@8 db4@2 ~@6 eb4@13 ~@3 eb4@2 ~@13 db4 ~@24 db4 ~@7 eb4@13 ~@3 eb4@2 ~@13 db4, ~@6 bb4@8 ~ bb4@14 ~@2 gb4@12 ~@3 bb4@22 ~@2 bb4@8 ~ bb4@14 ~@2 gb4@12 ~@3 bb4@2]/7",
  G: "~@3 d4 ~@12",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.7)

// chords · electric guitar clean · "guitar 2"
const electric_guitar_clean = note(`<
  ~@15 A B C D C E F@2 G@2 H@2 I@2 H@2 J@2 K L M@2 N@2 O@2 P Q@3 R@2 S@2 R@2 J@2 K L M@2 N@2 O@2 P T@2 B C D C E U@2 V@2
  W@2 X Y Z@2 AA AB@2 AC@7 AD@3 H@2 I@2 H@2 J@2 K L AE@4 AF@5 AG AH@2 AI@2 ~@2
>`.pickRestart({
  A: "bb2@4 ~@2 f3 ~ gb3@3 ~ f3@3 db4", B: "[db3,db4,f4,f5]@5 ~ [c3,f4,f5]@8 ~@2, ~@3 c4@5",
  C: "bb2@3 ~@3 f3 ~ gb3@3 ~ f3@3 db4", D: "[db3,db4,f4,f5]@5 ~ [c3,f4,f5]@9 ~, ~@6 c4@7 ~@3",
  E: "[db3,db4,f5]@5 ~ [f4,f5]@6 ~@3 bb2, f4@3 ~@3 c4@10, ~@3 c3@4 f3", // Db F
  F: "[f4 f4@29 ~@2, [bb2,f3]@15 ~, db4@25 ~@7]/2", G: "[~ [f4,bb4]@22 bb3 [db3,bb4]@7 bb3, bb2@3 ~@21 f4@4 ~@4]/2",
  H: "[~ bb4@15 bb4@14 ~@2, bb2@23 ~@9, g4 ~]/2", I: "[~ [f4,bb4]@22 bb3 [db3,bb4]@7 bb3, bb2@11 ~ f4@2 ~@2]/2",
  J: "[db4 ~ bb3@4 db4@2 gb3@4 e4 ~ e4@6 db4@2 eb4@3 ~ eb4@2 db4 ~@3, bb2@25 ~@7]/2",
  K: "f4@2 c4@3 ~ c4@2 f4@4 c4@2 ~ [f3,a3]", L: "[a3,c4,f4] f4 ~@14, f3@13 ~@3",
  M: "[[bb3,bb4]@3 [bb3,f4,bb4], f4 ~@31]/2", N: "[bb3 [bb3,bb4], g4@9 ~@7]/2", O: "[[bb3,f4,bb4]@3 [bb3,f4,bb4]]/2",
  P: "[bb3,g4]", // Eb
  Q: "[[bb3,bb4]@16 ~ bb4 ~@24 db4 ~ eb4@2 eb4 bb3, eb4@19 ~@20 bb3@2 ~@7, db5@15 ~ bb2@24 [bb3,f4]@4 ~@4, ~@8 db4@11 f3@2 ~@3, ~@17 f4@23 [db3,bb4]@8]/3", // Bb Bb5 Gb
  R: "[~ bb4@15 [db4,bb4]@14 ~@2, bb2@23 ~@9, g4 ~]/2", // Gb
  S: "[~@26 db4 ~ eb4@2 eb4 bb3, [bb2,db4]@11 f3@2 ~@3, ~ [f4,bb4]@22 bb3@2 ~@7, ~@24 [db3,bb4]@7 ~, ~@6 [bb3,f4] ~]/2", // Bbm Bb5 Gb Bb5
  T: "[db5@15 ~ bb2@4 ~@2 f3 ~ gb3@3 ~ f3@3 db4, [bb3,eb4,bb4]@19 ~@13]/2", // Eb5
  U: "[~@6 f2@2 bb2 ~ db3 ~ eb3 ~@10 bb3 [db3,bb4]@7 bb3, f3@7 f3@8 ~, bb2 ~@3, ~ [f4,bb4]@23 f4@4 ~@4]/2", // Gb Bb5
  V: "[~@6 f2 ~ bb2 ~ db3 ~ eb3 ~@7 f3@2 eb3@2 ~@2 eb3@2 db3@4, g4 ~, bb2@3 ~@11 f3@4 ~@14, ~ bb4@15 bb4@14 ~@2]/2",
  W: "[~@6 f2@2 bb2 ~ db3 ~ eb3 ~@10 [bb3,bb4] [db3,bb4,bb5]@7 [bb3,bb4], bb2@3 ~@11 f3@18, ~ f4@23 [db4,f4,f5]@4 ~@4, ~ bb4@21 ~@10]/2", // Bb Gb Bb Db
  X: "~@6 f2@2 ~@2 db3 ~ eb3 ~ f3@2, [bb3,g4,g5], bb2 ~, ~ [bb4,bb5]@15", // Eb Bb
  Y: "~@4 f3@2 eb3@2 ~@2 eb3@2 db3@3 ~, bb4@7 ~",
  Z: "[~@8 db4 ~ bb3@4 e4 ~@3 db4 ~@3 gb4@3 ~ e4@2 ~@4, bb2@25 ~@7, gb2@3 ~@5, ~@2 gb3 ~@5]/2",
  AA: "f4@2 c4@2 ~@2 f4@2 f4 ~ c4 ~@4 [f3,a3]", AB: "[[a3,c4,f4] f4 ~@30, [f2,c3]@15 ~, f3@13 ~@19]/2",
  AC: "[[bb3,db4,f4,bb4]@3 [bb3,bb4] [bb3,eb4,bb4]@2 [bb3,db4,bb4]@2 [bb3,db4,f4,bb4]@3 [bb3,bb4] [bb3,eb4,g4,bb4]@2, ~@24 [db4,f4]@11 ~@13 [eb4,gb4]@18 ~@22 [db4,f4]@11 ~@13, ~@8 g4@5 ~@15]/7", // Bbm Bb Eb5 Bbm Bb Eb Db Ebm …
  AD: "[bb3@16 ~ f4@22 bb3 [db3,bb4]@7 bb3, [gb4,bb4,db5]@17 bb4@3 ~@20 f4@4 ~@4, eb4@4 ~@12 bb2@25 ~@7]/3", // Gb
  AE: "[[bb3,bb4,db5]@3 [bb3,bb4] bb3@2 [bb3,bb4]@2, f4 ~@23 [f4,db5]@10 ~@14 db5@14 ~@2, ~@32 [g4,eb5]@19 ~@13]/4", // Bbm Bb Db Cm
  AF: "[[bb3,f4,bb4,db5]@12 [bb3,bb4]@4 [bb3,eb5]@8 [bb3,bb4]@8 bb3!2 bb2 [db4,f4,bb4] bb2 ~ bb2 [db4,f4,bb4], ~@24 [f4,db5]@10 ~@14 eb4@20 ~@4 [db4,f4,bb4]@5 ~@3, ~@32 g4@18 ~@14 f4@6 ~@4 bb3@5 ~, ~@48 db5@13 ~@3 bb4@4 ~@12, ~@64 db5 ~@15]/5", // Bbm Bb Eb5 Bb Bbm Db Bbm
  AG: "~@2 bb2 [db4,f4,bb4] [bb2,bb3,f4] ~@2 [bb3,bb4], [bb2,db4,f4,bb4]@2 ~@2 [db4,bb4]@3 ~, ~@2 bb3@5 ~ db5@8, ~@5 bb3@2 ~, ~@3 bb2", // Bbm Bb5 Bb Bbm Gb
  AH: "[[eb3,eb4,g4,bb4]@15 ~ [bb3,eb4,gb4,bb4,db5]@14 ~@2, eb5@9 ~@7, bb3 ~@15 eb3@16]/2", // Eb Ebm7
  AI: "[[bb3,db4,f4,bb4,db5] ~, bb2@27 ~@5]/2", // Bbm
})).s("gm_electric_guitar_clean").gain(0.8).pan(0.3)

// chords · electric guitar clean · "guitar 2" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@15 A ~ A ~ A B@3 C@4 D@4 E@4 F@3 G F@3 H@2 I@3 J@4 E@4 F@3 G F@3 K@2 ~ A ~ A L M@4 N@4 O@4 ~@9 P@4 D@4 E@4 Q@3 G Q@3
  R@2 ~@7
>`.pickRestart({
  A: "~@4 db3 ~@11", B: "[~@15 bb3@31 ~@2]/3", C: "[[bb3,db4]@23 db4@4 ~@4 eb4@16 ~ gb4@14 ~@2, ~@47 [bb3,eb4]@16 ~]/4",
  D: "[db4@23 db4@4 ~@4 eb4@16 ~ gb4@14 ~ bb3, bb3@19 ~@28 [bb3,eb4]@16 ~]/4", // Eb5
  E: "[bb3 [bb3,db4]@2 ~@29 a3@15 ~@17, gb4@15 ~ c4 ~@15, bb4@28 ~@3 a4@18 ~@15]/4", // Bbm
  F: "[db4@3 ~ [eb4,bb4]@2, ~@12 db4@5 ~@7]/3", G: "[eb4,gb4]", H: "[~@16 bb3@3 ~@13, gb4@19 ~@13]/2",
  I: "[~@7 db4@2 ~@6 eb4@16 ~ gb4@14 ~@2, ~@31 bb3@16 ~, ~@31 eb4@2 ~@15]/3",
  J: "[bb3@19 ~@4 db4@2 ~@6 eb4@16 eb4 gb4@14 ~ bb3, ~@47 bb3@16 ~]/4", K: "[gb4@19 ~ db3 ~@11]/2", L: "~@15 bb3",
  M: "[[bb3,db4]@23 db4@4 ~@4 eb4@16 ~@13 eb3 ~@3, ~@47 [bb3,eb4]@16 ~, ~@24 gb4@7 ~]/4", // Bbm Eb5
  N: "[db4@23 db5@4 ~@13 bb2@2 ~@6 gb4@14 ~ bb3, bb3@19 ~@4 db4 ~@7 [eb4,eb5]@16 eb4@15 ~@2, ~@47 bb3@8 ~@9]/4", // Eb
  O: "[bb3 bb3@9 ~@22 a3@15 ~@17, bb4@28 ~@3 a4@18 ~@15, gb4@21 ~@43, ~ db4@2 ~@29 c4@2 ~@30]/4",
  P: "[db4@23 db4@4 ~@4 eb4@16 ~ gb4@14 ~@2, bb3@5 ~@42 [bb3,eb4]@16 ~]/4", // Eb5
  Q: "[db4@3 ~ [eb4,bb4]@2, ~@24 db4@11 ~@13]/3", R: "[~@8 db4@3 ~@5, gb4@5 ~@3]/2",
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.3)

// chords · lead 8 bass lead · "syn lead"
const lead_8_bass_lead = note("<~ A@7 B@7 ~@65 C@2 ~@36>".pickRestart({
  A: "[~@61 [eb1,eb2,bb2]@51, ~@3 [bb1,f2]@60 ~@49]/7", B: "[~@2 [bb1,f2]@37 [bb1,bb2]@12 [eb1,eb2]@54 ~@7]/7",
  C: "[f2@31 ~]/2",
})).s("gm_lead_8_bass_lead").gain(0.56)

// other · melodic tom · "elec tom"
const melodic_tom = note(`<
  ~@15 A B A C A C A@2 D E D@3 E D@2 A B A F G H G I G I G@3 H G I G I G@3 H G F A B A C A C A@2 J K L@2 M N A O A O A O
  A O A B A F ~ P Q P R P R P@2 A B A C A C A@2 S T S U V W V X V X V@3 W V X Y ~@3
>`.pickRestart({
  A: "bb2 ~ bb2!3 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~", B: "gb2 ~ gb2!3 ~ f2@2 ~@2 f2 ~ f2 ~ f2 ~",
  C: "gb2 ~ gb2!3 ~ f2@3 ~ f2 ~ f2 ~ f2 ~", D: "b4 ~ b4!3 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~",
  E: "g4 ~ g4!3 ~ gb4@3 ~ gb4 ~ gb4 ~ gb4 ~", F: "gb2 ~@15", G: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  H: "gb2 ~ gb2 ~ gb2 ~ f2@2 ~@2 f2 ~ f2 ~ f2 ~", I: "gb2 ~ gb2 ~ gb2 ~ f2@3 ~ f2 ~ f2 ~ f2 ~",
  J: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ [b2,c3] ~ [c3,g3] ~ [f3,g3,f5,g5] ~", // Cmaj7 C5 Fsus2
  K: "[g3,a6,b6] ~ g3 ~ [c3,g3] ~ [c3,g3] ~ c3 ~ [c3,g5] ~ [g5,b6] ~ [g5,b6,c7] ~", // G C5 G Cmaj7
  L: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ g5 ~ g5 ~ g5 ~", M: "c3 ~@3 c3 ~ c3 ~ c3 ~ c3 ~ [f5,g5] ~ [c3,g5] ~",
  N: "c3 ~ [c3,d3] ~ c3 ~ c3 ~@3 [g5,a5] ~ g5 ~ [g6,a6] ~", O: "gb2 ~ gb2 ~ gb2 ~ f2@2 ~@2 f2 gb2 f2 ~ f2 ~",
  P: "db4 ~ db4!3 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4 ~", Q: "a3 ~ a3!3 ~ ab3@2 ~@2 ab3 ~ ab3 ~ ab3 ~",
  R: "a3 ~ a3!3 ~ ab3@3 ~ ab3 ~ ab3 ~ ab3 ~", S: "ab-1 ~ ab-1!3 ~ ab-1 ~ ab-1 ~ ab-1 ~ ab-1 ~ ab-1 ~",
  T: "e-1 ~ e-1 ~ e-1 ~ eb-1@2 ~@2 eb-1 ~ eb-1 ~ eb-1 ~", U: "e-1 ~@15",
  V: "bb8 ~ bb8!3 ~ bb8 ~ bb8 ~ bb8 ~ bb8 ~ bb8 ~", W: "gb9 ~ gb9!3 ~ f9@2 ~@2 f9 ~ f9 ~ f9 ~",
  X: "gb9 ~ gb9!3 ~ f9@3 ~ f9 ~ f9 ~ f9 ~", Y: "bb8 ~@15",
})).s("gm_melodic_tom").gain(0.8).pan(0.2)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@15 A B C D@2 E@3 F@2 G H I J G K ~@4 L@3 M L@3 M N@2 G H I J G K ~@4 L@3 M L@3 M O@2 C D@2 P Q@2 G H I J G K ~@5 R@3
  M S@3 M T@2 G H I J G K ~@4 L@3 M L@3 M U@3 V W@4
>`.pickRestart({
  A: "[f3,bb3,db4]", B: "[gb3,bb3,db4]@6 [f3,a3,c4]@9 ~", C: "[f3,bb3,db4]@15 ~",
  D: "[[gb3,db4]@6 [a3,c4]@8 ~@2 [bb3,db4]@15 ~, ~@3 f3@12 ~]/2", // Gb5 Am Bbm
  E: "[[bb3,db4]@6 [a3,c4]@8 ~@2 [bb3,db4]@31 ~, gb3@4 ~@2 f3@41 ~]/3", F: "[~@15 bb3@9 f3@8, [bb2,f3]@23 ~@9]/2",
  G: "[bb2,g3]", H: "[bb2,gb3,bb3]", I: "[bb2,f3]@15 ~", J: "[f3,bb3]@8 f3@7 ~", K: "[bb2,bb3]",
  L: "[[f3,bb3,db4,db5]@3 f3 [eb3,g3,bb3]@2, ~@12 [db4,db5]@5 ~@7]/3", M: "[eb3,gb3,bb3], db5@7 ~",
  N: "[~@15 bb3@9 f3@8, [bb2,f3,db5]@23 ~@9]/2", // Bbm
  O: "[[f3,db4]@16 [gb3,bb3,db4]@6 [f3,a3,c4]@9 ~, db5@23 ~@9, bb3 ~@31]/2", P: "[bb3,db4]@3 [a3,c4]@4 ~, gb3@2 ~ f3@5",
  Q: "[~@16 bb3@8 f3@7 ~, ~ [bb2,f3]@23 ~@8]/2", R: "[[f3,bb3,db4,bb4]@3 f3 [eb3,g3,bb3]@2, ~@12 [db4,db5]@5 ~@7]/3",
  S: "[[f3,bb3,db4,bb4,db5]@3 f3 [eb3,g3,bb3]@2, ~@12 [db4,db5]@5 ~@7]/3", // Bbm Eb Db
  T: "[bb3@15 bb3@9 f3@8, [bb2,f3,db4,db5]@3 ~]/2", // Bbm
  U: "[[f3,db4,bb4,db5]@3 f3 [eb3,g3,bb3]@2, bb3 ~@23 [db4,f5]@10 ~@14]/3", V: "[eb3,gb3,bb3], gb5@7 ~",
  W: "[[f3,bb3,db4]@49 ~@15, db5 ~@63]/4", // Bbm
})).s("gm_string_ensemble_1").gain(0.64).pan(0.8)

// chords · string ensemble 1 · "strings" · soft notes
const string_ensemble_1_soft = note(`<
  ~@18 A ~@4 B@2 C D E@2 F G ~@5 H I ~@2 H I ~ B@2 C D E@2 F G ~@5 H I ~@2 H I ~@4 A ~@2 J@2 C D E@2 F G ~@6 H I ~@2 H I
  ~ B@2 C D E@2 F G ~@5 H I ~@2 H I ~@2 H K ~@5
>`.pickRestart({
  A: "bb3@5 ~ d4 ~@9", B: "[db3@23 ~ [bb2,db3]@8]/2", C: "~ eb3@3, bb3", D: "eb3",
  E: "[[db3,bb3]@15 [bb2,db3]@8 ~ [bb2,db3]@8]/2", F: "[eb3,bb3]", G: "[eb3,gb3]", H: "~ bb3", I: "eb5",
  J: "[~ db3@23 [bb2,db3]@8]/2", K: "g5",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@15 A B A B A B A@11 B A C A@17 B A C A@9 B A B A B A@9 B A C ~ A@19 C A@12 C ~@3
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@4", C: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@33 A ~@19 A ~@24 B C ~@20 A ~@17>".pickRestart({
  A: "x!8", B: "~@7 x", C: "x!7 ~",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@14 A@2 ~ A ~ A ~@2 A ~@8 A ~ A@2 ~@7 B ~@8 A ~ A@2 ~@7 B A ~ A ~ A ~@9 A ~ A ~ A ~@16 A ~ A@2 ~@7 B ~@8
>`.pickRestart({
// … 45 more lines

More by Chris Isaak