Strudelify
Tragedy cover art

Spirits Having Flown

Tragedy

Bee Gees

KeyD♭ majorTempo114 bpm
0:00/0:00
// Tragedy — Bee Gees
// 114 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 8 "BRASS" named as a brass, played on brass section (its lead 2 sawtooth patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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(`<
  ~@3 A@8 B@8 ~@2 C D E F G H I J C D E F G H I J K L M N O P Q R S@2 T@4 U@2 V@2 U@2 W@2 X@2 Y@2 X@2 Z@2 ~ AA AB AC AD
  AE G AF AG@2 AB AC AD AE G AF AH AI@8 AJ AK@3 AB AC AD AE G AF AG@2 AB AC AD AE G AF AL@2 AM AB AC AD AE G AF AG@2 AB
  AC AD AE G AF AN@3 AB AC AD AE G AF AG@2 AB AC AD AE G AF AO@2 ~
>`.pickRestart({
  A: "[~@8 db2@28 ~@4 db2@27 ~@3 ab1@2 db2@28 ~@4 db2@22 ~@2]/8",
  B: "[~@2 [eb1,eb2]@7 ~ [f1,f2]@7 ~ [eb1,eb2]@7 ~ [gb1,gb2]@6]/8", C: "bb1@4 ~@3 bb1!2 ~ bb1@3 ~ bb2 ~",
  D: "f1@6 ~ f1!2 ~ f1@3 ~ f2 ~", E: "bb1@8 ~@2 bb1@2 bb2 ~ bb1 ~", F: "f1@6 ~ f1!2 ~ f1@2 ~@2 f1 ~",
  G: "ab1@3 ~ ab1@3 ~", H: "ab1@6 ~@2 ab1@2 ab2@2 ab1 ~ a1@2", I: "bb1@5 ~@2 bb1!2 ~ bb1@2 ~@2 bb1 ~",
  J: "gb1@5 ~ f1@4 ~@2 ab1@4", K: "~@3 c2@3 db2@2, bb1@7 ~", L: "~@6 c2@6 db2@3 ~, bb1@15 ~",
  M: "~@6 db2@5 ~ c2@4, [eb1,eb2]@7 ~", N: "[eb1,eb2]@15 ~, bb1 ~@3", O: "f1@7 ~", P: "f1", Q: "gb1@7 ~", R: "gb1 ab1",
  S: "db1@15 ~", T: "db2 ~ db2 ~@5 db2 ~ db2 ~@5", U: "[db2@7 ~]/2", V: "[db2@27 ~@3 ab1@2]/2", W: "[db2@11 ~@5]/2",
  X: "[[eb1,eb2]@7 ~]/2", Y: "[[f1,f2]@7 ~]/2", Z: "[[gb1,gb2]@3 ~]/2", AA: "~@8 bb1@4 ~@3 bb1",
  AB: "bb1 ~ bb1@3 ~ bb2 ~ f1@6 ~ f1", AC: "f1 ~ f1@3 ~ f2 ~ bb1@8", AD: "~@2 bb1@2 bb2 ~ bb1 ~ f1@6 ~ f1",
  AE: "f1 ~ f1@2 ~@2 f1 ~ ab1@6 ~@2", AF: "ab1@2 ab2@2 ab1 ~ a1@2 bb1@5 ~@2 bb1",
  AG: "[bb1 ~ bb1@2 ~@2 bb1 ~ gb1@5 ~ f1@4 ~@2 ab1@4 bb1@4 ~@3 bb1]/2", AH: "bb1 ~ bb1@2 ~@2 bb1 ~ gb1@5 ~ f1@2",
  AI: "[~@4 ab1@4 bb1@32 eb1@16 f1@16 bb1@32 eb1@15 ~ f1@8]/8", AJ: "~ f1 f2 f1 gb1@4", AK: "[gb1@40 bb1@4 ~@3 bb1]/3",
  AL: "[bb1 ~ bb1@2 ~@2 bb1 ~ gb1@5 ~ f1@4 ~@6 f1 ~ f1@2 ~@2 c2 ~]/2", AM: "f2@7 ~ bb1@4 ~@3 bb1",
  AN: "[bb1 ~ bb1@2 ~@2 bb1 ~ gb1@5 ~ f1@4 ~@4 f1 ~ f1@2 ~@2 c2 ~ f2@7 ~@3 bb1@4 ~@3 bb1]/3",
  AO: "[bb1 ~ bb1@2 f2@2 eb2@5 ~ db2@2 c2@6 db2@2 bb1@4 ~@6]/2",
})).s("gm_electric_bass_finger").gain(0.54)

// other · lead 4 chiff
const lead_4_chiff = note("<~@4 A@7 B C D E F C G H ~@32 I J@7 K L M N O L P Q ~@80>".pickRestart({
  A: "~@2 f3 ab3 db4 ab3 f3 db3 ab2 ~@7", B: "~@2 f3 ab3 db4 ab3 f3 db3 ~@8", C: "~@2 g3 bb3 eb4 bb3 g3 eb3 bb2 ~@7",
  D: "~@2 g3 bb3 eb4 bb3 g3 eb3 f3 ~@7", E: "~@2 a3 c4 f4 c4 a3 f3 c3 ~@7", F: "~@2 a3 c4 f4 c4 a3 f3 eb3 ~@7",
  G: "~@2 g3 bb3 eb4 bb3 g3 eb3 gb3@2 ~@6", H: "~@2 bb3 db4 gb4 db4 bb3 gb3 db3 ~@7", I: "~@10 f3 ab3 db4 ab3 f3 db3",
  J: "ab2 ~@9 f3 ab3 db4 ab3 f3 db3", K: "~@10 g3 bb3 eb4 bb3 g3 eb3", L: "bb2 ~@9 g3 bb3 eb4 bb3 g3 eb3",
  M: "f3 ~@9 a3 c4 f4 c4 a3 f3", N: "c3 ~@9 a3 c4 f4 c4 a3 f3", O: "eb3 ~@9 g3 bb3 eb4 bb3 g3 eb3",
  P: "gb3@2 ~@8 bb3 db4 gb4 db4 bb3 gb3", Q: "db3 ~@15",
})).s("gm_lead_4_chiff").gain(0.3).pan(0.7)

// chords · distortion guitar · "DS. GUITAR"
const distortion_guitar = note(`<
  A B C D@6 E@2 F@8 ~@2 G H G H I ~@3 G H G H I ~@3 J@2 K L@3 M@2 N@2 O P@2 Q R@2 S@2 T@2 U@2 V@2 W@2 V@2 X@2 ~ Y@6 ~@2
  Y@6 ~@2 Z@8 AA@8 ~@3 Y@6 ~@2 AB@7 ~@2 Y@6 ~@2 AB@7 ~@2 Y@6 ~@4
>`.pickRestart({
  A: "db3@2 db3 ~@5 [ab2,db3]@2 db3 ~@5", B: "db3@2 db3 ~@5 db3 ~ [ab2,db3] ~@5", C: "[ab2,db3] ~ db3 ~@5 db3@2 ~@6",
  D: "[db3@2 db3 ~@5 [ab2,db3]@30 ~@2 [ab2,db3]@29 ~ ab2@2 db3@24]/6", E: "[~ [ab2,db3]@3]/2",
  F: "[~ [bb2,eb3]@4 [c3,f3]@4 [bb2,eb3]@4 [db3,gb3]@3]/8", G: "[bb2,f3]", H: "f3@15 ~", I: "[gb3,db4]@11 ~@5",
  J: "bb2@3 c3@3 db3@2", K: "eb3@3 db3@3 c3@2",
  L: "[~@4 c4 db4@3 [c4,ab4]@2 ~@3 bb4 ~@26 [ab4,f5]@4 [bb4,gb5]@4, bb2@3 ~ c3@8, ~@2 bb4@2 ~@2 [ab4,gb5] [ab4,f5]@5 ~@12]/3", // Fm Db Ebm Ab7 Db
  M: "[[c5,ab5]@4 [db5,bb5]@2 [bb4,gb5]@18 [eb3,c5,ab5]@7 ~, db3@3 ~]/2", N: "[f3@6 gb3@9 ~ ab3@16, [db5,ab5]]/2",
  O: "db3 ~ db3 ~@5 db3 ~ db3 ~@5", P: "db3@2 db3 ~@5 db3@2 db3 ~@5", Q: "db3@2 db3 ~@5 db3 ~ db3 ~@5",
  R: "[[ab2,db3]@15 ~]/2", S: "[[ab2,db3]@29 ~ ab2@2]/2", T: "[db3@31 ~]/2", U: "[[ab2,db3]@31 ~]/2", V: "[bb2,eb3]/2",
  W: "[c3,f3]/2", X: "[[db3,gb3]@3 ~]/2", Y: "[~@8 [bb2,f3]@16 f3@15 ~ [bb2,f3]@16 f3@15 ~ [gb3,db4]@11 ~@13]/6",
  Z: "[~@4 bb2@3 c3@3 db3@2 bb2@3 c3@3 db3@2 eb3@3 db3@3 c3@2 bb2@3 a2@3 c3@2 bb2@3 c3@3 db3@2 bb2@3 c3@3 db3@2 ab3@3 gb3@3 f3@2 a3@3 bb3]/8",
  AA: "[~@4 c4@4 [db3,db4]@44 ~@4 [bb2,f3]@16 f3@15 ~ [bb2,f3]@16 f3@15 ~ [gb3,db4]@8]/8", // Db Bb5 Gb5
  AB: "[~@8 [f3,c4]@16 [bb2,f3]@16 f3@15 ~ [bb2,f3]@16 f3@15 ~ [gb3,db4]@11 ~@13]/7", // F5 Bb5 Gb5
})).s("gm_distortion_guitar").gain(0.22).pan(0.7)

// chords · distortion guitar · "DS. GUITAR" · soft notes · Db5
const distortion_guitar_soft = note(`<
  [ab2@2 ab2 ~@7 ab2 ~@5]
  [ab2@2 ab2 ~@5 ab2 ~@7]
  [~@2 ab2 ~@5 ab2@2 [ab2,db3] ~@5]
  [ab2@2 ab2 ~@13]
  ~@143
>`).s("gm_distortion_guitar").gain(0.13).pan(0.7)

// other · viola · "STRINGS"
const viola = note("<A@3 B ~@7 C D E F G D H I ~@28 J K L J ~@8 D@2 F@2 D@2 I M ~@80>".pickRestart({
  A: "db3 ~ db3 ~@3 ab2 ~ db3 ~ db3 ~@3 db3 ~", B: "db3 ~ db3 ~@3 ab2 ~@9", C: "~@8 eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  D: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~", E: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ f3 ~ f3 ~ f3 ~ f3 ~",
  F: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~", G: "f3 ~ f3 ~ f3 ~ f3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  H: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~", I: "gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~",
  J: "db3@2 db3 ~ db3 ~ [ab2,db3] ~ db3@2 db3 ~@5", K: "db3@2 db3 ~ db3 ~ [ab2,db3] ~ db3 ~ db3 ~@5",
  L: "db3 ~ db3 ~ db3 ~ [ab2,db3] ~ db3@2 db3 ~@5", M: "gb3 ~ gb3 ~ gb3 ~ gb3 ~@9",
})).s("gm_viola").gain(0.28)

// chords · acoustic guitar nylon · "AC. GUITAR"
const acoustic_guitar_nylon = note(`<
  A B C D@2 E@2 F@2 G@3 ~@25 H I J K L M N O P ~ Q R S T U V@2 W@2 X@3 ~@88
>`.pickRestart({
  A: "~@4 [db4,f4]@3 ~, ~@6 ab2@7 ~@3, ~@7 [db3,f3,ab3]@6 ~@3", // Db
  B: "~@4 [ab3,db4,f4]@3 ~, ~@3 ab2@4 ~, ~@7 [db3,f3]@7 ~@2", C: "~ [db4,f4], ~@3 ab2@5, ~@7 [db3,f3,ab3]@9",
  D: "[~ [ab3,db4,f4]@2 ~, ~@7 [db3,f3]@17 ~@8]/2", // Db
  E: "[~@8 [f4,ab4]@13 ~@11, ~@6 db3@15 ~@11, ~@7 [f3,ab3,db4]@13 ~@12]/2", // Fm Db
  F: "[~ [db4,f4,ab4]@2 ~, ~@3 db3@9 ~@4, ~@7 [f3,ab3]@17 ~@8]/2", // Db Fm
  G: "[~@4 [f4,ab4]@3 ~ [db3,f3]@9 ~@7, ~@6 db3@8 ~ [ab3,db4]@19 ~@14, ~@7 [f3,ab3,db4]@7 [f4,ab4]@20 ~@14]/3", // Fm Db Db5 Db Fm
  H: "[f3,bb3,db4]!5 ~@3 [f3,bb3,db4]!3 [bb3,db4] [f3,bb3,db4] ~@3", // Bbm
  I: "[f3,bb3,db4]!3 [bb3,db4] [f3,bb3,db4] ~@3 [f3,bb3,db4]!5 ~@3", J: "[eb3,gb3,bb3]!5 ~@3 [eb3,gb3,bb3]!5 ~@3",
  K: "[eb3,gb3,bb3]!5 ~@3 [eb3,gb3,bb3]!4 [eb3,gb3,bb3]@2 ~@2", L: "[f3,ab3,c4]!5 ~@3 [f3,ab3,c4]!4 [f3,ab3,c4]@2 ~@2",
  M: "[f3,ab3,c4]!5 ~@3 [f3,ab3,c4]!5 ~@3", N: "[gb3,bb3,db4]!4 [gb3,bb3,db4]@2 ~@2 [gb3,bb3,db4]!5 ~@3",
  O: "[gb3,bb3,db4]!3 [bb3,db4] [gb3,bb3,db4]@2 ~@2 [ab3,c4,eb4]!4 [ab3,c4,eb4]@2 ~@2", P: "[db3,f3,ab3]!5 ~@11",
  Q: "~ f4, ~@6 db3@9 ~, ~@7 [f3,ab3,db4]@8 ~", R: "~ [ab3,db4,f4], ~@6 db3@9 ~, ~@7 f3@9",
  S: "~ [db4,f4], ~@3 db3@5, ~@7 [f3,ab3]@9", T: "~@8 [db4,f4]@7 ~, ~@6 db3@9 ~, ~@7 [f3,ab3]@8 ~", U: "[db4,f4]",
  V: "[~@16 [f4,ab4]@13 ~@3, ~@14 db3@15 ~@3, ~@15 [f3,ab3,db4]@13 ~@4]/2", // Fm Db
  W: "[~ [db4,f4,ab4], ~@7 db3@9, ~@15 [f3,ab3]@17]/2", // Db Fm
  X: "[~@8 [f4,ab4]@3 ~ [db3,f3]@9 ~@3, ~@14 db3@8 ~ [ab3,db4]@19 ~@6, ~@15 [f3,ab3,db4]@7 [f4,ab4]@20 ~@6]/3", // Fm Db Db5 Db Fm
})).s("gm_acoustic_guitar_nylon").gain(0.12).pan(0.3)

// chords · brass section · "BRASS"
const brass_section = note(`<
  ~@3 A@4 B@4 C@8 ~@3 D ~@2 E@2 ~@3 D ~@2 E@2 ~@2 F@2 G H I@2 J@2 K L ~@4 M@2 N@2 O@4 P@2 Q@2 P@2 R@2 ~@2 S@2 ~ T U@2
  ~@2 S@2 ~ T U@2 ~ V@8 W@4 S@2 ~ T U@2 ~@2 S@2 ~ T U@2 ~@3 S@2 ~ T U@2 ~@2 S@2 ~ T U@2 ~@3 S@2 ~ T U@2 ~@2 S@2 ~ T U@2
  ~@3
>`.pickRestart({
  A: "[~@8 db2@31 ~ [db2,db3]@24]/4", B: "[~@6 ab2@2 [db2,db3]@31 ~ [db2,db3]@24]/4",
  C: "[~ [eb2,eb3]@4 [f2,f3]@4 [eb2,eb3]@4 [gb2,gb3]@3]/8", D: "[c4,eb4,f4,ab4]@3 ~",
  E: "[[gb4,db5]@9 ~ [gb4,db5] ~@3 [ab4,c5]@16 ~@2]/2", F: "bb2@5 ~ c3@5 ~ db3@3 ~", G: "eb3@5 ~ db3@5 ~ c3@4",
  H: "bb2@15 ~", I: "c3/2", J: "[db3@23 ~ eb3@7 ~]/2", K: "f3@6 gb3@9 ~", L: "ab3", M: "[db2@31 ~]/2",
  N: "[[db2,db3]@14 ~ ab2]/2", O: "[[db2,db3]@31 ~]/2", P: "[eb2,eb3]/2", Q: "[f2,f3]/2", R: "[[gb2,gb3]@3 ~]/2",
  S: "[~@2 [c4,eb4,f4,ab4]@3 ~@3]/2", T: "~ [gb4,db5]", U: "[~@2 [gb4,db5] ~@3 [ab4,c5]@16 ~@10]/2",
  V: "[~@8 bb2@5 ~ c3@6 db3@4 bb2@6 c3@6 db3@4 eb3@6 db3@6 c3@4 bb2@6 a2@6 c3@4 bb2@6 c3@6 db3@4 bb2@5 ~ c3@6 db3@4 ab3@5 ~ gb3@6 f3@3 ~ a3@6 bb3@2]/8",
  W: "[~@4 c4@3 ~ db4@44 ~@12]/4",
})).s("gm_brass_section").gain(0.19).pan(0.7)

// chords · brass section · "TRUMPET"
const brass_section_2 = note(`<
  ~@21 A@2 B ~ C@2 D@2 E@2 F@2 C@2 D@2 ~@31 G H@2 I J K@2 L@2 M ~ N J K@2 L@2 ~@10 G H@2 I J K@2 L@2 M ~ N J K@2 O@3 H@2
  I J K@2 L@2 M ~ N J K@2 P@3 H@2 I J K@2 L@2 M ~ N J K@2 Q@2 ~
>`.pickRestart({
  A: "[~@6 [ab3,ab4]@2 ~@2 [f3,f4] ~ [db4,db5]@2 [c4,c5]@17 ~]/2", // Ab F Db C
  B: "~@2 [f3,bb3,bb4] ~@3 [bb3,db4,db5] ~@3 [db4,f4,f5] ~@5", // Bb5 Bbm Db
  C: "[[ab3,gb4,db5]@9 ~ [ab3,gb4,db5] ~@3 [ab3,ab4,eb5]@18]/2", // Dbsus4 Ab5
  D: "[~@6 [f4,f5] eb4 eb4@2 db5 ~@3 db5 [bb3,bb4], ~@14 eb5@6 db4 ~ [c4,c5]@6 db4 ~@3, ~@16 [gb4,bb4]@7 ~ [eb4,a4]@7 ~]/2", // F Bb C Gb Ebdim
  E: "[~@10 [f3,f4] [ab3,ab4] [bb3,bb4] ~ [ab3,c4,eb4,f4,ab4]@11 ~@7]/2", // F Ab Bb Fm7
  F: "[~@10 [bb3,db4,f4,bb4,db5]!3 ~ [ab3,eb4,f4,ab4,eb5]@10 ~@8]/2", G: "~@7 [ab3,ab4]",
  H: "[~@2 [f3,f4] ~ [db4,db5]@2 [c4,c5]@17 ~@3 [f3,bb3,bb4] ~@3 [bb3,db4,db5] ~]/2", I: "~@2 [db4,f4,f5] ~@13",
  J: "~ [ab3,gb4,db5]", K: "[~@2 [ab3,gb4,db5] ~@3 [ab3,ab4,eb5]@18 ~@8]/2",
  L: "[~@2 [f4,f5] eb4 eb4@2 db5 ~@3 db5 [bb3,bb4] ~@4, ~@6 eb5@6 db4 ~ [c4,c5]@6 db4 ~@11, ~@8 [gb4,bb4]@7 ~ [eb4,a4]@7 ~@9]/2", // F Bb C Gb Ebdim
  M: "~@2 [f3,f4] [ab3,ab4] [bb3,bb4] ~ [ab3,c4,eb4,f4,ab4]@10", // F Ab Bb Fm7
  N: "~@2 [bb3,db4,f4,bb4,db5]!3 ~ [ab3,eb4,f4,ab4,eb5]@10", // Bbm Fm7
  O: "[~@2 [f4,f5] eb4 eb4@2 db5 ~@5 [f3,c4,f4,c5]@8 ~@3 [ab3,ab4], ~@6 eb5@6 db4 ~ [c4,c5]@10 b4 ~@23, ~@8 [gb4,bb4]@7 ~ [eb4,a4]@10 ~@22]/3", // F F5 Ab C Gb Ebdim
  P: "[~@2 [f4,f5] eb4 eb4@2 db5 ~@5 [f3,c4,f4,c5]@8 ~@3 [ab3,ab4], ~@6 eb5@6 db4 ~ [c4,c5]@6 ~@4 b4 ~@23, ~@8 [gb4,bb4]@7 ~ [eb4,a4]@11 ~@21]/3", // F F5 Ab C Gb Ebdim
  Q: "[~@4 [f4,f5]@2 [eb4,eb5]@6 db5@2 [c4,c5]@5 ~ db5@2 [bb3,bb4,db5,f5,bb5]@3 ~@7, ~@12 db4 ~@7 db4 ~@11]/2", // F Eb C Bbm
})).s("gm_brass_section").gain(0.3).pan(0.8)

// chords · string ensemble 2 · "SYNTH PAD"
const string_ensemble_2 = note(`<
  ~@21 A B A B C D A E A B A B C D A E F@2 G@2 H@2 I@2 J K ~@21 L@8 M@8 N@4 O@7 L@8 M@8 P Q@8 M@8 P Q@8 R@8 ~@2
>`.pickRestart({
  A: "[bb3,db4,f4,bb4]", B: "[f3,c4,eb4,f4,ab4]", C: "[ab3,db4,gb4,bb4]", D: "[ab3,eb4,ab4,c5]",
  E: "[gb3,db4,gb4,bb4] [f3,c4,f4,a4], a4 ~@15", F: "[f3,bb3,db4]/2", G: "[~ ab4 gb4@2, [eb4,bb4]@31 ~, gb4@7 ~@9]/2",
  H: "[f4,ab4,c5]/2", I: "[[gb4,bb4]@3 [ab4,c5,eb5], db5@11 ~@5]/2", J: "[ab4,db5,f5]@3 [ab4,db5,gb5]@5",
  K: "[ab4,db5,ab5]", // Db5
  L: "[~ [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [ab3,db4,gb4,bb4]@2 [ab3,eb4,ab4,c5]@2 [bb3,db4,f4,bb4]@2 [gb3,db4,gb4,bb4], ~@120 a4 ~@7]/8", // Bbm Fm7 Bbm Fm7 Gb Ab Bbm Gb
  M: "[[f3,c4,f4,a4] [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [ab3,db4,gb4,bb4]@2 [ab3,eb4,ab4,c5]@2 [bb3,db4,f4,bb4]@2 [gb3,db4,gb4,bb4], ~@120 a4 ~@7]/8", // F Bbm Fm7 Bbm Fm7 Gb Ab Bbm …
  N: "[[f3,c4,f4,a4] [f3,bb3,db4]@4 [eb4,gb4,bb4]@2 [c4,f4,bb4], ~@56 gb4 ~@7]/4", // F Bbm Ebm Fsus4
  O: "[[f4,a4]@8 bb4@5 ~ c5@6 db5@4 bb4@6 c5@6 db5@4 ab5@6 gb5@5 ~ f5@4 a5@6 bb5@6 c6@4 [gb4,bb4,db5,db6]@40, ~ [f3,bb3,db4]@4 [eb4,gb4,bb4]@2 [f4,a4,c5]@2 ~@5]/7", // F Gb Bbm Ebm F
  P: "[f3,c4,f4,a4] [f3,a3,c4]", // F
  Q: "[[a4,c5,f5,a5] [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [ab3,db4,gb4,bb4]@2 [ab3,eb4,ab4,c5]@2 [bb3,db4,f4,bb4]@2 [gb3,db4,gb4,bb4], ~@120 a4 ~@7]/8", // F Bbm Fm7 Bbm Fm7 Gb Ab Bbm …
  R: "[[f3,c4,f4,a4] [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [bb3,db4,f4,bb4]@2 [f3,c4,eb4,f4,ab4]@2 [ab3,db4,gb4,bb4]@2 [ab3,eb4,ab4,c5]@2 [bb3,db4,f4,bb4]@2 ~]/8", // F Bbm Fm7 Bbm Fm7 Gb Ab Bbm
})).s("gm_string_ensemble_2").gain(0.2)

// other · synth bass 1 · "SYNTH"
const synth_bass_1 = note("<~@4 A B@6 C D E F G D E H ~@33 I@7 ~ J ~ K ~ J ~ L ~@80>".pickRestart({
  A: "~@10 f3 ab3 db4 ab3 f3 ab3", B: "db4 ab3 ~@8 f3 ab3 db4 ab3 f3 ab3", C: "db4 ab3 ~@14",
  D: "~@10 g3 bb3 eb4 bb3 g3 bb3", E: "eb4 bb3 ~@14", F: "~@10 a3 c4 f4 c4 a3 c4", G: "f4 c4 ~@14",
  H: "~@10 gb3 bb3 db4 bb3 gb3 bb3", I: "~@2 f3 ab3 db4 ab3 f3 ab3 db4 ab3 ~@6",
  J: "~@2 g3 bb3 eb4 bb3 g3 bb3 eb4 bb3 ~@6", K: "~@2 a3 c4 f4 c4 a3 c4 f4 c4 ~@6",
  L: "~@2 gb3 bb3 db4 bb3 gb3 bb3 ~@8",
})).s("gm_synth_bass_1").gain(0.24).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@3 B C@15 A@2 C@26 A@4 C@15 D A B C@24 E ~ F C@48 G H ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2", D: "x ~ x!2", E: "x", F: "~ x", G: "x ~@2 x ~@3 x", H: "~@2 x!2 ~@4",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@3 A B@15 ~@2 B@26 ~@3 C B@15 D ~ E B@24 ~@2 E B@49 ~@2>".pickRestart({
  A: "x!4 ~@2 x ~", B: "~ x ~ x", C: "~@4 x!4", D: "~ x ~@2", E: "~@3 x",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@95 [~ x ~@2] ~@16 [~ x] ~@16 [~ x] ~@17>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A@3 B C@15 D@28 A@4 E C@14 F D@17 G H@7 I ~@2 J D@48 K L ~>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~@3 x!2 ~@2 x!2", C: "x ~ x!2 ~@2 x!3 ~ x!2 ~@2 x!2", D: "x!16",
  E: "~@2 x!2 ~@2 x!3 ~ x!2 ~@2 x!2", F: "x ~ x!2 ~@2 x!10", G: "x!9 ~ x!3 ~ x!2", H: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
  I: "x ~ x!3 ~ x!3 ~ x!2 ~@2 x!2", J: "~@8 x!8", K: "x!5 ~@3 x ~@3 x ~@3", L: "x!2 ~@2",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@112 [~@5 x!2 ~@9] ~@16 [~@5 x!2 ~@9] ~@15 [~@3 x ~@12] ~>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@145 [~ x ~@6] ~>").gain(0.5)

// drums · china
const china = s("cr").struct(`<
  ~@3 A ~@7 A ~@9 B ~@7 B ~@7 B ~@7 B ~@5 B ~@7 B ~@8 A ~@7 A ~@16 B ~ C ~@7 A ~@8 A ~@7 A ~@8 A ~@7 A ~@6 D E ~
>`.pickRestart({
  A: "~ x", B: "x", C: "~ x!2 ~", D: "~@3 x ~@3 x", E: "~@3 x ~@4",
})).gain(0.45)

// … 11 more lines

More by Bee Gees