Strudelify

The Wind Chimes (Final Extract From Part Two)

Mike Oldfield

KeyE majorTempo103 bpm
0:00/0:00
// The Wind Chimes (Final Extract From Part Two) — Oldfield, Mike
// 103 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 (2/4 at bar 1, 8/4 at bar 44, 4/4 at bar 59, 5/4 at bar 161) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 161 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · trumpet · "PRG.CHANGE"
const trumpet = note(`<
  A@3 B C@2 ~@6 D E F G H I J ~@13 K@2 ~@3 L@3 ~@23 M N O P Q ~@3 Q ~@5 Q ~@8 R ~@4 Q ~@5 S T U@2 ~@18 S T V@2 ~@24 W
  ~@2 X ~@7 Y Z ~
>`.pickRestart({
  A: "[~@15 [b4,d#5]@4 ~ [c#5,e5]@2 ~@4 [d#5,f#5]@2 ~@3 [e5,g#5]@14 ~@13 [a4,c#5]@5 [b4,d#5]@2 ~@4 [c#5,e5]@2 ~@3 [d#5,f#5]@14 ~@8]/3", // B C#m D#m E A B C#m D#m
  B: "~@5 [g#4,b4]@4 ~ [a#4,c#5]@2 ~@3 [b4,d#5]@2 ~@4 [c#5,e5]@11", // G#m A#m B C#m
  C: "[~@5 [b4,d#5]@6 ~@4 [b4,d#5]@4 ~@2 [a#4,c#5]@3 ~@2 [a#4,c#5]@12 ~@26]/2", // B A#m
  D: "~@16 [c#5,f5]@4 ~@2 [d#5,f#5] ~@4 [f5,g#5] ~@4", // C# D#m Fm
  E: "[f#5,a#5]@5 ~ g#5@2 ~@3 f#5@2 ~@3 [c#5,f5] ~@5 [c5,d#5]@2 ~@3 [c5,d#5]@2 ~@3, ~@6 f5 ~@4 d#5 ~@20", // F# C# Cm
  F: "[d#5,g#5]@2 ~@4 [c#5,f5]@7 ~@3 [a#4,c#5]@3 ~@3 [f#4,a#4]@2 ~@3 a#4@2 ~@3, ~@27 f#4 ~@4", // G#5 C# A#m F#
  G: "~ [d#5,f#5]@2 ~@3 [c5,d#5]@3 ~@13 [g#4,c5]@2 ~@6 [f4,g#4]@2", // D#m Cm G# Fm
  H: "~@17 d#5@4 c#5@2 ~@3 [d#5,f#5] ~@5, ~@17 c5@2 ~@2 f5 ~@10", // D#m
  I: "[f5,g#5]@11 ~@6 [f#5,a#5]@4 a#5@5 ~ [g#5,c6]@5, ~@21 c#6 ~@10", J: "c6@5 ~ [c#5,f5]@10 ~@16, d#6 ~@31",
  K: "[~@2 d#4@2 ~ f4@3 g4@10 g#4@11 a#4@11 f4@18 ~@6]/2", L: "[~@18 d#4@2 ~ f4@3 g4@10 g#4@11 a#4@11 f4@18 ~@22]/3",
  M: "[e5,g5,b5,e6,e7]@5 ~@27", N: "[b4,e5,g5]@2 ~@3 [a4,d5,f#5]@2 ~@25", O: "[e5,g5,b5,e6,e7] ~@15",
  P: "~@16 [d5,f#5] ~@7 [d5,f#5,a5] ~@7, ~@8 a5 ~@7", Q: "[e5,g5,b5,e6]@5 ~@27",
  R: "[e5,a5,c#6,e6]@3 ~@5 [f#5,b5,d#6,f#6]@3 ~@5", S: "e4 c#5", T: "b4@7 a4",
  U: "[g#4@6 ~ b4@6 a4@4 c#5@14 b4@29 ~@4]/2", V: "[g#4@6 ~ b4@5 a4@4 ~ c#5@14 b4@29 ~@4]/2",
  W: "[f#5,a5,c#6,f#6]@5 ~@27", // F#m
  X: "[c#5,c#6]@3 ~@3 [b4,b5]@4 ~@2 [a4,a5]@4 ~@2 [g#4,g#5]@4 ~@2 [f#4,f#5]@3 ~ [e4,e5]@3 ~", // C# B A G# F# E
  Y: "[f#5,b5,d#6,f#6]@3 ~@5 [g#5,c#6,f6,g#6]@3 ~@5", Z: "[a#5,d#6,g6,a#6]@3 ~@5 [c6,f6,a6,c7]@3 ~@5",
})).s("gm_trumpet").gain(0.64)

// other · electric guitar jazz · "PRG.CHANGE"
const electric_guitar_jazz = note(`<
  ~@34 A@2 B C@2 D@2 ~@22 E F E G E G E@3 H E G E H E H I J K L M N O ~ E H E H E H E H ~@10 P Q R P@2 Q S P T U V W
  ~@10 X Y X Y ~@4 Z AA AB AC Z AA AB AD AE AF AG AF AG AF AG ~ AH AI AJ ~@2 AK AL ~@3
>`.pickRestart({
  A: "[~@4 g#4@3 g4@2 ~@17 a#4@12 ~@26, ~@10 a#4@7 a#4@5 ~@42, ~@13 g#4@7 c5@12 ~@32]/2", B: "~@22 a#4@9 ~",
  C: "[~ d#5@14 ~@8 d#5@18 ~@5 a#5@13 ~@5]/2", D: "[~@19 g#5@3 g5@3 d#5@11 g#5@11 ~ g5@12 ~@4]/2",
  E: "e3@2 ~@2 g3@3 ~ a3@2 ~@2 g3@2 ~@2 e3@2 ~@2 g3@3 ~ a3@2 ~@2 g3@2 ~@2",
  F: "b2@2 ~@2 d3@2 ~@2 e3@2 ~@2 d3@2 ~@2 b2@2 ~@2 d3@2 ~@2 e3@2 ~@2 d3 ~@3", G: "b2 ~ d3 ~ e3 ~ d3 ~ b2 ~ d3 ~ e3 ~@3",
  H: "b2 ~ d3 ~ e3 ~ d3 ~ b2 ~ d3 ~ e3 ~ d3 ~", I: "b2@2 ~@2 d3@2 ~@2 e3@2 ~@2 d3@2 ~@6 b2@2 ~@2 d3@3 ~ e3@2 ~@2",
  J: "a2@3 ~ c3@3 ~ d3@2 ~@2 c3@3 ~@5 a2@2 ~@2 c3@2 ~@2 d3 ~@3",
  K: "c#3@3 ~ e3@3 ~ f#3@2 ~@2 e3@2 ~@6 c#3@2 ~ e3@3 ~@2 f#3@2 ~@2",
  L: "e3@3 ~ f#3@2 ~@2 a3@2 ~@2 f#3@2 ~@6 e3@2 ~@2 f#3@2 ~@6", M: "~@2 e3 ~ f#3 ~ g#3 ~@3 e3 ~ f#3 ~ g#3 ~",
  N: "~@2 e3 ~ f#3 ~ e3 ~@3 e3 ~ f#3 ~ e3 ~", O: "~@2 e3 ~ f#3 ~ e3 ~@3 e3 ~ f#3 ~ g#3 ~",
  P: "d3@2 ~@2 d3@2 ~@2 c3@2 ~@2 d3@2 ~@2 d3 ~@3 d2@3 ~ d3 ~@3 d2@3 ~",
  Q: "d3 ~@3 d3@2 ~@2 c3 ~@3 d3@2 ~@2 c3 ~@3 c2@3 ~ c3 ~@3 c2@3 ~", R: "c3 ~ c3 ~ a#2 ~ c3 ~ c3 ~ c2 ~ c3 ~@3",
  S: "c3 ~ c3 ~ a#2 ~ c3 ~ c3 ~ c2 ~ c3 ~ c2 ~",
  T: "e2@2 ~@2 e2@2 ~@2 b2@2 ~@2 e2 ~@3 b2 ~@3 b2@2 ~@2 f#3@3 ~ b2@2 ~@2",
  U: "e2@2 ~@2 e2@2 ~@2 b2@3 ~ e2 ~@3 b2 ~@3 b2@2 ~@2 f#3@2 ~@2 b2 ~@3",
  V: "[e2,f2] ~@3 e2@2 ~@2 b2@3 ~ e2 ~@3 b2 ~@3 b2@2 ~@2 f#3@2 ~@2 b2@2 ~@2", // Fmaj7
  W: "e2 ~@3 e2@2 ~@2 b2@3 ~ e2 ~@3 b2 ~@3 b2 ~@3 f#3 ~@3 b2 ~@3",
  X: "a2@2 c#3@2 [a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,g3]@2 f#3 ~ e3 ~ d3 ~ [g2,c#3]@2 [f#2,d3]@2 [e2,e3]@2 [g2,g3]@2, a1 ~@4 a2 ~@2", // A A7 Gdim D E G
  Y: "a2@2 c#3@2 [a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,g3]@2 f#3 ~ e3 ~ d3 ~ [g2,g3]@2 [f#2,e3]@2 [e2,g3]@2 [g2,a3]@2, a1 ~@4 a2 ~@2", // A A7 G F#7 Em Gsus2
  Z: "a3 ~ b3 ~ e3 ~ a3@2 b3@2 e3@2 a3@2 b3@2 c#4@2 e3@2 a3@2 e3@2 a3@2 b3 ~ e3 ~ a3 ~",
  AA: "b3@2 e3@2 d4@2 e3@2 c#4@2 e3@2 a3@2 e3@2 b3 ~ a3 ~ g#3 ~ a3 ~ b3 ~ e3 ~ a3 ~ b3 ~",
  AB: "[a3,d4] ~ [b3,e4] ~ a3 ~ [a3,d4]@2 [b3,e4]@2 a3@2 [a3,d4]@2 [b3,e4]@2 [d4,f#4]@2 a3@2 [a3,d4]@2 a3@2 [a3,d4]@2 [b3,e4] ~ a3 ~ [a3,d4] ~", // D5 E5 D5 E5 D5 E5 D D5 …
  AC: "[b3,e4]@2 a3@2 g4@2 a3@2 f#4@2 a3@2 d4@2 a3@2 e4 ~ d4 ~ c#4 ~ d4 ~ e4 ~ a3 ~ d4 ~ e4 ~", // E5
  AD: "[b3,e4]@2 a3@2 g4@2 a3@2 f#4@2 a3@2 d4@2 a3@2 e4@4 c#4 ~ e4 ~ f4@4 c#4 ~ f4 ~", // E5
  AE: "f#4@2 ~@2 a3@3 ~ b3@2 ~@2 a3@2 ~@2 f#3@2 ~@2 a3@3 ~ b3@2 ~@2 a3@2 ~@2",
  AF: "c#3 ~ e3 ~ f#3 ~ e3 ~ c#3 ~ e3 ~ f#3 ~ e3 ~",
  AG: "f#3@2 ~@2 a3@3 ~ b3@2 ~@2 a3@2 ~@2 f#3@2 ~@2 a3@3 ~ b3@2 ~@2 a3@2 ~@2",
  AH: "c#3@2 ~@2 e3@2 ~@2 f#3@2 ~@2 e3@2 ~@6 c#3@2 ~ e3@3 ~@2 f#3@2 ~@2",
  AI: "b2@3 ~ d3@3 ~ e3@2 ~@2 d3@3 ~@5 b2@2 ~@2 d3@2 ~@2 e3 ~@3",
  AJ: "d#3@3 ~ f#3@3 ~ g#3@2 ~@2 f#3@2 ~@6 d#3@2 ~ f#3@3 ~@2 g#3@2 ~@2",
  AK: "~@2 f#3 ~ g#3 ~ f#3 ~@3 f#3 ~ g#3 ~ f#3 ~", AL: "~@2 f#3 ~ g#3 ~ f#3 ~@3 f#3 ~ g#3 ~ a#3 ~",
})).s("gm_electric_guitar_jazz").gain(0.36)

// chords · string ensemble 1 · "PRG.CHANGE"
const string_ensemble_1 = note("<~@6 A@2 B C D ~@7 E F@2 ~@21 G H@2 I@2 J K@2 L@3 M@2 ~@106>".pickRestart({
  A: "[~@16 [f#4,a#4]@3 ~ [f#4,b4]@2 ~@3 c#5@2 ~@4 [b4,d#5]@14 ~@12 [c#5,f5]@4 ~ [d#5,f#5]@2, ~@25 a#4 ~@38]/2", // F# B5 B C# D#m
  B: "~@4 [f5,g#5]@2 ~@3 [a#4,c#5]@11 ~@12", C: "~@5 [f#4,a#4]@4 ~ [f#4,b4]@3 ~@2 [f#4,a#4,c#5]@2 ~@3 [b4,d#5]@9 ~@3",
  D: "~@4 [a#4,c#5]@8 ~@2 [a#4,c#5]@4 ~@2 [f4,g#4]@4 ~ [f4,g#4]@7", // A#m Fm
  E: "~@17 [c#2,c#3,g#4,c#5,f5]@3 ~ f#5@2 ~@3 g#5@2 ~@4", // C#
  F: "[~ [f#2,f#3]@8 ~@2 c6@2 ~@3 c#6@2 ~@4 [g#2,g#3,g#5,c6]@16 ~@26, [c#5,f#5,a#5]@9 ~@12 d#6@16 ~@27]/2", // F# G# F#
  G: "~@17 a#4@12 ~@3", H: "[a#4@10 ~ a#4@2 b4@2 a#4@7 g#4@7 ~@4 a#4@4 c#5@3 ~ a#5@3 ~ g#5@19, ~@30 f#4@5 ~@29]/2",
  I: "[~@7 g#5@2 a#5@2 g#5@5 f#5@8 f5@4 f#5@3 g#5@4 c#6@4 g#5@19 ~@6]/2",
  J: "~@3 g#4@2 a4@2 g#4@7 f#4@8 e4@3 g#4@4 b4@3",
  K: "[~ g#5@3 ~ f#5@19 ~@7 f#4@2 g#4@2 f#4@7 e4@8 d#4@3 e4@4 f#4@4 b4@3]/2",
  L: "[~ c#5@12 ~@2 c#5@10 ~@3 d5@2 c#5@8 b4@7 a4@4 c#5@4 e5@3 ~ c#6@3 ~ b5@19 ~@8 c#6@2 b5@6, ~@27 c#5@2 ~@58 b5@2 ~@7]/3",
  M: "[~ a5@7 g#5@4 a5@3 b5@4 e6@4 ~ b5@18 ~@22]/2",
})).s("gm_string_ensemble_1").gain(0.64)

// other · distortion guitar · "PRG.CHANGE"
const distortion_guitar = note(`<
  ~@69 A B ~@12 C D E F ~@3 G ~@3 G ~@10 H I J K H L J M ~@18 N O P Q ~@11 R ~@3 S T U V W@2 X ~@4
>`.pickRestart({
  A: "~@8 b4 ~@3 b4@3 ~", B: "e3@15 ~@17", C: "~@4 e5@2 ~@2 f#5@2 ~@2 g#5@7 ~ e5@2 ~@2 f#5 ~@3 g#5 ~@3",
  D: "b5@6 a5@2 b5@2 ~@2 a5@6 ~@2 g#5@2 ~@2 e5@5 ~@3", E: "b5@11 ~ g5@11 b5@7 ~@2", F: "e6@12 ~@4 f#6@11 ~@5",
  G: "d5@2 ~@4 e5@2 ~@4 f#5@3 ~@4 g5@2 ~@3 g#5@2 ~@2 a5 ~@3", H: "d4@2 ~@6 c4@2 ~@2 d4@2 ~@2 a4@5 ~@11",
  I: "d4@2 ~@2 a3@2 ~@2 c4@2 ~@2 d4@2 ~@2 a4@2 g4@5 ~@9", J: "c4@2 ~@2 g3@2 ~@2 a#3@2 ~@2 c4@2 ~@2 g4@5 ~@11",
  K: "a4 ~@3 d4 ~@4 c4 ~@2 d4@6 ~@14", L: "d4@2 ~@2 a3@2 ~@2 c4@2 ~@2 d4@2 ~@2 a4@2 g4@3 ~@11",
  M: "a4 ~@3 d4 ~@3 c4 ~@3 d4@6 ~@14", N: "b4@23 ~ a4@6 f#4@2", O: "b4@6 a4 b4 c#5@2 b4@2 a4@4", P: "b4@12 a4@3 c#5",
  Q: "b4@11 a4@2 b4@2 ~ c#5@4 b4@4 a4@7 ~", R: "e5@2 ~@4 f#5@2 ~@4 g#5@3 ~@4 a5@2 ~@3 a#5@2 ~@2 b5 ~@3",
  S: "c#5@4 ~@2 b4@4 ~@2 a4@5 ~ g#4@5 ~ f#4@3 ~ e4@3 ~", T: "c#5@3 e5@3 c#5@2",
  U: "g#5@6 a5@2 g#5@4 f#5@8 e5@4 c#5@3 ~@5", V: "d#5@11 ~ f#5@11 a#5@8 ~",
  W: "[e4@4 ~@2 f#4@4 ~@2 g#4@4 ~@2 a#4@5 ~ b4@5 ~@2 c#5@4 ~@2 d#5@5 ~ f5@3 ~@2 f#5@6 ~@10]/2",
  X: "c#6@5 ~ c#6@5 ~ b5@3 ~@3 a#5@6 f#5@2 ~@6",
})).s("gm_distortion_guitar").gain(0.46)

// other · distortion guitar · "PRG.CHANGE" · soft notes
const distortion_guitar_soft = note("<~@105 A B C ~ A B C ~@49>".pickRestart({
  A: "~@4 a3@2 ~@18 a4@5 ~@3", B: "~@24 a4@2 g4@5 ~", C: "~@24 g4@5 ~@3",
})).s("gm_distortion_guitar").gain(0.15)

// chords · synth strings 1 · "PRG.CHANGE"
const synth_strings_1 = note(`<
  ~@20 A@6 B C@7 D@3 E@7 F@6 G@8 ~@5 H I J K H I J@2 H I J K H I H L@5 M@2 N O H I H I H I H I ~@36 P Q@2 R ~@8 S T S T
  S T U@2 V@3 W X Y Z AA AB ~
>`.pickRestart({
  A: "[~@18 [a#3,d4,f4]@43 [a3,c4,f4]@44 [a3,d4,f4]@22 [a3,c4,e4]@21 ~ f3@43, ~@37 [a#3,d4]@11]/6", B: "~ [a#3,d4]@31",
  C: "[~@57 a3@22 [g3,e4]@21 ~ a3@39 ~@6 [g4,a#4]@43 [d4,f4,a#4]@35, ~@13 e4@43 f4@23 ~@21 f4@39 ~@85, ~@7 g3@22 ~@83, ~@15 c4@125 ~@84]/7", // C Gm A#
  D: "[~@9 [g#2,d#3,c4,g#4]@43 ~ [d4,f4]@43, ~@13 [a#2,a#3]@11]/3", // G# Dm A#
  E: "[~ [d#4,g4,a#4]@43 [d4,f4,a#4]@44 ~ [c4,g#4]@22 ~ g4@59 ~@6 [c#4,f#4,a#4]@47, ~@88 d#4@23 [d#4,a#4]@61 ~@52]/7", // D# A# Fm F# D#5
  F: "[~@13 [c#4,f4,g#4]@59 ~ [b3,e4,g#4]@57 ~@3 [b3,d#4,f#4]@59]/6", // C# E B
  G: "[~ [a3,c#4,e4]@59 [g#3,b3,e4]@59 ~ g3@59 [f3,g#3,c#4]@60 ~@17, ~@119 [b3,d4]@60 ~@77]/8", H: "[g4,b4,e5]",
  I: "[d4,f#4,a4,d5]", J: "[e4,g4,b4,e5]@31 ~", K: "[d4,f#4,a4]",
  L: "[[d4,f#4]@32 [b3,d4,f#4]@31 [a3,c4,e4]@32 [c#4,e4,g#4]@32 [d4,f#4,a4]@27 ~@6, [a4,d5]@2 ~@3]/5", // D Bm Am C#m D D5
  M: "[[e4,g#4,b4]@57 ~@7]/2", N: "[e4,g4,b4]", O: "[a3,c#4,e4]@16 [b3,d#4,f#4]@15 ~", P: "[e4,g#4,b4]@3 [d4,f#4,a4]",
  Q: "[[e4,g#4,b4]@16 [f#4,a4,c#5]@15 [e4,g#4,b4]@25 [d4,f#4,a4]@8]/2", // E F#m E D
  R: "[e4,g#4,b4]@15 ~ [f#4,c#5]@16, ~@15 a4@16 ~", S: "[a4,c#5,f#5]", T: "[e4,g#4,b4,e5]",
  U: "[~ [f#3,a3,c#4], [a4,c#5,f#5]]/2", V: "[[c#4,e4,g#4]@31 [b3,d4,f#4]@32 [d#4,f#4,a#4]@31 ~@2]/3", W: "[e4,g#4,b4]",
  X: "~ [f#4,a#4,c#5]@29 ~@2", Y: "[f#4,a#4,c#5]@29 ~@3", Z: "[f#4,a4,c#5]", AA: "[b3,d#4,f#4]@16 [c#4,f4,g#4]@15 ~",
  AB: "[d#4,g4,a#4] [f4,a4,c5]", // D# F
})).s("gm_synth_strings_1").gain(0.32)

// chords · synth strings 1 · "PRG.CHANGE" · soft notes
const synth_strings_1_soft = note(`<
  ~@26 A@2 ~@3 B@2 ~@26 C@3 ~ D ~@2 E D ~@3 D ~@2 E D ~ D ~@9 D ~ D ~ D ~ D ~@49 F ~ F ~ F ~ G@2 ~@10
>`.pickRestart({
  A: "[~@2 f3@43 ~@19]/2", B: "[~@9 d#4@22 ~]/2", C: "[~@19 b3@73 ~@4]/3", D: "e4", E: "d5", F: "f#4", G: "f#4/2",
})).s("gm_synth_strings_1").gain(0.24)

// chords · flute · "PRG.CHANGE"
const flute = note("<~@20 A@4 B@2 C D@3 E@2 ~@31 F G H I ~@60 J@2 K@2 L M@2 N ~@23 O P ~>".pickRestart({
  A: "[~@18 d6@18 ~@11 c6@2 ~ d6@3 c6@2 ~ d6@3 f6@2 ~ a#5@5 c6@34 ~@4 f6@23]/4",
  B: "[~@8 a5@2 e6@2 ~ d6@3 e6@3 f6@2 d6@27 ~@16]/2", C: "~ d6@13 ~@2",
  D: "[f5@2 ~ d6@5 e6@2 ~ f6@2 ~ g6@11 c6@29 ~@3 a6@19 ~@12 f6@2 g6@2 ~ f6@2 ~]/3", E: "[g6@2 a6@2 ~ f6@40 ~@19]/2",
  F: "~@16 b6@7 ~@2 a6@5 ~@2", G: "~@16 e6@7 ~ a6@6 ~@2", H: "~@2 b6 a6", I: "d6 ~",
  J: "[a4@24 g4@6 ~@2 a4@27 ~@5, ~@30 d5@5 ~@29]/2", K: "[a4@24 g4@7 d5@5 a4@15 ~@13]/2",
  L: "[e4,g#4,b4]@23 ~ [d4,f#4,a4]@8", // E D
  M: "[~ [g#4,b4]@14 ~ [a4,c#5]@15 [e4,g#4,b4]@25 [d4,f#4,a4]@8, e4@15 f#4@16 ~@33]/2", // G#m A E D
  N: "[e4,g#4,b4]@15 [f#4,a4,c#5]@15 ~@2", // E F#m
  O: "~@3 b5 ~@7 c#6 ~@4, b3@2 f#4@2 d#5@3 ~@9 c#4@2 g#4@2 f5@3 ~@9, ~ d#4@2 b4@2 f#5@2 ~@10 f4@2 c#5@2 g#5@2 ~@9",
  P: "~@3 d#6 ~@7 f6 ~@4, d#4@2 a#4@2 g5@3 ~@9 f4@2 c5@2 a5@3 ~@9, ~ g4@2 d#5@2 a#5@2 ~@10 a4@2 f5@2 c6@2 ~@9",
})).s("gm_flute").gain(0.41)

// other · whistle · "PRG.CHANGE"
const whistle = note("<~@57 A B C@2 ~ D ~@98>".pickRestart({
  A: "~@16 d#6@2 ~@3 e6@3 ~@3 f#6@2 ~@3", B: "~ b5@2 c#6@3 ~@3 d#6@3 ~@2 e6@3 d#6@3 ~@3 c#6@3 ~@6",
  C: "[~@18 g#6@5 a6@6 b6@5 e6@3 d#6@2 ~@4 e6@3 ~@2 f#6@3 ~@3 b5@3 ~@7]/2", D: "~@10 g#6@5 a6@6 b6@5 e6@5 ~",
})).s("gm_whistle").gain(0.36)

// other · vibraphone · "PRG.CHANGE"
const vibraphone = note(`<
  ~@34 A@4 ~@4 B C D@2 E@2 F@2 G H I J K L M N O@2 P Q@2 ~@3 R S ~@2 R S ~@2 R S ~@19 T U T U T U T U T U ~@12 T U T U T
  U T U T U ~@24 V W X ~@7
>`.pickRestart({
  A: "[~@33 [g#4,c5]@20 ~ [f4,a#4]@64 ~@10, ~@31 g#3@22 ~@75, ~@32 [c4,d#4]@21 d4@64 ~@11]/4", // G# A#5 Cm
  B: "~@17 a#6@4 b6@3 c#7@3 ~ f#6@2 g#6@2", C: "~@2 a#6@2 b6 b6@2 a#6@2 ~@2 f#6@3 ~@18",
  D: "[~@13 f6@3 f#6@3 ~ g#6@3 ~ c#6@2 d#6@3 ~ f6 f6@2 f#6@2 f6@2 ~@2 c#6@3 ~@22]/2",
  E: "[~@9 e6@3 f#6@3 ~ g#6@4 e6@2 f#6@2 ~@2 g#6 g#6@2 a6@2 b6@4 e6@3 ~@26]/2",
  F: "[~@5 d#6@3 e6@4 f#6@4 b5@2 c#6 ~@2 d#6@2 d#6@2 e6@2 f#6@4 b5@3 ~@30]/2",
  G: "~ c#6@3 d6@3 ~ e6@3 ~ a5@2 b5@3 c#6@2 d6@2 d6@2 c#6@2 ~@2 a5@3 ~@2", H: "~@7 g#5",
  I: "a5@3 ~ b5@3 ~ e5@2 f#5@3 g#5@2 g#5@2 a5@2 g#5@2 ~@2 e5@3 ~@6", J: "~@24 g5@4 a5@3 ~",
  K: "b5@4 ~ a5@2 ~@2 b5@2 b5@2 c6@2 d6@4 g5@3 ~@10, ~@2 g5 ~@13", L: "~@20 f5@4 f#5@3 ~ g#5@4",
  M: "~ f5@2 ~@2 f5@2 f5@2 f#5@2 g#5@4 c#5@3 ~@14, c#5 ~@15", N: "~@16 f#3@3 b3@3 e4@2 d#4@2 ~ c#4@5",
  O: "[~ b3@5 e3@3 b3@2 ~ a4@2 g#4@2 ~ b2@3 f#3@2 ~ f#4@2 e4@2 ~ f#3@3 b3@3 e4@2 d#4@2 ~ c#4@6 b3@5 e3@3 b3@2 ~ a4@2 g#4@2 ~@4]/2",
  P: "~@8 f#3@3 b3@3 e4@2 d#4@2 ~ c#4@6 b3@5 e3@2",
  Q: "[~ b3@2 ~ a4@2 g#4@2 ~ b2@3 f#3@2 ~ f#4@2 e4@2 ~ f#3@3 b3@3 e4@2 d#4@2 ~ c#4@6 b3@5 e3@3 b3@2 ~ a4@2 g#4@2 ~@12]/2",
  R: "~@8 d4 e4 f#4 g4 f#4 e4 d4@2", S: "e4@7 ~@25",
  T: "~@16 b4@2 a4@2 d#5@2 b4@2 e5@2 d#5@2 b4 ~ g#4 ~, d#4 e4 g#4 a4 ~@4, ~ b3@2 d#4@2 e4@2 g#4@2 ~@7",
  U: "~@4 b4 g#4 a4 e4 g#4 e4 d#4 b3 g#4 e4 d#4 b3, e5 d#5 ~@6, ~ b4@2 a4@2 ~@11", V: "c#4@3 e4@3 c#4@2",
  W: "g#4@6 a4@2 g#4@4 f#4@8 e4@4 c#4@3 ~@5", X: "d#4@11 ~ f#4@11 a#4@8 ~",
})).s("gm_vibraphone").gain(0.41)

// chords · pan flute · "PRG.CHANGE"
const pan_flute = note("<~@20 A B C D E F G H I@2 J K L M N@2 O P Q R@2 S T ~@118>".pickRestart({
  A: "~@18 [f4,a#4,d5] ~@4 [f4,a#4] ~@5 [f4,a#4,d5]@2 ~, ~@23 d5@2 ~@7", // A# A#5 A#
  B: "~@3 [a#4,d5] ~@4 [f4,a#4,d5]@2 ~@4 [f4,a#4]@2 ~@3 [f4,a#4,d5]@2 ~@3 [a#4,d5] ~@4 [f4,a4]@2 ~, ~@3 f4@2 ~@9 d5 ~@9 f4@2 ~@3 c5 ~@2", // A# A#5 A# F
  C: "~@3 [f4,a4,c5]@2 ~@4 f4@2 ~@3 [f4,a4,c5]@2 ~@4 [f4,a4,c5]@2 ~@3 [f4,a4,c5]@2 ~@3 [f4,a4,c5]@2, ~@4 [a4,c5] ~@11", // F Am
  D: "~@4 [f4,a4,c5]@2 ~@4 [f4,a4,d5]@2 ~@3 [f4,a4,d5]@2 ~@4 [f4,a4,d5]@2 ~@3 [f4,a4,d5]@2 ~@4", // F Dm
  E: "[f4,a4,e5]@2 ~@3 [f4,e5]@2 ~@4 [f4,a4,e5]@2 ~@3 [f4,a4,e5]@2 ~@3 [f4,a#4,d5]@2 ~@4 [f4,a#4,d5]@2 ~@3, ~@5 a4 ~@26", // Fmaj7 A#
  F: "[f4,a#4,d5]@2 ~@4 [f4,a#4,d5]@2 ~@3 [f4,a#4,d5]@2 ~@4 [f4,a#4]@2 ~@4 a#4@2 ~@3 [f4,a#4,d5]@2 ~@2, ~@17 d5 ~@4 [f4,d5]@2 ~@8", // A# A#5 A# Dm
  G: "~ [f4,a#4,d5] ~@5 [a#4,d5] ~@4 [f4,a#4,d5] ~@5 [f4,a#4,d5] ~@4 [f4,a#4,d5] ~@5 [f4,a#4,d5] ~@2, ~@7 f4@2 ~@23", // A#
  H: "~@2 [f4,d5]@2 ~@4 [f4,a#4,d5] ~@4 [c5,e5] ~@5 [c5,e5,g5] ~@4 [c5,e5,g5] ~@5 [c5,e5]@2, ~@2 a#4 ~@10 g5@2 ~@15 g5 ~", // Dm A# C
  I: "[~@3 [c5,e5,g5]@2 ~@4 [c5,e5,g5] ~@4 [c5,e5] ~@5 [c5,e5] ~@4 [c5,f5,a5] ~@5 [c5,f5] ~@4 [c5,f5] ~@5 [c5,f5] ~@4 [e5,g5]@2 ~@4 [e5,g5]@2 ~@3 [c5,e5] ~@5, ~@14 g5@2 ~@4 g5@2 ~@9 a5@2 ~@3 a5@2 ~@4 a5@2 ~@3 c5 ~@5 c5 ~@4 g5@2 ~@4]/2", // C F F5 Em C
  J: "[c5,e5] ~@4 [f5,a5]@2 ~@4 [f5,a5]@2 ~@3 [c5,f5] ~@5 [f5,a5]@2 ~@3 [c5,f5] ~@4, g5@2 ~@3 c5 ~@5 c5 ~@4 a5@2 ~@4 c5 ~@4 a5@2 ~@3", // C F F5 F F5
  K: "~ [c5,a5] ~@4 [c5,f5,a5]@2 ~@4 [c5,a5]@2 ~@3 [d#5,g5,a#5]@2 ~@4 [g5,a#5]@2 ~@3 [g5,a#5]@2 ~@2, ~ f5@2 ~@9 f5 ~@10 d#5 ~@4 d#5 ~@3", // F D# Gm
  L: "~@2 [d#5,g5] ~@4 [d#5,g5,a#5]@2 ~@4 [d#5,g5,a#5]@2 ~@3 [d#5,g5,a#5]@2 ~@4 [d#5,g5,a#5]@2 ~@3 [d5,f5,a#5]@2 ~, ~ a#5 ~@14", // D# A#
  M: "~@3 [d5,f5,a#5]@2 ~@3 [d5,f5,a#5]@2 ~@4 [d5,f5,a#5]@2 ~@3 [d5,f5,a#5]@2 ~@4 [d5,f5,a#5]@2 ~@3 [d5,f5,a#5]@2", // A#
  N: "[~@4 [d5,f5,a#5]@2 ~@3 [c5,d#5,g#5]@2 ~@4 [c5,d#5,g#5]@2 ~@3 [d#5,g#5]@2 ~@4 [c5,d#5,g#5]@2 ~@3 [c5,d#5,g#5]@2 ~@4 [c5,d#5,g#5]@2 ~@3 [c5,d#5,g#5]@2 ~@4 [c5,d#5,g#5]@2 ~@3 [d5,f5,a#5]@2 ~@4 [d5,f5,a#5]@2 ~@3, ~@20 c5 ~@43]/2", // A# G# G#5 G# A#
  O: "[d5,f5,a#5]@2 ~@4 [d5,f5,a#5]@2 ~@3 [d5,f5,a#5]@3 ~@3 [d5,f5,a#5]@2 ~@3 [d5,f5,a#5]@2 ~@4 [d5,f5,a#5]@2 ~@2", // A#
  P: "~ [g5,a#5]@2 ~@4 [d#5,g5,a#5]@2 ~@3 [d#5,g5,a#5]@2 ~@4 [g5,a#5]@2 ~@3 [d#5,g5,a#5]@2 ~@4 [d#5,g5,a#5]@2 ~, ~ d#5 ~@16 d#5 ~@13", // Gm D# Gm D#
// … 130 more lines

More by Mike Oldfield