Strudelify

Blowing in the Wind

The Hollies

KeyF majorTempo120 bpm
0:00/0:00
// Blowing in the Wind — The Hollies
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 132 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · "Ges./Pia"
const piano = note(`<
  ~@2 A@4 B@4 C@8 D@2 E F G H@3 ~@4 I@4 J@4 K@8 L@2 M N O P@3 ~@4 I@4 J@4 K@8 L@2 M N O P@3 ~@15 Q L@2 M N O P@3 ~@9 Q
  L@2 M N O P@3 ~@8
>`.pickRestart({
  A: "[[a4,c5]@12 [f4,a4]@3 ~ [a4,c5]@5 ~ [bb4,d5]@14 [a4,c5]@3 ~ [g4,bb4]@6 [a4,c5]@14 [f4,a4]@3 ~ [e4,g4]@6 [d4,f4]@23 ~@3]/4", // Am F Am Bb Am Gm Am F …
  B: "[[a4,c5]@12 [f4,a4]@3 ~ [a4,c5]@5 ~ [bb4,d5]@14 [a4,c5]@5 ~ [g4,bb4]@2 ~@2 [e4,g4,c5]@29 ~@21]/4", // Am F Am Bb Am Gm C
  C: "[[a4,c5]@12 [f4,a4]@3 ~ [a4,c5]@5 ~ [bb4,d5]@14 [a4,c5]@3 ~ [g4,bb4]@6 [a4,c5]@14 [f4,a4]@3 ~ [e4,g4]@6 [d4,f4]@19 ~ [a4,c5]@3 ~ [a4,c5]@20 [a4,c5]@3 ~ [g4,bb4]@14 [f4,a4]@4 ~@2 [f4,a4]@3 ~ [e4,g4]@40 ~@4 [f4,a4]@6]/8", // Am F Am Bb Am Gm Am F …
  D: "[[g4,bb4]@12 [g4,bb4]@5 ~ [f4,a4]@3 ~ [e4,g4]@20 [e4,g4]@6]/2", // Gm F Em
  E: "[f4,a4]@4 ~@2 [f4,a4]@5 ~ [f4,a4]@5 ~ [f4,a4]@6", F: "g4@2 d4 f4@2 d4 f4@5 d4, e4@2 ~@2 f4 ~ d4@2 ~@4 d4@9 ~@3",
  G: "[d4,g4,bb4]@11 ~ [d4,g4,bb4]@5 ~ [d4,g4,bb4]@5 ~", // Gm
  H: "[[e4,g4,c5]@2 ~@2 [e4,g4,c5]@8 [e4,g4]@5 ~ [e4,g4,c5]@3 ~ [f4,a4]@33 ~@17]/3", // C Em C F
  I: "[[a5,c6]@12 [f5,a5]@3 ~ [a5,c6]@5 ~ [bb5,d6]@14 [a5,c6]@3 ~ [g5,bb5]@6 [a5,c6]@14 [f5,a5]@3 ~ [e5,g5]@6 [d5,f5]@23 ~@3]/4", // Am F Am Bb Am Gm Am F …
  J: "[[a5,c6]@12 [f5,a5]@3 ~ [a5,c6]@5 ~ [bb5,d6]@14 [a5,c6]@5 ~ [g5,bb5]@2 ~@2 [e5,g5,c6]@29 ~@21]/4", // Am F Am Bb Am Gm C
  K: "[[a5,c6]@12 [f5,a5]@3 ~ [a5,c6]@5 ~ [bb5,d6]@14 [a5,c6]@3 ~ [g5,bb5]@6 [a5,c6]@14 [f5,a5]@3 ~ [e5,g5]@6 [d5,f5]@19 ~ [a5,c6]@3 ~ [a5,c6]@20 [a5,c6]@3 ~ [g5,bb5]@14 [f5,a5]@4 ~@2 [f5,a5]@3 ~ [e5,g5]@40 ~@4 [f5,a5]@6]/8", // Am F Am Bb Am Gm Am F …
  L: "[[g5,bb5]@12 [g5,bb5]@5 ~ [f5,a5]@3 ~ [e5,g5]@20 [e5,g5]@6]/2", // Gm F Em
  M: "[f5,a5]@4 ~@2 [f5,a5]@5 ~ [f5,a5]@5 ~ [f5,a5]@6", N: "g5@2 d5 f5@2 d5 f5@5 d5, e5@2 ~@2 f5 ~ d5@2 ~@4 d5@9 ~@3",
  O: "[d5,g5,bb5]@11 ~ [d5,g5,bb5]@5 ~ [d5,g5,bb5]@5 ~", // Gm
  P: "[[e5,g5,c6]@2 ~@2 [e5,g5,c6]@8 [e5,g5]@5 ~ [e5,g5,c6]@3 ~ [f5,a5]@33 ~@17]/3", Q: "~@3 [f5,a5]",
})).s("gm_piano").gain(0.56)

// chords · acoustic guitar steel · "Gitarre"
const acoustic_guitar_steel = note(`<
  ~ A ~@24 B C D@2 E F G H G I J K L I G M N O P Q R S T U V W X Y B C D@2 E F G H G I J K L I G M N O P Q R S T U V W X
  Y E F G H G I J K L I G M N O P Q R S T U V W X Y B C D@2 B C D@2 ~@2 R S T U V W X Y B C D@2 Z AA AB AC
>`.pickRestart({
  A: "[f4,a4]", // F
  B: "[f3,bb3,d4]@3 ~ [f3,bb3,d4]@2 [f3,bb3,d4]@4 [f3,bb3,d4]@2 [f3,bb3,d4]@4 [f3,bb3,d4]@2 [f3,bb3,d4]@4 [f3,bb3,d4]@2", // Bb
  C: "[f3,a3,c4]@2 [f3,a3,c4] [f3,a3,c4]@2 [f3,a3,c4] [f3,a3,c4]@2 [f3,a3,c4] [f3,a3,c4]@2 [f3,a3,c4]", // F
  D: "[[f3,bb3,d4]@4 [f3,bb3,d4]@2 [f3,bb3,d4]@4 [f3,bb3,d4]@2 [f3,bb3,d4]@4 [f3,bb3,d4]@2 [f3,bb3,d4]@4 [bb3,d4] ~ [a3,c4]@4 [f3,a3,c4]@2 [f3,a3,c4]@4 [f3,a3,c4]@2 [f3,a3,c4]@4 [f3,a3,c4]@2 [f3,a3,c4]@4 [f3,a3,c4] ~, ~@11 f3@2 ~@11]/2", // Bb Am F
  E: "~@2 a3 c4@2 a3 f3@2 a3 c4@2 a3, f3 ~@3", F: "f3@2 bb3 d4@2 bb3 f3@2 bb3 d4@2 bb3",
  G: "f3@2 a3 c4@2 a3 f3@2 a3 c4@2 a3", H: "f3@2 a3 d4@2 a3 ~@2 a3 d4@2 a3, ~@2 f3 ~",
  I: "f3@2 bb3 d4@2 bb3 ~@2 bb3 d4@2 bb3, ~@2 f3 ~", J: "g3@2 c4 e4@2 c4 ~@2 c4 e4@2 c4, ~@2 g3 ~",
  K: "~@2 c4 e4@2 c4 e4@2 c4 g3@2 c4, g3 ~@3", L: "~@2 a3 c4@2 a3 ~@2 a3 c4@2 a3, f3 ~ f3 ~",
  M: "f3@2 a3 d4@2 a3 f3@2 a3 d4@2 a3", N: "f3@2 a3 c4@2 a3 ~@2 a3 c4@2 a3, ~@12 f3@7 ~@5",
  O: "g3@2 bb3 d4@2 bb3 ~@2 a3 c4@2 a3, ~@2 f3 ~", P: "~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3, e3@3 c4@3 e3@4 ~@2, ~@3 c4",
  Q: "~@2 g3 c4@2 g3 e3@2 ~ g3@2 e3, e3@7 ~@9 c4@6 ~@2", R: "bb3@2 d3 g3@2 bb3 d3@2 g3 bb3@2 g3",
  S: "c4@2 ~ g3@2 c4 ~@2 g3 c4@2 g3, ~@2 e3@2 ~@2 e3@5 ~", T: "d4@2 f3 a3@2 d4 f3@2 a3 d4@2 a3",
  U: "d4@2 bb3 f3@2 d4 bb3@2 ~ d4@2 bb3, ~@16 f3@5 ~@3", V: "d4@2 bb3 g3@2 d4 bb3@2 g3 d4@2 bb3",
  W: "e4@2 c4 g3@2 c4 e4@2 c4 g3@2 c4", X: "~@2 a3 c4@2 a3 ~@2 a3 c4@2 a3, f3@7 ~@5 f3@7 ~@5",
  Y: "f3@3 ~@3 f3@4 c3@2 f3@2 ~@2 f3@2 a3@2 f3@2 a3@2, ~@4 a3@6 ~@4 c3@5 ~@5",
  Z: "f3 bb3 d4 f4 d4 bb3 d4 bb3 f3 bb3 f3 bb3", AA: "f3 a3 c4 f4 c4 a3 f3 a3 c4 a3 c4 a3",
  AB: "f3 a3 c4 f4 c4 a3 c4 a3 ~ a3 c4 a3, ~@4 f3 ~", AC: "f3@5 ~@19",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A@2 B C D E B F G@2 B C H I J K L@2 M N E F M O P Q R S T U V T V W S T X Y S R S Z S AA AB AC AD AB Z T AD AB S AE R
  S T U V T V W S T X Y S R S Z S AA AB AC AD AB Z T AD AB S V@2 T V W S T X Y S R S Z S AA AB AC AD AB Z T AD AB S V R
  S T U R S T U ~@2 AD AB Z T AD AB S V R S T U T S@2 AF
>`.pickRestart({
  A: "[f1@7 c2]/2", B: "f1", C: "bb1", D: "f1@3 a1", E: "d2@17 ~ d2@6", F: "bb1@17 ~ bb1@6",
  G: "[c2@36 g2@3 ~ e2@6 c2@2]/2", H: "f1@11 ~ f1@6 a1@6", I: "d2@3 d2", J: "f1@17 ~ f1@6", K: "g1 f1",
  L: "[c2@35 ~ c2@6 c2@6]/2", M: "g1@17 ~ g1@6", N: "c2@3 c2", O: "c2@8 ~ c2@3", P: "f1@3 c2", Q: "f1@2 g1 a1",
  R: "bb1@9 ~ bb1@2 d2@6 f2@6", S: "f1@4 ~ f1 a1@3 c2@3", T: "bb1@4 ~ bb1 d2@3 f2@3", U: "f1@8 ~@2 f1@2 a1@6 c2@5 ~",
  V: "f1@9 ~ f1@2 a1@6 c2@6", W: "d2@4 ~ d2 f2@3 d2@3", X: "c2@8 ~@2 c2@2 e2@6 g2@5 ~", Y: "g2@4 ~ g2 e2@3 c2@3",
  Z: "d2@4 ~ d2 a1@3 d2@3", AA: "g1@8 ~@2 g1@2 f1@5 ~ f1@6", AB: "c2@4 ~ c2 e2@3 g2@3", AC: "c2@5 g2 e2@3 c2@3",
  AD: "g1@4 ~ g1 bb1@3 d2@3", AE: "f1@3 ~ f1@2 f1@4 f1@2 g1@6 a1@6", AF: "f1 ~@3",
})).s("gm_acoustic_bass").gain(0.56).pan(0.4)

// chords · synth strings 2 · "Fl„che"
const synth_strings_2 = note(`<
  A@3 B C D C B E@2 C B C D C F E@2 G H D B G H I@2 J K L M N O P Q P O R@2 P O P Q P S T@2 U@2 V W G H I@2 L K L M N O
  P Q P O R@2 P O P Q P S T@2 U@2 V W G H I@2 P O P Q P O R@2 P O P Q P S T@2 U@2 V W G H I@2 L K L M J K L M X@3 Y V W
  G H I@2 L K L M J Z@3
>`.pickRestart({
  A: "[f2,f3,a3,c4,f4]/3", B: "[bb1,bb2,f3,bb3,d4]", C: "[f2,f3,a3,c4,f4]", D: "[d2,d3,a3,d4,f4]",
  E: "[c2,c3,g3,c4,e4]/2", F: "[g2,g3,bb3,d4,g4] [f2,f3,a3,c4,f4]", G: "[g1,g2,g3,bb3,d4]", H: "[c2,c3,g3,c4,e4]",
  I: "[f2,f3,a3,c4,f4]/2", J: "[bb3,d4]@23 ~, f3 ~@23", K: "[f3,a3,c4]@23 ~", L: "[f3,bb3,d4]@23 ~", M: "[f3,a3,c4]",
  N: "[f4,a4], c4 ~@23", O: "[d4,f4,bb4]", P: "[c4,f4,a4]", Q: "[d4,f4,a4]", R: "[c4,e4,g4]/2",
  S: "[g3,bb3,d4] [a3,b3,c4,f4]", T: "[g3,c4,e4]/2", U: "[[bb3,d4] [c4,e4], g3@47 ~]/2", V: "[a3,d4,f4]",
  W: "[f3,bb3,d4]", X: "[~@3 e4 [bb3,d4]@2, [c2,c3,g3]@48 g3 ~@23, ~@12 c4@13 ~@11]/3", Y: "[c4,e4]",
  Z: "[[f2,f3,a3,c4,f4]@17 ~@7]/3", // F
})).s("gm_synth_strings_2").gain(0.3)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@45 A B C D E F G H@2 ~@4 I J K L M N O P I Q R S T U V W X Y Z AA AB AC AD@2 I J K L M N O P I Q R S T U V W X Y Z
  AA AB AC AD@2 ~@10 X Y Z AA AB AC AD@2 ~@8
>`.pickRestart({
  A: "~@2 c6 e6, e5, ~ g5@2 ~", B: "[bb5,d6]", C: "[c6,e6]@12 [d6,f6]@5 ~ [e6,g6]@6", D: "[d6,f6]@3 [c6,e6]",
  E: "[bb5,d6]@3 [a5,c6]", F: "[g5,bb5]@3 [f5,a5]", G: "[e5,g5]", H: "[a5@2 f5 ~, c5@3 ~]/2",
  I: "f3 a3 c4 f4 c4 a3 f3 a3 c4 f4 c4 a3", J: "f3 bb3 d4 f4 d4 bb3 f3 bb3 d4 f4 d4 bb3",
  K: "f3 a3 c4 f4 c4 a3 ~ a3 c4 f4 c4 a3, ~@3 f3 ~@2", L: "f3 a3 d4 f4 d4 a3 f3 a3 d4 f4 d4 a3",
  M: "f3 a3 c4 f4 c4 a3 f3 a3 c4 ~@2 a3, ~@9 f4@2 ~, ~@5 c4",
  N: "~ bb3 d4 f4 d4 bb3 ~ bb3 d4 f4 d4 bb3, f3@5 ~@7 f3@6 ~@6",
  O: "~ c4 e4 g4 e4 c4 ~ c4 e4 g4 e4 c4, g3@6 ~@6 g3@5 ~@7", P: "g3 c4 e4 g4 e4 c4 ~ c4 e4 g4 e4 c4, ~@12 g3@5 ~@7",
  Q: "~ bb3 d4 f4 d4 bb3 ~ bb3 d4 f4 d4 bb3, f3@5 ~@7 f3@5 ~@7",
  R: "f3 a3 c4 f4 c4 a3 ~@2 c4 f4 c4 a3, ~@2 f3 ~, ~@7 a3@2 ~@3",
  S: "~ a3 d4 f4 d4 a3 ~ a3 d4 f4 d4 a3, f3@4 ~@8 f3@5 ~@7", T: "f3 a3 c4 f4 c4 a3 ~ a3 c4 f4 ~ a3, ~@12 f3@7 ~ c4@4",
  U: "~ bb3 d4 g4 d4 bb3 ~ a3 c4 f4 c4 a3, g3 ~ f3 ~", V: "~ c4 e4 g4 e4 c4 ~ c4 e4 g4 e4 c4, g3@3 ~ g3@2 ~@2",
  W: "c4 ~ e4@2 g4@2 c5@2 ~@2 e4@2 c4@2 e4@2 g4@2 c5@2 g4@2 e4@2, ~@2 g4 ~@3", X: "[g4,bb4]",
  Y: "[c5,e5]@2 [d5,f5] [e5,g5]", Z: "[d5,f5] [c5,e5]", AA: "[bb4,d5]@11 ~", AB: "[bb4,g5]",
  AC: "[c5,e5]@2 [d5,f5] [c5,e5]", AD: "[a4,f5]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// other · alto sax · "Sax"
const alto_sax = note(`<
  ~@25 A B@2 C@2 ~@23 A B@2 C@2 ~@24 D@4 E@4 F@8 ~@7 A B@2 G@2 B@2 C@2 ~@9 H I@2 J@2 K L@3
>`.pickRestart({
  A: "~@12 f4 ~@5 eb4 ~@5", B: "[d4@10 d4@2 ~@4 c4@2 d4@2 ~@2 f4@5 ~@9 f4 ~@5 eb4 ~@5]/2",
  C: "[d4@9 ~ bb3@3 ~@3 c4@2 d4@2 ~@2 f4@4 ~@22]/2",
  D: "[a4@12 f4 ~@3 a4@5 ~ bb4@14 a4 ~@3 g4@5 ~ a4@13 ~ f4 ~@3 e4@4 ~@2 d4@25 ~]/4",
  E: "[a4@12 f4 ~@3 a4@5 ~ bb4@13 ~ a4 ~@3 g4@5 ~ e4@48 ~@2]/4",
  F: "[a4@12 f4 ~@3 a4@5 ~ bb4@14 a4 ~@3 g4@5 ~ a4@14 f4 ~@3 e4@5 ~ d4@20 a4@3 ~ a4@14 a4@4 ~@2 a4@4 g4@12 ~@2 f4@3 ~@3 f4@4 e4@47 ~@3]/8",
  G: "[d4@9 ~ bb3@3 ~@3 c4@2 d4@2 ~@2 f4@4 ~@10 f4 ~@5 eb4 ~@5]/2", H: "~@12 f5 ~@5 eb5 ~@5",
  I: "[d5@10 d5@2 ~@4 c5@2 d5@2 ~@2 f5@5 ~@9 f5 ~@5 eb5 ~@5]/2",
  J: "[d5@9 ~ bb4@3 ~@3 c5@2 d5@2 ~@2 f5@4 ~@10 f5@2 ~@4 eb5@2 ~@4]/2", K: "d5@9 ~ bb4@6 a4@2 bb4@5 ~",
  L: "[f5@49 ~@23]/3",
})).s("gm_alto_sax").gain(0.5).pan(0.6)

// chords · trombone · "Posaunen"
const trombone = note(`<
  ~@25 A B C B ~@24 A B C B ~@25 D@2 E@2 F@4 G@2 H@4 I@2 ~@7 A B C B A B C B ~@10 A B C B J K L@3
>`.pickRestart({
  A: "~@12 c4 ~@5 bb3 ~@5", B: "bb3@9 ~ f3@2 ~@12", C: "~@12 c4 ~@5 bb3@2 ~@4",
  D: "[a3@12 f3 ~@3 a3@6 bb3@14 a3 ~@3 g3@8]/2", E: "[a3@11 ~ f3 ~@3 e3@6 d3@25 ~]/2",
  F: "[[a3,c4]@12 [f3,a3] ~@3 [a3,c4]@6 [bb3,d4]@14 [a3,c4] ~@3 [g3,bb3]@6 [g3,c4]@48 ~@2]/4", // Am F Am Bb Am Gm C5
  G: "[[a3,c4]@12 [f3,a3] ~@3 [a3,c4]@5 ~ [bb3,d4]@13 ~ [d4,f4]@2 ~@2 [bb3,d4]@8]/2", // Am F Am Bb Dm Bb
  H: "[[a3,c4]@12 f3@2 ~@2 [a3,c4]@5 ~ [a3,d4]@19 ~ [a3,d4]@3 ~ [a3,c4]@14 [a3,c4] ~@5 [a3,c4]@3 ~ [bb3,d4]@14 [a3,c4]@11 ~, ~@12 a3 ~@83]/4", // Am D5 Am Bb Am
  I: "[[c4,e4]@47 ~]/2", J: "~@6 c4 ~@2 bb3 ~@2", K: "bb3@9 ~ f3@4 ~@2 f3 ~ f3@2 ~@4", L: "[f3@25 ~@11]/3",
})).s("gm_trombone").gain(0.57)

// drums · kick
const kick = s("bd").struct("<~@26 A@23 B A@3 B A@23 B A@3 B A@19 B A@3 B A@8 ~@2 A@3 B A@3 B A@6 C D>".pickRestart({
  A: "x ~@4 x!2 ~@5", B: "x ~@4 x!2 ~@2 x ~@2", C: "x ~@10 x", D: "x",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@25 A B@3 C B@7 D B@7 E B@7 F B@3 C B@7 D B@7 E B@7 F B@7 D B@7 E B@7 F B@3 C B@3 C ~@2 B@7 F B@3 C B@2 ~ G
>`.pickRestart({
  A: "~@5 x!2 ~@2 x ~@2", B: "~ x ~ x", C: "~@3 x ~@5 x ~ x", D: "~@3 x ~ x!2 ~@2 x ~@2", E: "~@3 x ~ x!2 ~@2 x ~ x",
  F: "~@2 x!2 ~ x!7", G: "x",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@114 [x!12] [x!9 ~@2 x] ~@14 [~@3 x!3 ~@3 x!3] ~>").gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~@18 [~ x ~ x]!8 [x ~ x!2 ~ x!2 ~ x!2 ~ x]!88 ~@2 [x ~ x!2 ~ x!2 ~ x!2 ~ x]!14 x ~>")
  .gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@115 [~@5 x] ~@16>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@114 [x!12] [x!10 ~@2] ~@14 [x!3 ~@3 x!3 ~@3] ~>").gain(0.42)

// drums · shaker
const shaker = s("sh").struct("<A B A@23 C D@4 E@23 F D@4 E@23 F E@23 F D@8 ~@2 E@7 F D@4 E@2 G@2>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!4", C: "x!12", D: "~@2 x ~@2 x ~@2 x ~@2 x", E: "x ~@4 x!2 ~@5",
  F: "x ~@4 x!2 ~@2 x ~ x", G: "x",
})).gain(0.3)

stack(
  piano, acoustic_guitar_steel, bass, synth_strings_2, string_ensemble_1, alto_sax, trombone, kick, snare, low_tom,
  hihat, mid_tom, high_tom, shaker
)

More by The Hollies