Strudelify
Shake Hands cover art

Shake Hands

Drafi Deutscher

KeyA majorTempo100 bpm
0:00/0:00
// Shake Hands — Drafi Deutscher
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "Gesang/P"
const piano = note(`<
  ~@3 A B C B D E C B F G H G I G J K L B C B D E C B F ~@4 G H G I G J K L B C B D E C B F@3
>`.pickRestart({
  A: "~@14 [a5,c#6] ~", B: "[a5,c#6] ~@5 [a5,c#6] ~ [a5,d6]@2 ~@4 [a5,d6] ~",
  C: "[a5,c#6] ~ [a5,c#6] ~ [a5,c#6] ~ [a5,c#6] ~ [a5,c#6]@3 [g#5,b5] ~@2 b5@2, ~@14 g#5 ~", // A G#m
  D: "c#6@2 a5 ~ a5@2 f#5@2 a5@2 ~@4 [a5,c#6]@2", E: "a5 ~@2 [a5,c#6] [a5,d6] ~@2 [a5,d6], c#6 ~@15",
  F: "c#6@2 a5 ~ a5@2 f#5 ~ a5@4 ~@4, ~@8 f#5 ~@7", G: "~@2 e4@2 a4@2 c#5@2 e5@2 f#5 e5@3 c#5@2",
  H: "b4@2 a4@2 f#4@2 a4@2 c#5@3 b4@2 ~@3", I: "b4@2 a4 ~ f#4@2 a4@2 b4@3 ~@5",
  J: "b4@2 a4@2 f#4@2 a4@2 c#5@3 b4@3 ~@2", K: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 a4@2 ~ a4 ~",
  L: "a4@2 f#4@2 f#4@2 g#4@2 a4@2 ~@4 [a5,c#6] ~", // A
})).s("gm_piano").gain(0.8)

// chords · electric guitar clean · "Lead-Gui"
const electric_guitar_clean = note(`<
  ~@3 A B ~ B ~ B ~ B ~ C D E F E F G H B ~ B ~ B ~ B ~@5 C D E F E F G H B ~ B ~ B ~ B ~@3
>`.pickRestart({
  A: "[e5,a5]!16", B: "~@2 [d#5,g#5,c6] [e5,a5,c#6] ~@6 [f5,g#5,c#6] [f#5,a5,d6] ~@4", C: "[e5,a5] ~@3 [e5,g#5] ~@3",
  D: "[d5,f#5]@3 ~@5 [e5,g#5]!8", E: "[e5,a5] ~@7 [e5,g#5]@2 ~@6", F: "[d5,f#5]@2 ~@6 [b4,e5]!8",
  G: "[d5,f#5] ~@3 [d5,f#5] ~@3 [e5,a5] ~@3 [e5,a5] ~@3", H: "[d5,f#5] ~@3 [d5,f#5] ~@3 [e5,a5] [b4,e5]!7",
})).s("gm_electric_guitar_clean").gain(0.43).pan(0.6)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B A C D E F C D C G H I H I H I J K C D E F C D C G C D C G H I H I H I J K C D E F C D C L@2 G
>`.pickRestart({
  A: "a1@3 c#2@3 e2@2 a1@3 c#2@3 e2@2", B: "a1@3 c#2@3 e2@2 a1@3 c#2@3 e2 ~", C: "a1@3 c#2@3 e2@2 d2@3 f#2@3 a2 ~",
  D: "a1@3 c#2@2 ~ e2 ~ e2@3 g#2@3 b2 ~", E: "a1@3 c#2@3 e2 ~ d2@3 f#2@3 a2 ~", F: "a1@3 d2@2 ~ f#2@2 a1@2 ~@6",
  G: "a1@3 d2@2 ~ f#2@2 a1@4 ~@4", H: "a1 ~@7 c#2@2 ~@6", I: "d2@2 ~@6 e2!8", J: "d2 ~@3 d2 ~@3 a1@2 ~@2 a1@2 ~@2",
  K: "d2@2 ~@2 d2 ~@3 a1 e2!7", L: "a1@3 d2@2 ~ f#2@2 a1@3 c#2@2 ~ e2@2",
})).s("gm_acoustic_bass").gain(0.56).pan(0.4)

// chords · electric guitar muted · "Rhythm-G"
const electric_guitar_muted = note(`<
  A B C B D E D F G E D H I J I J I J K L D E D F G E D H G E D H I J I J I J K L D E D F G E D M@2 N
>`.pickRestart({
  A: "~@15 c#3, ~@13 a3@2 ~, ~@7 e3", B: "~@3 c#3@3 ~ g#2 a2@3 e3@3 ~ g#2, a2@3 a3 ~@3 a3",
  C: "a2@3 e3@3 ~ g#2 a2@3 e3@2 ~@2 c#3, ~@6 a3@2 ~@5 a3@2 ~, ~@7 e3",
  D: "[a2,e3,a3] ~ [a2,e3,a3]!6 [d3,a3,d4] ~ [d3,a3,d4]!6", E: "[a2,e3,a3] ~ [a2,e3,a3]!6 [e2,b2,e3] ~ [e2,b2,e3]!6",
  F: "[a2,e3,a3] ~ [a2,e3,a3]!2 [e2,b2,e3]!4 [a2,e3,a3] ~ [e2,b2,e3]!6", // A5 E5 A5 E5
  G: "[a2,e3,a3]@2 [a2,e3,a3]!6 [d3,a3,d4] ~ [d3,a3,d4]!6", // A5 D5
  H: "[a2,e3,a3] ~ [a2,e3,a3]!2 [e2,b2,e3]!4 [a2,e3,a3] [e2,b2,e3]!7", I: "[a2,e3] ~@7 [c#3,g#3]@2 ~@6",
  J: "[d3,a3]@2 ~@6 [e3,b3]!8", K: "[d3,a3] ~@3 [d3,a3]@2 ~@2 [a2,e3] ~@3 [a2,e3]@2 ~@2",
  L: "[d3,a3]@2 ~@2 [d3,a3]@2 ~@2 [a2,e3] [e3,b3]!7", // D5 A5 E5
  M: "[a2,e3,a3] ~ [a2,e3,a3]!2 [e2,b2,e3]!4 [a2,e3,a3] ~ [a2,e3,a3]!6", // A5 E5 A5
  N: "[a2,e3,a3] ~ [a2,e3,a3]!2 [e2,b2,e3]!4 [a2,e3,a3] ~@7", // A5 E5 A5
})).s("gm_electric_guitar_muted").gain(0.27)

// chords · drawbar organ · "Orgel"
const drawbar_organ = note("<~@12 A B A B A B C D ~@8 E F E G A B A B A B C D ~@10>".pickRestart({
  A: "[c#5,e5,a5]@8 [c#5,e5,g#5]@7 ~", B: "[a4,d5,f#5]@8 [b4,e5,g#5]@7 ~",
  C: "[a4,d5] ~@3 [a4,d5,f#5]@2 ~@2 [c#5,e5,a5]@2 ~@2 [c#5,e5] ~@3, f#5 ~@5 a5 ~", // D5 D A C#m
  D: "[d5,f#5,a5] ~@3 [d5,f#5,a5] ~@3 [c#5,a5]@2 ~@6, ~@8 e5 ~@7", E: "e5@5 e5!2 f#5 a5@2 a5@2 g#5 a5@2 ~",
  F: "a5@2 a5@2 a5 a5@2 ~ g#5 ~ g#5 a5 g#5 e5@2 ~", G: "[c#5,e5] ~ [c#5,e5]!2 [d5,f#5] [d5,f#5]@2 ~ [e5,a5]@2 ~@6",
})).s("gm_drawbar_organ").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!17 [x!4]!2 [x!2]!18 [x!4]!2 [x!2]!10>").gain(0.45)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x ~ x ~ x]!11 ~@8 [~ x ~ x ~ x ~ x]!12 ~@8 [~ x ~ x ~ x ~ x]!9 [~ x ~ x!2 ~@3]>")
  .gain(0.39)

// drums · snare
const snare = s("sd").struct("<~ A@10 B C D C D C D E F A@7 B A@3 B C D C D C D E F A@9 G>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x!7", C: "x!2", D: "x ~@7 x!8", E: "x!4", F: "x ~@3 x ~@3 x!8", G: "~ x!2 ~",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~ [x!16]!11 ~@8 [x!16]!12 ~@8 [x!16]!9 [x!9 ~@7]>").gain(0.39)

stack(piano, electric_guitar_clean, bass, electric_guitar_muted, drawbar_organ, kick, clap, snare, hihat)

More by Drafi Deutscher