ChromoRhythm is a new generative drum module that combines many of the recent ideas I've had surrounding percussive generation. One of the main features of ChromoRhythm will be the genetic (chromosome-based) configuration storage system, which will facilitate some degree of dynamic mutation of the drum styles. Though I have yet to decide how the evolutionary fitness function will be implemented and whether it will be subjective or objective, I believe that the ability to convert information between chromosome-like data structures and configuration variables will enable a degree of variability unknown to previous drum modules.
Naturally, ChromoRhythm will be measured against GGrewve, since GGrewve is the current standard in drum pattern generation (and an excellent standard, at that). Though I doubt that ChromoRhythm will ever be able to surpass GGrewve in human-feeling beats, the new data paradigm employed by the engine should allow it to trump GGrewve in terms of dynamic playing and variability of style.
Many of the details of Chromo are still being worked out. Here are a few things that are already coded or conceptually established:
- DNA data structure consists of a long string of numbers
- Internal function converts between DNA strings (for use with the generalized XIAS evolutionary engine) and global configuration variable states
- Engine uses a "base style" for each individual drum, as specified by the DNA
- Engine layers "variations" on top of the base style for each individual drum, as specified by the DNA
- Engine adjusts playing dynamics based on movement intensity as well as coordination accenting instructions; DNA specifies the degree and exact parameters of the dynamics
One of the main questions upon which the development of ChromoRhythm is hinging concerns the fitness function. I see two ways of doing it:
Objective Fitness Function - ChromoRhythm takes a drummer, randomly mutates the DNA of the drummer, then runs a fitness function on the mutations. The fitness function is the first-ever "ear module" employed in the development of mGen, and mimics a user that listens to the beat. The fitness function assigns points based on how well the drummer lines up with the coordination instructions, how effectively the dynamics change the style, and how pleasing the beat is in general. The XIAS evolutionary engine then evolves the drummer mutations to the next generation and repeats the process for a set number of generations (or, alternatively, until the population reaches a specified mean fitness value).
Subjective Fitness Function - ChromoRhythm creates a pool of potential drummers to begin with. The user selects an option in the interface that makes Chromo generate a channel for each potential drummer during the composition of a single piece. The user then listens to the piece, muting all but one channel, and assigning points to the drummers based on how much he or she likes the style. The XIAS evolutionary engine then evolves the drummer pool, as detailed above.
One may see that these two methods have very little in common - in fact, the first details a method of evolving substyles of a single drummer configuration, while the second involves evolving overarching drummer configurations. Perhaps, then, both of these methods can be combined.
Needless to say, the logistics of implementing a genetic algorithm aren't at all simple. Conceptualizing the process takes far longer than actually implementing it. Determining what exactly should be evolved, how populations should be treated, which individual should be played, and how fitness points should be assigned will all heavily affect the output of ChromoRhythm.