Strudelify

I Want You

Bob Dylan

KeyF majorTempo130 bpm
0:00/0:00
// I Want You — Bob Dylan
// 130 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: track names are the Roland MT-32 patch names at their program numbers ("Clavi 1 T1, C6" on 21, "Synth Bass T5, C5" on 30, "Synth Brass 2 T8, C8" on 27), so with no bank select the whole file is read through the MT-32 patch table: ch 6 "Clavi 1 T1, C6" Clavi 3 -> clavinet; ch 6 "Clavi 1 T1, C6" Elec Org 1 -> drawbar organ; ch 2 "Harmonica T2, C2" Trumpet 2 -> trumpet; ch 2 "Harmonica T2, C2" Celesta 1 -> celesta; ch 3 "Trumpet 1 T3, C3" Trombone 1 -> trombone; ch 4 "Brs Sect 1 T4, C4" Vibe 1 -> vibraphone; ch 5 "Synth Bass T5, C5" Syn Bass 3 -> synth bass 1; ch 7 "Synth Bass 3 T6, C7" Harmo Pan -> pad warm; ch 8 "Synth Brass 2 T8, C8" Syn Brass 4 -> synth brass 2
// note: "Brs Sect 1 T4, C4" named as a brass, played on brass section (neither patch table reads its program as one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · clavinet · "Clavi 1 T1, C6"
const clavinet = note(`<
  ~@3 A B C D E F@2 G@2 H I J K L M N@2 O A O P O Q R S@2 ~@2 T B C D U F@2 V@2 W I J K X M Y@2 O A O P O Q R S@2 ~@2 T
  Z AA AB AC AD AE AF@2 ~@19 O A O P O Q R S@2 ~@2 T B C D U F@2 V@2 W I J K X M Y@2 O A O P O Q R S@2 ~@5
>`.pickRestart({
  A: "~@7 a4", B: "c5@2 c5@2 c5 c5@3", C: "d5 c5@2 d5@4 a4", D: "c5@2 c5 c5@2 c5@3", E: "d5 c5@2 c5@4 g4",
  F: "[a4@2 a4 a4@2 g4 a4@4 a4 bb4@4 g4]/2", G: "[~@3 g4 g4@2 g4@8 ~ a4]/2", H: "bb4@4 bb4@3 bb4", I: "bb4 a4@2 bb4@5",
  J: "~@2 bb4 bb4@2 bb4 bb4@2", K: "bb4@2 bb4 bb4@2 d4 d4@2", L: "a4@2 a4@2 a4@3 a4", M: "bb4 a4@2 a4@4 f4",
  N: "[g4@4 g4@10 ~ g4]/2", O: "a4!2 ~@2", P: "~@7 g4", Q: "~ a4@3", R: "g4 ~", S: "[~@4 bb4 a4 g4 a4@3 a4@2 ~@4]/2",
  T: "~@3 c5", U: "d5@2 c5@4 c5@8 a4!2", V: "[~@2 g4!2 g4@10 a4!2]/2", W: "bb4@3 bb4 bb4@3 bb4", X: "a4@2 g4@5 a4",
  Y: "[g4@3 f4 e4@10 ~ g4]/2", Z: "c5!4", AA: "d5 c5@2 d5@5", AB: "a4 a4@2 a4@2 a4@2 f4", AC: "a4 f4@3 ~@3 a4",
  AD: "c5@2 c5 c5@3 c5@2", AE: "d5@2 c5 d5@4 a4", AF: "[bb4 bb4@3 bb4@2 g4 a4@3 a4@6]/2",
})).s("gm_clavinet").gain(0.07)

// other · drawbar organ · "Clavi 1 T1, C6"
const drawbar_organ = note("<~@70 A B C D E F@2 G@2 H I J K L M N@2 ~@42>".pickRestart({
  A: "~ c5@3 bb4@2 a4@2", B: "c5@2 c5@2 c5 c5@3", C: "d5 c5@2 d5@4 a4", D: "c5@2 c5 c5@2 c5@3", E: "d5 c5@2 c5@4 g4",
  F: "[a4@2 a4 a4@2 g4 a4@4 a4 bb4@4 g4]/2", G: "[~@3 g4 g4@2 g4@8 ~ a4]/2", H: "bb4@4 bb4@3 bb4", I: "bb4 a4@2 bb4@5",
  J: "~@2 bb4 bb4@2 bb4 bb4@2", K: "bb4@2 bb4 bb4@2 d4 d4@2", L: "a4@2 a4@2 a4@3 a4", M: "bb4 a4@2 a4@4 f4",
  N: "[g4@2 g4@5 ~]/2",
})).s("gm_drawbar_organ").gain(0.07)

// other · trombone · "Trumpet 1 T3, C3"
const trombone = note(`<
  A B A ~ C D C D E@2 F@2 G H I J K L M@2 N ~ O ~ N P Q R@2 B S T C D C D E@2 F@2 G H I J K L M@2 N ~ O ~ N P Q R@2 B S
  T U V W X U Y Z@2 AA@2 AB C D C D E@2 F@2 G H I J K L M@2 N ~ O ~ N P Q R@2 B S T C D C D E@2 F@2 G H I J K L M@2 N ~
  O ~ N P Q R@2 B S AC ~@2
>`.pickRestart({
  A: "~@2 f4@3 f4@3", B: "~@3 f4", C: "a4", D: "a4@7 ~", E: "[f4@6 f4@4 ~ f4@4 e4]/2", F: "[~@2 e4 e4@4 ~]/2",
  G: "f4@4 f4@3 ~", H: "f4 ~@2 f4@5", I: "~ g4@3", J: "g4@2 ~ g4@2 ~@3", K: "f4@2 f4@2 f4@3 ~", L: "f4 ~@2 f4@4 ~",
  M: "[e4@2 e4@5 ~]/2", N: "f4!2 ~@2", O: "e4!2 ~@2", P: "~ f4@3", Q: "e4@3 ~@5", R: "[~@4 e4 ~@2 f4@3 f4@2 ~@4]/2",
  S: "~ f4 ~@2", T: "~@3 a4", U: "a4@3 a4", V: "a4 ~@2 a4@5", W: "f4@7 ~", X: "~ d4@3 ~@4", Y: "a4@2 ~ a4@4 ~",
  Z: "[f4@7 e4@3 e4@6]/2", AA: "e4@3 e4 e4@4", AB: "~ g4@3 ~@4", AC: "f4",
})).s("gm_trombone").gain(0.26)

// other · brass section · "Brs Sect 1 T4, C4"
const brass_section = note(`<
  A B A ~ C D E F G@2 H@2 I J K L M N O@2 ~@2 P ~ Q R S T@2 B U V C D E F G@2 H@2 I J K L M N O@2 ~@2 P ~ Q R S T@2 B U
  V W X Y ~ W Z AA@2 AB@2 AC C D E F G@2 H@2 I J K L M N O@2 ~@2 P ~ Q R S T@2 B U V C D E F G@2 H@2 I J K L M N O@2 ~@2
  P ~ Q R S T@2 B U AD ~@2
>`.pickRestart({
  A: "~@2 c4@3 c4@3", B: "~@3 c4", C: "f4", D: "f4@7 ~", E: "e4", F: "e4@7 ~", G: "[d4@6 d4@4 ~ d4@4 c4]/2",
  H: "[~@2 c4 c4@4 ~]/2", I: "d4@4 d4@3 ~", J: "d4 ~@2 d4@5", K: "~ e4@3", L: "e4@2 ~ e4@2 ~@3", M: "d4@2 d4@2 d4@3 ~",
  N: "d4 ~@2 d4@4 ~", O: "[c4 c4@2 ~]/2", P: "c4!2 ~@2", Q: "d4!2 ~@2", R: "~ d4@3", S: "c4@3 ~@5",
  T: "[~@4 c4 ~@2 c4@3 c4@2 ~@4]/2", U: "~ c4 ~@2", V: "~@3 f4", W: "e4@3 e4", X: "e4 ~@2 e4@5", Y: "d4@7 ~",
  Z: "e4@2 ~ e4@4 ~", AA: "[d4@7 c4@3 c4@6]/2", AB: "c4@3 c4 c4@4", AC: "~ e4@3 ~@4", AD: "c4",
})).s("gm_brass_section").gain(0.26)

// bass · synth bass 1 · "Synth Bass T5, C5"
const bass = note(`<
  A@6 B@2 C@2 D E F@2 G H I@2 J K A@2 B@2 C@2 L K A@6 B@2 C@2 D E F@2 G H I@2 J K A@2 B@2 C@2 L K A@4 M@2 N C M O F P@3
  Q A@2 B@2 C@2 D E F@2 G H I@2 J K A@2 B@2 C@2 L K A@6 B@2 C@2 D E F@2 G H I@2 J K A@2 B@2 C@2 L K A@3 R ~@2
>`.pickRestart({
  A: "f2@2 f2!2", B: "e2@2 e2!2", C: "d2@2 d2!2", D: "c2@2 g2!2", E: "c2@2 c2 c3", F: "bb2@2 bb2!2", G: "c3@2 c3!2",
  H: "c3!3 ~", I: "d3@2 d3!2", J: "c3 g2", K: "c2!4", L: "c2!2", M: "a2@3 e2", N: "d2@2 d2 a1", O: "a2@2 a2!2",
  P: "c3@3 c3 c3@2 c3@2", Q: "c3 c2@3", R: "f2",
})).s("gm_synth_bass_1").gain(0.26)

// bass · pad warm · "Synth Bass 3 T6, C7"
const bass_2 = note(`<
  A B A C A D E F G H I J K L I J G H I M A D E N G H I M A B A C A O E F G H I J K P I Q G H I R A C E F G H I S A C A
  C E N G T E F K U I M A C A O E V G J I W K J I H G X I D A F E V G X I C A D A D A Y E Z G J I P K J I AA G R I D A N
  E V G R I AB A B A AC@2
>`.pickRestart({
  A: "f2@2 f2@3 ~ c2@2 f2@2 f2@3 ~ c2@2", B: "f2@2 f2@3 ~ c2@2 c2@2 c2@2 eb2@2 e2@2",
  C: "f2@2 f2@3 ~ c2@2 c3@2 c3@2 eb3@2 eb3@2", D: "f2@2 f2@3 ~ c2@2 a2@2 bb2@2 b2@2 c3@2",
  E: "a2@2 a2@3 ~ e2@2 a2@2 a2@3 ~ e2@2", F: "a2@2 a2@3 ~ e2@2 c3@2 d3@2 eb3@2 e3@2",
  G: "d3@2 d3@3 ~ a2@2 d3@2 d3@3 ~ a2@2", H: "d3@2 d3@3 ~ a2@2 a3@2 a3@2 c4@2 c4@2",
  I: "c3@2 c3@3 ~ g2@2 c3@2 c3@3 ~ g2@2", J: "c3@2 c3@3 ~ g2@2 g3@2 g3@2 bb3@2 bb3@2",
  K: "bb2@2 bb2@3 ~ f2@2 bb2@2 bb2@3 ~ f2@2", L: "bb2@2 bb2@3 ~ f2@2 f3@2 f3@2 ab3@2 ab3@2",
  M: "c3@2 c3@3 ~ g2@2 bb2@2 bb2@2 a2@2 g2@2", N: "a2@2 a2@3 ~ e2@2 e3@2 e3@2 g3@2 g3@2",
  O: "a2@2 a2@3 ~ e2@2 e2@2 e2@2 g2@2 g2@2", P: "bb2@2 bb2@3 ~ f2@2 d3@2 eb3@2 e3@2 f3@2",
  Q: "c3@2 c3@3 ~ g2@2 c3@2 c3@2 db3@2 db3@2", R: "c3@2 c3@3 ~ g2@2 g2@2 g2@2 bb2@2 bb2@2",
  S: "c3@2 c3@3 ~ g2@2 e2@2 f2@2 gb2@2 g2@2", T: "d3@2 d3@3 ~ a2@2 d3@2 d3@2 c3@2 bb2@2",
  U: "c3@2 c3@3 ~ g2@2 g2@2 g2@2 bb2@2 b2@2", V: "d3@2 d3@3 ~ a2@2 a2@2 a2@2 c3@2 db3@2",
  W: "bb2@2 bb2@3 ~ f2@2 f2@2 f2@2 ab2@2 a2@2", X: "c3@2 c3@3 ~ g2@2 e3@2 f3@2 gb3@2 g3@2",
  Y: "a2@2 a2@3 ~ e2@2 e2@2 e2@2 g2@2 ab2@2", Z: "d3@2 d3@3 ~ a2@2 a2@2 a2@2 c3@2 c3@2",
  AA: "d3@2 d3@3 ~ a2@2 f3@2 g3@2 ab3@2 a3@2", AB: "f2@2 f2@3 ~ c2@2 c2@2 c2@2 eb2@2 eb2@2", AC: "f2@15 ~",
})).s("gm_pad_warm").gain(0.36)

// chords · synth brass 2 · "Synth Brass 2 T8, C8"
const synth_brass_2 = note(`<
  A B C D@2 A E F G H I J K@2 L J M G N J B D E O P H J L B@2 C@2 D O F@2 H P L J Q R N I P G J@2 D@2 O S P H I J A B A
  C O F M G O E Q J I J@2 B C S E M H J N K T L N H G J L D A S@2 G H L@2 A C A C A C O F P M J I U R N L P H I@2 B@2 S
  F H P N@2 D B D B V@2
>`.pickRestart({
  A: "[a3,c4,f4]!2 ~@2 [a3,c4,f4] ~ [a3,c4,f4] ~", B: "[a3,c4,f4]!2 ~ [a3,c4,f4]@2 ~@3",
  C: "~@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 ~@2", D: "[a3,c4,f4]@7 ~ [a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 ~@2",
  E: "~@2 [a3,c4,e4]@5 ~ [a3,c4,e4]@2 ~@2 [a3,c4,e4]@2 ~@2", F: "[a3,c4,e4]@7 ~ [a3,c4,e4]@2 ~@2 [a3,c4,e4]@2 ~@2",
  G: "~@2 [a3,d4,f4]@5 ~ [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 ~@2", H: "[a3,d4,f4]!2 ~@2 [a3,d4,f4] ~ [a3,d4,f4] ~",
  I: "[g3,c4,e4]@7 ~ [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2", J: "[g3,c4,e4]!2 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~",
  K: "[bb3,d4,f4]!2 ~ [bb3,d4,f4]@2 ~@3", L: "~@2 [g3,c4,e4]@5 ~ [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2",
  M: "[a3,d4,f4]!2 ~ [a3,d4,f4]@2 ~@3", N: "[g3,c4,e4]!2 ~ [g3,c4,e4]@2 ~@3", O: "[a3,c4,e4]!2 ~ [a3,c4,e4]@2 ~@3",
  P: "[a3,d4,f4]@7 ~ [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 ~@2", Q: "~@2 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 ~@2",
  R: "[bb3,d4,f4]@7 ~ [bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 ~@2", S: "[a3,c4,e4]!2 ~@2 [a3,c4,e4] ~ [a3,c4,e4] ~",
  T: "~@2 [f3,bb3,d4]@5 ~ [f3,bb3,d4]@2 ~@2 [f3,bb3,d4]@2 ~@2", U: "[bb3,d4,f4]!2 ~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~",
  V: "[a3,c4,f4]/2", // F
})).s("gm_synth_brass_2").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  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 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 C D
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!3 ~ x", C: "x!2 ~ x!3 ~ x", D: "x!2",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!126 [~@4 x ~@5 x!3 ~ x ~] [~ x ~ x] ~>").gain(0.71)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@3 B ~@3 B ~@7 A ~@3 B ~@7 A ~@11 C ~@3 A ~@3 C ~@3 A ~@7 B ~@3 C ~@3 A ~@7 A ~@3 B ~@3 B ~@3 B ~@3 C ~@3 B ~@3
  C ~@3 C ~@3 B ~@3 A ~@3 A ~@3 C ~@5
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~ x ~@6", C: "~@5 x ~@2",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@2 B A@2 B A@6 C A@6 B A@8 D A B A@3 B A@7 B@2 D B A B A@5 B@2 A@3 B A D A B A@13 D A B A B A@4 B A@6 D A@2 B
  A@2 B A@2 B A B A@4 D A@3 B A B A@2 B A B A@4 E
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!7", D: "x!2 ~ x!5", E: "~ x",
})).gain(0.71)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@2 A ~@2 A ~@13 A ~@10 A ~@3 A ~@7 A@2 ~ A ~ A ~@5 A@2 ~@3 A ~@3 A ~@15 A ~ A ~@4 A ~@9 A ~@2 A ~@2 A ~ A ~@8 A
  ~ A ~@2 A ~ A ~@5
>`.pickRestart({
  A: "~@7 x",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@15 B ~@15 B ~@15 B ~@15 B ~@15 B ~@15 B ~@15 A>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct("<~@127 [x!8] ~>").gain(0.71)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@127 [x!8] ~>").gain(3.62)

stack(
  clavinet, drawbar_organ, trombone, brass_section, bass, bass_2, synth_brass_2, kick, snare, low_tom, hihat, open_hat,
  crash, tambourine, cabasa
)

More by Bob Dylan