Strudelify

Duke Of Earl

Gene Chandler

KeyF majorTempo104 bpm
0:00/0:00
// Duke Of Earl — Gene Chandler
// 104 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(104/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 · "Accoustic Grand Piano"
const piano = note(`<
  ~ A B C D E F C D A B C D E F C D G E F@2 C H I@2 A B C D E F C D G E F@2 C H I@2 A B C D E F C D G E F@2 C H I@2 A B
  C D E F C D J ~
>`.pickRestart({
  A: "[f2,f3,a3,c4,f4] ~ [f2,f3,a3,c4,f4] ~ [f2,f3,a3,c4,f4] ~ [f2,f3,a3,c4,eb4,f4] [a3,c4,f4]", // F F7 F
  B: "[d2,d3,a3,d4,f4] [a3,d4,f4] [d2,d3,a3,d4,f4] [a3,d4,f4] [d2,d3] [a3,d4,f4] [d2,d3,a3,d4,f4] [a3,d4,f4]", // Dm D Dm
  C: "[bb1,bb2,bb3,d4,f4] ~ [bb1,bb2,bb3,d4,f4] [bb3,d4,f4] [bb1,bb2] [bb3,d4,f4] [bb1,bb2,bb3,d4,f4] [bb3,d4,f4]", // Bb
  D: "[c2,c3,c4,e4,g4] ~ [c2,c3,c4,e4,g4] [c4,e4,g4] [c2,c3] [c4,e4,g4] [c2,c3,c4,e4,g4] [c4,e4,g4]", // C
  E: "[f2,f3,a3,c4,f4] ~ [f2,f3,a3,c4,f4] [a3,c4,f4] [f2,f3] [a3,c4,f4] [f2,f3,a3,c4,f4] [a3,c4,f4]", // F
  F: "[d2,d3,a3,d4,f4] ~ [d2,d3,a3,d4,f4] [a3,d4,f4] [d2,d3] [a3,d4,f4] [d2,d3,a3,d4,f4] [a3,d4,f4]", // Dm D Dm
  G: "[f2,f3,a3] ~ [f2,f3,a3,c4,f4] [a3,c4,f4] [f2,f3] [a3,c4,f4] [f2,f3,a3,c4,f4] [a3,c4,f4], [c4,f4] ~@3", // F F5
  H: "[bb1,bb2,bb3,d4,f4] ~ [bb1,bb2,bb3,d4,f4] [bb3,d4,f4] [bb1,bb2,bb3,d4,f4] [bb3,d4,f4] [bb1,bb2] [bb3,d4,f4]", // Bb
  I: "[c3,c4,e4,g4] ~ [c2,c3,c4,e4,g4] [c4,e4,g4] [c2,c3] [c4,e4,g4] [c2,c3,c4,e4,g4] ~, c2 ~@3", // C
  J: "[f2,f3,a3] ~ [f2,f3,a3,c4,f4] ~@5, [c4,f4] ~@3", // F F5
})).s("gm_piano").gain(0.41).pan(0.4)

// bass · fretless bass
const bass = note("<~ A B C D E F C G ~@15 H ~@15 H ~@15 H ~@10>".pickRestart({
  A: "f3 ~ f3 ~ f3 ~ f3 e3", B: "d3@3 ~ d3@2 ~@2 d3@2 ~@2 d3@2 f3 ~", C: "bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 d3 ~",
  D: "c3@2 ~@2 c3@3 ~ c3@2 ~@2 c3 ~ c3 ~", E: "f3@2 ~@2 f3@2 ~@2 f3@2 ~@2 f3@2 e3 ~",
  F: "d3@2 ~@2 d3@2 ~@2 d3@2 ~@2 d3@2 f3 ~", G: "c3@2 ~@2 c3@2 ~@2 c3@2 ~@2 c3 ~@3",
  H: "c3 [c3,d3] ~ c3 bb2!2 ~ bb2 a2@2 ~ a2 [g2,a2] g2 ~@2", // Csus2 Gsus2
})).s("gm_fretless_bass").gain(0.52).pan(0.4)

// chords · acoustic guitar steel · "Accoustic Guitar (nylon)"
const acoustic_guitar_steel = note(`<
  ~@5 A B C D E B F D A G C H ~@8 I J K D E B C D ~@8 E B F D A G C H ~@8 I J K D E B C D ~@2
>`.pickRestart({
  A: "[f3,a3,c4]@2 ~@2 [f3,a3,c4]@2 ~@2 [f3,a3,c4]@2 ~@2 [f3,a3,c4]@2 [f3,a3,c4] ~", // F
  B: "[f3,a3,d4]@2 ~@2 [f3,a3,d4]@2 ~@2 [f3,a3,d4]@2 ~@2 [f3,a3,d4]@2 [f3,a3,d4] ~", // Dm
  C: "[g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] ~ [g3,bb3,d4] ~", // Gm
  D: "[g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~", // C
  E: "[f3,a3,c4]@2 ~@2 [f3,a3,c4]@2 ~@2 [f3,a3,c4]@2 ~@2 [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  F: "[g3,bb3,d4]@2 ~@2 [f3,g3,bb3,d4]@2 ~@2 [g3,bb3,d4]@2 ~@2 [g3,bb3,d4] ~ [g3,bb3,d4] ~", // Gm Gm7 Gm
  G: "[f3,a3,db4,d4]@2 ~@2 [f3,a3,d4]@2 ~@2 [f3,a3,d4]@2 ~@2 [f3,a3,d4]@2 [f3,a3,d4] ~", // Dm
  H: "[g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4]@2 [g3,c4,e4] ~", // C
  I: "[f3,a3,c4]@2 ~@2 [f3,a3,c4] ~@3 [f3,a3,c4]@2 ~@2 [f3,a3,c4] ~@3", // F
  J: "[f3,a3,db4,d4]@2 ~@2 [f3,a3,d4]@2 ~@2 [f3,a3,d4]@2 ~@2 [f3,a3,d4] ~ [f3,a3,d4] ~", // Dm
  K: "[g3,bb3,d4]@2 ~@2 [g3,bb3,d4] ~@3 [g3,bb3,d4]@2 ~@2 [g3,bb3,db4,d4] ~ [g3,bb3,d4] ~", // Gm
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.6)

// chords · acoustic guitar steel · "Accoustic Guitar (steel)"
const acoustic_guitar_steel_2 = note(`<
  ~@17 A@2 B@2 C@2 D@2 ~@8 A@2 B@2 E@2 F@2 ~@8 A@2 B@2 C@2 D@2 ~@8 A@2
>`.pickRestart({
  A: "[a3,c4,f4]/2", B: "[[a3,d4,f4]@31 ~]/2", C: "[[bb3,d4,f4]@15 ~]/2", D: "[[c4,e4,g4]@15 ~]/2",
  E: "[[bb3,d4,f4]@31 ~]/2", F: "[[c4,e4,g4]@31 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.4)

// bass · acoustic bass · "Accoustic Bass"
const bass_2 = note(`<
  ~@5 A B C D A E C F G E C H I J K L M N O P G E Q R A E Q H J@2 K S N@2 O T U E C F G E C H I J K L M N O P G E Q R V
  E Q H W ~
>`.pickRestart({
  A: "f2@2 ~@10 f2@3 ~", B: "d3@2 ~@10 d3@3 ~", C: "g2 ~@5 g2 ~", D: "c3@2 ~@10 c3@3 ~", E: "d3 ~@5 d3 ~",
  F: "c3 ~@5 c3 ~", G: "f2 ~@5 f2 ~", H: "c3 ~@7", I: "f2@5 ~ a2 ~ c3@4 a2@2 c3@2", J: "f2@6 a2 ~ c3@4 a2@2 c3@2",
  K: "f2@6 a2 ~ d3@4 a2@2 d3 ~", L: "f2@6 a2 ~ d3@4 a2@2 d3@2, ~@14 db3 ~", M: "g2@6 bb2 ~ d3@4 bb2@2 d3@2",
  N: "g2@6 bb2 ~ d3@4 bb2@2 d3 ~", O: "c2@6 e2 ~ g2@4 e2@2 g2@2", P: "c2@2 c2@2 d2@2 e2 ~", Q: "g2@2 ~@10 g2@3 ~",
  R: "c3@2 ~@10 c3 ~ c3 ~", S: "f2@6 a2 ~ d3@4 a2@2 d3@2", T: "c2@3 ~ c2@4 d2@3 ~ e2@2 ~@2", U: "~@12 f2@3 ~",
  V: "f2@3 ~@9 f2@3 ~", W: "f2@3 ~@5",
})).s("gm_acoustic_bass").gain(0.6).pan(0.6)

// other · tenor sax · "Baritone Sax"
const tenor_sax = note(`<
  ~@5 A B C D ~@8 E F E G@2 H I ~ J H K F J H K F E L E H M H I ~@9 E F E H M H I ~ J H K F J H K N@2 ~
>`.pickRestart({
  A: "f4 ~ f4 ~ f4 e4 f4 e4", B: "d4@2 ~@2 d4@2 ~@2 d4@2 c4@2 d4@2 c4 ~",
  C: "bb3@2 ~@2 bb3@2 ~@2 bb3@2 a3@2 bb3@2 d4 ~", D: "c4 ~ c4 ~ c4 ~@3", E: "f3@3 a3", F: "c4",
  G: "[d4@17 g3@11 bb3@4]/2", H: "d4", I: "c3@3 e3", J: "f3", K: "g3", L: "c4@15 ~", M: "g3@3 bb3", N: "[c4@5 ~@3]/2",
})).s("gm_tenor_sax").gain(0.8).pan(0.4)

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

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@65>").gain(0.56)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B C A@2 D A C A C E C E B C F C G E A@3 C B C A@2 D C A C F C G E A@3 C@2 A C E C E B C F C G E A@3 C B C A@2 D
  C A C H ~
>`.pickRestart({
  A: "x!8", B: "x!5 ~ x!2", C: "x!3 ~ x!4", D: "x!3 ~ x!3 ~", E: "x!3 ~ x ~ x!2", F: "x!7 ~", G: "x ~ x!3 ~ x!2",
  H: "x!3 ~@5",
})).gain(0.72)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@3 A B ~@2 B ~ B ~ B@4 A B ~ B C B ~@4 A B ~@2 B@2 ~ B ~ B C B ~@4 B ~ B@4 A B ~ B C B ~@4 A B ~@2 B@2 ~ B ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@4", C: "~ x ~@3 x ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A ~@4 B ~ B ~@2 C ~@2 B ~@3 D ~@4 A ~@3 C ~@2 B ~@3 D ~@3 B ~ B ~@2 C ~@2 B ~@3 D ~@4 A ~@5
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@9 x ~ x ~@4", D: "~@3 x ~@4",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@14 B ~@15 B ~@15 B ~@17>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.72)

stack(
  piano, bass, acoustic_guitar_steel, acoustic_guitar_steel_2, bass_2, tenor_sax, kick, rim, snare, hihat, hihat_soft,
  open_hat, crash
)