Strudelify
KeyE♭ minorTempo96 bpm
0:00/0:00
// Aria — Articolo 31
// 96 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · epiano1 · "tk1"
const epiano1 = note(`<
  A B C@2 D E F G@2 E C@2 H@2 I@2 H@2 J@2 H@2 I@2 H@2 J@2 K E C@2 D E F L@3 I@2 H@2 J@2 H@2 I@2 H@2 J@2 D E F G@2 E C@2
  ~@7 M H@2 I@2 H@2 J@2 D E F G@2 E C@2 D E F G@2 E N@2
>`.pickRestart({
  A: "[b2,eb3,b3,eb4,gb4,bb4]@9 [b2,d3,b3,d4,f4,ab4]@14 ~", // Bmaj7 Bdim
  B: "[ab2,ab3,db4,f4]@3 ~@3 [bb4,f5]@2, [f3,bb3]@7 ~@2 [gb2,eb3,gb3,bb3,db4,eb4]@15, ~@17 gb4@6 ~", // Db Bb5 Ebm7
  C: "[[b2,b3,gb4,db5]@9 [ab4,bb4]@6 ab4@6 bb3@3 db5@2 b4 bb4 ~ ab4 gb4@2 ~ eb4 ~@2 ab4@5 ~ gb4@3 ~@3, bb4@7 ~@14 [ab2,f3]@12 [gb2,eb3]@14 ~, [eb3,eb4] ~@8 [b2,d3,b3,d4,f4]@12 db3@26 ~, ~@21 bb4@6 ~@9 gb4 ~@11]/2", // Bsus2 Absus2 Db Ebm Eb Bdim
  D: "[b2,eb3,b3,eb4,gb4,bb4]@8 ~ [b2,d3,b3,d4,f4,ab4]@14 ~", // Bmaj7 Bdim
  E: "[ab2,ab3,db4,f4]@3 [gb2,eb3,gb3,bb3,db4,eb4]@5, [f3,bb3]@7 ~@17", // Db Ebm7 Bb5
  F: "[b2,b3,gb4,db5]@3 [b2,d3,b3,d4,f4,ab4]@5, bb4@7 ~@17, [eb3,eb4] ~@23", // Bsus2 Bdim Eb
  G: "[f4@9 [gb2,eb3,eb4]@15 [b2,eb3,b3,eb4,gb4,bb4]@9 [d3,d4,f4,ab4]@14 ~, [db3,bb3]@26 ~@7 [b2,b3] ~@14, [ab2,f3] ~@3]/2", // Ebm Bmaj7 Ddim Gb B Db
  H: "[[eb3,b3,eb4,gb4,ab4]@21 [eb3,b3,eb4,ab4] ~ db4@4 db4@9 gb4@6 db5@6, ~@23 [f3,ab3,bb3,f4]@25]/2", // Abm7 Abm Bb7
  I: "[[eb3,b3,eb4,gb4,bb4]@21 [eb3,b3,eb4,ab4] ~ db4@4 db4@9 ~@3 f5@6 db5@3, ~@23 [f3,ab3,bb3,f4]@25, ~@13 [gb4,bb4]@3]/2", // Bmaj7 Abm Bb7 Gb
  J: "[[eb3,b3,eb4,gb4,bb4]@21 [eb3,b3,eb4,ab4] ~@2 db5@2 b4 bb4 ~ ab4 gb4@2 ~ eb4 ~@2 ab4@5 ~ gb4@3 ~@3, ~@23 [f3,ab3,bb3,db4,f4]@25, ~@36 gb4 ~@11]/2", // Bmaj7 Abm Bbm7
  K: "[b2,eb3,b3,eb4,gb4,bb4]@9 [d3,d4,f4,ab4]@14 ~, ~@9 [b2,b3] ~@14", // Bmaj7 Ddim B
  L: "[f4@9 [gb2,eb3,eb4]@15 [eb3,b3,eb4,gb4,ab4]@21 [eb3,b3,eb4,ab4] ~ db4@4 db4@9 gb4@6 db5@6, [db3,bb3]@26 ~@21 [f3,ab3,bb3,f4]@25, [ab2,f3] ~@5]/3", // Ebm Abm7 Abm Gb Bb7 Db
  M: "db5@2 b4 bb4 ~ ab4 gb4@2 ~ eb4 ~@2 ab4@5 ~ gb4@3 ~@3, ~@12 gb4 ~@11",
  N: "[[b2,b3,gb4,db5]@9 [ab4,bb4]@6 ab4@6 bb3@3 db5@2 b4 bb4 ~ ab4 gb4@2 ~ eb4 ~@2 ab4@5 ~ gb4@2 ~@4, bb4@7 ~@14 [ab2,f3]@12 [gb2,eb3]@12 ~@3, [eb3,eb4] ~@8 [b2,d3,b3,d4,f4]@12 db3@26 ~, ~@21 bb4@6 ~@9 gb4 ~@11]/2", // Bsus2 Absus2 Db Ebm Eb Bdim
})).s("gm_epiano1").gain(0.4)

// bass · electric bass finger · "tk2"
const bass = note(`<
  ~@4 A B A C A B A B D E F G D E F G D E F G D E F G A B A B A B A B H I H I H I H I D E F G D E F G A B A B A B A B H
  I H I H I H I D E F G D E F G A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "ab1 ab1@2 ~@5 ab1 db2 db2@2 ~@12", B: "~@8 bb1 eb2 eb2@2 ~@12", C: "bb1 bb1@2 ~@5 bb1 eb2 eb2@2 ~@12",
  D: "ab1 ~@2 ab1@2 ~@4 ab1 ab1@2 ~@3 ab1@3 ~ eb2@4 ~", E: "bb1@2 ~ bb1@3 ~@4 bb1 ~ bb1@2 f1 bb1@2 ~@3 a1@4",
  F: "ab1 ~@2 ab1 ~@5 ab1 ab1@2 ~@3 ab1@3 ~ eb2@4 ~", G: "bb1@2 ~ bb1@3 ~@4 bb1 ~ bb1@3 bb2@2 ~ a1@3 a2@2 ~",
  H: "ab1@4 ~@2 eb1@3 ~@11 eb1 ab1@2 eb1", I: "bb1 ~@7",
})).s("gm_electric_bass_finger").gain(0.59)

// other · electric guitar jazz · "tk3"
const electric_guitar_jazz = note(`<
  ~@12 A ~ B ~ C D E@2 A ~ B ~ C D E@2 ~@8 A ~ B ~ C D E@2 A ~ B ~ C D E@2 ~@8 A ~ B ~ C D E@2 A ~ B ~ C D E@2 ~@16
>`.pickRestart({
  A: "bb4 ~ b4 ab4 ~ bb4 ~@2 b4 ~@2 ab4@5 ~@8", B: "bb4 ~ bb4 ab4 ~ bb4 ~@2 a4 ~@2 bb4@4 ~@9",
  C: "bb4 ~ bb4 ab4 ~ bb4 ~@2 a4 ~@2 bb4@2 ~ ab4@3 ~@7", D: "bb4 ~ bb4 ab4 ~ bb4 ~@2 b4 ~@2 ab4@8 ~@5",
  E: "[bb4 ~ bb4 ab4 ~ bb4 ~@2 a4 ~@2 bb4@2 ~ ab4 ~@2 db5@3 ~ db5 ~ bb4@18 ~@7]/2",
})).s("gm_electric_guitar_jazz").gain(0.45).pan(0.2)

// other · lead 8 bass lead · "tk6"
const lead_8_bass_lead = note(`<
  ~@4 A B C ~ A B C ~ D E F ~ G ~ G ~ D E H I G ~@3 A B A B A B A J D K H L M ~ M ~ D K N O@5 P Q P Q P Q P R S T N O@5
  S T N O@5 P Q P Q P Q P R P Q P Q P Q P U
>`.pickRestart({
  A: "eb7 ~ gb7 eb7@2 ~ eb7 ~ gb7 eb7@2 ~ eb7@11 eb7", B: "eb7 ~@4 eb7!2 ~@2 eb7@2 ~ eb7@11 eb7",
  C: "eb7 ~ gb7 eb7@2 ~ eb7 ~ gb7 eb7@2 ~ eb7@11 ~", D: "eb7 ~ gb7 eb7@2 eb7 ~@4 ab6@11 ~@2 eb7",
  E: "eb7 ~@2 eb7@2 eb7 ~@17 eb7", F: "eb7 ~@2 eb7@2 eb7 ~@4 ab6@11 ~@3", G: "~@10 ab6@11 ~@2 eb7",
  H: "eb7 ~@2 eb7@2 eb7 ~@4 ab6@11 ~@2 eb7", I: "eb7 ~@2 eb7@2 eb7 ~@18", J: "eb7 ~@4 eb7!2 ~@2 eb7@2 ~ eb7@11 ~",
  K: "eb7 ~@2 eb7@2 eb7 ~@3 eb7 ~ eb7 ~@11 eb7", L: "eb7 ~@2 eb7@2 eb7 ~@3 eb7 ~ eb7 ~@12", M: "~@10 ab6@11 ~@3",
  N: "eb7@3 eb7@2 ~@5 ab6@11 ~@2 eb7, ~@5 eb7@18 ~",
  O: "[eb7@3 eb7@2 eb7@4 eb7@2 ~@23 ab6@11 ~@37 ab6@11 ~@27, ~@11 eb7@109]/5",
  P: "eb7@2 gb7 eb7@3 eb7@2 gb7 eb7@3 eb7@11 eb7", Q: "eb7@5 eb7 eb7@3 eb7@3 eb7@11 eb7",
  R: "eb7@5 eb7 eb7@3 eb7@3 eb7@12", S: "eb7@2 gb7 eb7@2 ~@5 ab6@11 ~@2 eb7, ~@5 eb7@18 ~",
  T: "eb7@3 eb7@2 eb7@4 eb7@2 eb7@12 eb7", U: "eb7@5 eb7 eb7@3 eb7@3 eb7@6 ~@6",
})).s("gm_lead_8_bass_lead").gain(0.07).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C D C E C D C E C D C E C D C E C D C E C D C E C D C E C D C E ~@2 C E C D C F C D G E C D C E C D C E C D C
  E H D C E C D C E C D C E C D C E C D C E C D C E C D C E C D C E
>`.pickRestart({
  A: "x ~@10 x!2 ~@11", B: "x ~@2 x ~@4", C: "x ~@2 x ~@7 x!2 ~@10 x", D: "x ~@2 x ~@7 x!2 ~ x!2 ~@7 x",
  E: "x ~@2 x ~@7 x ~@2 x!2 ~@8", F: "x ~@2 x ~@7 x ~@12", G: "~@3 x ~@7 x!2 ~@10 x", H: "~@23 x",
})).gain(0.66)

// drums · rim
const rim = s("rim").struct("<~@3 [~@7 x ~@4] ~@88>").gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C ~@2 B C B@3 C B@3 C B@3 C B@3 C B@3 C A B@2 C B@3 C B@3 C B@3 C
  B@3 C B@3 C B@3 C B@3 C
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x!3",
})).gain(0.66)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@3 A B@2 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B ~@2 C B@3 C D B@2 E B@3 C F B@2 C B@3 C B ~ B C B@3 C B@3 C
  B@3 C B@3 C B@3 C B@3 C B@3 C B
>`.pickRestart({
  A: "~@5 x ~ x", B: "x!8", C: "x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", D: "x!5 ~@3",
  E: "~@3 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", F: "x!7 ~",
})).gain(0.66)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.66)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<[~@3 x]!3 ~@33 [~@3 x]!2 ~@54>").gain(4.62)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@4 B@32 A@2 B@5 C B@2 D B@4 E B@8 ~ B@31>".pickRestart({
  A: "~@3 x ~ x ~@3 x ~@14", B: "x!8", C: "x!5 ~@3", D: "~ x!7", E: "x!7 ~",
})).gain(2.99)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  A@4 B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C A@2 B C B@3 D B@3 C B@3 E B@3 C B@3 C ~ B@2 C B@3 C B@3 C B@3 C
  B@3 C B@3 C B@3 C B@3 C
>`.pickRestart({
  A: "~@11 x ~@12", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  C: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", D: "~@2 x ~@2 x ~@2 x ~@2 x ~@12",
  E: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@6",
})).gain(1.66)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@6 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.66)

// drums · guiro
const guiro = s("guiro:4").struct("<[~@2 x]!3 ~@33 [~@2 x]!2 ~@54>").gain(13.86)

stack(
  epiano1, bass, electric_guitar_jazz, lead_8_bass_lead, kick, rim, snare, pedal_hat, open_hat, vibraslap, cabasa,
  cabasa_soft, shaker, guiro
)

More by Articolo 31