Strudelify
A Horse With No Name cover art

Halcyon Days

A Horse With No Name

America

KeyE minorTempo125 bpm
0:00/0:00
// A Horse With No Name — America
// 125 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 120 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@11 A B C D E F G H@2 B C D E F G H@2 I J K L M L I N D O P Q R O S T B C D E B C D E F G H@2 I J K L M L I U V W X Y
  Z AA AB AC AD AE AF L AG L AH T B C D E F G H@2 B C D E F G H@2 I J K L M L I N I J K L M L I N AI@3 ~@5
>`.pickRestart({
  A: "~@6 e3!3 ~ d3 b2, ~@9 e3@2 ~", B: "e2@5 ~ e2@4 e1@2 e2@4 e1 ~ e2@4 e1@2",
  C: "f#2@5 ~ f#2@4 f#1@2 f#2@4 f#1@2 d2@4 ~@2", D: "e2@5 ~ e2@4 e1 ~ e2@4 e1 ~ e2@4 e1 ~",
  E: "f#2@5 ~ f#2@5 ~ d2@5 ~ d2@4 ~@2", F: "e2@5 ~ e2@4 e1 ~ e2@4 e1@2 e2@4 e1@2",
  G: "f#2@5 ~ f#2@4 f#1@2 d2@5 ~ d2@4 e1 ~",
  H: "[e2@5 ~ e2@4 e1@2 e2@4 e1@2 e2@4 ~@2 f#2@5 ~ f#2@4 f#1@2 d2@5 ~ d2@3 ~@3, ~@11 e1@2 ~@11]/2",
  I: "e2@5 ~ e2@5 ~ e2@5 ~ e2@5 ~", J: "f#2@5 ~ f#2@4 ~@2 d2@5 ~ d2@5 ~", K: "e2@5 ~ e2@4 e1@2 e2@4 e1@2 e2@5 ~",
  L: "f#2@5 ~ f#2@5 ~ d2@5 ~ d2@5 ~", M: "e2@5 ~ e2@4 ~@2 e2@5 ~ e2@5 ~", N: "f#2@5 ~ b1@6 d2@6 b1@3 ~@3",
  O: "f#2@5 ~ f#2@5 ~ d2@4 b1 ~ d2@4 b1@2", P: "e2@5 ~ e2@4 ~@2 e2@5 ~ e2@4 ~@2", Q: "f#2@5 ~ f#2@5 ~ d2@4 b1 ~ d2@5 ~",
  R: "e2@5 ~ e2@4 e1@2 e2@4 ~@2 e2@4 e1 ~, ~@8 e1@3 ~", S: "e2@5 ~ e2@4 e1@2 e2@4 e1@2 e2@4 e1@2",
  T: "f#2@5 ~ f#2@4 ~@2 e3@2 e3@2 e3@2 ~@2 d3@2 b2@2, ~@9 e3@2 ~",
  U: "a1@6 b1@2 d2@2 e2@2 f#2@2 a2@2 b2 ~ b2@2 d3@2 e3 ~", V: "e2@5 ~ b2@3 ~ e3@6 b2@2 e3@4 b2@2",
  W: "f#2@2 ~@2 f#2@2 c#3@2 ~@2 f#3@6 c#3@2 f#3@2 c#3@2 f#2 ~", X: "e2@3 b2 ~ e3@3 b2 ~ b2 e3, ~@9 e3@2 ~",
  Y: "f#2@3 c#3 ~ f#3@3 c#3 f#3 ~@2", Z: "e2@4 ~@2 e2@4 ~@2 e2@4 ~@2 e2@4 b1 ~",
  AA: "f#2@4 ~@2 f#2@5 ~ d2@4 ~@2 d2@4 e1@2", AB: "e2@2 ~ e2@2 e1 e2@2 e1 e2@2 ~",
  AC: "f#2@5 ~ f#2@5 ~ d2@5 ~ d2@3 ~@3", AD: "e2@4 ~@2 e2@4 e1 ~ e2@4 e1@2 e2@4 e1 ~",
  AE: "f#2@5 ~ f#2@5 ~ d2@5 ~ d2@4 b1 ~", AF: "e2@5 ~ e2@5 ~ e2@4 e1@2 e2@4 e1@2",
  AG: "e1@5 ~ e1@6 e2@4 ~@4 e1@2 e2 ~, ~@4 e1 ~, ~@9 e2@2 ~", AH: "e2@5 ~ e2@5 ~ e2@5 ~ e2@6", AI: "[e1@49 ~@23]/3",
})).s("gm_acoustic_bass").gain(0.64)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B C D E F G D H D G I J K J L M N O P J K J L M N O P J K J L M N O P E F G D H D G I J K J L J K J L M N O P J K J
  L M N O Q J K J L M N O P E F G D H D G I J K J L M N O P J K J L M N O P J K J L M N O P J K J L M N O P R@3 ~@5
>`.pickRestart({
  A: "[e2,b2]@23 ~", B: "d3@5 ~, f#2@3 ~", C: "[e2,b2]@7 ~", D: "[f#2,d3]@19 ~@5", E: "e2@7 ~, b2@19 ~@5",
  F: "d3@7 ~, f#2@3 ~", G: "[e2,b2]@5 ~", H: "[e2,b2]@11 ~", I: "[f#2,d3]@17 ~@7", J: "[e2,e3,g3,b3,d4]",
  K: "[f#2,f#3,a3,c#4,e4]@23 ~", L: "[f#2,f#3,a3,c#4,e4]", M: "[e2,g3,b3,d4]@23 ~", N: "f#2@11 ~ d3@12, [a3,c#4,e4]",
  O: "[e2,g3,b3,d4]", P: "[f#2,f#3,a3,c#4,e4]@17 ~@7", Q: "[a2,f#3,a3,c#4,e4]@5 ~", R: "[[e2,g3,b3,d4]@25 ~@11]/3",
})).s("gm_epiano2").gain(0.48)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D C E C F G H I J K L M N K N O P K L M N K N O P K L M N K N O P C E C F G H I J K L M N K L M N K N O P K L M
  N K N O Q@3 R@2 S T U V C E C F G H I J K L M N K N O P K L M N K N O P K L M N K N O P K L M N K N O P W@3 ~@5
>`.pickRestart({
  A: "[e2,b2,e3,g3,b3]", B: "d3@11 ~ d3@3 ~@3 d3@5 ~, ~@16 e3@7 ~", C: "[e2,b2]@23 ~", D: "d3@10 ~@2 d3@4 e3@2 d3@5 ~",
  E: "d3@10 ~@2 d3@3 ~ e3@2 d3@5 ~", F: "d3@11 ~ d3@4 e3@2 d3@5 ~", G: "[e2,b2]@7 ~", H: "d3@8 ~@4 d3@4 e3@2 d3@5 ~",
  I: "[e2,b2]", J: "d3@10 ~@2 d3@4 e3@2 d3@3 ~@3",
  K: "[b3,d4,f#4]@3 ~@6 [b3,d4,f#4]@2 ~, [e3,g3]@5 [e3,g3]@3 [e3,g3]@3 ~, ~ [b3,d4,f#4]!2 ~", // Bm Em Bm
  L: "f#3 ~@2 [a3,c#4,e4]@2 d3@3 ~@3 d3, [a3,c#4,e4]@3 ~@2 [a3,c#4,e4]@4 [a3,c#4,e4]@3, ~@2 f#3@3 ~@3 d3@3 ~", // A
  M: "[b3,d4,f#4]@6 ~@10 [e3,g3]@2 [b3,d4,f#4] ~@5, [e3,g3]@5 [e3,g3]@3 ~@4, ~ [b3,d4,f#4]!2 ~", // Bm Em Bm Em Bm
  N: "f#3@4 ~@2 [a3,c#4,e4]@4 d3@6 ~@2 [a3,c#4,e4]@5 ~, [a3,c#4,e4]@3 ~@2 [a3,c#4,e4]@4 ~@3, ~@4 f#3@6 ~@6 d3@7 ~", // A
  O: "[b3,d4,f#4]@6 ~@12 [b3,d4,f#4]@4 [e3,g3] ~, [e3,g3]@10 a3@13 ~, ~ [b3,d4,f#4]!2 ~, ~@5 [e3,g3]@3 [e3,g3]@3 ~", // Bm Em Bm Em
  P: "f#3@4 ~@2 [a3,c#4,e4]@4 ~@6 [a3,c#4,e4]@2 [a3,c#4,e4]@3 ~@3, [a3,c#4,e4]@3 ~@2 [a3,c#4,e4]@3 ~@4, ~@4 f#3@8 d3@9 ~@3", // A
  Q: "[e4@24 [e4,e5]@2 [e4,e5]@2 [e4,e5]@2 [e4,e5]@4 [d4,d5]@5 ~ [g4,g5]@5 ~ [a4,a5]@4 ~@2 [f#4,f#5]@6 [g4,g5]@5 ~ [e4,e5]@3 ~@5, [f#3,a3,c#4]@17 ~@19]/3", // E D G A F# G E F#m
  R: "[[e4,e5]@4 [f#4,f#5]@6 [g4,g5]@5 ~ [a4,a5]@6 [b4,b5]@17 ~@9]/2", S: "[e5,e6]!12",
  T: "[e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e5,e6]@2 [e4,e5] ~ [e4,e5] ~", // E
  U: "[d5,f#5] [c#5,e5] [b4,d5] [c#5,e5] [b4,d5] [a4,c#5] [b4,d5] [a4,c#5] [g4,b4] [a4,c#5] [g4,b4] [f#4,a4]", // D C#m Bm C#m Bm A Bm A …
  V: "[g4,b4] [f#4,a4] [e4,g4] [f#4,a4] [e4,g4] [d4,f#4] [e4,g4] [d4,f#4] [c#4,e4] [d4,f#4] [c#4,e4] [b3,d4]", // G F#m Em F#m Em D Em D …
  W: "[[e3,g3,b3,d4,f#4]@17 ~@7]/3", // Em7
})).s("gm_acoustic_guitar_steel").gain(0.64)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B A C D E F G H I J K D E F G H I J K D E F G H I J K D E F G H I J K D E F G H I J K D E F G D E F G H I J K D E F
  G H I J L D E F G H I J K D E F G H I J K D E F G H I J K D E F G H I J K D E F G H I J K D E F G H I J K M@8
>`.pickRestart({
  A: "[e3,g3,b3]@3 ~@6 e3@2 e3, b2@2 b2, e2@5 e2@7, ~ [e3,g3,b3]!2 [g3,b3]", // Em G
  B: "f#2@3 ~ [f#2,e3,f#3,b3]@2 ~@6 b2@4 ~@6 b2@2, ~@5 f#2@7, ~@5 [e3,f#3,b3]@4 [e3,f#3,b3]@3, ~@8 b2@3 ~", // Esus2
  C: "[f#2,b2]@2 ~@2 [f#2,b2,e3,f#3,b3] ~@5 [e3,f#3,b3]@6 ~@2 [e3,f#3,b3]@4 ~@2, ~@5 f#2@6 ~, ~@8 b2@3 ~", // B5 Esus2
  D: "[e3,g3,b3]@6 ~@12 [e3,g3,b3]@4 e3 ~, [e2,b2]@10 [e2,b2]@6 [e2,b2]@7 ~, ~ [e3,g3,b3]!2 ~", // Em E5 Em
  E: "[f#2,b2,e3,f#3,b3]@2 ~@2 [f#2,b2,e3,f#3,b3] ~@5 [f#2,b2]@6 ~@6 [f#2,b2]@2, ~@5 [e3,f#3,b3]@4 [e3,f#3,b3]@3, ~@8 [f#2,b2]@3 ~", // Esus2 B5 Esus2 B5
  F: "[e3,g3,b3]@5 ~@13 e3@4 e3@2, [e2,b2]@5 [e2,b2]@3 [e2,b2]@4, ~ [e3,g3,b3]!2 [g3,b3]", // Em E5 Em G
  G: "[e3,f#3,b3] ~ [e3,f#3,b3] ~@2 b2@3 ~ [e3,f#3,b3]@3, [f#2,b2]@2 ~@3 f#2@7, ~@5 [e3,f#3,b3]@4 ~@3, ~@2 b2", // Esus2 B5 Esus2
  H: "[e3,g3,b3]@4 ~@14 [e3,g3,b3]@4 e3 ~, [e2,b2]@10 [e2,b2]@6 [e2,b2]@7 ~, ~ [e3,g3,b3]!2 ~", // Em E5 Em
  I: "[e3,f#3,b3]@2 ~@2 [e3,f#3,b3] ~@5 b2@6 ~@2 [e3,f#3,b3]@6, [f#2,b2]@2 ~@3 f#2@7, ~@5 [e3,f#3,b3]@4 ~@3, ~@2 b2", // Esus2 B5 Esus2
  J: "[e3,g3,b3]@5 ~@13 [e3,g3,b3]@4 e3 ~, [e2,b2]@10 [e2,b2]@6 [e2,b2]@7 ~, ~ [e3,g3,b3]!2 ~", // Em E5 Em
  K: "[f#2,b2,e3,f#3,b3]@2 ~@2 [f#2,b2,e3,f#3,b3] ~@5 [e3,f#3,b3]@6 [f#2,b2]@2 [e3,f#3,b3]@2 ~@4, ~@10 [f#2,b2]@5 ~@9", // Esus2 B5 Esus2 B5
  L: "[a2,e3,f#3,b3]@7 ~", M: "[[g3,b3,d4], [e2,e3]@11 ~@37]/8",
})).s("gm_electric_guitar_muted").gain(0.47)

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

// drums · rim
const rim = s("rim").struct("<~@12 A@15 B ~@8 A@19 B ~@8 A@3 ~@5 A@23 B ~@24>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@27 A B@8 ~@19 A B@7 ~@4 C B@4 ~@23 A B@15 D ~@8>".pickRestart({
  A: "~@8 x!4", B: "~ x ~ x", C: "x!3 ~@3 x ~ x!4", D: "~@3 x ~@4 x!4",
})).gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@27 A ~@27 A ~@10 B C ~@27 A ~@15 A ~@8>".pickRestart({
  A: "~@6 x!2 ~@4", B: "~@11 x", C: "~@3 x!3 ~ x ~@4",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@67 [~@9 x ~ x] ~@43 [~@11 x] ~@8>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 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 C A B D 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 E ~@8
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!6 ~", C: "~ x ~ x", D: "x ~ x!2 ~ x!2 ~ x!2 ~@2", E: "x ~@2 x ~ x!6 ~",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@67 [~@7 x ~@4] ~@43 [~@2 x] ~@8>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A@3 ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B C ~@7
>`.pickRestart({
  A: "~@11 x", B: "~@2 x ~@8 x", C: "x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@67 [~@5 x ~@6] ~@43 [~@5 x ~@6] ~@8>").gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@28 A@8 ~@20 A@7 B ~@4 A@4 ~@24 A@16 B ~@7>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@19 A B@7 C B@8 ~@11 A B@7 C B@6 D E ~@2 B F B@4 ~@15 A B@7 C B@15 G ~@8
>`.pickRestart({
  A: "~@2 x", B: "~@3 x ~@4 x ~@3", C: "~@3 x ~@2 x!3 ~@3", D: "~@3 x ~@2 x ~ x!3 ~", E: "~@3 x!4 ~@5",
  F: "~@3 x ~@2 x ~ x ~@3", G: "~ x ~@2",
})).gain(2.56)

// drums · congas
const congas_2 = s("conga:33").struct("<~@19 A B@16 ~@11 A B@14 C D ~@2 B E B@4 ~@15 A B@23 F ~@8>".pickRestart({
  A: "~@9 x ~ x", B: "~@2 x ~@6 x ~ x", C: "~@2 x ~@8 x", D: "~@7 x!5", E: "~ x ~@4", F: "~@2 x ~@6 x ~@2",
})).gain(2.56)

stack(
  bass, epiano2, acoustic_guitar_steel, electric_guitar_muted, kick, rim, snare, snare_soft, low_tom, hihat, mid_tom,
  open_hat, high_tom, ride, congas, congas_2
)

More by America