Strudelify

Country Grammar (Hot ...)

Nelly

KeyG majorTempo158 bpm
0:00/0:00
// Country Grammar (Hot ...) — Nelly
// 158 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 176 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(158/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · fretless bass
const bass = note(`<
  A B@2 C A B D E A B@2 C ~@4 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B D E A B@2 C
  ~@4 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B D E A B@2 C ~@4 A B@2 C A B@2 C A B@2
  C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B D E A B@2 C ~@4 A B@2 C A B D E A B@2 C ~@4
>`.pickRestart({
  A: "d1@6 d2@8 g1 ~", B: "g1@3 ~@3 g1@3 ~@5 g1 ~", C: "g1 ~@3 g1 ~ g1@3 ~@7", D: "g1@3 ~@13",
  E: "~@4 g1 ~ g1@3 ~ g1 ~@5",
})).s("gm_fretless_bass").gain(0.41)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  A B C D E F C D A B C D ~@2 C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F C D A B C
  D ~@2 C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F C D A B C D ~@2 C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F C D A B C D ~@2 C D A B C D E F ~@10
>`.pickRestart({
  A: "~@14 c3 ~", B: "d3 ~@13 d3 ~", C: "~@10 d3 ~ d3 ~ d3 ~", D: "d3 ~@3 d3 ~ d3 ~@3 c3 ~ d3 ~@3",
  E: "d3 ~@11 c3 ~ d3 ~", F: "~@14 d3 ~",
})).s("gm_electric_guitar_muted").gain(0.41)

// other · electric guitar muted · soft notes
const electric_guitar_muted_2 = note("<~@166 A B C D A B ~@2 A B>".pickRestart({
  A: "~@10 d3 ~ d3 ~ d3 ~", B: "d3 ~@3 d3 ~ d3 ~@3 c3 ~ d3 ~@3", C: "~@14 c3 ~", D: "d3 ~@13 d3 ~",
})).s("gm_electric_guitar_muted").gain(0.15)

// other · music box
const music_box = note(`<
  ~ A B C ~ A B C ~ A B C ~ A B C ~@33 A B C ~ A B C ~ A B C ~ A B C ~@33 A B C ~ A B C ~ A B C ~ A B C ~@33 A B C ~ A B
  C ~ A B C ~ A B C ~ A B C ~@12
>`.pickRestart({
  A: "~@14 g7 [e7,f7]", B: "d7 ~@13 g6 [e6,f6]", C: "d6 ~@15",
})).s("gm_music_box").gain(0.5)

// other · music box · soft notes
const music_box_soft = note("<~@165 A B C ~ A B C ~ A B C>".pickRestart({
  A: "~@14 g7 [e7,f7]", B: "d7 ~@13 g6 [e6,f6]", C: "d6 ~@15",
})).s("gm_music_box").gain(0.19)

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

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

// drums · snare
const snare = s("sd").struct("<[~ x]!166 ~@10>").gain(0.41)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@166 [~ x]!10>").gain(0.15)

// drums · clap
const clap = s("cp").struct("<[~ x]!166 ~@10>").gain(0.41)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@166 [~ x]!10>").gain(0.15)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@169 [x!8] [x!4]!2 [x!8]!2 [x!4]!2>").gain(0.1)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@2 B C A@2 ~ B A@2 C@2 A@4 ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C A@2 B C A@2 ~ B A@2 C@2
  A@4 ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C A@2 B C A@2 ~ B A@2 C@2 A@4 ~@2 B C ~@2 B C ~@2 B
  C ~@2 B C ~@2 B C ~@2 B C ~@2 B C ~@2 B C A@2 B C A@2 ~ B A@2 C@2 A@6 C@2 A@2 ~ B A@2 D ~@5
>`.pickRestart({
  A: "~ x", B: "~ x!3", C: "x!4", D: "x!3 ~",
})).gain(0.2)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@2 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@23 B C D@4
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x!4", D: "~ x",
})).gain(0.1)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  A B ~@2 A B ~@2 A C ~@2 A C ~ C ~@32 A B ~@2 A B ~@2 A C ~@2 A C ~ C ~@32 A B ~@2 A B ~@2 A C ~@2 A C ~ C ~@32 A B ~@2
  A B ~@2 A C ~@2 A C ~ C A B ~@2 A B ~@2 A C ~@6
>`.pickRestart({
  A: "~@2 x!2 ~@4", B: "~@3 x ~ x ~@2", C: "~@2 x!2 ~ x ~@2",
})).gain(2.23)

// drums · triangle · soft notes
const triangle_soft = s("triangles:30").struct("<~@172 [~@2 x!2 ~@4] [~@2 x!2 ~ x ~@2] ~ [~@2 x!2 ~ x ~@2]>").gain(0.45)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~ A ~@3 A ~@3 A ~@5 A ~@33 A ~@3 A ~@3 A ~@5 A ~@33 A ~@3 A ~@3 A ~@5 A ~@33 A ~@3 A ~@3 A ~@5 A ~ A ~@3 A ~@3 A ~@6
>`.pickRestart({
  A: "~@3 x",
})).gain(2.23)

// drums · triangle · soft notes
const triangle_soft_2 = s("triangles:35").struct("<~@175 [~@3 x]>").gain(0.45)

stack(
  bass, electric_guitar_muted, electric_guitar_muted_2, music_box, music_box_soft, kick, kick_soft, snare, snare_soft,
  clap, clap_soft, hihat, hihat_soft, tambourine, tambourine_soft, triangle, triangle_soft, triangle_2, triangle_soft_2
)