Strudelify

Lamento Sertanejo

Dominguinhos

KeyB♭ majorTempo100 bpm
0:00/0:00
// Lamento Sertanejo — Dominguinhos
// 100 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 4/4 at bar 13, 2/4 at bar 29, 4/4 at bar 38, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5143472; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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@5 B@8 C D E F G@2 H I J@7 K L@4 M@8 N@7 O@3 P@7>".pickRestart({
  A: "[~@25 g4@2 g4@2 g4@2 ~@10 g4@2 g4@2 ~@12 g4@2 g4@2 g4@2 ~@6 g4@2 g4@6 g4@2 f5, ~@13 [g3,g4]@4 [g3,g4]@4 [g3,g4]@4 g3@4 g3@2 g4@2 [g3,bb4]@2 a4@22 g3@4 g3@2 g4@2 [g3,bb4]@2 a4@2 g3@8 ~@3, ~@15 f5@22 [g3,g4]@2 bb4@14 [g3,g4]@2 d5@22 ~@3, ~@19 e5@22 g3@4 [g3,g4]@2 f5@30 ~@3, ~@23 d5@26 [g3,g4]@2 e5@26 ~@3]/5", // G Gm G
  B: "[~@9 g4@2 g4@2 g4@2 ~@10 g4@2 g4@2 ~@12 g4@2 g4@2 g4@2 ~@6 g4@2 ~@2 [g2,g3]@4 ~@12 g4@2 g4@2 g4@2 ~@10 g4@2 g4@2 ~@12 g4@2 g4@2 g4@2 ~@7 g4@2 g4@8, ~ [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3]@4 [g2,g3]@4 bb4@4 [g2,g3,g4]@2 bb4@14 [g2,g3,g4]@2 d5@10 [g2,g3]@2 a4@2 [g2,g3]@2 g4@6 [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3]@4 [g2,g3]@2 g4@2 [g2,g3,bb4]@2 a4@22 g2@8 g3@2 a4@3 g3@10, ~@3 e5@22 [g2,g3]@4 [g2,g3,g4]@2 f5@30 ~@2 f5@22 [g2,g3,g4]@2 bb4@14 [g2,g3,g4]@2 d5@25, ~@7 d5@26 [g2,g3,g4]@2 e5@26 ~@6 e5@22 [g2,g3]@4 [g2,g3,g4]@2 f5@10 g3@4 g3@2 g4@2 bb4@15, ~@15 g4@2 [g2,g3]@2 a4@22 [g2,g3]@4 [g2,g3]@2 g4@2 bb4@12 ~@10 d5@26 [g2,g3,g4]@2 e5@29]/8", // G Gm G
  C: "g3@2 [g2,g3,bb3,d4]@3 [gb2,gb3,a3,db4]@3 [f2,f3,ab3,c4]@8", D: "[bb2,f3,ab3,d4]@2 [bb3,d4,g4]!2, ~ e2",
  E: "~ [bb3,d4,g4]@3 [bb3,d4,g4]@2 [bb3,d4,g4]@2, e2 eb3", F: "~ [bb3,d4,g4]@3 [g3,bb3,d4]@2 [g3,bb3,d4]@2, eb3 g2",
  G: "[~ [g3,bb3,d4]@3 [g3,bb3,d4]@2 [gb3,bb3,d4]@2 [f3,bb3,d4]@2 [g2,e3,bb3,d4]@2 [g3,bb3,eb4]@2 [bb3,eb4,g4]@2, g2@8 g2@11 ~@5 c3@8]/2", // Gm Gbaug Bb Em7b5 Eb
  H: "~@2 [g3,c4,eb4]@3 [g3,bb3,eb4]@3 [f3,c4,f4,a4]@4 [eb3,bb3,eb4,g4]@4, c3 ~", // Cm Eb F Eb
  I: "[d3,a3,d4,f4] [c3,g3,c4,eb4] [f3,bb3,d4] [bb3,d4,f4], ~ bb2", // Dm Cm Bb
  J: "[~@2 [f3,bb3,d4]@3 a2@3 ~@4 [f3,bb3,d4]@4 g4@3 d4@2 bb3@3 ~@8 [f3,bb3,d4]@8 ~@4 eb3@2 bb3@2 ~@4 e2@4 ~@6 f3@2 [bb3,d4]@8 ~@6 f3@2 [bb3,d4]@8 ~@6 eb3@2 [bb3,d4]@8 [eb3,bb3,d4,g4]@8, bb2@5 ~@3 ab2@15 ~ g2@15 ~ e2@11 ~@5 f2@15 ~ g2@15 ~ e2@15 ~@9, ~@6 d4 ~@7]/7", // Bb Ebmaj7
  K: "[d3,a3,d4,gb4] [g2,g3,bb3,d4]", // D Gm
  L: "[~@6 g4!2 g4 ~@5 g4!2 ~@6 g4!2 g4 ~@3 g4 ~ [g2,g3]@2, [g2,g3,g4]@2 [g2,g3,g4]@2 [g2,g3,g4]@2 [g2,g3]@2 [g2,g3] g4 [g2,g3,bb4] a4@11 [g2,g3]@2 [g2,g3] g4 [g2,g3,bb4] a4 [g2,g3] g4@3, ~ f5@11 [g2,g3,g4] bb4@7 [g2,g3,g4] d5@11, ~@3 e5@11 [g2,g3]@2 [g2,g3,g4] f5@15, ~@5 d5@13 [g2,g3,g4] e5@13]/4", // G Gm G Gm G
  M: "[~@12 g4@2 g4@2 g4@2 ~@10 g4@2 g4@2 ~@12 g4@2 g4@2 g4@2 ~@2 g3@3 ~@2 g4@2 g4@8 g3@2 [g2,g3,bb3,d4]@3 [gb2,gb3,a3,db4]@3 [f2,f3,ab3,c4]@8 [bb2,f3,ab3,d4]@8 [bb3,d4,g4]@4 [bb3,d4,g4]@4 ~@2 [bb3,d4,g4]@6 [bb3,d4,g4]@4 [bb3,d4,g4]@4 ~@2 [bb3,d4,g4]@6 [g2,g3,bb3,d4]@4 [g3,bb3,d4], [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3]@4 [g2,g3]@2 g4@2 [g2,g3,bb4]@2 a4@22 g2@13 g3@10 ~@24 e2@8 e2@8 eb3@8 eb3@8 ~@5, ~@2 f5@22 [g2,g3,g4]@2 bb4@14 [g2,g3,g4]@2 d5@25 ~@61, ~@6 e5@22 [g2,g3]@4 [g2,g3,g4]@2 f5@10 g3@4 g3@2 g4@2 bb4@3 a4@12 ~@61, ~@10 d5@26 [g2,g3,g4]@2 e5@29 ~@61]/8", // Gm Gbm Fm Bb7 Gm G Gm G
  N: "[~@5 [g3,bb3,d4]@6 [g3,bb3,d4]@4 [gb3,bb3,d4]@4 [f3,bb3,d4]@4 [g2,e3,bb3,d4]@4 [g3,bb3,eb4]@4 [bb3,eb4,g4]@4 ~@2 [g3,c4,eb4]@3 [g3,bb3,eb4]@3 [f3,c4,f4,a4]@4 [eb3,bb3,eb4,g4]@4 [d3,a3,d4,f4]@4 [c3,g3,c4,eb4]@4 [f3,bb3,d4]@4 [bb3,d4,f4]@4 ~@2 [f3,bb3,d4]@3 a2@3 ~@4 [f3,bb3,d4]@4 g4@3 d4@2 bb3@3 ~@8 [f3,bb3,d4]@8 e2@4 eb3, ~@3 g2@8 g2@11 ~@5 c3@8 c3@8 ~@16 bb2@8 bb2@5 ~@3 ab2@15 ~ g2@15 ~@6]/7", // Gm Gbaug Bb Em7b5 Eb Cm Eb F …
  O: "[~ bb3@2 ~@4 e2@4 ~@6 f3@2 [bb3,d4]@8 ~@6 f3@2 [bb3,d4]@8 e2@5, ~@3 d4@8 f2@15 ~ g2@15 ~@6]/3", // Bb
  P: "[~ eb3@2 [bb3,d4]@8 [eb3,bb3,d4,g4]@8 [d3,a3,d4,gb4]@8 [g2,g3,bb3,d4]@8 ~@12 g4@2 g4@2 g4@2 ~@10 g4@2 g4@2 ~@12 g4@2 g4@2 g4@2 ~@7 g4@3 g4@9 ~@8, ~@35 [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3,g4]@4 [g2,g3]@4 [g2,g3]@2 g4@2 [g2,g3,bb4]@2 a4@22 g2@13 g3@11 ~@9, ~@37 f5@22 [g2,g3,g4]@2 bb4@14 [g2,g3,g4]@2 d5@27 ~@8, ~@41 e5@22 [g2,g3]@4 [g2,g3,g4]@2 f5@10 g3@4 g3@2 g4@2 [g3,bb4]@3 a4@14 ~@8, ~@45 d5@26 [g2,g3,g4]@2 e5@31 ~@8]/7", // Bb Ebmaj7 D Gm G Gm G Gm …
})).s("gm_piano").gain(0.3)

// other · alto sax · "Saxofone Alto"
const alto_sax = note("<~@5 A B A C@2 D@2 E ~@20 F G F H I@2 J K@8 L@2 M@8>".pickRestart({
  A: "~@9 g4@2 bb4@2 d5@3", B: "~ c5@2 bb4@8 ~@5", C: "[~ c5@2 g4@8 ~@2 g4@2 f5@4 e5@4 d5@2 g4@7]/2",
  D: "[~ bb4@2 a4@2 g4@2 bb4@2 g4@4 g4@2 f5@4 e5@4 d5@2 g4@7]/2", E: "~ bb4@2 a4@2 ~ g4@10", F: "~@6 g4 bb4",
  G: "d5@2 c5 bb4@4 ~", H: "d5@4 c5@2 ~ g4@9", I: "[~@15 d5@2 c5@4 bb4@2 g4@9]/2", J: "~ f4@2 g4@2 bb4@8 ~@2 a4",
  K: "[~ c5@4 g4@2 bb4@4 g4@8 ~@3 bb4@2 a4@3 g4@4 a4@4 bb4@4 d5@4 g5@4 eb5@6 g5@4 bb5@2 a5@4 g5@4 f5@4 eb5@4 d5@8 ~@12 g5@4 f5@3 eb5@2 d5@3 bb4@4 g4@4 ~@4 g4@4 d5@3 c5@2]/8",
  L: "[d5@3 c5@4 g4@4 bb4@4 g4@4 ~@8 g4@3 bb4@2]/2",
  M: "[d5@3 f5@3 e5@2 d5@3 bb4@4 g4@4 g5@2 f5@2 e5@2 d5@2 bb4@2 a4@2 a4@2 a4@2 c5@2 g4@2 g4@2 g4@2 g4@8 g4@2 f5@4 e5@4 d5@2 g4@8 bb4@2 a4@2 g4@2 bb4@2 g4@4 g4@2 f5@4 e5@4 d5@2 g4@8 bb4@2 ~ a4@2 g4@11 ~@9]/8",
})).s("gm_alto_sax").gain(0.3)

stack(piano, alto_sax)