Strudelify

Here in My Head

Tori Amos

KeyG♭ majorTempo120 bpm
0:00/0:00
// Here in My Head — Amos, Tori
// 120 bpm, 6/8, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 6/8 at bar 1) are rendered on a constant 6/8 grid of one bar per cycle
// note: Full arrangement: all 173 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// 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 · epiano2 · "Unnamed-001"
const epiano2 = note(`<
  ~@4 A B C D E F G@7 E H I J K L M N O P Q F E R S F E T I J U V W X Y Z AA AB AC AD AE AB AF Z AA AG AH AI AJ F E AK
  AL AM E H I J U AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC F BD F E R S F E T I J U V W X Y Z AA AB AC AD AE AB
  AF Z AA AG AH AI AJ F E AK AL AM E H I J U AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BE BF BG BH BI BJ@4 BK BL BM BN
  BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC AM E CD CE CF CG CH CI CJ
>`.pickRestart({
  A: "[eb4,eb5]@15 ~", B: "[f4,f5]@15 ~", C: "ab4@7 ~ ab4@7 ~", D: "ab4@4 ~ bb4@3 gb4@7 ~", E: "f4@15 ~", F: "eb4@15 ~",
  G: "[[ab4,db5]@7 ~ ab4@4 ~@7 gb4@4 ~ f4@7 ~ eb5@15 ~ f5@15 ~ gb5@9 ~@2 gb5@4 ~ f5@3 eb5@2 db5@4 ~@2 eb5@4 ~@17, ~@13 bb4@97 ~@2]/7", // Db5
  H: "gb4@3 ab4@7 ~ bb4@4 ~, db5@15 ~", I: "db5@7 ~ bb4@7 ~", J: "[ab4,b4]@3 [bb4,db5]@2 [ab4,b4]@3 bb4@3 ab4@2 eb4@3",
  K: "ab4@3 gb4@2 ab4@3 bb4@4 ~ ab4@3", L: "~@3 eb4@2 bb4@3 eb4@3 bb4@4 ~", M: "gb4@3 f4@2 eb4@9 ~@2",
  N: "~@5 b3@3 db4@3 b3@2 gb4@3, eb4@15 ~", O: "gb3@3 b3@2 db4@3 b3@4 ~ b3@3", P: "~@3 gb3@2 bb3@3 gb4@7 ~, b3@7 ~@9",
  Q: "f4@3 gb4@2 f4@3 db5@3 f4@2 eb4@3", R: "gb4@9 ~@2 gb4@4 ~, db5@15 ~", S: "f4@4 ~ eb4@4 ~@2 db4@4 ~, db5@15 ~",
  T: "gb4@4 ~ ab4@3 bb4@7 ~, db5@15 ~", U: "~@3 eb4@2 ab4@3 bb4@4 ~ ab4@3", V: "~@3 eb4@2 ab4@3 bb4@3 ab4@2 eb4@3",
  W: "gb4@7 ~ f4@3 gb4@4 ~", X: "~@3 db4@2 b3@3 gb4@7 ~, gb4@7 ~@9", Y: "[bb3,gb4]@3 db4@4 ~ bb3@7 ~",
  Z: "[f3,db4]@4 ~ [ab3,eb4]@4 ~@2 [db4,f4]@4 ~", AA: "[c4,eb4]@4 ~ [db4,f4]@4 ~@2 [eb4,gb4]@4 ~",
  AB: "b3@4 ~ db4@3 b3@7 ~, gb4@15 ~", AC: "[bb3,gb4]@4 ~ ab4@3 bb4@7 ~", AD: "c4@4 ~ c4@3 db4@3 ab4@2 c4@3, eb4@15 ~",
  AE: "~@5 c4@3 db4@3 f4@4 ~, f4@11 ~@5", AF: "[bb3,gb4]@4 ~ [ab3,db4]@4 ~@2 [gb3,bb3]@4 ~",
  AG: "~@5 b3@3 db4@3 ~@2 db4@3, gb4@11 gb4@4 ~", AH: "ab4@3 db4@2 gb4@3 ab4@3 bb4@4 ~",
  AI: "eb4@4 ~ c4@3 db4@3 eb4@2 c4@3", AJ: "ab3@3 f4@2 ab3@3 gb4@3 f4@2 eb4@3", AK: "[gb4,db5]@9 ~@2 gb4@4 ~",
  AL: "[f4,db5]@4 ~ eb4@4 ~@2 [db4,ab4]@4 ~", AM: "[eb4,bb4]@15 ~", AN: "~@3 eb4@2 gb4@3 eb4@3 ab4@4 ~",
  AO: "gb4@9 ~@2 f4@4 ~", AP: "gb4@4 ~ b3@3 db4@4 ~ b3@3", AQ: "b3@3 gb4@2 ab4@3 bb4@7 ~",
  AR: "[gb4,db5]@3 ab4@2 eb4@3 gb4@3 ab4@2 db5@3", AS: "~@3 eb4@2 gb4@3 [db4,ab4]@7 ~",
  AT: "[gb4,db5]@3 ab4@2 bb4@3 db4@3 bb4@2 db4@3", AU: "b4@3 gb4@2 db4@3 gb4@3 bb4@4 ~",
  AV: "[bb4,db5]@3 [ab4,c5]@7 ~ [ab4,c5]@4 ~", AW: "eb4@3 c4@2 db4@3 [c4,eb4]@7 ~, ab4@15 ~",
  AX: "gb4@3 b3@2 db4@3 gb4@3 b3@2 db4@3", AY: "gb4@3 b3@2 ab4@3 b3@3 bb4@4 ~", AZ: "gb4@3 eb4@2 ab4@3 eb4@3 bb4@4 ~",
  BA: "[gb4,db5]@3 eb4@2 ab4@3 bb4@7 ~", BB: "gb4@4 ~ db4@3 eb4@3 gb4@2 db4@3", BC: "[ab4,b4]@15 ~",
  BD: "[c4,eb4]@15 ~", BE: "gb4@4 ~ db4@3 eb4@3 gb4@2 eb4@3", BF: "gb4@4 ~ ab4@3 bb4@3 [db4,bb4]@4 ~",
  BG: "[gb4,bb4]@4 ~ f4@4 ~@2 [eb4,bb4]@4 ~", BH: "f4@3 gb4@2 ab4@3 f4@3 [gb4,bb4]@2 ab4@3, bb4@9 ~@7",
  BI: "db5@3 f4@2 gb4@3 [ab4,db5]@3 f4@2 gb4@3", BJ: "[ab4,db5]@3 f4@2 gb4@3 [ab4,db5]@3 f4@2 gb4@3",
  BK: "[ab4,db5]@3 db4@2 gb4@3 ab4@7 ~", BL: "ab4@3 db4@2 gb4@3 ab4@3 db4@2 ab4@3",
  BM: "ab4@3 c5@2 gb4@3 ab4@3 db4@2 eb4@3", BN: "bb4@3 ab4@2 f4@3 gb4@3 ab4@2 db5@3",
  BO: "db5@3 db4@2 gb4@3 ab4@3 [db4,db5]@4 ~", BP: "[c4,c5]@3 db4@2 c4@3 db4@3 bb4@2 c4@3", BQ: "gb4@4 ~ f4@3 eb4@7 ~",
  BR: "ab5@4 ~ f5@3 gb5@3 ab5@2 gb5@3", BS: "gb5@3 db6@2 db5@3 gb5@4 ~ [ab4,ab5]@3, gb4@9 ~@7",
  BT: "[ab4,ab5]@3 ab4@2 ab5@3 [eb5,bb5]@4 ~ [gb5,db6]@3", BU: "[gb5,db6]@3 [f5,db6]@4 ~ eb5@7 ~",
  BV: "bb4@4 ~ f4@3 gb4@3 ab4@2 f4@3", BW: "[f4,db5]@4 ~ f4@3 gb4@3 ab4@2 f4@3",
  BX: "[gb4,db5]@3 db4@2 gb4@3 [ab4,db5]@4 ~ [gb4,db5]@3", BY: "[gb4,db5]@3 [f4,db5]@4 ~ eb4@7 ~",
  BZ: "ab4@4 ~ f4@3 gb4@3 ab4@2 gb4@3", CA: "~@3 db4@2 gb4@3 ab4@4 ~ ab4@3, db5@15 ~", CB: "ab4@3 db4@2 gb4@3 db4@7 ~",
  CC: "f4@4 ~ eb4@3 db4@3 eb4@4 ~", CD: "gb4@15 ~", CE: "eb5@4 ~ f5@4 ~@2 ab4@4 ~", CF: "[eb5,eb6]@15 ~",
  CG: "[f5,f6]@15 ~", CH: "ab5@9 ~@2 eb5@4 ~", CI: "eb5@4 ~ bb5@4 ~@2 gb5@4 ~", CJ: "f5@15 ~",
})).s("gm_epiano2").gain(0.72)

// chords · epiano2 · "Unnamed-002"
const epiano2_2 = note(`<
  A@2 B C A@2 B D A@2 E F A@2 G H A@2 G I J K L M N O P Q A@2 R L A@2 S T U V L W X Y Z AA AB AC@2 AD AE AF AG AH AB AC
  AI@2 A@2 AJ L A@2 AK AL AM V@2 AD AN AO AM AP AQ AR AS AT N AU L AV AN AW AX AY A@2 R L A@2 S T U V L W X Y Z AA AB
  AC@2 AD AE AF AG AH AB AC AI@2 A@2 AJ L A@2 AK AL AM V@2 AD AN AO AM AP AQ AR AS AT N AU L AV AN AU AM AZ BA BB BC BD
  BA BB BE L BF BG AM BH BI@2 BJ BK BL BM BN AX BF BO BP AA A BQ BR BS A BT BU BV BW
>`.pickRestart({
  A: "~@3 bb3@2 b3@3 bb3@3 b3@2 bb3@3, eb3@15 ~", B: "~@3 bb3@2 b3@3 bb3@3 ~@2 b3@3, gb3@9 ~@2 gb3@4 ~",
  C: "ab3@3 bb3@2 gb3@3 bb3@3 f3@2 bb3@3", D: "ab3@3 bb3@2 b3@3 ab3@3 bb3@2 b3@3", E: "gb3@3 bb3@2 db4@4 ~@2 gb3@4 ~",
  F: "ab3@4 ~ bb3@4 ~@2 ab3@4 ~", G: "~@3 bb3@2 b3@3 bb3@3 b3@2 bb3@3, gb3@9 ~@7", H: "ab3@9 ~@2 ab3@2 bb3@3",
  I: "gb3@3 db4@2 gb4@4 ~@2 bb3@2 ab3@3", J: "ab2@4 ~ eb3@4 ~@2 ab3@4 ~", K: "b3@9 ~@2 bb3@4 ~", L: "ab3@15 ~",
  M: "ab2@9 ~@2 ab2@2 bb2@3", N: "b2@15 ~", O: "~@11 db3@4 ~", P: "gb2@9 ~@2 db3@4 ~", Q: "ab2@7 ~ ab3@7 ~",
  R: "~@8 bb3@3 db4@2 db4@3, gb3@15 ~", S: "gb3@4 ~ bb3@4 ~@2 db4@4 ~", T: "gb4@15 ~", U: "ab2@4 ~ eb3@9 ~@2",
  V: "ab3@9 ~@2 eb3@4 ~", W: "ab2@9 ~@2 bb2@4 ~", X: "[b1,b2]@9 ~@2 eb2@2 gb2@3", Y: "gb1@15 ~", Z: "db2@15 ~",
  AA: "ab1@15 ~", AB: "[b1,gb2]@9 ~@2 gb2@2 b1@3", AC: "[gb1,gb2]@15 ~", AD: "ab3@9 ~@2 ab2@2 bb2@3",
  AE: "b2@9 ~@2 gb3@4 ~", AF: "gb2@15 ~", AG: "[db2,ab2]@15 ~", AH: "ab2@4 ~ eb2@4 ~@2 ab1@4 ~", AI: "[ab2@5 ~@3]/2",
  AJ: "gb3@4 ~ bb3@3 db4@7 ~", AK: "gb3@3 bb3@2 db4@9 ~@2", AL: "gb3@3 bb3@2 db4@4 ~@2 gb3@2 bb3@3",
  AM: "[ab2,eb3]@15 ~", AN: "[b1,gb2]@15 ~", AO: "b2@9 ~@2 gb2@2 ab2@3", AP: "ab3@9 ~@2 ab3@4 ~", AQ: "[b2,gb3]@15 ~",
  AR: "b3@15 ~", AS: "ab3@9 ~@2 ab2@4 ~", AT: "ab1@9 ~@2 ab2@2 bb2@3", AU: "gb3@15 ~",
  AV: "[ab2,eb3]@9 ~@2 ab2@2 bb2@3", AW: "b3@3 db4@2 eb4@3 db4@3 b3@4 ~", AX: "ab2@9 ~@2 eb3@4 ~", AY: "[ab2,ab3]@15 ~",
  AZ: "ab3@7 ~ [ab2,eb3]@3 [ab2,eb3]@4 ~", BA: "[eb2,bb2,eb3]@15 ~", BB: "[gb2,db3,gb3]@15 ~",
  BC: "[ab2,eb3,ab3]@7 ~ [ab2,eb3,ab3]@7 ~", BD: "[ab2,eb3,ab3]@4 ~ [ab2,eb3,ab3]@4 ~@2 [ab2,eb3,ab3]@4 ~",
  BE: "[ab2,eb3,ab3]@15 ~", BF: "[eb2,bb2]@15 ~", BG: "[gb2,db3]@9 ~@2 [gb2,db3]@4 ~", BH: "[ab1,eb2,ab2]@15 ~",
  BI: "eb2@15 ~", BJ: "[ab3,eb4]@9 ~@2 ab4@4 ~", BK: "gb4@4 ~ f4@4 ~@2 db4@4 ~", BL: "eb4@15 ~",
  BM: "eb4@9 ~@2 gb3@4 ~", BN: "[gb2,db3]@15 ~", BO: "eb3@9 ~@2 f2@4 ~", BP: "[gb2,db3]@9 ~@2 gb1@4 ~",
  BQ: "bb3@3 b3@2 bb3@3 b3@3 ~@2 b3@3, eb3@9 ~@2 [f3,bb3]@4 ~", BR: "~@3 bb3@2 b3@3 bb3@3 b3@4 ~, gb3@15 ~",
  BS: "ab3@7 ~ bb3@3 ab3@2 bb3@3", BT: "~@3 bb3@2 b3@3 bb3@3 ~@2 bb3@3, eb3@9 ~@2 f3@4 ~",
  BU: "gb3@4 ~ bb3@3 db4@4 ~ gb3@3", BV: "ab3@3 bb3@4 ~ b3@4 ~ bb3@3", BW: "eb3@15 ~",
})).s("gm_epiano2").gain(0.72)

stack(epiano2, epiano2_2)

More by Tori Amos