Strudelify

Sherlock Main Theme

Michael Price & David Arnold

KeyA minorTempo68 bpm
0:00/0:00
// Sherlock Main Theme — Michael Price & David Arnold
// 68 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5033867; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/3)

// 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 · viola
const viola = note("<~@16 A@2 B C D A E A F G H I J K L M ~@2 N O ~@31 P O ~@8 Q R S ~@2>".pickRestart({
  A: "a3", B: "b3", C: "f4", D: "d4", E: "g#3", F: "f4 a4 d5@2 c5@2", G: "[c4,e4] a4 c5@4", H: "[b3,e4] g#4 b4@4",
  I: "[c4,f4] a4 c5@4", J: "f4 a4 e5@2 d5@2", K: "[e4,c5] b4 a4@4", L: "[g#4,c5] [g#4,b4] [g#4,c5]", M: "[e4,a4]",
  N: "e4@2 a4@3 e4", O: "b4 a4@2", P: "e4@2 f4@3 e4", Q: "e5@4 a4@5 a4 c5 f5", R: "e5 a4@2", S: "b4 ~@2",
})).s("gm_viola").gain(0.25)

// other · viola · soft notes
const viola_soft = note("<~@4 A@2 B A C D E F G H I A ~@32 J@4 K@2 J@6 K@2 ~@17 L M ~>".pickRestart({
  A: "a3", B: "b3@2 c4", C: "f3 a3 d4@2 c4@2", D: "e3 a3 c4@4", E: "e3 g#3 b3@4", F: "f3 a3 c4@4", G: "f3 a3 e4@2 d4@2",
  H: "c4 b3 a3@4", I: "g#3 a3 b3@2 c4@2", J: "a3/2", K: "g#3/2", L: "~ e4@2", M: "a4",
})).s("gm_viola").gain(0.15)

// chords · piano
const piano = note(`<
  ~@4 A B C D E@2 F G H E F E I@2 J K L I M N O P Q R O S T U V W X Y Z AA AB ~@25 AC V W X Y Z AA AB AD AE AF AG AH AI
  AJ AK AL ~
>`.pickRestart({
  A: "[d3,a4,d5]@23 ~", B: "[e3,a4,c5]@23 ~", C: "[e3,g#4,b4]@15 ~ [g#4,c5]@4 b4@4", D: "[a2,e4,a4]@23 ~", E: "a2 ~@2",
  F: "b2 ~@2", G: "c3 ~@2", H: "d2 ~@2", I: "[a1,a2]@2 [a4,c5]!4", J: "[b1,b2]@2 [b4,d5]!4", K: "[f2,f3]@2 [a4,c5]!4",
  L: "[d2,d3]@2 [a4,c5]!4", M: "[g#1,g#2]@2 [b4,d5]!4", N: "[a4,c5] [c5,e5]!5, [a1,a2] ~@2", O: "[d2,d3]!6, d4@23 ~",
  P: "[a1,a2]!6, c4@23 ~", Q: "[b1,b2]!6, b3@15 ~ c4@8", R: "[a2,f3,a3] [a2,a3]!5", S: "[a2,a3]!6, c4@23 ~",
  T: "[g#2,g#3,a3,c4,e4,g#4] [g#2,g#3,a4] [g#2,g#3]!4, ~ b4 c5", U: "[a1,a2]!6, [a3,c4,e4,a4]@23 ~",
  V: "[d2,a2,d3]!5 [d2,a2,d3,c5,c6], [f4,f5]@8 [d5,d6]@11 ~@5", W: "[a1,e2,a2]!6, [e4,a4,c5,e5]@23 ~",
  X: "[b1,e2,b2,e4]@23 ~", Y: "[f1,f2,f4]@23 ~", Z: "[d2,a2]@23 ~", AA: "a2@23 ~", AB: "g#2@23 ~",
  AC: "~ [c6,e6]@23, [a1,a2,e5,a5]", AD: "[a1,a2]@23 ~", AE: "~ [g5,a5]@23, [a4,c5]", AF: "[c5,e5,a5,e6]",
  AG: "~ [g#5,b5]@23, [b4,e5]", AH: "~ d5@7 [d4,d5]@16, [e4,a4], ~ e5@23", AI: "~ [c6,e6]@23, [f3,c4,e5,a5]",
  AJ: "~ [c6,e6]@23, [a3,e5,a5]", AK: "~@2 c6, [g#4,b4], e3 [e3,b5]@2, ~ [e5,g#5]@23, ~ a5@5",
  AL: "~ [e5,a5]@23, [a4,c5]", // A5 Am
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<A B@2 A ~@35 C D E F G H I J K ~@2 L@2 M@2 N@2 O@2 P@2 Q@3 R ~@18>".pickRestart({
  A: "f3@23 ~", B: "e3@23 ~", C: "[a1,a2]@23 ~", D: "~ [g5,a5]@23, [a4,c5]", E: "[c5,e5,a5,e6]",
  F: "~ [g#5,b5]@23, [b4,e5]", G: "~ d5@7 [d4,d5]@16, [e4,a4], ~ e5@23", H: "~ [c6,f6]@23, [a4,f5,a5]",
  I: "~ [c6,e6]@23, [a4,e5,a5]", J: "~@2 c6, [g#4,b4], e4 [e4,b5]@2, ~ [e5,g#5]@23, ~ a5@5",
  K: "~ [c5,a5]@23, [c4,f4,a4]", L: "[~ c5@2, [a2,c3,e3,e4], ~ a4@5]/2", M: "[~ b4@2, [e2,g#2,b2,e4], ~ g#4@5]/2",
  N: "[~ c5@2, [f2,a2,c3,f4], ~ a4@5]/2", O: "[~@2 d5, [d2,f2,a2,d4], ~ f4@5, ~ e5@2]/2",
  P: "[~ a4@2, [a2,c3,e3,c5], ~ b4@5]/2", Q: "[~@4 c5@5, [e2,g2,b2]@17 ~, e4@2 ~, ~ g#4@6 ~@2, ~@2 b4@6 ~]/3",
  R: "~ [c6,f6]@23, [f2,f3,f5,a5]", // F5 F
})).s("gm_piano").gain(0.2)

// chords · orchestral harp · "Arpa"
const orchestral_harp = note(`<
  A@2 B A C@2 D A C@2 E F G C E H I@2 J K L I M N O@2 P O@3 P Q O@2 P O@3 P Q ~@8 R@2 ~@19 O@3 ~@10
>`.pickRestart({
  A: "~@2 a2!4", B: "~@2 b2!4", C: "~@2 [a2,d4] [a2,e4] a2 [a2,e4]", D: "~@2 [b2,d4] [b2,e4] b2 [b2,e4]",
  E: "~@2 [b2,d4] [b2,e4] [b2,a4] [b2,e4]", F: "~@2 [c3,d4] [c3,e4] c3 [c3,e4]", G: "~@2 [d2,d4] [d2,e4] d2 [d2,e4]",
  H: "~@2 a2 [a2,d4] [a2,e4] a2", I: "a2!2 [a2,d4] [a2,e4] a2 [a2,e4]", J: "b2!2 [b2,d4] [b2,e4] [b2,a4] [b2,e4]",
  K: "f2!2 [f2,d4] [f2,e4] f2 [f2,e4]", L: "d2!2 [d2,d4] [d2,e4] d2 [d2,e4]",
  M: "g#2!2 [g#2,d4] [g#2,e4] [g#2,a4] [g#2,e4]", N: "a2!3 [a2,d4] [a2,e4] a2", O: "~@2 d4 e4 ~ e4",
  P: "~@2 d4 e4 a4 e4", Q: "~@3 d4 e4 ~", R: "[~ [c5,f5]@47, [f4,a4]]/2",
})).s("gm_orchestral_harp").gain(0.2)

// other · banjo
const banjo = note("<~@31 A@2 ~@49>".pickRestart({
  A: "[~@8 e5@2 e5 ~ e5!2 ~ e5 e5@2 e5@2 e5@3 e5@5 e5@4 ~@16]/2",
})).s("gm_banjo").gain(0.05)

stack(viola, viola_soft, piano, piano_soft, orchestral_harp, banjo)