Strudelify

Theme from The A-Team

Mike Post/Pete Carpenter

KeyG majorTempo120 bpm
0:00/0:00
// Theme from The A-Team — Mike Post/Pete Carpenter
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 26, 4/4 at bar 27, 2/4 at bar 41, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5555186; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · trumpet · "1st Trumpet in Bb"
const trumpet = note(`<
  ~@4 A@4 B@2 C@3 D@2 E F ~ G ~@3 G ~ H I J K L@2 M N O P Q R S T U V W ~ G ~@3 G ~ H I J K L@2 M N O P Q R S T U X ~@8
  Y@4 Z@2 AA@2 ~@2 AB AC AD ~@5 O P Q R S AE AF AG AH ~ AI
>`.pickRestart({
  A: "[~@8 f5@4 c5@2 f5@10 a#4@2 c5@4 f4@8 a4 c5 ~@2 c5@2 g5@2 ~@10 d#5@3 d5 c5 a#4@3, ~@10 f5@3 ~@3]/4",
  B: "[c5@8 f5@3 f5 c5@2 f5@10 a4@2 a#4@2 g4@2 c5@2]/2", C: "[f4@8 g#4@3 a#4 c#5@2 d#5@26 d#5@2 d5 ~@3 a#4@2]/3",
  D: "[d#5@4 d5@4 a4@3 a#4 c5@2 f5@10 c5@2 a#4 ~@3 f4@2]/2", E: "c5@2 a#4@2 a#4 a4 f4 e4", F: "f4 ~", G: "d5 c5 ~@2",
  H: "~@5 f4 ~@2", I: "g4 ~@2 f4@5", J: "~ d#4 ~@2 c#4 ~@3", K: "d#4", L: "[~ b4 ~@2 g#4 ~@2 b4@9]/2",
  M: "~ f#4 ~@2 f#4 ~@3", N: "f#4", O: "f5@2 c5 f5@5", P: "a#4@2 c5@4 f4@8 a4 c5", Q: "~ c5 g5 ~@5, f5@3 ~",
  R: "d#5@3 d5 c5 a#4@3 c5@8", S: "f5@3 f5 c5@2 f5@10", T: "a4 a#4 g4 c5 f4@4", U: "a#4 a4@2 f4 a#4@2 a4@2",
  V: "a#4@2 a4@2 f4 g4@3", W: "f4 ~@3", X: "c5@2 b4@2 g4 a4@3", Y: "[~ d4 ~@2 e4 ~@2 f4@9]/2",
  Z: "[~ f4 ~@2 g4 ~@2 f4@9]/2", AA: "[~ d4 ~@2 f4 ~@2 d4@9]/2", AB: "a4", AC: "d5", AD: "g5 ~@7",
  AE: "~ a#4 g4 c5 f4@4, a4@3 ~@5", AF: "a#4 ~@2 f4 a#4@2 a4@2", AG: "a#4!2 ~ a#4!3 ~ a#4 c5!2 ~ c5!3 ~ c5",
  AH: "d5!2 ~ d5 e5!2 ~ e5!3 ~ e5!3 ~ e5", AI: "f5 ~ f4 ~@5",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "1st Trumpet in Bb" · soft notes
const trumpet_soft = note(`<
  ~@64
  [~@8 d4 ~ f#4 ~ a4 ~ d5 ~]
  [d4 ~ f#4 ~ a4 ~ d5 ~ d4 ~ f#4 ~ a4 ~ d5 ~]!2
  [c5 ~ g4 ~ e4 ~ c4 ~ a4 ~ e4 ~ c#4 ~ a3@2]
  [d4 ~ f#4 ~ a4 ~ d5 ~ d4 ~ f#4 ~ a4 ~ d5 ~]
  [~@8 a4 ~ a4 ~ g#4 ~ g#4 ~]
  ~@31
>`).s("gm_trumpet").gain(0.2)

// other · trumpet · "2nd Trumpet in Bb"
const trumpet_2 = note(`<
  ~@4 A@4 B@2 C@3 D@2 E F ~ G ~@3 G ~ H I J K L@2 M N O P Q R S T U V W ~ G ~@3 G ~ H I J K L@2 M N O P Q R S T U X ~@8
  Y@4 Z@2 AA@2 ~ AB AC@2 AD ~@5 O AE Q R S AF U AG AH ~ AI
>`.pickRestart({
  A: "[~@8 c5@4 a4@2 c5@10 f4@2 g4@4 f4@8 ~@2 c5@2 c5 ~ c5@2 c5@10 a#4@4 c5 a#4@3]/4",
  B: "[g4@8 c5@3 c5 a4@2 c5@10 a4@2 a#4@2 g4@2 c5@2]/2", C: "[f4@8 g#4@6 a#4@26 a#4@2 a#4 ~@3 a#4@2]/3",
  D: "[a#4@4 a#4@4 f4@3 g4 a4@2 c5@10 f4@2 f4 ~@3 f4@2]/2", E: "f4@2 f4@2 a#4 a4 f4 e4", F: "f4 ~", G: "b4 a4 ~@2",
  H: "~@5 c#4 ~@2", I: "d#4 ~@2 c#4@5", J: "~ c4 ~@2 a#3 ~@3", K: "c4", L: "[~ f#4 ~@2 f4 ~@2 f#4@9]/2",
  M: "~ c#4 ~@2 c#4 ~@3", N: "c#4", O: "c5@2 a4 c5@5", P: "f4 g4@2 f4@3 ~@2", Q: "c5@2 c5 ~ c5@2 c5@10",
  R: "a#4@4 c5 a#4@3 g4@8", S: "c5@3 c5 a4@2 c5@10", T: "a4 a#4 g4 c5 f4@4", U: "f4 f4@2 f4 f4@2 f4@2",
  V: "f4@2 a4@2 a#4 c5@3", W: "c5 ~@3", X: "g4@2 b4@2 c5 d5@3", Y: "[~ a3 ~@2 a#3 ~@2 c4@9]/2",
  Z: "[~ d4 ~@2 c4 ~@2 d4@9]/2", AA: "[~ a#3 ~@2 a#3 ~@2 a#3@9]/2", AB: "~@3 d5@2 d5@2 d5", AC: "d5 d5@2 d5@2 d5@2 d5",
  AD: "d5 ~@7", AE: "f4 g4@2 f4@4 ~", AF: "a4@2 a#4 ~ g4@2 c5@2 f4@8", AG: "g4 a4", AH: "a#4 c5@3", AI: "a4 ~ a3 ~@5",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "2nd Trumpet in Bb" · soft notes
const trumpet_soft_2 = note("<~@64 A B@2 C B D ~@10 E F ~@19>".pickRestart({
  A: "~@8 d5 ~ a4 ~ f#4 ~ d4 ~", B: "d5 ~ a4 ~ f#4 ~ d4 ~ d5 ~ a4 ~ f#4 ~ d4 ~",
  C: "c4 ~ e4 ~ g4 ~ c5 ~ a4 ~ c#5 ~ e5 ~ a5 ~", D: "~@8 f#4 ~ f#4 ~ e4 ~ e4 ~", E: "d5 d5@2 d5@2 d5@2 d5",
  F: "d5 d5@2 ~@5",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@4 A@4 B@2 C@3 D@2 E F@8 G@2 H I@3 J K L M N O P Q R S T@8 G@2 H I@3 J K L M N O P Q R U ~@11 V W@2 X@2 Y Z@3 AA ~@5
  L AB N O P Q R AC AD ~ AE
>`.pickRestart({
  A: "[~@8 a4@4 f4@2 a4@10 d4@2 e4@4 a4@8 ~@2 a4@2 a4 ~ a#4@2 a4@10 g4@4 f4@4]/4",
  B: "[e4@8 a4@3 a4 f4@2 a4@10 f4@2 f4 ~ e4@2 e4@2]/2",
  C: "[c5@8 g#4@6 g#4@10 g#4@2 a#4 ~@3 d#4@10 g4@2 f4 ~@3 f4@2]/3",
  D: "[g4@4 f4@4 f4@3 g4 a4@2 a4@10 f4@2 f4 ~@3 f4@2]/2", E: "f4!2 c5!2", F: "[f4 d4@8 d4@7]/8",
  G: "[~@4 g#4@9 a#3 c#4 a#4]/2", H: "g#4 ~@2 g#4, ~@2 f4@5 ~",
  I: "[~ f3 a3 c4 f4 a#4 f5 d#5@10 c#5 b4 a#4 b4@2 g#4@2]/3", J: "f#4@2 f4@2 d#4@2 c#4@2 b3 a#3 b3 c#4 b3 c#4 d#4 f4",
  K: "a#4", L: "a4@2 f4 a4@5", M: "d4 e4@2 a4@3 ~@2", N: "a4@2 a4 ~ a#4@2 a4@10", O: "g4 f4 e4@2",
  P: "a4@3 a4 f4@2 a4@10", Q: "f4@2 f4 ~ e4@2 e4@2 c5@8", R: "f4 f4@2 f4 f4@2 f4@2", S: "f4@2 f4@2 f4 g4@3",
  T: "[a4 ~ d4@16 d4@14]/8", U: "g4@2 g4@2 g4 a4@3", V: "~ a3 a#3 a3 c4 d4 f4 a#4", W: "[a4@9 a#4 a4 f4 e4 f4 d4 a3]/2",
  X: "[f4@11 d4 e4 g4 a#4 c5]/2", Y: "a3", Z: "d4/3", AA: "g4 ~@7", AB: "d4 e4@2 a4@4 ~", AC: "d4 e4", AD: "f4 g4@3",
  AE: "f4 ~ f4 ~@5",
})).s("gm_french_horn").gain(0.45)

// bass · tuba
const bass = note(`<
  ~@4 A B@3 C D E F@3 G@2 H I J K L I J K M@2 N O@3 P Q R S T U V W X Y H I J K L I J K M@2 N O@3 P Q R S T Z V W X AA
  AB AC AD AE AF AG AH AI AJ@2 AK@2 AL@2 AM@2 AN@4 AO ~@5 V S T U V W X AP AQ ~ AR
>`.pickRestart({
  A: "~@2 f2 ~", B: "[~@8 a#2@2 c3@4 f2@10 f2@2 f2 ~@3 f2@10 d#2@4 d2@4]/3", C: "~ c2 c2@2 f2@2 ~@2", D: "~@2 f2 g2",
  E: "a2 g#2", F: "[~ g#2 g#2@2 g#2 g#2@2 g#2@2 g#2 g#2@2 f2@8 f2@2 g2@2]/3", G: "[a2@2 a#2@4 c3 c2]/2",
  H: "f2@2 e2@2 d2!2 c2 d2", I: "~ c2 ~ d2 ~ c2 ~ c2", J: "g2@2 f2@2 d2!2 c2 d2", K: "~ c2 ~ a#1 ~ a#1 ~ a#1",
  L: "c2@4 d2!2 c2 d2", M: "[a1@4 d#3@3 a#2@3 d#2@6]/2", N: "f2@3 f#2@3 g#2@2", O: "[a#2@6 c3 c#3@4 g#2@3 c#2@10]/3",
  P: "f#2 ~@2 c#2 ~@2 f#2@2", Q: "a#1", R: "f2@2 f2 f2@5", S: "a#2 c3@2 f2@5", T: "f2@2 f2 ~@3 f2@10",
  U: "d#2@4 d2@5 ~ c2@2 c2@4", V: "f2 ~@3", W: "f2 g2 a2@2", X: "a#2@6 a#2 a2", Y: "g2@2 a2@2 a#2 c3@3",
  Z: "d#2@2 d2@3 c2 c2@2", AA: "a2@2 b2@2 c3 d3@3", AB: "d3@2 a2 d3@5", AC: "g2@2 a2@4 d2@8 f#2 a2",
  AD: "d3 a2 e3 d3@5", AE: "c3@3 b2 a2 g2@3 a2@8", AF: "d3@3 d3 a2@2 d3@10", AG: "f#2 g2 a2 b2 d3@2 e3@2",
  AH: "f#3 ~ f#3 ~ g3 ~ a3 ~ g3 ~ f#3 ~@3 d3@2", AI: "~ a2 ~ a2 d3@2 c#3@2", AJ: "[c3@3 g2@3 c2@7 g2 a2 g2]/2",
  AK: "[c3@3 g2@3 c2@8 d#2@2]/2", AL: "[d3@3 d#3@3 d3@8 g2@2]/2", AM: "[c3@3 g3@3 f3@6 ~ g3 f3 d#3]/2", AN: "a2/4",
  AO: "g2 ~@7", AP: "g2 a2", AQ: "a#2 c3@3", AR: "f3 ~ f2 ~@5",
})).s("gm_tuba").gain(0.4)

// other · timpani
const timpani = note(`<
  A B A B C D@3 E F ~ G@2 H I J K ~@15 L M N O L K P Q K ~@15 L M N O L K P R ~@16 S@4 T@2 U V U W L M N O L K P X Y ~ Z
>`.pickRestart({
  A: "~@7 c3", B: "c3 ~@6 c3", C: "c3!8 f3@4 ~@4", D: "[~@4 a#2 c3@2 f2@5 f2!2 ~ f2@5 ~@4]/3", E: "~ c3 c3@2 f3@2 ~@2",
  F: "~@2 f2 ~", G: "[~ a#2 a#2@2 a#2 a#2@2 a#2@2 a#2 a#2@2 f2@2 ~ f2]/2", H: "f2 ~@3 f2@2 ~@2", I: "~@4 a#2@2 ~ a#2",
  J: "a#2 ~@3 c3@2 c3@2", K: "f2 ~@3", L: "f3 ~@3", M: "a#2 c3@2 f2@5", N: "f2!2 ~ f2@5", O: "~@5 c3 c3@2",
  P: "f2 f2@2 f2 f2@2 f2@2", Q: "f2@2 f2@2 ~ c3@3", R: "c3 ~@3", S: "d3 d3@2 d3@2 d3@2 d3", T: "g2@2 ~@3 g2!2 ~",
  U: "c3@2 ~@3 c3!2 ~", V: "c3@2 ~@3 c3 ~ c3", W: "c3@4 ~@6 c3!6", X: "~@8 c3!2 ~ c3!3 ~ c3",
  Y: "f3!2 ~ f3 c3!2 ~ c3!3 ~ c3!3 ~ c3", Z: "f3 ~ f2 ~@5",
})).s("gm_timpani").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@16 A B@3 A B@3 ~ B@6 ~@9 A B@3 A B@3 ~ B@6 ~@44 C D>".pickRestart({
  A: "~ x", B: "x!2", C: "~@6 x!2", D: "x!2 ~@2",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@64 A@3 B A@3 B C ~ C ~ C ~ C ~@22>".pickRestart({
  A: "x!2", B: "x", C: "x ~@2 x ~@2 x ~",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  A B C B D E F G H I J E K L M N O P@3 Q P@3 R P@6 S T U V W X N Y Z AA P@3 Q P@3 R P@6 S T U V W X N Y AB ~@20 AC@3 AD
  AC ~ T U V W X N Y AE@2 ~ AF
>`.pickRestart({
  A: "~@8 x!3 ~ x ~@3", B: "~@2 x ~ x!9 ~@3", C: "~@2 x!3 ~ x ~ x!3 ~ x ~@3", D: "~@8 x ~ x!3 ~ x ~",
  E: "~@2 x!5 ~ x ~ x ~@3 x ~", F: "~@2 x!7 ~ x!3 ~ x!2", G: "x!7 ~ x ~@2 x!5", H: "x ~ x ~ x!9 ~ x ~",
  I: "~@2 x!3 ~ x!7 ~ x ~", J: "x ~ x!7 ~ x!3 ~ x ~", K: "~@2 x!11 ~ x ~", L: "x!5 ~ x ~ x ~ x!3 ~ x ~",
  M: "x!13 ~ x ~", N: "x!5 ~ x ~ x ~ x!6", O: "x!2 ~ x", P: "~ x ~ x", Q: "x ~ x!6 ~@4 x ~@3", R: "x ~ x!7 ~ x!3 ~ x!2",
  S: "x ~ x ~ x!12", T: "x ~ x!3 ~ x ~@3 x!5 ~", U: "x ~ x ~@3 x ~@3 x!6", V: "x ~ x!3 ~ x!9 ~",
  W: "x ~@2 x!6 ~ x ~ x!4", X: "x!5 ~ x ~@3 x!3 ~ x!2", Y: "x ~ x ~ x!3 ~ x ~ x!3 ~ x ~", Z: "x ~ x!3 ~ x!10",
  AA: "x ~@2 x", AB: "x ~ x!3 ~ x!3 ~ x ~@5", AC: "~@5 x!2 ~", AD: "~@5 x ~ x", AE: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
  AF: "x!2 ~@2",
})).gain(0.4)

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

// drums · hihat
const hihat = s("hh").struct("<~@16 A B@3 A B@3 ~ C B@5 ~@9 A B@3 A B@3 ~ C B@5 ~@46>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x ~ x ~ x!4",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@64 A@3 B A@3 B C ~ C ~ C ~ C ~@22>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~ x ~@2 x ~@2 x",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@73 A ~ A ~ A ~ A ~@19 B ~>".pickRestart({
  A: "~@8 x!8", B: "~@4 x!8 ~@4",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@73 A ~ A ~ A ~ A ~@19 B ~>".pickRestart({
  A: "~@2 x!6 ~@8", B: "x!4 ~@12",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@20 A ~@3 A ~@6 A ~@8 A ~@3 A ~@3 A ~@6 A ~@11 B ~@3 B ~@29>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.4)

stack(
  trumpet, trumpet_soft, trumpet_2, trumpet_soft_2, french_horn, bass, timpani, kick, kick_soft, snare, snare_soft,
  hihat, hihat_soft, mid_tom, high_tom, crash
)