Strudelify

Old Pop in an Oak

Rednex

KeyA majorTempo128 bpm
0:00/0:00
// Old Pop in an Oak — Rednex
// 128 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 90 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.

// other · pad sweep
const pad_sweep = note("<~@7 A@2 ~@2 A@2 ~@18 B@2 ~@10 C@2 ~@6 B@2 ~@37>".pickRestart({
  A: "[a4@7 ~]/2", B: "[a4@3 ~]/2", C: "[~@3 a3@5]/2",
})).s("gm_pad_sweep").gain(0.26).pan(0.2)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  A ~@7 B C@4 D E F G D E F G D E F G D E F G D E H I D E F G D E F G D J K ~ D E F G D E H L D E F G D E F M N@2 O P O
  P O Q D J F G D J ~@2 D E F G D E F G ~@5
>`.pickRestart({
  A: "a1@3 ~", B: "~@3 [g2,g3]", C: "[a2,a3]/4",
  D: "[a3,e4] a2 [a3,e4] a2 [a3,e4] a2 [a3,e4]!2 a2 [a3,e4]!2 a2 [a3,e4] a2 [a3,e4] a2", // A5
  E: "[a3,e4] a2 [a3,e4] a2 [a3,e4] a2 [a3,e4] [b3,e4] e3 [b3,e4]!2 e3 [b3,e4]!4", // A5 E5
  F: "[a3,d4] d3 [a3,d4] d3 [a3,d4] d3 [a3,d4]!2 d3 [a3,d4]!2 d3 [a3,d4] d3 [a3,d4] d3", // D5
  G: "[b3,e4] e3 [b3,e4] e3 [b3,e4] e3 [b3,e4] [a3,d4] d3 [a3,d4]!2 d3 [a3,d4]!4", H: "[a3,d4] ~@15, d2", I: "e2@9 ~@7",
  J: "[b3,e4] e3 [b3,e4] e3 [b3,e4] e3 [b3,e4]!2 e3 [b3,e4]!2 e3 [b3,e4]!4", // E5
  K: "[a3,d4] d3 [a3,d4] d3 [a3,d4] d3 [a3,d4]!2 d3 [a2,a3,e4,a4] ~ [a2,a3,e4,a4]@2 ~ [a2,a3,e4,a4]@2", L: "e2 d3",
  M: "[b3,e4,a4] e3 [b3,e4,a4] e3 [b3,e4,a4] e3 [b3,e4,a4] [a3,d4,a4] d3 [a3,d4,a4]!2 d3 [a3,d4,a4]!4", // Esus4 D5
  N: "[a1@31 ~]/2", O: "c#2@2 ~ c#2 c#3@2 c#2@2 ~ c#2@2 c#2 c#3@2 c#2@2", P: "c#2@3 ~", Q: "c#2@15 ~",
})).s("gm_lead_2_sawtooth").gain(0.18).pan(0.4)

// other · fiddle
const fiddle = note("<~@20 A B C D E F ~@10 A B C D E F ~@27 G H G H G I ~@5 A B C D E F ~@4>".pickRestart({
  A: "~@14 e5!2", B: "[e5,f#5] e5@2 e5@3 e5!2 [e5,f#5] e5@2 e5@3 e5@2",
  C: "e4@2 f#4 a4 b4 a4 g#4 a4 b4 c5 c#5 a4 b4@2 e5!2", D: "[e5,f#5] e5@2 e5@3 e5!2 [e5,f#5] e5@2 e5@2 e5 a5 e5",
  E: "b5 c#6 a5@2 e5 g5@2 e5 c#5@2 a4 f#4 e4 f#4 a4 b4", F: "a4 ~@7",
  G: "e5@2 e5 c#5 e5@2 c#5 e5@2 e5@2 e5@2 e5 c#5 a4",
  H: "b4@2 [c#5,e5] [a4,e5] b4@2 [c#5,e5] [a4,e5] [b4,e5] [c#5,e5] [b4,e5] [c#5,e5] b4 a4 [f#4,e5] [e4,e5], e5 ~@3 e5 ~@7 e5@2 ~@2", // C#m A5 C#m A5 E5 C#m E5 C#m …
  I: "b4@2 [c#5,e5] [a4,e5] b4@2 [c#5,e5] [a4,e5] [b4,e5] [c#5,e5] [b4,e5] [c#5,e5] b4 a4 f#4 e4, e5 ~@3 e5 ~@7 e5@2 ~@2", // C#m A5 C#m A5 E5 C#m E5 C#m
})).s("gm_fiddle").gain(0.18).pan(0.3)

// bass · synth bass 2
const bass = note(`<
  ~@13 A B C D A B C D A B C D A B C D A B E ~ A B C D A B C D A F G ~ A B C D A B E ~ A B C D A B C D ~@16 A B C D A B
  C D ~@5
>`.pickRestart({
  A: "a1!16", B: "a1!8 e2!8", C: "d2!16", D: "e2!8 d2!8", E: "d2 ~@15", F: "e2!16", G: "d2!9 ~@7",
})).s("gm_synth_bass_2").gain(0.41)

// other · banjo
const banjo = note("<~@25 A B A C A B D ~@9 E F G H A B A C A B D ~@38>".pickRestart({
  A: "a3!14 b3 c#4", B: "a3!14 d4 e4", C: "b3!4 e4 d4 c#4 f#4 e4 d4 e4 d4 e4 d4 c#4 b3", D: "a3!7 ~@9",
  E: "e4!4 c#4 d4 e4 c#4 a3!2 e4 a3 e4 a3 b3 c#4", F: "~ e4 b3 e4!6 d4 e4 d4 b3 c#4 d4 b3",
  G: "a3 d4 a3 e4 d4 f#4 e4 d4 a3!2 d4 a3 d4 a3!2 ~", H: "~ e4 b3 e4!6 d4 b3 d4 f#4 e4 d4 b3",
})).s("gm_banjo").gain(0.16).pan(0.8)

// chords · pad poly
const pad_poly = note(`<
  A ~@4 B@4 C@4 D E F G H I F G D E F G ~@4 J K L M D E F G D E F G ~@8 J K L M D E F G N O F P ~@16 D E F G D E F G Q R
  S T ~
>`.pickRestart({
  A: "a1 a2 a1 a2 a1 a2 a1 ~", B: "[a1@59 ~ [g2,g3]@4]/4", C: "[a4!16 a4!16 a4!16 a4!16, [a1,a2,a3]]/4",
  D: "a3!2 [c#4,e4,a4] a3!3 [c#4,e4,a4] a3!3 [c#4,e4,a4] a3!3 [c#4,e4,a4] a3", // A
  E: "a3!2 [c#4,e4,a4] a3!3 [c#4,e4,a4] a3 e3!2 [b3,e4,g#4] e3!3 [b3,e4,g#4] e3", // A E
  F: "d3!2 [d4,f#4,a4] d3!3 [d4,f#4,a4] d3!3 [d4,f#4,a4] d3!3 [d4,f#4,a4] d3", // D
  G: "e3!2 [a4,b4,e5] e3!3 [a4,b4,e5] e3 d3!2 [f#4,a4,d5] d3!3 [f#4,a4,d5] d3", // Asus2 D
  H: "a3!2 [e4,a4,c#5] a3!3 [e4,a4,c#5] a3!3 [e4,a4,c#5] a3!3 [e4,a4,c#5] a3", // A
  I: "a3!2 [e4,a4,c#5] a3!3 [e4,a4,c#5] a3 e3!2 [b3,e4,g#4,b4] e3!3 [b3,e4,g#4,b4] e3", // A E
  J: "~@2 a4 a3 a4!2 a3 a4 a3 a4!2 a3 a4 a3 a4!2", K: "a3 a4 a3 a4!2 a3 a4 a3 a4!2 a3 a4 a3 a4 [c#3,a3,c#4,a4] a3",
  L: "[a3,a4] a3 a4 ~@13, [d3,d4]", M: "[e3,b3,e4]@9 ~@7",
  N: "a3!2 [c#4,e4,a4,c#5] a3!3 [c#4,e4,a4,c#5] a3!3 [c#4,e4,a4,c#5] a3!3 [c#4,e4,a4,c#5] a3", // A
  O: "a3!2 [c#4,e4,a4,c#5] a3!3 [c#4,e4,a4,c#5] a3 e3!2 [b3,e4,g#4,b4] e3!3 [b3,e4,g#4,b4] e3", // A E
  P: "e3!2 ~ e3!3 ~ e3 d3!2 ~ d3!3 ~ d3",
  Q: "a2!2 [a2,a4,c#5,e5] a2!3 [a2,a4,c#5,e5] a2!3 [a2,a4,c#5,e5] a2!3 [a2,a4,c#5,e5] a2", // A
  R: "a2!2 [a2,a4,c#5,e5] a2!3 [a2,a4,c#5,e5] a2 e2!2 [e2,e4,g#4,b4] e2!3 [e2,e4,g#4,b4] e2", // A E
  S: "d2!2 [d2,d4,f#4,a4] d2!3 [d2,d4,f#4,a4] d2!3 [d2,d4,f#4,a4] d2!3 [d2,d4,f#4,a4] d2", T: "e2!8 ~@8",
})).s("gm_pad_poly").gain(0.22).pan(0.8)

// other · timpani
const timpani = note("<A ~@7 B C ~@20 D E F ~@17 D E F ~@8 G ~@28>".pickRestart({
  A: "~@3 [a1,a2]", B: "~@3 g2", C: "a2 ~@3", D: "~@14 c#3 ~", E: "d3 ~@15", F: "e3 ~@15", G: "[a1,a2] ~@3",
})).s("gm_timpani").gain(0.44).pan(0.7)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@6 B C A@3 D A@3 D A@3 D A@3 D A@2 ~ E A@3 D A@3 D A@2 F G A@3 D A@2 ~ E A@3 D A@3 D A H@4 A I ~ A@3 D A@2 J ~
  A@3 D A@3 D ~@5
>`.pickRestart({
  A: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", B: "~@4 x!12", C: "x!16", D: "~@4 x!4 ~ x!3 ~ x!3", E: "~@2 x ~ x!5 ~@7",
  F: "~@4 x ~@2 x ~@8", G: "~@2 x ~ x!4 ~ x!7", H: "~@4 x!2 ~ x ~ x ~@2 x ~@2 x", I: "~@2 x!6 ~ x!5 ~ x",
  J: "~@4 x ~@2 x ~@4 x ~@2 x",
})).gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@5 A@6 B A@4 ~ A@3 ~ A@3 ~ A@3 ~ A@2 ~@2 A@3 ~ A@3 ~ A@2 C ~ A@3 ~ A@2 ~@2 A@3 ~ A@3 ~ A D@4 A ~@2 A@3 ~ A@3 ~ A@3 ~
  A@3 ~@6
>`.pickRestart({
  A: "~@5 x ~@7 x ~@2", B: "x!4 ~ x ~@7 x ~@2", C: "~@5 x ~@10", D: "~@13 x ~@2",
})).gain(0.07)

// drums · low tom
const low_tom = s("lt").struct("<[~@3 x] ~@60 x ~@28>").gain(0.61)

// drums · hihat
const hihat = s("hh").struct("<~@5 A@8 B@19 C B@10 D ~ B@7 C B@8 E B@6 ~ B@7 E B@11 F ~>".pickRestart({
  A: "~@4 x ~@2 x ~@2 x ~ x ~ x ~", B: "x!16", C: "x", D: "x!9 ~@7", E: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", F: "x!8 ~@8",
})).gain(0.14)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5
  [x!4 ~ x!2 ~ x!2 ~ x ~ x ~ x]!8
  ~@48
  [~ x ~ x ~ x ~@3 x ~ x ~ x ~ x]
  ~@14
  [~ x ~ x ~ x ~@3 x ~ x ~ x ~ x]
  ~@13
>`).gain(0.07)

// drums · high tom
const high_tom = s("ht").struct("<~@5 A@26 ~ B A@10 B ~ A@6 ~ B C@8 A C@4 A@2 ~ A@6 C ~ A@4 C@4 ~@5>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x ~@3", C: "x!2 ~ x!3 ~ x",
})).gain(0.14)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@5 A@26 ~ B A@10 B ~ A@6 ~ B ~@8 A ~@4 A@2 ~ A@6 ~@2 A@4 ~@9>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4",
})).gain(0.07)

// drums · tambourine
const tambourine = s("tb").struct("<~@13 A@19 ~ A@10 B ~ A@7 ~ A@8 ~ A@6 ~ A@7 ~ A@10 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.41)

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

stack(
  pad_sweep, lead_2_sawtooth, fiddle, bass, banjo, pad_poly, timpani, kick, snare, snare_soft, low_tom, hihat,
  hihat_soft, high_tom, high_tom_soft, tambourine, splash
)

More by Rednex