Strudelify

I'm Specialized in You

Time Bandits

KeyG majorTempo116 bpm
0:00/0:00
// I'm Specialized in You — Time Bandits
// 116 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): DISTORTION.
setcpm(116/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 · epiano1 · "+DETUNE EP"
const epiano1 = note(`<
  ~ A B A C A B A B D@2 E@2 A B A B D@2 F@2 G H I J G I K H ~@16 A B A C A B A B D@2 E@2 A B A B D@2 F@2 G H I J G I K H
  ~@16 A B A B L@2 M N ~@16
>`.pickRestart({
  A: "e5@3 g5, [g4,c5]", B: "[g4,b4,e5]", C: "~@13 g5@3, [g4,b4,e5], ~ c6, ~@11 b5@5", D: "[[f4,a#4,d5]@31 ~]/2",
  E: "[~@29 g5@3, [g4,c5,e5], ~@3 c6, ~@27 b5@5]/2", F: "[e5@5 ~@2 c6, [g4,c5]@31 ~, ~@5 e5@3, ~@3 g5]/2",
  G: "[c5,f5,a5]", H: "[d5,g5,b5]", I: "[d5,e5,g5,b5]", J: "[e5,a5,c6]@3 [d5,e5,g5,b5]", K: "[d5,g5,b5] [e5,g5,c6]",
  L: "[[a4,c5,d5,f5]@31 ~]/2", M: "[a4,c5,f5]", N: "[c5,f5,a5] [d5,g5,b5]",
})).s("gm_epiano1").gain(0.17)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B@3 C B@4 D@2 B C B@4 D@2 B E F G H I F H G J B@4 K@2 L M B@4 K@2 L N B@3 C B@4 D@2 B C B@4 D@2 B E F G H I F H G J
  B@4 K@2 L M B@4 K@2 L N B@4 O@2 F J P@4 Q@2 M R P@4 Q@2 M S
>`.pickRestart({
  A: "~@3 g1", B: "c2 ~@2 c2 g1 ~ a1 ~ c2 ~ c2 ~ g1 ~ a1@2", C: "c2 ~@2 c2 g1 ~ a1 ~ c2 ~ c2 ~ g1@2 a1 g1",
  D: "a#1 ~@2 a#1 f1 ~ g1 ~ a#1 ~ a#1 ~ f1 ~ g1@2", E: "c2 ~@2 c2 g1 ~ a1 ~ c2 ~ c2 ~ e2 ~ e2@2",
  F: "f2 ~@2 f2 c2 ~ d2 ~ f2 ~ f2 ~ c2 ~ d2@2", G: "g2 ~@2 g2 d2 ~ e2 ~ g2 ~ g2 ~ d2 ~ e2@2",
  H: "e2 ~@2 e2 b1 ~ d2 ~ e2 ~ e2 ~ b1 ~ d2@2", I: "a1 ~@2 a1 b1 ~ b1@2 c2 ~ c2@2 e2 ~ e2@2",
  J: "g2 ~@2 g2 d2 ~ e2 ~ g2 ~@3 [b2,c3] [g2,a2] [e2,f2] d2", K: "d2 ~@2 d2 a1 ~ c2 ~ d2 ~ d2 ~ a1 ~ c2 ~",
  L: "f2 ~@2 f2 c2 ~ d2 ~ f2 ~ f2 ~ c2 ~ d2 ~", M: "g2 ~@2 g2 d2 ~ e2 ~ g2 ~ g2 ~ d2 ~ e2 ~",
  N: "g2 ~@2 g2 d2 ~ e2 ~ g2 ~ g2 ~ d2@4", O: "d2 ~@2 d2 a1 ~ c2 ~ d2 ~ d2 ~ a1 ~ c2@2",
  P: "d2 ~@2 d2 a1 ~ b1 ~ d2 ~ d2 ~ a1 ~ b1@2", Q: "e2 ~@2 e2 b1 ~ d2 ~ e2 ~ e2 ~ b1 ~ d2 ~",
  R: "a2 ~@2 a2 e2 ~ f#2 ~ a2 ~ a2 ~ e2 ~ f#2 ~", S: "a2 ~@2 a2 e2 ~ f#2 ~ a2 ~ a2 ~ e2@4",
})).s("gm_electric_bass_finger").gain(0.22)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@29 A B A B C@2 D E A B A B C@2 D E ~@28 A B A B C@2 D E A B A B C@2 D E ~@8 F G F G H@2 E I F G F G H@2 E I
>`.pickRestart({
  A: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~", // C
  B: "[g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~ [g4,b4,e5] ~", // Em
  C: "[a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~ [a4,c5,d5,f5] ~", // Dm7
  D: "[a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~", // F
  E: "[b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // G
  F: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~", // D
  G: "[a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~", // F#m
  H: "[b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~", // Em7
  I: "[c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~", // A
})).s("gm_synth_strings_1").gain(0.4).pan(0.8)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~ A B A C A B A B D@2 E@2 A B A B D@2 F@2 G H I J K L M N ~@16 A B A C A B A B D@2 E@2 A B A B D@2 F@2 G H I J K L M N
  ~@16 A B A O@5 ~@16
>`.pickRestart({
  A: "e4@3 g4, [g3,c4]", B: "[g3,b3,e4]", C: "~@13 g4@3, [g3,b3,e4], ~ c5, ~@11 b4@5", D: "[[a#3,c4,d4,f4]@31 ~]/2",
  E: "[[c5,d5,e5,g5]@23 ~@6 g4@3, [g3,c4,e4], ~@3 c5, ~@27 b4@5]/2", // C
  F: "[e4@19 ~@9 c4@4, g3@31 ~, c4@27 ~@5, [c5,d5,e5,g5]@23 ~ g4@8, ~@5 e4@3]/2", G: "[a3,c4,f4]", H: "[b3,d4,g4]",
  I: "[d4,e4,g4,b4]", J: "c5@4 b4@4 a4@3 g4 [d4,e4,g4,b4]@4, [c4,e4]@3 ~, a4@7 ~@9", K: "[c4,f4,g4,a4]",
  L: "e4@7 e4, [d4,g4,b4]", M: "[d4,g4,b4] [e4,g4,c5]", N: "[d4,g4,b4]",
  O: "[[g3,b3,e4]@15 ~ [d4,f4,a4]@31 ~ [f4,a4,c5]@15 ~ [c5,f5]@8 [b4,d5,g5]@7 ~, ~@15 c4@31 ~ c4@16 a4@7 ~@10]/5", // Em Dm F F5 G
})).s("gm_epiano2").gain(0.22).pan(0.7)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<~@28 A@8 B@8 C ~@27 A@8 B@8 C ~@7 D@8 E@8 F>".pickRestart({
  A: "[~@15 c5@17 b4@15 c5@17 b4@15 [a4,c5,d5]@32 ~ [f4,a4,c5]@16, ~@15 [g4,e5,g5]@64 f5@49]/8", // D7 F C
  B: "[[g4,b4,d5,g5]@15 ~@17 b4@15 c5@17 b4@15 [a4,c5,d5]@32 ~ [f4,a4,c5]@16, ~@15 [g4,e5]@65 ~@48, ~@15 c5@17 ~@47 f5@49, ~ g5@4 ~@3]/8", // G D7 F C
  C: "[g4,b4,d5,g5]", D: "[~@15 d5@17 c#5@15 d5@17 c#5@15 [b4,d5,e5]@32 ~ [g4,b4,d5]@16, ~@15 [a4,f#5,a5]@64 g5@49]/8",
  E: "[[a4,c#5,e5,a5]@15 ~@17 c#5@15 d5@17 c#5@15 [b4,d5,e5]@32 ~ [g4,b4,d5]@16, ~@15 [a4,f#5]@65 ~@48, ~@15 d5@17 ~@47 g5@49, ~ a5@4 ~@3]/8", // A E7 G D
  F: "[a4,c#5,e5,a5]", // A
})).s("gm_pad_warm").gain(0.14)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note(`<
  ~@29 A B A C D ~ D E A B A C D ~ D E ~@28 A B A C D ~ D E A B A C D ~ D E ~@8 F G F H E ~ E I F G F H E ~ E I
>`.pickRestart({
  A: "c7 ~ c7 ~ b6 ~ b6 ~ a6 ~@3 g6 ~@3", B: "e6 ~ g6 ~ a6 ~ g6 ~@9", C: "a6 ~ a6 ~ e6 ~ g6 ~@3 f6 ~ e6 ~@3",
  D: "f6 ~@15", E: "g6 ~@15", F: "d7 ~ d7 ~ c#7 ~ c#7 ~ b6 ~@3 a6 ~@3", G: "f#6 ~ a6 ~ b6 ~ a6 ~@9",
  H: "b6 ~ b6 ~ f#6 ~ a6 ~@3 g6 ~ f#6 ~@3", I: "a6 ~@15",
})).s("gm_glockenspiel").gain(0.42)

// other · electric guitar muted · "OVERDRIVE"
const electric_guitar_muted = note(`<
  A B C D E ~@27 A F G H I J ~@2 A F G H K L ~@9 M N ~@19 A F G H I J ~@2 A F G H O L ~@10 P Q R S T U ~@2 P Q R S V
>`.pickRestart({
  A: "~@14 g3!2", B: "g3 ~ g3 ~ a3 ~ c4@6 ~@2 g3!2", C: "g3 ~ g3 ~ a3 ~ d4@6 ~@2 g3!2",
  D: "g3 ~ g3@2 a3 ~ [d4,d#4] ~@7 g3!2, ~@3 e4@3 ~@2", E: "g3 ~ g3 ~ a3 ~ c4@6 g3 a3 ~@2",
  F: "a3 ~ g3 ~ a3 ~ c4@6 ~@2 g3!2", G: "a3 ~ g3 ~ a3 ~ d4@6 ~@2 g3!2",
  H: "a3 ~ g3@2 a3 ~ [d4,d#4] ~@7 g3!2, ~@3 e4@3 ~@2", I: "g3 ~ g3 ~ a3 ~ c4@6 g3 a3 g3 e3", J: "g3@3 ~",
  K: "g3 ~ g3 ~ a3 ~@2 c#4 [d4,f4]@2 c4 ~ g3 a3 g3@2, ~@3 c4", L: "d3 e3@11 ~@4, g3@3 ~",
  M: "~@3 a4 g4 ~@3 d4 [d4,e4] c4 ~ [c4,g4]@2 d4 ~, ~@2 [g4,c5]@2 ~@4 g4@3 ~@5", N: "d4 e4@11 ~@4, g4@3 ~",
  O: "g3 ~ g3 ~ a3 ~ c4 d4 c4@2 g3 a3 g3@2 d3 ~, ~@3 f4@2 c4@2 ~", P: "~@14 a3!2", Q: "b3 ~ a3 ~ b3 ~ d4@6 ~@2 a3!2",
  R: "b3 ~ a3 ~ b3 ~ e4@6 ~@2 a3!2", S: "b3 ~ a3@2 b3 ~ [e4,f4] ~@7 a3!2, ~@3 f#4@3 ~@2",
  T: "a3 ~ a3 ~ b3 ~ d4@6 a3 b3 a3 f#3", U: "a3@3 ~", V: "a3 ~ a3 ~ b3 ~ d4@6 ~@4",
})).s("gm_electric_guitar_muted").gain(0.34).pan(0.3)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@30 A B ~@6 A B ~@34 A B ~@6 A B ~@14 C D ~@6 C D ~@5>".pickRestart({
  A: "~@10 [g4,b4,d5] ~ [g4,b4,d5]@2 [g4,c5,e5] ~", B: "[g4,c5,e5] ~@15",
  C: "~@10 [a4,c#5,e5] ~ [a4,c#5,e5]@2 [a4,d5,f#5] ~", D: "[a4,d5,f#5] ~@15",
})).s("gm_synth_brass_1").gain(0.19).pan(0.2)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note("<~@27 A@2 ~@42 A@2 ~@40>".pickRestart({
  A: "[g4@11 ~ g4@2 g5@18]/2",
})).s("gm_lead_8_bass_lead").gain(0.24).pan(0.7)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1_2 = note("<~@20 A@2 B C D E F G@2 ~@35 A@2 B C D E F G@2 ~@40>".pickRestart({
  A: "[~@4 [c3,c4]@4 [e3,e4]@2 [g3,g4]@2 [c4,c5]@3 [a3,a4]@10 ~ [g3,g4]@4 [a3,a4]@2]/2", // C E G C A G A
  B: "[b3,b4]@2 [a3,a4] [g3,g4]@4 [d3,d4]", C: "[e3,e4]@2 [g3,g4] [g3,g4]@3 [b3,b4]@2",
  D: "[a3,c5]@3 g3 b4@4 a4@3 g4 e4@4, ~ e3@3", E: "[f3,f4]@5 [g3,g4]@2 [a3,a4]",
  F: "[b3,b4]@2 [a3,a4] [g3,g4]@4 [e3,e4]", G: "[[g3,g4] [a3,a4] [g3,g4]@14]/2",
})).s("gm_synth_strings_1").gain(0.35).pan(0.2)

// other · harmonica
const harmonica = note("<~@89 A B C D E F G H ~@16>".pickRestart({
  A: "~@8 [a5,a#5] a5 g5 ~ g5@2 g5@2", B: "~ g#5 a5@2 ~ e5@2 ~ e5@8", C: "~@6 f5 g5 d#5 e5@2 c5@2 ~ a4@2",
  D: "~ d5@2 ~ d5@2 ~ a4@4 ~ g4 a4 ~ c5, ~ c#5 ~@2 c#5 ~@11", E: "c#5 d5@9 ~@2 e5@2 ~@2",
  F: "d5@3 c5 a4@8 ~@2 g4 ~, c#5 ~@15", G: "a4@2 ~ c5@2 d5@2 d#5 e5@2 ~ g5@2 a5 ~@2, g#4 ~@4 c5 ~@10",
  H: "[a5,a#5] a5 g5 ~ a5 ~ a5 g5@6 ~@3", // A#maj7
})).s("gm_harmonica").gain(0.42)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!112>").gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@28 [~@7 x] ~@43 [~@7 x] ~@23 [~@3 x] ~@16>").gain(0.56)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@13 A ~@7 A ~@8 B ~ B@13 ~@4 A ~@7 A ~@7 A ~@8 B ~ B@12 ~@10 B ~ B@13
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.08)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 [~@12 x!2 ~@2] ~@43 [~@12 x!2 ~@2] ~@40>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A ~@7 A ~@9 B ~ B@13 ~@3 A ~@7 A ~@7 A ~@9 B ~ B@12 ~@10 B ~ B@13>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.4)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@29
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!16
  ~@28
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!16
  ~@8
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!15
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~]
>`).gain(2.03)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~
  [x ~@2 x ~@2 x ~@3 x ~@2 x ~@2]!95
  [x ~@2 x ~@2 x ~@3 x ~@5]
  [x ~@2 x ~@2 x ~@3 x ~@2 x ~@2]!16
>`).gain(0.35)

stack(
  epiano1, bass, synth_strings_1, epiano2, pad_warm, glockenspiel, electric_guitar_muted, synth_brass_1,
  lead_8_bass_lead, synth_strings_1_2, harmonica, kick, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, crash,
  cabasa, woodblocks
)