Strudelify

White Christmas

Grant & Forsyth

KeyA majorTempo84 bpm
0:00/0:00
// White Christmas — Grant & Forsyth
// 84 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/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 · "A.PIANO 1"
const piano = note(`<
  ~@7 A@2 B@2 C D E F G H I J K L M N O P Q@2 R S T F U V W X Y Z AA AB AC AD A@2 B@2 C D E F G H I J K L M N O P Q@2 R
  S T F U AE W X Y Z AA AB AC AD AF AG@2
>`.pickRestart({
  A: "[[a1,a2,a3,c#4,e4]@25 ~@3 a1@10 ~@2 a1@21 ~@3, ~@14 [a2,a3,d4,f#4]@17 ~]/2", // A D
  B: "[[a1,a2,a3,c#4,e4]@26 ~@2 a1@10 ~@2 a1@23 ~, ~@7 [a2,a3,d4,f#4]@9]/2", // A D
  C: "a2@10 ~@2 a2@4 e3@3 ~ a3@3 ~ [e3,a3,c#4]@7 ~, [a1,e3,a3,c#4]@8 [a1,a2]@7 ~", // A
  D: "[f#3,a3,d4]@7 ~@5 a2@3 ~ [d#3,a3,c4]@8 ~@4 a2@4, a1@15 ~ a1@16, a2@11 ~@5 a2@11 ~@5, ~@8 [e3,a3,c#4]@7 ~@9 [e3,a3,c#4]@8", // D Adim A
  E: "[b1,b2]@12 b2@3 ~@5 a3@3 ~ [f#3,a3,d4]@4 b2@3 ~, d4@5 ~@3, [f#3,a3]@16 b1@15 ~, ~@8 b2@5 ~@3, ~@16 f#3@7 ~@9", // B D F#m
  F: "[d#2,d#3,g3,a#3,d#4]@7 ~ [e2,e3,g#3,b3,e4]@8 [e2,e3,b3,e4]@7 ~ [d#2,d#3,a#3,d#4]@7 ~", // D# E E5 D#5
  G: "[a3,d4]@4 f#3@3 ~ [a3,d4]@4 [d3,f#3]@4 [a3,d4]@4 f#3@4 [a3,d4]@4 [d3,f#3]@4, d2@15 ~ d2@15 ~, d3@11 ~@5 d3@10 ~@6", // D5 D D5 D
  H: "[b3,e4]@4 g#3@3 ~ [b3,e4]@4 [e3,g#3]@4 [b3,e4]@4 g#3@4 [b3,e4]@4 [e3,g#3]@4, e2@15 ~ e2@16, e3@11 ~@5 e3@10 ~@6", // E5 E E5 E
  I: "[e3,a3,c#4]@4 e3@3 ~ [e3,a3,c#4]@3 ~ a2@3 ~@5 f#3@3 ~@5 [e2,d4]@2 f#2@2, a1@15 ~ [a1,a2]@12 ~@4, a2@10 ~@2 [a3,d4]@12 ~@2 a3@5 ~, ~@12 f#3@7 ~@5 f#3@8", // A E7 A D5
  J: "[a2,e3,a3,c#4]@8 ~@4 a2@3 ~ [e2,e3,a3]@8 [e2,e3,g#3,b3]@8, a1@15 ~@17, ~ [e3,a3,c#4] ~@2", // A A5 E A
  K: "c#4@7 ~@5 a2@3 ~ [g#3,c#4]@4 ~@4 [g#3,c#4]@4 [a2,e3]@4, [a1,e3,a3]@15 ~ a1@15 ~, a2@11 ~@5 a2@11 ~@5, ~@8 c#4@7 ~ e3@3 ~ e3@7 ~@5", // C#5 A5
  L: "[g3,c#4]@4 e3@4 [g3,c#4]@4 ~ c2@2 ~ [g3,c#4]@4 e3@4 [g3,c#4]@4 e3@3 ~, [a1,a2]@11 ~ e3@4 ~@16, ~@12 b1@2 ~@2 c#2@9 ~@7", // Gdim A
  M: "[d4,f#4]@4 a3@3 ~ [d4,f#4]@4 [d3,a3]@3 ~ [d4,f#4]@4 a3@4 [d4,f#4]@4 [d3,a3]@3 ~, d2@15 ~ d2@15 ~, d3@11 ~@5 d3@11 ~@5", // D D5 D D5
  N: "d3@11 ~ d3@3 ~ [d3,a3,d4]@8 ~@4 d4@4, [d2,a3,e4,f4]@15 ~ [d2,f4]@16, ~@3 d3, ~@26 a3@5 ~", // D5 Dm
  O: "[a3,c#4]@4 ~@4 [a3,c#4]@4 [a2,e3]@4 [a3,c#4]@4 e3@4 c#4@4 [a2,e3]@3 ~, a1@15 ~ a1@15 ~, a2@5 ~@3 a2@5 ~@3, ~@4 e3@7 ~@13 a3@7 ~", // A A5 A A5
  P: "[b2,f#3,a3,d4]@7 ~ [a2,e3,a3,c#4]@7 ~ [g#2,g#3,b3]@7 ~ [f#2,f#3,a3]@8", // Bm7 A G#m F#m
  Q: "[[g#3,b3]@4 e3@4 [g#3,b3]@4 [e2,e3]@4 [g#3,b3]@4 e3@3 ~ [e3,a3,c#4]@3 ~ f#2@2 g2@2 ~@4 e3@3 ~@5 g#2@3 ~ [g#3,b3,d4]@7 ~ [e3,g#3,b3,d4]@7 ~, e2@11 ~@5 e2@10 ~@2 [g#3,b3,d4]@19 ~@17, ~@32 g#2@11 ~@5 g#2@15 ~, ~@40 e3@7 ~@17]/2", // G#m E G#m A G#dim E7 G#dim
  R: "[a3,c#4] e3 [a3,c#4] [a2,e3] [a3,c#4] e3 [a3,c#4] e3, a1@15 ~ [a1,a2]@14 ~@2, a2@9 ~@23, e3@3 ~@29", // A A5 A
  S: "[f#3,a3,d4]@7 ~@5 a2@3 ~ [d#3,a3,c4]@8 [e3,a3,c#4]@8, a1@15 ~ [a1,a2]@14 ~@2, a2@8 [e3,a3,c#4]@7 ~@17", // D Adim A
  T: "[f#3,a3,d4]@7 ~@5 b2@3 ~@5 a3@3 ~ [f#3,a3,d4]@6 ~@2, b1@15 ~ [b1,b2]@14 ~@2, b2@2 d4@3 ~@3, ~@8 [f#3,a3]@8 f#3@7 ~@9", // D B F#m
  U: "[a3,d4]@4 f#3@3 ~ [a3,d4]@4 [d3,f#3]@4 [a3,d4]@4 f#3@4 [a3,d4]@4 f#3@4, d2@15 ~ [d2,d3]@15 ~, d3@11 ~@21", // D5 D D5 D
  V: "[b3,e4]@4 g#3@3 ~ [b3,e4]@4 [d3,g#3]@4 [b3,e4]@4 g#3@4 [b3,e4]@4 [d3,g#3]@4, d2@15 ~ d2@16, d3@10 ~@6 d3@11 ~@5", // E5 Ddim E5 Ddim
  W: "[a2,e3,a3,c#4]@11 ~ [a2,e3,a3,c#4]@3 ~ [a3,d4]@4 f#3@3 ~@5 e2@3 ~, a1@15 ~ [a1,a2]@11 ~@5, ~@16 f#3@3 ~@5 [f#3,a3,d4]@8", // A D5 A D
  X: "a2@10 ~@2 a2@3 ~ [e2,f#3,a3,d4]@8 [e2,g#3,b3,d4]@8, [a1,e3,a3,c#4] ~", // D E7 A
  Y: "a2@8 ~@4 a2@3 ~ [g#3,c#4]@4 ~@4 [g#3,c#4]@4 [a2,e3]@4, [a1,e3,a3]@15 ~ a1@15 ~, c#4@7 ~ c#4@7 ~ a2@10 ~@6, ~@16 e3@3 ~ e3@7 ~@5", // C#5 A5
  Z: "[g3,c#4]@2 e3@2 [g3,c#4]@2 b1 c2 [c#4,f#4]@2 g3@2 ~@2 [c#2,g3]@2, [a1,a2]@12 e3@4 c#2@8 [c#4,e4]@7 ~", // Gdim F#5 C#dim A C#m
  AA: "[d4,f#4]@4 a3@3 ~ [d4,f#4]@4 [d3,a3]@3 ~ [d4,f#4]@4 a3@4 [d4,f#4]@4 [d3,a3]@3 ~, d2@15 ~ d2@15 ~, d3@5 ~@3 d3@5 ~@3", // D D5 D D5
  AB: "[c4,d4]@4 a3@4 [c4,d4]@4 [d3,a3]@4 [c4,d4]@4 a3@4 ~@4 a3@3 ~, d2@15 ~ [d2,d3,f4]@8 [d2,d3,c4,d4,f4]@8, [d3,f4]@3 ~@5", // Csus2 D5 Csus2 Dm Dm7 Dm
  AC: "[a3,c#4] e3 [a3,c#4] [a2,e3] [f#3,a3,c#4] e3 ~ [f#2,e3], [a1,a2]@11 ~@5 f#2@8 [f#3,a3,c#4]@8", // A A5 F#m F#7 A F#m
  AD: "f#3@7 ~@5 b2@3 ~ e2@8 [e2,e3]@8, [a3,b3,d4]@7 ~ [g#3,b3,d4]@8, b2@11 ~@21, ~@8 f#3@7 ~@17", // E Bm7 G#dim
  AE: "[b3,e4]@4 g#3@3 ~ [b3,e4]@4 [d3,g#3]@3 ~ [b3,e4]@4 g#3@4 [b3,e4]@4 [d3,g#3]@4, d2@15 ~ d2@16, d3@10 ~@5 d4@8 ~@9, ~@16 d3@11 ~@5", // E5 Ddim E5 Ddim
  AF: "[d2,d3,f#3,a3,d4]@14 ~@3 [c#2,c#3,e3,g#3,c#4]@8 ~ [b1,b2,d3,f#3,b3]@6", AG: "[~ [a1,a2,c#3,e3,a3]@17 ~@14]/2",
})).s("gm_piano").gain(0.36)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@7 A@2 B@2 C D E F G H I J K L M N C O P Q C D E F R S C J K T U V W X A@2 B@2 C D E F G H I J K L M N C O P Q C D E
  F R S C J K T U V W X Y Z@2
>`.pickRestart({
  A: "[a2@27 ~ a1@35 ~]/2", B: "[a2@27 ~ a1@26 ~@2 e3@8]/2", C: "a2@9 ~@3 a2 ~@3 a2@12 ~@4",
  D: "a2@9 ~@3 a2 ~@3 a2@9 ~@3 a2@4", E: "b2@9 ~@3 b2 ~@3 b2@12 ~@4", F: "d#2@6 ~@2 e2@7 ~ e2@7 ~ d#2@7 ~",
  G: "d2@9 ~@3 d2 ~@3 d2@10 ~@2 d2@2 d#2@2", H: "e2@8 ~@4 e2 ~@3 e2@10 ~@2 e2@3 ~",
  I: "a2@9 ~@3 a2 ~@3 a2@10 ~@2 e2@2 f#2@2", J: "a2@8 ~@4 a2@3 ~ e2@6 ~@2 e2@7 ~", K: "a2@9 ~@3 a2@3 ~ a2@8 ~@4 a2@3 ~",
  L: "a2@8 a1@3 ~ b1@3 ~ c#2@12 ~@4", M: "d2@9 ~@3 d2 ~@3 d2@9 ~@3 d2@3 ~", N: "d2@8 ~@4 d2 ~@3 d2@9 ~@3 d2@3 ~",
  O: "a2@8 ~@4 a2@3 ~ g#2@6 ~@2 f#2@6 ~@2", P: "e2@9 ~@3 e2 ~@3 e2@9 ~@3 f#2@2 g2@2",
  Q: "g#2@8 ~@4 g#2 ~@3 g#2@5 ~@3 e2@6 ~@2", R: "d2@9 ~@3 d2 ~@3 d2@8 ~@4 d2@3 ~",
  S: "d2@8 ~@4 d2@3 ~ d2@10 ~@2 d2@3 ~", T: "a2@9 ~@3 a1@2 b1@2 c#2@9 ~@3 c#2@3 ~", U: "d2@9 ~@3 d2 ~@3 d2@9 ~@3 d3@4",
  V: "d2@8 ~@4 d2 ~@3 d2@12 ~@4", W: "a2@9 ~@3 a2@3 ~ f#2@12 ~@4", X: "b2@7 ~ e2@3 ~ e2@3 ~",
  Y: "d2@14 ~@3 c#2@8 ~ b1@6", Z: "[~@2 a1@33 ~@29]/2",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@2 A B@2 C@2 D E@3 ~@3 F G ~ H I@2 ~ J K L M N ~ O P Q R S T U V W X Y Z L AA AB@2 AC@2 ~@3 F G ~ H I@2 ~ J K L M N ~
  O P Q R S T U V W X Y Z L AA AD AE@2
>`.pickRestart({
  A: "e5@14 ~@3 e5@15", B: "[a4@31 b4@5 ~ b4@2 ~ a4@2 b4@2 ~ a4@19]/2",
  C: "[~@15 b4 c#5@3 ~ e5@10 ~ f#5@4 ~ e5@12 ~@4 b5@12]/2", D: "a5@25 ~@7",
  E: "[~@7 e5 f#5@4 e5@4 b4@4 a4 ~ f#4@2 b4@3 ~ a4@20 ~@8 b4@3 ~ a4@8 b3@4 a3@16 e3@8]/3", F: "~@4 g#4 e5 g4 d#5",
  G: "f#4@3 ~", H: "[e4,c#5]@10 ~@2 [f#4,d5]@19 ~", I: "[~@8 c#5@3 ~ b4@3 ~ a4@3 ~ e4@3 ~ d4@4 c#4@20 ~@16]/2",
  J: "~@8 f#5 ~ e5@2 d5@14 ~@6", K: "~@8 a4@3 ~ g4@3 ~ f4@3 ~ e4@4 d4@8", L: "[c#4,a4]@7 ~",
  M: "[d4,b4]@7 ~ [c#4,a4]@7 ~ [b3,g#4]@8 [a3,f#4]@8", N: "[b3,g#4]@3 ~", O: "[c#4,a4]@27 ~@5",
  P: "[d4,b4]@7 ~ [c#4,a4]@7 ~ [c4,g#4]@7 ~ [c#4,a4]@7 ~", Q: "[d4,b4]@15 ~", R: "~@16 g#4@4 e5@3 ~ d#5@4 g4@4",
  S: "f#4 ~", T: "~@4 g5@3 ~ f#5@3 ~ e5@16 ~@4", U: "~ a4", V: "~@8 b4 ~ e4@6, ~@9 a4@7",
  W: "[c#4,a4]@15 ~ [c#4,g#4]@15 ~", X: "[c#4,g4]@25 ~@7", Y: "[a3,f#4]@29 ~@3", Z: "~@4 d4@4 a4@3 ~ g4@4 f4@16",
  AA: "[d4,b4]@15 ~ [b3,g#4]@14 ~@2", AB: "[~@4 c#5 b4 a4@4 ~@6, ~@3 e5@7 ~@6]/2",
  AC: "[~@16 c#5@4 b4@4 a4@17 ~@23, ~@6 e5@15 ~@11]/2", AD: "[d4,f#4]@14 ~@3 [c#4,e4]@8 ~ [b3,d4]@6",
  AE: "[~@3 c#4@34 ~@27, ~@2 a3@33 ~@29]/2",
})).s("gm_electric_guitar_jazz").gain(0.48)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A B@5 C@5 ~@16 D@3 E@3 F@2 G@4 H I J@4 ~@16 D@3 E@3 K@2 G@4 H I L@3>".pickRestart({
  A: "~@16 a4@7 b4@8 ~", B: "[c#5@40 f#5@15 e5@8 a4@56 b4@8 c#5@33]/5",
  C: "[f#5@7 g#4@24 a4@36 e5@4 a5@24 a4@36 e5@4 a5@25]/5", D: "a5/3",
  E: "[a#5@7 b5@17 a#5@7 a5@32 b5@12 a5@4 g#5@9 f#5@8]/3", F: "[a5@35 e6@4 ~ d6@4 c#6@3 d6@4 c#6@4 ~ b5@8]/2",
  G: "[a5@16 g#5@15 g5@32 a5@41 b5@8 c6@7 b5@9]/4", H: "a5", I: "b5 e6", J: "a5/4",
  K: "[a5@35 e6@4 ~ d6@4 c#6@3 d6@4 c#6@4 ~ b5@4 c#6@4]/2", L: "[a5@23 ~@9]/3",
})).s("gm_string_ensemble_2").gain(0.48).pan(0.3)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@9 A B ~@15 C ~@13 D ~@19 E ~@13 F ~@3>".pickRestart({
  A: "~@31 a2",
  B: "b2 c#3 d3 e3 f#3 g#3 a3 [b3,c#4] d4 e4 [f#4,g#4] a4 [b4,c#5] [d5,e5] [f#5,g#5] [a5,b5] [c#6,d6] e6 ~ a6@7 ~@6, ~@17 f#6@3 ~@12, ~@9 g#6@3 ~@4", // Bsus2 F#sus2 Bsus2 Dsus2 F#sus2 Asus2 Dmaj7
  C: "~@8 g#3 a3 b3 [c#4,d4] e4 f#4 [g#4,a4] [b4,c#5] [d5,e5] [f#5,g#5] [a5,b5,c#6] ~ [f#6,g#6]@5 ~@7, ~@19 [d6,e6]@4 ~@9", // Dmaj7 Amaj7 Bsus2 Dsus2 F#sus2 A F#sus2 Dsus2
  D: "~@19 g#4 [a4,b4] [c#5,d5] [e5,f#5] [g#5,a5] [b5,c#6] d6 [f#6,g#6]@3 ~@3, ~@25 e6@2 ~@5", // Asus2 Dmaj7 Esus2 Amaj7 Bsus2 F#sus2
  E: "~@7 a2 b2 c#3 [d3,e3] f#3 [g#3,a3] b3 [c#4,d4] [e4,f#4] [g#4,a4] [b4,c#5] [d5,e5,f#5] [g#5,a5] b5 ~@2 e6 ~@8, ~@21 c#6@2 ~@9, ~@11 d6 ~@4", // Dsus2 Amaj7 Dmaj7 Esus2 Amaj7 Bsus2 D Amaj7
  F: "~@8 d3 e3 f#3 [g#3,a3] [b3,c#4] d4 [e4,f#4,g#4] [a4,b4] [c#5,d5] [e5,f#5,g#5] a5 [b5,c#6] d6@3 ~@9", // Amaj7 Bsus2 E Asus2 Dmaj7 E Bsus2
})).s("gm_orchestral_harp").gain(0.32).pan(0.3)

// chords · celesta
const celesta = note("<A@2 B@4 C@2 D@2 E ~@31 D@2 E ~@30 F@3>".pickRestart({
  A: "[~@32 a7@12 ~@4 [g#6,g#7]@11 ~@5, ~@31 a6@12 ~@21]/2", // G#
  B: "[[g6,g7]@24 ~@8 f#7@25 ~@7 f7@28 ~@3 [e6,e7]@12 ~@5 f#7@11 ~@5, ~@31 f#6@25 ~@7 f6@29 ~@19 f#6@11 ~@6]/4", // G E
  C: "[[d6,d7]@11 ~@5 e7@14 ~@2 a7@26 ~@6, ~@15 e6@14 ~@2 a6@26 ~@7]/2", // D
  D: "[~@28 a5@17 ~@19, ~@20 a7@25 ~@19, ~@22 e7@23 ~@19, ~@24 a6@21 ~@19, ~@26 e6@19 ~@19]/2",
  E: "~@7 a5, ~@5 a7@3, ~@11 e7@5, ~@3 a6, ~@13 e6@3",
  F: "[~@34 a6@33 ~@3 a7@19 ~@7, ~@17 c#7@9 b6@8 ~@34 a6@20 ~@8, ~@21 a7@8 ~ a7@39 [c#7,e7]@19 ~@8]/3", // C#m
})).s("gm_celesta").gain(0.4).pan(0.3)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2_2 = note("<A B@4 C@6 ~@8 D@2 E@6 F@6 G@2 H@6 I@4 ~@8 D@2 E@6 J@6 G@2 K@7 L@2>".pickRestart({
  A: "~@31 a3",
  B: "[~@15 g#3@16 [c#2,g3]@32 d2@12 a2@4 ~@32 e4@8 ~ [d3,d4]@7 [a2,e3], e4@79 ~ d3@39 ~@9, c#4@66 ~@13 d4@33 ~@16, a2@31 ~@32 a3@65, ~@63 f#3@32 f3@33]/4", // C#dim D A5
  C: "[~@15 f#2@15 ~ [b2,d3]@16 [e2,e3]@16 c#4@28 [f#3,d4]@36 [e3,c#4]@28 [f#3,d4]@37, c#4@30 [b3,d4]@33 a3@128 ~, ~@63 e3@16 ~@113]/6", // Bm E D C#m D Bm
  D: "[a3@15 g#3@16 g3@33]/2",
  E: "[f#3@31 f3@32 e3@8 a3@8 c#4@16 d4@8 c#4@9 b3@7 a3@8 b3@28 ~@4 e4@7 ~@2 b3@7 d4@4 c#4@4 ~ b3@8]/6",
  F: "[[e3,c#4]@31 [f#3,d4]@8 ~ e3@7 ~ d#3@8 [e3,c#4]@7 ~ f#3@31 g3@8 [g#3,e4]@16 ~ g3@7 [f#3,d4]@32 ~ g#3@15 [f#3,d4]@17, ~@39 c#4@8 c4@8 ~@8 d4@32 ~@24 d#4@8 ~@32 e4@17 ~@16]/6", // C#m D C#m D
  G: "[[e3,c#4]@15 [f#3,d4]@16 ~ e3@15 [f#3,d4]@9 [g#3,e4]@8, ~@31 c#4@16 ~@17]/2", // C#m D C#m
  H: "[[e3,c#4]@63 ~ f#3@32 f3@31 ~ e3@31 ~ f#3@16 e3@15 e4, ~@63 d4@64 c#4@32 d4@32 ~]/6", // C#m
  I: "[[e3,c#4]@27 [f#3,d4,f#4]@36 [e3,c#4,e4]@28 [f#3,d4,f#4]@37]/4", // C#m D C#m D
  J: "[[e3,c#4]@31 [f#3,d4]@8 ~ e3@7 ~ d#3@8 [e3,c#4]@7 ~ f#3@31 ~ d#4@7 [g#3,e4]@16 ~ g3@7 [f#3,d4]@32 ~ g#3@15 f#3@17, ~@39 c#4@8 c4@8 ~@8 d4@32 g3@8 ~@16 d#4@8 ~@32 e4@17 ~@16]/6", // C#m D C#m D
  K: "[[e3,c#4]@63 ~ f#3@32 f3@31 ~ e3@31 ~ f#3@15 ~ e3@15 ~ [d3,f#4]@16 [c#3,c#4,e4]@10 [b2,b3,d4]@6, ~@63 d4@64 c#4@32 d4@16 b3@16 d4@17 ~@16]/7", // C#m D C#m Bm
  L: "[~@3 [a3,c#4,e4]@35 ~@26, ~@2 a2@35 ~@27]/2", // A
})).s("gm_string_ensemble_2").gain(0.4).pan(0.6)

// other · whistle
const whistle = note("<~@45 A B C D ~@3 E F G H I ~@21>".pickRestart({
  A: "~@4 c#6@5 ~@7", B: "d6@2 ~ e6 ~@2 d6@2 ~ c#6@3 c6@3 ~ c#6@8 ~@8", C: "d6@5 ~@27", D: "d#6@3 ~ e6@5 ~@23",
  E: "~@16 a5@5 ~@3 b5@4 ~@4", F: "c#6@6 ~@10 c#6@7 ~@9", G: "c#6@3 ~ f#6@5 ~@15 e6@2 ~ f#6@2 ~ e6@2",
  H: "~ a5@3 ~ a5@6 ~@21", I: "a5@3 e6@5 ~@24",
})).s("gm_whistle").gain(0.48)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@41 A@6 B C D E F@3 G@2 H I J K L ~@17>".pickRestart({
  A: "[~@24 b4@3 ~ a4@49 ~@3 c#5@4 b4 ~@4 b4@2 ~ a4@27 ~@2 f#4@2 ~ a4@27 ~ [e4,f#4]@2 ~@2 e4@11 a#3 b3@3 ~ a3@4 c#4@4 e4@3 ~ e4@4 c#4@3 c#4, ~@44 a4 ~@15 e4 ~@35]/6", // Esus2
  B: "e4@2 f#4@2 b3@7 ~@5", C: "~@7 b3 c#4@4 e4@3 ~ e4@4 c#4@2 b3@2 f#4@4 a4@4",
  D: "a4@6 a4@2 a4@3 ~ a4@3 ~ a4@3 ~ a4@2 f#4 ~@9", E: "~@7 b4 c#5@4 e5@4 c#5 b4@2 ~@9 a4@4",
  F: "[a4@8 f#4@2 e4@2 f#4@2 e4@2 b3@2 a3@6 ~@2 f#3@2 a3@12 ~@8 e4 ~ f#4@2 a4@2 b4@2 c#5@2 d5 ~ e5@20 d5@3 ~ c#5 d5 c#5 ~ b4@3 ~ c#5@3 ~]/3",
  G: "[b4@8 a4@3 ~ a4@11 ~ c#5@3 ~ e5@13 ~@3 f#5@8 e5 ~@11, ~@24 b4 ~@39]/2",
  H: "~@8 d5@2 e5 ~ f5@2 a5@2 b5@2 a5@2 c#6@3 ~ b5@2 a5 ~ f#5@2 ~@2", I: "a5@4 f#5 ~@27",
  J: "~@19 a3@4 b3 c#4@3 e4@4 ~", K: "~@4 e4@4 f#4 ~ g#4@2 e5@7 ~ e5@4 c#5@2 b4@2 g4@2 f#4@2, ~@9 g4@2 ~@21",
  L: "e4 ~@3",
})).s("gm_overdriven_guitar").gain(0.3).pan(0.2)

// other · overdriven guitar · "OVERDRIVE" · soft notes · Gmaj7
const overdriven_guitar_soft = note(`<
  ~@46
  [~@16 b3 ~@15]
  [~@22 a3 g#3 g3 ~@7, ~@21 a#3@2 ~@9]
  ~@3
  [~@12 e3 ~@3]
  [~@7 g#3 ~ f3 ~@22, ~@4 [f#3,g3] ~@11]
  ~@25
>`).s("gm_overdriven_guitar").gain(0.15).pan(0.2)

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

// drums · snare
const snare = s("sd").struct("<~@7 [~@3 x]!38 [~ x ~ x]!30 ~@3>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@15 A ~@13 A ~@3 A ~@15 A ~@13 B C ~>".pickRestart({
  A: "x", B: "x ~@16 x ~@8 x ~@5", C: "~ x ~@14",
})).gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@7 A ~ A ~ A@31 ~ A ~@34>".pickRestart({
  A: "~ x ~@2",
})).gain(1.54)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@7 [x!8]!68 [x ~@15 x ~@8 x ~@6] [~ x ~@14] ~>").gain(1.38)

stack(
  piano, bass, electric_guitar_jazz, string_ensemble_2, orchestral_harp, celesta, string_ensemble_2_2, whistle,
  overdriven_guitar, overdriven_guitar_soft, kick, snare, crash, congas, jingle_bells
)

More by Grant & Forsyth