Strudelify

Short Dick Man

20 Fingers

KeyA minorTempo128 bpm
0:00/0:00
// Short Dick Man — 20 Fingers
// 128 bpm, 4/4, key A minor. 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 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · lead 1 square · "SQUAREWAVE"
const bass = note(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A
  B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B C D
>`.pickRestart({
  A: "a1@3 ~@3 a1@2 e1@4 g1@4", B: "a1 ~@2 a1 e1@2 c2@2", C: "c2@4 c2@3 ~ c2@3 ~ c2@3 ~",
  D: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
})).s("gm_lead_1_square").gain(0.37)

// bass · breath noise · "+FLKEYKLIK"
const bass_2 = note(`<
  A B ~ C ~ C A B ~ C A B ~ C A B ~ C A B ~ C ~@16 C ~@7 A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C@2 ~@11 A B ~ C
  A B ~ C ~@10
>`.pickRestart({
  A: "~@12 e1 ~ g1 ~", B: "~@12 e1 ~ g1@2", C: "~@2 g1 ~ c2 ~ d2 ~ e2 ~ f2 ~ g2 ~ a2 ~",
})).s("gm_synth_bass_1").gain(0.55).pan(0.7)

// other · piano · "A.PIANO 1"
const piano = note("<A B C D E@2 ~@94>".pickRestart({
  A: "d6@2 d5@2 a5@2 d5 d6@2 d5 g5@2 a5 ~ [d5,c6] ~", B: "d6@2 d5@2 a5@2 ~ d6@2 d5 g5 ~@5",
  C: "d6@2 ~@2 a5@3 d6@2 d5 g5 ~@5", D: "d6@2 ~@2 a5@2 ~ d6@2 d5 g5@2 ~@4",
  E: "[~@28 d4@3 ~, d5@14 d5@17 ~, ~ d4@5 d4@3 d4@5 ~@2, ~@4 g4@16 g4@11 ~, ~@8 a4@16 a4@7 ~]/2",
})).s("gm_piano").gain(0.19)

// other · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<~ [d5 ~@5 d5 ~@9] [~@2 d5@2 ~@2 d5 ~@9]!2 ~@96>").s("gm_piano").gain(0.12)

// drums · kick
const kick = s("bd").struct("<A@5 B A@15 B A@7 B A@7 B A@15 B ~@8 A@19 C A@15 B ~@2>".pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "x", C: "x ~@11 x!4",
})).gain(0.57)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!78 [~@2 x ~@3 x!2] [x!2 ~ x] [~ x ~ x] ~ [~ x ~ x]!12 ~@6>").gain(0.34)

// drums · hihat
const hihat = s("hh").struct("<A@5 ~ A@15 ~ A@7 ~ A@7 ~ A@15 ~@9 A@16 B C A ~ A@12 ~@6>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@3 x ~@3 x ~ x ~ x", C: "~ x ~ x ~@3 x ~@3 x ~@3 x",
})).gain(0.06)

// drums · open hat
const open_hat = s("oh").struct("<A@5 ~ A@15 ~ A@7 ~ A@7 ~ A@15 ~@9 A@16 B C A ~ A@12 ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x!3", C: "x!2 ~ x ~ x ~ x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@15 A ~ A ~ A ~ A ~@8 A ~@16 A ~ A ~ A ~ A ~@46>".pickRestart({
  A: "x",
})).gain(0.11)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@15 A ~ A ~ A ~ A ~@8 A ~@16 A ~ A ~ A ~ A ~@46>".pickRestart({
  A: "x",
})).gain(1.33)

// drums · bongos
const bongos = s("bongo:4").struct("<~@82 [~@5 x ~ x ~@8]!15 ~@3>").gain(0.6)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@26 A@2 B ~@43 C@2 ~@2 C@2 ~@4 D@15 ~@3>".pickRestart({
  A: "x ~@2 x ~@2 x!2", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "~ x!2 ~@2 x!2 ~",
})).gain(0.6)

// drums · bongos · soft notes
const bongos_soft = s("bongo:18").struct(`<
  ~@14 A ~ A ~ A ~ A ~ B@4 ~@3 A ~@10 B@2 ~@2 B@2 A ~ A ~ A ~ A ~@47
>`.pickRestart({
  A: "~ x!2 ~@5", B: "x ~ x ~ x ~ x!2",
})).gain(0.3)

// drums · congas
const congas = s("conga:13").struct("<~@82 A B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@3>".pickRestart({
  A: "~@2 x ~ x!2 ~@2 x ~@2 x ~@4", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@4",
})).gain(0.91)

// drums · congas
const congas_2 = s("conga:18").struct("<~@26 [~ x ~@2 x ~@3]!2 ~@54 [~@7 x]!15 ~@3>").gain(0.91)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@14 A ~ A ~ A ~ A ~@8 A ~@16 A ~ A ~ A ~ A ~@47>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.36)

// drums · congas
const congas_3 = s("conga:33").struct("<~@26 A@2 B ~@53 C@3 D C@3 D C@3 D C@3 ~@3>".pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~ x ~ x ~ x ~ x", C: "~@13 x ~ x", D: "~@13 x ~@2",
})).gain(0.91)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct("<~@14 A ~ A ~ A ~ A ~@8 A ~@16 A ~ A ~ A ~ A ~@47>".pickRestart({
  A: "~@2 x!2",
})).gain(0.36)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@14 A ~ A ~ A ~ A ~@8 A ~@16 A ~ A ~ A ~ A ~@29 B C@2 D B C@2 D B C@2 D B C@2 ~@3
>`.pickRestart({
  A: "~@2 x!2", B: "x!2 ~@2 x ~@3 x ~@3 x ~@3", C: "x ~@3 x!2 ~@2 x!2 ~@2 x ~@3", D: "~ x ~@2 x!2 ~@2 x ~@3 x!2 ~@2",
})).gain(1.15)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@82 A B@2 C A B@2 C A B@2 C A B@2 ~@3>".pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~@2", B: "~ x ~@11 x ~@2", C: "~@9 x ~@6",
})).gain(0.58)

// drums · shaker
const shaker = s("sh").struct("<~@14 A ~ A ~ A ~ A ~@8 A ~@16 A ~ A ~ A ~ A ~@29 B@15 ~@3>".pickRestart({
  A: "~@3 x", B: "~ x ~ x ~ x ~ x",
})).gain(0.23)

stack(
  bass, bass_2, piano, piano_soft, kick, clap, hihat, open_hat, high_tom, vibraslap, bongos, bongos_2, bongos_soft,
  congas, congas_2, congas_soft, congas_3, congas_soft_2, cabasa, cabasa_soft, shaker
)

More by 20 Fingers