Strudelify

Billy 4

Bob Dylan

KeyF♯ majorTempo67 bpm
0:00/0:00
// Billy 4 — Bob Dylan
// 67 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 93 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Harmonic.
setcpm(67/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.

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@4 A B C B D E F G H E I G J B C B K B L B M E N G O E N G P Q F G H E I G R S T U V W X B Y Z AA U V S AB AC AD AE
  AF AE AG AE AH AI AJ AE AK AE AL AM AN AE AO AE AP AQ AR AE AL AS AT AU AA AV V S AW AC AX AY AZ@3
>`.pickRestart({
  A: "~@16 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@3 ~", B: "f#1@9 ~ f#1@2 g#1@2 a#1@2 c#2@7 ~ c#2@6 f#1@2",
  C: "b1@6 ~@2 b1@6 f#1@2 b1@2 f#1@2 b1@3 ~ b1@2 g#1@2 b1@2 g#1@2", D: "b1@7 ~ b1@6 f#1@2 b1@2 f#2@6 b2@8",
  E: "f#1 c#2", F: "g#1@14 ~@2 g#1 ~@3 g#1@5 ~ g#1@2 a#1@2 g#1@2", G: "f#1@10 ~@2 b1@3 ~ c#2@16",
  H: "b1@7 g#1 b1 ~ b1@2 b1 g#1 b1 g#1", I: "g#1@17 ~ g#1@2 f#1@2 g#2 ~ g#2@7 ~", J: "b1@6 g#1@2 b1@8 b1@8 b1@3 ~ b1@4",
  K: "b1@7 ~ b1@6 f#1@2 b1@2 f#2@6 d#2@2 c#2@2 b1@2 a#1@2",
  L: "b1@6 [c2,c#2] [d2,d#2,e2] d#1@2 d#1@2 d#1@2 d#1@2 e1@2 e1@2 e1@2 [e1,e2]@2 f1@2 f1@2 f1@2 [f1,f2]@2", // C#maj7 E F
  M: "b1@7 ~ b1@6 f#1@2 b1@7 ~ b1@7 ~", N: "b1@14 ~@2 b1 ~@3 b1@10 ~@2",
  O: "b1@14 ~@4 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", P: "b1@16 ~@2 e2@2 d#2@2 b1@2 f#2@2 e2@2 d#2@2 b1 ~",
  Q: "f#1@12 f#1@3 ~ c#2@16", R: "b1@3 g#1 b1@4 b1@3 b1 b0!4", S: "f#1@2 f#1@3 f#1 g#1 a#1 c#2@7 f#1",
  T: "b1@7 ~ b1@6 f#1@2 b1@2 f#1@2 b1@6 g#1@2 b1@2 g#1@2", U: "f#1@5 f#1 g#1 a#1 c#2@7 f#1",
  V: "b1@6 [c2,c#2] [d2,d#2,e2] d#1@2 d#1@2 d#1@2 d#1@2 e1@2 e1@2 e1@2 e2@2 f1@2 f1@2 f1@2 f2@2", // C#maj7
  W: "f#1@3 ~ f#1@6 f#1@2 g#1@2 a#1@2 c#2@14 f#1@2", X: "b1@7 ~ b1@6 f#1@2 e2@2 d#2@2 b1@2 f#1@2 e2@2 d#2@2 b1@2 g#1@2",
  Y: "b1@3 ~ b1@3 f#1 b1 f#2!7", Z: "f#1@6 g#1 a#1 c#2@7 f#1",
  AA: "b1@4 b1@3 ~ b1@6 f#1@2 b1@2 f#1@2 b1@6 g#1@2 b1@2 g#1@2", AB: "b1@4 b1@3 f#1 e2 d#2 b1 f#1 e2 d#2 b1 g#1",
  AC: "f#1@5 f#1 g#1 a#1 c#2@4 c#2@3 f#1", AD: "b1@8 b1@6 f#1@2 b1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1 ~",
  AE: "f#1 ~ f#1@2 ~@10 b1@2 c#2 ~ c#2@2 ~@12", AF: "b1 ~ b1@2 ~@14 b1@2 b1@2 b1@2 b1@2 d#1@2 f#1@2 c#1@2",
  AG: "b1 ~ b1@2 ~@14 g1 ~ g1 ~ g1 ~ g1 ~ g1@2 g#1@3 ~", AH: "b1 ~ b1@2 ~@14 e2@2 e2@2 e2@2 e2@2 d#2@2 d#2 ~ b1@2",
  AI: "f#1 ~ f#1@2 f#1@2 f#1@2 f#1@2 ~@4 b1@2 c#2@2 c#2@2 c#2@2 c#2@2 c#2@2 ~@6", AJ: "b1!5 ~@4 b0!4 d#1 f#1 c#1",
  AK: "b1 ~ b1@2 ~@14 a1 ~ a1 ~ a1 ~ a1 ~ a1@2 a#1@2 ~@2", AL: "b1 ~ b1@2 ~@14 e2@2 d#2@2 b1@2 e2@2 d#2@2 b1@2 a#1@2",
  AM: "f#1 ~ f#1@2 ~@10 b1@2 c#2@2 c#2@2 ~@12", AN: "b1!2 ~ c#2 d#1!4 e1!4 f1!4, ~@9 e2@4 f2@3",
  AO: "b1 ~ b1@2 b1@2 b1@2 d#2@2 b1@2 b1@2 b1@2 e2@2 b1@2 b1@2 b1@2 f#2@2 e2@2 d#2@2 b1@2",
  AP: "b1 ~ b1@2 ~@14 e2@2 d#2@2 b1@2 f#2@2 e2@2 d#2@2 b1@2", AQ: "f#1 ~ f#1 ~@11 b1@2 c#2@2 c#2@2 ~@12",
  AR: "b1!2 ~ d#1 a1!4 g#1!4 f#1!3 d#1, ~@9 g#2@4 ~@3", AS: "f#1 ~ f#1@2 ~@28", AT: "b1!8 b2!8",
  AU: "f#1@4 f#1@4 f#1 ~ d#1@2 g#1@2 a#1@2 c#2@14 f#1@2", AV: "f#1@2 f#1@2 f#1 d#1 g#1 a#1 c#2@7 f#1",
  AW: "b1@4 b1@3 f#1 e2 d#2 b1 f#1 f#2 e2 d#2 b1", AX: "b1@3 f#1 b1!3 f#1 b1!3 f#2 b2!3 f#2",
  AY: "b2@2 b2@2 b2 ~ b2@2 b2@2 b2 ~ b2@2 b2@2 b2@2 b1@2 b1@2 f#1@2 b1@2 ~ b1@2 b1@3", AZ: "[~@3 f#1@75 f#1@2 ~@16]/3",
})).s("gm_electric_bass_pick").gain(0.48)

// other · overdriven guitar · "Overd.gt"
const overdriven_guitar = note(`<
  ~@19 A B C D E F G@2 H I J K@4 ~@9 A L M D E N@2 O P Q R@3 S T U V@2 W ~@7 X Y ~@2 Z AA ~@2 AB AC AD ~@3 A AE AF D E D
  AG AH@3
>`.pickRestart({
  A: "f#3 f3", B: "d#3@11 ~ d#3@2 c#3@2 d#3@2 c#3@2 c#3@2 b2@2 c#3@2 b2@2 b2@2 a#2@2", C: "b2 a#2 f#2@2 f#3@4 f3@8",
  D: "f#3@31 ~", E: "a#3 g#3", F: "f#3@15 ~",
  G: "[~@4 f#4 ~@3 g#4@4 f#4 ~ g#4@5 ~ c#5@2 ~@2 g#4@4 f#4 ~ f#4@27 ~@2 c#4@2 ~ e4@2]/2",
  H: "d#5@4 c#5@7 ~ b4@6 c#5@9 ~ b4@4", I: "b4@5 ~ a#4@2 d#4@14 ~ f#4 a#4@2 b4@2 f#5@2 b4@2",
  J: "a#4@6 ~@2 d#5@2 f#5@2 g#5@15 ~ g#5@3 ~",
  K: "[f#5@27 ~ c#6@8 b5@3 ~ b5@4 a#5 ~ c#6@6 b5@2 a#5!2 b5@3 ~ b5@2 d#5@13 ~ c#5@8 g#4@8 f#4 ~ f#4@15 ~@19]/4",
  L: "d#3@11 ~ d#4@2 c#4@2 d#4@2 c#4@2 c#4@2 b3@2 ~ b3@2 ~ b3@2 a#3@2, ~@12 c#4 ~@3", M: "b3 a#3 f#3@2 f#3@4 f3@8",
  N: "[f#3@16 ~@4 a4@2 e4@2 a4@2 e4@2 e5 ~ e5@17 b4 d#5@8 f5@6 [b4,d#5] ~]/2", // B
  O: "d#5@3 ~ d#5@10 d#5@4 f#5@2 d#5@2 f#5@2 d#5@4 c5@2 d#5@2",
  P: "c5@4 [a#4,c#5,f#5]@4 g#4@4 f#4@2 g#4@6 [a#4,c#5,f#5]@4 g#4@3 ~ g#4@4", // F#
  Q: "e4@4 a#4 c#5 f#5 c#5 a#5@2 [f#5,g#5] f#5 g#5 f#5 b5 a#5", // F#sus2
  R: "[b5@2 c#6@6 b5@2 a#5@2 b5@2 c#6@6 b5@2 a#5@2 b5@2 c#6@3 a#5 c#6@4 c#6@2 f#5@2 a#5@4 c#6@2 a#5@3 g#5 a#5 c#6@2 a#5@2 ~ g#5 ~ a#5@2 g#5@3 ~ f#5@13 d#5 f#5@2 f5@9 d#5 f5@5 b4 d#5@2, ~@2 a#5 ~@59 c#5 ~@33]/3",
  S: "f5@2 d#5 ~ d#5@7 d#5 ~@2 d#5@4 ~@4 c#5@2 b4@2 c#5@2 b4@3 f#4, ~@12 f#5@4 ~@2 f#5@5 ~@9, ~@5 d#5 ~@2",
  T: "a#4@4 f#4@4 f4@5 ~ f4@2, ~@28 c#4 ~@3", U: "~@2 d#4@13 ~ b3@11 ~ a#3@4", V: "f#3/2",
  W: "[f4,f#4] [d#4,e4] [c#4,d4] ~@29", // F#maj7 Emaj7 Dmaj7
  X: "[c#4,f#4] ~@3 f#4 ~@3 [c#4,f#4] ~@3 [c#4,f#4] ~@3 [c#4,f#4] ~ f4 ~ f4 ~ f4 ~ [c#4,f4] ~@3 [c#4,f4] ~ c#4 ~", // F#5 C#
  Y: "[c#4,f4] d#4@13 ~@2", // C#
  Z: "~@4 [f#4,a#4] ~@3 [f#4,a#4] ~@3 [f#4,a#4]@2 f4@2 [f4,g#4] ~ g#4 ~ g#4 ~ g#4 ~ [f4,g#4] ~ [f4,g#4] ~ [f4,g#4] ~ f4 ~", // F# Fm
  AA: "[f4,g#4] [d#4,f#4]@13 ~@2", // Fm D#m
  AB: "~@4 [f#4,c#5] ~@3 [f#4,c#5] ~@3 [f#4,c#5] ~ f4 ~ [f4,c#5] ~ c#5 ~ c#5 ~ c#5 ~ [f4,c#5] ~ [f4,c#5] ~ [f4,c#5] ~ f4 ~", // F#5 C#
  AC: "[f4,c#5] [d#4,b4]@13 ~@2", AD: "[c#4,f#4,a#4]@4 [e4,f4,g#4,a4] [c#4,d4,d#4,f4,f#4,g4] [a#3,b3,c4,e4] a3 ~@24",
  AE: "d#3@31 ~", AF: "~ f#3 f#3@2 f3@4", AG: "b2@3 d#3@4 f#3@3 b3@6", AH: "[~@3 a#3@77 ~@16]/3",
})).s("gm_overdriven_guitar").gain(0.32)

// other · overdriven guitar · "Overd.gt" · soft notes
const overdriven_guitar_soft = note("<~@61 A ~@7 B C ~@2 D ~@3 E ~@15>".pickRestart({
  A: "~@3 [b3,c4] [a3,a#3] [g3,g#3] [f3,f#3] e3 ~@24", // Cmaj7 A#maj7 G#maj7 F#maj7
  B: "~@2 [c#4,f#4] ~ c#4 ~ [c#4,f#4] ~@3 [c#4,f#4] ~@3 [c#4,f#4] ~@3 c#4 ~ c#4 ~ c#4 ~@7 f4 ~", C: "~ b3@13 ~@2",
  D: "~@6 [f#4,a#4] ~@3 [f#4,a#4] ~@3 g#4@2 ~@2 f4 ~ f4 ~ f4 ~@7 g#4 ~", // F#
  E: "~@6 [f#4,c#5] ~@3 [f#4,c#5] ~@3 c#5 ~@3 f4 ~ f4 ~ f4 ~@7 c#5 ~", // F#5
})).s("gm_overdriven_guitar").gain(0.2)

// chords · overdriven guitar · "Overd.gt"
const overdriven_guitar_2 = note(`<
  ~@4 A B C D E ~@8 B C F G B C F G ~@16 B C F H I C F G B J F K B J F K L M N O L P N Q R ~@14 S B C F T B C F T U V@3
>`.pickRestart({
  A: "~@26 f#3!2 [f3,f#3] [d3,d#3,e3] [b2,c3,c#3] [g#2,a2,a#2]", B: "f#2@12 f#2 ~ f#2 ~ [c#3,g#3,c#4]@16, [c#3,f#3] ~",
  C: "[b2,f#3,b3]@30 [b2,f#3] ~", D: "[f#2,c#3,f#3] [c#3,g#3,c#4]", E: "[b2,f#3,b3]@5 ~@3",
  F: "[f#2,c#3,f#3] [c#3,f3,g#3,c#4]", G: "[b2,d#3,f#3,b3]@31 ~",
  H: "[d#3,f#3,b3]@12 d#3@2 c#3@2 d#3@2 c#3@2 c#3@2 b2@2 ~ b2@2 ~ b2@2 a#2@2, b2@11 ~ c#3 ~@3", // B
  I: "b2@2 a#2@2 f#2@4 ~@4 f#2 ~ f#2 ~ [c#3,g#3,c#4]@16, c#3 ~, f#2 ~@7", // C#5
  J: "[b2,f#3]@28 [b2,f#3] ~ [b2,f#3] ~, b3@31 ~", // B5
  K: "[b2,d#3,f#3,b3]@22 [b2,f#3] ~ [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2 [b2,d#3,f#3,b3]@2", // B B5 B
  L: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@4 [b2,c3,e3,f3] [a2,a#2,d3,d#3] ~@8 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@4 [f#3,g3,b3,c4] [e3,f3,a3,a#3] ~@4 [b2,f#3] ~ [b2,f#3] ~", // F#5 Cmaj7 D#maj7 C#5 Cmaj7 Fmaj7 B5
  M: "[b2,f#3,b3] ~ [b2,f#3,b3]@3 ~ b2 ~ [b2,f#3,b3]@3 ~@3 [b2,f#3,b3]@2 ~@2 b2 ~ [b2,f#3,b3]@3 ~@3 [f#3,b3]@2 [f#3,b3]@2 [f#3,b3]@2", // B5
  N: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@4 [b2,c3,e3,f3] [a2,a#2,d3,d#3] ~@4 c#3 ~ c#3 ~ [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@4 [f#3,g3,b3,c4] [e3,f3,a3,a#3] ~@4 [b2,f#3] ~ [b2,f#3] ~", // F#5 Cmaj7 D#maj7 C#5 Cmaj7 Fmaj7 B5
  O: "[b2,f#3,b3] ~ [b2,f#3,b3]@3 ~ b2 ~ [b2,f#3,b3]@3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@4 [b2,f#3,b3]@4", // B5
  P: "[b2,f#3,b3] ~ [b2,f#3,b3]@3 b2 ~@2 [b2,f#3,b3]@3 ~@3 [b2,f#3,b3]@2 ~ b2 ~@2 [b2,f#3,b3]@3 ~@3 [f#3,b3]@2 [f#3,b3]@2 [f#3,b3]@2", // B5
  Q: "[b2,f#3,b3] ~ [b2,f#3,b3]@3 b2 ~@2 [b2,f#3,b3]@3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@4 [b2,f#3,b3]@4", // B5
  R: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [b2,c3,e3,f3] [a2,a#2,d3,d#3] ~@24", // F#5 Cmaj7 D#maj7
  S: "[b2,f#3,b3]@4 [b3,f#4,b4]!4", T: "[b2,d#3,f#3,b3]",
  U: "[d#3,f#3,b3]@3 [d#3,f#3,b3]@4 [d#3,f#3,b3]@3 [d#3,f#3,b3]@6", V: "[~@3 [f#2,c#3,f#3]@77 ~@16]/3",
})).s("gm_overdriven_guitar").gain(0.22).pan(0.2)

// chords · electric guitar clean · "Clean gt"
const electric_guitar_clean = note("<A@2 B C D ~@3 E@2 F G H@2 I J K ~@15 L@2 M N K O P N K ~@52>".pickRestart({
  A: "[~@16 [a#3,c#4]@4 ~ c#4 ~ c#4 ~@2 d#4 f4 ~ c#4 g#3@2, ~@31 [f#2,c#3]@17 ~@16, ~@31 f#3@9 f#4@8 ~@2 c#4@6 d#4@8, ~@11 f#3 c#3@4]/2", // A#m F#5
  B: "c#3 b2 ~@2 b3@2 d#3 ~@6 d#3 g#2@2, f#3@3 ~, ~ b2@5 c#3 ~, ~@7 d#4@3 b3@5 ~, ~@2 d#3 ~",
  C: "c#4@4 ~ c#4 ~ c#4 ~@2 c#4 f4 ~ c#4 g#3 a#3, [f#2,c#3] ~, ~@4 f#4@4 ~ g#3@3 d#4@4, ~@3 f#3 c#3@4", // F#5
  D: "b3@2 g#3 b3 f#3 d#3 [b2,g#3] ~@2 g#3 b3 g#3 b3!2 b3@2, b2@12 ~@2 b3@5 ~@13, ~@2 b2!2", // E
  E: "[~@16 [a#3,c#4,f#4]@8 g#3@6 g#3 f#3, ~@31 f#3@16 ~ c#3@16]/2", // F#
  F: "~@4 g#3@2 b3@4 ~@4 d#4@4 g#3@2 b3@2 g#3@2 b3@2 c#4@5 ~, g#2@3 ~, ~ d#3@5 d#3@3 ~@7, ~@6 a#3 ~@3 g#3@4 ~@18",
  G: "[f#3,a#3,c#4,f#4,a#4]@8 ~@2 c#4 f4 ~ c#4 g#3 a#3, ~ [c#3,g#4], ~@9 g#3@3 d#4@4", // F# C#5
  H: "[b3@4 g#3@2 b3@2 f#3@7 ~@5 g#3@2 b3@6 b3@3 ~ [c#4,f#4]@8 f#4@2 c#4@2 ~@2 c#4@2 ~@4 c#4@2 f4@2 ~@2 c#4@2 g#3@2 a#3@2, f#4@23 ~@8 f#3@12 ~ f#3@4 [c#3,g#4,c#5]@16, b2@8 b2@8 [a#3,a#4]@8 ~ g#3@3 d#4@4]/2", // F#5 C#5 A#
  I: "~@2 g#3 b3@2 ~@2 d#4@2 g#3 b3 g#3 b3@2 a#3 b3, g#2@3 ~, b4@5 ~@3, ~ d#3@5 d#3@3 ~@7, ~@6 a#3 ~@3 g#3@4 ~@18",
  J: "[f#3,a#3,c#4,f#4]@8 ~@2 c#4 f4 ~ c#4 g#3 a#3, ~ c#3, ~@16 c#5@13 ~@3, ~@9 g#3@3 d#4@4", // F#
  K: "b3@2 g#3 b3 ~@2 g#3 ~@2 g#3 b3 g#3 b3!2 b3@2, b2@14 b3@5 ~@13, ~@8 f#3@7 ~ b2@16",
  L: "[~@16 [c#4,f#4]@4 f#4 c#4 ~ c#4 ~@2 c#4 f4 ~ c#4 g#3 a#3, ~@31 f#3@13 f#3@4 c#3@16, ~@16 a#3@8 ~ g#3@3 d#4@4]/2", // F#5
  M: "~@2 g#3 b3@2 g#3 ~ d#4@2 g#3 b3 g#3 b3@2 a#3 b3, g#2@3 ~, ~ d#3@5 d#3@3 ~@7, ~@6 a#3 ~@25",
  N: "~@3 c#3 a#3 f#3 c#3 ~@3 c#4 f4 ~ c#4 g#3 a#3, [f#3,a#3,c#4,f#4]@5 ~@2 c#4@2 g#3@3 d#4@4, ~ c#3, ~@16 c#5@13 ~@3", // F#
  O: "[c#4,f#4]@4 f#4 c#4 ~ c#4 ~@2 c#4 f4 ~ c#4 g#3 a#3, a#4@8 ~ g#3@3 d#4@4, ~@3 f#3 [c#3,g#4,c#5]@4", // F#5 C#5
  P: "~@2 g#3 b3@2 g#3 ~ d#4@2 g#3 b3 g#3 b3@2 a#3 b3, g#2@3 ~, b4@5 ~@3, ~ d#3@5 d#3@3 ~@7, ~@6 a#3 ~@25",
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.4)

// chords · piano · "Honky"
const piano = note(`<
  ~@8 A ~@7 B ~@7 C D E D F G H I J ~@3 K L ~@2 M ~@7 C ~@3 N O K I J ~@5 P Q R ~ S T U V W X Y Z AA AB AC AD AE ~@11 AF
  AG ~
>`.pickRestart({
  A: "~@22 [d#5,f#5] d#5 [a#4,c#5]@8", // D#m A#m
  B: "~@14 [f#4,b4,d#5] ~ [f#4,b4,d#5]@5 ~ [f#4,b4,d#5] ~ [d#5,f#5,b5]@2 ~@2 [d#5,f#5,b5]@3 ~", // B
  C: "~@9 d#5 e5@2 d#5@2 b4 ~@3 e5@2 d#5@2 b4 ~@9", D: "[a#3,c#4,f#4]@13 ~@3 [g#3,c#4,f4]@12 ~@4",
  E: "[f#3,b3,d#4]@7 ~", F: "~@18 d#5 ~ f#5 ~ b5 ~ b5 ~@3 b5 ~@3, [f#3,b3,d#4]@7 ~",
  G: "[a#3,c#4,f#4]@13 ~@3 [g#3,c#4,f4]@12 ~@4, [a#5,c#6] ~@7", // F# C# A#m
  H: "[f#3,b3,d#4]@22 [f#4,b4] ~ [f#4,b4]@2 ~@2 [f#4,b4]@2 ~@2", // B B5
  I: "[a#4,c#5,f#5]@7 ~ [a#4,c#5,f#5]@5 ~@3 [g#4,c#5,f5]@6 ~ d#5 f#5@2 f5@4 ~@2, ~@11 g#4 g#4@3 ~", // F# C#
  J: "[d#4,f#4,b4]@7 ~", K: "~@22 [f#4,b4] ~ [f#4,b4]@2 ~@2 [f#4,b4]@2 ~@2", L: "[a#4,c#5,f#5]@7 ~@25",
  M: "[f#4,b4,d#5]@6 [f#4,b4,d#5]@2 [f#4,b4,d#5]@6 [f#4,b4,d#5]@2 [f#4,b4,d#5]@6 d#5@2 [d#5,f#5,b5]@3 ~ [d#5,f#5,b5]@3 ~, ~@22 [f#4,b4]@5 ~@5", // B B5
  N: "~@18 d#5 ~ f#5 ~ b5 ~ b5 ~@3 b5 ~@3", O: "[a#5,c#6] ~@7", P: "~@24 b4@2 c#5@2 d#5@2 f#5 ~, ~@24 c#5 ~@7",
  Q: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5]@2 ~@12 [c#5,f5,g#5] ~ [c#5,f5,g#5]@2 ~@12", R: "[d#4,f#4,b4] ~@7",
  S: "~@6 [d#4,f#4]@2 [b2,d#4,f#4,b4] ~ [b2,d#4,f#4,b4]@2 [b2,d#4,f#4,b4]@2 [b2,d#4,f#4,a4]@4 [b2,d#4,f#4,a4]@6 [d#4,a4] ~@3 f#4@4, ~@13 [d#4,g#4]@3", // D#m B B7 D#dim G#5
  T: "[c#4,f#4] ~ [c#4,f#4]@2 ~@28", // F#5
  U: "~@6 b2@2 [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4,b4] ~ f#3@2 ~@6 [b2,b3]@2 b4@2 ~@4 b3@2, ~@4 f#3@2 b2 [d#4,a4]@5 [b2,f#4,d#5,f#5]@2 [b2,f#4,b4,d#5,f#5]@2, ~@7 f#4@2 [f#4,b4]@3 ~ b3@2 ~, ~@4 b2 [e5,f#5] ~@2", // B D#dim B B5 Esus2
  V: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4]@2 ~@28", // F#
  W: "~@16 f#5!11 f#5@3 f#5@2, ~@7 a#4@25, ~ b4@3, ~@9 c#5@5 f5@18, ~@3 d#5@5",
  X: "[f#3,c#4,f#4,a#4] ~ [f#3,f#4,a#4] ~@29", Y: "~@15 [f6,f#6] a#6@2 f#6@2 f6@2 e6@2 d#6@2 b5@2 a#5@2 e5@2",
  Z: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~@29", // F#
  AA: "~@10 [b5,e6] ~ [b5,d#6] ~ b5!2 [e6,a6] ~ [b5,d#6] ~ b5!2 [e6,a6] ~ d#6 ~ b5 ~ [b5,e6,a6] ~@3", // E5 B A5 B A5 Esus4
  AB: "[a#4,c#5,f#5] ~ [a#4,c#5,f#5]@2 ~@28", // F#
  AC: "~@8 [b5,d#6,b6] ~ [b5,d#6,b6]@2 [b5,d#6,b6]@2 [b5,d#6,b6]@2 [b5,d#6,b6]@2 [b5,d#6,b6]@2 [b5,d#6,b6]@2 [b5,d#6,b6]@2 b5@2 b5@2 [b5,g#6]@4, ~@12 [d#6,b6]@3 ~, ~@13 a6@2 ~", // B E G#m
  AD: "[a#4,c#5,f#5] ~ [c#5,f#5]@2 ~@28, ~@2 a#4 ~@29", // F# F#5
  AE: "~@10 a4 [b4,c5,d5,e5,f5] [g5,a5,b5] [c6,d6,e6] [f6,g6,a6] [b6,c#7,d7] [d#7,f#7]!2 [d#7,f#7,b7]!12 [d#7,f#7] ~, ~@8 b7 ~@7", // Bdim G C F Bm D#m B D#m
  AF: "~@15 g#5, ~@30 f#5 ~", AG: "~ f#5 ~ f#5 g#5@2 f#5 ~@2 d#5@3 c#5@4 ~@16, ~@9 c#5 ~@22",
})).s("gm_piano").gain(0.13).pan(0.4)

// chords · electric guitar clean · "Clean gt"
const electric_guitar_clean_2 = note("<~@9 A ~ B C D E F G ~@16 A ~ B C D E F G ~@52>".pickRestart({
  A: "~@16 [f4,g#4]@13 ~@3, ~@15 c#4@13 ~@4", B: "[a#3,c#4,f#4]@13 ~@3 g#4@16, a#4 ~", C: "[f#3,b3,d#4,f#4]@11 ~@5",
  D: "[a#3,c#4,f#4]@13 ~@3 [c#4,f4,g#4]@13 ~@3, a#4 c#5", E: "[g#3,b3,d#4]@7 ~@7 a#3 b3, g#2@3 ~, b4@5 ~@3",
  F: "c#4@15 ~ [c#4,f4,g#4,c#5]@13 ~@3", G: "[f#3,b3,d#4]@13 ~@3",
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.3)

// chords · overdriven guitar · "Overd.gt"
const overdriven_guitar_3 = note(`<
  ~@4 A B C B D ~@7 E B C B F B G B H ~@15 E B G B F B G B I J K J L J K B I M ~@21 N O B P B F B Q B H R S@3
>`.pickRestart({
  A: "~@28 [f4,f#4,c5,c#5] [d4,d#4,e4,a4,a#4,b4] [b3,c4,c#4,f#4,g4,g#4] [g#3,a3,a#3,d#4,e4,f4]", // C#maj7
  B: "[f#2,c#3,f#3,a#3] [c#3,g#3,c#4,f4]", // F# C#
  C: "[b2,f#3,b3,d#4]@21 ~ [f#3,b3,d#4]!3 ~ [f#3,b3,d#4]@2 [a#3,b3,c#4,d4] ~ [f#3,b3,d#4]!2", D: "[b2,f#3,b3,d#4]@15 ~",
  E: "~@31 [g#3,a3,d#4,e4]", // Emaj7
  F: "[b2,f#3,b3,d#4]@22 [f#3,b3,d#4]!3 ~ [f#3,b3,d#4]@4 [f#3,b3,d#4] [f#3,g#3,a3,b3,d#4,e4]", // B Emaj7
  G: "[b2,f#3,b3,d#4]@21 ~ [f#3,b3,d#4]!3 ~ [f#3,b3,d#4]@4 [f#3,b3,d#4]!2", H: "[b2,f#3,b3,d#4]@31 ~",
  I: "[b2,f#3,b3,d#4]@18 [b2,f#3,b3,d#4]@2 [b2,f#3,b3,d#4]@2 [b2,f#3]@2 [b2,f#3,b3,d#4]@3 ~ [b2,f#3,b3,d#4]@3 ~", // B B5 B
  J: "[f#2,c#3,f#3,a#3]!2 [c#3,g#3,c#4,f4]!2", // F# C#
  K: "[b2,f#3,b3,d#4]@8 [b2,f#3,b3,d#4]@8 [f#3,b3,d#4]@2 [f#3,b3,d#4]@3 ~ [f#3,b3,d#4]!3 ~ [f#3,b3,d#4]@4 [f#3,b3,d#4]!2, ~@16 b2@15 ~", // B
  L: "[b2,f#3,b3,d#4]@8 [b2,f#3,b3,d#4]@8 [f#3,b3,d#4]@6 [f#3,b3,d#4]!3 ~ [f#3,b3,d#4]@4 [f#3,b3,d#4]!2, ~@16 b2@15 ~", // B
  M: "[f#2,c#3,f#3]@6 [b2,c3,e3,f3] [a2,a#2,d3,d#3] ~@24", // F#5 Cmaj7 D#maj7
  N: "~@24 [d4,d#4,a4,a#4,d5,d#5] [c4,c#4,g4,g#4,c5,c#5] [a#3,b3,f4,f#4,a#4,b4] [g#3,a3,d#4,e4,g#4,a4] [f#3,g3,c#4,d4,f#4,g4] [e3,f3,b3,c4,e4,f4] [d3,d#3,a3,a#3,d4,d#4] [c3,c#3,g3,g#3,c4,c#4]", // D#maj7 C#maj7 F#maj7 Emaj7 Dmaj7 Cmaj7 D#maj7 C#maj7
  O: "[b2,f#3,b3]@28 [g3,g#3,d4,d#4,g4,g#4] [f3,f#3,c4,c#4,f4,f#4] [d#3,e3,a#3,b3,d#4,e4] [d3,a3,d4]", // B5 D#maj7 C#maj7 Emaj7 D5
  P: "[b2,f#3,b3,d#4]@30 [f#3,b3,d#4]!2", Q: "[b2,f#3,b3,d#4]@21 ~ [f#3,b3,d#4]!3 ~ [f#3,b3,d#4]@3 ~ [f#3,b3,d#4]!2",
  R: "[b2,f#3,b3,d#4]@3 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,d#4]@7", // B
  S: "[~@3 [c#3,f#3,a#3]@78 ~ [f#3,a#3] ~@13]/3", // F#
})).s("gm_overdriven_guitar").gain(0.22).pan(0.8)

// chords · acoustic guitar steel · "Steel gt"
const acoustic_guitar_steel = note("<~@24 A@8 B@8 C ~@52>".pickRestart({
  A: "[~@32 [c#4,f#4]@14 ~@2 f4@14 ~@2 d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~@2 d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~@2 d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~ [f#3,b3], ~@30 c#3@15 ~ c#3@15 ~ b2@15 ~@17 c#3@15 ~ c#3@15 ~ b2@15 ~@17 c#3@15 ~ c#3@15 ~ b2@15 ~@17 c#3@15 ~ c#3@15 ~ b2@2, ~@31 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~ [f#3,b3]@15 ~@17 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~ [f#3,b3]@15 ~@17 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~ [f#3,b3]@15 ~@17 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~@2]/8", // F#5 B5 F# C#5 B5 F# C#5 B5 …
  B: "[d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~@2 d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~@2 d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~@2 d#4@15 ~@17 [c#4,f#4]@14 ~@2 f4@14 ~ [f#3,b3], ~@30 c#3@15 ~ c#3@15 ~ d#3@15 ~@17 c#3@15 ~ c#3@15 ~ b2@15 ~@17 c#3@15 ~ c#3@15 ~ d#3@15 ~@17 c#3@15 ~ c#3@15 ~ b2@2, ~@31 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~ [g#3,b3]@15 ~@17 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~ [f#3,b3]@15 ~@17 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~ [g#3,b3]@15 ~@17 [f#3,a#3]@15 ~ [g#3,c#4]@15 ~@2]/8", // F#5 B5 F# C#5 G#m F# C#5 B5 …
  C: "d#4@15 ~@17",
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.8)

// other · guitar harmonics · "Harmonic"
const guitar_harmonics = note("<~@60 f#3 ~@31 [~@2 f#3@7 ~@7]>").s("gm_guitar_harmonics").gain(0.23).pan(0.6)

// other · baritone sax · "Bar.sax"
const baritone_sax = note("<~@61 [~@16 f#5 ~ f#5 ~ g#5 ~@3 a#5 ~@2 a#5 ~ g#5 ~@2] [a#5 ~@31] ~@30>")
  .s("gm_baritone_sax").gain(0.26).pan(0.8)

// drums · rim
const rim = s("rim").struct("<~@25 [~ x ~ x]!7 [~ x ~@2] ~@60>").gain(0.32)
// … 106 more lines

More by Bob Dylan