Strudelify
Cotton Eyed Joe cover art

1995 · Sex & Violins

Cotton Eyed Joe

Rednex

KeyB♭ majorTempo140 bpm
0:00/0:00
// Cotton Eyed Joe — Rednex
// 140 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "Violin 1" named as a string part, played on violin (its fiddle patch is not one); ch 9 "Pizzicatto" named as a string part, played on pizzicato strings (its shamisen patch is not one)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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 · fretless bass · "Bass"
const bass = note(`<
  ~@4 A B C D E A C F G B H D E A I J E K L J M A N D O P N D A G N ~ A B C D A B C D Q R S T Q U S T A B C D A B C V A
  B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "bb1@2 bb2 ~ bb1@2 bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~", B: "bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~",
  C: "eb2@2 eb3 ~ eb2 ~ eb3 ~ eb2@2 eb3 ~ eb2@2 eb3 ~", D: "f2@2 f3 ~ f2@2 f3 ~ eb2@2 eb3 ~ c2@2 c3 ~",
  E: "bb1@2 bb2 ~ bb1@2 bb2 ~ bb1@2 bb2 ~ bb1 ~ bb2 ~", F: "f2 ~@7",
  G: "bb1 ~ bb2 ~ bb1@2 bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~", H: "eb2@2 eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~",
  I: "eb2@2 eb3 ~ eb2 ~ eb3 ~ eb2@2 eb3 ~ eb2 ~ eb3 ~", J: "f2@2 f3 ~ f2 ~ f3 ~ eb2@2 eb3 ~ c2@2 c3 ~",
  K: "bb1@2 bb2 ~ bb1 ~ bb2 ~ bb1@2 bb2 ~ bb1 ~ bb2 ~", L: "eb2@2 eb3 ~ eb2@2 eb3 ~ eb2 ~ eb3 ~ eb2 ~ eb3 ~",
  M: "bb1@2 bb2 ~ bb1 ~ bb2 ~ bb1@2 bb2 ~ bb1@2 bb2 ~", N: "eb2@2 eb3 ~ eb2@2 eb3 ~ eb2@2 eb3 ~ eb2@2 eb3 ~",
  O: "bb1@2 bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~", P: "bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1 ~ bb2 ~ bb1@2 bb2 ~",
  Q: "bb1@2 bb2 ~ bb1@2 bb2 ~ bb1@2 bb2 ~ bb1@2 bb2 ~", R: "eb2@2 eb3 ~ eb2@2 eb3 ~ eb2@2 eb3 ~ eb2@2 eb3@2",
  S: "c2@2 c3 ~ c2@2 c3 ~ c2@2 c3 ~ c2@2 c3 ~", T: "f2@2 f3 ~ f2@2 f3 ~ f2@2 f3 ~ f2@2 f3 ~",
  U: "eb2@2 eb3 ~ eb2@2 eb3 ~ eb2@2 eb3@2 eb2@2 eb3 ~", V: "f2 f3 f2 f3 eb2 ~@3",
})).s("gm_fretless_bass").gain(0.19)

// bass · lead 2 sawtooth · "AnlgBass"
const bass_2 = note(`<
  ~@4 A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C F A B C D A B C D B C G H B C G H A B C D A B C I A
  B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D A B C ~
>`.pickRestart({
  A: "bb1!10 bb1@2 bb1!3 ~", B: "bb1!11 ~ bb1!3 ~", C: "eb2!11 ~ eb2!2 eb2@2", D: "f2!8 eb2!2 eb2@2 c2!3 ~",
  E: "f2 ~@7", F: "f2!8 ~@8", G: "c2!11 ~ c2!2 c2@2", H: "f2!11 ~ f2!3 ~", I: "f2!8 eb2 ~@7",
})).s("gm_lead_2_sawtooth").gain(0.15).pan(1)

// other · banjo
const banjo = note("<~@28 A@6 ~@10 B C D E B C D E ~@52>".pickRestart({
  A: "bb3 ~ bb3 f4 ~ bb3!2 db4 ~ bb3 db4 ~ c4 bb3 ~@2", B: "bb3 ~ ab3 bb3 ~ ab3 bb3 d4 f4 d4 bb3 ~ d4 ~ bb3 ~",
  C: "eb4!2 d4 eb4 ~ d4 eb4 f4 eb4 d4 c4 ~ eb4 ~ d4 ~", D: "c4 ~ b3 c4 ~ b3 c4 d4 e4 d4 c4 ~ e4 ~ c4 ~",
  E: "f4!2 e4 f4 ~ e4 f4 g4 f4 eb4 d4 ~ f4 eb4 d4 c4",
})).s("gm_banjo").gain(0.13).pan(0.8)

// other · violin · "Violin 1"
const violin = note(`<
  ~@8 A B C D E ~@7 A B C D A B C D E ~@39 A B C D F G H I A B C D J K L M ~@8 A B C D N O P Q ~@4
>`.pickRestart({
  A: "d5 f5@7 f5 g5 f5@2 d5@3 f5", B: "d5 c5 bb4 d5 c5 bb4 g4 a4 bb4 c5 bb4 g4 f4@2 ~@2",
  C: "d5 f5@6 ~ f5 g5 f5@2 d5@3 f5", D: "d5 c5 bb4 d5 c5 bb4 g4 a4 bb4 c5 bb4 g4 f4 g4 f4@2, ~@3 bb3", E: "bb3 ~@7",
  F: "bb3 d4 f4 bb4 ~ bb4!6 d5 c5 bb4 g4 f4", G: "bb3 d4 f4 bb4 ~ bb4 ~ bb4!3 d5 c5 bb4 g4 f4 d4",
  H: "bb3 eb4 g4 [eb4,bb4] ~ bb4 ~ bb4!2 d5 c5 bb4 g4 f4 eb4 ~", // Eb5
  I: "bb3 eb4 g4 bb4@2 d5 c5 bb4 c5 bb4 a4 g4 a4 g4 f4 eb4", J: "bb3 d4 f4 bb4 ~ bb4!4 d5 c5 bb4 g4 f4 d4 c4",
  K: "bb3 d4 f4 bb4 ~ bb4!4 d5 c5 bb4 c5 bb4 g4 f4", L: "bb3 eb4 g4 bb4@2 bb4!4 d5 c5 bb4 g4 f4 eb4 c4",
  M: "bb3 eb4 g4 bb4@2 d5 c5 bb4 c5 bb4 g4 f4 eb4 f4 eb4 c4",
  N: "d4@2 f4 bb4 ~ [f4,bb4] ~ [f4,bb4] ~ [f4,bb4] ~ d5 c5 bb4 g4 f4", // Bb5
  O: "d4 ~ f4 [f4,bb4] ~ [f4,bb4] ~ [f4,bb4] ~ [f4,bb4]!2 d5 c5 bb4 g4 f4", // Bb5
  P: "eb4@2 g4 [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] ~ d5 c5 bb4 g4 eb4", // Eb5
  Q: "eb4@2 g4 [eb4,bb4] ~ [eb4,bb4] ~ [eb4,bb4] d5 c5 bb4 g4 f4 d4 c4 bb3", // Eb5
})).s("gm_violin").gain(0.12).pan(0.6)

// chords · violin · "Violin 2"
const violin_2 = note(`<
  ~@8 A@2 B@2 ~@8 C@2 A@2 D@2 A@2 ~@40 E@4 F@2 G H I@2 A@2 F@2 G H ~@8 C@2 D@2 F@2 G H ~@4
>`.pickRestart({
  A: "[d5 f5@30 ~]/2", B: "[d5 f5@17 ~@14]/2", C: "[d5 f5@28 ~@3]/2", D: "[d5 f5@31]/2", E: "[d5 f5@29 ~@2]/2",
  F: "~@2 [bb4,f5] ~@3 [bb4,f5] ~@3 [bb4,f5] ~@3 [bb4,f5] ~", // Bb5
  G: "~@2 [bb4,eb5] ~@3 [bb4,eb5] ~@3 [bb4,eb5] ~@3 [bb4,eb5] ~", // Eb5
  H: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [bb4,eb5] ~@3 [g4,c5] ~", I: "[d5 f5@27 ~@4]/2",
})).s("gm_violin").gain(0.07).pan(0.3)

// other · music box · "Bells"
const music_box = note(`<
  ~@52
  [~@2 f6 ~@3 db6 ~@3 db6@2 c6@2 bb5@2]
  [~@2 f6@2 ~@2 db6 ~@3 db6 ~ c6 ~ bb5 ~]!2
  [~@2 f6 ~@3 db6 ~@3 db6 ~ c6 ~ bb5 ~]!3
  [~@2 f6@2 ~@2 db6 ~@3 db6 ~ c6 ~ bb5 ~]
  [~@2 f6 ~@3 db6 ~@9]
  ~@44
>`).s("gm_music_box").gain(0.07).pan(0.3)

// other · lead 2 sawtooth · "Analog"
const lead_2_sawtooth = note(`<
  ~@4 A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C F A B C D A B C D B C G H B C G H A B C D A B C I A
  B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D A B C ~
>`.pickRestart({
  A: "bb2!10 bb2@2 bb2!3 ~", B: "bb2!11 ~ bb2!3 ~", C: "eb3!11 ~ eb3!2 eb3@2", D: "f3!8 eb3!2 eb3@2 c3!3 ~",
  E: "f3 ~@7", F: "f3!8 ~@8", G: "c3!11 ~ c3!2 c3@2", H: "f3!11 ~ f3!3 ~", I: "f3!8 eb3 ~@7",
})).s("gm_lead_2_sawtooth").gain(0.08).pan(0)

// chords · pizzicato strings · "Pizzicatto"
const pizzicato_strings = note(`<
  ~@12 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B D A@2 B C A@2 B C A B E F A B E F A@2 B C A@2 B ~ A@2 B C A@2 B C
  A@2 B C A@2 B C ~@8 A@2 B C A@2 B C A@2 B C A@2 B C ~@4
>`.pickRestart({
  A: "~@2 [bb3,f4] ~@3 [bb3,f4] ~@3 [bb3,f4] ~@3 [bb3,f4] ~", // Bb5
  B: "~@2 [eb4,bb4] ~@3 [eb4,bb4] ~@3 [eb4,bb4] ~@3 [eb4,bb4] ~", // Eb5
  C: "~@2 [f4,c5] ~@3 [f4,c5] ~@3 [eb4,bb4] ~@3 [c4,g4] ~", D: "[f4,c5] ~@15",
  E: "~@2 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~", F: "~@2 [f4,c5] ~@3 [f4,c5] ~@3 [f4,c5] ~@3 [f4,c5] ~",
})).s("gm_pizzicato_strings").gain(0.04).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B A C A B A B A B A B A B A B A B A B A B A B A B A D A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A
  B A B A B A B A B A B A B A B A B A D A B A B A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x", D: "x!2 ~@2",
})).gain(0.3)

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

// drums · hihat
const hihat = s("hh").struct("<~@12 A@23 B A@23 ~ A@23 B A@16 ~@4>".pickRestart({
  A: "x!16", B: "x!8 ~@8",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.19)

// drums · ride
const ride = s("rd").struct("<~@4 [x!8]!7 ~@93>").gain(0.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@12 A@23 B A@23 C A@23 B A@19 ~>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x",
})).gain(1.14)

// drums · shaker
const shaker = s("sh").struct("<~@12 A@23 B A@23 C A@23 C A@19 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~ x ~@6",
})).gain(0.19)

stack(
  bass, bass_2, banjo, violin, violin_2, music_box, lead_2_sawtooth, pizzicato_strings, kick, snare, hihat, crash, ride,
  cabasa, shaker
)

More by Rednex