Strudelify

Miami Vice Theme

Jan Hammer

KeyA minorTempo120 bpm
0:00/0:00
// Miami Vice Theme — Jan Hammer
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 "SYNBRASS 3" synth brass 2 (copy of ch 8 "SYNBRASS 2" synth brass 2)
// note: Full arrangement: all 77 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): E.GUITAR 2.
setcpm(120/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.

// bass · electric bass finger · "BASS 1"
const bass = note(`<
  ~@3 A B C@2 D@2 E F G H I@2 J@2 K@3 L M N O P Q R S T U V W X ~@8 C@2 D@2 E F G H I@2 J@2 K@3 L M N O P Q R S T U V W
  X ~@8
>`.pickRestart({
  A: "c3!2 ~ a#2 c3 g2 ~ c3!2 d3 c3 f2!2 c2 c3!2", B: "~ c3!2 d3 ~ c2 ~ c3 ~ c3 g2 a#2 c2 c3!2 c2",
  C: "[~ a2 ~ d2 a2!2 ~ a2!3 g2 ~ b2 a2 e2 a2@2 a2!2 a1 a2!2 d2 ~ g2 a1 ~ a2 b2 ~ a2 a1]/2",
  D: "[a2 ~ g2 d2 a2!2 a1 a2 ~ a2 g2 a2 b2 a2 ~ a2@2 a2!2 ~ a2!2 d2 a2 g2 a1 a2 ~ b2 a2 ~ a1]/2",
  E: "a2 ~ c2 g2 a2 e2 a2 ~ a2 b2 ~ d2!2 a1 ~ a2", F: "e2 a2!2 b2 a2 ~ a2!2 b2 a2 e2 ~ a1 ~ a2 ~",
  G: "a2!2 a1 g2 a2 a1 a2!2 ~ b2 a2 d2!2 a1 a2!2", H: "e2 a2!2 ~ a2 a1 a2!2 b2 a2 ~ g2 a1 a2!2 a1",
  I: "[g2!2 ~ c2 g2!2 g1 g2!3 f2 g2 a2 g2 d2 g2@2 g2!2 g1 g2!2 c2 g2 f2 g1 g2 ~ a2 g2 ~ g1]/2",
  J: "[~ g2 f2 c2 g2!2 g1 g2!3 f2 g2 a2 g2 c2 g2@2 g2!2 g1 g2!2 d2 f2 g2 g1 g2!2 f2 g2!3]/2",
  K: "a2!3 a1 a2 ~ a2!3 a1 a2 ~ a2!3 a1", L: "a2!3 a1 a2 ~@2 a2!2 a1 a2 ~@2 a2!2 a1",
  M: "a2!3 a1 a2 ~ a2!3 a1 a2 ~@2 a2!2 a1", N: "a2!3 a1 a2 ~ a2!3 a1 a2 ~ a2 ~ a2 a1",
  O: "a2!3 a1 a2 ~ a2!3 ~ a2 ~ a2!3 ~", P: "a2!3 a1 a2 ~ a2!2 ~ a1 a2 ~ a2!3 a1",
  Q: "g2!3 g1 ~@2 g2!2 ~ g1 g2 ~ g2!3 g1", R: "g2!2 ~ g1 g2 ~ g2!3 ~ g2 ~ g2!3 g1",
  S: "g2!3 g1 g2 ~ g2 ~ g2 ~ g2 ~ g2!3 g1", T: "g2!3 g1 g2 ~@2 g2!2 g1 g2 ~@2 g2!2 g1",
  U: "c3!2 ~ c2 c3 ~ c3!3 c2 c3 ~ c3!3 c2", V: "c3 ~ c3 c2 c3 ~ c3 ~ c3 c2 c3 ~ c3!3 c2",
  W: "c3!3 c2 c3 ~ c3!3 c2 c3 ~ c3!3 c2", X: "c3 ~ c3 ~ c3 ~ c3!3 c2 c3 ~ c3 ~ c3 c2",
})).s("gm_electric_bass_finger").gain(0.51)

// bass · electric bass finger · "BASS 1" · soft notes
const bass_soft = note(`<
  ~@3 A B C D E F G H I J K L M ~@4 N O P Q I R S T U V W ~ X ~@8 C D E F G H I J K L M ~@4 N O P Q I R S T U V W ~ X
  ~@8
>`.pickRestart({
  A: "~@2 c2 ~@3 c3 ~@9", B: "g2 ~@3 c3 ~ c3 ~ d3 ~@7", C: "a2 ~ g2 ~@3 a1 ~@4 a2 ~@4", D: "~@7 a2 ~@2 a2 ~@2 a2 ~@2",
  E: "~ a2 ~@6 a2 ~@5 e2 ~", F: "~@3 a1 ~@7 a2 ~@2 a2 ~", G: "~ a2 ~@5 a2 ~@2 a2 ~@3 a2 ~",
  H: "~@5 a1 ~@5 g2 ~ a2 ~ a1", I: "~@8 a2 ~@7", J: "~@3 b2 ~@6 e2 ~@5", K: "~@2 f2 ~@13", L: "~@11 g2 ~@2 g2 ~",
  M: "g2 ~@15", N: "~@6 a2 ~@5 a2 ~@3", O: "~@12 a2 ~@3", P: "~@13 a2 ~@2", Q: "~@9 a1 ~@5 a1", R: "~@4 g2 ~@3 g2 ~@7",
  S: "~@2 g2 ~@6 g1 ~@6", T: "~@7 g2 ~ g1 ~@6", U: "~@6 g2 ~@5 g2 ~@3", V: "~@2 c3 ~@13", W: "~ c3 ~@5 c3 ~@8",
  X: "~ c3 ~ c2 ~@9 c3 ~@2",
})).s("gm_electric_bass_finger").gain(0.29)

// bass · synth bass 1 · "BASS 2"
const bass_2 = note(`<
  ~@17 A B C D E F D G H I J K L M L N E O P E Q R S@2 ~@12 A B C D E F D G H I J K L M L N E O P E Q R S@2
>`.pickRestart({
  A: "~@3 a2 a2@4", B: "~@3 a2!2 ~@2 a2", C: "a2@3 ~ a2@4", D: "a2@3 ~", E: "a2@3 a2 a2@4", F: "a2@3 ~ a2 a3@2 a2",
  G: "a2", H: "~@3 g2 ~@4", I: "g2@3 g2!2 g3@2 ~", J: "g2@3 g2 ~@4", K: "g2@6 g2@2 g2@4 ~ a#2 ~@2", L: "c3@3 c3 c3@4",
  M: "c3@3 c3 c2 ~@2 c2", N: "c3@3 c2 c3@4", O: "a2@3 a2 a1 a2@2 a1", P: "a2@2 a2@5 a2", Q: "g2@2 g2@5 g2",
  R: "g2@6 g2@2 ~@5 g2 ~ d2", S: "[c2,c3]/2",
})).s("gm_synth_bass_1").gain(0.62)

// bass · synth bass 1 · "BASS 2" · soft notes
const bass_soft_2 = note(`<
  ~@17 A B C D ~ C D ~ E F G H ~ I ~@7 J ~@14 A B C D ~ C D ~ E F G H ~ I ~@7 J ~@2
>`.pickRestart({
  A: "a2@3 ~@5", B: "a2@3 ~@2 a3@2 ~", C: "~@3 a2 ~@4", D: "~@3 a2", E: "g2@3 ~ g2@4", F: "~@7 g2", G: "~ g2",
  H: "~@12 g2 ~ d3@2", I: "~@5 c3@2 ~", J: "~@12 a2 ~ e2 ~",
})).s("gm_synth_bass_1").gain(0.39)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note("<~@2 A@2 B C@4 D@4 E@4 ~@24 C@4 D@4 E@4 ~@24>".pickRestart({
  A: "[~ g2 [c2,c3] c2 [c2,a#2] c2 [c2,a#2] c3@2 [c2,g2] [c2,c3] c2 [c2,c3] c2 [c2,c3] [c2,d3], c2@2 ~@5 c2 ~@8]/2", // C C7 C5 C Csus2
  B: "[c2,c3] ~ c3 [c2,c3] c2!2 [c2,g2,c3] [c2,g2,c3,d3], ~ c2@2 ~@5", // C C5 Csus2
  C: "[[a1,a2] a1 [a1,a2] [a1,e2] a1!2 [a1,g2] [a1,a2] a1 [a1,e2] [a1,a2] a1 [e2,a2] [a1,a2] ~@2 a1@3 a1 a1@4 a1@3 a1 a1@4, e3 ~, ~@15 a2@17]/4", // A A5 A7 A A5 A A5 A
  D: "[~ [a1,e2] a1@2 a1@2 [a1,e2]@2 [a1,a2]@2 a1@2 [a1,e2,a2]@2 [e2,a2]@2 a1@2 [a1,e2]@2 [a1,e2]@2 [a1,a2]@2 a2@2 [a1,e2,a2]@2 [a1,a2]@2 [a1,e2]@2 a1@6 a1@2 ~@8 a1@6 ~@2 a1@8, [e3,a3] ~, ~ a2@2 ~@27 a2@34]/4", // A5 A A5 A A5 A A5
  E: "[~ [g1,g2] g1@2 [g1,g2]@2 [g1,d2]@2 g2@2 g1@2 g1@2 g2@2 g1@2 [g1,d2]@2 g2@2 g1@2 [g1,g2]@2 [g1,g2]@2 g1@2 ~@8 g1@2 g1@8 g1@6 ~@2 g1@8, [g3,a3] ~, ~ d3@32 ~@31, ~@15 g2@17]/4", // G G5 G Gsus2
})).s("gm_pizzicato_strings").gain(0.5)

// chords · pizzicato strings · "PIZZICATO" · soft notes
const pizzicato_strings_soft = note("<~@3 A B C D ~@2 E F G H I J K L ~@24 C D ~@2 E F G H I J K L ~@24>".pickRestart({
  A: "c2 ~@7", B: "~@5 c3 ~@2", C: "~@4 g2 ~@3", D: "~@4 a1 ~ a1 ~", E: "~@2 a2 ~@5", F: "~@4 a1 ~ e2 ~", G: "~ a1",
  H: "~@3 a1 ~@4", I: "~@4 [g1,d2] ~ f2 g1", J: "~@2 g1 ~ d2!2 ~@2", K: "g1@3 ~@5", L: "~@3 g1 ~@4",
})).s("gm_pizzicato_strings").gain(0.29)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@7 A B ~@2 A C ~@2 D E ~@26 A B ~@2 A C ~@2 D E F G@3 H I@3 J K@3 L M N O H P@3 ~@4
>`.pickRestart({
  A: "~ [c5,f5,a5] g5 f#5, ~ [d5,a5]", B: "[d5,g5,a5]@4 [d5,f#5,a5]@3 [c#5,e5,a5]@5 ~@4",
  C: "[d5,g5,a5]@3 [d5,f#5,a5]@3 [c#5,e5,a5]@10", D: "~ [c5,e5,g5] f5 e5, ~ [c5,g5]",
  E: "[c5,f5,g5]@3 [c5,e5,g5]@3 [b4,d5,g5]@6 ~@4", F: "e4@2 g4@2 a4@2 a4@6 a4 g4 e4@2, ~@6 g#4 ~@9",
  G: "[c#4@2 a4@2 a4 g4 c#4@18, c4 ~@7 g#4 ~@3 c4 ~@35]/3", H: "e4@2 g4@2 a4@2 a4@6 g4 [g4,a4] e4@2, ~@6 g#4 ~@9",
  I: "[[c#5,e5]@2 a4@2 a4 g4 c#4@18, c5 ~@7 g#4 ~@3 c4 ~@35]/3", J: "d4@2 f4@2 g4@2 g4@6 f4 [f4,g4] d4@2, ~@6 f#4 ~@9",
  K: "[[a#4,d5]@4 [c5,e5]@4 [d5,f5]@4 [c5,e5]@2 [b4,d5]@26 ~@4 d4 g4 a#4@2, ~@8 c#5 ~@39]/3", // A# C Dm C Bm
  L: "c5@6 c5@6 a#4 [a#4,c5] g4@2, b4 ~@5 b4 ~@9", M: "[f4,a4] [e4,g4] c4 [f4,a4] [e4,g4] c4!3, ~@12 b3 ~@3",
  N: "f4 ~ a#4@2 [g4,a#4]@2 f4 ~ a#4@2 f4 ~ a#4@2 [g4,a#4]@2, ~ g4@3 ~@3 g4@3 ~ g4@3 ~@2", // Gm
  O: "~ f4 e4@2 c4@2 f4@2 e4@2 c4 g3 a#3 c4 e4 c4", P: "[[c#5,e5]@2 a4@2 a4 g4 e4 a5@17, c5 ~@7 g#4 ~@5 g5 ~@33]/3",
})).s("gm_synth_brass_1").gain(0.53)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<~@39 A@2 ~@34 A@2>".pickRestart({
  A: "[c2,c3]/2", // C
})).s("gm_synth_brass_2").gain(0.46)

// chords · lead 2 sawtooth · "SYNTH LEAD"
const lead_2_sawtooth = note(`<
  ~@5 A@2 B C A@2 B D E@2 F G A@8 E@4 H@4 A@4 E@2 H@2 A@2 B C A@2 B D E@2 F G A@8 E@4 H@4 A@4 E@2 ~@2
>`.pickRestart({
  A: "[a3,c#4,e4]!4", B: "[a3,c#4,e4] [a3,c4,f4] [f#3,a3,d4]!2", C: "[f#3,a3,d4]@4 [f#3,a3,d4]@3 [a3,c#4,e4]@5 ~@4",
  D: "[f#3,a3,d4]@3 [f#3,a3,d4]@3 [a3,c#4,e4]@10", E: "[g3,b3,d4]!4", F: "[g3,b3,d4] [g3,c4,e4]!3",
  G: "[g3,c4,e4]@3 [g3,c4,e4]@3 [g3,b3,d4]@6 ~@4", H: "[g3,c4,e4]!4",
})).s("gm_lead_2_sawtooth").gain(0.38)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@5 A B ~@2 C D ~@2 E F ~@26 A B ~@2 C D ~@2 E F ~@26>".pickRestart({
  A: "~ f#4 e4@2", B: "b3 a3@3, a3 ~@15", C: "~ f#4 e4@2, ~@4 e4 ~@11", D: "c#4 ~@3 a3@4 f#3@2 a3@6, ~@8 e3 ~@7",
  E: "~@2 e4 d4, ~@8 d4 ~@7", F: "b3@4 g3 ~@3 g3@8",
})).s("gm_orchestral_harp").gain(0.52)

// other · orchestral harp · "HARP" · soft notes
const orchestral_harp_soft = note("<~@10 A ~@3 B ~@31 A ~@3 B ~@26>".pickRestart({
  A: "b3 ~@3", B: "~@5 a3@3 ~@8",
})).s("gm_orchestral_harp").gain(0.37)

// chords · percussive organ · "ORGAN"
const percussive_organ = note("<~@7 A B ~@2 A C ~@2 D E ~@26 A B ~@2 A C ~@2 D E ~@24>".pickRestart({
  A: "~ [c5,f5,a5] g5 f#5, ~ [d5,a5]", B: "[d5,g5,a5]@4 [d5,f#5,a5]@3 [c#5,e5,a5]@5 ~@4",
  C: "[d5,g5,a5]@3 [d5,f#5,a5]@3 [c#5,e5,a5]@10", D: "~ [c5,e5,g5] f5 e5, ~ [c5,g5]",
  E: "[c5,f5,g5]@3 [c5,e5,g5]@3 [b4,d5,g5]@6 ~@4", // Csus4 C G
})).s("gm_percussive_organ").gain(0.45)

// chords · acoustic guitar steel · "E.GUITAR"
const acoustic_guitar_steel = note("<~@33 A@2 B@2 C D ~@30 A@2 B@2 C D ~@2>".pickRestart({
  A: "[a3!2 g3 d3 a3!2 ~ a3!2 ~ g3 ~ b3 a3 e3 a3@2 a3!2 a2 a3!2 d3 a3 g3 a2 g3!2 a3 g3!2 ~]/2",
  B: "[[a3,d4,e4]@3 a2 e3 ~ a2 [a3,d4,e4]@4 a2 e3 a3 a2 [a3,d4,e4]]/2", // Asus4
  C: "~@3 d3 ~ a3@2 e3 ~@3 g3 ~@3 g3, a3 b3 d4 e4, ~ g3@3 ~@5 b3@3 ~ b3@3, ~ e3 ~@3 a3 ~ a3",
  D: "~ d4@2 a3 ~@3 b3 ~@2 e4@2 ~@3 e5, g4@4 ~ e4@3 a4@4 a4@4, ~@6 d4@2 ~ g4@3 ~ b4@3, ~@7 d5",
})).s("gm_acoustic_guitar_steel").gain(0.38)

// chords · acoustic guitar steel · "E.GUITAR" · soft notes
const acoustic_guitar_steel_2 = note("<~@33 A ~ B ~ C D ~@30 A ~ B ~ C D ~@2>".pickRestart({
  A: "~@6 a2 ~@2 a3 ~ a3 ~@4", B: "~@5 a3 ~@2", C: "~@3 g3 ~@4", D: "~@2 b3@2 a4@4 ~@3 d4 ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A B A C D E A B A F A G A H A G A I A G J K J G J L A G J I J M ~@2 A B A B A B A E A B A F A E A H A E A I A
  E J I A E A L A E J I J M ~@2
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!3 ~ x", C: "x ~@2 x!2 ~@2 x", D: "~@3 x!2 ~@3", E: "x ~@2 x ~ x ~ x",
  F: "x ~@2 x!3 ~@2", G: "x ~@2 x ~@3 x", H: "x ~@4 x ~ x", I: "x ~@5 x ~ x!3 ~@2 x!2 ~", J: "x ~@2 x ~@4",
  K: "x ~@5 x ~ x!2 ~@4 x ~", L: "x ~@5 x ~@2 x!2 ~@2 x!2 ~", M: "x ~@5 x ~ x!3 ~@3 x ~",
})).gain(0.56)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@10 A B C ~@3 D ~ E ~ F ~ E ~@3 E C G C E C@2 ~ E C ~ C H ~@9 C ~@3 D ~ C ~ F ~ C ~@3 C@2 ~@2 C ~ C ~ C@2 ~ C H ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "x", C: "~ x", D: "~@7 x", E: "~@4 x!2 ~@2", F: "~@3 x!2 ~@3", G: "~@10 x ~@2 x ~@2",
  H: "~@13 x ~@2",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@5 A@11 B A@3 C A@3 C A@3 D A@10 ~@2 A@11 E A@3 C A@3 C A@14 ~@2>".pickRestart({
  A: "~ x ~ x", B: "x ~ x!3 ~@2 x ~ x!2 ~ x ~@2 x", C: "~@3 x", D: "~ x ~@2", E: "x ~ x!3 ~ x!2 ~ x!2 ~ x ~@2 x",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@16 A ~@3 B ~@3 B ~@3 C ~@23 D ~@3 B ~@3 B ~@16>".pickRestart({
  A: "~ x ~@4 x ~ x ~@7", B: "~ x ~@2", C: "~@3 x", D: "~ x ~@6 x ~@7",
})).gain(0.32)

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

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~@6 A ~@7 A ~@3 A ~ B ~ A ~@3 A B C ~ A B ~@2 A B D B ~@4 B ~@7 B ~@3 B ~ B ~ B ~@3 B ~@3 B ~@3 B ~@6
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@13 x ~@2", D: "~ x ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A ~@14 B C ~@2 D E ~@7 A ~@22 B C ~@2 D A ~@7 A ~@8>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4", C: "x ~@2 x ~@4", D: "~@6 x ~@8 x", E: "~@7 x",
})).gain(0.48)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@19 A ~@3 A B ~@30 A ~@3 A ~@17>".pickRestart({
  A: "~ x", B: "~@3 x ~@4",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B C D E F G H I J K L M J N O P Q R S P T R U V W X Y I T X Z V AA AB U AB AC ~@2 F V AD S AE V AD U F V AD AF P V
  AD S V@2 AD U V@2 AD Y V@2 AD U V@2 AG U AD S ~@2
>`.pickRestart({
  A: "x!5 ~ x!5 ~ x!2 ~ x", B: "x!5 ~ x!5 ~@2 x ~@2", C: "x!2 ~ x!2 ~ x!3 ~ x ~@2 x ~ x", D: "~ x!4 ~ x!5 ~ x!2 ~ x",
  E: "x ~ x!3 ~ x!3 ~ x ~ x ~@2 x", F: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", G: "x ~@2 x!5", H: "x!3 ~ x!2 ~@2",
  I: "x ~ x!3 ~ x ~ x ~@2 x!2 ~ x!2", J: "x ~ x ~ x ~@3 x ~ x!3 ~ x!2", K: "x ~@5 x ~ x ~ x!3 ~ x ~",
  L: "x ~ x!2 ~@4 x ~ x!3 ~ x!2", M: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", N: "x ~@5 x!3 ~ x ~ x ~ x!2",
  O: "x ~ x!3 ~ x ~ x ~ x!6", P: "x ~@2 x!2 ~ x!3 ~ x!3 ~ x!2", Q: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2",
// … 53 more lines

More by Jan Hammer