Strudelify
Weisse Rosen schenk' ich dir cover art

1994 · Star Portrait

Weisse Rosen schenk' ich dir

G. G. Anderson

KeyG majorTempo80 bpm
0:00/0:00
// Weisse Rosen schenk' ich dir — G. G. Anderson
// 80 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/3)

// 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 · "Ges./Pia"
const piano = note(`<
  ~@3 A B C D E F G H I J K L M N O P Q A B C D E F G H I J K L M N O P Q ~ R S T U V W X Y Z AA AB AC Z AD AE AF A B C
  D E F G H I J K L M N O P Q ~@8 AG AH AI AJ AK AL AM AN AO AL AM AN AP ~@2
>`.pickRestart({
  A: "~@16 [g4,b4]@5 [a4,c5]@3", B: "[b4,d5]@8 [g4,b4]@7 ~ [g4,b4]@5 [b4,d5]@3",
  C: "[d5,b5]@13 ~@3 [g5,b5]@5 [f#5,a5]@3", D: "[f#5,a5]@5 [e5,g5]@3 [e5,g5]@5 [d5,f#5]@3 [d5,f#5]@5 [b4,d5]@3",
  E: "[a4,c5]@16 [f#4,a4]@5 [g4,b4]@3", F: "[a4,c5]@8 [f#4,a4]@7 ~ [a4,c5]@5 [a4,f#5]@3",
  G: "[f#5,a5]@13 ~@3 [f#5,a5]@5 [e5,g5]@3", H: "[e5,g5]@5 [d5,f#5]@3 [d5,f#5]@5 [c5,e5]@3 [c5,e5]@5 [b4,d5]@3",
  I: "[g4,b4]@16 [g4,b4]@5 [a4,c5]@3", J: "[b4,d5]@8 [g4,b4]@5 [g4,b4]@3 [b4,d5]@5 [b4,g5]@3",
  K: "[g5,b5]@13 [b5,d6]@3 [b5,d6]@5 [a5,c6]@3", L: "[a5,c6]@5 [g5,b5]@3 [g5,b5]@5 [g5,b5]@3 [a5,c6]@5 [g5,b5]@3",
  M: "[e5,c6]@13 ~@3 [c5,a5]@5 [d5,b5]@3", N: "[e5,c6]@8 [e5,c6]@5 [e5,c6]@3 [f#5,d6]@5 [e5,c6]@3",
  O: "[d5,b5]@13 [b4,g5]@3 [b4,g5]@5 [d5,b5]@3", P: "[c5,a5]@5 [c5,a5]@3 [c5,a5]@5 [c5,a5]@3 [b4,g5]@5 [a4,f#5]@3",
  Q: "[b4,g5]@13 ~@11", R: "b3@8 d4@13 b3@3", S: "e4@8 d4@15 f#4", T: "g4 f#4 d4", U: "c4", V: "a3@8 c4@13 a3@3",
  W: "d4 c4@2", X: "f#4 e4 c4", Y: "b3@16 ~@5 [e4,g4]@3", Z: "[e4,g4]@7 ~ [b3,e4]@12 ~ [e4,g4]@2 ~",
  AA: "[d4,f#4]@7 ~ [b3,d4]@13 [b3,d4]@3", AB: "[c4,e4] [b3,d4] [a3,c4]", AC: "[b3,d4]@21 [e4,g4]@2 ~",
  AD: "[d4,f#4]@7 ~ [b3,d4]@12 ~ [b3,d4]@3", AE: "[c4,e4] [d4,f#4] [e4,g4]", AF: "[d4,f#4]@5 ~@3",
  AG: "~@16 [g#4,c5]@5 [a#4,c#5]@3", AH: "[c5,d#5]@8 [g#4,c5]@5 [g#4,c5]@3 [c5,d#5]@5 [c5,g#5]@3",
  AI: "[g#5,c6]@13 [c6,d#6]@3 [c6,d#6]@5 [a#5,c#6]@3", // G# Cm A#m
  AJ: "[a#5,c#6]@5 [g#5,c6]@3 [g#5,c6]@5 [g#5,c6]@3 [a#5,c#6]@5 [g#5,c6]@3", // A#m G# A#m G#
  AK: "[f5,c#6]@13 ~@3 [c#5,a#5]@5 [d#5,c6]@3", AL: "[f5,c#6]@8 [f5,c#6]@5 [f5,c#6]@3 [g5,d#6]@5 [f5,c#6]@3",
  AM: "[d#5,c6]@13 [c5,g#5]@3 [c5,g#5]@5 [d#5,c6]@3", // Cm Fm Cm
  AN: "[c#5,a#5]@5 [c#5,a#5]@3 [c#5,a#5]@5 [c#5,a#5]@3 [c5,g#5]@5 [a#4,g5]@3", // F# Fm D#
  AO: "[c5,g#5]@13 ~@3 [c#5,a#5]@5 [d#5,c6]@3", AP: "[c5,g#5]@13 ~@11",
})).s("gm_piano").gain(0.48)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@19 A B C D E F G H I C D C J K L E M E I N O P H G@2 I Q R S T U V S W X Y C D E F G H I C D C J K L E M E Z AA AB
  AC AD AE AF AG AA AB AA AH AI AJ AC AK AC AJ AC AK AC AL AM
>`.pickRestart({
  A: "g1@19 ~@2 g1@3", B: "d1@8 e1@8 f#1@7 ~", C: "g1@7 d1", D: "g1@11 ~", E: "g1@20 ~ g1@3", F: "d1@23 ~",
  G: "d1@20 ~ d1@2 ~", H: "d1@11 ~", I: "d1 e1 f#1", J: "g1 a1 b1", K: "c2@20 ~ c2@3", L: "a1@20 ~ a1@3",
  M: "a1@15 ~ a1@8", N: "g1@19 ~@2 g1@2 ~", O: "g1@7 ~", P: "g1@15 ~ g1@8", Q: "g1@7 e2", R: "e2@19 ~@2 e2@3",
  S: "b1@20 ~ b1@3", T: "c2@7 ~ a1@4", U: "g1@21 e2@2 ~", V: "e2@20 ~ e2@3", W: "c2@7 ~ c2@4", X: "d2@5 ~", Y: "d2",
  Z: "d#2@2 a#1", AA: "g#1@7 d#1", AB: "g#1@11 ~", AC: "g#1@20 ~ g#1@3", AD: "d#1@23 ~", AE: "d#1@20 ~ d#1@2 ~",
  AF: "d#1@11 ~", AG: "d#1 f1 g1", AH: "g#1 a#1 c2", AI: "c#2@20 ~ c#2@3", AJ: "a#1@20 ~ a#1@3", AK: "a#1@15 ~ a#1@8",
  AL: "g#1@2 d#2", AM: "g#1 ~@2",
})).s("gm_acoustic_bass").gain(0.56).pan(0.4)

// chords · acoustic guitar steel · "Gitarre"
const acoustic_guitar_steel = note(`<
  A@7 B@7 C@6 ~ D E F G@2 H@2 E I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH D E F G@2 H@2 E I J K L M N
  O P AI AJ AK AL AM@2 AN@2 AK AO AP AQ AR AS AT AU AV AS AT AU AV AW AX
>`.pickRestart({
  A: "[~ g3@43 ~@4 [b2,d3,g3]@45 ~@3 [b2,d3,g3]@45 ~@3 [d3,g3]@21 ~@2 d3, [g2,b2,d3]@45 ~@2 g2@46 ~@2 g2@45 ~@3 [g2,b2]@21 ~@4]/7", // G G5 G
  B: "[[f#3,a3,d4]@23 ~ [f#3,a3,d4]@45 ~@3 [a3,d4]@20 ~@4 [b2,d3,g3]@21 ~@3 [b2,d3]@45 ~@2 g2, ~@23 d3@45 ~@3 [d3,f#3]@22 ~@2 g2@22 ~@2 g2@45 ~@4, ~@20 g3@7 ~]/7", // D D5 G Bm D
  C: "[[b2,d3,g3]@19 ~@5 [e3,g3,c4]@21 ~@3 [c3,e3,a3]@20 ~@4 [b2,d3,g3]@20 ~@5 c4@18 ~@5 [b2,d3,g3]@22 ~@2, ~@23 c3@22 ~@2 a2@21 ~@3 g2@20 ~@4 c3@20 ~@4 g2@22 ~@3, ~@96 [e3,a3]@19 ~@29]/6", // G C Am G A5
  D: "~@8 [b3,d4,g4]@4 ~@4 [b3,g4]@3 ~@5, ~@16 d4@5 ~@3", E: "~@2 [b3,d4,g4] ~ [b3,d4,g4] ~",
  F: "~@8 [b3,d4,g4]@3 ~@5 [b3,d4,g4]@3 ~@5", G: "~@8 [a3,d4,f#4]@3 ~@5 [a3,d4,f#4]@4 ~@4",
  H: "~@8 [a3,d4,f#4]@3 ~@5 [a3,d4,f#4]@3 ~@5", I: "~@8 [d4,g4]@4 ~@4 [b3,d4,g4]@3 ~@5, ~@4 b3 ~@7",
  J: "~@4 [b3,d4,g4]@2 ~@2 [b3,d4,g4] ~@3", K: "~@8 [b3,d4,g4]@5 ~@3 [b3,d4,g4]@4 ~@4",
  L: "~@2 [g3,c4,e4] ~ [c4,e4] ~, ~@8 g3 ~@3", M: "~@2 [a3,c4,e4] ~ [a3,c4,e4] ~",
  N: "~@8 [b3,d4,g4]@3 ~@5 [b3,d4,g4]@4 ~@4", O: "~@8 [a3,c4,e4]@5 ~@3 [a3,c4,e4]@4 ~@4",
  P: "~@2 [b3,d4,g4] ~ [d4,g4] ~, ~@8 b3 ~@3", Q: "~@8 [a3,d4,f#4]@3 ~@5 [d4,f#4]@5 ~@3, ~@16 a3@3 ~@5",
  R: "g3@3 ~@2 d4@3 ~@5 b3@3 d4@3 b3@2 d4@3, ~@3 b3@5 g4@5 ~@11, ~@11 d4@5 ~@8",
  S: "g3@3 b3@2 d4@3 ~@3 d4@2 b3@3 ~@3 b3@2 g3@3, ~@8 g4@5 ~@3 d4@6 ~@2",
  T: "b3@3 d4@2 g4@3 ~@3 b3@2 ~@3 b3@3 ~@2 b3@3, ~@8 d4@5 g3@6 d4@5",
  U: "a3@3 d4@2 f#4@3 a4@3 f#4@2 d4@3 f#4@3 d4@2 a3@3",
  V: "d4@3 ~@2 a4@3 f#4@3 d4@2 a3@3 d4@3 f#4@2 a4@3, ~@3 f#4@4 ~@17",
  W: "f#4@3 d4@2 a3@3 d4@3 ~@2 a4@3 f#4@3 d4@2 f#4@3, ~@11 f#4@4 ~@9",
  X: "d4@3 a3@2 d4@3 f#4@3 d4@2 ~@3 f#4@3 d4@2 f#4@3, ~@13 a3@5 ~@6",
  Y: "g3@3 ~@2 d4@3 ~@3 d4@2 b3@3 ~@5 g3@3, ~@3 b3@4 ~ g4@7 ~ d4@8, ~@19 b3@5",
  Z: "g4@3 e4@2 b3@3 e4@3 b3@2 g4@3 e4@3 ~@2 g4@3, ~@19 b3@5",
  AA: "~@3 d4@2 b3@3 ~@3 d4@2 ~@3 d4@3 f#4@2 d4@3, f#4@5 ~@3 f#4@5 b3@11",
  AB: "e4@3 c4@2 g3@3 ~@5 e4@3 ~@3 c4@2 a3@3, ~@8 c4@5 ~@3 e4@5 ~@3, ~@11 g3@4 ~@9",
  AC: "~@3 b3@2 ~@6 d4@2 ~@6 b3@2 g3@3, d4@5 g3@5 ~@6 d4@8, ~@8 b3@5 g4@6 ~@5",
  AD: "g4@3 e4@2 b3@3 e4@3 ~@2 e4@3 ~@3 e4@2 b3@3, ~@11 b3@5 g4@6 ~@2",
  AE: "f#4@3 d4@2 ~@3 d4@3 ~@2 d4@3 b3@3 f#4@2 d4@3, ~@5 b3@6 f#4@4 ~@9",
  AF: "e4@3 c4@2 g3@3 e4@3 c4@2 g3@3 ~@3 c4@2 a3@3, ~@16 e4@5 ~@3",
  AG: "~@3 d4@2 ~@3 d4@3 ~@2 a4@3 ~@3 d4@2 a3@2 ~, f#4@5 a3@5 ~ f#4@4 ~ f#4@5 ~@3",
  AH: "d3@3 ~@2 a3@3 d4@3 ~@2 d4@3 f#4@3 a4@2 f#4@2 ~, ~@3 f#3@4 ~@4 a3@4 ~@9",
  AI: "~@5 a#3@3 ~@5 a#3@3 ~@3 a#3@2 g3@2 ~, d#3@6 ~@2 d#3@8 d#4@5 ~@3, ~@3 g3@4 ~@4 g3@6 ~@7",
  AJ: "~@8 [c4,d#4,g#4]@4 ~@4 [c4,g#4]@3 ~@5, ~@16 d#4@5 ~@3", AK: "~@2 [c4,d#4,g#4] ~ [c4,d#4,g#4] ~",
  AL: "~@8 [c4,d#4,g#4]@3 ~@5 [c4,d#4,g#4]@3 ~@5", AM: "~@8 [a#3,d#4,g4]@3 ~@5 [a#3,d#4,g4]@4 ~@4",
  AN: "~@8 [a#3,d#4,g4]@3 ~@5 [a#3,d#4,g4]@3 ~@5", AO: "~@8 [d#4,g#4]@4 ~@4 [c4,d#4,g#4]@3 ~@5, ~@4 c4 ~@7",
  AP: "~@4 [c4,d#4,g#4]@2 ~@2 [c4,d#4,g#4] ~@3", AQ: "~@8 [c4,d#4,g#4]@5 ~@3 [c4,d#4,g#4]@4 ~@4",
  AR: "~@2 [g#3,c#4,f4] ~ [c#4,f4] ~, ~@8 g#3 ~@3", AS: "~@2 [a#3,c#4,f4] ~ [a#3,c#4,f4] ~",
  AT: "~@8 [c4,d#4,g#4]@3 ~@5 [c4,d#4,g#4]@4 ~@4", AU: "~@8 [a#3,c#4,f4]@5 ~@3 [a#3,c#4,f4]@4 ~@4",
  AV: "~@2 [c4,d#4,g#4] ~ [d#4,g#4] ~, ~@8 c4 ~@3", AW: "~ c4 d#4, g#3@2 ~", AX: "g#3@3 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.19)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@4 B@8 ~@4 C D ~ E F G@7 H@4 I@2 J K L M ~@14 N O@2 P@7 H@4 I@2 J K L Q R@7 S@4 T@2 U V W X U V Y Z@2
>`.pickRestart({
  A: "[g1,b3]/4", B: "[[g3,b3]@3 a3@4 ~, d4, g1@23 ~@41]/8", C: "a1", D: "[g2,b3,d4], g1@7 ~", E: "g5 d5 a5, [g1,b3]",
  F: "f#5@8 d5@8 [g4,b4]@5 [a4,c5]@3, [d2,d3,d4], f#4@5 ~@3", // G Am D
  G: "[[b4,d5]@8 [g4,b4]@7 ~ [g4,b4]@5 [b4,d5]@3 [d5,b5]@13 ~@3 [g5,b5]@5 [f#5,a5]@3 [f#5,a5]@5 [e5,g5]@3 [e5,g5]@5 [d5,f#5]@3 [d5,f#5]@5 [b4,d5]@3 [a4,c5]@16 [a4,f#5]@5 [g4,b4]@3 [a4,c5]@8 [a4,f#5]@7 ~ [a4,c5]@5 [a4,f#5]@3 [f#5,a5]@13 ~@3 [f#5,a5]@5 [e5,g5]@3 [e5,g5]@5 [d5,f#5]@3 [d5,f#5]@5 [c5,e5]@3 [c5,e5]@5 [b4,d5]@3, d4, [g2,g3,b3]@3 [a3,f#4]@4, g1@23 ~@33]/7", // Bm G Bm G F#m Em D Bm …
  H: "[[g4,b4]@16 [g4,b4]@5 [a4,c5]@3 [b4,d5]@8 [g4,b4]@5 [g4,b4]@3 [b4,d5]@5 [b4,g5]@3 [g5,b5]@13 [b5,d6]@3 [b5,d6]@5 [a5,c6]@3 [a5,c6]@5 [g5,b5]@3 [g5,b5]@5 [g5,b5]@3 [a5,c6]@5 [g5,b5]@3, [g3,b3]]/4", // G Am Bm G Bm Em G Bm …
  I: "[[e5,c6]@13 ~@3 [c5,a5]@5 [d5,b5]@3 [e5,c6]@8 [e5,c6]@5 [e5,c6]@3 [f#5,d6]@5 [e5,c6]@3, [c4,e4], g3 [a1,a3], ~@8 a2@7 ~]/2", // C F G C D C A
  J: "[d5,b5]@13 [b4,g5]@3 [b4,g5]@5 [d5,b5]@3, [g2,b3,d4,g4], g1@7 ~", // G Em G
  K: "[c5,a5]@5 [c5,a5]@3 [c5,a5]@5 [c5,a5]@3 [b4,g5]@8", L: "g5@8 d5@8 [b4,g5]@5 [a4,f#5]@3, [g1,g2,b3,g4]",
  M: "f#5 d5 a4, [d2,d3,d4,f#4]", N: "[c2,c3]@23 ~",
  O: "[~@21 [f#5,a5]@2 ~ [f#5,a5]@8 [d5,f#5]@8 [a4,d5]@8, [d2,d3]]/2", // F#m D D5 D
  P: "[b4@8 [g4,b4]@7 ~ [g4,b4]@5 [b4,d5]@3 [d5,b5]@13 ~@3 [g5,b5]@5 [f#5,a5]@3 [f#5,a5]@5 [e5,g5]@3 [e5,g5]@5 [d5,f#5]@3 [d5,f#5]@5 [b4,d5]@3 [a4,c5]@16 [a4,f#5]@5 [g4,b4]@3 [a4,c5]@8 [a4,f#5]@7 ~ [a4,c5]@5 [a4,f#5]@3 [f#5,a5]@13 ~@3 [f#5,a5]@5 [e5,g5]@3 [e5,g5]@5 [d5,f#5]@3 [d5,f#5]@5 [c5,e5]@3 [c5,e5]@5 [b4,d5]@3, d4, [g2,g3,b3]@3 [a3,f#4]@4, g1@23 ~@33, d5 ~@167]/7", // G Bm G F#m Em D Bm Am …
  Q: "a#4@3 ~@2 g5@3 a#5@3 g5@2 d#5@3 g5@3 d#5@3 ~@2, ~@3 d#5@5 ~@16",
  R: "[[c5,d#5]@8 [g#4,c5]@7 ~ [g#4,c5]@5 [c5,d#5]@3 [d#5,c6]@13 ~@3 [g#5,c6]@5 [g5,a#5]@3 [g5,a#5]@5 [f5,g#5]@3 [f5,g#5]@5 [d#5,g5]@3 [d#5,g5]@5 [c5,d#5]@3 [a#4,c#5]@16 [a#4,g5]@5 [g#4,c5]@3 [a#4,c#5]@8 [a#4,g5]@7 ~ [a#4,c#5]@5 [a#4,g5]@3 [g5,a#5]@13 ~@3 [g5,a#5]@5 [f5,g#5]@3 [f5,g#5]@5 [d#5,g5]@3 [d#5,g5]@5 [c#5,f5]@3 [c#5,f5]@5 [c5,d#5]@3, d#4, [g#2,g#3,c4]@3 [a#3,g4]@4, g#1@23 ~@33]/7", // Cm G# Cm G# Gm Fm D# Cm …
  S: "[[g#4,c5]@16 [g#4,c5]@5 [a#4,c#5]@3 [c5,d#5]@8 [g#4,c5]@5 [g#4,c5]@3 [c5,d#5]@5 [c5,g#5]@3 [g#5,c6]@13 [c6,d#6]@3 [c6,d#6]@5 [a#5,c#6]@3 [a#5,c#6]@5 [g#5,c6]@3 [g#5,c6]@5 [g#5,c6]@3 [a#5,c#6]@5 [g#5,c6]@3, [g#3,c4]]/4", // G# A#m Cm G# Cm Fm G# Cm …
  T: "[[f5,c#6]@13 ~@3 [c#5,a#5]@5 [d#5,c6]@3 [f5,c#6]@8 [f5,c#6]@5 [f5,c#6]@3 [g5,d#6]@5 [f5,c#6]@3, [c#4,f4], g#3 [a#1,a#3], ~@8 a#2@7 ~]/2", // C# F# Cm C# Cm C# A#
  U: "[d#5,c6]@13 [c5,g#5]@3 [c5,g#5]@5 [d#5,c6]@3, [g#2,c4,d#4,g#4], g#1@7 ~", // Cm Fm Cm G#
  V: "[c#5,a#5]@5 [c#5,a#5]@3 [c#5,a#5]@5 [c#5,a#5]@3 [c5,g#5]@8", // F# Fm
  W: "g#5@8 d#5@8 [c5,g#5]@5 [a#4,g5]@3, [g#1,g#2,c4,g#4]", // Fm D# G#
  X: "[f5,c#6]@8 [f5,c#6]@5 [f5,c#6]@3 [g5,d#6]@5 [f5,c#6]@3, [a#1,a#3], a#2@7 ~", Y: "g#5 d#5@2, [g#1,g#2,c4,g#4]",
  Z: "[[g#1,g#2,d#3,g#3,c4]@29 ~@19]/2", // G#
})).s("gm_string_ensemble_1").gain(0.12)

// chords · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note(`<
  A@4 B@3 C@4 D@4 E@2 F G H ~@4 I@4 J@4 K ~@2 G ~@22 I@4 J@4 K ~@2 G ~ L ~@3 M@4 N@4 O ~@2 P ~@3 P ~@3
>`.pickRestart({
  A: "[g2,g3,d4,g4]/4", B: "g2/3", C: "[d2,d3,f#4]/4", D: "[[g2,b3,g4], g1@31 ~]/4",
  E: "[[c3,g3]@8 [a2,a3]@7 ~, e4, c4@15 ~, c2@7 ~@9]/2", F: "g4", G: "[a2,a3,c4,e4], a1@7 ~", H: "[g2,g4]",
  I: "[d2,d3]/4", J: "[g2, g1@31 ~]/4", K: "c3, c2@7 ~", L: "~@21 a#4@2 ~", M: "[d#2,d#3]/4", N: "[g#2, g#1@31 ~]/4",
  O: "c#3, c#2@7 ~", P: "[a#2,a#3,c#4,f4], a#1@7 ~",
})).s("gm_string_ensemble_1").gain(0.07)

// chords · synth strings 2 · "Fl„che"
const synth_strings_2 = note(`<
  A@4 B@7 C@6 D E F@2 B@7 C@6 D E F@2 G@7 H@3 I J@3 K L@2 B@7 C@6 D E D M N@7 O@6 P Q P R P Q P S@2
>`.pickRestart({
  A: "[[d3,g3,b3]@95 ~]/4", B: "[[g3,b3]@71 ~ [f#3,a3]@96, d3]/7", C: "[b3@4 ~ a3, g3@5 ~, ~@2 [e3,c4]]/6",
  D: "[d3,g3,b3]", E: "[c3,e3,a3]", F: "[[g3,b3]@24 [f#3,a3]@23 ~, d3@47 ~]/2",
  G: "[[g3,b3]@72 a3@87 ~ c4@8, d3, ~@3 f#3@4]/7", H: "[~@24 e3@23 ~ [d3,f#3]@24, b3, g3@49 ~@23]/3",
  I: "g3@2 a3, [e3,c4]@23 ~", J: "[d3@23 ~ e3@23 ~ [d3,f#3]@24, b3, g3@49 ~@23]/3", K: "g3@16 a3@7 ~, [e3,c4]",
  L: "[d3,f#3,a3]/2", M: "[d#2,d#3,g3,a#3,d#4]", N: "[[g#3,c4]@71 ~ [g3,a#3]@96, d#3]/7",
  O: "[c4@4 ~ a#3, g#3@5 ~, ~@2 [f3,c#4]]/6", P: "[d#3,g#3,c4]", Q: "[c#3,f3,a#3]", R: "a#3",
  S: "[[g#3,c4,d#4]@5 ~@3]/2", // G#
})).s("gm_synth_strings_2").gain(0.28)

// chords · vibraphone · "Vibra" · F#m D D5 D
const vibraphone = note(`<
  ~@53
  [~@2 [f#5,a5]]
  [[d5,f#5]@7 ~ [a4,d5]@7 ~ [d5,f#5]@6 ~@2]
  ~@16
  [~@5 a#4@3 d#5@3 a#4@2 g4@3 a#4@3 g4@2 d#4@2 ~, d#4 ~@2, ~@3 g4@5 ~@16]
  ~@22
>`).s("gm_vibraphone").gain(0.23).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@19 A B A B A B A B A B A B A B A B A@2 C A B A B A B A B A B A B A B A B@2 A B A B A B A B A B A B A B A@2 C A B A B
  A B A B A B A B A B A@3 B A@3 B
>`.pickRestart({
  A: "x ~@6 x", B: "x", C: "x!3",
})).gain(0.39)

// drums · rim
const rim = s("rim").struct("<~@38 [~ x!2]!15 ~@41>").gain(0.33)

// drums · snare
const snare = s("sd").struct("<~@19 A@18 B ~@16 A@17 B A@20 C D>".pickRestart({
  A: "~ x!2", B: "~ x ~", C: "~@8 x ~@7 x ~@4 x ~@2", D: "x",
})).gain(0.33)

// drums · low tom
const low_tom = s("lt").struct("<~@18 A ~@18 A ~@33 A ~@19 A ~@2>".pickRestart({
  A: "~@7 x",
})).gain(0.39)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 A ~@18 A ~@33 A ~@19 A ~@2>".pickRestart({
  A: "~@19 x ~@4",
})).gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@18 A ~@18 B ~@33 B ~@19 A ~@2>".pickRestart({
  A: "~@2 x", B: "~@13 x ~@2 x ~@7",
})).gain(0.39)

stack(
  piano, bass, acoustic_guitar_steel, string_ensemble_1, string_ensemble_1_soft, synth_strings_2, vibraphone, kick, rim,
  snare, low_tom, hihat, mid_tom, high_tom
)

More by G. G. Anderson