Strudelify
Blowing in the Wind cover art

Blowing in the Wind

Blowing in the Wind

Bob Dylan

KeyD majorTempo154 bpm
0:00/0:00
// Blowing in the Wind — Bob Dylan
// 154 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Melody" harpsichord (copy of ch 1 "Melody/piano" piano)
// note: Full arrangement: all 111 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(154/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 · "Chords #1/piano"
const piano = note(`<
  A B C D E F G H@2 I J K L I J M@2 I J K L N O P@2 I J K L I J Q@2 R@2 S L O T U@2 I J K L I J M@2 I J K L N O P@2 I J
  K L I J Q@2 R@2 S L O T U@2 I J K L I J M@2 I J K L N O P@2 I J K L I J Q@2 R@2 S L O T V@2 O W X Y Z AA
>`.pickRestart({
  A: "~@3 f#4", B: "[b3,g4]@3 [b3,g4]@3 [d4,f#4]@2", C: "[d4,e4]@3 [d4,e4]@3 [c#4,e4]@2",
  D: "[e4,f#4] [e4,f#4]@2 [d4,f#4]@3 [c#4,e4]@2", E: "d4@3 [d4,f#4]", F: "[d4,g4]@3 [d4,g4]@3 [d4,f#4]@2",
  G: "e4 e4@3 d4@2 c#4@2", H: "d4/2", I: "[d4,f#4]@3 [d4,f#4]@3 [d4,f#4]@2", J: "[d4,g4]@3 [b3,d4]@3 [b3,d4]@2",
  K: "[a3,f#4]@3 [a3,d4]@3 [a3,d4]@2", L: "d4@3 f#4", M: "[a4@10 ~ f#4@3 g4@2]/2", N: "[d4,f#4]@3 [d4,f#4]@3 [a3,d4]@2",
  O: "[b3,d4]@3 [b3,d4]@3 [b3,d4]@2", P: "[e4@10 ~ f#4@3 g4@2]/2", Q: "[a4@5 ~@2 f#4]/2",
  R: "[[b3,d4]@3 [b3,d4]@3 ~@2 e4@6 e4@2, ~@6 [b3,d4]@3 ~@7]/2", S: "[a3,d4] [a3,d4]@2 [f#3,a#3]@3 [f#3,a#3]@2",
  T: "[a3,c#4]@3 [e3,a3]@3 [e3,a3]@2", U: "[d4@5 ~@3]/2", V: "[d4@7 f#4]/2",
  W: "[a3,c#4] [a3,c#4]@2 [e3,a3]@3 [e3,a3]@2", X: "d4", Y: "f#4", Z: "a4", AA: "[f#4,a4,d5]",
})).s("gm_piano").gain(0.51)

// other · electric guitar clean · "Mid-Chords/pian"
const electric_guitar_clean = note(`<
  ~@4 A ~ B C@2 ~@3 D ~@2 E F ~@3 D ~@2 G H ~@3 D ~@2 E I ~ J ~ K ~@2 C@2 ~@3 D ~@2 E F ~@3 D ~@2 G H ~@3 D ~@2 E I ~ J
  ~ K ~@2 C@2 ~@3 D ~@2 E F ~@3 D ~@2 G H ~@3 D ~@2 E I ~ J ~ K ~@2 C D L M N O P@2
>`.pickRestart({
  A: "b3@3 b3@5", B: "d4 d4@2 c#4 b3@2 a3@2", C: "f#3@3 a3@3 f#3@2", D: "f#3@3 a3@3 [a3,d4]@2", E: "d4@3 e4@3 d4@2",
  F: "c#4@3 d4@3 e4@2", G: "d4@3 a3@3 d4@2", H: "c#4@2 ~ d4@3 e4@2", I: "c#4@3 e4@3 c#4@2", J: "c#4@3 a3@3 c#4@2",
  K: "b3@3 f#3@3 [b3,d4]@2", L: "d3", M: "e3 ~", N: "a3@3 a3@3 f#3@2", O: "a3@3 d4@3 a3@2",
  P: "[d4@3 f#4@3 [d3,d4]@10]/2", // D
})).s("gm_electric_guitar_clean").gain(0.8)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B C D A E F G@2 H G@3 H E@2 G H G@3 H E@2 G H G@3 H E@2 H I J K H L G@3 H G@3 H E@2 G H G@3 H E@2 G H G@3 H E@2 H
  I J K H L G@3 H G@3 H E@2 G H G@3 H E@2 G H G@3 H E@2 H I J K H L G M N O P G@2 Q
>`.pickRestart({
  A: "g2 d3 g3 d3", B: "a2 e3 a3 e3", C: "d3 a2 f#2 a#2", D: "b2 f#3 a2 f#3", E: "a2 e3 a3 a2", F: "d3 a2 d3 a2",
  G: "d2 a2 d3 a2", H: "g2 d3 g2!2", I: "a2 e3 a2!2", J: "d3 a2 f#3 c#3", K: "b2 f#2 b2 a2", L: "a2 e2 a1 e2",
  M: "d2 a2 d3 ~", N: "g2", O: "a2!2", P: "d2 g2 d3 a2", Q: "d2 ~@3",
})).s("gm_electric_bass_finger").gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<[x!4]!8 [x ~@2 x] [x!4]!98 x [x ~@5 x ~@4 x ~@12] ~@2>").gain(0.24)

// drums · ride
const ride = s("rd").struct(`<
  A B A B A B A B C B A B A B A B A D A E@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A F G ~@2
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!3 ~", C: "x ~ x!2 ~ x!2 ~ x ~@3", D: "x ~ x!3 ~ x ~ x!4",
  E: "x!5 ~@4 x ~ x", F: "~@6 x ~@5 x ~@5 x ~ x ~ x!2", G: "x ~@5 x ~@4 x ~@12",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B A B A B A B A B A B A B A B A B A C@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A D E ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@5 x ~ x", C: "~@3 x ~ x!2 ~ x!4", D: "x ~ x ~@2 x ~ x!3 ~ x", E: "~ x ~@2",
})).gain(0.24)

// drums · cowbell
const cowbell = s("cb").struct(`<
  [~@6 x!2 ~@10 x!2 ~@4]!17
  [~ x ~ x]
  [~@6 x!2 ~@10 x!2 ~@4]
  [~ x ~ x]!2
  [~@6 x!2 ~@10 x!2 ~@4]!86
  [x!2 ~@4 x!2 ~@4 x!2 ~@4 x!2 ~@4]
  [x!2 ~@22]
  ~@2
>`).gain(0.32)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<[~ x ~ x]!8 ~ [~ x ~ x]!8 ~ [~ x ~ x] ~@2 [~ x ~ x]!86 ~@4>").gain(2.82)

// drums · bongos
const bongos = s("bongo:18").struct("<~@17 [~ x ~@2] ~@90 x ~@2>").gain(0.63)

// drums · congas
const congas = s("conga:13").struct("<~@8 [~@3 x] ~@10 [~@3 x]!2 ~@90>").gain(1.02)

// drums · ht
const ht = s("ht").struct(`<
  A B A B A B A B C B A B A B A B A@3 D@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A E A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A F G ~@2
>`.pickRestart({
  A: "x!4", B: "x ~@5 x ~@5 x ~@5 x ~@4 x", C: "x ~@2 x", D: "x ~@5 x ~@4 x!2 ~@9 x ~", E: "x ~@2 x ~@2 x ~@2 x ~ x",
  F: "x!3 ~", G: "~@6 x ~@4 x ~@12",
})).gain(0.24)

stack(piano, electric_guitar_clean, bass, mid_tom, ride, tambourine, cowbell, vibraslap, bongos, congas, ht)

More by Bob Dylan