Strudelify

The Turn of a Friendly Card

Alan Parsons

KeyF majorTempo92 bpm
0:00/0:00
// The Turn of a Friendly Card — Alan Parsons
// 92 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 6/4 at bar 28, 4/4 at bar 30) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 13 overdriven guitar (copy of ch 5 overdriven guitar)
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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 · piano
const piano = note(`<
  A@2 B@2 C@4 D@4 E@3 F@6 G@6 H@2 I@2 J K I@2 J K L M N O P Q R S I@2 J K I@2 J K T U T V@4 K ~@17
>`.pickRestart({
  A: "[~ [f4,d5] [g4,e5] ~@4 a4@3 [e3,g3,c4] ~ [c4,c5]@2 bb3@2, ~@3 f5@5 ~@8, ~@6 a4@6 d4@4 ~@6 d4@7 ~@3, ~@5 a3@5 ~@2 [f4,d5]@4]/2", // Dm C Dm
  B: "[~@2 d4@2 ~ a3 ~@4 c4@2 [d4,f4,a4]@2 [e4,g4]@2, [f4,a4]@7 ~ [f4,a4]@8 [e4,a4,c5]@7 ~ d5@8, ~ a3@3 d5@3 a3@2 e3@3 ~@4, ~@6 d4@3 ~@7]/2", // Dm Em F Am
  C: "[[f4,a4]@2 [e4,g4]@2 ~ a3 ~ a3@2 e3 ~ e3@2 ~@2 d4@2 ~@2 a3 ~ a3 ~ a3@2 e3 a3 e3 f4 a3 ~ a3, d5@4 ~@2 f4@3 ~ a3@2 ~ f3@3 ~ f3@3 ~@12, ~@14 bb3@3 ~ d4@2 ~@2 d4@3 ~@5 g4@2]/4", // F Em
  D: "[a4 a3 ~ a3 ~ a3 ~ a3@2 e3 ~ e3@2 ~@2 d4@2 ~@2 a3 ~ a3 ~ a3@2 e3 a3 e3 f4 a3 ~ a3, ~@2 g4@2 ~@2 f4@3 ~ a3@2 ~ f3@3 ~ f3@3 ~@12, ~@14 bb3@3 ~ d4@2 ~@2 d4@3 ~@5 g4@2]/4",
  E: "[a4@2 a3@2 ~@2 a3@2 [g4,a4,d5]@2 [g4,a4,d5]@4 [g4,a4,db5]@9 ~ [g4,a4,e5]@5 ~ [f4,a4,d5]@9 ~ [g4,a4,d5]@2 [g4,a4,d5]@4 [g4,a4,db5]@2, ~ g4 ~@10]/3", // Gsus2 A7 Dm Gsus2 A7
  F: "[~@16 g4@22 ~@2 [d4,f4,a4]@5 ~ [c4,e4,a4]@10 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@9 ~ [a3,c4,f4]@6 [g3,c4,e4]@9 ~ [d4,f4]@4 [e4,g4]@3 ~, ~@4 g2@15 ~@29, ~@5 f3@14 ~@29, ~@6 bb3@13 ~@25 a3@4, ~@7 d4@12 ~@29]/6", // Dm Am Eb Bb F C Dm Em
  G: "[[f4,a4]@4 [e4,g4]@3 ~ [d4,f4,a4]@5 ~ [c4,e4,a4]@10 [bb3,eb4,g4]@5 ~ [bb3,d4,f4]@9 ~ [a3,d4,f4]@15 ~ [g3,c4,e4]@15 ~ [d4,f4]@4 [e4,g4]@4 [f4,a4]@4 [e4,g4]@4 [d4,f4]@4 [c4,e4]@4, ~@3 a3]/6", // F Em Dm Am Eb Bb Dm C …
  H: "[[f3,a3,c4,d4]@3 ~]/2", // Dm7
  I: "[~ a3 ~ a3@2 e3 ~ e3@2 ~@2 d4@2 ~@2 a3, ~@2 f4@3 ~ a3@2 ~ f3@3 ~ f3@3, ~@10 bb3@3 ~ d4@2]/2",
  J: "~ a3 ~ a3@2 e3 a3 e3, ~@2 d4@3 ~@3", K: "f4 a3 ~ a3 a4 a3 ~ a3, ~ g4 ~ g4",
  L: "[g3,a3,d4] ~ [g3,a3,d4] ~ [g3,a3,d4] ~ [g3,a3,db4] ~ [g3,a3,db4] ~ [g3,a3,db4] ~ [g3,a3,db4] ~ [g3,a3,db4] ~", // Gsus2 A7
  M: "[a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~", // Dm
  N: "[g4,a4,d5] ~ [g4,a4,d5] ~ [g4,a4,d5] ~ [g4,a4,db5] ~ [g4,a4,db5] ~ [g4,a4,db5] ~ [g4,a4,db5] ~ [g4,a4,db5] ~", // Gsus2 A7
  O: "[d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~", // Gm
  P: "[a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~", // Dm C
  Q: "[g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~ [f4,bb4,d5] ~", // Eb Bb
  R: "[f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // Dm C
  S: "[d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~", // Dm
  T: "[g4,a4,d5]@2 [g4,a4,d5]@4 [g4,a4,db5]@9 ~", U: "[g4,a4,e5]@5 ~ [f4,a4,d5]@9 ~",
  V: "[~@4 g4@4 ~ a3 ~ a3@2 a3 ~ a3@2 g3 ~ g3@2 ~@2 a3@2 a3 ~ a3@2 e3 a3 e3, g2@15 ~@17, ~ f3@7 ~@13 f3@3 ~@8, ~@2 bb3@6 ~@10 c4@2 ~@2 d4@2 ~@2 d4@3 ~@3, ~@3 d4@5 ~@2 f4@3 ~ e4@2 ~@16]/4",
})).s("gm_piano").gain(0.3).pan(0.6)

// bass · fretless bass
const bass = note(`<
  A B C D E B F G H B C D I@5 J@4 K@5 L M@2 N O N P Q R Q S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL@2 AF AM AN
  AO N O N AP AQ AR AF AS AT AU AV@2 X Y Z ~@2
>`.pickRestart({
  A: "~ d3", B: "a2 bb2", C: "d2@7 ~ d3@8", D: "a2@2 d3 e3", E: "f3 e3 d3@2", F: "d2@7 ~ d2@8", G: "a1@7 ~ d2@4 a2@4",
  H: "d3@4 a2@3 ~ d2@8", I: "[f3@4 e3@3 ~ a2@4 e2 ~ a1@8 ~@2 d3@4 a2 ~ d2@9 ~ a2@4 e2 ~ a1@9 ~ g1@24]/5",
  J: "[~@4 g2@2 f2@2 d2@5 ~ a1@9 ~ c2@5 ~ g1@9 ~ d2@5 ~ a1@9 ~ d2@4 e2@4]/4",
  K: "[f2@4 e2@3 ~ d2@5 ~ a1@9 ~ c2@5 ~ g1@9 ~ d2@6 d2@9 ~ d2@6 d2@10 d2@4 e2@4]/5", L: "f2@4 e2@4 d2@4 c2@3 ~",
  M: "[bb1@25 ~ bb1@2 bb1@2 c2@2]/2", N: "d2@5 ~ d2@2 a1@7 ~", O: "bb1@5 ~ bb1 ~ d2@7 ~",
  P: "d2@5 ~ d2 ~ d2@2 a1 ~ c2@2 a1@2", Q: "d2@5 ~ d2 ~ a1@7 ~", R: "bb1@5 ~ bb1@2 d2@7 ~",
  S: "d2@3 ~ a2@3 ~ d2@4 d2 ~ d2 ~", T: "a1@5 ~ a1@9 c2", U: "d2@3 ~ a2 ~ d2@10", V: "a1@5 ~ a1@9 ~",
  W: "g1@6 g1 ~ g1@6 ~@2", X: "d2@5 ~ a1@9 ~", Y: "c2@5 ~ g1@9 ~", Z: "d2@6 a2@9 ~",
  AA: "d2@4 ~ d2 e2 f2 a2@2 d3@2 e3@2 f3@2", AB: "d2@5 ~ d2 ~ a1@5 ~ a2 ~", AC: "bb2@5 ~ c2 ~ d2@5 ~ c2 ~",
  AD: "d2@5 ~ d2 ~ a1@5 ~ c2 ~", AE: "d2@2 e2 ~ f2@2 a2 ~ f2@2 a2 ~ f2 ~ e2 ~", AF: "d2@5 ~ d2 ~ a1@5 ~ a1 ~",
  AG: "bb1@5 ~ bb1 c2 d2@5 ~ a1 ~", AH: "d2@5 ~ c2 ~ a1@5 ~ c2 ~", AI: "d2@3 ~ e2@3 ~ f2@3 ~ g2@3 ~",
  AJ: "a1@4 e2 ~ a2@5 ~ g2@2 a2 e2", AK: "d2 ~ f2 ~ a2 ~ d3@5 ~ f2@2 g2 ~",
  AL: "[a1@2 db2 ~ e2 ~ a2@4 g2 ~ a2 ~ g2@10 f2 ~ g2 ~ f2@2 e2 ~]/2", AM: "c2@5 ~ g1@7 ~ g1 a1",
  AN: "d2@5 ~ d2 ~ a1@6 a1 ~", AO: "d2@2 e2 f2 a2@2 f2 e2", AP: "d2@5 ~ a1 ~ c2 ~ a1 ~ c2 ~ a1 ~",
  AQ: "d2@5 ~ c2 ~ a1@6 a1 ~", AR: "bb1@5 ~ a1 ~ d2@5 ~ a1 ~", AS: "d2@5 ~ e2 f2 a2@4 d2!2 f2 g2",
  AT: "a1@2 db2 ~ e2 ~ a1@8 f2 e2", AU: "d2@2 f2 ~ a2 ~ d3@6 f1 ~ g1 ~",
  AV: "[a1@2 db2 ~ e2 ~ a2@5 ~ a1@2 g1@6 g1@4 g1@4 g1@4]/2",
})).s("gm_fretless_bass").gain(0.44)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H@2 F G I@7 J@8 K L@2 M N M O M N M P ~@8 Q@3 R S@3 T U V W X Y Z@2 R ~@17
>`.pickRestart({
  A: "~@9 f4@7, ~@8 [a3,d4]@7 ~", B: "~ g4@6 ~@5 bb3@3 ~, [c4,e4]@7 ~ [c4,d4]@7 ~, ~@9 f4@6 ~",
  C: "~ f4@6 ~@2 f4@6 ~, [a3,d4]@7 ~ [a3,d4]@7 ~", D: "~ e4@7 ~@4 g4@2 e4@2, [g3,c4]@2 [d4,f4] ~, ~@5 a3@2 ~",
  E: "d4@4 ~@2 a3 ~@2 f4@7, ~@4 e4@4 [a3,d4]@7 ~", // D5
  F: "~ e4@6 ~ c4@4 bb3@3 ~, [g3,c4]@7 f3@8 ~, ~@8 d4@7 ~, ~@8 bb3 ~@7", // C5
  G: "~ d4@6 ~ [a3,d4]@7 ~, [f3,a3]@6 ~ f3@7 ~@2", // D5 F
  H: "[[e3,g3,c4]@7 ~@9 d4@7 ~@2 f4@7, ~@8 d3@15 ~@9, ~@10 a3@13 ~ [a3,d4]@7 ~, ~@12 g3@11 ~@9, ~@7 e4@5 ~@4]/2", // C D5
  I: "[[e3,g3,c4]@7 ~@9 d4@7 ~@5 [a3,d4]@2 [a3,db4]@6 a3@4 ~@12 f3@2 g3@2 ~@4 [a3,d4]@2 [a3,db4]@6 db3@4 ~@8 g4@6 ~@3 g4@14 ~ [d4,f4,a4]@6 [c4,e4,a4]@2, ~@8 d3@15 ~ a2@16 d3@12 ~@4 a2@12 ~@4 g2@14 ~@2 [g2,f3,bb3,d4]@15 ~@9, ~@5 a3@7 ~@9 a3@5 ~@3 g3@7 ~ f3@6 ~@13, ~@12 g3@12 ~@2 g3@14 ~@6 d4@8 ~@22 bb3@11 ~@25, ~@7 e4@5 ~@10 e4@6 ~@11 d4@4 ~@13]/7", // C D5 A D5 A Dm Am Gm7
  J: "[~@6 a3@2 [bb3,eb4,g4]@6 d4@4 ~@4 bb3@2 [a3,c4,f4]@6 [g3,c4,e4]@10 ~@10 a3@5 ~ [d4,f4,a4]@6 [c4,e4]@4 ~@4 a3@2 [bb3,eb4,g4]@6 d4@4 ~@4 bb3@2 ~ f4@15 ~ e4@15 ~@6 a3@2, ~@2 e4@5 ~@7 [f4,g4]@10 ~@22 e4@9 ~@7 a4@9 ~@11 g3@6 [a3,d4]@15 ~ [g3,c4]@15 ~@3 a3@4 ~@2, ~@4 c4@4 ~@6 bb3@6 d4@4 ~@18 a3@6 d4@7 ~@11 e4@5 ~@7 [f4,g4]@10 ~@36 [e4,g4]@4, ~@18 g3@6 ~@16 d3@15 ~@13 c4@4 ~@6 bb3@6 d4@4 ~@32 [d4,f4]@4 ~@4]/8", // Eb F C Dm C Eb Fsus2 D5 …
  K: "~ a3 ~ a3 ~ a3 ~ a3, [f4,a4] [e4,g4] [d4,f4] [c4,e4]", L: "[~ d4@23 ~@8, [f3,a3]@23 ~@9]/2",
  M: "[a3,d4,f4]!2 [g3,c4,e4]!2", N: "[f3,bb3,d4]!2 [a3,d4,f4]!2", O: "[f3,a3,d4] [e3,g3,c4] [f3,a3,d4] [e3,g3,c4]",
  P: "[f3,a3,d4]@2 [e3,g3,c4]@2 [f3,d4] [d4,f4] [a3,d4,f4]@2, ~@2 a3 ~", // Dm C Dm
  Q: "[~ f4@7 ~ e4@6 ~ c4@4 bb3@3 ~@2 d4@6 ~ [a3,d4]@7 ~ [e3,g3,c4]@7 ~, d4@7 ~ [g3,c4]@7 f3@8 ~ [f3,a3]@6 ~ f3@7 ~@10, ~@16 d4@7 ~@25, ~@16 bb3 ~@31]/3", // D5 C C5 F
  R: "~@8 d4@7 ~, d3@15 ~, ~@2 a3@13 ~, ~@4 g3@11 ~, ~@3 e4@5",
  S: "[~ f4@7 ~ e4@6 ~ c4@4 bb3@3 ~@2 d4@6 ~ [a3,d4]@7 ~ [e3,g3,c4]@7 ~, [a3,d4]@7 ~ [g3,c4]@7 f3@8 ~ [f3,a3]@6 ~ f3@7 ~@10, ~@16 d4@7 ~@25, ~@16 bb3 ~@31]/3", // D5 C D5 C5 F
  T: "~@8 d4@7 ~, d3@15 ~, ~ a3@7, ~ g3@3, ~@3 e4@5", U: "~@2 [a3,d4] [a3,db4]@3 a3@2, a2, ~ g3@7",
  V: "~@6 f3 g3, d3@3 ~, ~ a3@5 ~@2, ~ e4@3, ~@3 d4@4 ~", W: "~@2 [a3,d4] [a3,db4]@3 db3@2, a2@3 ~, ~ g3@7",
  X: "~@4 g4@3 ~, g2@7 ~, ~ f3@6 ~, ~@4 bb3@11 ~, ~@3 d4@4 ~", Y: "~ f4@7 ~ e4@6 ~, [a3,d4]@7 ~ [g3,c4]@7 ~",
  Z: "[[g3,bb3,eb4]@8 ~ d4@6 ~ [a3,d4]@7 ~ [e3,g3,c4]@7 ~, ~@8 [f3,bb3]@6 ~ f3@7 ~@10]/2", // Eb D5 C Bb5
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.9)

// other · flute
const flute = note("<~@4 A B@2 C D E F@6 G H@3 I J@7 ~@50>".pickRestart({
  A: "~ d4 e4 f4@2 e4 d4 c4", B: "[a3@3 ~ c4@2 d4@4 c4@2 bb3@2 a3@4 ~@4 f3 g3 a3@2 d4@2 a3@2 a3@2]/2",
  C: "d4 a3!2 d4@5", D: "~@2 d4@2 e4@2 f4@4 e4 d4@3 c4@2", E: "a3@2 ~@2 c4@2 d4@4 c4 bb3@3 a3@2",
  F: "[~@2 f3@2 g3@2 a3@3 ~ d4@2 a3@2 a3@4 d4@2 a3@2 a3@4 d4@8 f3@2 g3@2 a3@3 ~ a3@2 a3@2 a3@4 d4@2 e4@2 f4@4 e4 d4@7 f3@2 g3@2 a3@4 a3@2 a3@2 a3@4 d4@2 e4@4 g4@6 ab4 g4]/6",
  G: "f4@5 ~@3",
  H: "[~@2 d4@2 e4@2 f4@4 e4@2 d4@2 c4@4 a3@2 c4@2 eb4@4 d4@4 c4 bb3@5 ~@2 a3 g3 a3 d4 a3@2 a3@2 a3 d4]/3",
  I: "a3!2 d4@6",
  J: "[~@2 d4@2 e4@2 f4@4 g4@2 f4@2 e4@4 d4@2 c4@2 eb4@4 d4@4 c4 bb3@5 ~@2 a3 g3 a3@2 d4@12 a3!3 d4 c4@12 ~@2 d4@40]/7",
})).s("gm_flute").gain(0.35)

// other · overdriven guitar
const overdriven_guitar = note("<~@28 A@3 B@4 C@2 D E F@2 G H I J K ~@32>".pickRestart({
  A: "[~@10 d4@2 e4@2 f4@4 e4@2 d4@2 c4@4 a3@2 c4@2 d4@4 c4@2 bb3@2 a3@8 f3 g3]/3",
  B: "[a3@2 d4@2 a3@2 a3@4 d4@2 a3@2 a3@4 d4@8 d4@2 e4@2 f4@4 e4@2 d4@2 c4@4 a3@2 c4@2 d4@4 c4@2 bb3@2 a3@8 f3 g3]/4",
  C: "[a3 d4 a3 a3@2 d4 a3 a3@2 d4@4 ~@2 f4]/2", D: "e4@2 f4@2 g4@2 g4@7 ~ g4@2", E: "f4 g4 a4 d5@4 d5",
  F: "[db5@2 d5@2 e5@2 e5@4 d5@2 e5@2 f5@15 a4 d5 e5]/2", G: "f5@2 e5@2 d5@2 c5@7 g4 c5 d5",
  H: "eb5@2 d5@2 c5@2 bb4@8 a4 g4", I: "a4 d5 a4 g4@2 e5 g4 d5", J: "c5@4 d5 c5 a4 g4 a4 f4 d4 a3 f4 d4 a3 f3", K: "d3",
})).s("gm_overdriven_guitar").gain(0.49).pan(0.4)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A B C D@2 E@2 F@2 E@2 G H@8 I@7 J@2 ~@8 K L K M N O P Q R S@2 T R S@2 T U V W@2 X Y Z T AA AB@2 AC AD AE AF AG AH AI
  AJ AK AL AM Z ~@2
>`.pickRestart({
  A: "~ [a3,d4,f4]", B: "[g3,c4,e4] [f3,bb3,d4]", C: "[f3,a3,d4] [a3,d4,f4]",
  D: "[[g3,c4,e4]@2 [d4,f4] [e4,g4] [f4,a4] [e4,g4] [f4,a4]@2, ~ a3@2 ~]/2", E: "[[e4,g4] [d4,f4]@3]/2",
  F: "[[c4,e4]@2 f3 g3 a3 g3 [f4,a4]@2, ~ d4@2 ~]/2", G: "[c4,e4]@2 f3 g3, ~ d4",
  H: "[a3@2 g3@2 d4@3 db4@5 [e4,g4]@3 [d4,f4]@5 ~@4 e5@4 [f4,bb4,d5,f5]@16 [d4,f4]@3 [c4,e4]@5 eb4@3 d4@5 a3@3 g3, ~ [e4,a4]@2 a4@2 [e4,g4,a4]@2 ~@6 bb3@2 c4]/8", // Em Dm Bb Dm C A5 A7
  I: "[~@4 d4@2 e4@2 f4@2 e4@2 [d4,f4]@3 [c4,e4]@5 eb4@3 d4@5 [a3,d4]@8 [g3,c4]@8 [f4,d5]@12, ~ a3@2 ~@2 bb3@2 a4@4 ~@3]/7", // Dm C D5 C5 Dm
  J: "[f3,a3,d4]/2", K: "d4@3 db4@5, [g3,a3]", L: "g3@3 f3@5, [a3,d4]", M: "[f3,bb3,d4]", N: "[d4,f4]@3 [c4,e4]@5",
  O: "[bb3,eb4]@3 [bb3,d4]@5", P: "[a3,d4]@3 [g3,c4]@5", Q: "[f3,a3]", R: "[f4,a4] [e4,g4]", S: "[[d4,f4]@3 [c4,e4]]/2",
  T: "f3 g3 a3 g3, d4", U: "d4@3 db4@5, [e4,a4]", V: "[e4,g4]@3 [d4,f4]@5, a4",
  W: "[[e4,g4]@7 ~ f5@8, ~@7 [f4,d5]@9]/2", X: "[f4,a4]@3 [e4,a4]@5", Y: "[eb4,g4]@3 [d4,g4]@5", Z: "[d4,f4] [c4,e4]",
  AA: "[f4,a4] [e4,g4], a5", AB: "[f5@2 [a4,f5] [c4,e4,g4,e5], [d4,f4]@3 ~]/2", AC: "f3 g3 a3 g3, [d4,a4,f5]",
  AD: "[a4,f5,a5] [g4,e5,g5]", AE: "bb4 a4, [d5,f5]", AF: "[a4,f5] [g4,e5], c5", AG: "[a4,d5,f5]",
  AH: "[a4,d5]@3 [g4,db5]@5, e4", AI: "[g4,e5]@3 [f4,d5]@5, a4", AJ: "d5@3 db5@5, [e4,a4]", AK: "[f4,bb4,d5]",
  AL: "[f4,a4]@3 [e4,g4]@5", AM: "[eb4,g4]@3 [d4,f4]@5",
})).s("gm_string_ensemble_2").gain(0.27).pan(0.3)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A@5 B C D E F@2 G H ~@4 I@4 J@6 K@2 L M N O P Q R S T U T V W U X Y P Z AA AB P AC AD AE C@2 AF@2 AG AH AI AJ@3 AK@4
  AL@2 AM AN AO@2 AP AQ AR ~@2
>`.pickRestart({
  A: "[~@2 f5@2 g5@2 a5@4 g5@2 f5@2 e5@4 c5@2 e5@2 f5@4 e5@2 d5@2 d5@7 e5 d5 e5 f5@4 f5@2 f5@4 f5@2 e5@2 c5@4 d5@13 ~ d5@8]/5",
  B: "c5 bb4", C: "a4", D: "g4@2 f4 g4", E: "a4 d5", F: "[c5@8 ~@13 g5 f5 g5 d5@8, ~ d5@2 ~]/2", G: "[c5,e5]@2 a4 g4",
  H: "[f4,a4] [e4,g4] ~@2", I: "[~@4 a4@3 g4@5 bb4@3 f4@5 f4@3 e4@5 f4@2 g4@2]/4",
  J: "[a4@2 g4@2 a4@3 g4@5 g4@3 f4@5 f4@8 e4@8 d4@12]/6", K: "[f4,a4]/2", L: "a4 g4", M: "bb4 a4", N: "f4 e4",
  O: "f4 g4 a4 c5", P: "d5 c5", Q: "d5@4 e5@4 f5@5 e5 d5 e5", R: "d5@4 c5@3 bb4", S: "a4 g4 f4!2", T: "e4",
  U: "g4@3 f4@5", V: "d4", W: "a4@3 g4@5", X: "f4@3 e4@5", Y: "f4 g4 a4 g4", Z: "c5 bb4 a4@2", AA: "d5 e5", AB: "f5",
  AC: "d5", AD: "f5 g5", AE: "a5 g5 f5 e5", AF: "[a4@3 g4@2 a4!2 bb4@7 [bb4,e5]@2]/2", AG: "f5@3 e5@5",
  AH: "eb5@3 d5@5", AI: "f5 e5",
  AJ: "[d5@4 e5@4 f5@2 d3 ~ e3 ~ f3@4 e3 ~ d3 ~ c3@4 a2 ~ c3 ~ d3@4 c3 ~ bb2 ~ a2@7 ~ f2 g2]/3",
  AK: "[a2@2 d3 ~ a2 ~ a2@3 ~ d3@2 a2 ~ a2@4 d3@7 ~ d3 ~ e3 ~ f3@4 e3 ~ d3 ~ c3@4 a2 ~ c3 ~ d3@4 c3 ~ bb2 ~ a2@7 ~ f2 g2]/4",
  AL: "[a2@2 d3 ~ a2 ~ a2@3 ~ d3@2 a2 ~ a2@4 d3@7 ~ d3 ~ e3 ~ d3 ~]/2", AM: "a2 ~ db3 ~ e3 ~ a3@5 ~ a2@4",
  AN: "d3 ~ f3 ~ a3 ~ d4@5 ~ f2 ~ g2 ~", AO: "[a2 ~ db3 ~ e3 ~ a3@6 a2 ~ g2@14 g2@4]/2", AP: "d3@5 ~ a2@9 ~",
  AQ: "c3@5 ~ g2@9 ~", AR: "d3@6 a2@9 ~",
})).s("gm_string_ensemble_1").gain(0.27).pan(0.7)

// other · tuba
const tuba = note("<~@44 A B C D@2 B C E@2 F G H@2 I J K L ~@17>".pickRestart({
  A: "~@10 d4 ~ e4 ~ f4@2", B: "~@2 e4 ~ d4 ~ c4@3 ~ a3 ~ c4 ~ d4@2", C: "~@2 c4 ~ bb3 ~ a3@7 ~ f3 g3",
  D: "[~ b3 [c4,d4] ~ a3 ~ a3@3 b3 [c4,d4] ~ a3 ~ a3@4 d4@7 ~ d4 ~ e4 ~ f4@2, a3 ~@15]/2", // Csus2
  E: "[~ b3 [c4,d4] ~ a3 ~ a3@3 b3 [c4,d4] ~ a3 ~ a3@4 d4@8 ~@4 f3 g3, a3 ~@15]/2", // Csus2
  F: "a3 ~ db4 ~ e4 ~ g4@3 ~ f4 ~ e4@3 ~", G: "f4 e4 f4 g4 a4@9 ~ f4 g4",
  H: "[a4 ~ e4 ~ a4 ~ db5@3 ~ b4 ~ db5 ~ d5@15 ~ d5 e5]/2", I: "f5 ~ e5 ~ d5 ~ c5@4 a4 ~ c5 ~ eb5@2",
  J: "~@2 d5 ~ c5 ~ bb4@6 ~@2 a4 g4", K: "a4 ~ d5 ~ a4 ~ a4@4 d5 ~ a4 ~ a4@2", L: "~ d5@5 ~@2",
})).s("gm_tuba").gain(0.55).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@23 [~@14 a4!2] [~ d5@11 ~@2 a4!2, a4@3 ~] [~ d5@6 ~@9, a4@7 ~@9] ~@52>")
  .s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.2)

// chords · flute
const flute_2 = note("<~@69 A B C D@3 E ~@2>".pickRestart({
  A: "[a3,a5] ~ [db4,db6] ~ [e4,e6] ~ [bb4,g6]@5 ~ [a4,f6] ~ [g4,e6] ~", // A Db E Eb Dm C
  B: "[d5,f6] [db5,e6] [d5,f6] [e5,g6] f5@4 ~ g5 f5 e5 f5@2 g6 f6, ~@4 a6@9 ~@3", // Dm Dbm Dm Em
  C: "e6 ~ db6 ~ a5 ~ a6@4 g6 ~ [a5,e6]@4", // A5
  D: "[[bb5,f6]@10 [f5,d6] ~ [g5,e6] ~ [a5,f6]@4 [g5,e6] ~ [f5,d6] ~ [e5,c6]@4 [c5,a5] ~ [e5,c6] ~ [g5,eb6]@4 [f5,d6] ~ [eb5,c6] ~ [d5,bb5]@8 f5 g5]/3", // Bb5 Dm C Dm C Dm C F …
  E: "a5@2 d6@2 a5 ~@11",
})).s("gm_flute").gain(0.22).pan(0.4)

// chords · flute · soft notes
const flute_soft = note("<~@75 A@2 ~>".pickRestart({
  A: "[~@6 a5@4 d6@2 a5 ~ a5@4 ~@14]/2",
})).s("gm_flute").gain(0.07).pan(0.4)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@19 A ~@16 B ~@2 C ~@2 D ~@21 E ~@3 F ~@9>".pickRestart({
  A: "~@7 x ~@8", B: "~@2 x!2 ~@12", C: "~@3 x ~@12", D: "~@14 x!2", E: "~ x ~@6", F: "~@10 x!2 ~@4",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@17 A ~@3 B ~@6 C ~@7 D ~@15 E ~ F G ~@4 F ~@3 H ~@3 E ~@9>".pickRestart({
  A: "~@3 x!2 ~@11", B: "~@3 x ~@4", C: "~@12 x!3 ~", D: "~@10 x!3 ~ x ~", E: "~@7 x", F: "~@5 x ~@2",
// … 45 more lines

More by Alan Parsons