Strudelify

pericon nacional

Gerardo Grasso

KeyA♭ majorTempo67 bpm
0:00/0:00
// pericon nacional — Gerardo Grasso
// 67 bpm, 3/8, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5702347; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 263 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/1.5)

// 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 · piano
const piano = note("<~@81 A B C@2 B@2 C@2 ~@142 A B C@2 B@2 C@2 ~@24>".pickRestart({
  A: "ab5@5 eb6@3 eb6@3 eb6@2 eb6@3", B: "c6@2 ~ eb6@2 eb6@3 eb6@3 eb6@2 eb6@3",
  C: "db6@2 ~ eb6@2 eb6@3 eb6@3 eb6@2 eb6@3",
})).s("gm_piano").gain(0.25)

// chords · piano
const piano_2 = note(`<
  A B C D E F G H I@2 J K L M N O P Q R S T Q U V W X Y Z Y AA AB@2 AC@2 AD@2 AE@2 AF@2 AG@2 AH@2 AI@2 AJ AK AL AM AN AO
  AP AQ AR M N O AS@2 AT@2 AU@2 AV@2 AW AX AY AZ BA BB BC BD BE AX AY AZ BA BB BC BF Q R S T Q R S BG BH BI BJ BK BL BM
  BN B BO D BP BQ BR BS BT BU@2 BV@2 BW@2 BX@2 BY@2 BZ@2 CA@2 CB@2 CC@2 CD@2 CE@2 BN B BO D BP BQ BR BS BT BU@2 BV@2
  BW@2 BX@2 BY@2 BZ@2 CA@2 CB@2 CC@2 CD@2 CE@2 A B C D E F G H I@2 J K L M N O P Q R S T Q U V W X Y Z Y AA AB@2 AC@2
  AD@2 AE@2 AF@2 AG@2 AH@2 AI@2 AJ AK AL AM AN AO AP AQ AR M N O AS@2 AT@2 AU@2 AV@2 AW AX AY AZ BA BB BC BF Q R S T Q R
  S BG BH BI BJ BK BL BM CF CG@3 CH CI@3 CJ CK CL CM CN CO CP CQ CR
>`.pickRestart({
  A: "[ab3,ab4]@3 ~@2 [c3,c4]@3 ~@3 [eb3,eb4]@3 ~@2", B: "[ab3,ab4]@5 [c3,c4]@4 [eb3,eb4] ~ [f3,f4]@4 [eb3,eb4]",
  C: "[g3,g4]@3 ~@2 [db3,db4]@3 ~@3 [eb3,eb4]@3 ~@2", D: "[g3,g4]@5 [db3,db4]@4 [eb3,eb4] ~ [f3,f4]@4 [eb3,eb4]",
  E: "~@11 [eb3,eb4]@5, [ab2,ab3,ab4], ~@5 [c3,c4]@11", // Eb Ab C
  F: "~@11 [eb3,f4]@4 eb4, [ab2,ab3,ab4], ~@5 [c3,c4]@11, ~@9 eb4@5 ~@2", // Ebsus2 Ab C
  G: "~@11 [eb3,eb4]@5, [bb2,g3,g4], ~@5 [db3,db4]@11", // Eb Db
  H: "~@11 [eb3,f4]@4 eb4, [bb2,g3,g4], ~@5 [db3,db4]@11, ~@9 eb4@5 ~@2", // Ebsus2 Eb Db
  I: "[[ab2,ab4]@5 c5@2 eb5@2 ab5@2 eb3@5 ~@3 g5@2 bb5@3 f5@3 ab5@2 eb5@3, ~@5 c3@5 ~ c6@8 ~@13, ~@16 ab2@5 c3@5 ~ eb3@5]/2", // Ab
  J: "[eb2,g5]@5 [g2,f5]@5 ~ [bb2,eb5]@5", K: "[g2,db5]@5 [bb2,c5]@5 ~ [eb3,bb4]@5",
  L: "[ab2,ab4]@5 ab4@3 g4@3 ab4@2 bb4@3, ~@5 c3@5 ~ eb3@5", M: "c5@3 db5@2 eb5@3 f5@3 g5@2 ab5@3, ab2@5 c3@5 ~ eb3@5",
  N: "bb5@3 f5@2 ab5@3 eb5@3 [bb2,g5]@5, eb2@5 g2@5 ~@6", O: "~@3 c5@2 eb5@3 bb4@3 db5@2 g4@3, eb2@5 g2@5 ~ bb2@5",
  P: "~@11 [eb3,c4]@5, [ab2,ab3,ab4], ~@5 c3@11, ~@5 eb4@4 eb4@7, ~@7 f4@9", // Cm Ab
  Q: "~@7 eb4, [ab2,ab3], eb4@4 eb4@7 eb3@5, ~@2 f4@9 eb4 f4@4, ~@5 [c3,c4]@11", // Ab C
  R: "~@11 [eb3,db4]@5, [bb2,g3], db4@9 eb4@7, ~@5 db3@11, ~@5 eb4@2 f4@9", // Eb7 Eb
  S: "~@7 eb4, [bb2,g3], eb4@4 eb4@7 eb3@5, ~@2 f4@9 eb4 f4@4, ~@5 [db3,db4]@11", // Eb Db
  T: "~@11 [eb3,c4]@5, [ab2,ab3], c4@9 eb4@7, ~@5 c3@11, ~@5 eb4@2 f4@9", // Cm Ab
  U: "~@13 f5@3, [bb2,g3,db4], ~@5 [db3,g5]@11, ~@11 eb3@5", // Gdim Dbdim
  V: "~@4 eb5 ~@4 db5 ~ [eb3,db5]@4 bb4, [bb2,g3,f5], ~@5 [db3,eb5]@11", W: "[ab2,ab4]@5 c3@5 ~ eb3@5",
  X: "ab2@5 c3@5 ~ eb3@5", Y: "eb2@5 g2@5 ~ bb2@5", Z: "g2@3 ab2@2 bb2@3 ab2@3 g2@2 f2@3", AA: "g2@5 bb2@5 ~ eb3@5",
  AB: "[ab2@5 c3@5 ~ eb3@5 ab2@4 c6 [c3,c6]@4 c6 ~ [eb3,c6]@4 c6, ~@5 c6@15 ~@12]/2", // C Cm
  AC: "[[eb2,c6]@4 bb5 [g2,bb5]@4 a5 ~ bb2@5 eb2@4 bb5 [g2,bb5]@4 bb5 ~ [bb2,bb5]@4 bb5, ~@11 bb5@9 ~@12]/2", // Cm Gm Bb
  AD: "[[ab2,bb5]@4 ab5 [c3,ab5]@4 g5 ~ eb3@5 ab2@4 ab5 [c3,ab5]@4 ab5 ~ [eb3,ab5]@4 ab5, ~@11 ab5@9 ~@12]/2", // Absus2 Fm Ab5
  AE: "[[eb2,ab5]@4 g5 [g2,g5]@4 f5 ~ bb2@5 eb2@4 f5 [g2,f5]@4 g5 ~ [bb2,g5]@4 f5, ~@11 g5@9 ~@12]/2", // Ab5 G G7 Eb
  AF: "[[ab2,f5]@4 eb5 [c3,eb5]@4 d5 ~ eb3@5 ab2@4 eb5 [c3,eb5]@4 f5 ~ [eb3,f5]@4 c5, ~@11 eb5@9 ~@12]/2", // Db Cm Ebsus2
  AG: "[[eb2,eb5]@4 db5 [g2,db5]@4 c5 ~ bb2@5 eb2@4 db5 [g2,db5]@4 eb5 ~ [bb2,eb5]@4 c5, ~@11 db5@9 ~@12]/2", // Eb Gdim Eb5
  AH: "[[ab2,db5]@4 c5 [c3,c5]@4 b4 ~ eb3@5 ab2@4 c5 [c3,c5]@4 db5 ~ [eb3,db5]@4 ab4, ~@11 c5@9 ~@12]/2", // Db5 C Eb7
  AI: "[[eb2,c5]@4 bb4 [g2,bb4]@4 a4 ~ bb2@5 eb2@4 bb4 [g2,bb4]@4 c5 ~ [bb2,c5]@4 bb4, ~@11 bb4@9 ~@12]/2", // Cm Gm Bbsus2
  AJ: "ab2@4 c5 c3@4 g4 ~ eb3@4 bb4, ab4@3 ~@2 c5@3 ~@3 g4@3 ~@2",
  AK: "ab2@4 ab4 c3@4 f4 ~ eb3@4 eb4, bb4@3 ~@2 ab4@3 ~@3 f4@3 ~@2",
  AL: "eb2@4 g4 g2@4 bb4 ~ bb2@4 db5, eb4@3 ~@2 g4@3 ~@3 bb4@3 ~@2",
  AM: "eb2@4 c5 g2@4 bb4 ~ bb2@4 ab4, db5@3 ~@2 c5@3 ~@3 bb4@3 ~@2",
  AN: "[ab2,ab4]@5 [eb3,ab3,c4,c5,c6]@5 ~ [eb3,ab3,c4,g4,g5]@5", // Ab Abmaj7
  AO: "[ab2,bb4,bb5]@5 [eb3,ab3,c4,ab4,ab5]@5 ~ [eb3,ab3,c4,f4,f5]@5", // Absus2 Ab Fm7
  AP: "[eb2,eb3,eb4,eb5]@5 [eb3,g3,db4,g4,g5]@5 ~ [eb3,g3,db4,bb4,bb5]@5", // Eb Eb7
  AQ: "[eb2,eb3,db5,db6]@5 [eb3,g3,db4,c5,c6]@5 ~ [eb3,g3,db4,bb4,bb5]@5", // Eb7 Cm Eb7
  AR: "[ab2,ab4,ab5]@5 ab4@3 g4@3 ab4@2 bb4@3, ~@5 c3@5 ~ eb3@5", AS: "[ab3,ab4]@4 eb4 [eb3,b3]@4 eb4 ~ [b2,e4]@4 eb4",
  AT: "[g3,g4]@4 eb4 [eb3,db4]@4 eb4 ~ [db3,e4]@4 eb4", AU: "ab4@3 eb4@2 b3@3 eb4@3 e4@2 eb4@3, ab3@5 eb3@5 ~ b2@5",
  AV: "g4@3 eb4@2 db4@3 eb4@3 e4@2 eb4@3, g3@5 eb3@5 ~ db3@5",
  AW: "ab4@3 ab5 [ab5,bb5] g5@3 ab5@3 bb5@2 ab5@3, ab2@5 ~@11", // Absus2
  AX: "ab5@3 g5@2 gb5@3 g5@3 ab5@2 g5@3, bb2@5 [eb3,bb3,db4]@5 ~ [eb2,eb3]@5", // Eb7 Eb
  AY: "g5@3 f5@2 e5@3 f5@3 g5@2 f5@3, [g2,g3]@5 [eb3,bb3,db4]@5 ~ [eb2,eb3]@5", // G Eb7 Eb
  AZ: "f5@3 eb5@2 d5@3 f5@3 [eb3,ab3,c4,eb5]@5, [ab2,ab3]@5 [eb3,ab3,c4]@5 ~@6", // Ab
  BA: "~@3 c5 [c5,db5] b4@3 c5@3 db5@2 c5@3, [ab2,ab3]@5 [eb3,ab3,c4]@5 ~ [ab2,ab3]@5", // Dbmaj7 Ab
  BB: "c5@3 bb4@2 a4@3 bb4@3 [eb3,g3,db4,eb5]@5, [eb2,eb3]@5 [eb3,g3,db4]@5 ~@6", // Eb7 Eb Eb7
  BC: "~@3 bb4 [bb4,c5] a4@3 bb4@3 c5@2 bb4@3, [eb2,eb3]@5 [eb3,g3,db4]@5 ~ [eb2,eb3]@5", // Bbsus2 Eb Eb7 Eb
  BD: "bb4@3 ab4@2 g4@3 ab4@3 [eb3,ab3,c4,eb4]@5, [ab2,ab3]@5 [eb3,ab3,c4]@5 ~@6", // Ab
  BE: "~@3 ab5 [ab5,bb5] g5@3 ab5@3 bb5@2 ab5@3, ab2@5 [eb3,ab3,c4]@5 ~ [eb3,ab3,c4]@5", // Absus2 Ab
  BF: "~@11 [eb3,c4]@5, [ab2,ab3,ab5], ~@5 c3@11, ~@5 eb4@4 eb4@7, ~@7 f4@9", // Cm Ab
  BG: "ab2@4 c6 [eb3,ab3,c4,c6]@5 ~ c6@2 c6@3, c4@3 ~@8 [eb3,ab3,c4]@5", // Ab
  BH: "[eb2,eb3,c6]@5 bb5@3 a5@3 [eb3,g3,db4,bb5]@5, ~@5 [eb3,g3,db4]@5 ~@6", // Cm Eb7
  BI: "[eb2,eb3]@4 db6 [eb3,g3,db4,db6]@5 ~ db6@2 db6@3, ~@11 [eb2,eb3]@5", // Eb Eb7 Eb
  BJ: "[ab2,ab3,db6]@5 c6@3 b5@3 [eb3,ab3,c4,c6]@5, ~@5 [eb3,ab3,c4]@5 ~@6", // Db5 Ab
  BK: "[ab2,ab3]@4 c6 [eb3,ab3,c4,c6]@5 ~ bb5@2 ab5@3, ~@11 ab2@5", // Ab
  BL: "g5@3 ab5@2 f5@3 g5@3 eb5@2 f5@3, eb2@5 [eb3,g3,db4]@5 ~ [eb3,g3,db4]@5", // Eb7
  BM: "db5@3 eb5@2 c5@3 db5@3 bb4@2 c5@3, [eb2,eb3]@5 [eb3,g3,db4]@5 ~ [eb2,eb3]@5", // Eb Eb7 Eb
  BN: "[ab3,ab4]@5 [c3,c4]@5 ~ [eb3,eb4]@5", BO: "[g3,g4]@5 [db3,db4]@5 ~ [eb3,eb4]@5",
  BP: "ab4@5 [c3,c4]@5 ~ [eb3,eb4]@5, [ab2,ab3]@11 ~@5", BQ: "ab4@5 [c3,c4]@4 eb4 ~ [eb3,f4]@4 eb4, [ab2,ab3]@11 ~@5",
  BR: "g4@5 [db3,db4]@5 ~ [eb3,eb4]@5, [bb2,g3]@11 ~@5", BS: "g4@5 [db3,db4]@4 eb4 ~ [eb3,f4]@4 eb4, [bb2,g3]@11 ~@5",
  BT: "[ab2,ab3,ab4]@5 ~@11", // Ab
  BU: "[~@5 [ab3,db4,f4]@5 ~@6 [db2,db3]@5 ~@2 f4@9, [db2,db3]@16 ~@5 [db2,db3,ab3]@11, ~@11 [ab3,db4,f4]@11 db4@10]/2", // Db Db5 Db
  BV: "[~@5 [ab3,c4,gb4]@5 ~@6 [ab1,ab2]@5 ~@2 gb4@9, [ab1,ab2]@16 ~@5 [ab1,ab2,ab3]@11, ~@11 [ab3,c4,gb4]@11 c4@10]/2", // Ab7 Ab Ab7
  BW: "[~@5 [ab3,db4,f4]@5 ~@13 f4@9, [db2,db3]@11 [db2,db3]@11 db4@10, ~@5 [c2,c3]@27, ~@11 [ab3,db4,f4]@10 ab3@11, ~ [f2,f3]]/2", // Db C Db F
  BX: "[~@5 [ab3,c4,gb4]@5 ~@6 [ab1,ab2]@5 [ab1,ab2,ab3,c4,gb4]@11, [ab1,ab2] ~, ~@11 [ab3,c4,gb4]@10 ~@11]/2", // Ab7 Ab Ab7 Ab Ab7
  BY: "[[db3,db5]@5 [ab3,db4,f4,db5]@5 ~ [ab3,db4,f4]@5 db3@5 ~@2 f4@9, ~@11 db5@10 [ab3,db5]@11, ~@11 db4@5]/2", // Db Db5
  BZ: "[[ab2,c5]@5 [ab3,c4,gb4]@5 ~ [ab3,c4,gb4]@5 ab2@5 ~@6 f5@5, ~@5 eb5@16 ab3@11, ~@11 c4@5, ~@23 gb4@9]/2", // Ab Ab7
  CA: "[[ab2,gb5]@5 [ab3,c4,gb4]@5 ~ [ab3,c4,gb4]@5 ab2@5 ~@2 gb4@4 gb4@5, ~@5 eb5@16 ab3@11, ~@21 c5@5 ~@6, ~@11 c4@5]/2", // Ab7
  CB: "[db3@5 [f3,ab3,db4]@5 ~ [f3,ab3,db4]@5 db3@5 ~@6 ab4@5, f4@27 ~@5, ~@21 f3@11, ~@11 ab3@5, ~@23 db4@9]/2", // Db
  CC: "[[db3,bb4]@5 [f3,ab3,db4]@5 ~ [f3,ab3,db4]@5 db3@5 ~@6 f4@5, ~@5 ab4@21 ~@6, ~@21 f3@11, ~@11 ab3@5, ~@23 db4@9]/2", // Gb Db
  CD: "[[ab2,eb4]@5 [eb3,ab3,c4]@5 ~ [eb3,ab3,c4]@5 ab2@5 ~@6 c5@5, ~@5 ab4@16 eb3@11, ~@11 ab3@5, ~@23 c4@9]/2", // Ab5 Ab
  CE: "[[eb2,bb4]@5 [eb3,g3,bb3]@5 ~ [eb3,g3,bb3]@5 eb2@5 ~@6 g4@5, ~@5 db5@16 eb3@11, ~@11 bb3@5, ~@23 db4@9]/2", // Eb5 Eb
  CF: "~@11 eb3@5, [ab2,ab4], ~@5 c3@11", // Ab
  CG: "[g2@3 bb2@2 [eb3,bb5]@5 ~ eb2@5 ab2@3 c3@2 [eb3,c6]@5 ~ eb2@5 [eb3,bb3,db4]@5 ~@8 g5@3, [eb5,eb6]@5 ~@6 [eb5,eb6]@11 ~@5 eb6@21, ~@27 eb5@10 eb5@11, ~@37 [eb3,bb3,db4]@5 ~ [eb3,bb3,db4,f5]@5, ~@5 e5]/3", // Eb5 Cm Eb7 Eb Eb7 Bbm
  CH: "[ab3,c4,ab5]@5 c5@5 ~ eb5@5", // Ab
  CI: "[g5@3 bb5@2 [bb2,eb6]@5 ~ eb5@5 ab5@3 c6@2 [c3,eb6]@5 ~ eb5@5 ~@3 eb3@2 d3@3 db3@3 f2@2 g2@3, [eb2,eb3]@5 ~@6 [eb2,eb3]@11 ~@5 [eb2,eb3]@8 ~@13, ~@32 [eb5,eb6]@11 [db5,db6]@5]/3", // Eb5 Cm Eb Db
  CJ: "[c5,eb5,ab5,c6]@5 [c5,eb5,ab5,c6]@5 ~ [eb3,c5,eb5,ab5,c6]@5, ab2, ~@5 c3@11", // Ab
  CK: "~@13 g2@3, g2@11 [f2,eb5,g5,bb5,eb6]@5, [eb5,g5,bb5,eb6]@5 eb3@11, ~@3 bb2@13, ~@5 [eb5,g5,bb5,eb6]@3 eb2@8", // Eb
  CL: "[ab2,c5,eb5,ab5]@5 ~@11", CM: "~@5 [c3,c4]@4 [eb3,eb4] ~ [f3,f4]@4 [eb3,eb4]", CN: "[g3,g4]@5 ~@11",
  CO: "g5@3 bb5@2 eb6@3 eb5@3 f5@2 g5@3, [eb2,g2,bb2,eb3]@5 [eb2,g2,bb2,eb3]@5 ~ [eb2,g2,bb2,eb3]@5", // Eb
  CP: "[ab1,c2,eb2,ab2,ab5]@5 ~@11", CQ: "[ab2,ab3,eb5,ab5,c6]@5 ~@8 [ab1,ab2,c4,eb4,ab4]@3",
  CR: "[ab1,ab2,c4,eb4,ab4]", // Ab
})).s("gm_piano").gain(0.25)

stack(piano, piano_2)