Strudelify
Hello Mary Lou cover art

Hello Mary Lou

Hello Mary Lou

Ricky Nelson

KeyG majorTempo196 bpm
0:00/0:00
// Hello Mary Lou — Ricky Nelson
// 196 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(196/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B A B A C D E A C F G A C H I J K L M A C N E A C O G A C N E C G P M A C D E A C F G A C H I J K L M A C D E A
  C F G A C H I J K L M A C N E A C O G A C N E C G P M A C D E A C O Q A C H I J K L C J K L C J K L R ~@8
>`.pickRestart({
  A: "g2 d2", B: "g2@3 d2@3 f#2@2", C: "g2@3 d2@3 g2@2", D: "c2@3 e2@3 g2@2", E: "c2@3 e2@3 f#2@2", F: "d2@2 a2!2",
  G: "d2@3 e2@3 f#2@2", H: "b1@3 f#2@3 b2@2", I: "e2@3 b2@3 e2@2", J: "a1@3 e2@3 a1@2", K: "d2@3 a2@3 d2@2", L: "g2 c2",
  M: "g2 d2 e2 f#2", N: "c2 g2", O: "d2 a2", P: "g2@3 c2@3 c2@2", Q: "d2@2 f#2 e2@3 f#2@2", R: "g2 d2 g2@2",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@2 A B C B C B D E C B F@2 C B G H I F J K C B D E C B F@2 C B D E C F L M C B D E C B F@2 C B G H I F J K C B D E C
  B F@2 C B G H I F J K C B D E C B F@2 C B D E C F N M C B D E C B F@2 C B G H I F J K I F J K I F J O@8 ~
>`.pickRestart({
  A: "~@4 [d4,g4,b4] ~@2 [d4,g4,b4] [d4,g4,b4]@4 [d4,g4,b4] ~@2 [d4,g4,b4]", // G
  B: "[e4,g4,b4]@4 [e4,g4,b4] ~@2 [e4,g4,b4] [d4,g4,b4]@4 [d4,g4,b4] ~@2 [d4,g4,b4]", // Em G
  C: "[d4,g4,b4]@4 [d4,g4,b4] ~@2 [d4,g4,b4] [d4,g4,b4]@4 [d4,g4,b4] ~@2 [d4,g4,b4]", // G
  D: "[g3,c4,e4]@4 [g3,c4,e4] ~@2 [g3,c4,e4] [g3,c4,e4]@4 [g3,c4,e4] ~@2 [g3,c4,e4]", // C
  E: "[a3,c4,e4]@4 [a3,c4,e4] ~@2 [a3,c4,e4] [g3,c4,e4]@4 [g3,c4,e4] ~@2 [g3,c4,e4]", // Am C
  F: "[f#3,c4,d4]@4 [f#3,c4,d4] ~@2 [f#3,c4,d4] [f#3,c4,d4]@4 [f#3,c4,d4] ~@2 [f#3,c4,d4]", // D7
  G: "[f#3,b3,d#4]@4 [f#3,b3,d#4] ~@2 [f#3,b3,d#4] [f#3,b3,d#4]@4 [f#3,b3,d#4] ~@2 [f#3,b3,d#4]", // B
  H: "[b3,e4,g4]@4 [e4,g4,b4]@2 ~ [e4,g4,b4] [b3,e4,g4]@4 [b3,e4,g4] ~@2 [b3,e4,g4]", // Em
  I: "[a3,c#4,e4]@3 ~ [e3,a3,c#4] ~@2 [e3,a3,c#4] [e3,a3,c#4]@4 [e3,a3,c#4] ~@2 [e3,a3,c#4]", // A
  J: "[b3,d4,g4]@4 [b3,d4,g4] ~@2 [b3,d4,g4] [c4,e4,g4]@4 [c4,e4,g4] ~@2 [c4,e4,g4]", // G C
  K: "[b3,d4,g4]@4 [b3,d4,g4] ~@2 [b3,d4,g4] [b3,d4,g4]@4 [b3,d4,g4] ~@2 [b3,d4,g4]", // G
  L: "[b3,d4,g4]@4 [b3,d4,g4] ~@2 [b3,d4,g4] [g3,c4,e4]@4 [g3,c4,e4] ~@2 [g3,c4,e4]", // G C
  M: "[g3,b3,d4]@4 [g3,b3,d4] ~@2 [g3,b3,d4] [g3,b3,d4]@4 [g3,b3,d4] ~@2 [g3,b3,d4]", // G
  N: "[b3,d4,g4]@4 [b3,d4,g4] ~@2 [b3,d4] [c4,e4]@4 [g3,c4,e4] ~@2 [g3,c4,e4], ~@7 g4@5 ~@4, ~@8 g3 ~@7", // G Bm C
  O: "[[b3,d4,g4] [a3,d4,f#4] [b3,d4,g4]@30]/8", // G D G
})).s("gm_acoustic_guitar_nylon").gain(0.18).pan(0.7)

// chords · banjo
const banjo = note(`<
  ~@2 A B C B C B D E F B G@2 C B H I J K L B C B D E C B G@2 C B D E C G L B C B D E F B G@2 C B H I J K L B C B D E F
  B G@2 C B H I J K L B C B D E C B G@2 C B D E C G L B C B D E F B G@2 C B H I J K L B J K L B J K L M@8 ~
>`.pickRestart({
  A: "~@4 [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3]", // G G5 G G5 G G5
  B: "[d3,g3,b3] ~@3 [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3,b3] [d3,g3] ~@2 [d3,g3,b3]", // G G5 G G5 G
  C: "[d3,g3,b3] ~@3 [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3]", // G G5 G G5 G G5
  D: "[c3,e3,g3] ~@3 [c3,e3,g3] ~@2 [c3,g3] [c3,e3,g3] ~@2 [c3,g3] [c3,e3,g3] ~@2 [c3,g3]", // C C5 C C5 C C5
  E: "[c3,e3,g3] ~@3 [c3,e3,g3] ~@2 [c3,g3] [c3,e3,g3] ~@2 [c3,e3,g3] [c3,g3] ~@2 [c3,e3,g3]", // C C5 C C5 C
  F: "[c3,e3,g3] ~@3 [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3] [d3,g3,b3] ~@2 [d3,g3]", // C G G5 G G5 G G5
  G: "[d3,f#3,a3] ~@3 [d3,f#3,a3] ~@2 [d3,f#3,a3]!2 ~@2 [d3,f#3,a3]!2 ~@2 [d3,f#3,a3]", // D
  H: "[f#2,b2,d#3] ~@3 [f#2,b2,d#3] ~@2 [f#2,b2] [f#2,b2,d#3] ~@2 [f#2,b2] [f#2,b2,d#3] ~@2 [f#2,b2]", // B B5 B B5 B B5
  I: "[b2,e3,g3] ~@3 [b2,e3,g3] ~@2 [b2,e3,g3]!2 ~@2 [b2,e3,g3]!2 ~@2 [b2,e3,g3]", // Em
  J: "[a2,c#3,e3] ~@3 [e2,a2,c#3] ~@2 [e2,a2,c#3]!2 ~@2 [e2,a2,c#3]!2 ~@2 [e2,a2,c#3]", // A
  K: "[a2,d3,f#3] ~@3 [a2,d3,f#3] ~@2 [a2,d3,f#3]!2 ~@2 [a2,d3,f#3]!2 ~@2 [a2,d3,f#3]", // D
  L: "[d3,g3,b3] ~@3 [d3,g3,b3] ~@2 [d3,g3] [c3,e3,g3] ~@2 [c3,g3] [c3,e3,g3] ~@2 [c3,g3]", // G G5 C C5 C C5
  M: "[[d3,g3,b3] ~@3 [d3,f#3,a3] ~@3 [d3,g3,b3]@120]/8", // G D G
})).s("gm_banjo").gain(0.12).pan(0.3)

// chords · banjo · soft notes
const banjo_soft = note(`<
  ~@2 A B A B A B C D A B ~@2 A B E ~@3 F B A B C D A B ~@2 A B C D A ~ F B A B C D A B ~@2 A B E ~@3 F B A B C D A B
  ~@2 A B E ~@3 F B A B C D A B ~@2 A B C D A ~ F B A B C D A B ~@2 A B E ~@3 F B ~@2 F B ~@2 F ~@9
>`.pickRestart({
  A: "~@7 b3 ~@3 b3 ~@3 b3", B: "~@7 b3 ~@4 b3 ~@3", C: "~@7 e3 ~@3 e3 ~@3 e3", D: "~@7 e3 ~@4 e3 ~@3",
  E: "~@7 d#3 ~@3 d#3 ~@3 d#3", F: "~@7 b3 ~@3 e3 ~@3 e3",
})).s("gm_banjo").gain(0.07).pan(0.3)

// drums · kick
const kick = s("bd").struct("<[x ~@4 x!2 ~]!2 [x!2]!67 [x!4] [x!2]!39 [x!3 ~] ~@8>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!51 [~ x!7] [~ x ~ x]!15 [~ x!3] [~ x ~ x]!39 [~ x ~@2] ~@8>").gain(0.37)

// drums · hihat
const hihat = s("hh").struct("<A@2 B@51 C ~@15 B D B@38 E ~@8>".pickRestart({
  A: "~ x ~ x", B: "x!8", C: "x", D: "~@2 x!6", E: "x!3 ~@5",
})).gain(0.37)

// drums · crash
const crash = s("cr").struct("<~@69 [~ x!3] x ~@38 [~ x] ~@8>").gain(0.37)

// drums · ride
const ride = s("rd").struct("<~@54 [x!8]!15 x ~@48>").gain(0.37)

stack(bass, acoustic_guitar_nylon, banjo, banjo_soft, kick, snare, hihat, crash, ride)

More by Ricky Nelson