Strudelify
Boys of Summer cover art

Building The Perfect Beast

Boys of Summer

Don Henley

KeyE majorTempo160 bpm
0:00/0:00
// Boys of Summer — Don Henley
// 160 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 on channel 12 is ignored: the parts fit General MIDI, not the Roland MT-32 map it names
// note: Full arrangement: all 240 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@58 A@6 B@8 ~ C@8 D@7 ~@152>".pickRestart({
  A: "[[c#4,c#5], g#4@2 ~]/6", B: "[~@2 [c#4,c#5] [c#4,e4,c#5], ~@15 [b3,f#4,b4]@89 ~@24, ~@64 a4@55 ~@9]/8",
  C: "[c#4,e4,c#5]/8", D: "[~@4 [c#4,e4,c#5]@3, [b3,f#4,b4]@97 ~@15]/7",
})).s("gm_synth_brass_1").gain(0.27)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@23 A B@4 C@8 D@8 E@2 F@4 E@4 G@2 H@7 I@5 J@3 K@8 L M@3 N@5 O@4 E@2 F@4 E@4 G@2 ~@12 P Q@3 R@8 S@8 T@8 U@4 V@8 W@2
  X@2 Y@4 W@2 Z@4 W@2 E@2 AA@2 AB@2 W@2 AC@2 AD@6 AE@2 AF@2 AG@4 W@2 AH@4 AI@2 AJ@4 AK AL AM@2 AN AO G@2 AP@4 AQ@8 AR@4
  E@2 ~@6
>`.pickRestart({
  A: "~ b2", B: "c#2/4", C: "[~@32 b2@30 f#2 g#2, a2]/8", D: "[~@3 b2, a2, ~@4 e3@3 ~]/8", E: "b2/2", F: "[~ e3, a2]/4",
  G: "[a2@3 b2]/2", H: "[~@30 f#2 g#2 a2@16 a3@8, c#2@13 ~]/7", I: "[~@8 a2@7 ~@33 b3@28 f#2@2 g#2@2, ~@3 b2@13]/5",
  J: "a2/3", K: "[~@8 c#3@7 ~@62 g#2@3 a2@32 a3@16, ~@15 c#2@113, ~@38 f#2 ~@25]/8", L: "~@8 a2@3 b2 c#3@4",
  M: "[~@2 b3, b2]/3", N: "[~@6 f#2@6 g#2@4 a2@63 ~, b2@49 ~@31]/5", O: "[~ b2, e3@3 ~]/4", P: "~@12 f#4@2 e4 ~",
  Q: "[~@15 e4 d#4 e4 b3 f#3 e3 d#3 b2@2, f#4@15 ~]/3", R: "[~@30 f#2 g#2 a2@28 b2@4, c#2@13 ~@3]/8",
  S: "[~@60 f#2@2 g#2@2 a2@32 a3@29 c#3@3, b2@39 ~@25]/8", T: "[~@30 f#2 g#2 ~@28 b2@4, c#2@13 ~@3, ~ a2]/8",
  U: "[~@30 f#2 g#2, ~ b2@63]/4", V: "[~@64 e2 ~@31 b2@32, a2@111 ~@17]/8", W: "[~@14 f#2 g#2, b2]/2", X: "[a2,b2]/2",
  Y: "[~@30 f#2 g#2, e2, ~ b2]/4", Z: "[~@14 c#2 d#2 e2@14 g#2 a2, a2@7 ~]/4", AA: "[a2@14 c#2 d#2]/2",
  AB: "[e2@14 g#2 a2]/2", AC: "[~@11 f#2@3 g#2@2, b2]/2",
  AD: "[~@22 c#2@6 d#2@4 ~@23 g#2@5 a2@4 b2@28 f#2@2 g#2@2, a2@11 ~@13, ~@16 e2@23 ~@9]/6", AE: "[b2@14 f#2 g#2]/2",
  AF: "[~@11 c#2@3 d#2@2, a2@7 ~]/2", AG: "[~@14 g#2 a2 ~@12 f#2@2 g#2@2, e2@39 ~@25, ~ b2]/4",
  AH: "[~@14 c#2 d#2 e2@14 g#2 a2, a2@57 ~@7]/4", AI: "[b2@14 g#2 a2]/2",
  AJ: "[~@28 f#2@2 g#2@2 a2@16 ~@7 g#2@5 a2@4, b2@57 ~@7, ~@12 a2@3 ~]/4", AK: "e2@15 ~", AL: "e2@3 e2@2 e2 g#2 a2",
  AM: "[b2@11 b2 ~ b2 f#2 g#2]/2", AN: "b2@15 ~", AO: "~@3 f#2@3 g#2@2, b2@13 ~@3",
  AP: "[~@27 c#2@3 f#2 g#2, c#2@27 ~@5, ~@24 c#3@7 ~]/4", AQ: "[~@56 b2@7 ~ b2@60 f#2@2 g#2@2, a2@3 ~]/8",
  AR: "[a2@32 ~@24 c#3@7 ~, ~@16 a3@15 ~]/4",
})).s("gm_acoustic_bass").gain(0.45)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@40 A B@8 ~ C@7 D@3 E@8 F@8 G@8 H@5 I@7 J@2 K@7 ~@16 D@3 L@4 M N@3 O@8 P@8 H@5 Q@7 J@2 R@6 S T@7 J@2 U@6 A B@8 ~ V@6
  A B@8 ~ W@8 ~ X@6 ~@3 Y@2 Z@3 ~@7
>`.pickRestart({
  A: "~ g#3, ~ [b2,e3]@3", // E5
  B: "[~@15 b2 ~@65 e3@30 ~ [e3,g#3]@16, ~@15 f#3@113, ~ d#3@7, ~@16 b2@95 b2@17, ~@80 a2 c#3@40 ~@7]/8", // E
  C: "[~@32 [c#3,e3]@19 ~@5, [b2,d#3,f#3]@107 ~@5, ~@64 a2@27 ~@21]/7", // C#m B
  D: "[~@8 c#3@5 ~@12 g#3@23, ~@7 e3@41, ~@7 c#3@17]/3",
  E: "[~@87 b3@41, ~ a2@70 ~@10 f#3@47, ~@15 c#3@61 ~@4 d#3@46 ~@2, ~@15 e3@52 b2@59 ~@2, ~@28 a3@57 ~@43]/8",
  F: "[~@85 g#3@43, ~@5 a2@56 ~@67, ~@9 e3@32 e3@23, ~@9 c#3@30 c#3@25, ~@23 a3@64 ~@41]/8",
  G: "[~@10 e3@9 ~@63 [d#3,f#3]@46, c#3@95 ~@33, ~@5 a2@90 ~@33, ~@66 [d#3,f#3]@11 ~@51, ~@69 b2@53 ~@6]/8", // D#m
  H: "[~@4 e3@12 [b2,e3] b2 g#3@2, ~@3 a2@77, ~@7 c#3@73, ~@8 g#3 ~, ~@17 e3@3]/5", // E5
  I: "[~@16 b2 ~@92 b2 ~@2, ~@15 f#3@97, ~ d#3@6, ~@80 a2@29 ~@3, ~@81 [c#3,e3]@31]/7", J: "[e3,g#3]/2",
  K: "[f#3@31 ~ [c#3,e3]@19 ~@5, [b2,d#3]@107 ~@5, ~@64 a2@27 ~@21]/7", L: "[~@7 a3@9, ~ a2@63, ~ [c#3,e3]@3]/4",
  M: "~@3 b2@13", N: "[~@7 b3@41, d#3@23 ~, ~ f#3@47]/3",
  O: "[~@41 e3@23, ~@5 a2@56 ~@19 g#3@48, ~@8 e3@33 ~@23, ~@8 c#3@31 c#3@25, ~@23 a3@63 ~@42]/8",
  P: "[~@10 e3@11 ~@44 [d#3,f#3]@12 ~@5 [d#3,f#3]@46, c#3@95 ~@33, ~@5 a2@90 ~@33, ~@65 b2@53 ~@10]/8", // D#m
  Q: "[~@16 b2 ~@64 [c#3,e3]@30 b2, ~@15 f#3@97, ~ d#3@6, ~@20 a2@7 ~]/7", R: "[~@2 [a2,c#3,e3], [b2,d#3,f#3]]/6",
  S: "~ [b2,e3,g#3]@3", T: "[~@81 [c#3,e3]@30 b2, ~@15 f#3@97, ~ d#3@6, ~@2 b2@9 ~@3, ~@20 a2@7 ~]/7",
  U: "[~@2 [c#3,e3], [b2,d#3,f#3], ~@64 a2@27 ~@5]/6", V: "[f#3@31 ~ [c#3,e3]@16, [b2,d#3], ~@64 a2@27 ~@5]/6",
  W: "[f#3@62 ~@2 [c#3,e3]@32 ~ [c#3,e3]@31, [b2,d#3]@107 ~@21, ~@64 a2@27 ~@5 g#3@32]/8", // C#m B
  X: "[b2@32 b2@20 ~@28 b2 ~@15, g#3@12 ~ e3@10 ~, e3 ~@31 [d#3,f#3]@62 ~@2, ~@13 b2@3 ~@8, ~@28 g#3@17 ~@3]/6", // D#m
  Y: "[~ [c#3,e3]@31, a2@7 ~]/2", Z: "[e3@2 [b2,d#3,f#3], g#3@17 ~@7]/3",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.7)

// other · clavinet
const clavinet = note("<~@55 A B@4 ~@52 C D C E C F C G ~@120>".pickRestart({
  A: "~@12 c#5@2 b4 ~", B: "c#5/4", C: "a3@2 e3 ~@3 e3 ~ a3@2 e3 ~@3 e3 ~", D: "a3@2 e3 ~ e3 ~ a3 ~@3 e3 ~@3 e3 ~",
  E: "a3 ~ f#3@2 e3 ~ a3@2 ~@2 e3 ~@3 e3 ~", F: "a3 ~ e3 ~ e3 ~ a3@2 ~@2 e3 ~@3 e3 ~",
  G: "a3@2 f#3@2 e3 ~ a3@2 ~@2 e3@2 ~@4",
})).s("gm_clavinet").gain(0.4).pan(0.3)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@40 A@2 B@2 C@2 D@2 A@2 E@8 ~@30 A@2 B@2 C@2 D@2 A@2 F@8 ~@46 A@2 B@2 C@2 D@2 A@2 G@6 A@2 B@2 C@2 D@2 A@2 H@6 A@2 B@2
  C@2 D@2 A@2 I@6 A@2 B@2 C@2 D@2 A@2 J@6 ~@24
>`.pickRestart({
  A: "[e3,b3,e4]/2", B: "[f#3,b3]/2", C: "[f#3, b3 ~@31]/2", D: "[e3,a3]/2",
  E: "[~@11 d#4@3 ~@2 f#3@10 ~ d#4@3 ~@2 [e3,a3,e4]@32, f#3@8 ~@5 f#3@3 ~@16, b3@7 b3@8 b3@8 ~@9]/8", // A5
  F: "[~@11 d#4@3 ~@13 d#4@3 ~@2 [e3,a3,e4]@32, f#3@8 f#3@5 f#3@3 ~@16, b3@13 ~ b3@16 b3@16 ~@18, ~@8 e4@5 ~@11 e4@4 ~@36]/8", // A5
  G: "[~@11 d#4@3 ~@13 d#4@3 ~@2 [e3,a3,e4]@16, f#3 f#3 ~, b3@7 b3@8 b3@8 ~]/6", // A5
  H: "[~@11 d#4@3 ~@13 d#4@3 ~@2 [e3,a3,e4]@16, f#3@8 f#3@5 f#3@3 ~@8, b3@7 b3@8 b3@8 ~, ~@8 e4@5 ~@11 e4@4 ~@20]/6", // A5
  I: "[~@11 d#4@3 ~@13 d#4@3 ~@2 [e3,a3,e4]@16, f#3@8 f#3@5 f#3@3 ~@8, b3@7 b3@8 b3@8 ~, ~@6 e4 ~@5]/6", // A5
  J: "[~@11 d#4@3 ~@2 f#3@10 ~ d#4@3 ~@2 [e3,a3,e4]@16, f#3@8 ~@5 f#3@3 ~@8, b3@7 b3@8 b3@8 ~]/6", // A5
})).s("gm_brass_section").gain(0.45).pan(0.7)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@108 A@2 B@2 C D E@2 F@4 ~@120>".pickRestart({
  A: "[~@24 [f#4,b4,d#5]@7 ~, [e4,a4,c#5]]/2", B: "[e4,a4,c#5]/2", C: "[e4,a4,c#5] ~@15", D: "~@8 [f#4,b4,d#5]@7 ~",
  E: "[[a4,c#5] ~@31, f#5@31 ~]/2", // A
  F: "[[a4,c#5] ~@23 [f#4,b4,d#5]@8 [a4,c#5] ~@23 [b4,f#5]@8, e4@45 ~@11 c#5 ~@7, ~ e5]/4", // A B A B5
})).s("gm_string_ensemble_1").gain(0.3).pan(0.2)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note(`<
  ~@8 A@4 B@8 C@8 B@8 D@7 ~@13 A@4 B@8 C@8 B@8 D@7 ~@29 A@4 B@8 C@8 B@8 D@7 ~@61 A@4 B@8 E@4 F@8
>`.pickRestart({
  A: "c#3/4", B: "[~ b2, a2]/8", C: "[~ c#3, a2@7 ~]/8", D: "a2/7", E: "a2/4", F: "[b2, d#3 ~@3]/8",
})).s("gm_synth_bass_1").gain(0.4)

// other · flute
const flute = note("<~@120 A B ~@6 A B ~@89 A B ~@6 A B ~@11>".pickRestart({
  A: "c#6@5 ~ c#6@5 ~ c#6@4", B: "~ c#6@4 ~@2 c#6@4 ~@5",
})).s("gm_flute").gain(0.15).pan(0.8)

// other · flute · soft notes
const flute_soft = note("<~@121 A ~@7 A ~@90 A ~@7 A ~@11>".pickRestart({
  A: "~@3 c#6",
})).s("gm_flute").gain(0.1).pan(0.8)

// chords · trumpet
const trumpet = note(`<
  ~@40 A@2 B@2 C@2 D@2 A@2 E@4 F@2 ~@32 A@2 B@2 C@2 D@2 A@2 E@4 F@2 ~@48 A@2 B@2 C@2 D@2 A@2 E@4 F@2 A@2 B@2 C@2 D@2 A@2
  E@4 F@2 A@2 B@2 C@2 D@2 A@2 E@4 F@2 A@2 B@2 C@2 D@2 A@2 E@4 F@2 ~@24
>`.pickRestart({
  A: "[b2,e3,g#3]/2", B: "[b2,d#3,f#3]/2", C: "[[d#3,f#3], b2 ~@31]/2", D: "[a2,c#3,e3]/2",
  E: "[d#3@16 e3@6 ~@6 b2@4 ~@16 e3@6 d#3@6 b2@3 ~, f#3, b2@28 ~@4 b2@27 ~@5, ~@11 d#3@13 ~@8]/4",
  F: "[c#3@15 ~ b2@8 c#3@8, [a2,e3]]/2", // A5
})).s("gm_trumpet").gain(0.3).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B A ~ A B A ~ A B A ~ A B A ~ A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A
  C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C ~@8 A B A ~@5 A B A ~ A B A ~ A B A ~ A
  B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C A C
  A C A C A C A C A C A C A C A C A C A C A C A C A B A ~ A B A ~ A B A ~ A B A ~ A ~@7
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x!2 ~@6",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct(`<
  A B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ G F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B
  ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E ~@4 C D ~ E F B ~@2 C D ~
  E F B ~@2 C D ~ E F B ~@2 C D ~ G F B ~@2 C D ~ E F B ~@2 C D ~ G F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B
  ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ E F B ~@2 C D ~ G ~@8
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x ~ x ~@4", C: "x ~ x!2 ~ x ~ x", D: "~@4 x ~ x!2", E: "x ~ x!2 ~ x ~@2", F: "~ x ~ x ~ x ~ x",
  G: "x ~ x!4 ~@2",
})).gain(0.48)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A
  ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~@5 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C
  ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A
  ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~ A ~@3 B ~ C ~@8
>`.pickRestart({
  A: "~@5 x ~ x", B: "~ x ~@6", C: "~@7 x",
})).gain(0.16)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A ~@3 A ~@3 A ~ A ~ A B@15 C D B@14 C D B@14 C D B@14 C D B@14 C ~@12 E ~ F G ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~@3
  A ~@3 A ~ A ~ A D B@14 C D B@14 C D B@14 C D B@14 C ~@3 A ~@3 A ~@3 A ~ A ~ A ~@8
>`.pickRestart({
  A: "~ x ~ x!2 ~@3", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "x!2 ~ x", E: "x", F: "x ~@2 x ~@2 x ~", G: "~ x ~ x!5",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct(`<
  ~@8 A@2 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B
  A@3 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B A ~@16 A@2 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B
  A@3 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B A@3 B A B A B A B A@3 B A B A@3 B
  A B A B A B A@3 B A B A ~@8
>`.pickRestart({
  A: "~@3 x ~ x!2 ~", B: "~@3 x ~ x!3",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!4",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@232 x ~@7>").gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@16 A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8
>`.pickRestart({
  A: "~ x ~@3 x ~ x", B: "~ x ~@3 x ~@2",
})).gain(0.72)

stack(
  synth_brass_1, bass, overdriven_guitar, clavinet, brass_section, string_ensemble_1, bass_2, flute, flute_soft,
  trumpet, kick, rim, rim_soft, snare, clap, hihat, crash, tambourine
)

More by Don Henley