Strudelify

Fly Too High

Janis Ian

KeyB♭ majorTempo129 bpm
0:00/0:00
// Fly Too High — Janis Ian
// 129 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 3 "#CLAVI 3" Clavi 3 -> clavinet
// note: Full arrangement: all 164 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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 2"
const piano = note(`<
  ~@31 A@2 B C@2 D E F G F G F G F G C G C G C G C G C G C G C G C H@2 B C@2 D B C@2 D B C@2 D E F G F G F G F G I@2 J@2
  I@2 J@2 K@2 L@2 M@2 N O ~@15 A@2 B C@2 D E F G F G F G F G C G C G C G C G C G C G C G C H@2 B C@2 D B C@2 D B C@2 D B
  C@2 D P
>`.pickRestart({
  A: "[~@12 [f2,f3,c4]@3 ~ [ab2,ab3,eb4]@3 ~@3 bb2 ~ bb2 ~@3 bb2@2 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~ bb2 ~@3 bb2@2 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~, ~@22 [ab3,bb3,db4,f4]@7 ~@19]/2", // F5 Ab5 Bbm7
  B: "db3 ~@3 db3@2 [ab3,b3,db4,f4] ~@3 [ab3,b3,db4,f4] ~ db3 ~@3 db3@2 [ab3,b3,db4,f4] ~@3 [ab3,b3,db4,f4] ~", // Db7
  C: "f2 ~@3 f2@2 [ab3,c4,eb4,f4] ~@3 [ab3,c4,eb4,f4] ~ f2 ~@3 f2@2 [ab3,c4,eb4,f4] ~@3 [ab3,c4,eb4,f4] ~", // Fm7
  D: "bb2 ~@3 bb2@2 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~ bb2 ~@3 bb2@2 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~", // Bbm7
  E: "[c3,c4,eb4,g4] ~@23, bb3 ~@11", // Cm
  F: "f2 ~@3 f2@2 [ab3,c4,eb4,g4] ~@3 [ab3,c4,eb4,g4] ~ f2 ~@3 f2@2 [ab3,c4,eb4,g4] ~@3 [ab3,c4,eb4,g4] ~", // Abmaj7
  G: "g2 ~@3 g2@2 [g3,bb3,d4,f4] ~@3 [g3,bb3,d4,f4] ~ g2 ~@3 g2@2 [g3,bb3,d4,f4] ~@3 [g3,bb3,d4,f4] ~", // Gm7
  H: "[[f2,ab3,c4,eb4,f4] ~@11 [f2,f3,c4]@3 ~ [ab2,ab3,eb4]@3 ~@3 [ab3,bb3,db4,f4]@6 bb2@2 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~ bb2 ~@3 bb2@2 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~, ~@22 bb2 ~@25]/2", // Fm7 F5 Ab5 Bbm7
  I: "~@6 [ab3,c4,eb4,g4] ~@3 [ab3,c4,eb4,g4] ~@7 [ab3,c4,eb4,g4] ~@3 [ab3,c4,eb4,g4] ~", // Abmaj7
  J: "~@6 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~@7 [ab3,bb3,db4,f4] ~@3 [ab3,bb3,db4,f4] ~", // Bbm7
  K: "~@6 [ab3,b3,db4,f4] ~@3 [ab3,b3,db4,f4] ~@7 [ab3,b3,db4,f4] ~@3 [ab3,b3,db4,f4] ~", // Db7
  L: "~@6 [ab3,c4,eb4,f4] ~@3 [ab3,c4,eb4,f4] ~@7 [ab3,c4,eb4,f4] ~@3 [ab3,c4,eb4,f4] ~", // Fm7
  M: "~@6 [gb3,bb3,db4,f4] ~@3 [gb3,bb3,db4,f4] ~@7 [gb3,bb3,db4,f4] ~@3 [gb3,bb3,db4,f4] ~", // Gbmaj7
  N: "~@6 [g3,bb3,db4,f4] ~@3 [g3,bb3,db4,f4] ~@7 [g3,bb3,db4,f4] ~@3 [g3,bb3,db4,f4] ~", O: "[c3,g3,bb3,c4,e4]",
  P: "db3 ~@3 db3@2 [ab3,b3,db4,f4] ~@3 [ab3,b3,db4,f4] ~@13", // Db7
})).s("gm_piano").gain(0.3).pan(0.6)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C@2 D E F G H A B A B A B A B A B A B A B A B A B A B A
  B A C@2 D E F G D E F G D E F G H A B A B A B A B I J K L I J K L D@2 E M N@2 O H P Q R S T U V@2 P Q R S T U W@3 D E
  F G H A B A B A B A B A B A B A B A B A B A B A B A C@2 D E F G D E F G D E F G D E F G X
>`.pickRestart({
  A: "f1 ~@3 f1 ~ g1 ~@3 ab1@2 f1 ~@3 f1@2 g1 ~@3 ab1@2", B: "g1 ~ g1 bb1 ~ c2 g1 ~ g1 bb1 ~ c2",
  C: "[f1@2 ~@10 f1@2 ~@2 ab1@4 ~@2 bb1@4 ~@2 bb1 ~ bb1@2 ~@2 bb1@2 bb1@2 ~@2 bb1@2 bb1@2 ~@2 bb1@2]/2",
  D: "db2@2 ~@2 db2 ~ db2@2 ~@2 db2@2 db2@2 ~@2 db2@2 db2@2 ~@2 db2@2",
  E: "f1@2 ~@2 f1 ~ g1@2 ~@2 ab1@2 f1@2 ~@2 f1@2 g1@2 ~@2 ab1@2", F: "f1 ~ f1 g1 ~ ab1 f1 ~ f1 ab1 ~ ab1",
  G: "bb1@2 ~@2 bb1 ~ bb1@2 ~@2 bb1@2 bb1@2 ~@2 bb1@2 bb1@2 ~@2 bb1@2", H: "c2 ~@11",
  I: "ab1 ~@3 ab1 ~ bb1 ~@3 bb1@2 c2 ~@3 c2@2 bb1 ~@3 bb1@2",
  J: "ab1 ~@3 ab1 ~ bb1 ~@3 bb1@2 c2 ~@3 c2@2 ab1 ~@3 ab1@2", K: "bb1 ~@3 bb1 ~ c2 ~@3 c2@2 db2 ~@3 db2@2 c2 ~@3 c2@2",
  L: "bb1 ~@3 bb1 ~ c2 ~@3 c2@2 db2 ~@3 db2@2 bb1 ~@3 bb1@2", M: "f1 ~ f1 g1 ~ ab1 f1 ~ f1 g1 ~ ab1",
  N: "gb1@2 ~@2 gb1 ~ gb2@2 ~@2 gb2@2 gb1@2 ~@2 gb1@2 gb2@2 ~@2 gb2@2",
  O: "g1@2 ~@2 g1 ~ g2@2 ~@2 g2@2 g1@2 ~@2 g1@2 g2@2 ~@2 g2@2", P: "f1@4 ab1 ~@15 ab1@2 f1@2",
  Q: "g1@3 ~ bb1 ~@3 g1 ~@3 ab1@3 ~ c2 ~@3 ab1 ~@3", R: "bb1@3 ~ db2 ~@3 bb1@2 ~@2 c2@3 ~ eb2 ~@3 g2 ~@3",
  S: "eb2@3 ~ f2@2 ~@14 c2@2 bb1 ~", T: "c2@2 ~@18 eb2 ~ f2 ~", U: "ab2@2 ~@2 ab2 ~ ab2@4 f2@2 ~@10 eb2@2",
  V: "[~@4 eb2 ~ f2@3 ~ c2@4 ~@2 b1@2 bb1@2 ab1@2 f1@12 ~@8 [b2,c3] [a2,bb2] [g2,ab2] gb2 ~@2]/2", // Cmaj7 Bbmaj7 Abmaj7
  W: "[~@4 eb2 ~ f2@3 ~ c2@4 ~@2 b1@2 bb1@2 ab1@2 f1@14 f1@2 ~@2 ab1@4 ~@2 bb1@4 ~@2 bb1 ~ bb1@2 ~@2 bb1@2 bb1@2 ~@2 bb1@2 bb1@2 ~@2 bb1@2]/3",
  X: "db2@2 ~@2 db2 ~ db2@2 ~@2 db2@2 db2@2 ~@2 db2@2 db2@2 ~@4",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · clavinet · "#CLAVI 3"
const clavinet = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C D E F G@2 E H I@2 B@2 I@2 B@2 I@2 B@2 I@2 B@2 I@2 B@2
  I@2 C D E F G@2 E F G@2 E F G@2 E H I@2 B@2 I@2 B@2 J@2 E@2 J@2 E@2 F@2 K@2 L@2 M N ~@15 D E F G@2 E H I@2 B@2 I@2 B@2
  I@2 B@2 I@2 B@2 I@2 B@2 I@2 C D E F G@2 E F G@2 E F G@2 E F G@2 E O
>`.pickRestart({
  A: "[~@6 [eb3,ab3,c4,eb4,f4]@3 ~ [eb3,ab3,c4,eb4,f4] ~@7 [eb3,ab3,c4,eb4,f4]@3 ~ [g3,bb3,d4,f4]@26]/2", // Fm7 Gm7
  B: "[~@6 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4] ~@7 [ab3,c4,eb4,g4]@3 ~ [g3,bb3,d4,f4]@26]/2", // Abmaj7 Gm7
  C: "~@6 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4] ~@7 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4] ~", D: "~@22 [bb3,db4,f4] ~",
  E: "bb2 ~ [bb3,db4,f4] ~ bb2 ~ [bb3,db4,f4] ~ bb2 ~ [bb3,db4,f4] ~ bb2 ~ [bb3,db4,f4] ~ bb2 ~ [bb3,db4,f4] ~ bb2 ~ [bb3,db4,f4] ~", // Bbm
  F: "db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~", // Db7
  G: "f3 ~ [ab3,c4,eb4] ~ f3 ~ [ab3,c4,eb4] ~ f3 ~ [ab3,c4,eb4] ~ f3 ~ [ab3,c4,eb4] ~ f3 ~ [ab3,c4,eb4] ~ f3 ~ [ab3,c4,eb4] ~", // Ab
  H: "[c3,bb3,eb4,g4] ~@23", I: "[~@6 [ab3,c4,eb4,f4]@3 ~ [ab3,c4,eb4,f4] ~@7 [ab3,c4,eb4,f4]@3 ~ [g3,bb3,d4,f4]@26]/2",
  J: "ab2 ~ [c4,eb4,g4] ~ ab2 ~ [c4,eb4,g4] ~ ab2 ~ [c4,eb4,g4] ~ ab2 ~ [c4,eb4,g4] ~ ab2 ~ [c4,eb4,g4] ~ ab2 ~ [c4,eb4,g4] ~", // Cm
  K: "f2 ~ [ab3,c4,f4] ~ f2 ~ [ab3,c4,f4] ~ f2 ~ [ab3,c4,f4] ~ f2 ~ [ab3,c4,f4] ~ f2 ~ [ab3,c4,f4] ~ f2 ~ [ab3,c4,f4] ~", // Fm
  L: "gb2 ~ [bb3,db4,f4] ~ gb2 ~ [bb3,db4,f4] ~ gb2 ~ [bb3,db4,f4] ~ gb2 ~ [bb3,db4,f4] ~ gb2 ~ [bb3,db4,f4] ~ gb2 ~ [bb3,db4,f4] ~", // Bbm
  M: "g2 ~ [bb3,db4,f4] ~ g2 ~ [bb3,db4,f4] ~ g2 ~ [bb3,db4,f4] ~ g2 ~ [bb3,db4,f4] ~ g2 ~ [bb3,db4,f4] ~ g2 ~ [bb3,db4,f4] ~", // Bbm
  N: "[c3,bb3,c4,e4] ~@23", // C7
  O: "db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~ [b3,db4,f4] ~ db3 ~@3", // Db7
})).s("gm_clavinet").gain(0.13).pan(0.3)

// other · recorder
const recorder = note(`<
  ~@15 A B C@2 A D E@3 F G@3 H I@2 J@2 K@6 ~@6 A B C@2 A D E@3 F G@3 H I@2 J@2 L@8 K@6 ~@7 M N O ~ P Q R ~ S T@2 U@6
  ~@14 J@2 K@6 ~@6 A B C@2 A D E@3 F G@3 H I@2 J@2 L@12 V@5
>`.pickRestart({
  A: "~@11 c6", B: "bb5@4 c6 ~ c6 ~@3 c6@2 bb5@4 c6 ~ c6 ~@3 c6@2",
  C: "[bb5@4 c6 ~ c6 ~@3 c6@2 eb6@3 ~ d6@2 db6@3 ~ c6@22 ~@4]/2", D: "bb5@4 c6 ~ c6 ~@3 ab5@2 bb5@4 c6 ~ c6 ~@3 ab5@2",
  E: "[bb5@4 c6 ~ c6 ~@3 c6@2 eb6@2 ~@2 d6 ~ db6@3 ~ c6@27 ~@21 f6@2]/3",
  F: "eb6@4 f6 ~ f6 ~@3 c6@2 eb6@4 f6 ~ f6 ~@3 c6@2",
  G: "[eb6@4 f6 ~ f6 ~@3 f6@2 ab6@2 ~@2 bb6 ~ c7@3 ~ ab6@27 ~@21 c6@2]/3",
  H: "eb6@4 f6!2 ~@4 c6@2 eb6@3 f6 ~@2 f6 ~@3 c6@2", I: "[eb6@4 f6 ~ f6 ~@3 f6 ~ ab6@3 ~ bb6@2 c7@2 ~@2 ab6@26]/2",
  J: "[~@11 f6@3 ~@2 ab6@3 ~@3 bb6@26]/2",
  K: "[~@12 bb6@4 ~@3 ab6@2 ~@2 f6@26 ~@11 f6@2 ~@2 ab6@2 ~@4 bb6@27 ~@11 c6@3 ~@3 eb6@3 ~ f6@26]/6",
  L: "[~@12 bb6@4 ~@3 ab6@2 ~@2 f6@26 ~@11 f6@3 ~ ab6@3 ~@3 bb6@26]/4", M: "eb6@3 ~ eb6@2 f6@3 ~ ab6@7 ~ f6@3 ~ f6@2",
  N: "eb6@3 ~ eb6@2 f6@3 ~ ab6@6 ~@2 f6@2 ~@2 ab6@2", O: "~ f6@5", P: "eb6 ~@3 eb6 ~ f6@2 ~@2 ab6@8 f6 ~@3 f6@2",
  Q: "eb6 ~@3 eb6@2 f6@2 ~@2 ab6@8 ab6@2 ~@2 f6 ~", R: "ab6 ~@3 f6@20",
  S: "ab6@3 ~ ab6 ~ ab6@2 ~@2 ab6@5 ~ ab6 ~ ab6@2 ~@2 ab6 ~",
  T: "[bb6@3 ~ ab6 ~ f6@2 ~@2 ab6@10 ~@3 ab6@5 f6 ~ f6@2 ~@2 eb6 ~ f6@3 ~ f6 ~ f6@3 ~ eb6 ~]/2",
  U: "[ab6@3 ~ f6 ~ eb6@3 ~ f6@5 ~ eb6 ~ eb6@2 ~@2 f6@5 ~ f6 ~ f6@2 ~@2 eb6@5 ~ eb6 ~ eb6 ~@3 ab6@5 ~ ab6 ~ ab6@2 ~@2 gb6@6 db6 ~ eb6@2 ~@2 f6@14 ~@6 g6@2 ~@2 e6@9 ~@5 c6@2 ~@2 eb6@3 ~@3 f6@15 ~@11]/6",
  V: "[~@12 bb6@4 ~@3 ab6@2 ~@2 f6@26 ~@11 f6@3 ~ ab6@3 ~@3 bb6@49 ~]/5",
})).s("gm_recorder").gain(0.48)

// other · alto sax
const alto_sax = note("<~@100 A B C D E F G@2 A B C D E F H@2 ~@48>".pickRestart({
  A: "f4@4 ab4 ~@15 ab4 ~ f4@2", B: "g4@4 bb4 ~@3 g4 ~@3 ab4@4 c5 ~@3 ab4 ~@3",
  C: "bb4@4 db5 ~@3 bb4 ~@3 c5@4 eb5 ~@3 g5 ~@3", D: "eb5@4 f5 ~@15 c5 ~ bb4 ~", E: "c5@3 ~@17 eb5 ~ f5 ~",
  F: "ab5@2 ~@2 ab5 ~ ab5@4 f5 ~@11 eb5@2", G: "[~@4 eb5 ~ f5@2 ~@2 c5@3 ~@3 b4 ~ bb4@2 ab4 f4@14 ~@13]/2",
  H: "[~@4 eb5 ~ f5@2 ~@2 c5@3 ~@3 b4 ~ bb4@2 ab4 f4@12 ~@15]/2",
})).s("gm_alto_sax").gain(0.56).pan(0.4)

// other · tenor sax
const tenor_sax = note("<~@100 A B C D E F G@2 A B C D E F G@2 ~@48>".pickRestart({
  A: "f3@4 ab3 ~@15 ab3 ~ f3 ~", B: "g3@4 bb3 ~@3 g3 ~@3 ab3@4 c4 ~@3 ab3 ~@3",
  C: "bb3@4 db4 ~@3 bb3 ~@3 c4@4 eb4 ~@3 g4 ~@3", D: "eb4@4 f4 ~@16 c4 bb3 ~", E: "c4@2 ~@18 eb4 ~ f4 ~",
  F: "ab4@2 ~@2 ab4 ~ ab4@4 f4 ~@11 eb4@2", G: "[~@4 eb4 ~ f4@3 ~ c4@4 ~@2 b3 ~ bb3@2 ab3@2 f3@14 ~@12]/2",
})).s("gm_tenor_sax").gain(0.56)

// other · baritone sax · "BARITONSAX"
const baritone_sax = note("<~@100 A B C@2 D E F@2 A B C@2 D E F@2 ~@48>".pickRestart({
  A: "f2@4 ab2 ~@15 ab2 ~ f2 ~", B: "g2@4 bb2 ~@3 g2 ~@3 ab2@4 c3 ~@3 ab2 ~@3",
  C: "[bb2@4 db3 ~@3 bb2 ~@3 c3@3 ~ eb3 ~@3 g3 ~@2 eb3@4 ~ f3 ~@15 c3 ~ bb2 ~]/2", D: "c3@2 ~@18 eb3 ~ f3 ~",
  E: "ab3@2 ~@2 ab3 ~ ab3@4 f3@2 ~@9 eb3@3", F: "[~@4 eb3 ~ f3@3 ~ c3@4 ~@2 b2@2 bb2@2 ab2@2 f2@12 ~@14]/2",
})).s("gm_baritone_sax").gain(0.56).pan(0.7)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 D E F G H@2 F I A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  C@2 D E F G H@2 F G H@2 F G H@2 F I A@2 B@2 A@2 B@2 ~@32 F G H@2 F I A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 D E F
  G H@2 F G H@2 F G H@2 F G H@2 F J
>`.pickRestart({
  A: "[~@6 [f3,ab3,c4,eb4]@3 ~ [f3,ab3,c4,eb4] ~@7 [f3,ab3,c4,eb4]@3 ~ [f3,g3,bb3,d4]@25 ~]/2", // Fm7 Gm7
  B: "[~@6 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4] ~@7 [ab3,c4,eb4,g4]@3 ~ f4@12 ~@8 g3@6, ~@11 g3@9 bb3@4, ~@11 [bb3,d4]@8 d4@5, ~@3 f4]/2", // Abmaj7 Bb
  C: "[~@6 [ab3,c4,eb4,f4]@3 ~ [ab3,c4,eb4,f4] ~@7 [ab3,c4,eb4,f4]@3 ~ [g3,bb3,d4,f4]@25 ~]/2", // Fm7 Gm7
  D: "~@6 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4] ~@7 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4] ~", E: "f3 ~@11",
  F: "[db4,f4] ~ db4 ~@2 bb3 [db4,f4] ~ db4 ~@2 bb3, ~@4 f4 ~ f4@6 ~@4 f4 ~ f4@6, ~@2 db4 ~@2 db4", // Db
  G: "db4@2 db4 ~@2 b3 [db4,f4] ~ db4 ~@2 b3, f4@2 ~@2 f4 ~ f4@6 ~@4 f4 ~ f4@6, ~@2 db4 ~@2 db4", // Db
  H: "[c4,f4] ~ c4 f3 g3 ab3 [c4,f4] ~ c4 f3 g3 ab3, ~@4 f4 ~@11 f4 ~@7", I: "[c3,g3,c4] ~@11",
  J: "db4@2 db4 ~@2 b3 [db4,f4] ~ db4 ~ db4@2, f4@2 ~@2 f4 ~ f4@6 ~@4 f4 ~ f4@6, ~@2 db4 ~@3", // Db
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.8)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@32 A B C@2 A ~@25 A B C@2 A B C@2 A B C@2 A ~@41 A B C@2 A ~@25 A B C@2 A B C@2 A B C@2 A B C@2 A B
>`.pickRestart({
  A: "bb3@2 ~@2 bb3@3 ~@5 bb3@2 ~@2 bb3@3 ~@5", B: "b3@3 ~ b3@3 ~@5 b3@2 ~@2 b3@3 ~@5",
  C: "ab3@2 ~@2 ab3@3 ~@5 ab3@2 ~@2 ab3@3 ~@5",
})).s("gm_electric_guitar_clean").gain(0.07).pan(0.8)

// other · vibraphone
const vibraphone = note("<~@100 A B C D E F G@2 A B C D E F G@2 ~@48>".pickRestart({
  A: "f4@3 ~ ab4 ~@16 ab4 f4 ~", B: "g4@3 ~ bb4 ~@3 g4 ~@3 ab4@4 c5 ~@3 ab4 ~@3",
  C: "bb4@3 ~ db5 ~@3 bb4 ~@3 c5@4 eb5 ~@3 g5 ~@3, ~@19 gb5@2 ~@3", D: "eb5@3 ~ f5 ~@16 c5 bb4 ~",
  E: "c5@3 ~@18 eb5 f5 ~", F: "ab5@2 ~@2 ab5 ~ ab5@4 f5@2 ~@10 eb5@2",
  G: "[~@4 eb5 ~ f5@2 ~@2 c5@3 ~@3 b4 ~ bb4 ~ ab4 ~ f4@15 ~@11]/2",
})).s("gm_vibraphone").gain(0.48)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A@30 B C@2 D E@2 F ~ A@22 B C@2 D E@2 F D E@2 F D E@2 F ~ A@8 ~@2 G H I ~ G J K L M N ~@19 C@2 D E@2 F ~ A@22 B C@2 D
  E@2 F D E@2 F D E@2 F D E@2 F ~
>`.pickRestart({
  A: "[[f3,ab3,c4,eb4]@19 ~@3 [g3,bb3,d4,f4]@24 ~@2]/2", B: "[f3,ab3,c4,eb4]@19 ~@5",
  C: "[~@11 [ab3,bb3,db4,f4]@11 ~@2]/2", D: "[ab3,b3,db4,f4]@19 ~@5", E: "[[f3,ab3,c4,eb4]@11 ~]/2",
  F: "[ab3,bb3,db4,f4]@19 ~@5", G: "~@12 c6@3 ~ c6@3 ~ [b5,c6] ~ bb5@2, ~@12 b5 ~@3 b5 ~@7",
  H: "eb6@2 ~@2 db6@2 ~@2 c6@2 ~ b5 c6@2 ~ bb5@3 ~@3 c6 bb5 ~, ~@8 b5 ~@15", I: "c6 ~@11",
  J: "eb6@2 ~@2 db6@2 ~@2 c6@2 ~ b5 c6@2 ~ bb5@3 ~@3 ab5 bb5 ~, ~@8 b5 ~@15", K: "ab5 ~@11", L: "~@19 f5 ~ ab5 bb5 ~",
  M: "c6@3 ~ c6@2 f5 ~ ab5 ~ bb5 ~ c6@3 ~ c6@2 c6 ~ eb6 ~ f6 ~, b5 ~@3 b5 ~@7 b5 ~@3 b5 ~@7", N: "f6 ~@7",
})).s("gm_epiano2").gain(0.24)

// drums · kick
const kick = s("bd").struct("<A@31 B C A@4 D A@23 B C A@12 D A@23 D A@15 E C A@4 D A@23 B C A@17>".pickRestart({
  A: "x!2", B: "x ~@10 x", C: "~ x ~ x ~@2", D: "x", E: "x ~@7 x ~@2 x",
})).gain(0.56)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B@2 C B@3 D A B@2 C B@3 D A B@6 E B@3 F B@2 G H B@4 I H A B@2 C B@3 J A B@2 K B@3 C B@3 F B@2 G H B@3 F B@3 L B@3 F
  I H A B@2 M B@3 D A B@2 E B@3 C B@3 E B@2 G H ~@15 N O B@3 I H A B@2 C B@3 D A B@2 K B@3 C B@3 F B@2 G H B@3 F B F B E
  B@3 F B F B D B F
>`.pickRestart({
  A: "~@2 x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x", C: "x ~ x!2 ~ x ~ x!4 ~", D: "x ~ x!2 ~@8",
  E: "x ~ x!2 ~ x!2 ~@2 x ~@2", F: "x ~ x!2 ~ x!2 ~ x!2 ~@2", G: "x!2 ~ x!2 ~ x!2 ~ x!2 ~", H: "x", I: "x!4",
  J: "~ x!4 ~ x ~@2 x ~@2", K: "x ~ x!2 ~ x ~ x!3 ~@2", L: "~ x!10 ~", M: "x ~ x!2 ~ x ~ x ~ x ~@2", N: "~@11 x",
  O: "x ~ x ~@2 x!2 ~ x!2 ~ x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@21 B ~@37 B ~@23 B ~@64>".pickRestart({
  A: "~@9 x!3", B: "~@6 x!6",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@7 A ~@11 B ~@3 A ~@2 C ~@5 C ~@4 A ~@3 D ~@3 A ~@3 A ~@3 A ~@2 C ~@4 A ~@3 A ~@3 A C ~@4 B ~@7 B ~@3 A ~@3 B
// … 45 more lines

More by Janis Ian