Strudelify

Säkkijärven polkka

b3cquerel

KeyG♭ majorTempo120 bpm
0:00/0:00
// Säkkijärven polkka — b3cquerel
// 120 bpm, 2/4, key Gb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 2/4 at bar 2) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5951965; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 49 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · accordion
const accordion = note(`<
  A B C D E B C D F B C D E B C D F G H I J G H K L G H I J G H K L M N O P M N Q R M N O P M N Q S
>`.pickRestart({
  A: "~ bb4", B: "eb5@4 bb4 b4 ~ bb4 ab4@4 gb4@4, eb3 bb2", C: "gb4@2 f4@2 f4 bb3 d4 f4, d3 bb2",
  D: "bb4@4 ab4 bb4 ~ ab4 gb4@4 f4@4, d3 bb2", E: "gb4 f4 eb4 d4 eb4 bb4 c5 d5, eb3 bb2",
  F: "[eb3,gb3,bb3,eb4] ~ [eb3,gb3,bb3,eb5]@2", G: "bb4@2 eb5@2 eb5@2 eb5 f5, eb3 bb2",
  H: "eb5 f5 ~ eb5 d5@4 [bb2,d5]@8, d3 ~", I: "bb4@2 f5@2 f5@2 f5 gb5, d3 bb2",
  J: "f5 gb5 ~ f5 eb5@4 [bb2,eb5]@8, eb3 ~", K: "[d3,bb4]@3 [ab4,bb4] [gb4,c5]@2 [f4,d5]@2, ~ bb2",
  L: "[bb2,eb3,gb3] ~ [bb2,eb3,gb3,eb4,eb5]@2, [eb4,eb5] ~", M: "eb5 d5 eb5 f5 gb5 f5 gb5 g5, eb3 bb2",
  N: "ab5 g5 ab5 bb5 b5 bb5 ab5 b5, ab2 f2", O: "bb5 bb4 d5 f5 bb5 ab5 gb5 f5, bb2 d3",
  P: "gb5 f5 eb5 d5 eb5 bb4 c5 d5, eb3@2 bb2 d3", Q: "bb5 bb4 d5 f5 bb5 ab5 gb5 f5, bb2@2 bb2 d3",
  R: "[eb3,eb5]@4 eb5 bb4 c5 d5, ~ d3", S: "eb5@4 bb4 c5 ~ d5 [eb3,eb5]@8, eb3 ~",
})).s("gm_accordion").gain(0.3)

// chords · piano
const piano = note(`<
  A B C D E F C G H B C D E F C G H I J K L I J M N I J K L I J M N O P Q R O P Q S O P Q R O P Q T
>`.pickRestart({
  A: "~ bb4", B: "eb5@4 bb4 b4 ~ bb4 ab4@4 [gb3,bb3,eb4,gb4]@4, ~ [gb3,bb3,eb4] ~@2",
  C: "gb4 [f3,bb3,d4,f4] f4 [f3,bb3,d4,f4]", D: "bb4@4 ab4 bb4 ~ ab4 gb4@4 [f3,bb3,d4,f4]@4, ~ [f3,bb3,d4] ~@2",
  E: "[f4,bb4] [gb3,bb3,eb4,ab4] [eb4,gb4] [gb3,bb3,eb4,f4,bb4]", // Bb5 Ebm
  F: "[eb4,eb5]@4 bb4 b4 ~ bb4 ab4@4 [gb3,bb3,eb4,gb4]@4, ~ [gb3,bb3,eb4] ~@2", // Eb Ebm
  G: "bb4@4 ab4 bb4 ~ ab4 [gb4,c5]@4 [f3,bb3,d4,f4,d5]@4, ~ [f3,bb3,d4] ~@2", // Gbdim Bb
  H: "[eb4,eb5] [gb3,bb3,eb4,gb4,bb4,eb5], [gb3,bb3] ~@3", // Eb Ebm Gb
  I: "bb4@2 [gb3,bb3,eb4,eb5]@2 eb5@2 eb5 f5, ~@3 [gb3,bb3,eb4]", // Ebm
  J: "eb5 f5 ~ eb5 [f3,bb3,d4,d5]@4 ~@4 [f3,bb3,d4]@4, ~ d5", K: "bb4@2 [f3,bb3,d4,f5]@2 f5@2 f5 gb5, ~@3 [f3,bb3,d4]",
  L: "f5 gb5 ~ f5 [gb3,bb3,eb4,eb5]@4 ~@4 [gb3,bb3,eb4]@4, ~ eb5", // Ebm
  M: "bb4@2 ~ [ab4,bb4] [gb4,c5]@2 [f3,bb3,d4,f4,d5]@2, ~ [f3,bb3,d4] ~@2", // Absus2 Gbdim Bb
  N: "[eb4,eb5] [gb3,bb3,eb4,eb5], [gb3,bb3] ~@3", O: "eb5 d5 eb5 f5 gb5 f5 gb5 g5, ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4]",
  P: "ab5 g5 ab5 bb5 b5 bb5 ab5 b5, ~ [f3,bb3,d4] ~ [f3,bb3,d4]", // Bb
  Q: "bb5 bb4 d5 f5 bb5 ab5 gb5 f5, ~ [f3,bb3,d4] ~ [f3,bb3,d4]", // Bb
  R: "gb5 f5 eb5 d5 eb5 bb4 c5 d5, ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4]", // Ebm
  S: "[eb3,gb3,bb3,eb5]@4 eb5 bb4 c5 d5, ~ [d3,f3,bb3]", T: "eb5@4 bb4 c5 ~ d5 [eb3,gb3,bb3,eb5]@8, [eb3,gb3,bb3] ~",
})).s("gm_piano").gain(0.3)

// bass · tuba
const bass = note(`<
  ~ A B@2 A@2 B@2 C A B@2 A@2 B@2 C A B@2 A@2 B@2 C A B@2 A@2 B@2 C A D E F A D G H A D E F A D G I
>`.pickRestart({
  A: "eb2 bb1", B: "d2 bb1", C: "eb2 ~ eb2@2", D: "ab1 f1", E: "bb1 d2", F: "eb2@2 bb1 d2", G: "bb1@2 bb1 d2",
  H: "eb2 d2", I: "eb2!2",
})).s("gm_tuba").gain(0.3)

// drums · claves
const claves = s("clave:2").struct(`<
  ~ A@2 B C A B A D A@2 B C A B A D B E B E B E A D B E B E B E A D B C B C B C A C B C B C B C A F
>`.pickRestart({
  A: "x ~ x!3 ~ x ~", B: "x ~ x!3 ~ x!2", C: "x ~ x!6", D: "x!2", E: "x ~ x ~ x!4", F: "x ~@3 x!2 ~ x!2 ~@7",
})).gain(1.46)

stack(accordion, piano, bass, claves)