Strudelify
Bye Bye Love cover art

1970 · Bridge Over Troubled Water

Bye Bye Love

Simon & Garfunkel

KeyA majorTempo170 bpm
0:00/0:00
// Bye Bye Love — Simon & Garfunkel
// 170 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A B C D E F E G E H I D E F E H J F I K B L M N@2 L@2 N O P@2 L@2 M Q N R E F E F E H S R E G J F J H S H B T M N O T
  M N O U P L@3 M N R E G E F E V S G J F E G J W S V B L X N Y L@2 N R Z@2 AA AB AA X N R E G E AC E F S G J G E G J V
  S H S V S V AD AE V AF ~
>`.pickRestart({
  A: "a1@3 ~@5 c2@4 d2@4", B: "a1 ~@3", C: "~@2 c2 d2", D: "a1@5 ~@3 b1@4 c#2@4", E: "d1@5 ~@3 d1@5 ~@3",
  F: "a1@5 ~@2 a1@2 ~@3 f#1@4, ~@11 a1@2 ~@3", G: "a1@4 ~@3 a1@2 ~@2 a1@5", H: "a1@5 ~@2 a1@2 ~@2 a1@5",
  I: "a1@5 ~@3 e1@6 ~@2", J: "d1@6 ~@2 d1@7 ~", K: "a1@7 ~ a1@4 ~@4", L: "e1@5 ~@3 g#1@4 b1@4, ~@7 g1@2 ~@7",
  M: "e1@5 ~@3 g#1@4 b1@3 ~, ~@7 g1@2 ~@7", N: "a1@5 ~@2 c2 c#2@4 e2@4", O: "a1@4 ~@3 c2 c#2@4 e2@3 ~",
  P: "d2@5 ~@3 f#2@4 a2@4, ~@7 f2@2 ~@7", Q: "e1@5 ~@3 g#1@4 b1@2 ~@2, ~@7 g1@2 ~@7", R: "a1 ~ b1 c#2, ~@7 a1@2 ~@7",
  S: "a1@7 ~ e1@7 ~", T: "e1@5 ~@2 g1 g#1@4 b1@4", U: "d2@5 ~@2 f2 f#2@4 a2@3 ~",
  V: "a1@4 ~@3 a1@2 ~@3 e1@4, ~@11 a1@2 ~@3", W: "a1@4 ~@3 a1@2 ~@3 f#1@3 ~, ~@11 a1@2 ~@3",
  X: "e1@4 ~@4 g#1@4 b1@3 ~, ~@7 g1@2 ~@7", Y: "a1@4 ~@3 c2 c#2@4 e2@4", Z: "d2 ~ f#2 a2, ~@7 f2@2 ~@7",
  AA: "e1@4 ~@3 g1 g#1@4 b1@4", AB: "e1 ~ g#1 b1, ~@7 g1@2 ~@7", AC: "a1@4 ~@3 a1@2 ~@2 a1 e1@3 ~",
  AD: "a1@6 ~@2 a1@7 ~", AE: "e1@4 ~@3 e1@2 ~@2 e1@5", AF: "a1@3 ~@3 a1@5 ~@5",
})).s("gm_electric_bass_pick").gain(0.45).pan(0.6)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@86 A B C D E F G H I J K L M N O P@2 ~@23 Q@2>".pickRestart({
  A: "~@3 a5@5 [g#5,b5] ~@3 [f#5,a5]@2 ~@2, ~@2 c#6@5 ~@9", B: "[g#5,b5]@5 ~ [g#5,b5]@5 ~@5",
  C: "~@2 [g#5,b5]@2 ~@2 [g#5,b5]@2 [f#5,a5]@3 ~ [e5,g#5]@2 ~@2", D: "[c#5,e5,a5]@5 ~ [c#5,e5,a5]@5 ~@5",
  E: "~@2 [a5,c#6]@5 ~ [g#5,b5] ~@3 [f#5,a5] ~@3", F: "[g#5,b5]@5 ~ [g#5,b5]@7 ~@3",
  G: "~@2 [g#5,b5]@2 ~@2 [g#5,b5]@2 [f#5,a5] ~@3 [e5,g#5] ~@3", H: "[c#5,e5,a5]@5 ~ [c#5,e5,a5]@10",
  I: "~@2 [c#5,a5]@5 ~ [d5,b5] ~@3 [e5,c#6]@2 ~@2", J: "[f#5,d6]@5 ~ [f#5,d6]@6 ~@4",
  K: "~@2 [f#5,d6]@3 ~ [f5,c#6] ~ [f#5,d6]@2 ~@2 [g5,d#6]@2 ~@2", L: "[g#5,e6]@5 ~ [g#5,e6]@10",
  M: "~@2 [g#5,e6]@6 [f#5,d6] ~@3 [e5,c#6] ~@3", N: "[e5,c#6]@3 [d5,b5]@5",
  O: "~@2 [d5,b5]@6 [c#5,a5] ~@3 [b4,g#5]@2 ~@2", // G F#m E
  P: "[c#5@7 ~@7 g5@16 ~@2, a5@11 e5@19 ~@2, ~@4 c#5@11 ~, ~@6 a5@9 ~]/2",
  Q: "[~@6 [f#5,b5]@13 ~@13, a4@3 ~@13, ~@3 c#5@16 ~@13, ~@4 e5@15 ~@13]/2", // B5
})).s("gm_overdriven_guitar").gain(0.4)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I H J K I H I F I H L M N O P Q M O R Q M S T U V U V W X I Y I Y I H Z K I H I AA I AB J M N O R Q M
  O R Q M S T O R O R Q AC I H I H I H J K I H I H I H J M N O R Q AD O R Q AE S T O R O R Q AF G H I H I H J K I H I AG
  I H J M AH M J M Q V Q AI ~
>`.pickRestart({
  A: "[a2,c#3,e3,a3]@2 ~@6 [c3,e3,g3,c4]@2 ~@2 [d3,f#3,a3,d4] ~@3", // A C D
  B: "a2@3 [c#3,e3,a3] ~@3 [c#3,e3,a3] ~@3 [c#3,e3,a3] ~@3 [c#3,e3,a3]", // A
  C: "~@3 [a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] [c3,e3,g3,c4] ~@3 [d3,f#3,a3,d4] ~@3", // A C D
  D: "a2@3 [c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] [c#3,e3,g3,a3,c#4] ~@2 [c#3,e3,g3,a3,c#4]!2 ~@2 [c#3,e3,g3,a3,c#4]", // A A7
  E: "d3 ~@3 [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4]@2 ~@2", // D
  F: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] c#3 ~ [e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] [c#3,e3,a3,c#4]@2 ~@2", // A
  G: "[d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4]@2 ~@2", // D
  H: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@2 [c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4]!2 ~@3", // A
  I: "[d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3 [d3,f#3,a3,d4] ~@3", // D
  J: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@3 [b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@3", // A E
  K: "[a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@2 [a2,c#3,e3,a3] ~@3 [a2,c#3,e3,g3,a3]!2 ~@3", // A A7
  L: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@3 [b2,e3,g#3,b3] ~@3 [e3,b3]@2 ~@2, ~@3 b2, ~@12 g#3 ~@3", // A E E5
  M: "[a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@2 [a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3]!2 ~@3", N: "[a2,c#3,e3,a3] ~@7",
  O: "[g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3] ~@3", // E
  P: "[g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3] ~@2 [g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3] [g#2,b2,e3,g#3]@2 ~@2", // E
  Q: "[a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@3", // A
  R: "[g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3] ~@2 [g#2,b2,e3,g#3] ~@3 [g#2,b2,e3,g#3]!2 ~@3", // E
  S: "[a2,d3,f#3,a3] ~@3 [a2,d3,f#3,a3] ~@3 [a2,d3,f#3,a3] ~@3 [a2,d3,f#3,a3] ~@3", // D
  T: "[a2,d3,f#3,a3] ~@3 [a2,d3,f#3,a3] ~@2 [a2,d3,f#3,a3] ~@3 [a2,d3,f#3,a3]!2 ~@3", // D
  U: "[b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@3", // E
  V: "[b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@2 [b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3]!2 ~@3", // E
  W: "[a2,c3,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@3 [a2,c#3,e3,g3,a3] ~@3 [a2,c#3,e3,g3,a3] ~@3", // A A7
  X: "[a2,c#3,e3,g3,a3] ~@3 [a2,c#3,e3,g3,a3] ~@2 [a2,c#3,e3,g3,a3] ~@3 [a2,c#3,e3,g3,a3]!2 ~@3", // A7
  Y: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@2 [c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] [c#3,e3,a3,c#4]@2 ~@2", // A
  Z: "[c#3,e3,a3,c#4]@2 ~@2 [c#3,e3,a3,c#4] ~@3 [b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@3", // A E
  AA: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@2 [c#3,e3,a3,c#4]@2 c#3 ~ [e3,a3,c#4] [c#3,e3,a3,c#4]@2 ~@2", // A
  AB: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@2 [c#3,e3,a3,c#4] ~ [c#3,c#4] ~ [e3,a3] [c#3,e3,a3,c#4] ~@3", // A C# A5 A
  AC: "[a2,c#3,e3,g3,a3] ~@3 [a2,c#3,e3,g3,a3] ~@2 [a2,c#3,e3,g3,a3] ~ a2 ~ [c#3,e3,g3,a3] [a2,c#3,e3,g3,a3] ~@3", // A7
  AD: "[a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@2 [a2,c#3,e3,a3] ~ a2 ~ [c#3,e3,a3] [a2,c#3,e3,a3] ~@3", // A
  AE: "[a2,c#3,e3,a3] ~@3 [a2,c#3,e3,a3] ~@2 [a2,c#3,e3,a3] ~ [a2,a3] ~ [c#3,e3] [a2,c#3,e3,a3] ~@3", // A C#m A
  AF: "[a2,c#3,e3,a3] ~@3 [a2,c#3,e3,g3,a3] ~@2 [a2,c#3,e3,g3,a3] ~@3 [a2,c#3,e3,g3,a3]!2 ~@3", // A A7
  AG: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4] ~@2 [c#3,e3,a3,c#4]@2 ~@2 [c#3,e3,a3,c#4] [c#3,e3,a3,c#4]@2 ~@2", // A
  AH: "[c#3,e3,a3,c#4] ~@3 [c#3,e3,a3,c#4]@2 ~@2 [b2,e3,g#3,b3] ~@3 [b2,e3,g#3,b3] ~@3", // A E
  AI: "[a2,c#3,e3,a3] ~@5 [a2,c#3,e3,a3] ~@9", // A
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.7)

// other · acoustic guitar steel · "CLEAN GTR"
const acoustic_guitar_steel_2 = note(`<
  A B C D E F E G E H I D E F E G J F I K B L M N@2 L@2 N O P@2 L@2 M Q N R E F E F E H S R E G J T J H S H B U V N O U
  M N O P@2 L@3 M N R E G E F E W S G J F E G J T S W B L X N Y L X N R Z@2 X@3 AA N R E G E AB E F S G J G E G J W S H
  S W S W AC AD W AE ~
>`.pickRestart({
  A: "a3@3 ~@5 c4@4 d4@4", B: "a3 ~@3", C: "~@2 c4 d4", D: "a3@5 ~@3 b3@4 c#4@4", E: "d3@5 ~@3 d3@5 ~@3",
  F: "a3@5 ~@2 a3@2 ~@3 f#3@4, ~@11 a3@2 ~@3", G: "a3@4 ~@3 a3@2 ~@2 a3@5", H: "a3@5 ~@2 a3@2 ~@2 a3@5",
  I: "a3@5 ~@3 e3@6 ~@2", J: "d3@6 ~@2 d3@7 ~", K: "a3@3 ~ a3@2 ~@2", L: "e3@5 ~@3 g#3@4 b3@4, ~@7 g3@2 ~@7",
  M: "e3@5 ~@3 g#3@4 b3@3 ~, ~@7 g3@2 ~@7", N: "a3@5 ~@2 c4 c#4@4 e4@4", O: "a3@4 ~@3 c4 c#4@4 e4@3 ~",
  P: "d4@5 ~@2 f4 f#4@4 a4@3 ~", Q: "e3@5 ~@2 g3 g#3@4 b3@2 ~@2", R: "a3 ~ b3 c#4, ~@7 a3@2 ~@7", S: "a3@7 ~ e3@7 ~",
  T: "a3@5 ~@2 a3@2 ~@3 f#3@3 ~, ~@11 a3@2 ~@3", U: "e3@5 ~@2 g3 g#3@4 b3@4", V: "e3@5 ~@2 g3 g#3@4 b3@3 ~",
  W: "a3@4 ~@3 a3@2 ~@3 e3@4, ~@11 a3@2 ~@3", X: "e3 ~ g#3 b3, ~@7 g3@2 ~@7", Y: "a3@4 ~@3 c4 c#4@4 e4@4",
  Z: "d4 ~ f#4 a4, ~@7 f4@2 ~@7", AA: "e3@4 ~@4 g#3@4 b3@3 ~, ~@7 g3@2 ~@7", AB: "a3@4 ~@3 a3@2 ~@2 a3 e3@3 ~",
  AC: "a3@6 ~@2 a3@7 ~", AD: "e3@4 ~@3 e3@2 ~@2 e3@5", AE: "a3@3 ~@3 a3@5 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A B A B A C@3 A B A B D E@4 F@4 G@4 H@2 I@6 A J@4 K@4 B A B A L@4 M@6 N@2 H@2 O@6 A B P@3 Q@3 A B A B A R@4 S@6
  T@4 U@4 N@2 A B A B A Q@3 V@5 W@8 X Y@2 ~
>`.pickRestart({
  A: "[f#3,a3,d4]@7 ~", B: "[e3,a3,c#4]@15 ~",
  C: "[[e3,a3,c#4]@23 ~ [b3,d4]@8 [a3,c#4]@16, ~@12 e3@11 ~, ~@4 g#3 ~@3]/3", D: "~ f#3@14 ~, [a3,d4]@7 ~",
  E: "[[a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ [a3,c#4]@19 ~@13, e3@25 ~@7]/4", F: "[[g#3,b3]@32 [a3,c#4]@31 ~, e3@31 ~]/4",
  G: "[[g#3,b3]@16 [a3,c#4]@15 ~, e3@31 ~]/4", H: "[[f#3,a3,d4]@15 ~]/2",
  I: "[[b3,e4]@63 ~ [a3,c#4]@30 ~@2, g#3@61 ~@2 e3@32 ~]/6", J: "[[e3,c#4]@15 ~ [f#3,d4]@14 ~@2, a3@31 ~]/2",
  K: "[[a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ c#4@15 ~ [f#3,d4]@14 ~@2, e3@45 ~@19, ~@32 a3@31 ~]/4", // A G#dim D
  L: "[[e3,a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ [a3,c#4]@19 ~@13, ~@24 e3@27 ~@13]/4", // A G#dim A
  M: "[[g#3,b3,d4]@30 ~@2 [a3,c#4]@30 ~@2 [g#3,b3,d4]@31 ~, e3@47 ~]/6", N: "[[e3,a3,c#4]@15 ~]/2",
  O: "[[g#3,b3,e4]@61 ~@3 c#4@30 ~@2, ~@21 [e3,a3]@10 ~]/6", // E A5
  P: "[[f#3,a3,d4]@15 ~ e3@13 ~@3 [f#3,d4]@14 ~@2, ~@15 a3@31 ~@2, ~@15 c#4@16 ~@17]/3", // D
  Q: "[[e3,a3,c#4]@23 ~ [b3,d4]@8 [a3,c#4]@14 ~@2, ~@12 e3@11 ~, ~@4 g#3 ~@3]/3", // A Bm A
  R: "[[e3,a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ [a3,c#4]@17 ~@15, ~@24 e3@25 ~@15]/4", // A G#dim A
  S: "[[g#3,b3]@31 ~ [a3,c#4]@30 ~@2 [g#3,b3]@31 ~, e3@47 ~]/6", T: "[c#4@31 ~ [f#3,d4]@30 ~@2, a3@31 ~, e3@29 ~@35]/4",
  U: "[[b3,e4]@63 ~, g#3@61 ~@3]/4", // E5
  V: "[[f#3,a3,d4]@14 ~@2 e3@13 ~@2 [f#3,a3,d4]@15 ~ [a3,c#4]@16 [f#3,a3,d4]@15 ~@2, ~@15 [a3,c#4]@16 ~@16 e3@14 ~@19]/5", // D A D A
  W: "[[a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ [a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ [a3,c#4]@23 ~ [g#3,b3,d4]@7 ~ [a3,c#4]@30 ~@2, e3@27 ~ e3@36]/8", // A G#dim A G#dim A G#dim A
  X: "[e3,g#3,b3,d4]@7 ~", Y: "[[e3,a3,c#4]@13 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@16 B A@32 B A@32 B A@39 C ~>".pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x ~@4",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@3 A B@16 ~ B@15 C B@16 ~ B@15 C B@16 ~ B@15 C B@23 D ~>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~ x ~ x", C: "~@4 x ~@6 x!2 ~@3", D: "~ x ~@2",
})).gain(0.72)

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

stack(bass, overdriven_guitar, acoustic_guitar_steel, acoustic_guitar_steel_2, string_ensemble_1, kick, snare, hihat)

More by Simon & Garfunkel