Strudelify

Two Socks - The Wolf Theme

Barry John

KeyA majorTempo80 bpm
0:00/0:00
// Two Socks - The Wolf Theme — Barry John
// 80 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 8 "HARP" orchestral harp (copy of ch 3 "A.PIANO 1" piano)
// note: Full arrangement: all 33 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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.

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A@5 B@8 C@6 D E F@4 G@8>".pickRestart({
  A: "b5/5", B: "[~@30 [e3,g#3]@30 ~ [e3,a3,c4]@32 [d3,f3,a3]@32 ~ [e3,g#3,b3]@32 b5@98, ~@29 b3@28 ~@199]/8",
  C: "[~@30 [e3,g#3,b3]@31 ~ [a3,c4]@32 [d3,f3,a3]@33 ~ b3@31 ~ c#4@32, ~@61 e3@32 ~@34 [e3,g#3]@32 [a3,e4]@33]/6", // E Am Dm E A5
  D: "~ [a3,d4,f4]@26 ~@5", E: "~ [a3,c#4,e4]@18 ~ [a3,c#4,e4]@11 ~", F: "[[a3,d4,f4]@30 ~ b5@97]/4",
  G: "[~@30 [g#3,b3]@32 [e3,c4]@30 [d3,f3,a3]@34 [g#3,b3]@33 [e3,a3,c#4]@91 ~@6, ~@30 e3@29 ~@3 a3@25 ~@39 e3@28 ~@102]/8", // G#m C Dm G#m A
})).s("gm_string_ensemble_1").gain(0.16).pan(0.4)

// chords · piano · "A.PIANO 1"
const piano = note("<~@2 A@2 B@8 C@5 D E F G@7 H@3 I@3>".pickRestart({
  A: "[~@11 [a3,c#4,e4]@18 ~@3 f#4@30 a2@2, a2@29 ~ a3@32 ~@2, ~@31 d4@31 ~@2]/2", // A
  B: "[~@9 [a3,c#4,e4]@17 ~@3 f#4@32 ~@12 g#3@21 ~@11 c4@21 ~@11 f3@21 ~@11 g#3@21 ~@12 [a3,c#4,e4]@19 ~@2 f#4@31 a2@2, ~@27 a3@35 e2@32 ~@5 e3@26 ~@6 a2@27 ~@5 b2@27 a2@31 a3@32 ~@3, ~@28 d4@34 ~@5 b2@26 ~ a2@32 d2@32 e2@32 ~@32 d4@32 ~@2]/8", // A
  C: "[~@10 [a3,c#4,e4]@19 ~@2 f#4@32 ~@11 g#3@20 ~@11 c4@21 ~@11 f3@23, ~@29 a3@34 e2@31 ~@6 e3@26 ~@6 a2@28, ~@30 d4@33 ~@6 b2@25 a2@32 ~ d2@33]/5", // A
  D: "~@5 g#3@11, e2, ~@5 b2@27", E: "~@27 e4@5, a2, ~@5 e3@11, ~@15 a3@17, ~@21 c#4@11",
  F: "~@11 f3@5, ~ [a3,d4,f4]@31, ~@11 d2@21, ~@17 a2@15", // Dm
  G: "[~@11 e3@20 ~@22 f3@10 ~@12 [a3,c#4,e4]@19 ~ [a3,d4,f#4]@31 ~@12 [a3,c#4,e4]@18 ~@2 f#4@32 ~@12 g#3@20 a2@2, ~ a2@30 d2@32 ~@94 d4@33 ~@7 b2@25 ~@2, ~@41 a2@22 a2@31 ~@33 a2@29 a3@34 ~ e2@31 ~@2]/7", // A D A
  H: "[~@9 c4@19 ~@12 f3@22 ~@10 g#3@24, ~@3 e3@25 d2@34 ~ e2@33, ~@34 a2@28 ~@5 b2@29]/3",
  I: "[~@28 a3@15 ~ a1@47 ~@5, a2@43 ~@53, ~@6 e3@37 ~@53, ~@13 c#4@30 ~@53]/3",
})).s("gm_piano").gain(0.15)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A@3 B@2 C@6 D@2 E@7 F@5 G@8>".pickRestart({
  A: "[~@2 e5, b5@47 ~]/3",
  B: "[~@24 b4@6 ~@11 b5@21 ~@2, ~@5 e4@25 ~@34, ~@9 e5@20 ~ e5@32 ~@2, ~@7 d5@8 ~@17, ~@19 a4@11 ~@34]/2",
  C: "[~@23 b4@6 ~@27 g#5@6 ~@27 e5@5 ~@27 e5@5 ~@22 f#5@10 e5@32 ~@2, ~@3 e4@26 ~@12 e4@21 ~@130, ~@4 e5@11 ~@16 c6@16 d6@16 a5@16 ~@17, ~@12 d5@17 ~@44 b5@21 ~@11 e6@21 ~@11 g#5@21 ~@34, ~@17 a4@12 ~ b4@32 ~@130]/6",
  D: "[~@12 b4@3 e5@16 ~, ~@3 e4@27 ~@34, ~@8 e5@21 ~@35, ~@13 d5@16 ~@35, ~@18 a4@11 ~@35]/2",
  E: "[~@25 b4@4 ~@28 g#5@4 ~@27 e5@4 ~@28 e5@4 ~@25 a5@8 ~@3 a5@30 ~@3 a5@31, ~@4 e4@25 e4@13 e4@18 ~@13 b5@19 ~@13 e6@20 ~@13 g#5@19 ~@35 f5@32, ~@9 e5@20 ~@32 a5@31 ~@34 e5@31 ~@2 [c#5,e5]@31 ~ d5@33, ~@14 d5@15 ~@2 b4@29 ~ e5@27 ~@5 [f5,a5]@32 b4@32 a4@33 a4@34, ~@19 a4@10 ~ g#4@30 ~@2 c6@30 ~@3 d6@30 ~@3 a5@21 ~@75]/7", // C#m F
  F: "[~ [a3,c#4,e4]@20 [a3,c#4,e4]@10 [a3,d4,f4]@32 [e5,b5]@32 ~@26 b4@6 ~@11 b5@20 ~@2, ~@95 b5@21 a4@11 ~@33, ~@50 e4@13 ~@17, ~@106 e5@21 e5@31 ~@2, ~@111 d5@16 ~@33]/5", // A Dm E5
  G: "[~@25 b4@4 ~@27 g#5@3 ~@28 e5@4 ~@29 e5@5 ~@23 a5@9 ~@3 a5@91 ~@5, ~@4 e4@25 e4@12 ~ e4@18 ~@13 b5@19 ~@12 e6@21 ~@11 g#5@21 ~@2 e5@92 ~@5, ~@9 e5@20 ~@30 e5@28 ~@4 f5@33 ~ b4@32 a4@94 ~@5, ~@14 d5@15 ~@2 b4@28 ~@2 a5@31 a5@32 ~@2 e5@31 ~ c#5@93 ~@5, ~@19 a4@10 ~ g#4@29 ~@3 c6@29 ~@3 d6@31 ~@2 a5@21 ~@108]/8",
})).s("gm_piano").gain(0.25)

// chords · string ensemble 2 · "STRINGS"
const string_ensemble_2 = note("<~@18 A@4 ~@11>".pickRestart({
  A: "[[e3,c#4]@31 ~@2 [f3,d4]@31 ~ [e3,c#4]@29 ~ [f3,d4]@32 ~, a3@63 ~]/4", // C#m Dm C#m Dm
})).s("gm_string_ensemble_2").gain(0.13).pan(0.6)

stack(string_ensemble_1, piano, piano_2, string_ensemble_2)

More by Barry John