Strudelify

Midnight Train to Georgia

Gladys Knight

KeyD♭ majorTempo89 bpm
0:00/0:00
// Midnight Train to Georgia — Gladys Knight
// 89 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "organ" named as an organ, played on drawbar organ (its piano patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 102 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(89/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 · fretless bass · "bass"
const bass = note(`<
  ~ A B C D E F G H I J K L E M G H N J K L O P Q R S T U V W X Y Z AA AB AC AD E F G H I J AE L E F G H I J K L O P Q R
  S T U V W X Y Z AA AB AF AG AH P Q R S AI U V W X Y Z AA AB AF AG AF AG O P AH P AF AG AF AG AH P O P AJ@3
>`.pickRestart({
  A: "db2@6 ~ db2 c2@7 ~", B: "bb1@14 ~@2 ab1 ~ ab1 ~ ab1@2 ~@2 ab1@4 bb1 ~ ab1@2", C: "db2@6 ~ db2 c2@6 ~ c2",
  D: "bb1@2 ~@2 bb1@7 ~ bb1@4 ab1@2 ~@2 ab1@2 ~@2 ab1@4 bb1@2 ab1@2", E: "db2 ~@3 db2@7 ~ db2@2 eb2@2 f2@2 ~@2 f2@12",
  F: "bb1@12 ~@2 bb1@2 ab1@2 ~@2 ab1@7 ~ ab1@2 bb1@2", G: "db2@9 ~@3 db2@2 eb2@2 f2@2 ~@2 f2@7 ~ f2@4",
  H: "bb1@15 ~ ab1 ~ ab1 ~ ab1@8 bb1@2 ab1 ~", I: "db2@5 ~ db2 eb2 f2 ~ f2@3 ~ f2@2", J: "bb1@11 ~ bb1@4 eb2@7 ~ eb2@8",
  K: "ab1@13 ~@3 ab1 ~@3 ab1@10 ~@2", L: "ab1 ~@3 ab1@8 ab1 ~@3 ab1 ~@3 ab1@2 bb1@2 db2 ~ [bb1,db2]@2 ab1@2 ~@2",
  M: "bb1@6 ~ bb1 ab1 ~ ab1@3 ~ ab1 bb1", N: "db2@10 ~@2 db2@2 eb2@2 f2 ~@3 f2@6 ~@2 f2@4",
  O: "db2 ~ db2@3 ~ db2 eb2 f2 ~ f2@4 ~ f2", P: "bb1@2 ~@2 bb1@7 ~ bb1@3 ~ ab1@2 ~@2 ab1@7 ~ eb2@2 ab1@2",
  Q: "db2@2 ~@2 db2@5 ~@3 db2@2 eb2@2 f2 ~ f2 ~ f2@2 ~@2 f2@5 ~ f2@2",
  R: "bb1@2 ~@2 bb1@6 ~@2 bb1@2 ~@2 ab1@2 eb2@2 ab2@5 ~ eb2@2 ab1@4",
  S: "db2@2 ~@2 db2@6 ~@2 db2@2 eb2@2 f2@2 ~@2 f2@7 ~ f2@4", T: "bb1@2 ~@2 bb1@8 ab1@3 ~ g1@2 ~@2 g1@4 eb1@7 ~",
  U: "ab1@2 ~@2 ab1@11 ~ ab1@2 ~@2 ab1@3 ~ ab1@2 eb2@2 ab2@3 ~",
  V: "ab2@2 ~@2 ab2@2 ~@2 ab2@2 eb2@2 ab1@3 ~ ab1@4 ab1@3 ~ ab1@2 bb1@2 db2 ~ bb1@2",
  W: "db2@2 ~@2 db2@5 ~@3 db2@2 eb2@2 f2@3 ~ f2@6 ~@2 f2@4", X: "bb1@2 ~@2 bb1@7 ~ bb1@4 ab1@2 ~@2 ab1@3 ~ ab1@6 a1@2",
  Y: "bb1@2 ~@2 bb1@8 f2@2 bb1@2 bb2@2 f2@2 bb1@2 ~@2 bb1@4 db2@2 bb1 ~",
  Z: "eb2 ~ eb2@4 ~@2 eb2@6 bb1@2 eb2@2 ~@2 eb2@4 bb1@7 ~", AA: "gb1@2 ~@2 gb1@10 ~@2 gb1@2 ~@2 gb1@6 bb1@2 gb1 ~ g1@2",
  AB: "ab1@3 ~ ab1@8 ~@2 ab1 ~ ab1@2 ~@2 ab1@2 ~@2 ab1@2 bb1@2 db2@2 ~@2", AC: "db2@16 c2@15 ~",
  AD: "bb1@16 ab1@11 ~ ab1@2 ~@2", AE: "ab1@13 ~@3 ab1 ~@3 ab1@11 ~", AF: "db2 ~@3 db2@9 ~ db2@2 c2 ~@3 c2@9 ~ c2@2",
  AG: "bb1 ~@3 bb1@10 ~@2 ab1@2 ~@2 ab1@2 ~@2 ab1@2 bb1@2 db2@2 bb1 ~",
  AH: "db2@2 ~@2 db2@5 ~@3 db2@2 eb2@2 f2@2 ~@2 f2@8 ~@2 f2@2", AI: "bb1@2 ~@2 bb1@8 ab1@3 ~ g1@2 ~@2 g1@3 ~ eb1@7 ~",
  AJ: "[db2@11 ~@5]/3",
})).s("gm_fretless_bass").gain(0.5)

// chords · epiano2 · "rhodes"
const epiano2 = note(`<
  ~ A B C D E F@2 G H@2 I J E F@2 G H@2 I K L M N O P Q R S T U V@2 W X Y Z E F@2 G H@2 I J E F@2 G H@2 I K L M N O P Q
  R S T U AA@2 W X AB AC L M AD O P Q R S T U V@2 W X AB AC AB AE L AF@2 M AB AE AB AC L AF@2 AG AH@3
>`.pickRestart({
  A: "~@4 c4@3 c4, f4 [c3,eb4,ab4], [ab3,db4]@6 ab3@3 ~@7, ~ db3@17 ~@14, ~@7 db4@2 ~@7", // Ab Db5
  B: "bb3@12 ~@2 db4@2 ~@2 [bb3,db4,gb4]@3 ~@3 [bb3,db4,gb4]@8, [bb2,db4,gb4] ab2, ~@12 bb3@5 ~@15", // Gb
  C: "[db3,ab3,db4,f4]@4 c4@3 c4, ~ [c3,eb4,ab4]", // Db Ab
  D: "bb3@7 ~ bb3@4 ~@2 [bb3,gb4]@2 [ab2,bb3,db4,gb4]@15 ~, [bb2,gb4] ~, db4@3 db4 ~@4", // Ebm Gb Ebm
  E: "[db4,f4]@6 ~ db3 ab4@6 ab4@2, [db3,ab3] [f3,c4,eb4], ~@3 [db4,f4] ~@4", // Db Db5 F7 Db
  F: "[bb3@12 bb3@4 ~@4 [db4,gb4]@8 gb4@4 [ab3,f4]@11 ~ f4@4 c4@12 c4@4, [bb2,db4,gb4] ab2 db3 ~, ~@28 db4@15 [ab3,db4]@4 ~ [f3,eb4,ab4]@16]/2", // Gb5 Db Gb Db5 Fm7
  G: "bb3@3 bb3 ~@2 gb4@2, [bb2,db4,gb4]@16 [ab2,c4,eb4,ab4]@15 ~", // Gb Ab
  H: "[[ab3,db4,f4]@11 ~ [ab3,f4]@4 [f3,c4,eb4,ab4]@14 ~ c4 gb4@15 ~@9 eb4@8, db3@17 ~@14 [bb2,db4]@17 [g2,g3,bb3,db4]@16, ~@11 db4@5 ~@14 bb3@17 f4@8 ~@9]/2", // Db Fm7 Bbm Gdim
  I: "[gb3,bb3,db4]@7 ~ [bb3,db4]@2 ~@4 gb3@2, ab2, ~@14 gb3@13 ~@5, ~@5 [bb3,db4]@3", // Gb Bbm
  J: "~@12 gb4@3 ~, ab2@15 ~, ab3@6 ab3@9 ~, ~@8 bb3@21 ~@3, ~@8 db4@7 ~",
  K: "~@12 gb5@3 ~, ab2@15 ~, ab4@6 ab4@9 ~, ~@8 bb4@21 ~@3, ~@8 db5@7 ~",
  L: "ab4@3 ~ [f4,eb5]@4, [db4,db5,f5]@15 c5@17, ~@3 ab4@5", // F7 Db
  M: "[bb3,gb4,bb4,db5]@14 ~@2 c5@8 ~@5 ab3@3, ~@7 ab4@5 ab4@4, ~@4 [ab3,eb5]@3 eb5, ~@16 b4 ~@9 c5@6", // Gb Ab5
  N: "f5@8 f5@4 eb5@2 db5@2 c5@11 ~ c5@4, db4 ~, [ab4,db5]@11 ~@5 [f4,eb5]@16, ~ ab5@3, ~@8 eb5@3 ~@21", // Db5 F7
  O: "~@4 [bb4,db5,gb5] ~@3 [bb4,db5,gb5]@8 [bb4,db5,gb5]@8 [ab4,c5,eb5]@8, bb3 ab3", // Gb Ab
  P: "ab4@11 ~@5 [f4,c5,eb5]@16, [db4,db5,f5] ~, ~@11 ab4@20 ~", // F7 Db
  Q: "bb4@3 bb4 [g4,bb4,db5]@3 [g4,bb4,db5], [bb3,db5,f5] [g3,f5]", // Gdim Bbm G7
  R: "ab3@10 ~@5 ab3, [bb4,db5]@13 bb4@3, gb4@3 gb4, ~@5 ab3@2 db5", S: "~ bb4 [bb4,db5] [bb4,db5,eb5], [ab3,ab4] ab3",
  T: "[db4,ab4,db5,f5]@12 [ab4,db5,f5]@2 db4 [ab4,c5] eb5 ~@3 [f4,ab4,c5,eb5]@12, ~@15 f4@2 ~@15", // Db Ab Fm7
  U: "[bb3,bb4,db5,gb5]@8 ab4@6 ~ ab3, ~ [ab3,c5,eb5], ~@7 ab4", // Gb Ab
  V: "[[bb4,db5,f5]@12 eb5 ~@11 bb3@7 ~ g3@20 ~@8 g3@4, bb3@6 ~@7 g3@2 ~, ~@3 ab5 db5@4 ~@8, ~@13 f5@18 f5@25 ~@8, ~@5 bb4@3 [g4,bb4,db5]@6 [g4,bb4,db5,f5]@2]/2", // Bbm Gdim Gm7b5
  W: "[bb4,db5]@20 [ab4,eb5]@3 ~@5 gb3@3 ~, gb3@26 gb4@5 ~, [gb4,f5]@23 ~ ab4@5 ~@3, ~@5 [bb4,db5]@3", // Bbm Ab5 Gbmaj7 Bbm
  X: "[gb4,bb4,db5]@15 ~ bb4@4 ab4@2 ~ ab4@8 ~, ab3, ~ db5, ~@16 ab4 ~@15", // Gb
  Y: "[db4,f4]@15 ~ [c4,eb4]@16, ab3, bb3 ~@31", Z: "[bb3,db4,gb4]@4 [ab3,c4,eb4]@3 ~",
  AA: "[[bb4,db5,f5]@12 eb5 ~@11 bb3@7 ~ g3@20 ~@8 g3@4, bb3@6 ~@7 g3@2 ~, ~@3 ab5 db5@4 ~@8, ~@13 f5@18 f5@25 ~@8, ~@20 bb4@12 [g4,bb4,db5]@24 [g4,bb4,db5,f5]@7 ~]/2", // Bbm Gdim Gm7b5
  AB: "[db5,f5]@15 ~ [c5,eb5]@15 ~, ab4@31 ~", // Db Cm
  AC: "[bb4,db5]@16 ab4@2 ~@2 ab4@2 ~@6 db5@3 ~, c5 ~@22 ab4@7 ~@2, ~@26 bb4@5 ~", // Bbm
  AD: "f5@4 f5@2 eb5 db5 c5@6 c5@2, db4 ~, [ab4,db5]@11 ~@5 [f4,eb5]@16, ~ ab5@3, ~@8 eb5@3 ~@21", // Db5 F7
  AE: "[bb4,db5]@16 ab4@2 ~@2 ab4@2 ~@6 db5@3 ~, c5 ~@22 ab4@8 ~, ~@26 bb4@5 ~", // Bbm
  AF: "[[bb3,gb4,bb4,db5]@7 ~ c5@4 ~@4 ab4@6 ~@2 [f4,eb5]@8, ~@14 ab4@10 ab4@8 [db4,db5,f5]@15 c5@17, ~@4 [ab3,eb5]@3 eb5@5 ~@4, ~@16 b4 ~@9 c5@18 ab4@20, ~@29 ab3@19 ~@16]/2", // Gb F7 Db Ab5
  AG: "[bb3,gb4,bb4,db5]@14 ~@2 c5@8 ~@5 ab3@2 ~, ~@14 ab4@10 ab4@7 ~, ~@16 [ab3,eb5]@12 eb5@3 ~, ~@16 b4 ~@9 c5@5 ~", // Gb Ab5
  AH: "[[db3,db4,ab4,db5,eb5,f5]@67 ~@29]/3", // Db
})).s("gm_epiano2").gain(0.5).pan(0.7)

// chords · drawbar organ · "organ"
const drawbar_organ = note(`<
  ~ A B@2 C ~@7 D E F@2 G H@2 I J K L M N@2 O P Q@2 R S@2 T@2 U@2 ~@15 V K L M W@2 O P Q@2 R S@2 T@2 X@2 K L M N@2 O P
  Q@2 R S@2 T@2 Y Z AA AB AC AD@5 AE AF AG@2 AH@2 AI@3
>`.pickRestart({
  A: "[f5,db6]@15 ~ [eb5,c6]@16, ab5@15 ~, g5 ~@31", // Db Cm
  B: "[[db5,gb5,bb5]@15 ~ [gb5,bb5,db6] ~@3 [gb5,bb5]@11 ~ f5@14 ~@2 [eb5,c6]@16, ~@20 db6@27 ~@17, ~@16 ab5@15 ~]/2", // Gb Cm
  C: "[db5,gb5,bb5]@14 ~@2 [gb5,bb5,db6] ~ [gb5,bb5,db6]!2 ~@4 [gb5,bb5,db6]@7 ~", // Gb
  D: "ab4@4 bb4@4 db5@4 eb5@2 db5 ~, ~@8 a4 ~@23", E: "[db5,f5] [c5,eb5]",
  F: "[[bb4,db5]@19 ~ [bb4,db5,gb5] ~@3 [bb4,gb5]@7 ~ [ab4,f5]@5 ~@2 eb5 f5@4 eb5@2 db5 eb5@17, ~@24 db5@13 ~@2 ab5@25]/2", // Bbm Gb Ebm Db
  G: "~@4 eb5 ~@3 eb5@4 db5@15 bb4@5",
  H: "[db5@9 ~@2 eb5 f5@4 eb5@4 db5@4 eb5@4 db5@20 eb5@15 ~, ~@11 ab5@13 ~@40, ~@12 e5 ~@35 d5 ~@15]/2", I: "eb5@31 ~",
  J: "ab4@4 bb4@4 db5@4 eb5@3 ~, ~@8 a4 ~@23", K: "[db5,f5]@14 ~@2 [c5,eb5]@15 ~, ab4@31 ~, ~@16 b4 ~@15",
  L: "[bb4,db5,gb5]@15 ~ ab4@2 ~@2 c5@4 [bb4,db5]@4 [c5,eb5]@4, ~@16 c5 ~@3 ab4@3 ~@9", // Gb Bbm Cm
  M: "[db5,f5]@7 ~ [c5,eb5]@8, ab4@15 ~", // Db Cm
  N: "[[bb4,db5]@15 d5 eb5@15 ~ f5@15 ~ [c5,eb5]@15 ~, ~@31 ab4@31 ~@2, ~@31 db5@15 ~@18]/2", // Bbm Cm
  O: "~@12 ab4@4 ~@4 bb4@11 ~, [db5,f5]@31 ~, bb4 g4", P: "[gb4,bb4,db5]",
  Q: "[~@8 a4 ~@14 eb5@7 ~ [ab4,db5,f5]@15 ~@2 [c5,eb5,ab5]@15 ~, ab4@15 ~@17, ~@4 bb4@11 ~@17, ~@16 db5@14 ~@18 d5 ~@15]/2", // Db Ab
  R: "[bb4,db5,gb5]@15 ~ [ab4,c5]@9 [bb4,db5]@3 [c5,eb5]@3 ~", // Gb Ab Bbm Cm
  S: "[ab4@4 ~ bb4@6 ~ ab4@2 ~@2 bb4@6 ~@2 ab4@6 ~ [g4,bb4]@32 ~, [db5,f5]]/2", // Gm Db
  T: "[[gb4,bb4,db5,f5]@16 ~@4 [gb4,bb4,db5,f5] ~@3 [gb4,bb4,db5,f5]@5 gb4 ~ [gb4,bb4]@19 ~@2 ab4@4 bb4@4 db5 ~@3, ~@56 a4 ~@7]/2", // Gbmaj7 Gb
  U: "[db5@46 ~@2 eb5 f5@3 eb5@2 ~@2 eb5@3 db5@3 ~@2, ~@48 ab5@5 ~@3 ab5@7 ~, ~@49 e5 ~@14]/2",
  V: "~@7 a4 ~@16 eb5@6 ~@2, ab4@15 ~, ~@4 bb4@11 ~, ~@8 db5@7 ~",
  W: "[[bb4,db5]@15 d5 eb5@15 ~ f5@15 ~ [c5,eb5]@15 ~, ~@31 ab4@31 ~@2, ~@31 db5@16 ~@17]/2", // Bbm Cm
  X: "[db5@16 c5@15 bb4@17 ~@12 eb5@4, ~@3 ab4, ~@13 bb4@3, ~@7 db5]/2", Y: "[db5,eb5,e5] f5@14 eb5@16 ~, ab5",
  Z: "db5@20 ab4@2 ~ db5@4 ~ bb4 ~@3, ~@11 bb4 ~@4",
  AA: "[eb5,e5] f5@14 ~@2 [e5,f5] db5@2 eb5@4 db5@4 bb4@4, ab5@16 ~ eb5@2 ~@13, ~@18 e5 ~@13", // Emaj7 Fmaj7
  AB: "db5@20 ab5 ~@3 [db5,ab5]@7 ~", AC: "eb5 f5@7 eb5@4 db5@4 eb5@4 db5@8 eb5@2 ~@2, ab5@21 ~@11, ~ g5 ~@30",
  AD: "[db5@11 ~ bb4@2 ab4 ~ ab4@11 ~ [ab4,a4] ~@2 db5@26 ~@2 eb5 e5!2 ~@5 eb5@2 ~@2 e5!2 db5 bb4 ~ eb5@4 e5 f5@3 ab5 ~ bb5@2 ~@16 bb5@8 ab5@8 gb5@4 f5@4 eb5@4 db5@6 ~ eb5 f5@3 eb5@5 db5@4 eb5@4 db5@4, ~@28 bb4@3 ~@29 [f5,ab5]@9 ~@3 eb5@2 ~@15 db6@48 ~@2 ab5@20 ~, ~@139 bb5@2 ~@19]/5", // Amaj7 Fm
  AE: "[eb5,e5] f5 ~@2 [eb5,e5] ~@7 db5@5 eb5@2 ~ eb5 f5@7 db5@4, ab5@2 ~@2 ab5@15 ~ ab5@12, ~ f5@2 ~@5", // Emaj7
  AF: "[eb5,e5] f5 ~@2 [eb5,e5] ~@3 eb5@4 db5@4 eb5@4 db5@2 ~@2 ab4@2 bb4@2 db5@2 bb4@2, ab5@2 ~ ab5@18 ~@11, ~@4 f5@4 ~@16 bb4 ~@7", // Emaj7
  AG: "[db5@27 ~ a4 bb4@2 db5@7 ~@2 [db5,eb5,e5] f5@2 eb5@2 ~@2 e5 [eb5,e5] db5@2 eb5@5 db5@4 bb4@2 db5 eb5, ~@27 ab4@2 ~@11 ab5@4 ~@20]/2", // Dbm Emaj7
  AH: "[~ e5 f5@2 ab5@7 ~ eb5@2 ~ eb5@5 db5@4 bb4@4 db5@2 ~ eb5 f5@3 ~ eb5@4 db5@3 ~ eb5@4 db5@2 ~@2 ab5 ~@3 eb5@3 ~ db5@2 ~@2, ~@2 eb5 ~@11 db5@2 ~@15 ab5@3 ~ ab5@15 ~@2 db5@4 ~@8, ~@54 ab5@5 ~@5]/2",
  AI: "[[eb5,e5] f5@65 ~@30, [db5,ab5]@11 ~@5]/3", // Emaj7 Db5
})).s("gm_drawbar_organ").gain(0.24).pan(0.3)

// chords · tenor sax · "saxes"
const tenor_sax = note("<~ A B C@2 ~@16 D ~@2 E ~@19 F@2 ~@7 D ~@2 E ~@12 D ~@2 E ~@29>".pickRestart({
  A: "[db4,ab4,db5,f5]@7 ~ [ab4,db5,f5] ~@11 [c4,ab4,c5,eb5] ~@3 [c4,ab4,c5,eb5] ~@7, ~@4 db4 ~@11", // Db Ab
  B: "[bb3,bb4,db5,gb5]@7 ~ [bb4,db5,gb5] ~@11 [gb4,bb4,db5] ~@11, ~@4 bb3 ~@5 ab3 ~@5", // Gb
  C: "[[db4,ab4,db5,f5]@7 ~ db4@2 ~@10 [c4,ab4,c5,eb5] ~@3 [c4,ab4,c5,eb5] ~@7 bb3@7 ~ [bb3,bb4,db5,gb5] ~@10 [bb4,db5] [ab3,gb4] ~@11, ~@7 [ab4,db5,f5]@2 ~@22 [bb4,db5,gb5]@7 ~@26]/2", // Db Ab Gb Bbm Ab7 Db Gb
  D: "[ab4,db5,f5]@3 ~ [ab4,db5,f5] ~@27", // Db
  E: "~@3 [bb4,db5,gb5] ~@4 [bb4,db5,gb5]@8 ~@4 [ab4,c5,eb5] ~@3 [ab4,c5,eb5]@5 ~@3", // Gb Ab
  F: "[~@27 [ab3,ab4,c5,eb5]@4 ~ [db5,f5]@3 [ab4,db5,f5] ~@28, ~@31 [db4,ab4]@3 ~ db4@2 ~@27]/2", // Ab Db Db5
})).s("gm_tenor_sax").gain(0.4).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ A@34 B C A@30 D E A@16 D E A@6 D E A@3 E F ~ G>".pickRestart({
  A: "x!2", B: "~ x ~ x", C: "~ x ~@2", D: "x ~@3 x!2 ~@2", E: "x!2 ~ x ~@4", F: "x", G: "~ x ~@30",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  A B@3 C B@7 D B@7 D B@7 D B@6 ~ E B@7 D B@7 D B@7 D B@7 F B@7 D B@9 F B@7 F B@3 G ~ H ~
>`.pickRestart({
  A: "~@8 x!5 ~ x ~", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!2 ~@2", D: "~@4 x ~@4 x ~ x!3 ~@2", E: "~@8 x!3 ~ x ~ x ~",
  F: "~@4 x ~@3 x!3 ~ x!4", G: "~@4 x ~@3 x!7 ~", H: "~@30 x!2",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!2", D: "x",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@15 A ~@25>".pickRestart({
  A: "~@7 x",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct("<~@99 x ~@2>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!4 ~@16 [~ x ~ x]!78 ~@3>").gain(0.4)

stack(bass, epiano2, drawbar_organ, tenor_sax, kick, snare, hihat, open_hat, mid_tom, ride, tambourine)

More by Gladys Knight