Strudelify
One of These Nights cover art

One of These Nights

One of These Nights

Eagles

KeyE minorTempo110 bpm
0:00/0:00
// One of These Nights — Eagles
// 110 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A@15 ~ A@15 B C@2 D E@2 C F G A@15 B C@2 D E@2 C F H I J K@2 L M N O P Q R S T U V W C@2 D X@2 C D@2 C@2 D@2 C@2 D@2
  C@2 D@2 C@2 D@2 Y
>`.pickRestart({
  A: "~ e2 e3@4 ~ [g4,b4,e5]", B: "~ [d4,f#4,b4]@3", C: "[c4,e4,g4,b4]", D: "[g3,d4,f#4,b4]",
  E: "[~@2 [g4,d5] [a4,e5] [g4,d5]@2 c5@2 [c4,e4,g4,b4]@8, [g3,d4,b4] ~, f#4@3 f#4@3 ~@2]/2", F: "[a3,c4,e4,a4]",
  G: "[b3,d4,f#4,b4]!4 ~@4", H: "[b3,d4,f#4,b4]!4 ~@2 c5 d5", I: "c5 d5@5 ~@2",
  J: "g4 e4@3 e4 d4 b3@2 a3@2 g3@2 a3@2 g3@2", K: "[e4@4 e4 d4 b3@2 a3@2 g3@2 b3 a3 g3@10 ~@4 g4 a4@3]/2",
  L: "g4 a3 b3@2 g3@2 e3@2 g3@4 a3@2 ~@2", M: "g4 a3 b3@2 g3@2 e3@2 g3@4 a3 b3 e4 b3",
  N: "[b3,e4]@2 [a3,d4]@2 ~@8 b4 a4 g4 a4", O: "~@12 [g4,b4]@2 [g4,b4]!2", P: "[g4,b4]@3 [g4,b4]",
  Q: "[d4,f#4]@4 ~@2 a3 b3 d4 ~ e4 ~ d4 e4 e4@2", R: "d5 b4 g4@2 e4 ~ d4 ~ b3 a3 g3@2 b3!2 g3@2", S: "e3 d3 e3 d4 e4@4",
  T: "c4@2 b3@2 g3@2 a3@2 g3 e3@3 e3@4", U: "c4@2 b3@2 g3@2 a3@2 g3 e4@3 e4@4",
  V: "g4!2 a3 b3!2 ~ d4 ~ e4 d4 b3@2 a4 g4 e4@2", W: "a4 b4 ~@2 a4@2 b4@10",
  X: "[b4@10 [a4,c5,e5] [g4,b4,c5,e5,g5] [e4,g4]@2 a4@2 [c4,e4,g4,b4]@16, g3 ~, [d4,f#4]@7 [d4,f#4]@7 ~@2, ~@3 b4 ~@4]/2", // Am Cmaj7 Em Cmaj7 D
  Y: "[g3,b3,d4] ~@3", // G
})).s("gm_electric_guitar_muted").gain(0.46).pan(0.7)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@8 A@4 B@2 C@2 D E D@2 F@2 D E D E D@2 F@2 D G H@2 I@2 H@2 F J D E D@2 F@2 D E D E D@2 F@2 D G H@2 I@2 H@2 F J D E
  D@2 F@2 D E D E D@2 F@2 D G E@4 D@2 E@2 D@2 E K D@2 K@2 D@2 E K D@2 K@2 L
>`.pickRestart({
  A: "[[a3,d4,f#4] [b3,e4,g4]@31]/2", B: "[[b3,d4,f4] [c4,e4,g4]@31]/2",
  C: "[[a3,d4,f#4] b3@15 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [d4,f#4]@2 ~@8, ~ [e4,g4]@31, ~@22 b3@9 ~]/2", // D Bm D Em
  D: "[e4,g4,b4]@2 [e4,g4,b4]!2 [e4,g4,b4]@2 ~@2 [e4,g4,b4]@2 ~@2 [e4,g4,b4]@2 ~@2", // Em
  E: "[d4,f#4,b4]@2 [d4,f#4,b4]!2 [d4,f#4,b4]@2 ~@2 [d4,f#4,b4]@2 ~@2 [d4,f#4,b4]@2 ~@2", // Bm
  F: "[c4,e4,a4]@2 [c4,e4,a4]!2 [c4,e4,a4]@2 ~@2 [c4,e4,a4]@2 ~@2 [c4,e4,a4]@2 ~@2", G: "~ [d4,f#4,b4]@3",
  H: "[e4,g4,c5]@2 [e4,g4,c5]!2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [d4,g4,b4]@2 ~@2", // C G
  I: "[d4,g4,b4]@2 [d4,g4,b4]!2 [d4,g4,b4]@2 ~@2 [d4,g4,b4]@2 ~@2 [d4,f#4,a4]@2 ~@2", J: "[d4,f#4,b4]!4 ~@4",
  K: "[g4,b4,f#5] [g4,b4,f#5]@3 [f#4,b4,d5] [f#4,b4,d5]@3 [e4,g4,b4] [e4,g4,b4]@3 [d4,f#4,a4] [d4,f#4,a4]@3", // Gmaj7 Bm Em D
  L: "[g2,b2,d3] ~@3", // G
})).s("gm_acoustic_guitar_steel").gain(0.62).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C@2 D@2 A@3 B C@2 D@2 A E F G H I J@2 F K F G H L M@2 F N O P Q R O P S E F G H I J@2 F K F G H L M@2 F N O P Q R
  O P S T U V W X Y@2 U Z U AA AB AC M@2 U AD O P Q R O P Q R O P Q R O P Q R O P Q R O P Q R AE
>`.pickRestart({
  A: "e1@2 g2 g3@2 d3 e3@2", B: "d2@2 g2 g3@2 d3 e3@2", C: "c2@2 g2 g3@2 d3 e3@2", D: "a1@2 g2 g3@2 d3 e3@2",
  E: "b1!3 b1@5", F: "e2@4 ~@3 b1 b1@2 d2@2 b1@4", G: "d2@4 ~@3 b1 b1@2 b1@6", H: "c2@4 ~@3 g1 g1@2 a1@2 b1@4",
  I: "c2@4 ~@3 c2 c2@4 b1@4", J: "a1@4 ~@3 e1 e1@2 g1@2 b1@4", K: "b1@4 ~@3 b1 b1@2 b1@2 b1@2 d2@2",
  L: "c2@4 ~@3 c2 c2@3 c2 b1@2 b1@2", M: "a1@4 ~@3 a1 e1@2 g1@2 b1@4", N: "b1 ~ b1@3 b1 b1@2",
  O: "c2@2 b2 g2 a2 g2 b2@2", P: "c2@2 b2 g2 a2@2 g2@2", Q: "g1@2 b1 d2 e2 d2 g2@2", R: "g1@2 b1 d2 e2@2 d2@2",
  S: "a2@2 e1!3 g1!2 a1", T: "b1!3 b1@3 ~@2", U: "e2@4 ~@3 b1 b1@2 d2@2 b1@2 e2@2", V: "d2@4 ~@3 b1 b1@2 b1@2 b1@4",
  W: "c2@4 ~@3 c2 g1@2 g1@2 b1@4", X: "c2@4 ~@3 c2!3 c2@2 b1!2 b1@2", Y: "a1@4 ~@3 e1 e1@2 g1@2 b1@2 g1@2",
  Z: "b1@4 ~@3 b1 b1@2 b1@2 b1@2 b1@2", AA: "d2@4 ~@3 b1 b1@2 b1@2 b1@2 d2@2", AB: "c2@4 ~@3 c2 g1@2 a1@2 b1@4",
  AC: "c2@4 ~@3 c2 g1@2 c2@2 b1@2 c2@2", AD: "b1 ~ b1@6", AE: "g1 ~@3",
})).s("gm_acoustic_bass").gain(0.52)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@7 B C@15 D E F E F E F E G C@15 D E F E F E F E G C@15 D E F E F E F E F E F E F E F E F E F E F E F E F H
>`.pickRestart({
  A: "x ~@6 x", B: "x!4 ~@4", C: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~", D: "x ~ x ~@4 x", E: "x ~ x!3 ~ x ~", F: "x ~ x!6",
  G: "x!4 ~@2 x ~", H: "x",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<A@15 B ~@15 A ~@7 C ~@15 A ~@7 C ~@15 D ~@7 E ~@15 E ~>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@4", C: "~@2 x!2 ~@4", D: "~@5 x!2 ~", E: "~ x",
})).gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@16 A B@13 ~@2 C@3 D C@3 E A B@13 ~@2 C@3 D C@3 E B F@2 B@11 ~@2 C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D ~
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@5 x ~@2", C: "~@3 x ~@12", D: "~@2 x!2 ~@12", E: "~@2 x!3 ~@11", F: "~@5 x ~ x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<A@12 B@3 C D@15 A D@7 E D@15 A D@7 E D@15 B D@7 F D@15 F ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~ x ~@2", D: "~@3 x", E: "~ x!3 ~@4", F: "~ x ~ x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@16 A@14 B C D@2 E F A G@2 H A@14 B C D@2 E F A G@2 H A@14 B C G@2 A F A G A F G@2 A F G@3 F G@2 A F G@2 A F ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~ x ~@2", D: "~@5 x!3", E: "~@5 x!2 ~", F: "~ x ~@3 x ~ x", G: "~@5 x ~ x",
  H: "~@3 x ~@4",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<A@15 B ~@15 C ~@7 B ~@15 C ~@7 B ~@23 D ~@15 D ~>".pickRestart({
  A: "~@3 x", B: "x!2 ~@6", C: "~@5 x!2 ~", D: "~@2 x ~@4 x ~@8",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@14 B A ~@6 C A ~@14 B A ~@6 C A ~@7 A ~@6 B A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 D
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@3 x", D: "x!2 ~@6",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@15 [x!4 ~@4] ~@89>").gain(0.72)

stack(
  electric_guitar_muted, acoustic_guitar_steel, bass, kick, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat,
  high_tom, crash, ride
)

More by Eagles