Groove school


I'm working on my first Drummer component (that's one of the players in layer #3), and this is already bringing up some interesting questions and design challenges. The main questions so far:

  1. What is a groove?
  2. How to represent it in a program?
  3. What makes a *good* groove?

This could easily occupy my for the rest of my life, but since it's only a tiny part of Whole-Play, I'd better not aim for perfection. :)

Question 1 is a big one, probably without an answer too. But fun to explore! I've re-routed it to: what kind of groove do I want to generate? (at least to begin with). This immediately makes the task more manageable. And I can always design new Drummer components with different approaches to rhythm further down the track.

So I've designed a somehow basic system to describe and store grooves, and see how it develops. This is not trivial because it has to be generalized for any time signature and tempo, which I've managed to do at a basic level for now. Essentially a Groove stores a pattern for each pad (kick, snare, hihat...), defining the volume for that pad on each slice of time. During playback, a loop cycles through each slice of time, playing the pads that are active in that cycle. That probably sounds a bit abstract... Anyway, that's the answer to point 2 above, but the interesting question is number 3, "what makes a good groove?". And here's where I'm at, trying different elements and adjusting the representation I just described to allow for better outcomes. Some of the elements I'm playing with:

  • Accents on the hi-hat.
  • Finding "interesting" kick/snare patterns.
  • Adding ghost notes (again, how to make that interesting?).
  • Adding cymbals, fills...

The recurring issue is: how to make X interesting? Which brings me back again and again to question 3. My first approach was using randomness to generate variety, and somehow control the intensity/density. For example, with ghost notes, I had a 'ghostNoteProbability' indicator, 0 being none, 1 lots. When the groove played, ghots notes were added randomly (in certain positions), which would happen more or less often based on that probability. That worked a bit, but the result was not very "interesting", or maybe that's not the right word, maybe it wasn't very focused. Similar things happen with the other elements.

More recently I've been playing with the idea of defining an interest pattern, which marks important time slices in a pattern, and using that interest pattern to set the elements in the list above. This is bringing some interesting results, but now I've lost a bit of flexibilty, meaning that a running groove is more set in stone, and can't respond so dynamically to a changing environment. That's my next task: bringing back the flexibility I had with the more random approach, but still keeping the focus I've gained with the interest patterns. Hopefully without making the code too messy...

PS: huge thanks go to Mycle for his priceless feedback and ideas.


Add a comment

[ change image ]

PS: no links allowed in comment.

End of page. Back to page navigation.