Strudelify

Follow the Wind

Ben Fleishman

KeyA minorTempo175 bpm
0:00/0:00
// Follow the Wind — Ben Fleishman
// 175 bpm, 8/4, key A minor. 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 (6/4 at bar 1, 8/4 at bar 3, 6/4 at bar 14, 4/4 at bar 20) are rendered on a constant 8/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2332251; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 24 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(175/8)

// 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 B@2 C D E F G H I J K L M N@5 O P Q R S>".pickRestart({
  A: "[f2,a2,c3,f4,a4,c5]@6 [f2,g#2,c3,f4,g#4,c5]@6 [f2,a2,c3,f4,a4,c5]@6 [e2,g2,b2,g4,b4,d5]@17 ~ [f2,a2,c3,f4,a4,c5]@6 [f2,g#2,c3,f4,g#4,c5]@6", // F Fm F Em7 F Fm
  B: "[[e2,g2,b2,g4,b4,d5]@6 [d2,f2,a2]@12 [e2,g2,b2]@6 [f3,a3,c4,f4,a4,c5]@6 [f3,g#3,c4,f4,g#4,c5]@6 [f3,a3,c4,f4,a4,c5]@6 [e3,g3,b3,g4,b4,d5]@17 ~ [f3,a3,c4,f4,a4,c5]@6 [f3,g#3,c4,f4,g#4,c5]@6 [g3,b3,d4,g4,b4,d5]@6 [a3,c4,e4,a4,c5,e5]@17 ~, ~@6 [a4,c5,e5]@17 ~@73]/2", // Em7 Dm Em F Fm F Em7 F …
  C: "g4@3 f4@3 g4@11 ~ [a4,c5,e5]@3 ~@27, [f3,a3,c4]@23 ~", D: "g4@3 f4@3 g4@11 ~ [c5,g5]@3 ~@27, [g3,b3,d4]@23 ~",
  E: "g4@3 f4@3 g4@11 ~@7 [d3,f3,a3]@4 ~@2 [d3,f3,a3]@4 ~@2 [d3,f3,a3]@4 ~@2 [d3,f3,a3]@4 ~@2, [c3,e3,g3]@17 ~ a4@28 ~@2", // Dm C
  F: "g4@3 f4@3 [g2,g4]@11 ~ a3@3 g3@3 a3@3 g3@3 a3@3 g3@3 f3@3 e3@3 d3@6, d2@3 ~@6 d4@14 ~, ~@3 d3@4 ~", // G
  G: "~@6 a3@3 g3@3 a3@3 g3@3 f3@3 a3@3 g3@11 ~ [g3,c4]@11 ~, d4@17 ~@7", // C5
  H: "~@6 g3@3 f3@3 g3@3 f3@3 g3@3 f3@3 g3@11 ~ f3@11 ~, a3@17 ~@7",
  I: "[d3,d4,d5,d6]@2 [c3,c4,c5,c6] ~@5 [d3,d4,d5,d6]@2 [c3,c4,c5,c6] ~@5", // D C D C
  J: "~@6 a5@3 g5@3 a5@3 g5@3 f5@3 e5@3 d5@23 ~, a1@23 ~", K: "~@6 d5@3 c5@3 d5@3 c5@3 d5@3 e5@3 f5@23 ~, a1@23 ~",
  L: "~@2 f5 e5 f5 e5 ~@4 f5 e5 f5 e5 ~@2, a1@23 ~", M: "~@12 g4@6 g4@6 d4@23 ~, [d3,f3,a3,d5]@23 ~",
  N: "[[f2,a2,c3,f4,a4,c5]@9 [f2,g#2,c3,f4,g#4,c5]@8 [f2,a2,c3,f4,a4,c5]@8 ~ [e2,g2,b2,g4,b4,d5]@25 ~ [f4,a4,c5]@9 [f4,g#4,c5]@8 ~ [g4,b4,d5]@8 ~ [a4,c5,e5]@25 ~ [f3,a3,c4,f4,a4,c5]@9 [f3,g#3,c4,f4,g#4,c5]@8 [f3,a3,c4,f4,a4,c5]@8 ~ [e3,g3,b3,g4,b4,d5]@25 ~ [f2,a2,c3,f3,a3,c4]@9 [f3,g#3,c4]@8 ~ [g3,b3,d4]@8 ~ [a2,a3,c4,e4]@25 ~@31]/5", // F Fm F Em7 F Fm G Am …
  O: "~@5 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@3 [f3,a3,c4,f4,a4,c5]@3 [g3,b3,d4,g4,b4,d5]@11 ~@3 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@3 [g3,b3,d4,g4,b4,d5]@3 [a3,c4,e4,a4,c5,e5]@11", // F Fm F G F Fm G Am
  P: "~@4 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@2 [f3,a3,c4,f4,a4,c5]@3 [g3,b3,d4,g4,b4,d5]@11 ~@4 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@3 [g3,b3,d4,g4,b4,d5]@3 [a3,c4,e4,a4,c5,e5]@11 ~", // F Fm F G F Fm G Am
  Q: "~@2 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@3 [f3,a3,c4,f4,a4,c5]@3 [g3,b3,d4,g4,b4,d5]@11 ~@4 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@2 [g3,b3,d4,g4,b4,d5]@3 [a3,c4,e4,a4,c5,e5]@11 ~@3", // F Fm F G F Fm G Am
  R: "~ [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@3 [f3,a3,c4,f4,a4,c5]@3 [g3,b3,d4,g4,b4,d5]@11 ~@3 [f3,a3,c4,f4,a4,c5]@3 [f3,g#3,c4,f4,g#4,c5]@3 [g3,b3,d4,g4,b4,d5]@3 [a3,c4,e4,a4,c5,e5]@11 ~@4", // F Fm F G F Fm G Am
  S: "[a2,c3,e3,a3,c4,e4]@11 ~@13", // Am
})).s("gm_piano").gain(0.3)

// other · trombone
const trombone = note("<~@13 A ~@5 B@3 C D>".pickRestart({
  A: "d3",
  B: "[~@5 f3@12 e3@5 e3@6 c3@12 f3@6 f2@6 f3@11 e3@6 e3@6 f3@6 c3@6 c3@5 c3@6 f3@12 c3@6 c3@6 c3@11 a2@6 e3@5]/3",
  C: "~ a2@15 ~@8 a2@15 ~@9", D: "a2@23 ~@25",
})).s("gm_trombone").gain(0.25)

stack(piano, trombone)