Strudelify

Raspberry Swirl

Tori Amos

KeyB♭ minorTempo132 bpm
0:00/0:00
// Raspberry Swirl — Amos, Tori
// 132 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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.

// other · clavinet
const clavinet = note("<A@4 ~@17 B@7 ~@22 C@8 D@5 ~@28 C@16 D@5 ~@2>".pickRestart({
  A: "[~@3 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@2 bb3@2 ~@7, f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 ~@9, ~ bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 ~@8]/4",
  B: "[~@3 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@2 bb3@2 ~@7, f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 ~@8, ~ bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 ~@9]/7",
  C: "[~@3 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@2 bb3, f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2, ~ bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 ~]/8",
  D: "[~@3 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@6 bb3@2 ~@2 bb3@2 ~@7, f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 ~@8, ~ bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 bb3@2 bb3@2 ~@3 eb3@2 f3@2 f3@2 ~ bb2@2 ~@9]/5",
})).s("gm_clavinet").gain(0.31)

// chords · overdriven guitar
const overdriven_guitar = note("<~ A@5 ~@2 B@2 ~@104>".pickRestart({
  A: "[~@32 [c3,g3]@5 ~ [c3,g3]@5 ~@2 a2@5 ~@8 ab4@12 ~@10, gb5@3 ~@2]/5", B: "[~@6 c6@5 ~@3 ab4@5 ~@5 c6@5 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.15)

// chords · epiano2 · "Chris Howe. More midis"
const epiano2 = note("<~@3 A@3 B C@4 D@4 E@8 F@2 G@8 ~@15 H@6 I@4 J K ~@54>".pickRestart({
  A: "[f5!3 ~ f5!3 ~ f5!3 ~, ~@3 f5 ~@3 f5 ~@4, ~@7 ab5@2 ~@6 ab5@2 ~@7]/3", B: "f5 ~@3",
  C: "[f5!3 ~ f5!3 ~ f5!3 ~ f5 ~ f5 ~, ~@3 f5 ~@3 f5 ~@3 f5 ~@4, ~@7 ab5@2 ~@6 ab5@2 ~@6 ab5@2 ~@7]/4",
  D: "[f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~ ab5, ~@3 f5 ~@3 f5 ~@3 f5 ~@3 f5, ~@7 ab5@2 ~@6 ab5@2 ~@6 ab5@2 ~@7]/4",
  E: "[~@8 bb5@2 ~@2 bb5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 ~@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~ ab5, ab5@23 ab5@8 ab5@8 ab5@16 ab5@8 ~, ~@11 f5 ~@3 f5 ~@3 f5 ~@7 f5 ~@3 f5]/8",
  F: "[f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~ ab5, ~@3 f5 ~@3 f5, ~@7 ab5@8 ~]/2",
  G: "[b5 ~@7 bb5@2 ~@2 bb5@2 ~@50, ab5]/8",
  H: "[f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~ ab5, ~@3 f5 ~@3 f5 ~@3 f5 ~@3 f5 ~@3 f5 ~@3 f5, ~@7 ab5@8 ab5@8 ab5@8 ab5@8 ab5@8 ~]/6",
  I: "[~@8 bb5@2 ~@2 bb5@2 ~@2 f5@2 f5@2 f5@2 ~@2 f5@2 f5@2 f5@2 ~ ab5, ab5@23 ab5@8 ~, ~@11 f5 ~@3 f5]/4",
  J: "ab5 ~@3, b5 ~@7", K: "bb5 ~ bb5 ~",
})).s("gm_epiano2").gain(0.2)

// chords · epiano2 · "Chris Howe. More midis" · soft notes
const epiano2_soft = note("<~@3 A@3 B C@4 D@3 E@8 F@2 G@8 ~@16 H@8 F@2 I J ~@54>".pickRestart({
  A: "[bb4!3 ~ bb4!3 ~ bb4!3 ~, ~@3 bb4 ~@3 bb4 ~@4, ~@7 d5@2 ~@6 d5@2 ~@7]/3", B: "bb4 ~@3",
  C: "[bb4!3 ~ bb4!3 ~ bb4!3 ~ bb4 ~ bb4 ~, ~@3 bb4 ~@3 bb4 ~@3 bb4 ~@4, ~@7 d5@2 ~@6 d5@2 ~@6 d5@2 ~@7]/4",
  D: "[bb4@2 bb4@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 ~ d5, ~@3 bb4 ~@3 bb4 ~@3 bb4, ~@7 d5@2 ~@6 d5@2 ~@7]/3",
  E: "[bb4@2 bb4@2 bb4@2 ~@2 db5@2 ~@6 eb5@2 ~@2 eb5@2 ~@2 bb4@2 bb4@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 ~@2 bb4@2 ~@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 ~ d5, ~@3 bb4 ~@11 bb4 ~@3 bb4 ~@3 bb4 ~@7 bb4, ~@7 d5@24 d5@8 d5@8 d5@16 ~]/8",
  F: "[bb4@2 bb4@2 bb4@2 ~@2 bb4@2 bb4@2 bb4@2 ~ d5, ~@3 bb4 ~@3 bb4, ~@7 d5@8 ~]/2",
  G: "[bb4!3 ~ db5 ~@3 eb5 ~ eb5 ~@21, ~@6 bb4@2 f5 ~@55, ~@7 d5@57]/8",
  H: "[bb4!3 ~ bb4!3 ~ bb4!3 ~ bb4!3 ~ bb4!3 ~ bb4!3 ~ db5 ~@3 eb5 ~ eb5 ~, ~@3 bb4 ~@3 bb4 ~@3 bb4 ~@3 bb4 ~@3 bb4 ~@3 bb4 ~@8, ~@7 d5@8 d5@8 d5@8 d5@8 d5@8 d5@17]/8",
  I: "db5 ~@3, f5 ~@7", J: "eb5 ~ eb5 ~",
})).s("gm_epiano2").gain(0.05)

// chords · piano
const piano = note(`<
  ~@7 A@6 B@2 C@2 D@4 E@2 B@2 C@2 F ~@2 G@2 H@2 I J G K G@2 H@2 I L G M N@2 O@2 P@2 B@2 C@2 Q R C@2 F ~ S T U S@2 T U
  S@2 G@2 H@2 I J G K G@2 H@2 I L G M N@2 T U S@2 T U S@2 T U S@2 T U S@2 T U V W X Y Z AA@2
>`.pickRestart({
  A: "[[f5,bb5]@4 [f5,bb5]@4 [f5,bb5]@4 f5@2 [f5,bb5]@4 f5@2 [f5,bb5]@4 [f5,bb5]@4 f5@2 f5@2 [f5,bb5]@4 [f5,bb5]@4 [f5,bb5]@4 ~@2 [ab5,db6]@4 [ab5,db6]@4 [bb5,eb6]@4 [bb5,eb6]@4 f5@2 [f5,bb5]@4 [f5,bb5]@4 [f5,bb5]@4 f5@2 [f5,bb5]@4 f5@2 [f5,bb5]@5 ~@7, ~@6 bb4@2 ~ bb4@2 ~@3 bb5@2 ~@32, ~@15 bb4@2 ~@5 [bb4,f5]@2 ~@7 bb4@2 ~@5 bb4@2 ~ bb4@2 ~@5]/6", // Bb5 Db5 Eb5 Bb5
  B: "[[f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2 f5 [f5,bb5]@2 f5 [f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2, ~@6 bb4@2 ~ bb4@2 ~@5]/2", // Bb5
  C: "[[ab5,db6]@4 [ab5,db6]@5 ~@5 [bb5,eb6]@4 ~@2 [bb5,eb6]@5 ~@7, ~@6 [bb4,eb5]@2 ~ eb5@2 ~@5]/2", // Db5 Eb5
  D: "[[f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2 f5 [f5,bb5]@2 f5 [f5,bb5]@2 [f5,bb5]@2 f5!2 [f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2 ~ [ab5,db6]@2 [ab5,db6]@2 [bb5,eb6]@2 [bb5,eb6]@2 [bb4,f5], ~@6 bb4@2 ~ bb4@2 ~@3 bb5@2 ~@16, ~@15 bb4@2 ~@5 [bb4,f5]@2 ~@8]/4", // Bb5 Db5 Eb5 Bb5
  E: "[[f5,bb5]@4 [f5,bb5]@4 [f5,bb5]@4 f5@2 [f5,bb5]@4 f5@2 [f5,bb5]@5 ~@7, bb4 ~@5 bb4@2 ~ bb4@2 ~@5]/2", // Bb5
  F: "[f5,bb5]!3 [bb4,f5]", // Bb5
  G: "[f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~", // Bb5
  H: "[ab5,db6,db7] ~ [ab5,db6,db7] ~ [ab5,db6,db7] ~ [ab5,db6,db7] ~ [ab5,db6,db7] ~ [ab5,db6,db7] ~ [ab5,db6,db7] ~ [ab5,db6,db7] ~", // Db5
  I: "[bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~", // Eb5
  J: "[bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,db7] ~ [bb5,eb6,db7] ~ [bb5,eb6,c7] ~ [bb5,eb6,c7] ~", // Eb5 Eb7 Cm7
  K: "[db5,ab5,ab6] ~ [db5,ab5,ab6] ~ [db5,ab5,ab6] ~ [db5,ab5] ~ [ab5,ab6] ~ [eb5,bb5,bb6] ~ [eb5,bb5,bb6] ~ [eb5,bb5,bb6] ~", // Db5 Ab Eb5
  L: "[bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [bb5,eb6,eb7] ~ [eb6,db7] ~ [bb5,eb6] ~ [eb6,c7] ~ [bb5,eb6] ~", // Eb5 Eb7 Eb5 Cm Eb5
  M: "[f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [f5,bb5,bb6] ~ [gb5,bb5,bb6] ~ [gb5,bb5,bb6] ~ [gb5,bb5,bb6] ~", // Bb5 Gb
  N: "[[f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2 f5 [f5,bb5]@2 f5 [f5,bb5]@2 [f5,bb5]@2 f5 [bb4,f5], ~@6 bb4@2 ~ bb4@2 ~@3 bb5@2]/2", // Bb5
  O: "[[f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2 ~ [ab5,db6]@2 [ab5,db6]@2 [bb5,eb6]@2 [bb5,eb6]@2 [bb4,f5], ~@3 [bb4,f5] ~@4]/2", // Bb5 Db5 Eb5 Bb5
  P: "[[f5,bb5]@4 [f5,bb5]@4 [f5,bb5]@4 f5@2 [f5,bb5]@4 f5@2 [f5,bb5]@5 ~@7, ~@6 bb4@2 ~ bb4@2 ~@5]/2", // Bb5
  Q: "[f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2 f5 [f5,bb5], ~@3 bb4", R: "~ f5 [f5,bb5]@2 [f5,bb5]@2 [f5,bb5]@2, ~ bb4@2 ~@5",
  S: "[f5,bb5,bb6] ~ [f5,bb5] ~ [f5,bb5,bb6] ~ [f5,bb5] ~ [f5,bb5,bb6] ~ [f5,bb5] ~ [f5,bb5,bb6] ~ [f5,bb5] ~", // Bb5
  T: "[ab5,db6,db7] ~ [ab5,db6] ~ [ab5,db6,db7] ~ [ab5,db6] ~ [ab5,db6,db7] ~ [ab5,db6] ~ [ab5,db6,db7] ~ [ab5,db6] ~", // Db5
  U: "[bb5,eb6,eb7] ~ [bb5,eb6] ~ [bb5,eb6,eb7] ~ [bb5,eb6] ~ [bb5,eb6,eb7] ~ [bb5,eb6] ~ [bb5,eb6,eb7] ~ [bb5,eb6] ~", // Eb5
  V: "[f5,bb5] ~ [f6,bb6] [eb6,ab6] [f5,bb5] db6 bb5 ~ [f5,db6,f6] ~ bb5 ~ [f5,ab5] ~ [f5,bb5,eb6] ~", // Bb5 Ab5 Bb5 Db Fm Ebsus2
  W: "[f5,ab5] ~ [f5,bb5] ~ [f5,db6] ~ [eb5,bb5] ~ [db5,ab5] ~ [c5,f5] ~ [db5,eb5] ~ [bb4,db5] ~", // Fm Bb5 Db Eb5 Db5 F5 Dbsus2 Bbm
  X: "db5 ~ [db5,ab5,ab6] ~ db5 ~ [db5,ab5,ab6] ~ [db5,ab5,ab6] ~ [eb5,bb5,bb6] ~ eb5 ~ [eb5,bb5] ~", // Db5 Eb5
  Y: "eb5 ~ [eb5,ab5,ab6] ~ eb5 ~ [eb5,ab5,ab6] ~ [eb5,ab5,ab6] ~ [eb5,bb5,bb6] ~ eb5 ~ [eb5,bb5] ~", // Ab5 Eb5
  Z: "bb4 ~ [bb4,ab5,ab6] ~ bb4 ~ [bb4,ab5,ab6] ~ [bb4,ab5,ab6] ~ [bb4,bb5,bb6] ~ bb4 ~ [bb4,bb5] ~", // Bb7 Bb
  AA: "[~@12 bb3@13 ~@7, c5@4 ab4@7 bb4@13 ~@8, ~ ab5@4 eb5@10 ~@17, ~@2 bb4@5 f4@11 ~@14, ~@3 f5@6 c5@12 ~@11]/2",
})).s("gm_piano").gain(0.36)

// chords · piano · "site         http"
const piano_2 = note(`<
  ~@3 A@2 B C A@2 B C A@4 D@2 A@2 B C A@4 D@2 A@2 E F@2 G@2 H@2 I J F@2 G@2 H@2 I J A@2 B C A@4 D@2 A@2 D@2 A@2 K L M
  K@2 L M K@2 F@2 G@2 H@2 I J F@2 G@2 H@2 I J A@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M ~@3
>`.pickRestart({
  A: "[bb1,f2]@2 [bb1,f2]@2 [bb1,f2]@2 [bb1,f2] [db2,ab2]", B: "[bb1,f2]@2 [bb1,f2]@2 [bb1,f2]@2 ~ [db2,ab2]",
  C: "~ [db2,ab2] ~ [eb2,bb2] ~ [eb2,bb2] ~ [eb2,bb2]", // Db5 Eb5
  D: "[~ [db2,ab2]@2 [db2,ab2]@2 [db2,ab2]@2 db1@2 [eb2,bb2]@2 bb2@2 [eb2,bb2]@2 [db2,ab2], db1 ~@7]/2", // Db5 Eb5 Db5
  E: "[bb1,f2]!2 ~@2", F: "bb1 ~@2 bb1 ~@2 bb1 ~", G: "db2 ~@2 db2 ~@2 db2 ~", H: "gb1 db2 eb2 gb1 db2 eb2 gb1 db2",
  I: "bb1 ~@2 bb1 ~@2 bb1 db2", J: "~ db2 ~ eb2 ~ eb2 ~ eb2", K: "bb1@2 bb1@2 bb1@2 bb1 ~",
  L: "db2@2 db2@2 db2@2 db2 ~", M: "eb2@2 eb2@2 eb2@2 eb2 ~",
})).s("gm_piano").gain(0.36)

// chords · piano · "site         http" · soft notes
const piano_soft = note("<~@30 A@2 B@2 ~@2 C ~ A@2 B@2 ~@2 C ~@26 A@2 B@2 ~@2 C ~ A@2 B@2 ~@2 C ~@28>".pickRestart({
  A: "~ c2 db2 ~ c2 db2 ~ c2", B: "~ eb2 f2 ~ eb2 f2 ~ eb2", C: "~ c2 db2 ~ c2 db2 ~@2",
})).s("gm_piano").gain(0.2)

// bass · fretless bass · "://listen.to/torimidi"
const bass = note(`<
  ~@7 A@2 B C A@4 D E A@2 B C A@4 D E F@2 G H@2 I J K L M N H@2 I O K P H Q A@2 B C A@4 D E A@2 D E F@2 R S T A@2 S T A
  G H@2 I J K L M N H@2 I O K P H Q A@2 S T A@2 S T A@2 S T A@2 S T U A S T A@2 S T V ~@2
>`.pickRestart({
  A: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@2 db2@2", B: "bb1@3 ~ bb1@3 ~ bb1@3 ~@3 db2@2", C: "~ db2 ~ eb2 ~ eb2 ~ eb2",
  D: "db2@3 ~ db2@3 ~@3 db2@3 ~ db2@2", E: "~@6 db2@3 ~ eb2@5 ~", F: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@2 ~@2",
  G: "bb1@3 ~ bb1@3 ~ bb1@3 ~ gb1@4", H: "bb1!8", I: "db2!8", J: "db2!4 eb2!2 db2!2", K: "gb1!8", L: "gb1!6 ab1!2",
  M: "bb1!7 db2", N: "db2!5 eb2!3", O: "db2!4 eb2 db2 bb1 ab1", P: "gb1!5 ab1!2 bb1",
  Q: "~@2 db2@2 ~@2 db2@2 ~@2 eb2@5 ~", R: "bb1@3 ~ bb1@3 ~ bb1@2 f1@2 bb1@4", S: "db2@3 ~ db2@3 ~ db2@3 ~@3 db2@2",
  T: "eb2@3 ~ eb2@3 ~@3 eb2@3 ~ eb2@2", U: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@2 db2@2, eb2 ~@15", V: "bb1@7 ~",
})).s("gm_fretless_bass").gain(0.41)

// other · synth strings 1
const synth_strings_1 = note(`<
  ~@10 A B C@2 ~ D E@2 ~@13 F G F G F G ~@2 F G F G F G ~@17 H@2 I@2 ~ H I@2 ~@2 F G F G F G ~@2 F G F G F G ~@3 H J K ~
  H I@2 ~ H I@2 L M N O L M N O L M N P Q ~
>`.pickRestart({
  A: "~@2 eb4!6", B: "f4@2 bb3@5 ~@9", C: "[~@4 f4@2 f4@2 f4@4 f4@2 ab4@5 ~ gb4@2 f4@5 ~@5]/2",
  D: "~@2 f4 g4 ab4@2 g4 ab4 bb4@2 ab4@2 g4@2 f4@2", E: "[eb4@2 f4@2 g4@2 ab4@5 ~ g4@2 f4@5 ~@13]/2",
  F: "~@3 db5@2 c5@2 ~", G: "ab4@5 ~ bb4@5 ~@5", H: "bb4@3 ~ bb4@3 ~ bb4@3 ~ bb4@2 db5@2",
  I: "[bb4@3 ~ bb4@2 c5@2 db5@2 c5@2 bb4@2 ab4@5 ~ bb4@2 c5@10]/2", J: "bb4@3 ~ bb4@2 c5@2 db5@2 c5@2 bb4@2 ab4@2",
  K: "~@2 bb4 c5@5", L: "~@6 ab4!2", M: "[bb4,c5]@2 bb4@2 bb4@4 bb4@3 ~ [ab4,bb4]@2 [ab4,db5]@2",
  N: "[bb4,c5] bb4 ~ c5 db5 c5 [ab4,bb4] ab4, ~@4 bb4@5 ~@7", O: "ab4@4 bb4@2 bb4@4 f4@5 ~, ~@3 c5@5",
  P: "c5@2 bb4@7 ~@3 ab4@2 ab4@2", Q: "c5@2 bb4@9 ~@5",
})).s("gm_synth_strings_1").gain(0.41)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@62 A B C A ~ B C A ~@19 D C E ~ B C A ~ B C A ~ B C A ~ B C F ~ B C G ~@2
>`.pickRestart({
  A: "[bb2,f3,bb3,c4,f4,bb4]@15 ~", B: "[bb2,f3,bb3,db4,f4,bb4]@15 ~", C: "[bb2,eb3,bb3,eb4,f4,bb4]@15 ~",
  D: "[bb3,db4,f4,bb4]@15 ~", E: "[bb3,c4,f4,bb4]@15 ~", F: "[bb3,c4,f4,bb4]@15 ~, [bb2,f3] ~@15", G: "[bb2,f3]@15 ~",
})).s("gm_acoustic_guitar_steel").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~@3
  [x ~ x!3 ~@2 x!6 ~ x ~]!59
  [x!4]!9
  [x ~ x!3 ~@2 x!6 ~ x ~]!18
  [x!4]!2
  [x ~ x!3 ~@2 x!6 ~ x ~]!20
  ~@3
>`).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@3 A ~@7 A ~@7 A ~ A ~@28 A ~@60 A ~@2>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 A@3 B A@3 B A@9 B A@8 B A@19 B A@39 ~ C A@20 ~@3>".pickRestart({
  A: "x!16", B: "x!9 ~@7", C: "~@10 x!6",
})).gain(0.15)

stack(
  clavinet, overdriven_guitar, epiano2, epiano2_soft, piano, piano_2, piano_soft, bass, synth_strings_1,
  acoustic_guitar_steel, kick, crash, tambourine
)

More by Tori Amos