Strudelify

Handle With Care

Traveling Wilburys

KeyG majorTempo120 bpm
0:00/0:00
// Handle With Care — Traveling Wilburys
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@2 B C D E F G H I J K L E F M H I N O P Q R S T U V@2 W@2 X@2 Y@2 Z AA L E F M H I J K L E F M H I J K L E F M H I
  N O P Q R S T U V@2 W@2 X@2 Y@2 Z AA L E F M H I J K A@2 B C D E F M H I J K ~
>`.pickRestart({
  A: "[d3 ~@8 d4 d4@2 ~@6 a4 ~@2 d4@3 ~@9 d4@2 ~ d4@3 ~@6 d4@3, ~ d3@11 c3@13 ~@8 g2@10 a4@5, ~@3 d4@6 ~@3 d3@10 ~@2 [b2,d3]@11 ~ d3@11 ~, ~@6 [f#4,a4]@8 ~ d4@4 a4@4 ~@7 [f#4,a4]@5 ~@4 g4@9, ~@18 f#4@8 ~ d4@6 ~@6 d4@3 [f#4,b4]@6]/2", // Bm F#m B5
  B: "~@3 d4 ~@2 a4 ~@2 d4@3 ~@6 [f#4,a4] ~@2 d4@3, d3 [c3,d3], ~@4 d4@5 ~@6 d4@6 ~@3, ~@6 f#4@8 ~@5 [f#4,a4]@5, ~@7 a4@4 ~@13", // F#m Csus2 F#m
  C: "~@3 d4 ~@3 d4, [b2,d3] [g2,d3], ~ d4@2 ~@2 d4@2 ~, ~@3 f#4@4 ~@2 [f#4,g4,a4,b4]@3, ~@6 a4@5 ~@13", // Bm G5 Gmaj7
  D: "~@3 d4 ~@3 d4, d3 [c3,d3], ~ d4@2 ~@2 d4@2 ~, ~@6 f#4@7 ~@5 [f#4,a4]@6, ~@6 a4@5 ~@13", // Csus2 F#m
  E: "~@3 d4 ~@3 d4, [b2,d3]@11 ~ [g2,d3]@12, ~@3 d4@5 ~@7 d4@6 ~@3, ~ [f#4,a4] ~ [f#4,g4,a4,b4]", // Bm G5 F#m Gmaj7
  F: "~@3 d4 ~@3 d4, d3 c3, ~@3 d4@6 ~@3 d3@10 ~@2, ~@6 f#4@7 ~@2 d4@5 ~@4, ~@6 a4@5 ~@7 [f#4,a4]@6", // F#m
  G: "~@3 d4 ~@3 d4, [b2,d3]@10 ~@2 [g2,d3]@11 ~, ~ d4@2 ~@2 d4@2 ~, ~@6 f#4@12 [f#4,g4,a4,b4]@5 ~, ~ a4 ~@2", // Bm G5 Gmaj7
  H: "~@7 c4, c3@12 c3@11 ~, ~@3 c4@5 ~ c4@6 c4@6 ~@3, ~ [e4,g4]@2 [e4,g4]", // Em
  I: "~@3 g3 ~ e4 ~ e4, g2 ~, ~ g3@2 ~ e3@4, ~ [b3,d4] ~ [g4,b4]", // Bm G
  J: "~@6 [e4,g4] ~@2 c4@3 d3 ~@2 d4@3 ~@3 d4@3, c3@12 ~ d3@6 ~@5, ~ c4@2 ~@5, ~@7 [e4,g4]@7 ~@4 [f#4,a4]@5 ~", // Em F#m
  K: "g2@3 [g2,g3,b3,d4]@3 [g2,g3,b3,d4]@3 [g2,g3,b3,d4]@3 [g2,g3,b3,d4]@2 ~@10", // G
  L: "[d4,f#4,g4,b4] ~@8 d4@3 ~@9 d4@3, d3 [c3,d3], ~ d4@2 ~@2 d4@2 ~, ~@6 f#4@7 ~@5 [f#4,a4]@6, ~@6 a4@5 ~@13", // Gmaj7 Csus2 F#m
  M: "~@3 d4 ~@3 d4, [b2,d3]@11 ~ [g2,d3]@11 ~, ~ d4@2 ~@2 d4@2 ~, ~@6 f#4@12 [f#4,g4,a4,b4]@5 ~, ~ a4 ~@2", // Bm G5 Gmaj7
  N: "~@7 c4, c3@12 c3@11 ~, ~ c4@2 c4@2 c4@2 ~, ~ [e4,g4]@2 [e4,g4]", // Em
  O: "~@15 d4@3 [f#4,a4]@3 d4@2 ~, d3@6 d3@5 ~, ~ d4@2 d4@2 ~@3, ~ [f#4,a4]@2 ~", // F#m
  P: "~@3 g3 ~@3 g3, g2@11 ~ g2@11 ~, ~ g3@2 ~@2 g3@2 ~, ~ b3@3, ~@6 d4@5 ~@7 d#4@6",
  Q: "~ c4 ~ c4 ~ d4 ~ d4, c3@3 ~ d3@2 ~@2, ~ [e4,g4] ~ [f#4,a4]", // Em F#m
  R: "~ g3 d4 g3 ~ g3 ~ g3, g2@5 ~ g2@4 ~@2, ~ b3@3, ~@3 d#4",
  S: "~ c4 ~ c4 ~ d4 ~ d4, c3@5 ~ d3@3 ~@3, ~@6 [e4,g4]@7 ~@5 [f#4,a4]@6", // Em F#m
  T: "~ g3 ~ g3 ~ g3 ~ g3, g2@5 ~ g2@4 ~@2, ~@6 b3@8 ~ b3@9, ~ d4 ~ d#4",
  U: "~ c4 ~ c4 ~ d4 ~ d4, c3@5 ~ d3@3 ~@3, ~ [e4,g4] ~ [f#4,a4]", // Em F#m
  V: "[~@3 g3@3 ~@3 g3@3 ~@3 g3@3 ~@9 [g3,b3,d4]@3 [g2,g3,b3,d4,f4]@3 [g2,g3,b3,d4,f4]@3 [g2,g3,b3,d4,f4]@3 [g2,g3,b3,d4,f4]@3 [g2,g3,b3,d4,f4]@3 [g2,g3,b3,d4,f4]@2 ~, g2@10 ~@2 g2@9 g3@6 ~@21, ~@2 [b3,d4]@3 ~ [b3,d4]@3 ~@7, ~@4 g2 ~@3]/2", // G G7 Bm
  W: "[~@3 c4 ~@3 c4 ~@7 c4, c3@12 c3@12 c3@12 c3@11 ~, ~ c4@2 ~@2 c4@2 ~@2 c4@2 c4@2 c4@2 ~, ~@2 [e4,g4]@3 ~ e4@4 [e4,g4]@4 [e4,g4]@2, ~@6 g4@3 ~@7]/2", // Em
  X: "[~@3 g3 ~@3 g3 ~@7 g3, g2@6 g2@6 g2@6 g2@5 ~, ~ g3@2 ~@2 g3@2 ~@2 g3@2 g3@2 g3@2 ~, ~@3 [b3,d4]@4 ~@2 [b3,d4]@4 ~@2 [b3,d4,f4]@6 [b3,d4,f4]@3]/2", // Bm Bdim
  Y: "[~@15 c4, c3@6 c3@6 c3@6 c3@5 ~, ~ c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 ~, ~ [e4,g4]@2 [e4,g4]@2 [e4,g4]@2 [e4,g4]]/2", // Em
  Z: "~ [d4,f#4,a4] [d3,d4,f#4,a4]!6, d3 ~@3", // D
  AA: "[d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@3 [d3,d4,f#4,a4]@2 ~", // D
})).s("gm_acoustic_guitar_steel").gain(0.25)

// bass · acoustic bass
const bass = note(`<
  ~ A B A B A B A B C D E F G B A B C D H I J K L M L M N L O C P Q R C S T G B A B C D E F G B A B C D E F G B A B C D
  H I J K L M L M N L O C P Q R C S T G B A B C D E F G B A B A B A B C D E F ~
>`.pickRestart({
  A: "d2@3 d2@3 d2@3 d2 ~@2 c2@3 c2@3 c2@3 c2 ~@2", B: "b1@3 b1@3 b1@3 b1 ~@2 g1@3 g1@3 g1@3 g1 ~@2",
  C: "c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2 ~@2", D: "g1@3 g1@3 g1@3 g1 ~@2 e2@3 e2@3 e2@3 e2 ~@2",
  E: "c2@3 c2@3 c2@3 c2 ~@2 d2@3 d2@3 d2@3 d2 ~@2", F: "g1@3 g1@3 g1@3 g1@3 g1 ~@11",
  G: "d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 c2@3 c2@3 c2@3 c2 ~@2", H: "c2@3 ~ c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2 ~",
  I: "~ d2@3 d2@2 d2@3 d2@3 d2@3 ~ d2@2 d2@3 d2 ~@2", J: "~ g1@2 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@2 ~",
  K: "c2@3 ~ c2@2 c2@3 c2@2 ~ d2@3 d2@3 d2@3 d2@2 ~", L: "g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@2 ~",
  M: "c2@3 c2@3 c2@3 c2@2 ~ d2@3 d2@3 d2@3 d2@2 ~", N: "g1!8", O: "~ c2@2 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3 c2@3",
  P: "~ g1@2 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3", Q: "g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1@3 g1 ~@2", R: "c2!8", S: "d2!8",
  T: "d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2@3 d2 ~@2",
})).s("gm_acoustic_bass").gain(0.17)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D A E A F ~@3 G A E A F ~@18 H ~ A E A F ~@3 G A E A F ~@3 G A E A F ~@18 H ~ A E A F ~@3 G A B C D A E A F
  ~@3 G ~
>`.pickRestart({
  A: "~@7 c3", B: "~@5 a2 ~ [c3,g3], ~@3 d4", C: "~@21 c3@2 ~", D: "~@5 [a2,g3] ~ [c3,g3], ~@3 g2@3 d4@2",
  E: "~@5 [a2,g3] d4 [c3,g3], ~@9 g2@11 ~@4", F: "~@15 [a2,g3]@3 ~@3 [c3,g3]@2 ~, ~@9 g2@9 d4@5 ~", G: "~@8 g2@3 ~@13",
  H: "~ [d3,d4]@3 [d3,d4,a4]@3 [d3,d4,f#4,a4]@3 [d4,a4]@3 a4@2 ~ d4@2 ~@4 a4@2, f#4 ~@7", // D D5 D D5
})).s("gm_electric_guitar_clean").gain(0.25)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~ A@8 B C D E F@4 B G B H I J I K L M N@2 ~@6 O@2 P@4 B C D E P@4 B C D E F@4 B G B H I J I K L M N@2 ~@6 O@2 P@4 B C
  D E Q@8 B C D E ~
>`.pickRestart({
  A: "[~ d3@12 c3@11 b2@9 [g2,g4,b4]@15 ~@12 c3@12 b2@9 [g2,g4,b4]@15 d3@12 c3@12 b2@9 [g4,b4]@14 ~@13 c3@12 b2@9 [g2,g4,b4]@15, ~ d4@191, ~ [f#4,a4]@32 ~@15 d3@12 ~@69 g2@15 d3@12 ~@36, ~@49 [f#4,a4]@32 ~@15 [f#4,a4]@32 ~@17 [f#4,a4]@32 ~@15]/8", // G F#m
  B: "[c3,c4,e4,g4]", C: "[g3,b3,d4]@5 ~ [e3,e4,g4,b4]@6, g2 ~", D: "[c3,c4,e4,g4]@6 [d4,f#4,a4]@5 ~, ~ d3",
  E: "[g2,g3,b3,d4]@7 ~@5", // G
  F: "[~@4 c3@4 b2@3 [g2,g4,b4]@5 ~@4 c3@4 b2@3 [g2,g4,b4]@5, d3 ~@3 d3 ~@3, ~ d4@95, ~ [f#4,a4]@32 ~@16 [f#4,a4]@32 ~@15]/4", // G F#m
  G: "[g3,b3,d4]@11 ~@2 [e3,e4,b4]@11, g2@12 g4@11 ~", H: "~ [d3,d4,f#4,a4]@22 ~", I: "d4@5 ~ d#4@5 ~, [g3,b3]@11 ~",
  J: "~ [c4,e4,g4]@11 [d4,f#4,a4]@10 ~@2", K: "[c4,e4,g4]@11 ~ [d4,f#4,a4]@10 ~@2", L: "d4@11 ~ d#4@9 ~@3, [g3,b3]@7 ~",
  M: "[c4,e4,g4]@12 ~ [d4,f#4,a4]@9 ~@2", N: "[~@24 f4@23 ~, [g3,b3,d4]@47 ~]/2", O: "[[d4,f#4,a4]@23 ~]/2",
  P: "[d3@12 c3@12 b2@9 [g4,b4]@14 ~@13 c3@12 b2@9 [g2,g4,b4]@15, d4@95 ~, [f#4,a4]@32 ~@17 [f#4,a4]@32 ~@15, g2 ~@32 g2@15 d3@12 ~@36]/4", // G F#m
  Q: "[d3 d3@12 c3@11 b2@9 [g2,g4,b4]@15 ~@12 c3@12 b2@9 [g2,g4,b4]@15 d3@12 c3@12 b2@9 [g4,b4]@14 ~@13 c3@12 b2@9 [g2,g4,b4]@15, ~ d4@191, ~ [f#4,a4]@32 ~@15 d3@12 ~@69 g2@15 d3@12 ~@36, ~@49 [f#4,a4]@32 ~@15 [f#4,a4]@32 ~@17 [f#4,a4]@32 ~@15]/8", // G F#m
})).s("gm_drawbar_organ").gain(0.25)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@21 A B C D E F G H ~@32 A B C D E F G H ~@29>".pickRestart({
  A: "d4@10 ~@2 d#4@11 ~, [g3,b3]", B: "~ [c4,e4,g4]@11 [d4,f#4,a4]@10 ~@2", C: "d4@10 ~@2 d#4@11 ~, [g3,b3]@23 ~",
  D: "[c4,e4,g4]@11 ~ [d4,f#4,a4]@10 ~@2, a4 ~@23", E: "~@12 d#4@11 ~, d4@5 ~@7, ~ [g3,b3]@22 ~",
  F: "a4 f4 ~@11 [d4,f#4,a4]@9 ~@2, [c4,e4,g4]@11 ~@13", G: "[g3,b3,d4]@23 ~", H: "[g3,b3,d4,f4]@11 ~",
})).s("gm_string_ensemble_2").gain(0.25)

// other · taiko drum
const taiko_drum = note("<~@96 A@2>".pickRestart({
  A: "[~@9 g2@11 ~@4]/2",
})).s("gm_taiko_drum").gain(0.25)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A@11 B A@6 C B A D A@5 E A@7 E A@7 B A@7 B A@6 C B A D A@5 E A@7 E A@7 B A@11 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@7 x ~@11 x ~@4", D: "~@7 x ~@10 x ~@5", E: "~ x!7",
})).gain(0.28)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@7 B ~@23 A ~@7 A ~@7 B ~@23 A ~@11 A ~>".pickRestart({
  A: "~@3 x", B: "~@17 x ~@3 x ~@2",
})).gain(0.28)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!3 ~] ~@97>").gain(0.28)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 [~@5 x!2 ~] ~@39 [~@5 x!2 ~] ~@37>").gain(0.28)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B C D C@2 D E F G C H C@2 D E F G I H J K C L C@2 M C N O@2 P O@2 Q C@3 D E F G C H C@2 D E F G C H C@2 D E F G I
  H J K C L C@2 M C N O@2 P O@2 Q C@3 D E F G C H A B C D C@2 D E F G C H ~
>`.pickRestart({
  A: "~ x ~@2 x ~ x ~@3 x ~ x ~@2 x ~@2 x ~@2 x ~@2", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2", C: "x!8",
  D: "x ~@2 x ~@3 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", E: "x!7 ~", F: "~@2 x!6",
  G: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~", H: "x!5 ~@3", I: "x ~@2 x ~@3 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~",
  J: "~@6 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~", K: "x ~@2 x ~@3 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2",
  L: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~", M: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@3 x ~",
  N: "~@7 x ~@4 x ~@6 x ~@4", O: "x!4", P: "x ~@6 x ~@4 x ~@5 x ~@5", Q: "~@2 x!3 ~ x ~",
})).gain(0.28)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@3 A ~@7 A ~@5 A ~@5 A ~@7 A ~@7 A ~@3 A ~@7 A ~@5 A ~@5 A ~@11 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.28)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@29 A B C B@3 C B ~@32 A B C B@3 C B ~@21>".pickRestart({
  A: "x ~@6 x ~@4 x ~@5 x ~@5", B: "x!4", C: "x ~@5 x ~@5 x ~@6 x ~@4",
})).gain(0.4)

stack(
  acoustic_guitar_steel, bass, electric_guitar_clean, drawbar_organ, string_ensemble_2, taiko_drum, kick, snare,
  low_tom, pedal_hat, mid_tom, open_hat, crash, woodblocks
)

More by Traveling Wilburys