Strudelify

This Guy's in Love With You

Herb Alpert

KeyD♭ majorTempo87 bpm
0:00/0:00
// This Guy's in Love With You — Herb Alpert
// 87 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: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "CHORUSED PIANO" epiano2 (copy of ch 7 "PIANO" piano)
// note: Full arrangement: all 80 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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 · acoustic guitar steel · "GUITAR STRUM"
const acoustic_guitar_steel = note(`<
  ~ A B@2 C A B D E F G H I J E K L A B@2 C A B D E F G H I J E K L ~@9 M@8 N@5 O@6 ~@9 P Q@8 ~
>`.pickRestart({
  A: "~@8 db4@8 ~@9 f4@7, db3!2, ~@3 [ab3,db4]", B: "~@8 [bb3,db4]@8 ~@9 f4@7, gb2!2, ~@3 [bb3,db4]",
  C: "~@9 eb4@7 ~@9 eb4@7, b2!2, ~ [gb3,b3] ~ [gb3,b3]", D: "~@9 f4@7 ~@9 f4@7, f2!2, ~ [bb3,c4] ~ [a3,c4]",
  E: "~@9 f4@7 ~@9 f4@7, bb2!2, ~ [bb3,db4] ~ [bb3,db4]", F: "~@9 eb4@7 ~@9 eb4@7, ab2!2, ~ [ab3,b3] ~ [ab3,b3]",
  G: "~@9 gb4@7 ~@9 f4@7, db3!2, ~ [ab3,db4] ~ [ab3,db4]", H: "~@9 gb4@7 ~@9 gb4@7, gb2!2, ~ [bb3,db4] ~ [bb3,db4]",
  I: "~@9 gb4@7 ~@9 gb4@7, gb2!2, ~ [a3,db4] ~ [a3,db4]", J: "~@9 f4@7 ~@9 f4@7, f2!2, ~ [ab3,c4] ~ [ab3,c4]",
  K: "~@9 gb4@7 ~@9 gb4@7, eb3!2, ~ [bb3,eb4] ~ [bb3,eb4]", L: "~@9 gb4@7 ~@9 gb4@7, ab2!2, ~ [bb3,db4] ~ [bb3,db4]",
  M: "[~@31 [db4,f4]@42 ~@9 db4@8 ~@9 f4@7 ~@8 [bb3,db4]@8 ~@8 [bb3,db4,f4]@8 ~@8 [bb3,db4]@8 ~@8 [db4,f4]@7 ~@9 [b3,eb4]@7 ~@9 [b3,eb4]@7 ~@8 db4@8 ~@9 f4@7 ~@8 [bb3,db4]@8 gb2@7, ~@29 db3@41 ~@4 db3@16 db3@16 gb2@16 gb2@16 gb2@16 gb2@16 ~@7 gb3@8 ~@8 gb3@8 ~@24 [ab3,db4]@8 ~@23, ~@30 ab3@42 ~@26 [ab3,db4]@8 ~@55 bb3@8 b2@16 b2@16 db3@16 db3@16 gb2@16 ~@7]/8", // Db Bbm Db B Bbm Db5
  N: "[~ [bb3,db4,f4]@8 ~@8 [bb3,c4,f4]@8 ~@8 [c4,f4]@7 ~@9 [db4,f4]@7 ~@9 [db4,f4]@7 ~@9 eb4@7 ~@9 eb4@7 ~@9 gb4@7 ~@8 [ab3,db4,f4]@8 ~@8 [bb3,db4,gb4]@8 gb2@8, ~@9 f2@16 f2@16 ~@7 bb3@8 ~@8 bb3@8 ~@8 [ab3,b3]@8 ~@8 [ab3,b3]@8 ~@8 [ab3,db4]@8 ~@40, ~@4 a3 bb2@2 bb2@2 ab2@2 ab2@2 db3@2 db3@2 gb2@2 ~]/5", // Bbm Bbsus2 F5 Db Gb Abm Db5
  O: "[[bb3,db4,gb4]@7 ~@9 [db4,gb4]@7 ~@9 [db4,gb4]@7 ~@9 f4@7 ~@9 f4@7 ~@9 f4@7 ~@8 [bb3,db4,f4]@8 ~@8 [bb3,eb4,gb4]@8 ~@8 [bb3,eb4,gb4]@7 ~@9 [db4,gb4]@7 ~@9 [db4,gb4]@8 ~@25, ~@7 gb2@16 gb2@16 f2@16 f2@16 bb2@16 bb2@16 eb3@16 eb3@16 ~@7 bb3@8 ~@8 bb3@8 ~@26, ~@15 a3@8 ~@8 a3@8 ~@8 [ab3,c4]@8 ~@8 [ab3,c4]@8 ~@8 [bb3,db4]@8 ~@47 ab2@16 ab2@16 ~@26]/6", // Gb Gb5 Bbm Ebm Gb5 Ab Bbm
  P: "~@3 f4@29, ~ db3@31, ~ [ab3,db4]@15", // Db5
  Q: "[~@12 db4@7 ~@9 [db4,f4]@7 ~@9 db4@7 ~@9 [db4,f4]@7 ~@9 db4@7 ~@9 [db4,f4]@7 ~@9 eb4@7 ~@9 eb4@7 ~@8 db4@8 ~@9 f4@7 ~@8 [bb3,db4]@8 ~@8 [bb3,db4,f4]@8 ~@8 [bb3,c4,f4]@8 ~@8 [a3,c4,f4]@8 ~@8 [bb3,db4,f4]@7 ~@9 [db4,f4]@5, ~@4 db3@15 db3@16 gb2@16 gb2@16 gb2@16 gb2@16 b2@16 b2@16 db3@16 db3@16 gb2@16 gb2@16 f2@16 f2@16 bb2@15 bb2@14, ~@27 ab3@8 ~@8 bb3@8 ~@8 bb3@8 ~@8 bb3@8 ~@8 bb3@8 ~@8 [gb3,b3]@8 ~@8 [gb3,b3]@8 ~@24 [ab3,db4]@8 ~@87 bb3@6]/8", // Db Bbm Bbsus2 F Bbm Db B5 Db5
})).s("gm_acoustic_guitar_steel").gain(0.13)

// chords · acoustic guitar steel · "GUITAR STRUM" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~ A B@2 ~ A B ~@10 A B@2 ~ A B ~@21 C D@2 ~ E D ~@21 F G@2 ~ F H ~@3
>`.pickRestart({
  A: "~@9 f4@8 ~@15, ~ ab3 ~@2", B: "~@9 f4@8 ~@15", C: "~@19 f4@8 ~@5, ~@9 ab3@4 ~@3", D: "~@9 f4@4 ~@3",
  E: "~@9 f4@4 ~@3, ~@17 ab3@8 ~@7", F: "~@3 f4@2 ~@3, ~@11 ab3@8 ~@13", G: "~@3 f4@2 ~@3", H: "~@11 f4@8 ~@13",
})).s("gm_acoustic_guitar_steel").gain(0.08)

// bass · acoustic bass · "ACC. BASS"
const bass = note(`<
  A B C D E F G H I J B K@2 L M N O B C D E F G H I J B K@2 L M N O P@4 Q R S T U ~@2 V@4 W@4 X@5 Y@8 Z@2 AA@2 ~@2 AB@2
  AC AD AE@2 AF AG ~
>`.pickRestart({
  A: "~@29 ab2@3", B: "db2@15 ~ db2@15 ~", C: "gb2@13 gb2 ~@2 gb2@15 ~", D: "gb2@16 gb2@13 gb2 ~@2", E: "b1 ~",
  F: "db2!2", G: "gb2@15 ~ gb2@13 gb2 ~@2", H: "f2@10 ~@3 c2@2 ~ f2@11 ~@2 f2@3", I: "~@16 bb1@11 bb1@2 a1 ~@2",
  J: "ab1@16 ab1@13 ~@3", K: "gb2@15 ~ gb2@15 ~", L: "f2@15 ~ f2@11 f2@2 f2 ~@2", M: "bb1@15 ~ bb1@15 ~",
  N: "eb2@15 ~ eb2@13 eb2 ~@2", O: "ab2@16 ab2@13 ab2 ~@2",
  P: "[db2@8 db2@5 db2@11 db2@5 gb1@10 ~ gb1@5 gb1@8 gb1@8 ~ gb1@2]/2", Q: "db2@8 db2@5 db2@10 ~ c2@5 bb1 ~@2",
  R: "bb1@8 ~@5 bb1@10 ~ bb1@5 bb1 ~@2", S: "bb1@13 bb1 ~@2 eb2@11 ~@2 eb2 ~@2", T: "ab1@16 ab1@5 ab1@5 ~ ab1@5",
  U: "ab1 ~", V: "[~@10 db2@15 ~ db2@15 ~ gb2@13 gb2 ~@2 gb2@15 ~ gb2@16 gb2@13 gb2 ~ b1@16 ~@7]/4",
  W: "[~@9 db2@16 db2@16 gb2@15 ~ gb2@13 gb2 ~@2 f2@10 ~@3 c2@2 ~ f2@11 ~@2 f2@3 ~@15 bb1@8]/4",
  X: "[~@3 bb1@2 a1 ~@2 ab1@16 ab1@13 ~@3 db2@15 ~ db2@15 ~ gb2@15 ~ gb2@14 ~ gb2@15 ~ gb2@15 ~ f2@15 ~ f2@9]/5",
  Y: "[~@2 f2@2 f2 ~@2 bb1@15 ~ bb1@15 ~ eb2@15 ~ eb2@13 eb2 ~@2 ab2@15 ab2@13 ~ ab2 ~ db2@8 db2@5 db2@11 db2@5 gb1@10 ~ gb1@5 gb1@8 gb1@8 ~ gb1@2 db2@8 db2@5 db2@11 db2@5 gb1@10 gb1@5 ~ gb1@8 gb1@8 gb1@2 db2@8 db2@5 ~ db2@10 c2@3]/8",
  Z: "[~@2 bb1 ~@2 bb1@8 ~@5 bb1@10 ~ bb1@5 bb1 ~@2 bb1@13 bb1 ~@2 eb2@11]/2",
  AA: "[~@2 eb2 ~@2 ab1@15 ab1@5 ~ ab1@5 ab1@5 ab1@16 ~@12]/2", AB: "[~@4 db2@15 ~ db2@15 gb2@13 ~ gb2 ~ gb2@13]/2",
  AC: "~@3 gb2@16 gb2@13", AD: "~ gb2 ~ b1@16 ~@13", AE: "[~@3 db2@16 db2@16 gb2@15 ~ gb2@13]/2",
  AF: "gb2 ~@2 f2@10 ~@3 c2@2 ~ f2@11 ~@2", AG: "f2@3 ~@16 bb1@11 ~@2",
})).s("gm_acoustic_bass").gain(0.22).pan(0.1)

// bass · acoustic bass · "ACC. BASS" · soft notes
const bass_soft = note("<~@4 A ~@3 B ~@11 A ~@3 B ~@22 C@2 ~@2 D ~@22 E F ~@2 G ~>".pickRestart({
  A: "~@16 b1@13 b1 ~@2", B: "bb1 ~", C: "[~@25 b1@13 ~ b1 ~@24]/2", D: "~ bb1@2 ~", E: "~@19 b1@13", F: "b1 ~@31",
  G: "~@3 bb1@16 ~@13",
})).s("gm_acoustic_bass").gain(0.13).pan(0.1)

// chords · string ensemble 2 · "STRINGS II"
const string_ensemble_2 = note("<~@13 A B C D ~@12 A B C D ~@23 E@5 ~@19>".pickRestart({
  A: "[c4,f4,ab4]", B: "[db4,f4,bb4]", C: "[gb4,bb4,db5]", D: "[gb4,bb4,eb5]",
  E: "[~@7 [c4,f4,ab4]@32 [db4,f4,bb4]@32 [gb4,bb4,db5]@31 [gb4,bb4,eb5]@32 ~@26]/5", // Fm Bbm Gb Ebm
})).s("gm_string_ensemble_2").gain(0.19).pan(0.8)

// chords · piano
const piano = note(`<
  A B@2 C D E@3 F G H I J K L M N B@2 C D E@3 F G H I J K L M O P@4 Q R S T U V ~ W@8 X Y Z@8 AA@2 AB@6 ~ AC@4 AD@2 AE@2
  ~
>`.pickRestart({
  A: "~@29 ab2@3",
  B: "[~@8 [ab3,c4,db4,f4]@5 [ab3,c4,db4,f4]@10 ~ [c4,db4,f4]@3 ~@13 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5 [bb3,db4,f4]@2 ~, db2 gb2, ~@24 ab3@5 [bb3,db4,f4]@11 ~@24]/2", // Dbmaj7 Bbm Db Bbm
  C: "~@8 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5 [bb3,db4,f4]@3, gb2", // Bbm Db Bbm
  D: "~@8 [bb3,b3,eb4]@5 [bb3,b3,eb4]@8 [ab3,b3,eb4]@3 [bb3,b3,eb4]@5 ab2@3, b2@29 ~@3", // Bmaj7 Abm Bmaj7
  E: "[~@8 [ab3,c4,db4,f4]@5 [ab3,c4,db4,f4]@10 ~ [c4,db4,f4]@3 ~@13 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5 gb2@2 ~ [bb3,c4,f4]@8 [bb3,c4,f4]@8 [a3,c4,f4]@8 ~@5 f3@3, db2@32 gb2@29 ~@2 f2@27 ~@6, ~@24 ab3@5 [bb3,db4,f4]@11 ~@48 [a3,c4,f4]@8]/3", // Dbmaj7 Bbm Db Bbm Bbsus2 F Bbm F
  F: "[bb3,db4,f4]@5 [bb3,db4,f4]@8 [bb3,db4,f4]@8 ab3@3 [bb3,db4,f4]@5 bb2@2 ~, bb2@7 ~", // Bbm
  G: "[ab3,b3,eb4]@8 [ab3,b3,eb4]@8 [ab3,b3,eb4]@8 ~@5 ab2@2 ~, ab2@27 ~@5, ~@3 [ab3,b3,eb4]", // Abm
  H: "[ab3,db4,gb4]!2 [ab3,db4,f4]!2, db2@15 ~", // Dbsus4 Db
  I: "[bb3,db4,f4]@7 ~ [bb3,db4,f4]@5 gb2@2 ~ [bb3,db4,f4]@4 ~ [bb3,db4,f4]@8 gb2@2 ~", // Bbm
  J: "[a3,db4,gb4]@7 ~ [a3,db4,gb4]@5 gb2@2 ~ [a3,db4,gb4]@5 [a3,db4,gb4]@8 gb2@2 ~", // Gbm
  K: "[ab3,c4,f4]@7 ~ [ab3,c4,f4]@7 ~ [ab3,c4,f4]@5 eb3@3 [f3,ab3,c4,f4]@5 f3@2 ~, f3@21 ~@11", // Fm
  L: "[bb3,db4,f4]@7 ~ [bb3,db4,f4]@8 [bb3,db4,f4]@7 ~ [bb3,db4,f4]@4 ~ bb2 ~@2, bb2@7 ~", // Bbm
  M: "[eb4,gb4]@7 ~ [eb4,gb4]@7 ~ [eb4,gb4]@5 db4@3 [eb3,eb4,gb4]@4 ~ eb3 ~@2, bb3@27 ~@5, [eb3,gb3]@3 ~", // Ebm
  N: "[bb3,db4,gb4]@7 ~ [bb3,db4,gb4]@7 ~ [bb3,db4,gb4]@5 ~@3 [bb3,db4,gb4]@6 ~@2, ab2@17 ~@4 ab2@9 ~@2", // Gb
  O: "[bb3,db4,gb4]@7 ~ [bb3,db4,gb4]@7 ~ [bb3,db4,gb4]@5 ~@3 [bb3,db4,gb4]@5 ~ [f1,f2] [eb1,e1,eb2,e2], ab2@17 ~@4 ab2@7 ~@4", // Gb F Emaj7
  P: "[[db1,db2]@8 [db1,db2,ab3,c4,db4,f4]@5 [db1,db2,ab3,c4,db4,f4]@11 [db1,db2,ab3,c4,db4,f4]@5 gb2@6 ~@3 [gb2,c7]@2 [gb2,bb4,bb6]@5 [gb2,ab4,ab6]@8 [gb2,gb4,gb6]@6 ~@5 [db1,db2,f6]@8 [db1,db2,ab3,c4,db4,f4]@5 [db1,db2,ab3,c4,db4,f4]@11 [db1,db2,ab3,c4,db4,f4]@5 gb2@6 ~@3 [gb2,db7]@2 [gb2,db5,db7]@5 [gb2,c5,c7]@8 [gb2,bb4,bb6]@6 ~@3 [gb2,gb6]@2, ~@29 [gb1,bb3,db4,f4]@10 ~@54 [gb1,bb3,db4,f4]@10 ~@25, ~@35 db5@2 c5@2 ~@20 f4@2 eb4@2 f4@8 ~@28 db5@2 db5@2 ~@20 ab4@2 gb4@2 ~, ~@18 [gb2,db7] ~@11 [gb2,f6] [gb2,eb6] ~@18 [gb2,db7] ~@11 [gb2,ab6] ~]/4", // Db Dbmaj7 Gbdim Gb Gbsus2 Gb Db Dbmaj7 …
  Q: "[db2,db3,f4,f6]@8 [db2,ab3,db4,f4]@5 [db2,ab3,db4,f4]@11 [c2,ab3,c4,f4]@7 ~", // Db Fm
  R: "[bb1,bb3,db4,f4]@13 [bb1,bb3,db4,f4]@11 [bb1,bb3,db4,f4]@5 [bb1,bb3,db4,f4]@3", // Bbm
  S: "[bb1,bb3,db4,f4] [eb2,bb3,eb4,g4]", // Bbm Eb
  T: "[ab1,c4,eb4,ab4]@16 [eb2,bb3,eb4,g4]@5 [ab2,c4,eb4,ab4]@5 ~ [eb2,bb3,eb4,g4]@5", // Ab Eb Ab Eb
  U: "[ab2,c4,eb4,gb4]@16 ~@4 ab4@2 ~@3 [f5,gb5] ~ eb5@3 ~@2, ~@12 bb5 ~@3", // Ab7 Gbmaj7
  V: "~@7 eb4@4 ~@21, ~@5 bb4@2 f4 ~@24, ~@3 gb4 ~@12",
  W: "[~@18 [ab3,c4,db4,f4]@5 [ab3,c4,db4,f4]@10 ~ [c4,db4,f4]@3 ~@13 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5 [bb3,db4,f4]@2 ~@9 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5 [bb3,db4,f4]@2 ~@8 [bb3,b3,eb4]@5 ~ [bb3,b3,eb4]@8 [ab3,b3,eb4]@2 [bb3,b3,eb4]@5 ~ ab2@2 ~@8 [ab3,c4,db4,f4]@5 [ab3,c4,db4,f4]@10 ~ [c4,db4,f4]@3 ~@13 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5 gb2@2 ~ [bb3,c4,f4]@8 [bb3,c4,f4]@8 [a3,c4,f4]@8 ~@5 f3@2 [bb3,db4,f4]@5 ~ [bb3,db4,f4]@8 [bb3,db4,f4]@8 ab3@2, ~@10 db2@32 gb2@32 gb2@32 ~@31 db2@32 gb2@29 ~@2 f2@27 ~@5 bb2@24, ~@34 ab3@5 [bb3,db4,f4]@11 ~@55 b2@29 ~@27 ab3@5 [bb3,db4,f4]@11 ~@48 [a3,c4,f4]@8 ~@23]/8", // Dbmaj7 Bbm Db Bbm Db Bbm Bmaj7 Abm …
  X: "[bb3,db4,f4]@5 bb2@2 ~ [ab3,b3,eb4]@8 [ab3,b3,eb4]@8 [ab3,b3,eb4]@8, ~ ab2@3", // Bbm Abm
  Y: "~@5 ab2@2 ~ [ab3,db4,gb4]@8 [ab3,db4,gb4]@8 [ab3,db4,f4]@8, [ab3,b3,eb4] db2@3", // Dbsus4 Db Abm
  Z: "[[ab3,db4,f4]@8 [bb3,db4,f4]@7 ~ [bb3,db4,f4]@5 gb2@2 ~ [bb3,db4,f4]@4 ~ [bb3,db4,f4]@8 gb2@2 [a3,db4,gb4]@7 ~ [a3,db4,gb4]@5 ~ gb2@2 [a3,db4,gb4]@5 ~ [a3,db4,gb4]@8 gb2@2 [ab3,c4,f4]@7 ~ [ab3,c4,f4]@7 ~ [ab3,c4,f4]@5 eb3@3 [f3,ab3,c4,f4]@5 f3@2 ~ [bb3,db4,f4]@7 ~ [bb3,db4,f4]@8 [bb3,db4,f4]@7 ~ [bb3,db4,f4]@4 ~ bb2 ~@2 [eb4,gb4]@7 ~ [eb4,gb4]@7 ~ [eb4,gb4]@5 db4@2 ~ [eb4,gb4]@3 ~@2 eb3 ~ [bb3,db4,gb4]@7 ~ [bb3,db4,gb4]@7 ~ [bb3,db4,gb4]@5 ~@3 [bb3,db4,gb4]@5 ~ [f1,f2] [e1,e2] [db1,db2]@8 [db1,db2,ab3,c4,db4,f4]@5 ~ [ab3,c4,db4,f4]@10 [db1,db2,ab3,c4,db4,f4]@5 gb2@6 ~@5 [gb2,bb6]@5 [gb2,ab4,ab6]@8 [gb2,gb4,gb6]@5, ~@71 f3@21 ~@11 bb2@28 ~@4 bb3@27 ~@71 db5@2 c5@2 bb4@5 ~@14, ~@135 [eb3,gb3]@23 eb3@4 ~@4 ab2@17 ~@5 ab2@7 ~@3 [eb1,eb2] ~@12 [db1,db2]@11 ~@5 [gb1,bb3,db4,f4]@10 ~@19, ~@117 [gb2,db7] [gb2,c7] ~@9]/8", // Db Bbm Gbm Fm Bbm Ebm Gb F …
  AA: "[~@6 [db1,db2,f6]@8 [db1,db2,ab3,c4,db4,f4]@5 [db1,db2,ab3,c4,db4,f4]@10 ~ db1@5 gb2@6 [gb2,db5,db7]@2 [gb2,db5,db7]@2 [gb2,db5,db7]@5 ~ [gb2,c7]@7 ~ [gb2,bb6]@5, ~ f4@2 eb4@2 f4@8 ~@37 c5@8 bb4@6, ~@2 [gb2,f6]@2 [gb2,eb6]@2 ~@23 [db2,ab3,c4,db4,f4]@5 ~ [gb1,bb3,db4,f4]@10 ~@19]/2", // Db Dbmaj7 Gb5 Gbdim Gb Gbmaj7 Ebm Dbmaj7 …
  AB: "[~ [gb2,ab4,ab6]@2 [gb2,gb4,gb6]@2 [db2,db3,f4,f6]@8 [db2,ab3,db4,f4]@5 ~ [db2,ab3,f4]@10 [c2,ab3,c4,f4]@7 ~ [bb1,bb3,db4,f4]@13 [bb1,bb3,db4,f4]@11 [bb1,bb3,db4,f4]@5 [bb1,bb3,db4,f4]@3 [bb1,bb3,db4,f4]@16 [eb2,bb3,eb4,g4]@16 [ab1,c4,eb4,ab4]@15 [eb2,bb3,eb4,g4]@5 ~ [ab2,c4,eb4,ab4]@5 [eb2,bb3,eb4,g4]@5 [ab2,c4,eb4,gb4]@16 ~@5 ab4@2 ~@2 gb5 f5 eb5@3 ~@9 eb4@4 ~@17, ~@18 db4@10 ~@128 bb5@2 ~@11 bb4@2 f4 ~@20, ~@85 gb4 ~@10]/6", // Gbsus2 Gb Db Fm Bbm Eb Ab Eb …
  AC: "[~@12 [ab3,f4]@5 [ab3,c4,db4,f4]@10 [c4,db4,f4]@3 ~@13 [bb3,db4,f4]@5 ~ [bb3,db4,f4]@8 [ab3,db4,f4]@2 [bb3,db4,f4]@5 ~ [bb3,db4,f4]@2 ~@8 [bb3,db4,f4]@5 ~ [bb3,f4]@8 [ab3,db4,f4]@2 [bb3,db4,f4]@5 [bb3,db4,f4]@3 ~@8 [bb3,b3,eb4]@5 [bb3,b3,eb4]@8 [ab3,b3,eb4]@3 [bb3,b3,eb4]@5, ~@4 db2@31 gb2@32 gb2@32 b2@29, ~@11 [c4,db4]@5 ~@11 ab3@5 ~ [bb3,db4,f4]@10 ~@37 db4@8 ~@40]/4", // Db Dbmaj7 Bbm Db Bbm Bb5 Db Bbm …
  AD: "[ab2@3 ~@8 [ab3,c4,db4,f4]@5 [ab3,c4,db4,f4]@10 ~ [c4,db4,f4]@3 ~@13 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [ab3,db4,f4]@3 [bb3,db4,f4]@5, ~@3 db2@32 gb2@29, ~@27 ab3@5 [bb3,db4,f4]@11 ~@21]/2", // Dbmaj7 Bbm Db Bbm
  AE: "[gb2@2 ~ [bb3,c4,f4]@8 [bb3,c4,f4]@8 [a3,c4,f4]@8 ~@5 f3@3 [bb3,db4,f4]@5 [bb3,db4,f4]@8 [bb3,db4,f4]@8 ~@8, ~@2 f2@25 [a3,c4,f4]@8 bb2@28 ~]/2", // Bbsus2 F Bbm F
})).s("gm_piano").gain(0.15).pan(0.7)

// other · timpani
const timpani = note("<~@32 A B ~ B ~@4 C D ~@17 E F ~ F ~@4 G@2 ~@11>".pickRestart({
  A: "~@21 g2 ~@2 g2@2 ~@6", B: "c2 ~@3", C: "~@8 g2 [gb2,g2] gb2 [gb2,g2] g2 [gb2,g2] gb2 [gb2,g2] g2@5 d2@5 ~ g2@5",
  D: "g2@5 ~@27", E: "~@28 g2 ~ g2@2", F: "~@3 c2@4 ~@9",
  G: "[~@12 g2 gb2 [gb2,g2] g2 [gb2,g2] gb2 [gb2,g2] g2 g2@5 ~ d2@5 g2@5 g2@5 ~@23, ~@20 gb2 ~@43]/2", // Gmaj7
})).s("gm_timpani").gain(0.35).pan(0.7)

// other · string ensemble 1 · "STRINGS I"
const string_ensemble_1 = note("<~@33 A@4 B C@2 D E ~@18 F@3 G@6 ~@11>".pickRestart({
  A: "[~@8 [f4,f6]@5 [f4,f6]@10 ~ [f4,f6]@5 [f4,f6]@34 ~]/2", B: "~@8 [f4,f6]@5 [f4,f6]@11 [g4,g6]@8",
  C: "[[ab4,ab6]@3 [g4,g6]]/2", D: "[c5,c7]@16 [g4,g6]@5 [c5,c7]@5 ~ [g4,g6]@5", E: "[c5,c7]@21 ~@11",
  F: "[~@14 [f4,f6]@5 ~ [f4,f6]@10 [f4,f6]@5 [f4,f6]@34 ~@9 [f4,f6]@5 [f4,f6]@10 ~ [f4,f6]@2]/3", // F
  G: "[~@3 [f4,f6]@34 ~@8 [f4,f6]@5 [f4,f6]@11 [g4,g6]@8 [ab4,ab6]@48 [g4,g6]@16 [c5,c7]@15 [g4,g6]@5 ~ [c5,c7]@5 [g4,g6]@5 [c5,c7]@21 ~@7]/6", // F G Ab G C G C G …
})).s("gm_string_ensemble_1").gain(0.17).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@32 B C B C D E A F G ~@2 H@3 I@4 J@4 K L@3 M N O P O Q R S T U ~@2 V W@6 X ~
>`.pickRestart({
  A: "x!2", B: "x ~@7 x ~@4 x ~@10 x ~@4 x ~@2", C: "~@13 x ~@7 x ~@10", D: "x ~@7 x ~@4 x ~@10 x ~@7",
  E: "x ~@7 x ~@12 x ~@2 x ~@7", F: "x ~@15 x ~@4 x ~@5 x ~@4", G: "x", H: "~@5 x ~@7 x ~@2", I: "~@9 x ~@15 x ~@6",
  J: "~ x ~ x", K: "~@8 x ~@14 x ~@8", L: "~@7 x ~@15 x ~@8", M: "~@7 x ~@14 x ~@9", N: "~@6 x ~@7 x ~@4 x ~@10 x ~",
  O: "~@3 x ~@15 x ~@7 x ~@4", P: "~@6 x ~@7 x ~@4 x ~@9 x ~@2", Q: "~@5 x ~@7 x ~@4 x ~@10 x ~@2",
  R: "~@5 x ~@7 x ~@12 x ~@2 x ~@2", S: "~@5 x ~@15 x ~@10", T: "~@5 x ~@14 x ~@5 x ~@4 x", U: "~ x ~@6",
  V: "~@4 x ~@14 x ~@12", W: "~@3 x ~@15 x ~@12", X: "~@3 x ~@28",
})).gain(0.24)

// drums · snare
const snare = s("sd").struct("<~@34 A ~ A ~ B C D ~@20 E F B G H I J ~@12>".pickRestart({
  A: "~@4 x ~@9 x!2", B: "~@13 x ~@18", C: "~ x ~ x", D: "~ x ~@2", E: "~@7 x ~@8", F: "~ x!2 ~@13", G: "~ x ~ x ~@28",
  H: "~@9 x ~@6", I: "~@13 x ~@15 x ~@2", J: "~@3 x ~@4",
})).gain(0.2)

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

// drums · crash
const crash = s("cr").struct("<~@33 A B A B C D ~ E F ~@18 G H G H I J ~ K L ~@11>".pickRestart({
  A: "x ~@7 x ~@4 x ~@10 x ~@4 x ~@2", B: "~@13 x ~@7 x ~@10", C: "x ~@7 x ~@4 x ~@18", D: "~@13 x ~@18",
  E: "~@16 x ~@4 x ~@5 x ~@4", F: "x", G: "~@6 x ~@7 x ~@4 x ~@10 x ~", H: "~@3 x ~@15 x ~@7 x ~@4",
  I: "~@5 x ~@7 x ~@4 x ~@13", J: "~@9 x ~@6", K: "~@20 x ~@5 x ~@4 x", L: "~ x ~@6",
})).gain(0.24)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, bass_soft, string_ensemble_2, piano, timpani, string_ensemble_1,
  kick, snare, hihat, crash
)

More by Herb Alpert