Strudelify

How Do You Do It

Gerry & The Pacemakers

KeyF majorTempo130 bpm
0:00/0:00
// How Do You Do It — Gerry & The Pacemakers
// 130 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 68 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): Elec Guita.
setcpm(130/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"
const bass = note(`<
  A B C D E F G H E D C B A B G I B E B J B E K L K M A B E N A B G O A D E F P N Q R A F E B P D Q O N A B S B A K T U
  V A N C N A B Q I
>`.pickRestart({
  A: "f1@2 ~ f1 d2@2 ~ d2", B: "g1@2 ~ g1 c2@2 ~ c2", C: "f1@4 ~@2 f1 ~ d2@4 ~@2 d2@2",
  D: "g1@4 ~@2 g1 ~ c2@4 ~@2 c2 ~", E: "f1@4 ~@2 f1@2 d2@4 ~@2 d2 ~", F: "g1@4 ~@2 g1@2 c2@4 ~@2 c2 ~",
  G: "f1@2 ~ f1 bb1@2 ~ bb1", H: "f2@3 ~ eb2@3 ~ e2@4 ~@2 e2@2", I: "f1@4 ~@2 f1@2 f1@4 ~@2 f1 ~",
  J: "f1@2 ~ f1 c2@2 ~ c2", K: "g1@2 ~ g1 d2@2 ~ d2", L: "g1@4 ~@2 g1 ~ d1@3 ~ e1@3 ~", M: "c2@2 ~ c2 g1@2 ~ g1",
  N: "g1@4 ~@2 g1 ~ c2@4 ~@2 c2@2", O: "f1@4 ~@2 f1 ~ f1@4 ~@2 f1@2", P: "f1@4 ~@2 f1 ~ d2@4 ~@2 d2 ~",
  Q: "f1@4 ~@2 f1@2 bb1@4 ~@2 bb1 ~", R: "f2@3 ~ eb2@3 ~ e2@4 ~@2 e2 ~", S: "f1@2 ~ f1 f1@2 ~ f1",
  T: "g1@4 ~@2 g1@2 d1@3 ~ e1@3 ~", U: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1@2", V: "c2@2 ~ c2 c2@2 ~ c2",
})).s("gm_electric_bass_finger").gain(0.32).pan(0.4)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A B C B D B E F A B C G C B H I J K L I M N O P Q R C L C S C G T U V B C W C G H F C B A B C X H Y Z K B Y X A AA AB
  AC AD C AE C AF C AG AH AI
>`.pickRestart({
  A: "[a3,c4,f4]@7 ~ d3 ~ [c4,d4,f4,a4]@5 ~", B: "[bb3,d4,f4,g4]@7 ~ [bb3,c4,e4,g4]@7 ~",
  C: "[a3,c4,f4]@7 ~ [c4,d4,f4,a4]@7 ~", D: "~@2 [a3,c4,f4]@5 ~ [c4,d4,f4,a4]@7 ~",
  E: "f3 ~ [a3,c4,f4]@5 ~ [bb3,d4,f4]@7 ~", F: "[a3,c4,f4]@3 ~ [g3,bb3,eb4]@3 ~ [ab3,b3,e4]@7 ~",
  G: "g3 ~ [bb3,d4,f4,g4]@5 ~ [bb3,c4,e4,g4]@7 ~", H: "[a3,c4,f4]@7 ~ [bb3,d4,f4]@7 ~",
  I: "[a3,c4,f4]@8 ~@4 [a3,c4,f4]@3 ~", J: "[bb3,d4,f4,g4]@7 ~ [g3,c4,e4]@7 ~",
  K: "[c4,eb4,f4,a4]@7 ~ [c4,d4,f4,a4]@7 ~", L: "[bb3,d4,f4,g4]@7 ~ c3 ~ [bb3,c4,e4,g4]@5 ~",
  M: "g3 ~ [f4,g4,bb4,d5]@5 ~ [bb3,c4,e4,g4]@7 ~", N: "f3 ~ [a3,c4,f4]@5 ~ [c4,d4,f4,a4]@7 ~", O: "[b3,d4,f4,g4] ~",
  P: "[b3,d4,f4,g4] [b3,d4,f4,g4]@2 [b3,d4,f4,g4]@5", Q: "~@2 [b3,d4,f4,g4]@3 ~@3 [b3,d4,f4,g4]@7 ~",
  R: "[bb3,c4,e4,g4]", S: "[bb3,d4,f4,g4]@7 ~@3 [bb3,c4,e4,g4]@5 ~", T: "[a3,c4,f4]@7 ~ bb2 ~ [bb3,d4,f4]@5 ~",
  U: "[a3,c4,f4]@8 ~@2 f3 ~ [a3,c4,f4]@3 ~", V: "[a3,c4,f4]@7 ~@3 [c4,d4,f4,a4]@5 ~",
  W: "g3 ~ [bb3,d4,f4,g4]@5 ~@3 [bb3,c4,e4,g4]@5 ~", X: "[f4,g4,bb4,d5]@7 ~ [bb3,c4,e4,g4]@7 ~", Y: "[a3,c4,f4]",
  Z: "[f4,g4,bb4,d5]@7 ~ [g3,c4,e4]@7 ~", AA: "[b3,d4,f4,g4]", AB: "g3 ~ [b3,d4,f4,g4]@3 ~ g3 ~@3 [b3,d4,f4,g4]@3 ~@3",
  AC: "g3 ~ [b3,d4,f4,g4]@3 ~@3 [b3,d4,f4,g4]@7 ~", AD: "c3 ~ [bb3,c4,e4,g4]@3 ~@3 [bb3,c4,e4,g4]@7 ~",
  AE: "~@2 [bb3,d4,f4,g4]@5 ~ [bb3,c4,e4,g4]@7 ~", AF: "~@2 [d4,f4,g4,bb4]@5 ~ [bb3,c4,e4,g4]@7 ~",
  AG: "[f4,g4,bb4,d5]@7 ~@3 [bb3,c4,e4,g4]@5 ~", AH: "~@2 [a3,c4,f4]@5 ~ [bb3,d4,f4]@7 ~",
  AI: "[a3,c4,f4]@8 ~@2 [a3,c4,f4]@3 ~ f3 ~", // F
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.3)

// other · acoustic guitar steel · "Lead"
const acoustic_guitar_steel_2 = note("<A B C D E F G ~ H I C J@3 G ~@53>".pickRestart({
  A: "c4@7 c5@6 ~ a4@2", B: "bb4@2 ~ bb4@2 ~@2 bb4@3 a4@2 g4@2 ~@2, ~@3 c5 ~@4", C: "~ a4 c5 a4",
  D: "g4@11 ~ c5@2 a4@2", E: "a4@4 c5@3 f4@4 g4@3 a4@2", F: "g4@3 ~ g4@2 f4@2 e4@2 f4@3 g4@3", G: "f4 ~@3",
  H: "c4@7 ~ c5@6 a4@2", I: "bb4@2 ~ bb4@2 ~@2 bb4@2 a4@3 g4@3 ~, ~@3 c5 ~@4",
  J: "[g4@12 ~@4 a4@2 ~@2 c5@4 ~@5 a4@3 g4@4 ~@4 e4@2 ~@3 g4@3, ~@12 c5@8 ~@8 g4@2 ~@6 g4@9 ~@3, ~@7 bb4@2 ~@3 f4@7 f4@2 f4@3]/3",
})).s("gm_acoustic_guitar_steel").gain(0.39).pan(0.7)

// chords · string ensemble 1 · "Lead"
const string_ensemble_1 = note("<~@16 A@2 B C D E F G ~@44>".pickRestart({
  A: "[~@10 bb4@2 ~@4 a4@4 ~@8 c4 ~ c4@2, ~ g4 ~ c5 ~@4, ~@3 a4@5 ~@8, ~@7 bb4@2 ~@7]/2", B: "d4 ~ c4@5 ~@5 c4 ~ c4@2",
  C: "d4 ~ c4@7 ~@5 g4@2", D: "g4@4 ~@2 bb4@2 bb4@4 ~ bb4@3, ~ a4@3, ~@3 c5", E: "a4 ~@2 c5",
  F: "[c5,d5]@4 d5@2 ~@2 d5@3 d5@2 ~@3", G: "e5@2 ~@2 d5@2 ~@2 c5@4 d5@3 ~, ~ c5@3 ~@4, ~@3 a4@2 ~@3",
})).s("gm_string_ensemble_1").gain(0.39).pan(0.7)

// chords · slap bass 2 · "Lead"
const slap_bass_2 = note("<~@26 A@3 B@2 C D ~ E@3 F@4 ~ G@3 H@4 ~@19>".pickRestart({
  A: "[c4@7 ~@9 bb4@3 ~@8 g4@4 ~@3 a4@2 ~@4 c5@4 a4@4, ~@7 c5@14 c5@4 ~@23, ~@14 a4@11 a4@9 ~@2 a4@8 ~@4, ~@19 bb4@4 bb4@4 ~@21]/3",
  B: "[g4@2 ~@9 f4@2 ~ a4@2, ~@3 c5@2 c5 ~@2, ~@7 bb4@2 ~@7, ~@15 a4@12 ~@5]/2",
  C: "g4@4 ~@4 e4@2 ~@3 g4@3, ~@4 g4@9 ~@3, ~@3 f4@2 f4@3", D: "f4 ~@3",
  E: "[c4@8 ~@7 bb4@4 ~@9 g4@4 ~@8 c5@4 a4@4, ~@2 c5@3 bb4!2 ~@5, ~@14 a4@11 a4@11 a4@8 ~@4, ~@11 c5@2 ~@11]/3",
  F: "[g4@4 ~@16 c5@4 ~@8 g4@4 ~@4 e4@2 f4@3 ~@2 f4@4 ~@13, ~@12 c5@8 ~@8 g4@4 ~@4 g4@9 g4@4 ~@15, ~@7 bb4@2 ~@3 f4@7 f4@2 ~@11, ~@8 a4@7 a4@2 ~@15]/4",
  G: "[c4@2 ~@2 bb4 ~@2 g4 ~@2 c5 a4, ~@4 c5@7 c5@2 ~@11, ~@7 a4@6 a4@5 a4@4 ~@2, ~@5 bb4!2 ~@5]/3",
  H: "[g4@2 ~@12 g4 ~ g4@2 ~@2 e4 ~@3 f4@2 ~@6, ~@6 c5@5 c5@2 ~@19, ~@7 bb4@3 bb4@2 f4@7 f4@2 f4@3 ~@8, ~@8 a4@7 a4@2 ~ g4@5 g4@2 ~@7]/4",
})).s("gm_slap_bass_2").gain(0.39).pan(0.7)

// chords · tremolo strings · "Lead"
const tremolo_strings = note("<~@50 A@2 B C@4 D ~@2 E@2 F@5 G>".pickRestart({
  A: "[g4@4 ~@12 a4@4 ~@8 c4 ~ c4@2, ~@2 g4@2 bb4@3 bb4@2 ~@7, ~@6 a4@9 ~@17, ~@3 c5 ~@4]/2",
  B: "d4 ~ c4@5 ~@5 c4 ~ c4@2",
  C: "[d4@2 c4@4 ~@8 g4@4 ~@4 bb4@2 ~@8 a4@4 ~@12 d5@3 ~ d5@3 ~ d5@3 ~ d5@4, ~@5 a4@3 ~@8, ~@12 bb4@3 bb4@2 ~@15, ~@14 c5@2 ~@7 c5@2 ~@7]/4",
  D: "e5 ~ d5 b4 c5@2 d5@2, ~ c5@3 ~@4, ~@3 a4@2 ~@3",
  E: "[c4@2 ~@2 bb4 ~@2 g4, ~@8 c5@12 bb4@3 bb4@4 ~@5, ~@14 a4@11 a4@7, ~@21 c5@4 ~@7]/2",
  F: "[~@2 a4@2 a4@4 c5@4 ~@2 g4@4 ~@18 c5@4 ~@4 a4@4 g4@4 ~@4 e4@2 ~@11 g4@3 [bb3,d4]@5 ~@3, ~@27 c5@8 ~@45, ~@29 bb4@4 ~@7 f4@14 f4@4 f4@6 f4@16, ~@31 a4@12 ~@9 g4@10 g4@7 ~@11]/5", // Bb
  G: "[a3,c4,f4]@7 [a3,c4,f4] ~@8", // F
})).s("gm_tremolo_strings").gain(0.39).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A@13 B A@3 B A B A B A B A@8 B A@14 B A@3 B A B A B A B A@8 B A>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!3 ~ x",
})).gain(0.23)

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A C A C A C A@3 C A@9 C A B A B D A@2 C A C A B A D A D A B A C A@3 C A@9 C A B A B D A@2 C
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~ x ~", C: "~@3 x!2 ~@11", D: "~@4 x ~@3 x!4 ~@4",
})).gain(0.27)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~ A ~ A ~ B ~ B ~ B ~@3 B ~@9 B ~ A ~ A ~@3 B ~ B ~ A ~@5 A ~ B ~@3 B ~@9 B ~ A ~ A ~@3 B
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6",
})).gain(0.18)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~ A ~ A ~@3 A ~@3 B ~@3 B ~ A ~@7 A ~ A ~@9 A ~@3 A ~@3 C ~@5 A ~@7 A
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@3 x ~@2", C: "~@5 x ~@2",
})).gain(0.32)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~ A ~ A ~@3 A ~@9 A ~@4 B ~@2 A ~ A ~@3 B ~ B ~@3 A ~@3 A ~@9 A ~@4 B ~@2 A
>`.pickRestart({
  A: "~@3 x ~ x!2 ~", B: "~@12 x!4",
})).gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A ~@2 A ~@2 A ~@22 A ~@15 A ~ A ~@4 A ~@6>".pickRestart({
  A: "~@7 x",
})).gain(0.23)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~ A ~ A ~@3 A ~@9 A ~@7 A ~ A ~@9 A ~@3 A ~@9 A ~@7 A>".pickRestart({
  A: "~ x",
})).gain(0.27)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A ~ B ~ A ~ A ~ B ~@3 A ~@9 B ~ A ~@2 A ~@2 A ~ A ~ B ~ A ~ A ~ B ~ A ~@3 B ~@9 A ~ A ~@2 A ~@2
>`.pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.27)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, string_ensemble_1, slap_bass_2, tremolo_strings, kick, snare,
  snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, crash
)

More by Gerry & The Pacemakers