Strudelify

Do You Wanna Touch Me (Oh Yeah)

Gary Glitter

KeyE minorTempo125 bpm
0:00/0:00
// Do You Wanna Touch Me (Oh Yeah) — Gary Glitter
// 125 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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 · fretless bass · "Bass"
const bass = note(`<
  ~@3 A B C D@2 B C E@2 F@3 G F@4 H I@2 J I@3 K L M F N O@2 P Q R B C D@2 B C E@2 F@3 G F@4 H I@2 J I@3 K L M F N O@2 P
  Q R ~@7 A B C D@2 B C S@2 B C D@2 B C S@2 B C D@2 B C T@2
>`.pickRestart({
  A: "~@8 e1@4 d#1@3 ~", B: "d1@3 g1", C: "e1@3 g1", D: "[e1@23 ~ e1@4 d#1@4]/2", E: "[e1@26 b0@2 c#1@2 e1 ~]/2",
  F: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", G: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ b0 ~ c#1@2 e1 ~",
  H: "a1@2 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", I: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  J: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ a#1@3 ~", K: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  L: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ b1@2", M: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1@2 b1@2",
  N: "b1@3 ~ b1 ~ b1 ~ b1@2 ~@2 b1@2 e1@2", O: "[~@2 e1 ~ e1 ~ e1 ~ e1@3 ~ e1 ~ e1@4 e1 ~ e1@3 ~ e1 ~ e1@3 ~ e1@2]/2",
  P: "~@2 e1 ~ e1@3 ~ e1 ~ e1 ~@3 e1@2", Q: "b1@4 ~@2 b1@3 ~ b1@2 ~@2 b1@2", R: "~@2 b1@3 ~ [a1,b1] ~ b1@4 a#1@4",
  S: "[e1@24 e1@4 d#1@3 ~]/2", T: "[e1@13 ~@3]/2",
})).s("gm_fretless_bass").gain(0.8)

// bass · baritone sax · "Bass Sax"
const bass_2 = note(`<
  ~@3 A@2 B C@2 D E@3 F ~@2 G H ~@2 I J ~@2 K L ~@2 M N O P Q R S T@2 U V B C@2 D E@3 F ~@2 G H ~@2 I J ~@2 K L ~@2 M N
  O P Q R S T@2 U ~@7 A@2 B C@2 D W@4 B C@2 D W@4 B C@2 D X@3
>`.pickRestart({
  A: "[~@8 e2@4 d#2@3 d2@13 g2@4]/2", B: "e2@3 g2", C: "[e2@5 ~ e2 d#2]/2", D: "d2@12 g2@3 ~",
  E: "[e2@11 ~ g2@3 e2@21 ~@6 b1@2 d2@2 e2@2]/3", F: "e2 ~",
  G: "~@10 [b1,b2]@2 ~ e2 e2@2, ~@6 [c#2,d2,d3] ~, ~@13 e3@2 ~", H: "[e2,e3]@3 ~@5", I: "~@5 [e2,e3] [g2,g3] [a2,a3]",
  J: "[a2,a3]@7 ~@9", K: "~@8 [b1,b2]@3 ~ a#2@3 ~, ~@11 a#1@4 ~", L: "[a1,a2]@3 ~", M: "~@5 b2 d3 e3",
  N: "e3@3 ~ e3@2 ~@4 b2 ~ d3@2 e3 ~, c3 ~@15", O: "e3 ~ e3@2 ~ e3@3 ~ b2@3 d3 ~ e3 ~",
  P: "e3 ~ e3@2 ~@2 e3@2 ~@2 e3@2 ~@2 e3@2", Q: "b2@4 ~@2 b2 ~ b2@4 ~@2 b2 ~",
  R: "e3@4 ~@2 e3@2 ~@2 b2@2 d3@2 e3 ~, ~@10 c#3 ~@5", S: "e3@3 ~@3 e3@3 ~ b2@2 d3 ~ e3 ~",
  T: "[e3 ~ e3@2 ~@2 e3@2 ~@2 e3@2 ~@2 b2 b2@6 ~ b2 ~ b2@5 ~ b2 ~]/2", U: "b2@4 ~@2 b2 ~ b2@3 ~ a#2@4",
  V: "d2@11 ~ g2@4", W: "[e2@11 ~ g2@3 e2@21 ~@4 e2@4 d#2@3 d2@13 g2@4]/4", X: "[e2@11 ~ g2@3 e2@21 ~@12]/3",
})).s("gm_baritone_sax").gain(0.51).pan(0.2)

// other · distortion guitar · "Elec Guitar"
const distortion_guitar = note(`<
  ~@3 A B C D E B C F@2 G ~@2 H I ~@2 J K ~@2 L M ~@2 N O P Q R P@2 Q S T B C D E B C F@2 G ~@2 H I ~@2 J K ~@2 L M ~@2
  N O P Q R P@2 Q S T ~@7 A B C D E B C U@2 B C D E B C U@2 B C D E B C V@2
>`.pickRestart({
  A: "~@2 e3 d#3", B: "d3@3 g3", C: "e3@3 g3", D: "e3@2 ~ e3 ~@2 e3 ~@2 e3 ~@2 e3 ~@2 e3", E: "~ e3 ~@2 e3@2 d#3@2",
  F: "[e3@25 ~ b2@2 c#3@2 e3 ~]/2", G: "e3", H: "~@10 b2@2 d3@2 e3 ~", I: "e3@7 ~@9", J: "~@10 e3@2 g3@2 a3 ~",
  K: "a3@7 ~@9", L: "~@2 [b2,f#4] [a#2,f4]", M: "[a2,e4]@11 ~@5", N: "~@10 b2 ~ d3@2 e3@2", O: "e3 ~", P: "e3@3 ~",
  Q: "e3@13 ~@3", R: "b2@5 ~@3 b2@5 ~@3", S: "~ b2 ~ b2, ~@4 c#3 ~@11", T: "~@4 b2@3 ~ b2@4 a#2@4",
  U: "[e3@6 e3 d#3]/2", V: "[e3@25 ~@7]/2",
})).s("gm_distortion_guitar").gain(0.56)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@3 A B C D A B C E F G ~@2 H I ~@2 J K ~@2 L M ~@2 H N O P Q O@3 R S T C D A B C E F G ~@2 H I ~@2 J K ~@2 L M ~@2 H
  N O P Q O@3 R S ~@7 A B C D A B C E A B C D A B C E A B C D A B C E ~
>`.pickRestart({
  A: "~@2 e3 d#3", B: "d3@3 g3", C: "e3@3 g3", D: "e3 ~@3", E: "e3@3 ~", F: "~@10 b2@2 c#3 ~ e3 ~",
  G: "[b2,e3] ~@7, e2 ~", H: "~@10 b2 ~ d3 ~ e3 ~", I: "e2@7 ~@9, e3 ~@3", J: "~@10 e3@2 g3 ~ a3 ~",
  K: "a1 ~, a3@5 ~@11", L: "~@8 b2@3 ~ a#2@3 ~", M: "a2@7 ~@9", N: "e2 ~, e3@3 ~@13", O: "e2 ~", P: "e2@7 ~@9",
  Q: "b1 ~ b1 ~", R: "~@4 b1@4 ~@3 b1@5", S: "~@2 b1 ~ b1@2 a#1@2", T: "d3@11 ~ g3@4",
})).s("gm_brass_section").gain(0.56).pan(0.7)

// chords · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@4 A@4 B@4 C D E F@2 G H I@2 J K@2 L J M@2 N O P@2 Q R S@2 T U@3 ~ V@4 C D E F@2 G H I@2 J K@2 L J M@2 N O P@2 Q R
  S@2 T W@4 X@4 Y@4 Z@4 AA@3 AB AC@4 A@4 B@4
>`.pickRestart({
  A: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 ~@2 b3@11 [g3,g4]@3 ~ [e2,e3]@16 ~@16, d2@15 e2@13 ~@36, ~@16 [e3,g#3]@13 ~@2 [g#3,b3]@17 ~@16, ~@16 e4@11 ~@5 e4@18 ~@14]/4", // D G E G#m
  B: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 e3 e4@11 ~ g3@3 ~ [e2,e4]@15 ~@17, d2@14 ~ e2@14 ~@3 e3@22 ~@10, ~@16 [e3,g#3,b3]@13 ~@2 [g#3,b3]@15 ~@18, ~@27 g4@4 ~@33]/4", // D G E G#m
  C: "e3 ~ d3 c#3 b2 c#3 ~ b2, [e2,g#3,b3]@13 ~@3, a#3 ~ e3@11 ~@3", D: "e3 ~ e3@2 d3@2 c#3@2 b2@2 c#3@2 ~@2 b2@2",
  E: "e3 ~ e3@2 d3@2 c#3@2 b2@3 ~ c#3@4",
  F: "[g#2@8 ~@7 e3 e3@2 ~@2 d3 ~ c#3@2 b2 ~ c#3@2 ~@2 e2@2, ~@7 e2@7 ~@2, ~@15 g#3@13 ~@4, ~@4 b3@3 ~, ~@9 e3@5 ~@2]/2",
  G: "~@2 e2@2 g#2 ~ g#2 ~ b2@2 c#3@2 ~@2 b2 ~", H: "e3 ~ e3 ~ d3 ~ c#3 ~ b2@4 c#3@4",
  I: "[g#2@7 ~@9 c#3@3 ~ e3@3 ~ g3@4 ~@2 g3@2, ~@15 [a2,a3]@13 ~@4, ~@4 [c#4,e4]@3 ~]/2", // A C#m
  J: "~@2 g3@2 f#3@2 e3 ~ e3@2 c#3@2 ~@2 g3@2",
  K: "[~@2 g3@2 f#3 ~ e3 ~ e3@3 ~ e3 ~ g#3@4 ~@6 [b2,b3,d#4,f#4]@4 ~@4, ~@9 f#3@5 ~@2]/2", // B
  L: "c#3@4 e3@3 ~ g3@4 ~@2 g3@2, [a2,a3,c#4,e4]@3 ~", M: "[~@2 g3 ~ f#3@2 e3 ~ e3@3 ~ e3 ~ g#3@4 f#3@10 ~@4]/2",
  N: "g3@2 f#3 ~ e3 ~ c#3@2 e3@2 ~@6", O: "g3@2 f#3 ~ e3@2 c#3@2 e3@3 ~@5",
  P: "[g3@2 f#3@2 e3@2 c#3@2 e3@2 ~@2 e3 ~ g#3@4 f#3@2 ~@4 g#3@2 f#3 ~@5]/2", Q: "g3 f#3 e3 c#3 e3 ~@3",
  R: "g3@2 f#3@2 e3@2 c#3@2 e3@3 ~@5", S: "[g3@2 f#3@2 e3@2 c#3@2 e3@3 ~ e3 ~ g#3@4 f#3 ~@5 g#3@2 f#3@2 ~@4]/2",
  T: "g#3@2 f#3@2 ~@4 g#3@3 f#3 ~ f#3@2 ~",
  U: "[[f#3,a3,d4]@12 [g3,g4]@3 ~@2 b3@11 [g3,g4]@3 ~ [e2,e3]@16, d3@14 ~ e2@13 ~@4 e4@13 ~@3, ~@16 [e3,g#3,e4]@12 ~@3 [g#3,b3]@17]/3", // D G E G#m
  V: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 e3 [e3,g#3,b3,e4]@12 [g3,g4]@3 ~ e3@24 ~@8, d2@14 ~ e2@14 ~@2 [g#3,b3]@15 ~@18, ~@32 e4@19 ~@13, ~@16 e2@7 ~@9]/4", // D G E G G#m
  W: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 ~@2 b3@11 [g3,g4]@3 ~ e4@24 ~@8, d2@15 e2@13 ~@4 e3@20 ~@12, ~@16 [e3,g#3,e4]@12 ~@3 [g#3,b3]@17 ~@16, ~@32 e2@15 ~@17]/4", // D G E G#m
  X: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 e3 [e3,g#3,b3,e4]@12 [g3,g4]@3 ~ [e3,e4]@20 ~@12, d2@14 ~ e2@14 ~@2 [g#3,b3]@15 ~@18, ~@16 e2@7 ~@9]/4", // D G E G E G#m
  Y: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 ~@2 b3@11 [g3,g4]@3 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4@5 ~ g4@4 f#4@2 e4@2 c#4@2 e4@7 ~, d2@15 e2@13 ~@4 [e2,e3]@16 ~@16, ~@16 [e3,g#3]@13 ~@2 [g#3,b3]@17 ~@16, ~@16 e4@11 ~@5 e4@18 ~@14]/4", // D G E G#m
  Z: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 e3 e4@11 ~ g3@3 ~ g#4 ~ g#4 ~ g#4 ~ g#4 ~ g#4@5 ~ g#4@4 ~@2 e4@2 c#4@2 e4@7 ~, d2@14 ~ e2@14 ~@3 e3@22 ~@10, ~@16 [e3,g#3,b3]@13 ~@2 [g#3,b3]@15 ~@4 f#4@4 ~@2 d#4 ~@7, ~@27 g4@4 ~ [e2,e4]@15 ~@17]/4", // D G E G#m E
  AA: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 ~@2 b3@11 [g3,g4]@3 ~ e4@2 e4@3 e4@3 e4@3 e4@3 e4@2, d2@15 e2@13 ~@4 [e2,e3]@16, ~@16 [e3,g#3]@13 ~@2 [g#3,b3]@17, ~@16 e4@11 ~@21]/3", // D G E G#m
  AB: "~ e4@2 ~ e4 ~ e4 ~ e4@4 d#4@3 ~",
  AC: "[[d3,f#3,a3,d4]@12 [g3,g4]@3 e3 e4@11 ~ g3@3 ~ a4 ~ a4 ~ a4@2 g#4@3 ~ g#4@3 ~ g#4@4 f#4 ~ e4 ~ c#4 ~ e4@7 ~, d2@14 ~ e2@14 ~@3 e3@22 ~@10, ~@16 [e3,g#3,b3]@13 ~@2 [g#3,b3]@15 ~@18, ~@27 g4@4 ~ [e2,e4]@15 ~@17]/4", // D G E G#m E
})).s("gm_electric_guitar_clean").gain(0.8)

// chords · alto sax
const alto_sax = note(`<
  ~@3 A B C D@2 E C F@2 ~@11 G H ~@3 I@3 J K@3 L ~ M C D@2 E C F@2 ~@11 G H ~@3 I@3 J K@3 L ~@8 A B C D@2 E C N@2 B C
  D@2 E C N@2 B C D@2 E C F@2
>`.pickRestart({
  A: "~@2 [e3,g#3] [d#3,g3]", B: "[d3,f#3]@3 [f#3,b3], ~@12 c4 ~@3", C: "[e3,g#3]@3 [g3,b3]",
  D: "[[e3,g#3]@21 ~@3 [e3,g#3]@4 [d#3,g3]@4]/2", E: "[d3,f#3]@3 [g3,b3]", F: "[e3@5 ~@3, g#3 ~]/2", G: "~@2 b3 a#3",
  H: "a3@9 ~@7",
  I: "[g3@2 f#3@2 e3 ~ c#3 ~ e3 ~@5 g3@4 f#3 ~ e3 ~ c#3 ~ e3 ~@5 g3@4 f#3 ~ e3 ~ c#3 ~ e3@2 ~@2 e3@2 b1@2, e2@5 ~@2 e2@7 ~ e2@8 ~]/3",
  J: "~ b1 ~ b1",
  K: "[g3@2 f#3@2 e3@2 c#3@2 e3@2 ~@8 f#3@2 e3@2 c#3@2 e3@2 ~@8 f#3@2 e3 ~ c#3 ~ e3@2 ~@2 e3 ~@3, e2@9 ~@5 g3@4 ~@12 g3@4 ~@14, ~@4 e2@3 ~ e2@4]/3",
  L: "~@4 b1@5 ~@3 b1@4", M: "~@3 [f#3,b3], ~@12 c4 ~@3", N: "[e3@5 ~ [e3,g#3] [d#3,g3], g#3 ~]/2",
})).s("gm_alto_sax").gain(0.36).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A@35 B ~ A@31 B ~ A@30 C ~>".pickRestart({
  A: "x ~@3 x!2 ~ x", B: "x", C: "x ~@3 x!2 ~@2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!36 [~@4 x ~@8 x!2 ~] [~ x ~ x]!32 [~@4 x ~@8 x!2 ~] [~ x ~ x]!30 [~ x ~@2] ~>")
  .gain(0.8)

// drums · clap
const clap = s("cp").struct("<A@35 B ~ A@31 B ~ A@30 B ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@20 A ~@2 B A ~@3 C D ~ E D@2 ~ E@2 A ~@3 A ~@3 A ~@3 A ~@2 F A ~@2 B A ~@3 C D ~ E D@2 ~ E@2 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x", B: "~@2 x!2", C: "x ~@2 x", D: "~@3 x", E: "~ x ~ x", F: "~@7 x",
})).gain(0.8)

stack(bass, bass_2, distortion_guitar, brass_section, electric_guitar_clean, alto_sax, kick, snare, clap, crash)

More by Gary Glitter