Strudelify
Desperado cover art

1975 · Desperado

Desperado

Eagles

KeyG majorTempo68 bpm
0:00/0:00
// Desperado — Eagles
// 68 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 9, 4/4 at bar 9, 2/4 at bar 25, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 6 "BASS / HIGH" named as a bass, played on electric bass finger (its pad halo patch is not one)
// note: duplicate parts dropped: ch 7 "MELODY / 2" lead 6 voice (copy of ch 1 "MELODY" pad new age, 0.067 beats late); ch 1 "MELODY" pad new age (copy of ch 8 "MELODY / 3" piano)
// note: Full arrangement: all 48 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(68/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 finger · "BASS LINE"
const bass = note(`<
  ~ A B C D E B F G H I C J H I K L M N O P Q N R S T U V W T U X P Y Z E B C D AA B AB AC F AD@2 AE@2
>`.pickRestart({
  A: "g2 f2", B: "c2!2", C: "g2 f#2 e2@2", D: "a2 d2", E: "g2!2 f2@2", F: "d2 d#2 e2@2", G: "c#2 b1 g2!2",
  H: "f#2!2 e2!2", I: "b1@2 c2!2", J: "c2@2 g2!2", K: "g2!2 e2@2", L: "a2@2 d2!2", M: "d2 g2", N: "f2 c2",
  O: "c2@2 g2 f#2", P: "e2 a2", Q: "d2@2 g2!2", R: "c2@2 d2 d#2", S: "e2@2 c#2 b1", T: "g2!2 f#2!2", U: "e2!2 b1@2",
  V: "c2!2 g2 f#2", W: "e2 c2", X: "c2!2 g2!2", Y: "a2@3 a2 a2@3 a2", Z: "d3@3 d3 d3@3 d3", AA: "g2!2 d2@2",
  AB: "g2 f#2 e2 d2", AC: "c2 b1 a1@2", AD: "[d2@2 d2@2 g2@3 f2@5 c2@4]/2", AE: "[c2@4 [g1,d2]@11 ~]/2",
})).s("gm_electric_bass_finger").gain(0.29)

// chords · piano · "R1"
const piano = note(`<
  ~ A B C D E B F G H I J K L M N O P Q R S@2 Q T U V W X Y Z AA AB AC AD AE A AF AG AH AI AJ AK AL AM AN AO AP@2
>`.pickRestart({
  A: "[g3,b3,d4]!2 [f3,g3,b3,d4]!2", B: "[c3,e3,g3]!2 [c3,d#3,g3,d#4]!2", C: "[g3,b3] [f#3,b3] [e3,g3,b3]!2",
  D: "~@2 d3 [d3,c4,f#4]@5, [b3,c#4,e4]@3 ~@5", E: "[g3,b3]!2 [f3,g3,b3,d4]!2, d4 ~",
  F: "[d3,g3,b3] [d#3,f#3,b3] [e3,g3,b3]!2", G: "[c#3,g3,a3] [d3,a3,c4] [d3,g3,b3,g4]!2",
  H: "[d3,f#3,a3,g4]!2 [e3,g3,b3]!2", I: "[b2,a3] [b2,f#3] [c3,e3,g3]!2", J: "[d3,g3,b3] [d3,f#3,b3] [e3,g3,b3]!2",
  K: "[c3,e3,g3]!2 [g3,b3,d4]!2", L: "[f#3,a3,d4]!2 [e3,g3,b3]!2", M: "[b2,f#3,a3]!2 [c3,e3,g3]!2",
  N: "[d3,g3,b3]!2 [e3,g3,b3]!2", O: "[g3,a3,c#4]!2 [c3,d3,g3,c4]!2", P: "[c3,f#3,c4]!2 [g3,b3,d4]!2",
  Q: "[f3,g3,b3,d4]!2 [c3,e3,g3]!2", R: "[c3,d#3,g3,d#4]!2 [g3,b3] [f#3,b3]",
  S: "[[e3,g3,b3]@2 [e3,g3,b3]@2 [b3,c#4,e4]@3 [d3,c4,f#4]@5 [g3,b3]@2 [g3,b3]@2, ~@3 d4]/2", // Em C#m7 D7 G
  T: "[c3,d#3,g3,d#4]!2 [d3,g3,b3] [d#3,f#3,b3]", U: "[e3,g3,b3]!2 [c#3,g3,a3] [d3,a3,c4]",
  V: "[d3,g3,b3,g4]!2 [d3,f#3,a3,g4]!2", W: "[e3,g3,b3]!2 [b2,a3] [b2,f#3]", X: "[c3,e3,g3]!2 [d3,g3,b3] [d3,f#3,b3]",
  Y: "[e3,g3,b3]!2 [c3,e3,g3]!2", Z: "[g3,b3,d4]!2 [f#3,a3,d4]!2", AA: "[e3,g3,b3]!2 [b2,f#3,a3]!2",
  AB: "[c3,e3,g3]!2 [d3,g3,b3]!2", AC: "[e3,g3,b3]!2 [g3,a3,c#4]!2",
  AD: "[e3,g3,a3,e4,g4]@3 [e3,g3,a3,e4,g4] [e3,g3,a3,e4,g4]@3 [e3,g3,a3,e4,g4]", // A7
  AE: "[d3,c4,e4,g4,a4]@3 [d3,c4,e4,g4,a4] [d3,c4,f#4,g4,b4]@3 [d3,c4,f#4,g4,a4]", AF: "[c4,e4,g4]!2 [c4,d#4,g4]!2",
  AG: "[g3,b3,d4] [f#3,a3,d4] [e3,g3,b3]!2", AH: "[g3,c#4,e4]!2 [a3,c4,d4]!2", AI: "[g3,b3,d4]!2 [f3,c4,d4]!2",
  AJ: "[c3,e3,g3]!2 [c3,d#3,g3]!2", AK: "[b2,d3,g3,b3] [b2,f#3,a3,b3] [b2,e3,g3,b3] [b2,d3,g3,b3]",
  AL: "[c3,e3,g3] [b2,d3,g3] [a2,c3,e3,g3]!2", AM: "[b2,d3,g3,b3] [d#3,a3,b3] [e3,g3,b3]!2",
  AN: "[d3,e3,g3,c4]@2 [d3,e3,g3,c4]@2 [g2,b2,d3,g3]@3 [g2,b2,d3,f3]", // C G G7
  AO: "[g2,b2,d3,f3]@3 [g2,b2,d3,f3] [c3,e3,g3]@3 [c3,e3,g3]", AP: "[[c3,d#3,g3]@3 [c3,d#3,g3] [g2,b2,d3,g3]@11 ~]/2",
})).s("gm_piano").gain(0.44)

// chords · string ensemble 1 · "STRINGS LEFT"
const string_ensemble_1 = note(`<
  ~@8 A B C D E F G H I J K L M@2 K N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK@2
>`.pickRestart({
  A: "[c#3,g3,a3] [d3,a3,c4] [d3,g3,b3,g4]!2", B: "[d3,f#3,a3,g4]!2 [e3,g3,b3]!2", C: "[b2,a3] [b2,f#3] [c3,e3,g3]!2",
  D: "[d3,g3,b3] [d3,f#3,b3] [e3,g3,b3]!2", E: "[c3,e3,g3]!2 [g3,b3,d4]!2", F: "[f#3,a3,d4]!2 [e3,g3,b3]!2",
  G: "[b2,f#3,a3]!2 [c3,e3,g3]!2", H: "[d3,g3,b3]!2 [e3,g3,b3]!2", I: "[g3,a3,c#4]!2 [c3,d3,g3,c4]!2",
  J: "[c3,f#3,c4]!2 [g3,b3,d4]!2", K: "[f3,g3,b3,d4]!2 [c3,e3,g3]!2", L: "[c3,d#3,g3,d#4]!2 [g3,b3] [f#3,b3]",
  M: "[[e3,g3,b3]@2 [e3,g3,b3]@2 [b3,c#4,e4]@3 [d3,c4,f#4]@5 [g3,b3]@2 [g3,b3]@2, ~@3 d4]/2", // Em C#m7 D7 G
  N: "[c3,d#3,g3,d#4]!2 [d3,g3,b3] [d#3,f#3,b3]", O: "[e3,g3,b3]!2 [c#3,g3,a3] [d3,a3,c4]",
  P: "[d3,g3,b3,g4]!2 [d3,f#3,a3,g4]!2", Q: "[e3,g3,b3]!2 [b2,a3] [b2,f#3]", R: "[c3,e3,g3]!2 [d3,g3,b3] [d3,f#3,b3]",
  S: "[e3,g3,b3]!2 [c3,e3,g3]!2", T: "[g3,b3,d4]!2 [f#3,a3,d4]!2", U: "[e3,g3,b3]!2 [b2,f#3,a3]!2",
  V: "[c3,e3,g3]!2 [d3,g3,b3]!2", W: "[e3,g3,b3]!2 [g3,a3,c#4]!2",
  X: "[e3,g3,a3,e4,g4]@3 [e3,g3,a3,e4,g4] [e3,g3,a3,e4,g4]@3 [e3,g3,a3,e4,g4]", // A7
  Y: "[e4,g4,a4]@3 [e4,g4,a4] [f#4,g4]@3 [f#4,g4]", Z: "[g3,b3,d4]!2 [f3,g3,b3,d4]!2", AA: "[c4,e4,g4]!2 [c4,d#4,g4]!2",
  AB: "[g3,b3,d4] [f#3,a3,d4] [e3,g3,b3]!2", AC: "[g3,c#4,e4]!2 [a3,c4,d4]!2", AD: "[g3,b3,d4]!2 [f3,c4,d4]!2",
  AE: "[c3,e3,g3]!2 [c3,d#3,g3]!2", AF: "[b2,d3,g3,b3] [b2,f#3,a3,b3] [b2,e3,g3,b3] [b2,d3,g3,b3]",
  AG: "[c3,e3,g3] [b2,d3,g3] [a2,c3,e3,g3]!2", AH: "[b2,d3,g3,b3] [d#3,a3,b3] [e3,g3,b3]!2",
  AI: "[d3,e3,g3,c4]@2 [d3,e3,g3,c4]@2 [g2,b2,d3,g3]@3 [g2,b2,d3,f3]", // C G G7
  AJ: "[g2,b2,d3,f3]@3 [g2,b2,d3,f3] [c3,e3,g3]@3 [c3,e3,g3]", AK: "[[c3,d#3,g3]@3 [c3,d#3,g3] [g2,b2,d3,g3]@11 ~]/2",
})).s("gm_string_ensemble_1").gain(0.44)

// other · electric bass finger · "BASS / HIGH"
const electric_bass_finger = note(`<
  ~ A B C D E B F G H I C J H I K L M N O P Q N R S T U V W T U X P Y Z E B C D AA B AB AC F AD@2 AE@2
>`.pickRestart({
  A: "g4 f4", B: "c4!2", C: "g4 f#4 e4@2", D: "a4 d4", E: "g4!2 f4@2", F: "d4 d#4 e4@2", G: "c#4 b3 g4!2",
  H: "f#4!2 e4!2", I: "b3@2 c4!2", J: "c4@2 g4!2", K: "g4!2 e4@2", L: "a4@2 d4!2", M: "d4 g4", N: "f4 c4",
  O: "c4@2 g4 f#4", P: "e4 a4", Q: "d4@2 g4!2", R: "c4@2 d4 d#4", S: "e4@2 c#4 b3", T: "g4!2 f#4!2", U: "e4!2 b3@2",
  V: "c4!2 g4 f#4", W: "e4 c4", X: "c4!2 g4!2", Y: "a4@3 a4 a4@3 a4", Z: "d5@3 d5 d5@3 d5", AA: "g4!2 d4@2",
  AB: "g4 f#4 e4 d4", AC: "c4 b3 a3@2", AD: "[d4@2 d4@2 g4@3 f4@5 c4@4]/2", AE: "[c4@4 [g3,d4]@11 ~]/2",
})).s("gm_electric_bass_finger").gain(0.19)

// chords · string ensemble 2 · "STRINGS RIGHT"
const string_ensemble_2 = note(`<
  ~@8 A B C D E F G H I J K L M@2 K N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK@2
>`.pickRestart({
  A: "[c#4,g4,a4] [d4,a4,c5] [d4,g4,b4,g5]!2", B: "[d4,f#4,a4,g5]!2 [e4,g4,b4]!2", C: "[b3,a4] [b3,f#4] [c4,e4,g4]!2",
  D: "[d4,g4,b4] [d4,f#4,b4] [e4,g4,b4]!2", E: "[c4,e4,g4]!2 [g4,b4,d5]!2", F: "[f#4,a4,d5]!2 [e4,g4,b4]!2",
  G: "[b3,f#4,a4]!2 [c4,e4,g4]!2", H: "[d4,g4,b4]!2 [e4,g4,b4]!2", I: "[g4,a4,c#5]!2 [c4,d4,g4,c5]!2",
  J: "[c4,f#4,c5]!2 [g4,b4,d5]!2", K: "[f4,g4,b4,d5]!2 [c4,e4,g4]!2", L: "[c4,d#4,g4,d#5]!2 [g4,b4] [f#4,b4]",
  M: "[[e4,g4,b4]@2 [e4,g4,b4]@2 [b4,c#5,e5]@3 [d4,c5,f#5]@5 [g4,b4]@2 [g4,b4]@2, ~@3 d5]/2", // Em C#m7 D7 G
  N: "[c4,d#4,g4,d#5]!2 [d4,g4,b4] [d#4,f#4,b4]", O: "[e4,g4,b4]!2 [c#4,g4,a4] [d4,a4,c5]",
  P: "[d4,g4,b4,g5]!2 [d4,f#4,a4,g5]!2", Q: "[e4,g4,b4]!2 [b3,a4] [b3,f#4]", R: "[c4,e4,g4]!2 [d4,g4,b4] [d4,f#4,b4]",
  S: "[e4,g4,b4]!2 [c4,e4,g4]!2", T: "[g4,b4,d5]!2 [f#4,a4,d5]!2", U: "[e4,g4,b4]!2 [b3,f#4,a4]!2",
  V: "[c4,e4,g4]!2 [d4,g4,b4]!2", W: "[e4,g4,b4]!2 [g4,a4,c#5]!2",
  X: "[e4,g4,a4,e5,g5]@3 [e4,g4,a4,e5,g5] [e4,g4,a4,e5,g5]@3 [e4,g4,a4,e5,g5]", // A7
  Y: "[e5,g5,a5]@3 [e5,g5,a5] [f#5,g5]@3 [f#5,g5]", Z: "[g4,b4,d5]!2 [f4,g4,b4,d5]!2", AA: "[c5,e5,g5]!2 [c5,d#5,g5]!2",
  AB: "[g4,b4,d5] [f#4,a4,d5] [e4,g4,b4]!2", AC: "[g4,c#5,e5]!2 [a4,c5,d5]!2", AD: "[g4,b4,d5]!2 [f4,c5,d5]!2",
  AE: "[c4,e4,g4]!2 [c4,d#4,g4]!2", AF: "[b3,d4,g4,b4] [b3,f#4,a4,b4] [b3,e4,g4,b4] [b3,d4,g4,b4]",
  AG: "[c4,e4,g4] [b3,d4,g4] [a3,c4,e4,g4]!2", AH: "[b3,d4,g4,b4] [d#4,a4,b4] [e4,g4,b4]!2",
  AI: "[d4,e4,g4,c5]@2 [d4,e4,g4,c5]@2 [g3,b3,d4,g4]@3 [g3,b3,d4,f4]", // C G G7
  AJ: "[g3,b3,d4,f4]@3 [g3,b3,d4,f4] [c4,e4,g4]@3 [c4,e4,g4]", AK: "[[c4,d#4,g4]@3 [c4,d#4,g4] [g3,b3,d4,g4]@11 ~]/2",
})).s("gm_string_ensemble_2").gain(0.44)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!45 x ~>").gain(0.56)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@47>").gain(0.28)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!45 [~ x ~@2] ~>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~ A@7 B C A@15 D A@20 E ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x ~ x!2", D: "x!2", E: "x!2 ~@2",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~ A ~ A ~ A ~@4 B ~ B ~ B ~ B ~ B ~ B ~ B ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@8 [~@3 x] [~ x ~@2] ~@15 [~ x ~ x] ~@20 [~ x] ~>").gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@7 B C A@15 ~ A@20 B ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.56)

stack(
  bass, piano, string_ensemble_1, electric_bass_finger, string_ensemble_2, kick, rim, snare, hihat, open_hat, crash,
  tambourine
)

More by Eagles