Strudelify

ievan polkka

Loituma

KeyD majorTempo121 bpm
0:00/0:00
// ievan polkka — Loituma
// 121 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Oboe" oboe (copy of ch 4 "Flute" flute); ch 7 "Horn in F" french horn (copy of ch 5 "B♭ Clarinet" clarinet)
// note: Transcription provider: pdmx. https://musescore.com/score/4511481; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(121/4)

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

// chords · piccolo
const piccolo = note(`<
  A@7 B A C A C D C D E A C A C D C D F G H I J K L K M N O P O P O P Q ~@8 A C A C D C D E A C A C D C D ~ A ~ A ~ D C
  D E
>`.pickRestart({
  A: "~ [a5,c#6] ~ [a5,c#6] ~ [a5,c#6] ~ [a5,c#6]", B: "~ [a5,c#6] ~ [a5,c#6]!2 ~@3",
  C: "~ [g#5,c#6] ~ [g#5,c#6] ~ [a5,c#6] ~ [a5,c#6]", D: "~ [a5,c#6] ~ [a5,c#6] ~ [g#5,c#6] ~ [g#5,c#6]",
  E: "~ [g#5,c#6] ~ [g#5,c#6] [a5,c#6] ~@3", F: "~@15 f#6", G: "c#6 ~ f#6 ~ f#6 ~ f#6!2 a6!2 f#6!3 ~ f#6 a6",
  H: "g#6 ~ e6 ~ e6 ~ g#6 ~ a6 ~ f#6 ~ f#6 ~@2 f#6", I: "c#6 ~ f#6 ~ f#6 ~@2 g#6 a6 ~ f#6!2 ~ f#6!2 a6",
  J: "c#7!4 a6!2 g#6 ~ a6 ~ f#6 ~ f#6 ~@2 f#6", K: "c#7 ~ c#7 ~ b6 ~ a6 ~ b6!2 e6!2 ~@2 e6!2",
  L: "b6!4 a6!2 g#6!2 a6!2 f#6 f#6@3 ~ f#6", M: "b6!4 a6!2 g#6!2 a6!2 f#6 f#6@3 ~@2", N: "~ [a5,c#6] ~ a5 ~ a5 ~ a5",
  O: "~ g#5 ~ g#5 ~ a5 ~ a5", P: "~ a5 ~ a5 ~ g#5 ~ g#5", Q: "~ g#5 ~ g#5 a5 ~@3",
})).s("gm_piccolo").gain(0.3)

// chords · piccolo
const piccolo_2 = note(`<
  A@7 B A C A C D C D E A C A C D C D ~@8 F A C D C D C D E A C A C D@2 A G A C A C D C D E A C A C D C D H I J K L M N
  M O
>`.pickRestart({
  A: "~ [a5,c#6] ~ [a5,c#6] ~ [a5,c#6] ~ [a5,c#6]", B: "~ [a5,c#6] ~ [a5,c#6]!2 ~@3",
  C: "~ [g#5,c#6] ~ [g#5,c#6] ~ [a5,c#6] ~ [a5,c#6]", D: "~ [a5,c#6] ~ [a5,c#6] ~ [g#5,c#6] ~ [g#5,c#6]",
  E: "~ [g#5,c#6] ~ [g#5,c#6] [a5,c#6] ~@3", F: "~@3 f#7",
  G: "~@2 [a5,c#6]@2 ~@2 [a5,c#6]@2 [a5,c#6]@2 [a5,c#6]@2 [a5,c#6]!2 [a5,c#6]@2", H: "~@15 f#6",
  I: "c#6 ~ f#6 ~ f#6 ~ f#6!2 a6!2 f#6!3 ~ f#6 a6", J: "g#6 ~ e6 ~ e6 ~ g#6 ~ a6 ~ f#6 ~ f#6 ~@2 f#6",
  K: "c#6 ~ f#6 ~ f#6 ~@2 g#6 a6 ~ f#6!2 ~ f#6!2 a6", L: "c#7!4 a6!2 g#6 ~ a6 ~ f#6 ~ f#6 ~@2 f#6",
  M: "c#7 ~ c#7 ~ b6 ~ a6 ~ b6!2 e6!2 ~@2 e6!2", N: "b6!4 a6!2 g#6!2 a6!2 f#6 f#6@3 ~ f#6",
  O: "b6!4 a6!2 g#6!2 a6!2 f#6 f#6@4 ~",
})).s("gm_piccolo").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@7 A B C D E F G H G B C D E F G H I ~@7 J ~@7 A B C D E F@2 K L B C D E F G H G B C D E F G H I ~@8
>`.pickRestart({
  A: "~@15 f#4", B: "c#4@2 f#4@2 f#4@2 f#4!2 a4!2 f#4!2 f#4@2 f#4 a4",
  C: "g#4@2 e4@2 e4@2 g#4@2 a4@2 f#4@2 f#4@2 f#4!2", D: "c#4@2 f#4@2 f#4@3 g#4 a4@2 f#4 f#4@2 f#4!2 a4",
  E: "c#5!4 a4!2 g#4@2 a4@2 f#4@2 f#4@3 f#4", F: "c#5@2 c#5@2 b4@2 a4@2 b4!2 e4 e4@3 e4!2",
  G: "b4!4 a4!2 g#4!2 a4!2 f#4 f#4@3 ~ f#4", H: "c#5@2 c#5@2 b4@2 a4@2 b4@2 e4!2 e4@2 e4!2",
  I: "b4!4 a4!2 g#4!2 a4!2 f#4 f#4@3 ~@2", J: "~@3 f#5", K: "c#5!2 b4 a4 c#5!2 b4 a4",
  L: "c#5@2 c#5@2 c#5@2 c#5@2 c#5@2 c#5@2 c#5!3 f#4",
})).s("gm_clarinet").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@7 A B C D E F G H G B C D E F G H I ~@7 J ~@7 A B C D E F@2 K L B C D E F G H G B C D E F G H I ~@8
>`.pickRestart({
  A: "~@15 f#3", B: "c#3@2 f#3@2 f#3@2 f#3!2 a3!2 f#3!2 f#3@2 f#3 a3",
  C: "g#3@2 e3@2 e3@2 g#3@2 a3@2 f#3@2 f#3@2 f#3!2", D: "c#3@2 f#3@2 f#3@3 f#3 a3@2 f#3 f#3@2 f#3!2 a3",
  E: "c#4!4 a3!2 g#3@2 a3@2 f#3@2 f#3@3 f#3", F: "c#4@2 c#4@2 b3@2 a3@2 b3!2 e3 e3@3 e3!2",
  G: "b3!4 a3!2 g#3!2 a3!2 f#3 f#3@3 ~ f#3", H: "c#4@2 c#4@2 b3@2 a3@2 b3@2 e3!2 e3@2 e3!2",
  I: "b3!4 a3!2 g#3!2 a3!2 f#3 f#3@3 ~@2", J: "~@3 f#3", K: "c#4!2 b3 a3 c#4!2 b3 a3",
  L: "c#4@2 c#4@2 c#4@2 c#4@2 c#4@2 c#4@2 c#4!3 f#3",
})).s("gm_tenor_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A@4 B@3 C D E D E F E F G D E D E F E F ~@9 D E D E F E F G D E D E F@2 D H D E D E F E F G D E D E F E F ~@5 F E F G
>`.pickRestart({
  A: "f#3@3 ~ c#3@3 ~ f#3@3 ~ c#3 ~ e3@2", B: "[f#2,f#3]@3 ~ [c#2,c#3]@3 ~ [f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2",
  C: "[f#2,f#3]@3 ~ [c#2,c#3]@3 ~ [f#2,f#3]@3 ~@5", // F# C# F#
  D: "[f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2 [f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2", // F# C# E F# C# E
  E: "[c#2,c#3]@3 ~ [e2,e3] ~ [c#2,c#3]@2 [f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2", // C# E C# F# C# E
  F: "[f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2 [c#2,c#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2", // F# C# E C# E
  G: "[c#2,c#3]@3 ~ [e2,e3] ~ [c#2,c#3]@2 [f#2,f#3]@4 ~@4", // C# E C# F#
  H: "[f#2,f#3]@4 [f#2,f#3]@4 [f#2,f#3]@2 [f#2,f#3]@2 [f#2,f#3]!2 [f#2,f#3]@2", // F#
})).s("gm_baritone_sax").gain(0.3)

// other · bassoon
const bassoon = note(`<
  A@4 B@3 C D E D E F E F G D E D E F E F ~ D E D E F E F G D E D E F E F G D E D E F@2 D H D E D E F E F G D E D E F E
  F ~ D E D E F E F G
>`.pickRestart({
  A: "f#2@3 ~ c#2@3 ~ f#2@3 ~ c#2 ~ e2@2", B: "[f#2,f#3]@3 ~ [c#2,c#3]@3 ~ [f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2",
  C: "[f#2,f#3]@3 ~ [c#2,c#3]@3 ~ [f#2,f#3]@3 ~@5", // F# C# F#
  D: "[f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2 [f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2", // F# C# E F# C# E
  E: "[c#2,c#3]@3 ~ [e2,e3] ~ [c#2,c#3]@2 [f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2", // C# E C# F# C# E
  F: "[f#2,f#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2 [c#2,c#3]@3 ~ [c#2,c#3] ~ [e2,e3]@2", // F# C# E C# E
  G: "[c#2,c#3]@3 ~ [e2,e3] ~ [c#2,c#3]@2 [f#2,f#3]@4 ~@4", // C# E C# F#
  H: "[f#2,f#3]@4 [f#2,f#3]@4 [f#2,f#3]@2 [f#2,f#3]@2 [f#2,f#3]!2 [f#2,f#3]@2", // F#
})).s("gm_bassoon").gain(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@4 A@3 B C@7 B C@7 ~@5 C@3 D C@7 B ~@8 C@7 B C@7 ~@5 C@3 ~>".pickRestart({
  A: "~@7 x ~@7 x", B: "~ x ~@2", C: "~ x ~ x", D: "~@12 x!4",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!3 [~ x ~@2] ~@64>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@7 B A@7 ~@5 A@3 ~ A@7 B ~@8 A@7 B A@7 ~@5 A@3 ~>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@8",
})).gain(0.3)

stack(piccolo, piccolo_2, clarinet, tenor_sax, baritone_sax, bassoon, kick, snare, clap, hihat)