Strudelify

New Hit

UZEB

KeyG majorTempo113 bpm
0:00/0:00
// New Hit — UZEB
// 113 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 32 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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 · "FINGERDBAS"
const bass = note("<A@2 B C@2 D B C@2 D E@3 F G H@2 F I@3 J@2 K@2 L M N@2 F O ~>".pickRestart({
  A: "[a#1 g1 ~@4 c1 d1@3 e1@2 c1@2 f1@2]/2", B: "g1 g2 f2 d2 e2@3 d2@2 g1 b1 g1 c2@4",
  C: "[f1@4 g1@3 c2@2 b1 a#1@2 g1@3 g1@2 g2 f2 d2 e2@3 d2@2 g1 b1 g1 c2@4]/2", D: "d1 e1 c1 f1",
  E: "[g1 g2 f2 d2 e2@3 d2@2 g1 b1 g1 c2@2 d1@14 e2 d2 g2 c2@5 c#2@4 d2@4 b1@4]/3", F: "c2 a#1 a1 d#2",
  G: "d2@4 f1@4 f#1@2 g1@3 a#1 a1 g1", H: "[e2 g1 e1@5 d1@5 e2 d2 g2 c2@5 c#2@4 d2@4 b1@4]/2",
  I: "[d2@4 f1@4 f#1@2 g1@5 b1@16 c2@17]/3", J: "[f#1@12 ~@2 g1@15 d2 a2 a#2]/2",
  K: "[g2 d2 c2 a#1 a1 c2 c#2 a2@2 g2 a2@2 d2 a#2@2 f2@2 f#2@2 d#2 c3 a2 ~ a#2 ~ a#1 ~ b1 ~ g2 ~ f2]/2",
  L: "d3@2 b2 c3 ~ g2 f2 e2@9", M: "b2@2 d2@2 c#2 a2@2 g2 f#2@4 d#3 d3 ~ c3",
  N: "[b2@2 g2@6 ~@4 e2 d2 g2 e2@2 ~@3 c#2@4 d2@4 b1@4]/2", O: "d2@4 f1@4 f#1@2 g1@3 ~@3",
})).s("gm_electric_bass_finger").gain(0.29)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@2 A B C D E F A G H@3 I J K@2 L M@5 N O P Q R@2 S T ~>".pickRestart({
  A: "~@2 [a3,c4,g4] ~@2 [b3,g4] ~ [b3,d4,g4] [c4,e4] ~@7, ~@5 d4@2 ~@9", // Am7 Em G C
  B: "[a#3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [g3,c4,f4]@4", // A#sus2 F Csus4
  C: "~@2 [a3,c4,g4] ~@2 [b3,d4,g4] ~ [b3,d4] [c4,e4] ~@7, ~@7 g4@2 ~@7", // Am7 G Bm C
  D: "[d4,g4,b4]@2 ~@2 [c4,f4,a4]@2 ~@3 [e4,g4] b3 ~ [a#3,d#4,g4]@3 ~", // G F Em D#
  E: "~@2 [a3,c4,g4] b3 ~ [b3,g4] ~ [b3,d4,g4] [c4,e4] ~@7, ~@5 d4@2 ~@9", // Am7 Em G C
  F: "[a#3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@4 [g3,c4,f4]@4", // A#sus2 F Csus4
  G: "[d4,g4,b4] ~@3 [c4,f4,a4] ~@4 [b3,e4,g4] ~@2 [a#3,d#4,g4]@3 ~", // G F Em D#
  H: "[~@2 [a3,c4,g4] ~@2 [b3,g4] d4 [b3,d4,g4] [c4,e4] ~@5 [a#3,c4,f4]@11 ~@3 e4 d4 g4 e4@2 g4 f4 ~ a4 d4 ~ a#4 d#4 g3 a#3 b3@2 d4 c4@2]/3", // Am7 Em G C A#sus2
  I: "~ a#3 ~ a#3 ~ c4 ~ a4 ~ c#4 ~ a#4 ~ c5 a4 ~, g4 ~@7", J: "d4 b4 ~ d#4 ~ c5 ~ d5 b4!2 a4 ~@2 a#4 a4 g4",
  K: "[~@2 e4@5 d4@4 ~ e4 ~ g4 e4@2 g4 f4 ~ a4 d4 ~ a#4 d#4 g3 a#3 b3@2 d4 c4 ~, b4 ~@15, ~ g4@2 ~@10 d4@2 ~@17]/2",
  L: "g4 a#3 ~ a#3 ~ c4 ~ a4 ~ c#4 ~ a#4 ~ c5 a4 ~",
  M: "[d4 b4 ~ d#4 ~ c5@2 b4 a4!2 g4@3 ~@2 [b2,a3,d4]@14 ~@2 [c3,g3,d4,g4]@15 ~@2 [e3,a3,d4]@13 ~@2 g2@10 ~@4 d4 a4 a#4, ~@15 g4@11 ~@21 f#2@14 ~ d4@12 ~@6, ~@31 [d3,g3]@5 ~@4]/5", // Bm7 Csus2 Dsus2 G5
  N: "g4 d4 c4 a#3 ~ c4 c#4 a4 ~ g4 a4@2 d4 a#4 ~ f4", O: "~ f#4 ~ d#4 c5 ~ a4 a#4 ~ a#3 b3 ~@2 g4 ~ f4",
  P: "d5 ~ b4 c5 ~ g4 f4 e4@6 ~@3", Q: "b4 ~ d4 ~ c#4 a4 ~ g4 f#4 ~@3 [d5,d#5] d5@2 c5",
  R: "[b4 ~ g4@6 ~@4 e4 ~@2 e4@2 g4 f4 ~ a4 d4 ~ a#4 d#4 g3 a#3 b3 ~@2 c4@2, ~@13 d4@2 ~@14 d4@2 ~, ~@7 g4 ~@8]/2",
  S: "~ a#3 ~@2 a#3 ~ c4 a4 ~ c#4!2 a#4 ~ c5 a4 ~, g4 ~@7", T: "d4 b4 ~ d#4 ~ c5 ~ d5 c5 b4 g5@4 ~@2",
})).s("gm_epiano1").gain(0.36).pan(0.6)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note("<[~ a#4 g4 ~@2 c5 d5 ~] ~@31>").s("gm_orchestra_hit").gain(0.36).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ [x ~@6 x ~ x ~@4 x ~]!29 [x ~@6 x ~ x ~@6] ~>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~ A B C D E F G H I J K L M N O P Q R S T A U V J W X Y Z AA AB ~>".pickRestart({
  A: "x!3 ~ x!9 ~ x!2", B: "x ~ x!9 ~ x!2 ~ x", C: "x ~ x!3 ~ x!5 ~ x!3 ~", D: "x!2 ~ x ~ x!7 ~ x!2 ~",
  E: "x!3 ~ x ~ x!6 ~ x!2 ~", F: "x!3 ~ x!2 ~ x!5 ~ x!2 ~", G: "x!12 ~ x!3", H: "x ~ x!10 ~ x!3", I: "x!5 ~ x!9 ~",
  J: "x ~ x!14", K: "x!2 ~ x ~ x ~ x!2 ~ x ~ x ~ x ~", L: "x ~ x ~ x!11 ~", M: "x!2 ~ x!9 ~ x!2 ~",
  N: "x ~ x!8 ~ x ~ x!3", O: "x!3 ~ x ~ x!2 ~ x!7", P: "~ x!3 ~ x!6 ~ x!2 ~ x", Q: "x ~ x!3 ~ x!9 ~",
  R: "x!2 ~ x!11 ~ x", S: "~ x!14 ~", T: "x!16", U: "x!10 ~ x!2 ~ x!2", V: "~ x!2 ~ x ~ x!5 ~ x ~ x!2",
  W: "x ~ x!2 ~ x!7 ~ x!2 ~", X: "x!14 ~ x", Y: "~ x!11 ~ x!2 ~", Z: "x!2 ~ x!2 ~ x!9 ~", AA: "x!2 ~ x!10 ~ x ~",
  AB: "x ~ x!10 ~@4",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 [~@8 x!4 ~ x ~ x] ~@10>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A ~@2 B C B D E D ~ F G H I A J K L ~ M N O D B P L Q R D ~>".pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@3 x", C: "~@6 x ~@8 x", D: "~ x ~@14", E: "~@5 x ~@9 x", F: "~ x ~ x ~@12", G: "~@15 x",
  H: "~ x ~@8 x ~ x ~@3", I: "~@3 x ~ x ~@2 x ~@7", J: "~ x ~@13 x", K: "~ x ~@5 x", L: "x", M: "~@3 x ~@8 x!2 ~@2",
  N: "~@10 x ~@2 x ~@2", O: "x ~@4 x ~@5 x ~@4", P: "~@7 x", Q: "~@2 x ~@2 x ~@9 x", R: "~@2 x ~@10 x ~@2",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@21 [~@7 x] ~@10>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@5 A ~@4 A ~@4 B ~@2 C@2 ~ D ~@5 E ~@2 F ~>".pickRestart({
  A: "~@7 x", B: "~@7 x ~@8", C: "~@15 x", D: "x", E: "~ x ~@6", F: "~@11 x ~@4",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct("<~@3 [~@14 x!2] ~@18 [x ~@2 x ~@12] ~@9>").gain(0.3)

stack(bass, epiano1, orchestra_hit, kick, hihat, mid_tom, open_hat, high_tom, crash, ride)

More by UZEB