Strudelify

Northern Lad

Tori Amos

KeyA majorTempo62 bpm
0:00/0:00
// Northern Lad — Amos, Tori
// 62.4 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(62.4/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 B C D E F G H I J K L@3 M N O P Q R S T U V W X Y@2 Z AA AB AC AD AE AF AG AH AI AJ AK@3 AL AM@2 AN Q R S T AO T AP
  AQ W AR AS@2 AT AU AV@4
>`.pickRestart({
  A: "a3@4 a3@7 ~@2 b3@3, ~@4 e4@11 ~, ~@4 b3@9 ~@3, ~@11 a3@4 ~", B: "[f#3,d4]@4 [f#3,d4]@7 b3@2 b3@2 ~, b3 ~",
  C: "~@2 a3@2 ~ a3@2 ~@4 e4@2 ~@2 [d4,e4], e4@6 ~ [e4,a4]@3 d4@2 ~ f#4@3, [d4,a4]@4 [f#4,a4]@3 ~@2 a3@2 a4@3 [e5,f#5,a5]@2", // Dsus2 A5 D5 F#m F#m7
  D: "[e4,b4]@3 ~@10 [e4,a4]@3, e5@5 b4@3 f#4@2 a3@3 ~@3, ~@3 e4@4 e4@4 [f#4,d5,a5]@4 ~, ~@4 g#4@2 b3@3 a4@4 ~@3", // E5 A5 D
  E: "[a3,b3,e4]@3 b3 [a3,b3,e4]@3 [a3,b3,e4,a4]@3 [e4,a4]@3 [a3,b3,e4]@3", // Asus2 A5 Asus2
  F: "b3@2 ~@2 f#4@4 ~@2 b3 [b3,f#4]@2 [a3,b3,f#4]@2 ~, [f#3,c#4,d4]@3 c#4@5 ~ [f#4,b4]@3 ~@4, ~ b3 [f#3,d4]@4 ~@2", // B5 B7 Dmaj7 B5 D
  G: "a3@2 ~@3 a3@2 [e4,a4]@2 ~ d4 d4@2 [e4,a4]@3, [e4,f#4,a4]@3 e4@2 ~@4 a3@2 ~@5, ~@2 a3@2 [f#4,a4]@3 ~@9", // A5 F#m7 F#m
  H: "g#4 ~@4 [e4,a4]@3 a5 c#5@2 [c#5,a5]@2 [c#5,a5]@3, [e4,a4] b3!2 ~@5, ~ g#3@2 [e4,g#4]@2 ~@3 d5@3 ~@5", // A5 F#m A5 E
  I: "~@4 [b4,g#5]@4 [a4,e5]@3 a3 ~ [a3,c#4,f#4]@3, [c#5,a5]@4 a5 ~@11, ~ a4@3 ~@2 e4 ~", // E A5 F#m
  J: "~@4 [g#4,e5]@3 a4!2 g#4!2 f#4!2 g#4 e4@2, [g#3,b3,e4]@8 e5@2 [g#3,b3]@2 e5@3 ~, ~@13 [g#3,b3]@2 ~", // C#m E G#m
  K: "~@2 [a3,e4]@2 [a4,e5]@2 [a3,e4]@3 ~ e4 a4 d5 c#5 a4 e4, [c#4,a4,e5]@2 ~@4 e4 ~", // A5 A
  L: "[~@11 f#4 ~@4 [d4,g#4]@2 [d4,g#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,b4]@2 [d4,b4]@2 [d4,g#4]@2 ~@14 b3 [b3,g#4]@3, [b3,f#4,g#4,b4]@4 [b3,f#4,g#4,b4]@3 b3@2 ~@4 [b3,f#4,g#4,b4]@4 ~@14 a3@2 ~@15, ~ e4@2 e4@2 e4!2 e4@2 ~@6 [d4,g#4] [d4,a4]@7 ~, ~@2 [f#4,g#4,b4] ~@8 e4]/3", // Ddim D G Ddim E G#m7 Ddim D5 …
  M: "~@4 b3@2 [a3,b3]@2 g#4 [c#4,a4]@2 ~@2 [b3,a4]@3, ~@4 [c#4,g#4,a4]@4 [a3,b3]@2 ~ c#4@4 ~, ~@3 f#4", // Asus2 F#m B7 Amaj7 Asus2
  N: "~@3 e4 f#4 e4 a4@2 ~@4 [f#3,b3]@4, [d4,e4,a4]@2 a4 ~ a4@3 ~, ~ a3@2 d4@3 ~@2, ~@9 a3@6 ~", // B5 Dsus2
  O: "~@2 a3@2 b3@2 [a3,b3]@2 g#4 [c#4,a4]@2 ~@2 [b3,a4]@3, [c#4,g#4,a4]@4 [c#4,g#4,a4]@4 [a3,b3]@2 ~ c#4@4 ~, ~@3 f#4", // Asus2 F#m B7 Amaj7 Asus2
  P: "~@3 e4 f#4 e4 ~ e4 ~@5 [e2,e3,g#4]@3, [d4,e4,a4]@2 a4 ~ [f#4,a4] e4 b1@2, ~@2 a3@4 [d4,a4]@3 [a3,d4]@2 [a3,a4]@4 ~, ~@13 b3 ~@2", // E Dsus2 F#m D5 A
  Q: "~@2 a3@2 b3@2 [a3,b3]@2 [a3,b3]@2 c#4 ~@2 [c#5,a5]@3, [c#4,g#4,a4]@4 [c#4,g#4,a4]@4 g#4 ~ a4@2 f#4@4, ~@11 c#4@4 ~", // Asus2 F#m Amaj7
  R: "~@3 e4!2 f#4 a4@2 ~@4 b3@2 [f#3,b3]@2, [d4,e4,a4]@2 a4 ~ a4@3 ~, ~@2 a3@4 d4@5 f#3@3 ~@2, ~@9 a3@6 ~", // B5 Dsus2
  S: "[a3,c#4]@3 ~ [b3,d4] a3 a3@2 [b3,d4]@4 [a3,c#4]@4, ~@3 a3@2 c#4@3 ~@8", // A Bm A
  T: "b3@3 ~@5 [a3,d4]@3 [a3,c#4]@2 [a3,c#4]@3, g#3@3 g#3@2 ~@3, ~@3 b3@2 b3@2 ~@9, ~ [a3,e4] ~@2", // D5 A A5
  U: "~@7 e4 ~ d#4 ~@2 d#4@2 c#4@2, [g#3,d#4,e4]@4 [g#3,d#4,e4]@3 g#3@4 [g#3,e4]@2 ~@3, ~ c#4@2 c#4@2 ~@3, ~@4 e4 d#4 ~@2", // Emaj7 C#m
  V: "[f#4,a4]@2 ~@3 e4@2 ~ e4@2 ~ f#4!2 a4 ~ [a4,e5], ~@2 [e4,a4]@2 a3@2 ~ a3@3 e4@2 ~@2 e4@2, ~@3 d4@2 a4@6 ~@5, ~@2 b4 ~", // F#m A5
  W: "e4@2 ~ a4 ~@2 e4@2 ~@3 e4 [e4,a4] [e4,a4]@3, [a4,e5]@4 [a4,e5]@4 ~ c#5@2 ~@5, ~@2 e4@3 ~@3 [e4,b4]@2 a4@2 ~@4", // A5 E5
  X: "e4@2 ~ e4 ~@2 [e4,a4]@2 e4@2 e4@2 g#4 [d4,g#4]@2 ~, [b4,e5]@5 b4@2 ~ g#4@4 [e4,e5]@2 ~@2, ~@2 b3@2 [e4,a4]@2 ~@2 e5 ~@7", // A5 Ddim E5 E A5
  Y: "[~@8 [g#3,d#4,e4]@2 ~@3 d#4@3 ~@13 f#4 ~ a3, [g#3,d#4,e4]@4 [g#3,d#4,e4]@4 ~@3 g#3@2 [g#3,e4,g#4]@6 ~ [e5,b5]@6 ~@2 [e4,a4]@2 ~@2, ~ c#4@2 c#4@2 c#4!2 ~ [d5,g#5]@3 ~ [d4,g#4]@3 [d4,a4]]/2", // Emaj7 C#m E5 A5 Ddim D5
  Z: "a3@2 a3@2 a3@2 a3@2 [a3,b3]@2 ~@3 [a3,b3,e4]@2 b3, [b3,e4]@2 [b3,e4]@2 e4@2 c#4 ~, ~@10 a3@3 ~@3, ~@11 b3@2 ~@3", // Asus2 E5
  AA: "~@6 b3@2 b3@2 b3 ~@2 [d4,f#4,b4]@2 b3, [c#4,d4]@4 [c#4,d4]@7 b3@4 ~, ~@2 b3@4 ~@4 c#4@3 ~@3", // Bm Dmaj7
  AB: "~@4 [f#4,a4]@3 ~@4 [e5,f#5]@2 [a3,d4,e4]@2 [a3,e4], [e4,f#4,a4]@3 e4@3 ~@2 [e4,a4]@3 a5@4 ~, ~@2 d4@3 ~@2 a3@3 a3@2 ~@4", // F#m Esus2 Asus4 A5 F#m7 A5
  AC: "[e4,a4]@3 ~ [e4,b4,g#5]@3 ~@2 c#5@2 [f#4,c#5,a5]@2 [c#5,a5]@3, g#4@6 ~ e4@5 ~@4, e5 ~@2 b3@2 ~@3 [d5,a5]@3 ~@5", // A5 E F#m D5
  AD: "a3@2 ~@4 a3@2 [a3,b3]@2 ~@3 [b3,e4,a4]@2 b3, [b3,e4]@4 e4@7 ~ c#4@2 ~@2, ~@2 a3@4 ~@4 a3@5 ~, ~@4 b3@4 ~@3 b3@2 ~@3", // Asus2 Esus4 E5
  AE: "d4@2 ~@4 b3@2 b3@2 b3 ~@2 [d4,f#4,b4]@2 b3, b4@7 ~@9, ~@2 b3@4 ~@5 b3@4 ~, ~@3 d4@7 c#4@3 ~@3, ~@4 f#4@7 ~@5", // Bm
  AF: "~@4 [f#4,a4]@3 ~ [d4,e4]@2 ~@3 [a3,d4,e4]@2 [a3,e4], [e4,f#4,a4]@3 [e4,e5,a5]@4 ~@9, ~@2 d4@3 ~@2 a3@3 ~@6", // F#m Dsus2 Asus4 A5 F#m7 A5
  AG: "[e4,a4]@3 ~ [e4,b4,g#5]@3 ~@2 c#5@2 [e4,c#5,a5]@2 [c#5,a5]@3, g#4@6 ~ e4@4 ~@5, e5 ~@2 b3@2 ~@3 [d5,a5]@3 ~@5", // A5 E A F#m D5
  AH: "~@4 [b4,g#5]@4 [a4,e5]@3 a3 ~ f#4@3, [c#5,a5]@4 a5 ~@11, ~@2 a4@6 ~@4 [a3,c#4,e4]@3 ~", // E A5 F#m A
  AI: "~@2 f#4!2 ~ f#4 ~ a4!2 g#4!2 f#4!2 g#4 e4@2, [g#3,b3,e4]@8 ~@2 [g#3,b3]@2 ~ [g#3,b3]@2 ~, ~@4 e5@4 e5@3 ~ e5@3 ~, ~@2 g#4!2 ~@4", // E G#m
  AJ: "~@2 [a3,e4]@2 [a4,e5]@2 [a3,e4]@3 ~ [e4,c#5] [b4,d5] a4 ~ e4 c#4, [c#4,a4,e5] ~@2 c#5, ~@13 a4@3", // A5 C#m Bm A
  AK: "[~@8 f#4@2 f#4 [b3,f#4]@2 ~@3 [d4,g#4]@2 [d4,g#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,b4]@2 [d4,b4]@2 [d4,g#4]@2 ~@2 a4@8 e4 ~@3 b3 [b3,g#4]@3, [b3,f#4,g#4,b4]@4 [b3,f#4,g#4,b4]@3 b3@2 ~@4 [b3,f#4]@4 ~@14 a3@2 ~@7 f#4@4 ~@4, ~@2 e4@4 e4@4 ~ g#4 ~@2 e4@4 ~@12 [d4,g#4]@2 d4@9 e4@2 ~ e4@4, ~@4 [g#4,b4]@2 ~@14 a4@3 ~, ~@21 d4@2 ~]/3", // B5 Ddim D G Ddim E G#m7 B5 …
  AL: "~@4 b3@2 [a3,b3]!2 g#4 [c#4,a4]@2 ~@2 [b3,a4]@3, ~@4 [c#4,g#4,a4]@4 [a3,b3]@2 ~ c#4@4 ~, ~@3 f#4", // Asus2 F#m B7 Amaj7 Asus2
  AM: "[~@3 e4 f#4 e4 a4@2 ~@4 [f#3,b3]@4 ~@2 a3@2 b3@2 [a3,b3]@2 [b3,c#4]@2 ~@3 [b3,a4]@3, [d4,e4,a4]@4 a4@2 ~@2 d5@6 ~@10 a4 ~@3 f#4@4, ~@2 a3@4 d4@3 a4@6 ~ [c#4,g#4,a4]@4 [c#4,g#4,a4]@4 ~@3 c#4@4 ~, ~@5 d4@4 ~@7]/2", // B5 Asus2 Bsus2 B7 Dsus2 Amaj7
  AN: "~@3 e4 f#4 e4 ~ e4 a4 ~@4 [e2,e3,g#4]@3, [d4,e4,a4]@2 a4 ~ [f#4,d5] e4 b1@2, ~@2 a3@4 [d4,a4]@3 [d4,a4]@2 [a4,d5]@5, ~@13 b3 ~@2", // E Dsus2 D D5
  AO: "[a3,c#4,a4]@4 [a3,c#4,g#4]@4 [a3,c#4,a4]@4 ~ a4@2 ~, ~@4 a4 ~@7 [a3,c#4]@4", // A Amaj7 A
  AP: "~@7 e5 ~ d#5 ~@2 d#5@2 c#5@2, [d#5,e5,g#5]@4 [d#5,e5,g#5]@3 g#5@3 ~@6, ~@2 c#5@4 c#5@4 ~ e5@2 ~@3, ~@4 e5 [d#5,g#5] ~@2", // Emaj7 G#5
  AQ: "[f#5,a5]@2 ~@6 e4@2 ~ f#4!2 a4 ~ [a4,e5], ~@2 [e5,a5]@2 a4@2 ~ a3@3 e4@2 ~@2 e4@2, ~@3 d5@2 a5@6 ~@5, ~@5 e5@3 b4@4 ~@4", // F#m A5
  AR: "e4@2 ~ e4 ~@2 [e4,g#4]@2 e4@2 e4@2 g#4 [d4,g#4]@2 ~, [b4,e5]@5 b4@2 ~ g#4@4 [e4,e5]@2 ~@2, ~@2 b3@2 [e4,a4]@2 ~@2 e5 ~@7", // E Ddim E5 E A5
  AS: "[~@8 [g#3,d#4,e4]@2 ~@3 [d#4,e4]@3 [e4,f#4,a4,d5]@2 ~ e4@2 e4 f#4@2 e4@2 ~ f#4!2 a4 ~ [a4,e5], [g#3,d#4,e4]@4 [g#3,d#4,e4]@4 ~@3 g#3@2 [g#3,g#4]@6 ~@7 e4@2 ~@2 e4@2, ~@2 c#4@4 c#4@4 c#4@2 c#4@2 ~@4 [f#4,a4,d5]@3 [a4,d5]@3 [a4,d5]@4 ~@4]/2", // Emaj7 D A5 Emaj7 G# D D5
  AT: "~@2 [b5,c#6] [b5,d6]!2 [a5,c#6] [e5,a5,c#6] [c#5,e5] ~@3 e4 [e4,a4] [e4,a4]@3, [e4,a4,e5,e6]@5 ~@3 [e4,b4]@2 a4@2 ~@4, ~@9 c#5@2 ~@5", // Bsus2 Bm A C#m A5 E5
  AU: "e4@2 ~ e4@2 e4!2 ~ e5 ~ e4@2 g#4 [d4,g#4]@2 ~, [b4,e5]@5 a4@2 g#4@4 ~@5, ~ b3 ~ b4 ~@4, ~@7 e4@2 ~@3 [e4,e5]@2 ~@2", // Ddim E5 E
  AV: "[~@6 c#4@2 ~@3 c#4@2 d#4@3 d5@4 e4 ~@2 a3 ~ d4@3 d4@2 ~ d4@2 ~ [a3,c#4]@19 ~@11, [g#3,d#4,e4]@4 [g#3,d#4,e4]@4 g#3@4 ~ [g#3,e4,g#4]@6 ~ f#4@2 a4@7 ~@35, ~@2 c#4@4 ~@2 [d#4,e4]@2 d#4@2 ~@4 a4@5 e4@7 ~@36, ~@9 c#4@2 ~@9 d5@6 ~@38, ~@22 d4@3 ~@39]/4", // A Emaj7 C#m Emaj7
})).s("gm_piano").gain(0.36)

// chords · piano
const piano_2 = note(`<
  A@3 B@4 C D E F G H I J@2 K@2 L@2 M N O P Q R O S@4 T U@3 V D E F G H I W@2 X@2 L@2 M N Y N O P Q R O Z Q AA O AB@3
>`.pickRestart({
  A: "[~@2 e3@4 e3@4 ~@2 a2@3 ~@3 f#2@6 ~@16 f#2@8, a1@14 ~@2 b1@15 d3@8 ~@9, [e2,a2]@12 ~@3 f#2@3 ~@8 f#3@4 c#3@2 ~@16, ~@5 e3@2 ~ b2@6 b2@2 d2@8]/3", // A5
  B: "[e3@12 ~@10 c#3@2 ~@20 f#3@2 ~@2 d2@6 ~@6 f#3@2 ~ e3, ~@12 d2@3 a2@9 a2@6 a2@2 ~@24 f#2@8, ~@7 f#2 a1@7 ~ b1@8 ~@3 d2@3 ~@2, ~@16 e2@11 ~@4 b2@7 ~@9 d3@8 ~@7 d3@2, ~@18 e3@7 ~@3 c#3@4 ~@14 c#3@2 ~@16]/4",
  C: "~@5 d3 a2 e3, e2, e3@7 ~", D: "~@13 f#2@3", E: "e2@4 ~@2 b2 e2", F: "~ f#3 ~ f#3 ~@4, f#2", G: "e2 ~@2 e2",
  H: "d2@7 ~@9", I: "~@11 [e1,e2]@4 ~",
  J: "[~@4 f#3@2 f#3@2 f#3@2 f#3@4 e3 ~ d2@7 ~@5 e3@2 ~ f3, f#2@8 ~@7 d3@4 ~@4 a2@4 ~ e2@4, ~@3 d2, ~@12 [d3,f#3]@3 e3]/2", // D
  K: "[~@4 f#3@2 f#3@2 f#3@2 f#3@4 e3 ~ d2@4 ~@4 [d3,f#3]@6 e3 f3, f#2@8 f#2@4 ~@3 d3@4 ~@4 a2@4 ~@5, ~@3 d2]/2", // D
  L: "[~@4 f#3@2 f#3@2 f#3@2 f#3@4 e3 ~ d2@7 ~@4 [e2,e3]@3 [e2,e3]@2, f#2@8 f#2@4 ~@3 d3@4 ~@4 a2@4 ~@5, ~@3 d2, ~@12 [d3,f#3]@3 ~]/2", // E D
  M: "e3@2 e3@4 ~ e3@4 a2@3 f#2@2, [a1,a2] ~@3", N: "e3@2 e3@4 ~ e3@3 e3@2 ~ e3@2 ~, [e1,e2] ~",
  O: "c#3@6 c#3@5 ~@3 c#3@2", P: "d3 ~ d2 ~, ~@7 f#3@4 ~@5",
  Q: "[a1,a2]@6 ~@2 a2@4 ~ g#2 f#2@2, ~@7 e2@2 ~@3 a2@2 ~@2, ~@4 a1@3 ~", // A
  R: "e2@6 ~@2 [e1,e2]@3 b1 e2@2 d2@2, ~@7 b1@2 ~@7", // E
  S: "[~@16 a2@12 a2@3 ~ f#3@4 f#3@4 f#3@4 [b2,f#3]@3 ~ [d2,d3]@16, ~@11 [d1,d2]@5 a1@14 ~@2 b1@14 ~@18, ~@15 e2@11 ~@5 f#2@7 ~@9 f#2@7 ~@10, ~@8 b2@3 ~@5]/4", // B5 D
  T: "e3@12 ~@3 a2, ~@3 d2, ~@7 f#2",
  U: "[a2@12 a2@3 ~ f#3@4 f#3@4 f#3@4 [b2,f#3]@3 ~ d2@9 ~@3 d3@4, a1@14 ~ f#2@7 ~@9 f#2@7 ~@4 f#2@2 ~@4, ~@16 b1@14 ~@11 d2@7, ~@16 b2@12 ~@4 d3@11 a2@2 ~@3]/3", // B5
  V: "e3@3 ~",
  W: "[~@4 f#3@2 f#3@2 f#3@2 f#3@4 e3 ~ d2@7 ~@5 e3@2 ~ f3, f#2@8 ~@7 d3@4 ~@4 a2@4 ~ e2@4, ~@12 [d4,f#4]@3 e3]/2", // D
  X: "[~@4 f#3@2 f#3@2 f#3@2 f#3@4 e3 ~ d2@4 ~@4 [d3,f#3]@6 e3 f3, f#2@8 f#2@4 ~@3 d3@4 ~@4 a2@4 ~@5]/2", // D
  Y: "~@3 f#3@2 ~@2 c#3@4 a2@3 f#2@2, [f#1,f#2,f#3] ~@3, ~ c#3@2 ~@5", Z: "~@4 [d2,d3]@4 ~@3 [d1,d2]@4 e2",
  AA: "~@4 e3@2 ~@3 e3@2 b1 e2@2 d2@2, e2@6 ~ b1@2 ~@7, ~@2 [e1,e2] ~", // E
  AB: "[~@9 f#3@2 ~ f#3@2 ~@2 e3 ~ [a1,e2,e3]@19 ~@11, [d2,d3]@15 f#3@2 ~@31, ~@8 e3@2 ~ e3@2 ~ e3@2 ~@32]/3", // A5 D
})).s("gm_piano").gain(0.36)

// bass · electric bass finger
const bass = note(`<
  ~@8 A B A C D ~ E F G H I J K L M N O P Q R S T U V W X U Y Z B AA AB D AC AD F AE H AF J K AG AH L M N O P Q R O P Q
  AI ~@2
>`.pickRestart({
  A: "~ f#2, f#1@3 ~", B: "e1@7 b1 e2@4 ~ b1 e1@2, ~@6 a#1 ~", C: "~@3 e2, e1", D: "d2@7 ~",
  E: "f#1@6 ~ c#2 f#1 ~ f#1@5 f#1", F: "d2@6 ~ a1 d2 ~ d2@2 b1 c2 c#2@2", G: "f#1@6 ~ c#2 f#2@4 f#1 a1@3",
  H: "d2@6 ~ a1 d2@4 d2@3 e2", I: "f#1@6 ~ c#2 f#2@4 ~ f#1 a1@2", J: "d2@7 ~@2 e1 f#1@3 e1 g#1@2",
  K: "a1@7 e2 a2@3 g#2@3 f#2@2", L: "e2@7 b1 e2@2 e2@4 e2 d2", M: "c#2@3 c#3@3 c#2@2", N: "d2@6 ~ a2 b2@3 d3@3 b2@2",
  O: "a2@7 e2 a2@4 g#2@2 f#2@2", P: "e1@7 b1 e2@8", Q: "c#2@7 g#1 c#2@6 c#2@2", R: "~ a2@2 ~, d2",
  S: "a1@6 ~ a1 a1@6 ~@2", T: "b1@7 b1 b1@8", U: "d2@7 a2 d3@7 a2", V: "~ b2, e2", W: "a1@6 ~ e1 a1@5 g#1 a1 a#1",
  X: "b1@6 ~ b1 b1@5 b1!2 c#2", Y: "e2@7 b1 e2@4 e1@4", Z: "f#2!2", AA: "~@7 c#2 f#2@8, f#1@3 ~",
  AB: "e1@7 e1 e1@6 ~ f#1, ~@7 e1", AC: "~@15 e1", AD: "f#1@6 ~ c#2 f#2@6 f#1 a1", AE: "f#1@6 ~ f#1 f#1@4 f#1 a1@3",
  AF: "f#2@6 ~ c#2 f#2@4 ~ f#1 a1@2", AG: "e2@7 b1 e2@2 e2@4 e2!2",
  AH: "f#2@5 e2 c#2 a1 f#1@3 a1@3 c#2@2, ~@5 f#2@2 ~@9", AI: "~@4 a2@9 ~@3, d2",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · electric guitar clean · A5
const electric_guitar_clean = note(`<
  ~@24
  [[e4,a4,e5]@5 ~@11, a3 ~]
  ~@29
  [[e4,a4,e5]@5 ~@11, a3 ~]
  ~@3
  [[e4,a4,e5]@5 ~@11, a3 ~]
  ~@5
>`).s("gm_electric_guitar_clean").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@8 A@4 ~@2 B C D@7 E D@3 ~ A@3 F A@3 F A@4 ~@2 B C D@8 ~@2 D@7 ~@3>".pickRestart({
  A: "x ~@7 x ~@2 x ~@4", B: "x ~@6 x!2 ~ x ~@4 x", C: "x ~@6 x!2 ~ x ~@3 x!2", D: "x ~@6 x!2 ~ x ~@2 x ~@2",
  E: "x ~@6 x!2 ~ x ~@2 x ~ x", F: "x ~@3 x ~@2 x",
})).gain(0.41)

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

// drums · low tom
const low_tom = s("lt").struct("<~@13 A ~ A ~@25 A ~ A ~@20>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@3 B ~@16 C A D E F A D E A@3 B ~@24>".pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~@3", B: "x ~ x ~ x ~ x!4 ~@2 x ~ x ~", C: "x ~ x ~ x ~ x!3 ~@3 x ~ x ~",
  D: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", E: "x ~ x ~ x ~ x!10", F: "x ~@3 x ~ x!3 ~ x ~ x ~ x ~",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@3 B ~@16 B A ~@2 C A ~@2 A@3 B ~@24>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~ x ~@6",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@20 A ~ B A@2 ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3>".pickRestart({
  A: "x", B: "x ~@12 x ~@2",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  ~@12 A B ~@3 C D C D C@3 D C D E ~@12 A B ~@3 C D C D C D C F E D C D C D C D G ~@2
>`.pickRestart({
  A: "x ~@3 x ~@3 x ~@2 x!2 ~@3", B: "x", C: "~@13 x ~@2", D: "~@11 x!3 ~@2", E: "x ~@3 x ~@3 x ~@3 x!3 ~",
  F: "x ~@3 x ~@3 x ~@3 x!2 ~@2", G: "x ~@3 x ~@3 x ~@4 x!3",
})).gain(0.36)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@18 A ~ A ~@3 A ~ A ~@19 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@3>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<~@14 A@4 B A B A@3 B A B ~@15 A@4 B A B A B A ~@2 B A B A B A B ~@3>".pickRestart({
  A: "x!16", B: "x!12 ~ x!3",
})).gain(0.15)

stack(
  piano, piano_2, bass, electric_guitar_clean, kick, snare, low_tom, hihat, open_hat, crash, ride, ride_soft, tambourine
)

More by Tori Amos