Strudelify
Blowin' in the Wind cover art

The freewheelin' Bob Dylan

Blowin' in the Wind

Bob Dylan

KeyC majorTempo136 bpm
0:00/0:00
// Blowin' in the Wind — Bob Dylan
// 136 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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
const piano = note(`<
  A@8 B C D@3 C E@4 F G H I J@2 K C L@2 M N O@2 P Q R S T U V@4 B C D@3 C E@4 F G H I J@2 K C L@2 M N O@2 P Q R S T U
  V@4 B C D@3 C E@4 F G H I J@2 K C L@2 M N O@2 P Q R S T U W@4 R S T U V@4 X@2
>`.pickRestart({
  A: "[c4@2 g3@2 ~@6 g3@2 [g4,e5]@2 c5@2 ~@2 g3@2 ~@6 g3@2 ~@2 [a4,c5,f5] ~@3 g3@2 ~@6 g3@2 ~@2 [b4,d5,g5] ~@3 g3@2 ~@2 [a4,c5,f5]@4 g3@2 [a4,c5,f5]@2 ~@4 g3@2 ~@2 c5@4 g3@2 ~@6 g3@2 ~@6 g3@2 ~@2 c5 ~@3 g3@2 ~@2 b4@4 g3@2 ~@2 b4 ~@3 g3@2 ~@8 c4@2 a4 ~, c3@7 ~ c3@23 c3@32 ~, [g4,c5,e5]@4 c4@7 ~ c4@6 g#3 ~ c4@6 ~@2 c4@6 ~@2 c4@7 ~ c4@7 ~ c4@6 ~@2 c4@7 ~ c4@6 ~@2 c4@6 ~@2 c4@7 ~ c4@6 ~@2 c4@6 ~@2 c4@6 ~@2 c4@6 g3@4 ~@2, ~@6 [g4,c5,e5]@6 c5 ~@3 [a4,c5,f5]@5 ~ [a4,c5,f5]@6 ~@4 [b4,d5,g5]@5 ~ [b4,d5,g5]@6 ~@4 [a4,c5,f5]@5 ~@11 [g4,c5,e5]@5 ~ [g4,e5]@8 c5@7 ~ c5@7 ~@3 [b4,d5,g5]@6 [d5,g5]@9 ~@7 [c5,f5]@9 ~, ~@80 [a4,f5]@5 ~ [a4,f5]@9 ~@17 [a4,c5,f5]@5 ~ a4@6 ~@4]/8", // C F G F C F G F …
  B: "c4@2 g3@2 ~@6 g3@2 c4@2 c5 ~, c3@7 ~, [g4,c5,e5]@2 c4@3 ~@3, ~@6 [g4,e5]@9 ~, ~@3 c5@3 ~@2", // C
  C: "[a4,c5,f5]@5 ~@5 c4@2 f4@2 a4 ~, f3@7 ~, f4@5 ~@3, ~@6 [c5,f5]@9 ~, ~@3 a4@3 ~@2", // F F5
  D: "[[g4,c5,e5]@6 ~@4 g3@2 a3@2 ~@2 [c5,e5]@5 ~@5 [f#3,g3] ~ g3 ~ g4 ~ [g4,c5,e5]@6 ~@4 g3@2 c4@2 c5 ~, c3@31 ~ c3@14 ~@2, c4@5 ~@3 c4@5 ~ c4@7 ~@3, ~@6 [c5,e5]@9 ~@7 [c5,e5]@9 ~@7 c5@6 ~@4, ~@6 g4@7 ~ g4@7 ~ g4@6 ~@10 [g4,e5]@8 ~@2]/3", // C Gmaj7 C
  E: "[[g4,c5,e5]@5 ~@5 g3@2 ~@2 g4 ~ [g4,c5,e5]@6 g4@4 g3@2 a3@2 e5@2 [c5,e5]@5 ~ c5@4 g3@2 c4@2 ~@2 [a4,f5]@5 ~ a4@4 c4@2 f4@2 a4 ~, c3@31 ~ c3@15 ~ f3@14 ~@2, c4@5 ~ c4@7 ~@3 c4@5 ~@11, ~@6 [c5,e5]@9 ~@7 [c5,e5]@8 ~@16 c5@7 ~ [c5,f5]@9 ~, ~@3 g4@3 ~@9 g4@4 [g4,e5]@4 ~ f4@5 ~@3]/4", // C Dm C F5 C
  F: "[g4,c5,e5]@6 [g4,c5]@4 g4@2 [b2,b3]@2 c5 ~, [c3,c4]@11 ~@5, ~@6 e5@9 ~", // C C5 B C
  G: "[a4,c5,e5]@5 ~ a4@4 e3@2 a3@2 a4 ~, a2@15 ~, a3@5 ~@3, ~@6 [c5,e5]@9 ~", // Am C
  H: "[g4,c5,e5]@6 g4@4 g3@2 c4@2 g4 ~, c3@7 ~, c4@5 ~@3, ~@6 e5@9 ~, ~@6 c5@7 ~@3", // C
  I: "[a4,d5,f5]@3 ~@2 a3 d4 ~, d3@7 ~, d4@5 ~@3, ~@6 [d5,f5]@9 ~, ~@3 a4@3 ~@2", // Dm
  J: "[[b4,d5,g5]@6 ~@4 d4@2 ~@2 b4 ~ [a4,c5,f5]@4 ~@8 b4@2 [g3,d5] ~, [g3,g4]@12 g3@17 ~@3, ~@6 [d5,g5]@9 ~@7 g5@9 ~, ~@6 b4@6 g4@8 d4@6 g4@5 ~, ~@11 [b4,d5]@3 ~@2]/2", // G F G5 G G5 Bm
  K: "c4@2 g3@2 ~@2 c5@4 g3@2 c4@2 c5 ~, c3@7 ~, [g4,c5,e5]@2 c4@3 ~@3, ~@6 [g4,e5]@9 ~", // C
  L: "[[g4,c5,e5]@6 ~@2 g3@2 ~@2 g4@2 ~@2 a4@5 ~@5 e3@2 a3@2 a4 ~, c3@15 ~ a2@15 ~, c4@9 ~ c4@4 ~@2 a3@11 ~@5, ~@6 e5@15 ~ a4@6 ~@4, ~@6 [g4,c5]@5 ~@3 c5@7 ~ [c5,e5]@9 ~]/2", // C C5 C
  M: "[g4,c5,e5]@5 ~ c5@4 g3@2 c4@2 c5 ~, c3@7 ~, c4@10 f#3 ~@5, ~@6 [g4,e5]@9 ~", // C
  N: "[a4,c5,f5]@6 ~@4 c4@2 f4@2 c5 ~, f3@15 ~, f4@5 ~@3, ~@6 [a4,f5]@9 ~, ~@6 c5@7 ~@3", // F Dm
  O: "[[b4,d5,g5]@6 ~@4 d4@2 ~@2 b4 ~@13 b4@3 ~, g3@31 ~, g4@10 ~@2 g4@8 d4@6 g4@5 ~, c5 ~@5 [d5,g5]@9 ~@7 g5@9 ~, ~@3 b4@3 ~@2 [a4,c5,f5]@3 [b4,d5]@3 ~@2]/2", // G G5 F Bm
  P: "f4@2 c4@2 ~@4 c4@2 ~@2 c5@2 f3 ~, f3@13 ~@3, [a4,c5,f5]@5 ~ f5@9 ~, b4 ~@3 f4@2 c5@4 f4@5 ~, ~@6 a4@7 ~@3", // F
  Q: "g4@2 d4@2 ~@2 b4@6 d4@3 ~, g3@15 ~, [b4,d5,g5]@6 [d5,g5]@9 ~, ~ g4@2 ~", // G G5
  R: "[c4,g4,c5,e5]@6 [g4,c5]@2 ~@2 g4@2 [b2,b3,c5]@2 c5 ~, c3@11 ~@5, b2 ~@5 e5@9 ~, ~@2 c4 ~", // C C5 Cmaj7
  S: "a3@2 e3@2 ~@2 a4@4 e3@2 a3@2 [a4,c5] ~, a2@7 ~, [a4,c5,e5]@2 a3@3 ~@3, ~@6 [c5,e5]@9 ~", // Am C
  T: "d4@2 a3@2 ~@4 a3@2 ~@2 d5@2 d3 ~, d3@3 ~, [a4,d5,f5]@4 d4@2 d5@4 d4@5 ~, ~@6 f5@9 ~, ~@6 a4@7 ~@3", // Dm
  U: "g4@2 d4@2 g4@2 ~ d4@2 g4@3 b4@2 d5 ~, g3@7 ~, [b4,d5,g5]@3 g5@4 ~, ~@3 d5@3 ~@2, ~@6 b4@3 ~@7", // G
  V: "[c4@2 g3@2 ~@2 c5@4 g3@2 ~@2 c5 ~@3 g3@2 ~@6 g3@2 ~@2 a4 ~@3 g3@2 ~@2 b4@4 g3@2 ~@2 b4 ~@2 g3@3 ~@2 a4@4 g3@2 c4@2 a4 ~, c3@63 ~, [g4,c5,e5]@5 ~ [g4,e5]@9 ~ [a4,c5,f5]@5 ~ [c5,f5]@9 ~ [b4,d5,g5]@6 [d5,g5]@9 ~@7 [c5,f5]@9 ~, a4 ~@3 c4@6 ~@2 c4@6 ~@2 c4@6 ~@2 c4@6 ~@2 c4@7 ~ c4@6 ~@2 c4@6 ~@6, ~@11 a4@3 ~@10 [a4,c5,f5]@3 ~@5]/4", // C F F5 G G5 F5 F
  W: "[c4@2 g3@2 ~@2 c5@4 g3@2 ~@2 c5 ~@3 g3@2 ~@6 g3@2 ~@2 a4 ~ f4@2 c4@2 ~@4 c4@2 ~@2 c5@2 f3 ~ g4@2 d4@2 ~@2 b4@6 d4@3 ~, c3@63 ~, [g4,c5,e5]@5 ~ [g4,e5]@9 ~ [a4,c5,f5]@5 ~ [c5,f5]@9 ~ [a4,c5,f5]@5 ~ f5@9 ~ [b4,d5,g5]@6 [d5,g5]@9 ~, a4 ~@3 c4@6 ~@2 c4@6 ~@2 c4@6 ~@2 c4@4 b4 ~@3 f4@2 [a4,c5]@4 f4@5 ~@5 g4@8 ~@4, ~@22 a4@6 ~@4 f3@13 ~@3 g3@15 ~]/4", // C F F5 F G G5 Am
  X: "[c4@3 g3@4 ~@8 g5@13 ~@4, [c3,c5]@7 ~, e5@10 ~ g4@17 ~@4, g4@7 c4@21 ~@4]/2", // C
})).s("gm_piano").gain(0.56).pan(0.3)

// bass · fretless bass
const bass = note(`<
  ~@32 A B C D E F G H@2 I J G K L M G K G N L O P Q B R S N@2 T U M B V W A B C D E F G H@2 I J G K L M G K G N L O P Q
  B R S N@2 T U M B V W A B C D E F G X A B C D E F G H@2 I ~@2
>`.pickRestart({
  A: "f2@3 f2@3 e2@2", B: "d2@11 ~ d2@4", C: "c2@5 ~ c2@5 ~ b1@4", D: "a1@3 c2", E: "d2@5 ~ d2@6 a1@4", F: "g1@3 b1",
  G: "c2@15 ~", H: "[~@16 c2 ~@15, c2@5 ~@11, ~@6 c3@25 ~]/2", I: "c2@6 c3@7 ~@3", J: "c2@6 c2 ~",
  K: "c2@11 ~ c2@2 ~@2", L: "c2@7 ~", M: "c2@10 ~@2 c2@3 ~", N: "c2@10 ~@2 c2 ~@3", O: "c2@5 ~ b1@2", P: "a1@11 ~ a1@4",
  Q: "c2@11 ~ c2@3 ~", R: "g2", S: "f2@6 e2@6 d2@3 ~", T: "c2@12 b1@3 ~", U: "a1@5 ~ a1@2", V: "g2@11 ~ g2@4",
  W: "f2@6 e2@5 ~ d2@3 ~", X: "~@3 c3@5, c2@5 ~@3",
})).s("gm_fretless_bass").gain(0.72)

// chords · pad warm
const pad_warm = note(`<
  ~@8 A@4 B@4 C@4 D E F@2 G@6 F@2 H I J K L I M@4 A@4 B@4 C@4 D E F@2 G@6 F@2 H I J K L I M@4 A@4 B@4 C@4 D E F@2 G@6
  F@2 H I J K L I N@4 J K L I M@4 ~@2
>`.pickRestart({
  A: "[[e4,g4]@15 ~ [f4,a4]@15 ~ [e4,g4]@31 ~, c4]/4", B: "[[e4,g4]@15 [f4,a4]@15 ~@2 [e4,g4]@32, c4]/4",
  C: "[[e4,g4]@14 ~ [f4,a4]@15 ~ [e4,g4]@15 ~@2 [c4,a4]@15 ~, c4@47 e4@15 ~@2]/4", D: "[c4,e4,g4]@15 ~",
  E: "[d4,f4,a4]@7 ~", F: "[[b3,d4]@15 ~ [a3,c4]@5 ~ [b3,d4]@9 ~, g3@15 ~]/2",
  G: "[[e4,g4]@15 ~ [f4,a4]@15 ~ g4@16 a4@15 ~ [e4,g4]@15 ~ [f4,a4]@14 ~@2, c4@47 ~, ~ e4 ~]/6", // Em F Em F
  H: "[a3,c4,f4]@11 ~ [a3,c4,f4]@4, f3", I: "[g3,b3,d4,g4]@15 ~", J: "[c3,g3]@3 b2, [c4,e4]@15 ~", K: "[a2,a3,c4,e4]",
  L: "[d3,a3,d4,f4]", M: "[[g3,c4,e4]@16 [a3,c4,f4]@15 ~ [b3,d4,g4]@15 ~ [a3,c4,f4]@15 ~, c3@63 ~]/4",
  N: "[[g3,c4,e4]@16 [a3,c4,f4]@15 ~ [a3,c4,f4]@11 ~ [a3,c4,f4]@4 [g3,b3,d4,g4]@15 ~, c3@63 ~, ~@2 f3 ~]/4", // C F G
})).s("gm_pad_warm").gain(0.48)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@42 A B A C A D E@2 A F@2 G H I J K L M A N O I J P ~@10 A B A C A D E@2 A F@2 G H I J K L M A N O I J P ~@20
>`.pickRestart({
  A: "e5@3 d5@3 c5@2", B: "f5", C: "g4", D: "f5@3 g5@3 a5@2", E: "g5/2", F: "[f5@15 e5@7 d5@6 c5@4]/2", G: "a4",
  H: "e5@3 e5@5", I: "f5@3 e5@3 c5@2", J: "d5", K: "c5@3 d5@4 ~", L: "e5@3 g5@3 a5@2", M: "g5@3 f5", N: "e5",
  O: "e5@6 f5@5 g5@5", P: "c5@8 d5@5 ~@3",
})).s("gm_string_ensemble_1").gain(0.48).pan(0.7)

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

// drums · rim
const rim = s("rim").struct("<~@31 A B@6 ~@3 A B@15 C B@3 C B@3 D B@6 ~@48>".pickRestart({
  A: "~@5 x!3", B: "~ x", C: "~@4 x!2 ~ x", D: "~@2 x!2",
})).gain(0.72)

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

// drums · low tom
const low_tom = s("lt").struct("<~@65 [~@3 x] ~@9 [~@6 x!2] ~@23 [~@3 x] ~@20>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@32 A@6 ~@4 B@2 C@5 D C E F C@12 G A@6 H ~@3 A@30 H ~ A@6 H ~@5>".pickRestart({
  A: "x!4", B: "~@2 x ~@2 x!2 ~", C: "~@2 x ~@3 x!2", D: "~ x ~@2", E: "~ x ~ x", F: "~@2 x!2 ~@2 x ~",
  G: "~@2 x!2 ~@2 x!2", H: "x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@65 [~@4 x!2 ~@2] ~@9 [~@4 x!2 ~@2] ~@23 [~ x ~@3 x ~@2] ~@20>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A@6 ~@31 A ~@33 A ~@7 A ~@8>".pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@65 [x!2 ~@6] ~@9 [x!2 ~@6] ~@22 [~@5 x ~@2] ~@21>").gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@5 A ~@27 A ~@5 A ~@3 A ~@7 A ~@15 A ~@5 A ~ A ~@3 A ~ A ~@5>".pickRestart({
  A: "x",
})).gain(0.48)

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

stack(
  piano, bass, pad_warm, string_ensemble_1, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  tambourine
)

More by Bob Dylan