Strudelify

Soldier Soldier

Captain Jack

KeyC majorTempo118 bpm
0:00/0:00
// Soldier Soldier — Captain Jack
// 118 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 16 pad choir (copy of ch 15 pad choir, 0.5 beats late)
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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 strings 1
const synth_strings_1 = note(`<
  ~@2 A B C D A B C E ~@8 F G H I J H A I J H A I J H A I J H A I ~@8 F G H I J H A I J H A I J H A I J H A I F G K F A
  G K F G L A B C E A B C D ~@8 J H A I J H A I J H A I J H A M ~
>`.pickRestart({
  A: "[a3,c4,f4]", B: "[b3,d4,g4]", C: "[c4,f4,a4]", D: "[c4,d4,g4] [b3,d4,g4]", E: "[c4,d4,g4]@8 [b3,d4,g4]@5 ~@3",
  F: "[f3,a3,c4]", G: "[g3,b3,d4]", H: "[a3,c4,e4]", I: "[g3,c4,d4] [g3,b3,d4]", J: "[g3,c4,e4]", K: "[g3,b3,e4]",
  L: "[g3,c4,d4] [b3,d4,g4]", M: "[g3,c4,d4]@8 [g3,b3,d4]@7 ~",
})).s("gm_synth_strings_1").gain(0.14)

// other · woodblock
const woodblock = note("<~ A ~@3 A ~@3 A ~@11 A ~@15 A ~@11 A ~@15 A ~@9 A ~@3 A ~@3 A ~@7 A ~@15 B ~>".pickRestart({
  A: "~@12 f4@3 ~", B: "~@6 f4 ~",
})).s("gm_woodblock").gain(0.32)

// other · synth drum
const synth_drum = note(`<
  ~ A ~@7 B ~ C ~ D ~@2 D ~@4 B ~@15 B ~ C ~ D ~@2 D ~@4 B ~@17 C ~@4 D ~@2 B ~@7 E ~@7 E ~@15 F ~
>`.pickRestart({
  A: "~@12 a3@3 ~", B: "~@12 c#4@3 ~", C: "~@5 g5@3", D: "~@10 g5@5 ~", E: "~@12 g5@3 ~", F: "~@6 a3 ~",
})).s("gm_synth_drum").gain(0.13)

// bass · synth bass 2
const bass = note(`<
  ~@6 A B A C D E F G D E F G H I J K D E F G D E F G D E F G D E F G D E F G D E F G H I J K D E F G D E F G D E F G D
  E F L M N O P M N O Q R S ~@12 T E F L D E F G D E F U D E F G ~@5
>`.pickRestart({
  A: "d1", B: "g1", C: "g1@11 ~ g1@2 ~@2", D: "c2 ~@5 c2 ~@3 c2!2 e1 ~ g1 ~", E: "a1 ~@5 a1 ~@3 a1!2 d1 ~ e1 ~",
  F: "f1@2 ~@4 f1 ~@3 f1!2 c1 ~ f1 ~", G: "g1 ~@5 g1 ~@3 g1!2 a1 ~ g1 ~", H: "d1@2 ~@4 d1 ~@3 d1!2 e1 ~ d1 ~",
  I: "e1@2 ~@4 e1 ~@3 e1!3 ~ e1 ~", J: "f1@2 ~@4 f1 ~@3 f1 f1@2 ~ f1 ~", K: "g1 ~@3 g1 ~@3 g1 ~@3 g1@2 ~@2",
  L: "g1 ~@3 g1@2 ~@2 g1@2 ~@2 d1@2 ~@2", M: "d2 ~@5 d2 ~@3 d2!3 ~ c2 ~", N: "g1 ~@5 g1 ~@3 g1!3 ~ b1 ~",
  O: "c2@2 ~@4 c2 ~@3 c2!3 ~ a1 ~", P: "f1 ~@5 f1 ~@3 f1!3 ~ e1 ~", Q: "f1 ~@5 f2 ~@3 f1!3 ~ e1 ~",
  R: "g1@2 ~@4 g1 ~@3 g1!3 ~ g1 ~", S: "g1@2 ~@4 g1 ~@3 g1 ~ g1 ~ g1 ~", T: "c2@2 ~@4 c2 ~@3 c2!2 e1 ~ g1 ~",
  U: "g1 ~ g1 ~ g1 ~ g1 ~",
})).s("gm_synth_bass_2").gain(0.46)

// other · electric guitar muted
const electric_guitar_muted = note("<~@11 A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~@63>".pickRestart({
  A: "g2!4 a2!2 g2 ~@9",
})).s("gm_electric_guitar_muted").gain(0.29)

// chords · piano
const piano = note(`<
  ~@2 A B A C A B A C D E F G D E F G H I E J D E F G D E F G D E F G D E F G D E F G D E F G H I E J D E F G D E F G D
  E F G D E F G K I L H K I L H I M A B A C A B A C ~@8 D E F G D E F G D E F G ~@5
>`.pickRestart({
  A: "[d2,d3,f3,a3,c4]", B: "[g2,d3,g3,b3,d4]", C: "[g2,d3,g3,c4,d4] [g2,d3,g3,b3,d4]",
  D: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4]!2", // C
  E: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4]!2", // Am
  F: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4]!2", // F
  G: "~@2 [g3,c4,d4] ~@3 [g3,c4,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]!2", // Gsus4 G
  H: "~@2 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4] ~@3 [f3,a3,c4]!2", // F
  I: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,b3,d4]!2", J: "[c4,d4,g4] [b3,d4,g4]",
  K: "~@2 [f3,a3,d4] ~@3 [f3,a3,d4] ~@3 [f3,a3,d4] ~@3 [f3,a3,d4] ~", // Dm
  L: "~@2 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~@3 [g3,b3,e4] ~", M: "[g3,c4,d4]@8 [g3,b3,d4]@7 ~",
})).s("gm_piano").gain(0.45)

// other · pad choir
const pad_choir = note("<~@23 A ~ B ~ C ~ D ~@21 A ~ B ~ C ~ D ~@35 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~>".pickRestart({
  A: "e4@2 c4 ~ c4@2 a3@2 c4 ~ c4@2 e4@2 ~@2", B: "e4@2 c4 ~ c4@2 a3@2 c4 ~ d4@2 c4@2 ~@2",
  C: "e4@2 c4 ~ c4@2 a3@2 c4 ~ c4@2 e4 ~@3", D: "e4@2 c4 ~ c4 ~ g3 a3 c4 ~ d4@2 c4@2 ~@2",
})).s("gm_pad_choir").gain(0.26)

// other · tenor sax
const tenor_sax = note("<~@22 A ~ B ~ C ~ D ~@21 A ~ B ~ C ~ D ~@35 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~@2>".pickRestart({
  A: "e4@2 c4 ~ c4@2 a3 ~ c4 ~ c4@2 e4@2 ~@2", B: "e4@2 c4 ~ c4@2 a3@2 c4 ~ d4@2 c4@2 ~@2",
  C: "e4@2 c4 ~ c4@2 a3@2 c4 ~ c4@2 e4@2 ~@2", D: "e4@2 c4 ~ c4@2 g3 a3 c4 ~ d4@2 c4@2 ~@2",
})).s("gm_tenor_sax").gain(0.31)

// chords · blown bottle
const blown_bottle = note("<~@30 A B C@2 D E F@2 ~@20 A B G@2 D E F@2 ~@18 A B G@2 D E H@2 ~@17>".pickRestart({
  A: "e5 ~@5 e5 d5", B: "c5 ~@5 e5 d5", C: "[c5@2 a4 ~ c5@2 a4 ~ c5 ~@5 c5@4 a4 ~ c5@2 a4 ~ d5@2 ~@2 g4@2 ~@2]/2",
  D: "[c5,e5] ~@5 [c5,e5] [b4,d5]", E: "[a4,c5] ~@5 [c5,e5] [b4,d5]",
  F: "[[a4,c5]@2 a4@2 [a4,c5]@2 [f4,a4] ~ [a4,c5] ~@5 [a4,c5]@4 [f4,a4] ~ [a4,c5]@2 [f4,a4] ~ [b4,d5]@2 ~@2 [c5,e5]@2 ~@2, ~@2 f4 ~@29]/2", // Am F Am F Am F Bm C
  G: "[c5@2 a4 ~ c5@2 a4 ~ c5 ~@5 c5@4 a4 ~ c5@2 a4 ~ d5 ~@3 g4@2 ~@2]/2",
  H: "[[a4,c5]@2 a4@2 [a4,c5]@2 [f4,a4] ~ [a4,c5] ~@5 [a4,c5]@4 [f4,a4] ~ [a4,c5]@2 [f4,a4] ~ [b4,d5] ~@3 [c5,e5]@2 ~@2, ~@2 f4 ~@29]/2", // Am F Am F Am F Bm C
})).s("gm_blown_bottle").gain(0.37)

// other · pad choir
const pad_choir_2 = note("<~@101 A ~ B ~ C ~ D ~>".pickRestart({
  A: "~@2 e4@2 c4 ~ c4@2 a3@2 c4 ~ c4@2 e4@2", B: "~@2 e4@2 c4 ~ c4@2 a3@2 c4 ~ d4@2 c4@2",
  C: "~@2 e4@2 c4 ~ c4@2 a3@2 c4 ~ c4@2 e4 ~", D: "~@2 e4@2 c4 ~ c4 ~ g3 a3 c4 ~ d4@2 c4@2",
})).s("gm_pad_choir").gain(0.11).pan(1)

// drums · kick
const kick = s("bd").struct("<~@10 A@11 ~ A@27 ~ A@25 ~@9 A@16 ~@9>".pickRestart({
  A: "x!4",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  ~@10 A B A C A B A C A B A ~ A B A C A B A C A B A C A B A@3 B A C A B A C A B A ~ A B A C A B A C A B A C A B A@3 B A
  C A B A C A ~@5 A B A C A B A C A B A C A B A C A B A C ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@4 x ~@6 x!2 ~ x ~",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@10 A@11 ~ A@27 ~ A@25 ~@9 A@16 ~@9>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@10 A@11 ~ A@27 ~ A@25 ~@9 A@16 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.36)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@10 A@11 ~ A@27 ~ A@25 ~@9 A@16 ~@9>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
})).gain(0.31)

// drums · bongos
const bongos = s("bongo:18").struct("<~@6 A@2 B C ~@70 A@2 B C A@2 B C A@2 B C ~@17>".pickRestart({
  A: "x ~ x ~@4 x ~@2 x ~@5", B: "x ~ x ~@4 x ~@2 x ~@3 x ~", C: "x",
})).gain(1.22)

// drums · congas
const congas = s("conga:18").struct("<~@6 A@3 ~@71 A@3 ~ A@3 ~ A@3 ~@18>".pickRestart({
  A: "~@4 x ~@7 x ~@2 x",
})).gain(1.49)

// drums · ht
const ht = s("ht").struct("<~ A ~@7 A ~@11 A ~@14 B C ~@11 A ~@14 B C ~@9 A ~@3 A ~@3 A ~@23 A ~>".pickRestart({
  A: "x ~@2 x ~@2 x ~ x ~@3 x ~@3", B: "~@14 x!2", C: "x ~@2 x ~@2 x ~ x ~@7",
})).gain(0.46)

// drums · mt
const mt = s("mt").struct("<[~@14 x!2] ~@77 [~@14 x!2] ~@3 [~@14 x!2] ~@23 [~@14 x!2] ~@2>").gain(0.36)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@10 A B A B A B A B A B A ~ 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 ~ 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 ~ A B A B A B A B A B A B A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~@3 x ~", B: "x ~@2 x ~@2 x ~@3 x ~ x ~ x ~",
})).gain(0.6)

stack(
  synth_strings_1, woodblock, synth_drum, bass, electric_guitar_muted, piano, pad_choir, tenor_sax, blown_bottle,
  pad_choir_2, kick, snare, hihat, open_hat, crash, tambourine, bongos, congas, ht, mt, woodblocks
)

More by Captain Jack