Introduction to…
So, I have completed the prototype for my "HyperGenetic Step Sequencer." I know, it sounds like it's straight out of the late nineties - I should come up with a better name. Anyhow, that said, I'll explain a little something about my objectives and methodologies. I'll also explain the shortcomings of the current version and how I intend to resolve those shortcomings. Finally, you'll find some source code to download, examine and use if you are so inclined.
Objectives
- To create a method of moving from one sequence to another sequence (which may or may not be unique from the first) in the full employ of random events.
Why? Good question. Basically, in popular music when an artist (or DJ - they are distinct) wants to move from one sequence on a drum machine or a record - whatever - he/she/it has a couple of options: program a transition, cross-fade or simply splice. Kinda dull. I wanted to create a method of transitioning between two sequences without having to program the transition with out using cross-fades. I also enjoy relinquishing creative control to randomness - it makes these sort of blissful accidents. After all, that's most of what we do as humans: distinguish between signal and noise. Make sense? Put another way, we are explorers and being forced to listen to something we didn't create also forces us to ask ourselves if there is something in this foreign space that we enjoy. I suppose "force" is a bit strong of a choice of words. Not everyone is daring. Some people would prefer to be spoon-fed corn syrup.
- Make the step sequencer easy to use - so easy that it is a valuable tool to musicians during live performance.
Frankly, this is harder (in my humble opinion) than the aforementioned. How does a performer interact with this system? How does a performer use the system to create a "piece"? Sigh. I think I have come to the conclusion that I have no idea and that I should assume that the performer is going to intentionally find limit cases to establish his or her or it's particular brand through the employ of the system I have created. That's an assumption. Here's another: I assume that by making the "hooks" transparent enough and the error handling robust enough and the documentation clear enough the end user will be thrilled by how many entry points that I have granted them and how easy and intuitive it is to use. Somewhere on the very distant horizon a scoff is heard.
Methods
Maybe this is a good time to explain why I call the step sequencer "Hypergenetic". Well, first and foremost it employs genetic algorithms. That's an easy enough idea on its own. For those of you who aren't familiar with genetic algorithms, here's a good place to start.
Secondly, for lack of better terms, the genetic algorithm both "devolves" the provided sequences (the process by which data is introduced, manipulated and removed from the prescribed starting pattern so as to affect data degradation) and "evolves" the degraded sequence (the process by which a indeterminately random pattern is manipulated to reconstitute the prescribed ending pattern.) This gives a merit to the term "Hypergenetic" - it's an extension and implementation of genetic algorithm methodologies. I'm confused too.
Moving along, acting inline with the sagely words of Dr. Chip Levy of the Levy Laboratory of Systems Neurodynamics at the University of Virginia
Nature knows best
I chose to further bastardize and overload the biological metaphor by basing the systems data degradation methodologies loosely upon the way that error is introduced into DNA via the DNA/RNA transcription process.
But, alas I could spend all day describing the process, and at some point I should give more detail. In the mean time I am a programmer and my efforts are probably better spent buried in a script rather than writing this tome of an explanation. You will of course forgive me, cousin.
Short comings of the current version
Version 1.0 (Alpha)
- Parameter setting are extremely sensitive.
- The process is a command line utility
- The process is computationally intensive
- The scripts are prototyped in PHP (what can I say, it's a quick and dirty language.)
Development goals for the upcoming versions
- Compiled language buildout (likely C++, perhaps Java)
- Parameter Automation: Multi-dimensional regression function to dynamically determine parameter settings
- Max/MSP interface
- Code refactoring. It's organized strangely.
Documentation
- Technical Documentation
- Parameter Space Exploration
EardrumNYC