Strudelify

Two Socks at Play

Barry John

KeyA majorTempo78 bpm
0:00/0:00
// Two Socks at Play — Barry John
// 77.6 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 7 "HARP" orchestral harp (copy of ch 3 "A.PIANO 1" piano)
// note: Full arrangement: all 46 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(77.6/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@7 B C@8 D E@6 F@5 ~@3 G@2 H I@3 J K L@7>".pickRestart({
  A: "[~@8 [c#4,e4]@31 [a3,f#4]@31 e4@31 f#4@31 ~ [e4,e5]@31 ~@4 e4@4 ~ e5@5 ~ d5@5 a4@5 b4@5 ~ [c#4,e5]@29, ~@82 [a3,f#4]@15 e4@15]/7", // C#m D E C#m D
  B: "~@6 d4@5 e5@5 d5@5 a4@5 ~ b4@4 ~, ~ [a3,f#4]@30 ~", // D
  C: "[~@10 e4@16 g#5@5 c6@9 ~ b5@10 ~@6 e5@5 d6@10 e6@16 e5@5 [g#4,a5]@10 g#5@10 f#5@10 ~ e5@29 ~@6 e4@5 ~ e5@5 d5@5 a4@5 b4@6 [e4,e5]@30 ~@5 e4@5 ~ e5@5 d5@5 a4@5 b4@4 ~@2 b4@8, [g#4,b4]@31 c5@30 ~ f4@31 b4@27 ~@3 [c#4,e4]@30 ~ [a3,f#4]@32 ~@30 f#4@28 ~@12]/8", // Amaj7 E G#m C#m D
  D: "~ e4@16 ~@5 c6@10, ~@17 g#5@6 ~@9, ~@5 [a4,c5]@3", // Am
  E: "[b5@16 e5@5 d6@9 ~ e6@16 e5@5 ~ a5@10 g#5@11 a5@8 ~@2 c#4@30 ~ f#4@31 e4@31 [a3,f#4]@15, ~@21 [f4,a4]@32 [g#4,b4]@30 e4@31 ~@78, ~@7 a5@9]/6", // D F G#m
  F: "[~@17 [c#4,e4]@60 ~@2 e4@60 ~@21, ~@17 a4@122 ~@21]/5", // C#m
  G: "[~@14 a4@5 a5@5 f#5@5 a5@5 b5@4 ~@7 a4@5 a5@5 f#5@5 a5@4]/2", H: "~ b5@3 ~@7 a4@5 ~ a5@5 f#5@5 a5@5",
  I: "[b5@4 ~@7 a4@5 a5@5 f#5@5 a5@5 b5@4 ~@7 a5@5 a6@4 ~ f#6@5 a6@5 b6@4 ~@6 a5@5 ~ a6@4 f#6@5 a6@5 ~ b6@3]/3",
  J: "~@7 a5@5 a6@5 f#6@5 a6@5 b6@3 ~@2", K: "~@5 a5@5 ~ a6@5 f#6@5 a6@5 ~ b6@3 ~@2",
  L: "[~@6 a4@5 a5@5 b5@5 a5@16 a4@5 a5@5 b5@5 a5@15 ~ a4@5 a5@5 b5@5 a5@16 a4@5 a5@5 ~ b5@6 a5@105 ~@3]/7",
})).s("gm_string_ensemble_1").gain(0.19).pan(0.3)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<~@2 A@4 ~@2 B@3 C ~ D@3 ~@4 E@3 ~@2 F@3 ~@18>".pickRestart({
  A: "[~@6 c#4@31 a3@30 ~@2 c#4@30 ~@29]/4", B: "[~@31 a4@28 ~@3 a4@32 ~@2]/3", C: "~@5 g#4@9 ~@2",
  D: "[~@13 c#4@15 a3@15 ~@5]/3", E: "[~@19 a3@31 c#4@31 ~@15]/3", F: "[~@5 c#4@20 ~@7]/3",
})).s("gm_string_ensemble_1").gain(0.13).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano = note("<A@7 B C@4 D@4 E@6 F@7 G@8 H I J K@3 L@3>".pickRestart({
  A: "[~@29 a2@10 ~@11 f#3@20 ~@21 a2@10 ~@10 f#3@21 ~@21 a2@10 ~@10 f#3@21 ~@21 a2@9, ~@8 a2@21 ~@10 d2@31 ~@10 c#4@21 ~@36 e3@26 ~@5 a2@26 a2@20 ~@10, ~@13 e3@26 ~@5 a2@26 a2@21 ~@10 d2@31 ~@10 c#4@21 ~@36 e3@25, ~@18 c#4@23 ~@34 e3@25 ~@6 a2@26 a2@21 ~@11 d2@31 ~@9 c#4@20]/7",
  B: "~@11 f#3@21, ~ d2@31, ~@3 a2@13",
  C: "[~@21 e2@10 ~@10 c4@20 ~@21 d2@11 ~@10 g#3@20 a2@5, e2@20 ~@42 d2@20 ~@11 e2@30 ~@5, ~@5 b2@26 a2@30 ~@6 a2@26 ~@5 b2@25 ~@5, ~@10 g#3@21 ~@5 e3@26 ~@10 f3@21 ~@35]/4",
  D: "[~@16 a2@10 ~@11 f#3@20 ~@21 a2@10 ~@11 f#3@20 ~@5 b2@4, e3@26 d2@31 ~@5 e3@25 ~@6 a2@26 ~@9, ~@5 c#4@20 ~@6 a2@26 ~ a2@20 ~@10 d2@31 e2@9, ~@17 c#4@5 ~@10]/4",
  E: "[~@12 e2@10 ~@10 c4@21 ~@21 d2@10 ~@11 g#3@20 ~@21 a2@10 ~@11 f#3@21 ~@11 c#4@3, ~ g#3@21 a2@31 d2@21 ~@11 e2@30 ~@11 c#4@21 ~@36 e3@9, ~@27 e3@26 ~@5 a2@26 ~@6 b2@25 a2@21 ~@11 d2@31 ~@14, ~@63 f3@21 ~@37 e3@26 ~@5 a2@26 a2@14]/6",
  F: "[~@7 a2@10 ~@11 f#3@21 ~@20 e3@11 ~@52 e3@10 ~@10 c#4@20 ~@21 f#4@10 ~@11 a3@10, ~@17 d2@32 ~@5 e3@15 ~@16 e3@26 ~@5 e3@15 ~@16 e3@25 ~ d3@31 d3@20, ~@22 a2@27 a2@30 ~ a2@31 a2@30 ~ a2@30 ~@52, ~@59 c#4@31 c#4@32 c#4@30 ~@31 a3@21 ~@20]/7",
  G: "[f#4@10 ~@20 g4@11 ~@21 g4@10 ~@21 f#4@10 ~@21 f#4@10 ~@21 g4@10 ~@21 g4@11 ~@19 f#4@10 ~@21 f#4@9, ~@11 e3@30 e3@32 d3@30 ~ d3@30 e3@31 ~ e3@31 d3@30 d3@29, ~@21 b3@20 ~@10 b3@22 ~@10 a3@20 ~@11 a3@20 ~@11 b3@20 ~@11 b3@21 ~@10 a3@20 ~@11 a3@18]/8",
  H: "~@11 g4@5, ~ e3@15, ~@3 b3@5", I: "~@21 g4@10 ~, e3, ~@11 b3@21", J: "~@21 f#4@10 ~, d3@31 ~, ~@11 a3@20 ~",
  K: "[~@20 f#4@10 ~@21 g4@10 ~@23 g4@12, d3@30 ~ e3@31 e3@34, ~@10 a3@20 ~@11 b3@21 ~@10 b3@24]/3",
  L: "[~@7 a3@6 ~@2 f#4@27 ~ d2@50 ~@3, d3@41 ~@55, ~@13 a3@29 ~@54, ~@7 d4@14 ~@27]/3",
})).s("gm_piano").gain(0.2)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A@5 B@2 C D@8 E@7 F@5 G@6 H@3 I J K L@6>".pickRestart({
  A: "[~@8 [c#4,e4]@31 [a3,f#4]@31 [c#4,e4]@31 [a3,f#4]@31 e5@28]/5", // C#m D C#m D
  B: "[~@29 b4@5 e5@30, ~@4 e4@13 ~@15, ~@13 e5@21 ~@30, ~@19 d5@16 ~@29, ~@24 a4@11 ~@29]/2",
  C: "~@27 b4@4 [e4,g#4], ~@3 e4@12 ~, ~@11 e5@19 ~@2, ~@8 d5@7 ~, ~@21 a4@9 ~@2", // E
  D: "[~@26 g#5@4 ~@27 e5@3 ~@28 e5@3 ~@22 f#5@9 ~ [c#5,e5]@30 ~@27 b4@6 [c#5,e5]@30 ~@26 b4@4 ~ [g#4,b4]@9, b4@29 ~ e5@27 ~@3 f5@31 b4@32 ~@31 [a3,f#4]@21 a4@10 ~@36 e4@16 a4@9 e4@10, ~@10 e4@19 ~@2 [a5,c6]@29 ~ a5@30 ~ e5@31 ~@36 e4@26 ~@31 [a3,f#4]@30 ~@10, ~@41 b5@19 ~@2 d6@29 ~@2 a5@30 ~@47 d5@16 ~@46 d5@14 ~@10, ~@72 e6@19 ~@12 g#5@20 ~@42 e5@20 ~@42 e5@19 ~@10]/8", // C#m G#m D Am D
  E: "[~@17 g#5@4 ~@27 e5@3 ~@28 e5@4 ~@23 a5@7 ~@2 e5@32 [a4,f#5]@31 [c#5,e5]@31 f#5@15, ~ e4@20 e5@27 ~@4 [f5,a5]@31 b4@30 a4@34 ~@77, ~@22 a5@29 ~@33 e5@29 ~ c#5@33 ~@77, ~@23 c6@29 ~ d6@30 ~@2 a5@21 ~@9 a5@65 ~@44, ~@32 b5@19 ~@12 e6@20 ~@12 g#5@18 ~@111]/7", // D C#m F
  F: "[~@17 a4@114 ~@10 a4@19, ~@17 c#4@64 ~@79]/5",
  G: "[~ a4@11 [f#4,c#5]@31 b4@19 b4@11 [g4,c#5]@32 a4@20 a4@11 ~@25 b5@5 b4@21 b4@5, ~@105 f#4@30 ~ c#5@30 g4@26, ~@73 a5@5 a5@5 ~@13, ~@151 f#5@15 ~@26]/6", // F#5 Gdim
  H: "[~@31 b5@5 ~@25 b5@5 ~@26 b5@4, ~@6 c#5@31 a4@19 a4@10 ~@30, ~@11 a4@25 ~ [d4,f#4]@30 [d4,f#4,c#5]@29, ~@16 a5@10 a5@11 ~@10 a5@10 a5@10 ~@11 a5@9 a5@9, ~@21 f#5@16 ~@15 f#5@15 ~@15 f#5@14]/3", // D Dmaj7
  I: "~@27 b5@5, ~ e4@15, ~@2 b4@15 f#5@15, ~@7 a4@25, ~@6 a5@5 [b4,a5]@5", // B7
  J: "~@27 b5@5, [e4,g4,c#5], ~@5 a4@26 ~, ~@11 a5@10 a5@10 ~, ~ f#5", // C#dim
  K: "a4@5 ~@16 [a4,a5]@10 ~, f#4@31 ~, ~@11 a5@10 ~@11, ~@16 b5@15 ~", // A
  L: "[~@20 a5@10 ~@21 [b4,a5]@10 ~@35 [d5,f#5]@92 ~@4, [f#4,c#5]@30 ~ g4@31 [e4,g4,c#5]@34 ~@96, ~@5 a4@25 ~ b4@15 b5@15 ~@17 b5@18 ~@96, ~@10 a5@10 ~@16 a4@26 ~@5 a4@29 ~@96, ~@15 b5@15 ~@11 a5@10 ~@21 a5@12 a5@105 ~@3]/6", // B7 D F#5 C#dim
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<~@22 A@6 ~@3 B@5 ~ C ~ D E@2 ~ F@3>".pickRestart({
  A: "[~@17 a4@31 ~ e4@114 ~@29]/6", B: "[~@9 d4@30 ~@6 a4@25 e4@31 ~ [e4,g4]@31 ~@27, ~@40 [d4,f#4]@29 ~@91]/5",
  C: "~ g4@15", D: "~@6 a4@15 ~@11", E: "[d4@30 ~ e4@31 ~@2]/2", F: "[a4@23 ~]/3",
})).s("gm_piano").gain(0.15)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<~ A@5 B C D@8 E@6 F@6 G@8 H I J K@7>".pickRestart({
  A: "[~@8 d2@30 a2@19 ~@2 a2@10 d2@31 a2@18 ~@3 a2@10 ~ d2@28]/5", B: "~@2 a2@18 ~@3 a2@9", C: "~ d2@30 ~",
  D: "[e2@19 ~ e2@11 a2@30 d2@19 ~@2 d2@11 e2@30 a2@19 ~@2 a2@10 d2@31 ~ a2@18 ~@2 a2@10 d2@31 e2@9]/8",
  E: "[~@11 e2@10 ~ a2@31 d2@18 ~ d2@12 ~ e2@30 a2@18 ~@3 a2@10 d2@31 ~ a2@14]/6",
  F: "[~@7 a2@10 d2@32 a2@21 e2@9 ~ a2@30 ~ a2@21 e2@10 a2@30 ~ [d3,a3]@19]/6", // D5
  G: "[~ [d3,a3]@9 ~@2 [d3,a3]@29 ~@2 [e3,b3]@18 ~ [e3,b3]@42 ~ [d3,a3]@20 [d3,a3]@9 ~@2 [d3,a3]@27 ~@3 b3@30 ~ b3@30 ~ [d3,a3]@28, ~@83 e3@31 ~@14]/8", // D5 E5 D5
  H: "~@3 [d3,a3]@26 ~@3", I: "~@2 [e3,b3]@19 ~ [e3,b3]@9 ~", J: "[e3,b3]@23 ~@9",
  K: "[d3@20 ~ d3@8 ~@3 d3@30 [e3,b3]@20 ~ [e3,b3]@9 ~@2 e3@34 [d3,a3]@92 ~@4, a3@30 ~ a3@31 ~@32 b3@30 ~@100]/7", // E5 D5
})).s("gm_string_ensemble_1").gain(0.17).pan(0.7)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_3 = note("<~@27 A@4 B@2 C@2 D@2 E@2 F G@3 H@3>".pickRestart({
  A: "[~@13 [d4,f#4,a4]@18 ~@2 d4@10 ~ [d4,f#4,c#5]@26 ~@4 [e4,g4,b4]@18 ~@2 [e4,g4,b4]@11 [e4,g4,c#5]@23, ~@31 [f#4,a4]@12 ~@85]/4", // D Dmaj7 Em C#dim F#m
  B: "[~@9 [d4,f#4,a4]@18 ~ a4@12 [d4,c#5]@24, ~@7 f#4@9, ~@14 d4@5 ~@13]/2", // D Dmaj7
  C: "[~@6 [e4,g4,b4]@19 ~@2 b4@10 c#5@24 ~@3, ~@26 g4@33 ~@5, ~@27 e4@35 ~@2]/2", // Em
  D: "[~@5 [d4,f#4,a4]@18 ~@2 a4@10 c#5@26 ~@3, ~@25 [d4,f#4]@36 ~@3]/2", // D
  E: "[~ [e4,g4,b4]@10 b4@5 c#5@13 ~@3, ~@22 e4@37 ~@5, ~@11 g4@17 ~@4]/2", F: "[d4,f#4,a4]@20 ~ [d4,f#4,a4]@11",
  G: "[[d4,f#4,c#5]@28 ~@3 [e4,g4,b4]@20 ~ e4@9 ~ [e4,c#5]@26 ~@8, ~@51 g4@34 ~@11, ~@51 b4@11 ~@34]/3", // Dmaj7 Em C#m
  H: "[[d4,f#4,a4]@23 ~]/3", // D
})).s("gm_string_ensemble_1").gain(0.07).pan(0.7)

stack(string_ensemble_1, string_ensemble_1_soft, piano, piano_2, piano_soft, string_ensemble_1_2, string_ensemble_1_3)

More by Barry John