Strudelify

She Never Heard Me Call

Air Supply

KeyE majorTempo121 bpm
0:00/0:00
// She Never Heard Me Call — Air Supply
// 121 bpm, 4/4, key E 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 (4/4 at bar 1, 3/4 at bar 94, 4/4 at bar 95) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/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 nylon
const acoustic_guitar_nylon = note("<A@7 B@8 C@2 D@8 E@4 F@8 G@6 H@4 I@8 J@6 K@4 L@8 M@4 N@5 O P@8 Q@4 ~>".pickRestart({
  A: "[~@41 e3 ~@3 e3 ~@9 a3, e2@14 e3 g#3@15 e3@2 e3@6 f#3@14 b3@4, ~ b2@3 b3@2 e3@2 b3@2 e3@2 b3@6 e3@2 b3@2 e3@2 b3@2 e3@3 c#3@10 g#3 b3@2 e3 g#3 b3@4 e3 c#3 e3@3 c#3@3, ~@2 f#3@14 e3 c#3@2 a3@2 c#3@2 a3@2 c#3@2 a3@4 a3@15 e3 g#3@9, ~@3 g#3@2 b2@2 g#3@2 b2@2 g#3@2 b2@15 b3@5 b2 f#3 g#3 b3 b2@14 a3@3 e3@2]/7",
  B: "[~@52 e4 ~@2 g#3 g#3 ~@3 g#3 ~@2 e4, b3@4 b3@4 b3@2 e3@2 b3@2 e3@2 b3@2 e3@5 g#3@15 e3@8 b3@13 e4@3 c#4@2, ~ c#3@4 c#3@14 g#3@2 b2@13 e3@2 b3@3 b3 f#4 d#3 f#3 f#4@4 d#4 [e4,g#4] g#3 c#4 d#4@13, ~@2 e3@4 e3@3 b2@2 g#3@2 b2@2 g#3@2 b2@3 b3@4 e3 c#3 e3 a3 b3 c#3 e3 a3 b3 c#3@2 a3@9 d#3@8 c#4 e4 g#4@10, ~@3 a3@4 a3@15 f#3@15 c#3@8 f#3@9 c#4@3 g#3 c#4@3 g#3@3]/8", // E
  C: "[g#3 ~@14 g#3, e4@3 e4@5 b3 b2 e3 g#3 b3 b2 e3@2, ~ g#3@5 b3 d#4@9, ~ c#4@7, ~@4 d#4 f#3@11]/2",
  D: "[~@36 e4 ~@26 g#4, b3@4 b3@3 g#3@15 e3@9 d#4 g#4@14 e4@5 g#3@4 f#4 g#4 b3 e4 g#4@2 b3 e4@2, ~ b2@4 b2@13 e3@2 b3@3 b3 f#4 f#3 b3 d#4 f#4@5 g#3 c#4 d#4@14 g#3 c#4@14, ~@2 e3@6 b3 c#3 e3 a3 b3 c#3 e3 a3 b3 c#3@2 a3@10 f#3@8 e4 c#4 g#3 c#4 g#3 c#4@5 g#3 a4@16, ~@3 g#3@3 f#3@15 c#3@9 b3@13 e4 g#3 e3@7 [d#4,f#4] b3 d#4@10]/8", // D#m
  E: "[~@31 d#4, ~ b3@4 b3@2 b3@6 a3@9 d#5@8 b3@2, ~@2 e4@6 c#4 a3 c#4@2 e4@7 f#4@13, ~@3 g#4@11 c#4@10 g#4 g#3 b3 g#4@5, ~@6 b4@10 d#4 b3 d#4@11 g#3@3]/4",
  F: "[~@14 a4 ~@23 c#4 ~@24 g#3, g#4@3 g#4@13 a5@9 f#3 a3 f#4@3 a3 c#4@3 a3@6 e4 f#3 a3 e4@2 f#3@2 e4@13 b3@2 f#3@2, ~ g#3@6 e4@2 c#4 e4 a4@2 c#4 e4 e5@8 c#4 g#4@5 f#3@10 c#4@13 d#4@12, ~@2 b3@13 a4@2 c#4 e4 a4@13 g#4@14 a3@11 b2 f#3 g#3@2 b2@3, ~@6 d#4@15 c#4 e4@13 f#4@13 d#4@2 f#3 b3@3 f#3 b3 e3@8]/8",
  G: "[~@47 a3, b3@4 b3@4 e3 c#3 e3 a3 b3 c#3 e3 a3 b3 c#3 e3@2 b3@5 b2 f#3 g#3 b3 b2 f#3 g#3 b3 b2 f#3@2 b3@4 e3 c#3 e3 a3 b3 c#3 e3@2, ~ b2@4 b2@14 a3@3 e3@2 e3@15 g#3@9, ~@2 f#3@4 f#3@15 c#3@14 g#3@2 b2@11, ~@3 g#3@4 g#3@16 a3@15 f#3@10]/6",
  H: "[~@15 e3, b3@2 b3@3 g#3 b3@2 e3@4 c#3@4, ~ c#3@4 c#3@13 f#3@2 b3@6 e3@2 b3@4, ~ e3@2 e3 e3@3 g#3@8 ~, ~@3 a3@4 a3@15 f#3@10]/4",
  I: "[~@18 e4@3 e4 ~@6 e4@4 ~@2 d#4@2 ~@26 e3@2, c#3@7 d#4@8 ~ e4@7 g#3@7 b3@2, ~ e3@2 e3@5 c#4@4 g#3@8 e3@4 e3@4 c#3@4, ~@4 b3@4 b3@14 e4@5 c#4@15 g#3@2 b3@6 f#3@4 f#3@10, ~@5 d#4 f#4@8 ~@4 d#4@8 b3@3 e3@2 ~]/8",
  J: "[~@18 e4@3 e4 ~@25 g#4, c#3@14 d#4@14 g#3@12 g#4 b3 e4 g#4@3 e4@2, ~@2 e3@4 e3@10 c#4@8 f#3@13 e4 d#4@10, ~@2 b3@2 b3@7 e4@5 e4@2 f#4@6, ~@10 d#4@2 f#4@14 c#4@4 c#4@15 b3@3]/6",
  K: "[~@6 e4@2 ~@10 d#4@2 ~@11 g#4, ~ b3@4 b3@10 a3@15 d#4@2, ~@2 e4@4 ~@2 e4@9 b3@3 d#4 b3 d#4 b3 g#4 b3 d#4 g#4@4 ~, ~@3 g#4@13 f#4@16, ~@9 a3 c#4@3 a3 c#4@15 b3@3]/4",
  L: "[~@27 f#4!2 ~@6 f#4 f#4@2 ~@4 b3@2 ~@4 b3@2 ~@2 a3@2 ~@9 b3, g#4@4 g#4@15 a4@4 a4@2 a4@16 f#3@4 f#3@2 f#3@15 e4@2, ~@2 b3@13 a4@3 e4@4 e4@16 ~@2 b3@2 ~@2 b3@2 b3@2 ~@2 b3@7 b3 d#4@6, ~@3 d#4@3 d#4@16 ~@2 f#4@3 ~@2 f#4@3 f#4@3 ~@3 f#4@16 ~@2 e4@3 b3 e4 b3@2 ~, ~@7 e4@2 c#4 e4 a4@2 c#4 e4@3 c#4@4 c#4@9 c#4@4 c#4@16 ~@4 a3@10]/8",
  M: "[~@11 a3@2 ~@6 b3@2 ~@7 d#4@4, e4@2 e4@2 e4@2 e4@2 e4@9 b3 d#4@3 b3 d#4 b3 d#4@2 b3@6, ~ b3@2 b3@2 b3@2 b3@9 f#4@16, ~@9 a3@2 ~@2 a3@2 a3@16 ~, ~@5 c#4@2 c#4@8 ~]/4",
  N: "[~@2 b3@4 ~@20 a3@4 ~@2 c#4@2 c#4!2 c#4@2 c#4@2, d#4@14 e4@3 c#4@2 a4@16 ~@5, ~@6 b3@15 c#4@2 c#4@2 c#4@6 f#3@9, ~@7 e4@2 c#4 e4 a4@2 c#4@2 a4@3 e4@4 e4@16 ~@2, ~@4 a3@8 a3 ~@2 a3@5]/5",
  O: "~@7 e4, e4@3 e4@4 ~, ~ f#3@4 f#3@3, ~ a3@2 a3",
  P: "[~@63 a3, d#4@4 d#4@3 d#4@14 b2@13 e3@2 b3@4 b3@2 e3@2 b3@2 e3@9 g#3@6 c#3 e3@2, ~@2 f#3@3 f#3@13 e3@5 g#3@15 e3@3 b2@2 g#3@2 b2@2 g#3 b3 b2 f#3@2 b3@4 e3 c#3 e3 a3 b3@4, ~@3 a3@3 a3@14 b3@4 e3 c#3 e3 a3 b3 c#3 e3 a3 b3 c#3@2 a3@4 a3@14 b2@11, ~@8 b3 b2 e3 g#3 b3 b2 e3 g#3 b3 b2@2 g#3@3 f#3@15 c#3@14 g#3@3 f#3@10]/8",
  Q: "[~ e2, b3@9 b3@13 e4@8 b2@32 ~@2, ~@2 c#3@9 c#3@13 d#4@32 ~@8, ~@4 e3@9 e3@13 g#3@32 ~@6, ~@6 a3@9 ~ a3@12 f#3@32 ~@4]/4",
})).s("gm_acoustic_guitar_nylon").gain(0.26)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@44 A@4 B@8 C@6 D@6 E@2 F@4 G@6 H@5 ~@11>".pickRestart({
  A: "[~@17 a4@15, [e2,e3] [e2,e3], ~ [g#3,b3,e4]@32 [a3,c#4,e4]@31, ~ g#4@16 ~@15]/4", // E A
  B: "[~@17 [c#4,e4,g#4]@15 ~@2 g#4@14 ~@50 a4@30, [d#3,f#3]@32 [a2,e3]@24 [b2,d#3]@9 [g#3,b3]@32 [a3,c#4,e4]@31, ~ [b3,d#4,f#4]@32 [a3,c#4,e4]@15 b2 [e4,g#4]@8 [f#3,d#4]@9 [e4,g#4]@32 ~@30, ~@16 [c#3,g#3]@32 a3@9 b3 f#4@32 ~@38, ~@49 c#4@15 [e2,e3]@32 [e2,e3]@32]/8", // C#m D#m A5 B G#m A B A …
  C: "[~@17 [c#4,e4,g#4]@15 ~@34 [e4,g#4]@30, [d#3,f#3]@32 a2@17 e4@7 [a2,d#3]@9 [g#3,b3]@31, ~ [b3,d#4,f#4]@31 e3@2 g#4@15 [a3,c#4]@15 [g#2,e3]@32, ~@16 [c#3,g#3]@32 b2@9 b3 f#4@32 ~@6, ~@33 [a3,c#4,e4]@15 e3@2 g#4@7 [f#3,d#4]@32 ~@7]/6", // C#m E D#m Adim G#m B A C#m …
  D: "[~@63 a4@32 ~, e3@16 d#3 f#3@17 [d#4,g#4]@32 ~@30, a2@16 a2@17 [g#3,b3]@32 ~@31, ~ [a3,c#4]@16 b3 f#4@32 ~@12 [c#3,a3,c#4,e4]@32 ~@2, ~ [e4,a4]@8 d#4@7 [g#2,d#3]@16 ~@16]/6", // G#5 G#m A A5 G#5
  E: "[~ f#4@15, [f#2,f#3], ~ [a3,c#4]@31]/2", // F# A
  F: "[~@17 [e4,g#4]@15, [b2,f#3]@16 [b2,f#3]@17 [g#3,b3]@31, ~ e4@17 f#4@32 ~@14, ~ b3@16 d#4@32 ~@15, ~@2 f#4@15 b3@15 [g#2,e3]@32]/4", // E B5 G#m C#m
  G: "[~@63 a4@32 ~, e3@17 [b3,d#4] f#4@32 ~@12 [c#3,a3,c#4,e4]@32 ~@2, a2@8 [a2,f#3]@9 [d#4,g#4]@16 ~@15, ~ [a3,c#4]@31 [g#2,d#3]@32 ~@32, ~@2 [e4,a4]@31 [g#3,b3]@32 ~@31]/6", // B A D G#5 A G#5 A5 G#m
  H: "[~@34 f#4@14 ~ [b3,d#4,f#4]@31, [f#2,f#3]@2 [b2,f#3] [b2,f#3]@2, ~ [a3,c#4]@32 e4@32 ~@15, ~@2 f#4@31 b3@16 ~@31]/5", // B F# B5 A
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.4)

// chords · piano
const piano = note("<~@56 A@2 B@7 C@6 D@6 E@8 ~@11>".pickRestart({
  A: "[~@2 [e4,g#4,c#5,e5]!2, [d#4,f#4,b4]]/2", // C#m B
  B: "[~@2 e4@2 ~@4 [b4,e5]@2 [e5,g#5]@2 ~@3 e4 ~@4 [b4,d#5]@2 [b4,d#5]@2 [g#4,b4,d#5]@4, [c#5,g#5]@4 ~ b4@3 [c#4,e4]@3 f#5@3, a4@2 [c#4,e4,a4]@4 [g#5,b5]@3 [a4,c#5,e5]@4 ~, ~@2 [g#4,e5]@6 g#4@7 [g#3,b3]@5 f#4@8, ~@6 [b3,d#4,f#4]@6 e5@4 a4 [a5,c#6,e6]@8 ~@3]/7", // E5 E B G#m C#5 C#m A G#m …
  C: "[[g#4,b4]@4 [d#4,g#4,b4]@2 ~ [a4,c#5]@7 [a4,c#5,e5,a5] [a4,c#5]@9 f#4@2 [a3,c#4,f#4]@2 c#4@4 ~@8 [b4,e5,f#5]@8, d#5@2 ~ c#5 [c#4,g#4,c#5]@2, ~@3 [d#4,g#4,b4]@8 ~@3 [a3,f#4]@8 ~@2, ~@7 e4@16 ~ a4@16 ~@8, ~@15 [e5,a5]@16 ~@17]/6", // G#m A F#m Bsus4 C#5 G#m D A5
  D: "[[d#5,f#5] ~ [b4,e5,g#5]!2 [b4,e5] e5 [c#5,e5] ~ b4!2 [d#4,g#4,b4,d#5]!2, b5@4 g#5@3 [c#5,e5,c#6]@4 ~, b4@2 ~@3 b4@3 b5@4, ~ [a4,d#5,f#5]@4 g#4@3 d#5 [f#4,f#5]@3, ~@3 a4@2 ~]/6", // D#m E E5 C#m G#m C#m D#dim F#
  E: "[[d#4,g#4,b4]@6 ~ [e4,a4,c#5]@7 [a4,c#5,e5] a4@9 [c#4,f#4]@6 f#4@2 [f#4,a4,c#5]@4 [a4,c#5]@2 ~@2 [b3,f#4,b4]@8 [b3,d#4,f#4,b4]@16, d#5@8 ~@4 a4@4 ~@3 [a4,c#5,f#5]@8 ~@5, ~@3 [d#4,g#4,b4]@8 ~@4 [a3,c#4]@8 ~@9, ~@7 e4@8 ~@3 f#4@2 e4@8 ~@4, ~@15 [c#5,e5,a5]@16 ~@33]/8", // G#m A F#5 F#m A B5 B F#m …
})).s("gm_piano").gain(0.27).pan(0.9)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@23 A B C D E F G@2 H I@2 J K L@2 M@2 N@2 O@2 ~@15 P N@2 Q R S@4 T@2 U V N@2 Q W X@4 M@2 N@4 M@2 Y@2 ~@6
>`.pickRestart({
  A: "c#4 b3", B: "b3@3 ~ b3@3 ~", C: "d#4@10 ~@2 g#4@3 ~", D: "a4@10 ~@2 e4@3 ~", E: "f#4@6 ~@2 g#4@3 ~ a4@3 ~",
  F: "g#4@6 ~@2 g#4@3 ~ b4@3 ~", G: "[d#5@8 ~@4 b4 ~ a4@12 ~@6]/2", H: "c#5@13 ~@3",
  I: "[b4@6 a4@2 g#4@2 a4@11 ~@3 a4@3 ~ a4@3 ~]/2", J: "a4@10 ~@2 a4 ~ g#4 ~", K: "f#4 ~", L: "[g#4@12 g#4 f#4 e4@2]/2",
  M: "c#4/2", N: "b3/2", O: "[c#4@13 ~@3]/2", P: "c#4@3 ~ b3@3 ~", Q: "c#4", R: "b3",
  S: "[b3@26 ~@2 b3 ~ c#4@31 ~@3]/4", T: "a3/2", U: "a3@10 ~@2 a3 ~ g#3 ~", V: "f#3", W: "d#4",
  X: "[d#4@26 ~@2 d#4 ~ e4@12 ~@2 e4 ~ e4@15 ~@3]/4", Y: "[b3@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.22).pan(0.7)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~ A B@2 C@2 B@2 D ~@7 C@2 E@2 A F@2 G C@2 F H@2 I@3 E@2 J H K@8 ~@3 L M N O P Q@2 R@2 S T@2 U V W F X Y@4 E@2 Z AA
  AB@2 V AC AD@4 AE@4 AF@6 ~@6
>`.pickRestart({
  A: "b3", B: "a3/2", C: "b3/2", D: "b3@13 ~@3", E: "c#4/2", F: "c#4", G: "c#4 b3", H: "d#4",
  I: "[g#4@10 ~@2 g#4 ~ e4@34]/3", J: "e4@5 ~ f#4 e4", K: "[e4@61 ~@3]/8", L: "~@8 c#4@3 ~ a3@3 ~", M: "d#4@13 ~@3",
  N: "e4@13 ~@3", O: "c#4 b3 c#4 e4", P: "e4@2 d#4@2 d#4 c#4 b3@2", Q: "e4/2", R: "[c#4@3 e4]/2", S: "f#4@13 ~@3",
  T: "g#4@13 ~@3", U: "a4@3 ~ b4@3 ~", V: "e4", W: "d#4@10 ~@2 b3@3 ~", X: "d#4 ~", Y: "[d#4@24 ~@4 d#4 ~ e4@34]/4",
  Z: "b3 c#4!2 d#4", AA: "d#4 e4!2 f#4", AB: "[e4 ~ d#4@5 ~ e4@21 ~@3]/2", AC: "f#4",
  AD: "[g#4@24 ~@4 g#4 ~ c#5@10 ~@4 c#5 ~ a4@10 g#4@4 e4@4]/4", AE: "f#4/2", AF: "[e4@85 ~@11]/6",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1_3 = note(`<
  A@2 B@2 C@2 B@2 D ~@7 E@2 F@2 G H I J K@2 L@2 M N@3 O@2 P Q E@2 R@2 E@2 R@2 ~@3 S G H T U E@2 F@2 V H W X K@2 L@2 Y Z
  F@2 AA@2 AB@2 K@2 L@2 AC@2 AD@2 AA@2 AE@2 E@2 AF@2 E@2 AG@2 ~ AH@3
>`.pickRestart({
  A: "[~@7 e3, b2]/2", B: "[e3 e3, a2]/2", C: "[e3 e3, b2]/2", D: "[b2,e3]@5 ~@3", E: "[b2,g#3]/2", F: "[c#3,a3]/2",
  G: "[d#3,f#3]", H: "[c#3,g#3]", I: "[a2,g#3]@5 ~@3", J: "[b2,e3]@3 ~ [a2,f#3]@3 ~", K: "[g#2,g#3]/2",
  L: "[a3 b3, a2]/2", M: "g#2 ~ f#2 ~ g#2@3 ~ g#3@2 f#2 ~ [g#2,b3]@3 ~, g#3@6 ~@2 g#2 ~@7",
  N: "[g#2 ~ f#2 ~ g#2 ~ g#2 ~ g#2@3 ~ [g#2,d#4] ~ [c#3,c#4]@34, d#4@5 ~@19]/3", O: "[f#2,a3]/2",
  P: "a3@10 ~@2 a3 ~ g#3 ~, b2", Q: "b2, f#3@13 ~@3", R: "[a2,a3]/2", S: "~@8 [c#3,e3]@5 ~@3", T: "[a2,e3]",
  U: "e3 f#3, b2", V: "d#3 ~ e3 ~ d#3@10 ~@2, f#3", W: "[a2,g#3]", X: "[b2,a3]@3 ~ [a2,b3]@3 ~", Y: "[g#2,g#3]",
  Z: "[g#2,g#3]@8 ~@4 [g#2,g#3] ~ [c#3,a3]@2", AA: "[f#2,f#3]/2", AB: "[b2@8 b2@3 ~ a2@3 ~, f#3@13 ~@3]/2",
  AC: "[g#2@3 ~ g#2@3 ~ g#2 ~ f#2 ~ g#2@3 ~ g#2 ~ f#2 ~ g#2 ~ g#2 ~ g#2@3 ~ [g#2,g#3] ~ [c#3,a3]@2, g#3@3 ~]/2", // G# F#m
  AD: "[a3@8 ~@4 a3 ~ a3@2 a3@16, c#3]/2", AE: "[b2,f#3]/2", AF: "[a3, a2@13 ~@3]/2", AG: "[[a2,a3]@27 ~@5]/2",
  AH: "[~@4 [e2,b2,e3,g#3]@31 ~@13]/3", // E
})).s("gm_string_ensemble_1").gain(0.18).pan(0.7)

// bass · electric bass finger
const bass = note(`<
  A@4 B@4 C@2 D@2 E F G H C@2 D@2 E F G I J K G@2 L M@2 N O@2 P Q A@4 B@4 R S T U E F G V S@2 D@2 E F W I X@2 Y Z X AA@2
  AB AC AD AE I K@2 G@2 AF AG@2 AH AI AJ AK@2 A@4 AL@4 ~@4
>`.pickRestart({
  A: "[e2@56 ~@4 e2@3 ~]/4", B: "[e2@57 ~ f#3 ~ e3 ~ f#3 ~]/4", C: "[e2@29 ~@3]/2", D: "[~@16 e3@13 ~@3, e2@29 ~@3]/2",
  E: "d#3@6 ~@2 d#3 ~ f#3 ~ d#3@3 ~", F: "c#3@13 ~ b2 ~", G: "a2@3 ~ a2@3 ~", H: "b2@6 ~@2 b2@3 ~ b1@3 ~",
  I: "b2@3 ~ a2@3 ~", J: "g#2@6 ~@2 g#2@5 ~ g#2 ~", K: "g#2@3 ~ g#2@3 ~", L: "g#2 ~ f#2 ~ g#2@3 ~ g#2 ~ f#2 ~ g#2@3 ~",
  M: "[g#2 ~ f#2 ~ g#2 ~ g#2 ~ g#2@3 ~ g#2 ~ c#2@8 ~@2 c#2@4 ~@2 c#2 ~]/2", N: "c#2@10 ~@2 g#2@3 ~",
  O: "f#2@3 ~ f#2@3 ~", P: "b1@13 ~@3", Q: "b1@10 ~@2 b1@3 ~", R: "e2@13 ~ e2 ~", S: "e2@13 ~@3", T: "e2@13 ~ a2 ~",
  U: "e2@10 ~@2 e3@3 ~", V: "b2@3 ~ b2@3 ~", W: "a2@13 ~@3", X: "g#2@6 ~@2 g#2@3 ~ g#2 ~ g#2 ~", Y: "a2@13 ~ a2 ~",
  Z: "a2@10 ~@2 a2@3 ~", AA: "[g#2@3 ~ g#2 ~ g#2 ~ g#2@3 ~ g#2 ~ c#2@7 ~@3 c#2@4 ~@2 c#2 ~]/2", AB: "c#2@8 ~@4 g#2@3 ~",
  AC: "f#2@6 ~@2 f#2@3 ~ f#2 ~ c#2 ~", AD: "f#2@6 ~@2 f#2 ~ c#2 ~ f#2 ~ c#2 ~", AE: "b2@6 ~@2 b2 ~ f#2 ~ b2 ~ f#2 ~",
  AF: "g#2@3 ~ g#2@3 ~ g#2 ~ f#2 ~ g#2@3 ~", AG: "[g#2 ~ f#2 ~ g#2 ~ g#2 ~ g#2@3 ~ g#2 ~ c#2@15 ~ c#2 ~]/2",
  AH: "c#2@9 ~ e2 ~ e2 ~ e2 ~", AI: "f#2@10 ~@2 f#2 ~ f#2 ~", AJ: "f#2@10 ~@2 c#2 ~ f#2 ~", AK: "b2@13 ~@3",
  AL: "[e2@59 ~@5]/4",
})).s("gm_electric_bass_finger").gain(0.22)

// chords · flute
const flute = note("<A B C D E@2 F@2 G@2 ~@29 H E@2 F@2 I@2 ~@41 H E@2 J@2 ~ K@3>".pickRestart({
  A: "~@6 [b3,g#4] [c#4,a4]", B: "[b3,g#4]@6 ~@2 [g#4,b4]@3 ~ [e4,g#4]@3 ~", C: "[c#4,a4]@5 ~ [c#4,a4] [d#4,b4]",
  D: "[e4,c#5]@5 ~ [d#4,b4]@5 ~ [c#4,a4]@3 ~", // C#m G#m F#m
  E: "[[b3,g#4]@2 [c#4,a4]@2 [b3,g#4]@17 ~ [g#4,e5]@2 [g#4,e5]@2 [e4,b4]@2 [e4,b4]@2 [b3,g#4]@2]/2", // E F#m E C#m E5 E
  F: "[[c#4,a4]@5 ~ [d#4,b4]@2 [e4,c#5]@14 ~@2 [d#4,b4]@3 ~ [c#4,a4]@3 ~]/2", G: "[[b3,g#4]@3 ~]/2",
  H: "~@8 [e4,c#5]@3 ~ [c#4,a4]@3 ~", I: "[[b3,g#4]@13 ~@3]/2",
  J: "[[c#4,a4]@5 ~ [d#4,b4]@2 [e4,c#5]@15 ~@2 [c#4,a4]@7]/2", K: "[~@4 [b3,g#4]@31 ~@13]/3",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_2 = note("<A@2 B C D@2 E@2 F@2 ~@29 G H@2 E@2 I@2 ~@41 G H@2 J@2 ~ K@3>".pickRestart({
  A: "[g#4@3 ~ f#4@22 ~@6]/2", B: "f#4@8 ~@4 f#4 ~ g#4 ~", C: "a4@4 ~@2 g#4@5 ~ f#4@3 ~",
  D: "[f#4 ~ c#4 ~ f#4@22 ~@6]/2", E: "[f#4@4 ~@2 g#4 ~ a4@13 ~@3 g#4@3 ~ f#4@3 ~]/2", F: "[g#4@21 ~@11]/2",
  G: "~@8 a4@3 ~ f#4@3 ~", H: "[e4 ~ f#4 ~ e4@16 ~@2 b4 ~ b4 ~ g#4 ~ g#4 ~ e4 ~]/2", I: "[g#4@3 ~]/2",
  J: "[f#4@4 ~@2 g#4 ~ a4@13 ~@4 f#4@6 ~]/2", K: "[~@4 e4@31 ~@13]/3",
})).s("gm_flute").gain(0.06).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@8 A@21 B ~ A@5 ~@8 A@21 C ~ A@2 D A@7 E ~ A@5 ~@12>".pickRestart({
  A: "x", B: "x ~@6 x", C: "x ~@5 x!2", D: "x!2 ~@2", E: "x ~ x ~@3 x!2",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@44 A@15 ~ A@5 B A@5 ~ A@5 C A@6 ~@12>".pickRestart({
  A: "~ x", B: "~@7 x", C: "~@4 x ~@2 x",
})).gain(0.22)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 [~ x]!28 ~@60>").gain(0.12)

// drums · low tom
const low_tom = s("lt").struct("<~@59 [~@5 x ~@2] ~@5 [~@3 x!2 ~@3] ~@5 [~@5 x!3] ~@24>").gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@59 [~ x!3] ~@11 [~@3 x ~@4] ~@24>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~@3 x] ~@35 [~@3 x] ~@43 [~@14 x!2] x ~@7>").gain(0.09)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@12 B ~@22 A ~@6 A@2 ~@3 A C ~@2 A ~ A@3 ~ A@3 D ~@2 A ~ A@2 ~@12>".pickRestart({
  A: "x", B: "~@7 x", C: "~@6 x!2", D: "x ~@5 x!2",
})).gain(0.28)

// drums · high tom
const high_tom = s("ht").struct("<~@71 [~ x ~@2] ~@24>").gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@43 A B@8 C B@6 ~ C B@3 C D C B C B C E C B C@3 F C B C B C@2 G ~@11>".pickRestart({
  A: "~@4 x!2 ~@2", B: "x!4", C: "~ x!3", D: "x!2 ~@2", E: "~ x", F: "~ x ~@2", G: "x",
})).gain(0.22)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@8 [x!4]!8 [~ x!3] [x!4]!13 [~ x!3] [x!4]!5 x ~@59>").gain(0.12)

stack(
  acoustic_guitar_nylon, electric_guitar_clean, piano, string_ensemble_1, string_ensemble_1_2, string_ensemble_1_3,
  bass, flute, flute_2, kick, snare, snare_soft, low_tom, mid_tom, open_hat, crash, high_tom, ride, ride_soft
)

More by Air Supply