Strudelify

Wild Rhythm

Rene Froger

KeyG majorTempo126 bpm
0:00/0:00
// Wild Rhythm — Rene Froger
// 126 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 "MUTED GTR" electric guitar muted (copy of ch 9 "DISTORTION" distortion guitar)
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · piano · "A.PIANO 3"
const piano = note(`<
  ~@12 A@2 B@2 C D E D A@2 F@2 C D E D G@3 H G@3 I J ~ A@2 B@2 C D E D G@3 H G@3 H G@3 H G@3 H ~@9 K@2 L@2 K@2 L@2 ~@8
  G@3 H G@3 H G@3 H G@3 H G@3 M
>`.pickRestart({
  A: "[[g2,g3,b3,d4,g4]@26 d4 ~ [g3,c4,d4,g4]@4]/2", B: "[[g2,g3,b3,d4,g4]@26 g3 ~ g3@4]/2", C: "[c3,g3,c4,e4,g4]@7 ~",
  D: "[d3,a3,c4,d4,f#4]@7 ~", E: "[d#3,g3,a#3,d#4,g4]@7 ~", F: "[g3@6 g3 a3, [g2,b3,d4,g4]@7 ~]/2",
  G: "[g2,a3,b3,e4]@2 ~ [g2,a3,b3,e4] ~@2 [g2,a3,b3,e4]@2 ~@2 [g2,a3,b3,e4] ~@2 [g2,a3,b3,e4] ~@2", // Em
  H: "[g2,a3,b3,e4]@2 ~ [g2,a3,b3,e4] ~@2 [g2,a3,b3,e4]@3 ~ [g2,a3,c4,e4]@2 [g2,a3,c4,e4]@4", // Em Am7
  I: "[g2,a3,b3,e4]@2 ~ [g2,a3,b3,e4] ~@2 [g2,a3,b3,e4]@3 ~ [g2,a3,c4,e4]@2 ~ [g2,a3,c4,e4]@2 ~", // Em Am7
  J: "[g2,a3,b3,e4]@3 ~@13", // Em
  K: "[f2,g3,g#3,c4,d#4]@2 ~ [f2,g3,g#3,c4,d#4] ~@2 [f2,g3,g#3,c4,d#4]@2 ~@2 [f2,g3,g#3,c4,d#4] ~@2 [f2,g3,g#3,c4,d#4] ~@2", // Fm7
  L: "[c3,a#3,d4,d#4,g4]@2 ~ [c3,a#3,d4,d#4,g4] ~@2 [c3,a#3,d4,d#4,g4]@2 ~@2 [c3,a#3,d4,d#4,g4] ~@2 [c3,a#3,d4,d#4,g4] ~@2", // Cm7
  M: "[g2,a3,b3,e4]@2 ~ [g2,a3,b3,e4] ~@2 [g2,a3,b3,e4] ~@9", // Em
})).s("gm_piano").gain(0.22)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@4 A@12 B C D C A@4 B C D C A@8 ~@2 A@4 B C D C A@16 E@2 F@2 E@2 F@2 G E@2 F H E@2 F@2 ~@8 A@19 I
>`.pickRestart({
  A: "g1@2 ~ g1 ~ g1 ~ g1 d1@3 ~ f1@3 ~", B: "c1@2 ~ c1 ~ c1 ~ c1 a1@3 ~ g1@3 ~",
  C: "d1@2 ~ d1 ~ d1 ~ d1 b1@3 ~ a1@3 ~", D: "d#1@2 ~ d#1 ~ d#1 ~ d#1 c2@3 ~ a#1@3 ~",
  E: "f1@2 ~ f1 ~ f1 ~ f1 c1@3 ~ d#1@3 ~", F: "c2@2 ~ c2 ~ c2 ~ c2 g1@3 ~ a#1@3 ~", G: "c2 ~@7",
  H: "c2@3 ~ d2@3 ~ d#2@3 ~ c2@3 ~", I: "g1@2 ~ g1 ~ g1 ~@10",
})).s("gm_synth_bass_1").gain(0.3)

// other · brass section · "BRASS 1"
const brass_section = note("<~@36 A B ~@57 C D E F G H I ~ G H I ~>".pickRestart({
  A: "[b3,b4]@2 ~ [a3,a4] [g3,g4] ~ [a3,a4] ~ [b3,b4] ~ [b3,b4] ~ [b3,b4] ~@3", // B A G A B
  B: "[e4,a4]!2 ~ [e4,a4]!2 ~ [e4,a4] ~ [f#4,d5] ~@7", // A5 D
  C: "~@2 [f4,f5] [d4,d5] ~ [d4,d5] ~ [f4,f5] ~ [d4,d5] ~ [f4,f5]@3 [g4,g5] ~", // F D F D F G
  D: "~@2 [g4,g5] [d4,d5] [f4,f5] [g4,g5] ~ [a#4,a#5] ~ [a4,a5] ~ [g4,g5]@3 [f4,f5] ~", // G D F G A# A G F
  E: "~@2 [f4,f5] [d4,d5] [f4,f5] [d4,d5] ~ [f4,f5] ~ [d4,d5] ~ [f4,f5] ~@4", // F D F D F D F
  F: "[g4,g5] [f4,f5] ~ [a#4,a#5] [g4,g5] ~ [c5,c6] [a#4,a#5] ~ [d5,d6] [c5,c6] ~ [f5,f6] [d5,d6] ~@2", // G F A# G C A# D C …
  G: "[g4,g#4,g5,g#5] [g5,g#5]!2 [g4,g#4,g5,g#5] [g5,g#5]!4 [g4,g#4,g5,g#5] [g5,g#5]!2 [g4,g#4,g5,g#5] [g5,g#5]!3 [g4,g#4,g5,g#5]", // G#maj7
  H: "[g4,g5] ~@3 [d4,d5]@2 [e4,e5]@2 [f4,f5]@2 [e4,e5] ~@3 [d4,d5] [c4,c5]", I: "[d4,d5]",
})).s("gm_brass_section").gain(0.4)

// other · brass section · "BRASS 1" · soft notes · G#maj7
const brass_section_soft = note(`<
  ~@99
  [~ [g4,g#4]!2 ~ [g4,g#4]!4 ~ [g4,g#4]!2 ~ [g4,g#4]!3 ~]
  ~@3
  [~ [g4,g#4]!2 ~ [g4,g#4]!4 ~ [g4,g#4]!2 ~ [g4,g#4]!3 ~]
  ~@3
>`).s("gm_brass_section").gain(0.25)

// other · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@71 A B A C A B A C ~@28>".pickRestart({
  A: "g5@2 c5 d#5@2 f5@2 g5, f#5 ~@13 f#5 ~", B: "~ g5@2 c5 d#5@2 a#5@2, ~@2 f#5 ~@13",
  C: "~@2 g5@3 [e5,f5] [b4,c5,d5] [f4,g4,a4] ~@8, ~@2 f#5 ~@13", // Fmaj7 Bm F
})).s("gm_percussive_organ").gain(0.4)

// chords · marimba · D# F5 D# F5 Dm Cm Dm Cm …
const marimba = note(`<
  ~@62
  [[d#4,g4] ~ [d#4,g4] ~ [c4,f4]!2 ~ [d#4,g4] ~ [d#4,g4] ~ [d#4,g4] [c4,f4] ~ [c4,f4] ~]!2
  [[d4,f4] ~ [d4,f4] ~ [c4,d#4]!2 ~ [d4,f4] ~ [d4,f4] ~ [d4,f4] [c4,d#4] ~ [c4,d#4] ~]!2
  [[d#4,g4] ~ [d#4,g4] ~ [c4,f4]!2 ~ [d#4,g4] ~ [d#4,g4] ~ [d#4,g4] [c4,f4] ~ [c4,f4] ~]!2
  [[d4,f4] ~ [d4,f4] ~ [c4,d#4]!2 ~ [d4,f4] ~ [d4,f4] ~ [d4,f4] [c4,d#4] ~ [c4,d#4] ~]!2
  ~@37
>`).s("gm_marimba").gain(0.27).pan(0.8)

// chords · electric guitar muted · "+FUNK GTR"
const electric_guitar_muted = note(`<
  ~@12 A@4 B C D C A@4 B C D C E@8 ~@2 A@4 B C D C E@16 F@2 G@2 F@2 G@2 H F@2 G@2 F@2 G@2 ~@8 E@19 I
>`.pickRestart({
  A: "~@3 [b3,d4,g4]!2 ~@5 [b3,d4,g4]!4 ~@2", B: "~@3 [e4,g4,c5]!2 ~@5 [e4,g4,c5]!4 ~@2",
  C: "~@3 [c4,f#4,a4]!2 ~@5 [c4,f#4,a4]!4 ~@2", D: "~@3 [d#4,g4,a#4]!2 ~@5 [d#4,g4,a#4]!4 ~@2",
  E: "~@3 [f4,a4,d5]!2 ~@5 [f4,a4,d5]!4 ~@2", F: "~@3 [d#4,g4,c5]!2 ~@5 [d#4,g4,c5]!4 ~@2",
  G: "~@3 [a#3,d4,g4]!2 ~@5 [a#3,d4,g4]!4 ~@2", H: "[e3,a#3,d#4]@15 ~", I: "~@3 [f4,a4,d5]!2 ~@11",
})).s("gm_electric_guitar_muted").gain(0.15).pan(0.3)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@27 A ~@3 A ~@13 A ~@3 A ~@3 A ~@3 A ~@28 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "~@5 d3 d3@2",
})).s("gm_distortion_guitar").gain(0.28)

// other · distortion guitar · "DISTORTION"
const distortion_guitar_2 = note("<~@4 A@2 B@2 A@2 B@2 ~@95>".pickRestart({
  A: "g3 ~ d3 ~ f3 ~ g3@8 ~@2", B: "[g3 ~ d3 ~ f3 ~ g3@4 d3 ~ f3 ~ g3@4 d3 ~ f3 ~ g3@4 d3 ~ f3 ~ g3@2]/2",
})).s("gm_distortion_guitar").gain(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@61 A@7 B@4 C@7 ~@7 D ~@20>".pickRestart({
  A: "[~@16 [f2,g3,d#4]@31 ~ [c3,a#3,g4]@31 ~ [f2,g3,d#4]@31 [d4,d#4], ~@15 [g#3,c4]@32 [d4,d#4]@32 [g#3,c4]@32 ~]/7", // Cm C7 Cm D#maj7 G# D#maj7 G#
  B: "[[c3,a#3,g4]@31 ~ [c3,e3]@15 ~ g3@16, ~@31 g#3@32 ~, ~@31 a#3@16 c4@17, ~ d#4]/4", // C7 C
  C: "[~@16 [a#3,g4]@31 ~ [g3,d#4]@31 ~ [a#3,g4]@32, ~@15 [d4,d#4]@32 [g#3,c4]@32 [d4,d#4]@32 ~]/7", // D# Cm D# D#maj7 G# D#maj7
  D: "~ e4, ~@7 [a3,b3]@8 ~", // Asus2
})).s("gm_synth_strings_1").gain(0.24)

// chords · synth strings 1 · "SYN STR 1" · soft notes
const synth_strings_1_soft = note("<~@71 A@2 B@2 A@2 B@2 ~@7 C ~@20>".pickRestart({
  A: "f2/2", B: "c3/2", C: "~ g2",
})).s("gm_synth_strings_1").gain(0.08)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[x!4]!4 ~@32 [x!4]!2 ~@32 [x!4] ~@8 [x!4]!8 ~@20>").gain(0.24)

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

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!75 ~@8 [~ x ~ x]!19 [~ x ~@2]>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@3 B ~@3 A ~@15 A ~@3 B ~@4 B@2 ~@7 A ~@3 B ~@3 A ~@3 B ~@7 B ~@4 B ~@3 B ~@3 C B@6 D E ~@3 B ~@3 A ~@3 B ~@3 B
  ~@3 F
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~ x ~@3", B: "~@5 x!2 ~", C: "~@7 x", D: "~ x ~ x", E: "~@2 x ~@2 x!2 ~",
  F: "x ~@2 x ~@2 x ~@9",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<[x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!106 [x!2 ~@2 x!2 ~ x ~@8]>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@3 B ~@3 A ~@15 A ~@3 B ~@4 B@2 ~@7 A ~@3 B ~@3 A ~@3 B ~@3 C ~@3 B ~@3 D B ~@3 B ~@3 C B@6 E F ~@3 B ~@3 A ~@3
  B ~@3 B ~@3 G
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@3 x ~ x ~@3", B: "~@5 x!2 ~", C: "~@2 x ~@2 x ~@2 x ~@2 x ~@4", D: "~@8 x ~@2 x ~@2 x ~",
  E: "~ x ~ x", F: "~@2 x ~@2 x!2 ~", G: "x ~@2 x ~@2 x ~@9",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x]!106 [~ x ~ x ~@4]>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  A@3 B A@3 B A@3 B A ~@7 A ~@6 C A@3 B A@4 B@2 A ~@6 C A@3 B A@3 B A@3 B A@5 ~@2 C A ~@3 C A@3 B A@11 C A@3 B A@3 B A@3
  B A@3 B A@4
>`.pickRestart({
  A: "x", B: "x ~@4 x!2 ~", C: "~@5 x!2 ~",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<[x!16]!106 [x!7 ~@9]>").gain(0.24)

// drums · bongos
const bongos = s("bongo:4").struct("<[~@4 x ~@2 x ~ x ~@2 x!2 ~@2]!106 [~ x ~@2]>").gain(0.63)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<[x ~@4 x ~@2]!106 x>").gain(0.63)

// drums · bongos · soft notes
const bongos_soft = s("bongo:18").struct("<[~@6 x ~@8 x]!106 [~@3 x ~@4]>").gain(0.21)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@4
  [x ~@4 x ~ x ~@5 x ~@2]!8
  ~@24
  [x ~@4 x ~ x ~@5 x ~@2]!2
  ~@41
  [x ~@4 x ~ x ~@5 x ~@2]!8
  ~@20
>`).gain(1.53)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct(`<
  ~@4
  [~@2 x ~ x ~@4 x ~ x!2 ~@3]!8
  ~@24
  [~@2 x ~ x ~@4 x ~ x!2 ~@3]!2
  ~@41
  [~@2 x ~ x ~@4 x ~ x!2 ~@3]!8
  ~@20
>`).gain(1.53)

// drums · shaker
const shaker = s("sh").struct(`<
  [x ~@2 x!2 ~ x ~ x!2 ~ x!2 ~ x ~]!12
  ~@16
  [x ~@2 x!2 ~ x ~ x!2 ~ x!2 ~ x ~]!10
  ~@8
  [x ~@2 x!2 ~ x ~ x!2 ~ x!2 ~ x ~]!60
  [x ~@2 x!2 ~ x ~@9]
>`).gain(0.32)
// … 34 more lines

More by Rene Froger