Strudelify

Army Dreams

Bush

KeyD majorTempo67 bpm
0:00/0:00
// Army Dreams — Bush
// 67 bpm, 6/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/8 at bar 1, 6/8 at bar 2, 3/8 at bar 27, 6/8 at bar 28, ...) are rendered on a constant 6/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 3 "Mandolin" named as a guitar, played on electric guitar clean (its lead 5 charang patch is not one); ch 7 "Whining Harmonica" named as an organ, played on harmonica (its shanai patch is not one)
// note: Full arrangement: all 76 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/3)

// 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.

// other · lead 3 calliope · "Army Dreamers"
const lead_3_calliope = note(`<
  ~@3 A B ~@5 C ~ B ~@4 D E F G D E ~@12 H I H J H I ~@11 C ~ C ~ C ~ B ~ B ~ B ~ C ~ C ~ C ~ C ~ C ~ B ~
>`.pickRestart({
  A: "~ b4 ~@4", B: "~@5 f#3 a3 f#3 a3@2 e3@2", C: "~@6 a3 f#3 a3@2 e3@2", D: "d4@2 d4 e4 f#4@2 e4 d4 e4 d4 e4@2",
  E: "d4 ~", F: "d4@2 d4 e4 f#4@2 e4 d4 e4 d4 e4 d4", G: "e4 d4@5 ~@6", H: "~@6 d4@2 d4 e4 f#4@2",
  I: "e4 d4 e4 d4 e4@2 d4@6", J: "e4 d4 e4 d4 e4 d4 e4 d4@5",
})).s("gm_lead_3_calliope").gain(0.41)

// other · electric guitar clean · "Mandolin"
const electric_guitar_clean = note(`<
  ~ A B C D A B E B A B C D A B E B F G F G F G ~@4 H I J K H I L M N O P O P O Q ~ R ~ R ~@5 A B C D A B E B A B C D A
  B E B A B C D A B E B ~
>`.pickRestart({
  A: "~@2 a5 f#5@2 a5", B: "c#5 ~", C: "~@2 d5 c#5@2 d5", D: "f#4 ~", E: "~@2 f#4 g4@2 b4",
  F: "f#4!2 f#4@2 d5@2 f#4@2 b4@4 f#4!2 f#4@2 g#4@2 f#4@2 a4@4", G: "d4!2 d4@2 f#4@4 d4@4 c#4!2 c#4@2 e4@2 c#4@2 f#4@4",
  H: "~@5 a5", I: "f#5@2 a5 c#5@3", J: "~@5 d5", K: "c#5@2 d5 f#4@3", L: "~@5 f#4", M: "g4@2 b4 c#5@3",
  N: "~@12 f#4!2 f#4@2 d5@2 f#4@2 b4@4", O: "f#4!2 f#4@2 g#4@2 f#4@2 a4@4 d4!2 d4@2 f#4@4 d4@4",
  P: "c#4!2 c#4@2 e4@2 c#4@2 f#4@4 f#4!2 f#4@2 d5@2 f#4@2 b4@4", Q: "c#4!2 c#4@2 e4@2 c#4@2 f#4@4 ~@12", R: "a5 ~",
})).s("gm_electric_guitar_clean").gain(0.31).pan(0)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~ A B C B D B E B F G E H F G E G I J I J I J K L M N O P Q P R P Q P S T U T U T V W X Y X Z X@2 AA AB E G AC AD AC
  AE AC AF C G E G C G E AG C G E G C G E G AH
>`.pickRestart({
  A: "b4 [b4,d5]!2 ~ [b4,d5]!2, b3 e3", B: "~ [a4,c#5,g#5] [a4,c#5,f#5] ~ [a4,c#5,e5]!2, f#3 a3",
  C: "~ [b4,d5]!2 ~ [g4,b4,e5]!2, b3 e3", D: "~ [b4,d5]!2 ~ [b4,d5]!2, b3 e3",
  E: "~ [b4,d5,f#5]!2 ~ [g4,b4,e5]!2, b3 e3", F: "~ [b4,d5,f#5]!2 ~ [b4,d5]!2, b3 e3",
  G: "~ [a4,c#5,f#5]!2 ~ [a4,c#5,e5]!2, f#3 a3", // F#m A
  H: "~@2 [a4,c#5,f#5] ~ [a4,c#5,f#5]@2 ~@2 [a4,c#5,e5] d5 [a4,c#5,e5]@2, f#3 a3, ~@3 g#5@2 ~@7", // F#m A
  I: "~ [b4,d5] [b4,d5,f#5] ~ [b4,d5,g#5] [b4,d5,a5], b3 e4", J: "~ [a4,d5,e5] [a4,d5,f#5] ~ a4 c#5, d4 f#3",
  K: "~ [b4,d5,f#5]!2 ~ [b4,d5,f#5]!2, b3 d4", L: "~ [g4,b4,d5]!2 ~ [f#4,b4,d5]!2, g3 b3",
  M: "~ [d4,b4]!2 d5 [d4,a4]!2, g3 f#3", N: "~ [d4,b4]!2 ~ [f#4,b4,d5]!2, g3 b3",
  O: "[g3,d4,b4]@3 ~ [b4,d5,f#5] [b4,d5], ~ b3", P: "~ [g4,b4,e5]!2 ~ [a4,c#5,f#5] [a4,c#5], e3 f#3",
  Q: "~ [a4,c#5,e5]!2 ~ [b4,d5,f#5]!2, a3 b3", R: "~@2 [a4,c#5,e5] d5 [a4,c#5,e5]@2 ~@2 [b4,d5,f#5]@2 [b4,d5]@2, a3 b3",
  S: "~ [a4,c#5,e5]!2 ~ [b4,d5] [b4,d5,f#5], a3 b3", T: "~ [b4,d5,g#5] [b4,d5,a5] ~ [a4,d5,e5] [a4,d5,f#5], e4 d4",
  U: "~ a4 c#5@2 f#5@2 ~@2 [b4,d5]@2 [b4,d5,f#5]@2, f#3 b3", V: "~ a4 c#5 ~ [b4,d5,f#5]!2, f#3 b3",
  W: "~ [b4,d5,f#5]!2 ~ [g4,b4,d5]!2, d4 g3", X: "~ [f#4,b4,d5]!2 ~ [d4,b4]!2, b3 g3",
  Y: "d5 [d4,a4]!2 ~ [d4,b4]!2, f#3 g3", Z: "~ [d4,a4]!2 ~ [d4,b4]!2, f#3 g3",
  AA: "~@2 [f#4,b4,d5]@2 [f#4,b4,d5]@2 ~@2 [d4,b4] a4 [d4,b4] f#4, b3 g3", AB: "[b3,f#4,b4,c#5,f#5]",
  AC: "~ [b4,d5]!2 ~ [g4,b4]!2, b3 e3", AD: "~ [a4,c#5] [a4,c#5,f#5] ~ [a4,c#5,e5]!2, f#3 a3",
  AE: "~ [a4,c#5]!2 ~ [a4,c#5]!2, f#3 a3", AF: "~@2 [a4,c#5,f#5]@2 [a4,c#5]@2 ~@2 [a4,c#5] e5 [a4,c#5]@2, f#3 a3",
  AG: "~@2 [a4,c#5,f#5]@2 [a4,c#5,f#5]@2 ~@2 [a4,c#5,e5] d5 [a4,c#5,e5]@2, f#3 a3", AH: "[b4,d5,f#5]",
})).s("gm_acoustic_guitar_nylon").gain(0.26)

// other · overdriven guitar · "Electric Guitar"
const overdriven_guitar = note("<~@19 A ~@17 B@2 ~@37>".pickRestart({
  A: "f#6@8 e6 d6 b5@14", B: "[~@4 a6 b6@4 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.41)

// other · harmonica · "Whining Harmonica"
const harmonica = note("<~@20 A ~ A ~@16 B ~ C ~@34>".pickRestart({
  A: "~@7 c#5 d5 c#5 a4 f#4", B: "~ c#5 d5 c#5 a4 f#4 ~@6", C: "~ c#5 d5 c#5 a4 f#4 b4@2 ~@4",
})).s("gm_harmonica").gain(0.31)

// chords · viola · "Sampled Strings"
const viola = note(`<
  ~ A B C D A E C B F ~@7 G H I J I K ~@4 L M N M N M O M P Q R S T U V ~@9 W X C B C Y Z B C Y Z B C Y Z B AA AB AC AD
  AE AF AG AB AH
>`.pickRestart({
  A: "b1 [f#3,d4] [d3,f#3,b3] e1 [e3,g3,b3] ~", B: "f#1@2 [c#3,a3]@2 [c#3,f#3]@2 ~ c#4 d4 c#4 a3 e3, ~@3 a1 ~@2",
  C: "b1 [d3,b3] [d3,f#3,b3] e1 [e3,g3,b3] ~", // G Bm Em
  D: "f#1@2 [c#3,a3]@2 [c#3,f#3]@2 ~ c#4 d4 c#4 a3 e3, ~@3 a1 ~@2, ~@7 e3@4 ~", // F#m F#5
  E: "f#1@2 [c#3,a3]@2 [c#3,f#3]@2 ~ [a3,c#4] [b3,d4] [a3,c#4] e3 c#3, ~@3 a1 ~@2", F: "[b1,f#3,b3] ~@5",
  G: "f#3@3 g#3@2 b3", H: "a3!2 d4 c#4 a3 f#3", I: "b3@3 g#3@2 b3", J: "a3@2 d4 c#4 a3 f#3", K: "a3 f#3 d4 c#4 a3 f#3",
  L: "~@3 b1 [d3,b3] [d3,f#3,b3]", M: "e1 [e3,g3,b3] ~ f#1 [c#3,a3] [c#3,f#3]",
  N: "~ c#4 d4 c#4 a3 e3 b1@2 [d3,b3]@2 [d3,f#3,b3]@2, a1 ~@5, ~ a3@3 ~@8", // G Bm
  O: "~ [a3,c#4] [b3,d4] [a3,c#4] a3 e3 b1@2 [d3,b3]@2 [d3,f#3,b3]@2, a1 ~@5", // A Bm A G Bm
  P: "~ c#4 d4 c#4 a3 e3 [b1,f#3,b3]@2 ~@4, a1 ~@5", Q: "g#3@4 b3@2 b3 a3 f#3@2 d4@2, e3 ~@5",
  R: "c#4 a3 f#3 [f#3,b3] ~@2", S: "g#3@2 b3 a3 f#3@2, e3 ~@5", T: "~ c#4 d4@2 c#4@2 [f#3,b3]@2 ~@4",
  U: "g#3@2 b3 a3@3, e3 ~@5", V: "~ c#4 a3 b3 ~@2", W: "b1 ~ [d3,d4] e1 [e3,g3,b3] ~",
  X: "f#1@2 [c#3,a3]@2 [c#3,f#3]@2 ~ c#4 d4 c#4 a3 e3, ~@3 a1 ~@2, ~@7 e3@3 ~@2", // F#m F#5
  Y: "f#1@2 [c#3,a3]@2 [c#3,f#3]@2 ~ a2 b2 c#3 d3 e3, ~@3 a1 ~@2", Z: "[b1,d3] [d3,f#3] [d3,f#3,b3] e1 [e3,g3,b3] ~",
  AA: "[b1,d3,b3] [d3,f#3,b3] ~ [e1,e3,b3] [e3,g3] ~", // Bm E5 Em
  AB: "[f#1,c#3,a3]@2 [c#3,f#3]@2 ~@2 a2 b2 c#3 d3 e3 c#3, ~@3 a1 ~@2", // F#m F#5
  AC: "[b1,b2,d3] [b2,d3,f#3] ~ [e1,b2,e3,g3] b2 ~", // Bm Em
  AD: "[f#1,c#3,a3]@2 [c#3,f#3]@2 ~@2 c#4 d4 c#4 a3 e3 c#3, ~@3 a1 ~@2", AE: "[b1,d3] b2 ~ [e1,b2,g3] [b2,e3] ~",
  AF: "[f#1,c#3,a3]@2 [c#3,f#3]@2 ~@2 c#4 d4 c#4 a3 b3 c#4, ~@3 a1 ~@2", // F#m F#5
  AG: "[b1,b3] [d3,f#3,b3] ~ [e1,e3,g3,b3] [e3,g3] ~", AH: "[b1,b2] ~@5",
})).s("gm_viola").gain(0.41).pan(1)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B A B A B A B A B A B A B A B C D C D C D E F G F H I J I J I J I J K L K L K L M N O N O N@3 P A B A B A B A B A
  B A B A B A B A B A B A B A B P
>`.pickRestart({
  A: "b3 e3", B: "f#3 a3", C: "b3 e4", D: "d4 f#3", E: "b3 d4", F: "g3 b3", G: "g3 [f#3,d4]", H: "[g3,d4] b3",
  I: "e3 f#3", J: "a3 b3", K: "e4 d4", L: "f#3 b3", M: "d4 g3", N: "b3 g3", O: "[f#3,d4] g3", P: "b3",
})).s("gm_acoustic_bass").gain(0.51)

// other · taiko drum · "Percussion"
const taiko_drum = note("<~ [b3!2]!26 [~ b3] [b3!2]!22 [b3 ~] [b3!2]!24 ~>").s("gm_taiko_drum").gain(0.41)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~@12 B ~ B ~ B ~ B ~@14 C A ~ A ~ A ~@4 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~@5 x", B: "~ x ~", C: "~@2 x",
})).gain(0.51)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~@12 B ~ B ~ B ~ B ~@14 C A ~ A ~ A ~@4 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~@5 x", B: "~ x ~", C: "~@2 x",
})).gain(0.51)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~ A B ~@2 A ~ A ~ A ~ A ~ A ~@11 B ~ B ~ B ~ B ~@14 C ~ A ~ A ~ A ~@3 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "x", B: "~ x", C: "~@5 x",
})).gain(0.51)

// drums · cowbell
const cowbell = s("cb").struct(`<
  A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~@12 B ~ B ~ B ~ B ~@14 C A ~ A ~ A ~@4 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~@5 x", B: "~ x ~", C: "~@2 x",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A B ~@2 A ~ A ~ A ~ A ~ A ~@11 B ~ B ~ B ~ B ~@14 C ~ A ~ A ~ A ~@3 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "x", B: "~ x", C: "~@5 x",
})).gain(0.51)

stack(
  lead_3_calliope, electric_guitar_clean, acoustic_guitar_nylon, overdriven_guitar, harmonica, viola, bass, taiko_drum,
  low_tom, pedal_hat, mid_tom, cowbell, crash
)

More by Bush