Strudelify
Put Your Hand In The Hand cover art

1971 · Put Your Hand in the Hand

Put Your Hand In The Hand

Ocean

KeyE majorTempo130 bpm
0:00/0:00
// Put Your Hand In The Hand — Ocean
// 130 bpm, 4/4, key E major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 5) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 6 "Piano" piano (copy of ch 5 "Guitar" shamisen)
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
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.

// chords · epiano1 · "Rhodes Piano"
const epiano1 = note(`<
  A B C D E@2 F G H I C D J K L@5 M N@8 O@7 M P@7 M J Q R S T U@2 D E@2 F G H V C D W X Y Z AA AB C D E@2 F G H I C D J
  AC R S T AD@2 D AA AB AE AF
>`.pickRestart({
  A: "~ [d4,g4] ~@2", B: "~ c#4 ~@2", C: "~@2 b3@2 d4 c4@3", D: "b3 ~", E: "~ [b3,d4] ~ [b3,d4]",
  F: "~ [c4,d4] ~ [c4,d4]", G: "~ [c4,d4] ~@2", H: "~ [c4,e4] ~ [c4,e4]", I: "~ [d4,f#4] ~@2",
  J: "[f4,d5] [f4,d5]@3 [f4,d5]@2 [f4,d5]@2", K: "[f4,d5] d5@3 [g4,e5] [f4,d5]@3, ~ f4@4 ~@3",
  L: "[d5@2 [e4,c5]@14 ~@4 a#3@3 ~@13 [d4,g4]@3 ~@5 [d4,g4]@3 ~@5 c#4@3 ~ [d4,f#4]@2 [c4,a4]@3 ~@7 b3@4 c4@2 c4@6, f4@4 f4, ~@31 [b3,d4]@3 ~@6]/5", // C G5 D F Bm
  M: "f4, b3 ~",
  N: "[~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [c4,d4]@2 ~@2 [c4,d4]@2 ~@2 [c4,d4]@2 ~@6 [c4,e4]@2 ~@2 [c4,e4]@2 ~@2 c4 d4@5 ~@2 b3@2 d4 c4@3 b3@4 ~@4, f4]/8", // Bm Csus2 C
  O: "[~@2 f4@4 f4@3 f4@5 g4@2 ~@2 [e4,g4]@2 ~@2 e4@2 ~@2 [a#3,e4]@2 ~@2 [a#3,e4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 c#4@2 [d4,a#4] [c4,a4]@3 ~@2 b3@2 d4 c4@3, ~@2 a4@2 ~@2 a4@2 ~ g4@4 ~ f4@42]/7", // Em A#dim G5 Gm F
  P: "[~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [c4,d4]@2 ~@2 [c4,d4]@2 ~@2 [c4,d4]@2 ~@6 [c4,e4]@2 ~@2 [c4,e4]@2 ~@2 [d4,f#4]@2 ~@6 b3@2 d4 c4@3, f4]/7", // Bm Csus2 C D
  Q: "d5 d5@3 [g4,e5] d5@3, f4", R: "[f4,d5] [e4,c5]@7", S: "~@4 a#3@3 ~@9", T: "~@4 [d4,g4]@3 ~@5 [d4,g4]@3 ~",
  U: "[~@4 c#4@3 ~ [d4,f#4]@2 [c4,a4]@3 ~ [b3,d4]@6 b3@4 c4@2 c4@6]/2", V: "~@2 c4 d4@5", W: "~ [f4,a4] ~ [f4,a4]",
  X: "~ [f4,g4]@4 ~ [f4,g4]@2", Y: "~ [e4,g4] ~ e4", Z: "~ [a#3,e4] ~ [a#3,e4]", AA: "~ [d4,g4] ~ [d4,g4]",
  AB: "~@2 c#4@2 [d4,a#4] [c4,a4]@3", AC: "d5 d5@3 [g4,e5] [f4,d5]@3, f4 ~",
  AD: "[~@4 c#4@3 ~ [d4,f#4]@2 [c4,a4]@3 ~ d4@2 d4@4 b3@4 c4@2 c4@6, ~@7 b3@3 ~@6]/2", AE: "~@2 b3@2 c4 c4@3",
  AF: "b3 [g4,b4,d5,g5]", // G
})).s("gm_epiano1").gain(0.16)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B C D E F G@2 H I C J I K L M N G O J F P Q G H I R J I K S T N G C D P F G@2 H I C J I K L M N G O J F P Q G H I R
  J I K S T N G C D P F G@2 H I C J I K L M N G O U A V O W
>`.pickRestart({
  A: "d2 e2", B: "a2 d2", C: "~@2 d3@2 f3 e3@3, g2", D: "[g2,d3]@2 d3 e3", E: "g2@3 ~ d2@3 ~", F: "g2@7 ~ d3@7 ~",
  G: "a2@7 ~ d2@7 ~", H: "a2@7 ~ e2@7 ~", I: "d2@7 ~ d3@7 ~", J: "d3 d2 d3@2", K: "g2@7 ~ g2@7 ~", L: "c3@7 ~ c2@7 ~",
  M: "c#2@3 ~ c#3@7 ~ c#2@3 ~", N: "d2@7 ~ e2@7 ~", O: "~@2 d3@2 e3 e3@3, g2", P: "g2@7 ~ d2@7 ~", Q: "a2@7 ~ d3@7 ~",
  R: "g2", S: "c2@7 ~ c3@7 ~", T: "c#3@7 ~ f2@7 ~", U: "[g2,d3]@4 d2@4 d3@7 ~", V: "a2@8 d2@7 ~", W: "d3 d2 g1@2",
})).s("gm_acoustic_bass").gain(0.72)

// other · epiano1 · "Rhodes Piano"
const epiano1_2 = note("<A B C@2 ~@84>".pickRestart({
  A: "b4@2 b4 a4 g4@2 g4 e4", B: "a4@2 a4 g4 [d4,a#4] [c4,a4]@3", C: "[g4@3 ~]/2",
})).s("gm_epiano1").gain(0.72)

// chords · shamisen · "Guitar"
const shamisen = note(`<
  ~@4 A@2 B@2 C B D E F G H I J K L M A@2 B@2 C B L A N O H I J K L P A@2 B@2 C B D E F G H I J K L M A@2 B@2 C B L A N
  O H I J K L P A@2 B@2 C B D E F G H I J K L M Q K L R
>`.pickRestart({
  A: "[g3,b3,d4] [g3,b3]!3 [g3,b3,d4] [g3,b3]!3", B: "[a3,c4,d4] [a3,c4]!3 [a3,c4,d4] [a3,c4]!3",
  C: "[a3,c4,e4] [a3,c4]!3 [a3,c4,e4] [a3,c4]!3", D: "[g3,b3,d4] [g3,b3]!3 [g3,b3,d4] [c4,e4,g4]@3",
  E: "[g3,b3,d4]@4 [g3,b3,d4] [g3,b3] [g3,b3,d4] [g3,b3]", F: "[a3,d4,f#4] [a3,d4]!3 [a3,d4,f#4] [a3,d4]!3",
  G: "[b3,d4,f#4] [b3,d4]!3 [b3,d4,f#4] [b3,d4]!3", H: "[c4,e4,g4] [c4,e4]!3 [c4,e4,g4] [c4,e4]!3",
  I: "[g3,a#3,c#4] [g3,a#3]!3 [g3,a#3,c#4] [g3,a#3]!3", J: "[g3,b3,d4] [g3,b3]!3 [g3,b3,e4] [g3,b3] [g3,b3,e4] [g3,b3]",
  K: "[c4,e4,g4] [c4,e4]!3 [a3,c4,d4] [a3,c4]@3", L: "[g3,b3]@2 [g3,b3]!2 [c4,e4,g4] [c4,e4]@3, d4 ~@7",
  M: "[g3,b3]@2 [g3,b3]!2 [g3,b3]@2 [g3,b3]!2, d4 ~@3 d4 ~@3", N: "[c4,d4,f#4] [c4,d4]!3 [c4,d4,f#4] [c4,d4]!3",
  O: "[d4,f4,g4] [d4,f4]!3 [d4,f4,g4] [d4,f4]!3", P: "[g3,b3]@4 [g3,b3]@2 [g3,b3]!2, d4 ~@3 d4 ~@3",
  Q: "[g3,b3]@2 [g3,b3]!2 [g3,b3,e4] [g3,b3] [g3,b3,e4] [g3,b3], d4 ~@7", // G Em G Em G
  R: "[g3,b3]@2 [g3,b3]!2 [g3,b3]@4, d4 ~@3 d4 ~@3", // G
})).s("gm_shamisen").gain(0.08)

// drums · kick
const kick = s("bd").struct("<~@4 A@14 B A@15 B@2 A@14 B A@16 B A@14 B@2 A@3 C>".pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x ~@2 x!2 ~@3",
})).gain(0.62)

// drums · rim
const rim = s("rim").struct("<~@20 [~ x ~ x]!15 [~ x ~@2] ~@16 [~ x ~ x]!15 [~ x ~@2] ~@20>").gain(0.62)

// drums · snare
const snare = s("sd").struct("<~@4 A@15 B ~@16 A@15 B ~@16 A@15 C A@3 B>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@2 x ~@3 x!2",
})).gain(0.55)

// drums · hihat
const hihat = s("hh").struct("<~@3 A B@15 C B@15 D B@15 C B@15 D B@19 C>".pickRestart({
  A: "~@5 x ~@2", B: "x!8", C: "x!5 ~@3", D: "x!6 ~@2",
})).gain(0.69)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@3 x] ~@31 [~@7 x] ~@31 [~@7 x] ~@20>").gain(0.69)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@6 x!2] ~@31 [~@6 x!2] ~@31 [~@6 x!2] ~@20>").gain(0.69)

// drums · china
const china = s("cr").struct("<~@3 [~@6 x!2] ~@31 [~@6 x!2] ~@31 [~@6 x!2] ~@20>").gain(0.62)

// drums · ride
const ride = s("rd").struct("<~@4 A ~@14 A ~@15 A@2 ~@14 A ~@16 A ~@15 A ~@3>".pickRestart({
  A: "x",
})).gain(0.69)

stack(epiano1, bass, epiano1_2, shamisen, kick, rim, snare, hihat, low_tom, mid_tom, china, ride)