Strudelify

In The Army Now

Status Quo

KeyG majorTempo109 bpm
0:00/0:00
// In The Army Now — Status Quo
// 109 bpm, 4/4, key G major. 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(109/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.

// other · synth drum
const synth_drum = note("<~@45 [b4 ~@2 a4 ~ g4!2 ~ f4 ~@2 e4 ~ d4!2 ~] ~@59>").s("gm_synth_drum").gain(0.64).pan(0.9)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@3 A@2 B@2 ~@15 C D E F G H I F E D E F G H I F E J K L M D E N O P Q R S T U V O W X ~ Y Z AA AB AC@3 AD AE T U AF S
  T U AG AH@2 AI@2 AJ AK AL AM AN AO AP AQ AN AR AP AS AT AO AU AV AW AX AY AZ BA BB BC BD BE@3
>`.pickRestart({
  A: "[d2@11 ~ a1@20]/2", B: "[d2@11 ~ c2@19 ~]/2", C: "~@10 e2 f2 e2@2 c2@2", D: "d2@2 ~ d2 a1@4",
  E: "d2@2 ~ d2 a1@2 c2 a1", F: "d2@3 d2 a1@4", G: "d2 c#2 c2@2", H: "g1@2 ~ g1 d2@4", I: "a1@2 ~ a1 e2@2 a1@2",
  J: "d2@2 ~ d2 d2@2 a1@2", K: "~ a1 e2 g2 a2@2 a2@2", L: "d2@3 d2 d2@2 c2@2", M: "c2!2 g1 a1 c2@2 ~ a1", N: "d2 ~@15",
  O: "e2@2 ~ e2 b1@4", P: "e2@2 ~ e2 b1@2 d2 b1", Q: "e2@2 ~ e2 b1@2 ~ e1", R: "e2 e1 d#2 e1 d2@2 e1 g1",
  S: "a1@2 ~ a1 e1@4", T: "b1@2 ~ b1 f#1@2 g1 f#1", U: "e1@2 ~ e1 b1@4", V: "e1@2 ~ e1 b1 a1 b1 d2",
  W: "e2@3 ~@3 e2@2 b1@4 d2@2 b1@2", X: "e1@2 ~@4 e1@2 e1@2 ~@2 e2 ~@3", Y: "a1@5 ~ a1@2 e1@8",
  Z: "b1@3 ~@3 b1@2 f#1@4 g1@2 f#1@2", AA: "e1@2 ~ e1 b1@2 b1@2", AB: "e1@3 ~@3 e1@2 b1@4 b1@4",
  AC: "e1 ~ e1 ~@2 e1!2 ~ e1@2 ~@2 e2@3 ~", AD: "e2@2 e3 e2 d#2@2 d#3 d#2 d2@2 d3 d2 b2@3 ~", AE: "a1@2 ~ a1 e1@3 ~",
  AF: "e1!2 ~ e1 b1 f#1 g1 b1", AG: "e1!2 ~ e1 b1 a1 b1 d2", AH: "[e2!5 ~ b1@4 f#2 a2 b2@3 ~]/2",
  AI: "[e2!5 ~ d2@3 d2 a1 b1 d2 e1 g1 b1]/2", AJ: "e2@2 e2 ~@3 e2@2 b1@8", AK: "e2@2 e2 ~@3 e2@2 b1@4 d2@2 b1@2",
  AL: "e2@2 e2 ~@3 e2@2 b1@5 ~ e1@2", AM: "e2!2 e1@2 d#2@2 e1@2 d2@4 e1@2 g1@2", AN: "a1@2 a1 ~@3 a1@2 e1@8",
  AO: "b1@2 b1 ~@3 b1@2 f#1@7 ~", AP: "e1@2 e1 ~@3 e1@2 b1@7 ~", AQ: "e1@2 e1 ~@3 e1@2 e2@2 e1@2 f#2@2 g2@2",
  AR: "b1@2 b1 ~@3 b1@2 f#1@8", AS: "e1 e1@3 e2@2 e1@2 f#2@2 ~@2 g2@4", AT: "a1@2 a1 ~@3 a1@2 e1@7 ~",
  AU: "e1@2 e1 ~@3 e1@2 b1@6 ~@2", AV: "e1 ~ e1 ~ e2 e1!2 ~ e1 ~ f#1 ~ g1@2 b1 g1", AW: "a1 ~ a1 ~@2 a1!2 ~ e1@6 ~ a1",
  AX: "b1!3 ~@3 b1!2 f#1@4 g1@2 f#1@2", AY: "e1!3 ~@3 e1@2 b1@4 ~@2 b1@2", AZ: "e1 ~ e1@2 ~@2 e1@2 g1@2 b1@2 e2@4",
  BA: "a1!3 ~@3 a1@2 e1@7 a1", BB: "b1!3 ~@3 b1@2 f#1@4 g1@2 f#1@2", BC: "e1@2 e1 ~@3 e1@2 b1@8",
  BD: "e3@2 e3 ~ d#3!2 d#3@2 d3@2 b2!2 a2@2 g2 ~",
  BE: "[a2@4 ~@2 a1@2 a1@2 g#1@2 a1@2 b1@4 b2 ~ b1@4 b1@2 ~@2 b1@2 e1@18]/3",
})).s("gm_synth_bass_2").gain(0.45).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@3 A@2 B@2 ~@32 A@2 B@2 ~@3 C@4 D E F@2 C@2 G ~ D E F@2 ~@4 D E F@2 D E F@2 H@4 F@4 D E F@2 D E F@2 D E F@2 D E F@2 D
  E F@2 I J ~
>`.pickRestart({
  A: "[[d3,a3,d4,f4]@11 ~ [a2,g3,c4,e4]@19 ~]/2", B: "[[d3,a3,d4,f4]@11 ~ [c3,g3,c4,e4]@19 ~]/2",
  C: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  D: "[e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~", // Am
  E: "[d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~", // Bm
  F: "[e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~", // Em
  G: "[e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~@3", // Em
  H: "[[e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~ [e4,g4,b4] ~@3 [d4,f#4,a4]@19 ~]/2", // Em D
  I: "[e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [d4,f#4,b4]@2", // Am Bm
  J: "~@2 [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~@3", // Bm
})).s("gm_piano").gain(0.3).pan(0.7)

// chords · drawbar organ · "ORGAN 1" · Em
const drawbar_organ = note("<~@62 [~@10 [g5,b5,e6]@2 [g5,b5,e6]@3 ~]!3 ~@40>").s("gm_drawbar_organ").gain(0.4)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@3 A@2 B@2 ~@25 C D@2 ~@4 A@2 B@2 ~@19 E@3 F ~@8 G@2 H@4 ~@4 I J ~@2 I J K L M@2 K L K L K L K L N@3
>`.pickRestart({
  A: "[~@2 f4 d4 a4 ~ g4@10]/2", B: "[~@2 a4 g4 d5 ~ c5@10]/2", C: "~@10 d5@2 ~ [d4,d5]@2 ~",
  D: "[[d4,d5]@2 ~ [d4,d5]@3 [d4,d5]@2 [d4,d5]@4 [d4,d5]@20]/2", // D
  E: "[e3,g#3,d4,g4,b4,e5] ~ [e3,g#3,d4,g4,b4,e5] ~@3 [e3,g#3,d4,g4,b4,e5] ~ [e3,g#3,d4,g4,b4,e5] ~@7", // E7
  F: "~@2 [g#3,d4,g4,b4] ~@3 [g#3,d4,g4,b4] ~@3 [g#3,d4,g4,b4] ~ [g#3,d4,g4,b4] ~ [g#3,d4,g4,b4] ~", // G
  G: "[~@2 b4@2 e5@2 g5@2 b5@2 a5 g5 a5@2 b5@16 ~@2]/2", H: "[~@2 b4@2 e5@2 g5@2 b5@2 a5 g5 a5@7 ~ b3@2 b3@40 ~@2]/4",
  I: "~ b3 f#4 d4 a4 g4 f#4 g4", J: "e4", K: "~@2 g4 ~ f#4@2 g4@2 a4@2 g4@2 f#4@2 g4 ~", L: "b4", M: "[e2,b2,e3]@15 ~",
  N: "[~@2 g4 ~ f#4@2 g4@2 a4@2 g4@2 a4@2 b4@10 g4@2 b3@2 f#4@2 [e4,g4]@17 ~]/3", // Em
})).s("gm_overdriven_guitar").gain(0.35)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~ A@2 B C D E A@4 F@2 A@6 F@2 A@6 F C A@6 F C A@2 B C D E A@2 G H@4 C I H@4 J ~ C I H@2 ~@3 K C I H@2 C I H@2 L@2 M@2
  N@3 ~ O P N@2 O P N@2 O P ~@2 O P ~@2 O P ~@2 Q@3
>`.pickRestart({
  A: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  B: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [a2,e3] ~ [a2,e3] ~", // D5 A5
  C: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~", // A5
  D: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [c3,g3] ~ [c3,g3] ~", // D5 C5
  E: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
  F: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", G: "[d3,a3] ~@15",
  H: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  I: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // B5
  J: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~@3", // E5
  K: "[e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ [e2,b2] ~", // E5
  L: "[[g3,e4] ~ [g3,e4] ~ [g3,e4] ~ [g3,e4] ~ [g3,e4] ~@3 [a3,d4]@19 ~]/2", // C D5
  M: "[[g3,e4] ~ [g3,e4] ~ [g3,e4] ~ [g3,e4] ~ [g3,e4] ~@3 [a3,f#4]@19 ~]/2", N: "[e2,b2] ~ [e2,b2] ~@13",
  O: "[a2,e3] ~ [a2,e3] ~@13", P: "[b2,f#3] ~ [b2,f#3] ~@13",
  Q: "[[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [b2,f#3]@4 [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~@3 [b2,f#3]@2 [e2,b2]@17 ~]/3", // A5 B5 E5
})).s("gm_distortion_guitar").gain(0.25).pan(0.7)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A@2 B@2 C@2 D@4 E@2 F@2 D@4 E@2 F@2 G@4 E@2 F@2 H@4 I J K@2 L@2 C@2 M@2 N O@4 P Q R S T@2 U ~ V W X@3 ~@3 Y Z AA@2 Y
  Z AA@2 AB@2 AC@2 AD@3 AE Y Q AA@2 AF Q AG@2 Y Q AH@2 Y Q AH@2 Y Q AH@2 AI@2 ~
>`.pickRestart({
  A: "[d4,a4]/2", B: "[[f4,a4]@3 [c4,e4,g4]@5, d4 ~@31]/2", C: "[[d4,f4,a4]@8 [f4,a4,d5]@3 ~ [e4,g4,c5]@20]/2",
  D: "[a3,c4,f4]/4", E: "[a#3,d4,g4]/2", F: "[d4@4 e4@3 d4, [f4,a4]]/2", G: "[~@24 a4@5 f4 f4@2, [a3,c4], f4@29 ~@3]/4",
  H: "[c4,f4,a4]/4", I: "[g4,a#4,d5]", J: "[e4,g4,c5]", K: "[~@4 e4@3 d4, [f4,a4,d5]]/2",
  L: "[[d4,f4,a4]@3 [c4,e4,g4]@5]/2", M: "[a3,c4,f4]/2", N: "[c4,f4,a4] ~@15",
  O: "[[d4,g4,b4]@5 d5 e5 [b4,d5,g5], ~@5 [g4,b4]@2 ~]/4", P: "[a4,c5,e5]", Q: "[f#4,b4,d5]", R: "[e4,g4,b4]",
  S: "f#4@3 e4, [g4,b4]", T: "[[d4,g4,b4]@3 [g4,b4,d5]]/2", U: "[g4,b4,e5]@13 ~@3", V: "e5@3 g5, [a4,c5]",
  W: "f#5 a5, [b4,d5]", X: "[~@2 g5@6 [g4,b4,e5]@25 ~@15, [b4,e5] ~@5]/3", Y: "[e4,a4,c5]", Z: "[d4,f#4,b4]",
  AA: "[e4@4 f#4@3 e4, [g4,b4]]/2", AB: "[[e4,g4,b4]@3 [d4,f#4,a4]@5]/2",
  AC: "[[e4,g4,b4]@8 [g4,b4,e5]@3 ~ [f#4,a4,d5]@20]/2", AD: "[e4,g4,b4]/3", AE: "g5 f#5 [g4,b4,e5]@2, [b4,e5] ~",
  AF: "[a4,c5]", AG: "[e4@16 f#4@12 e4@3 ~, [g4,b4]]/2", AH: "[e5@14 f#5 d5, [g4,b4]]/2",
  AI: "[[e4,a4,c5]@7 [f#4,b4,d5]@8 ~]/2", // Am Bm
})).s("gm_string_ensemble_1").gain(0.25)

// other · whistle
const whistle = note("<~@3 A@2 B@4 ~@6 C D E@2 F G H I@3 ~@14 A@2 B@4 ~@29 J@2 K@4 ~@25>".pickRestart({
  A: "[~@2 f5 d5 a5 ~ g5@10]/2", B: "[~@2 a5 g5 d6 ~ c6@24 ~@2]/4", C: "d6@3 e6", D: "f6@3 g6", E: "[a6@15 a#6]/2",
  F: "g6@7 ~", G: "d7@11 ~ a#6@4", H: "a6@15 ~", I: "[d7@43 ~@5]/3", J: "[~@2 g5 e5 b5 ~ a5@10]/2",
  K: "[~@2 b5 a5 e6 ~ d6@24 ~@2]/4",
})).s("gm_whistle").gain(0.4).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A ~ A ~@17 B@16 C D C D B@2 ~ E@3 F E@4 B E G ~ E@4 H@3 I E@11 J K@10 L I K@2 M N J@7 E O P ~
>`.pickRestart({
  A: "x ~@2 x", B: "x!2", C: "x ~ x!2", D: "~ x", E: "x!2 ~@2 x ~@3", F: "x!3 ~ x ~@3", G: "x!2 ~@2 x ~ x ~",
  H: "x ~ x ~@2 x ~@2 x ~@3 x ~@3", I: "~@3 x ~@3 x ~@3 x ~@4", J: "x ~ x ~@5 x ~@6 x", K: "x!3 ~@5 x ~@6 x",
  L: "x!3 ~@5 x ~@5 x ~", M: "x!3 ~@5 x ~@7", N: "x ~ x ~@2 x ~@2 x ~ x ~ x ~ x ~", O: "x!2 ~@2 x ~ x!2",
  P: "~ x!2 ~@7 x ~ x ~ x ~",
})).gain(0.45)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@23 A@22 ~ A@11 ~ A@7 ~ A@23 ~ A@14 ~>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<~@31 [~ x ~ x]!8 [x ~@2 x] ~ [x ~@2 x] ~ [~ x ~ x]!2 ~@60>").gain(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@101 [~@6 x!2] ~@3>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@18 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@6 B ~@3 C ~@15 A ~@3 D ~@3 D ~@24 D@2 ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~ x", D: "~@7 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~ A ~ B ~@31 A ~ A ~@4 B ~@2 C B ~@3 B ~ C ~ B ~@2 D@5 ~@4 B ~@3 A ~ A ~ A D@3 A D@3 A D@2 ~ A D@7 A D@2 ~ E F ~
>`.pickRestart({
  A: "x ~@2 x", B: "x", C: "~ x", D: "~@3 x", E: "x ~ x ~ x ~@2 x", F: "~@4 x ~ x!2",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct("<[~@14 x!2] x ~@4 [~@14 x!2] x ~@97>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@7 A@38 ~ A@10 B ~ A@4 ~@4 A@36 ~@3>".pickRestart({
  A: "x!8", B: "x!7 ~",
})).gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@7 A@38 ~ A@11 ~ A@4 ~@4 A@36 ~@3>".pickRestart({
  A: "x!4",
})).gain(0.75)

stack(
  synth_drum, bass, piano, drawbar_organ, overdriven_guitar, distortion_guitar, string_ensemble_1, whistle, kick,
  kick_soft, rim, snare, hihat, low_tom, open_hat, crash, ride, tambourine, cabasa
)

More by Status Quo