Variating Drummer Screenshots

Well, as they say, the proof is in the pudding. So here's proof that I've been doing more than just screwing around with senseless code for the past week. Most of these interfaces were designed this week alone. All of them are 100% original and all except the last are fully functional.

What exactly do all these do, you might ask? Basically, they all contribute to building a random yet intelligent drummer for my random music program. You say, "well it's clearly not random if you have to go through and fill out five flipping configuration panels." I say, true. But who wants to listen to atonal music? Or the equivalent as far as percussion is concerned? Not I.

Building music? Takes time. Building completely random (atonal) music? Takes less time. Building good random music? Takes exponentially more time than either of the aforementioned. Random, to me, doesn't mean give the computer a few instructions and listen to a symphony come alive before your eyes. Magic is for Walt Disney. This is hard, tedious, computer science.

And thus concludes my first rant on the nature of the complexity of good-sounding randomness. Now please, enjoy the pretty pictures (click to enlarge).

Infuriating Drumming

I'm continuing to improve upon the Variating Drummer plugin. I need to finish several things, the main one being the variation algorithm editor. Variation algorithms form the basis of the drummer's ability to give the style random twists. Unfortunately, building an editor for them is the most difficult challenge in terms of graphical user interface programming. I'm having a lot of trouble figuring out how I want the editor to look.

I also need to implement some sort of probability mapping for measures, so that the drummer will know when to apply fills and variations more effectively. For example, one does not usually do fancy rhythms during the first measure of the verse. Instead, one would wait until the second or, more often, the fourth, until spicing up the beat. It helps listeners keep track of measures, just like a metronome that highlights every fourth beat.

Finally, I need to develop some way to do fills. Right now I'm thinking that fills will just be special variation algorithms. I don't know. Right now I need to work on the variation algorithm editor. I'll post pictures later.

Intelligent Drumming

Today I worked on the Variating Drummer plugin for mGen. Finally I have managed to pull together all the pieces of this miniature framework into song demo in which the drummer demonstrated the ability to switch drum styles based on the intensity of the song!

So what does that mean?

Well, naturally, drummers should dynamically adjust their playing styles based on how intense the song is at any given point. For example, drums should play under the melody during verses but crank up the volume during choruses. The problem, however, is that we're not talking about volume alone. Fancier fills and better techniques constitute some of the aspects of higher intensity drumming.

Although the plugin is far from finished, this is an encouraging demonstration of the power of such a complex plugin.

Progress Report #3

This week, since I worked mostly on the coding aspect of my thesis, cranking out over half a thousand fresh lines of code in the music generating program, I encountered very few sources. Nonetheless, they helped.

  • Ishkur's Guide to Electronic Music
  • I was very excited to find this site...it's the most detailed map of electronic subgenres I've ever encountered! Not to mention that it has descriptions and multiple samples for each subgenre! Watch out though, Ishkur seems to have somewhat of a foul mouth. Still, his information is invaluable.

  • Mr. Hubbard
  • I had a brief chat this week with Mr. Hubbard about my program. This mainly occurred thanks to Matthew Saltz' insistence on me doing so. Since he was pressed for time, I just sat down and showed him a brief overview of the program. He said he thought it had great marketing potential and that there were a lot of places I could go with the idea. I'll be waiting for my next chance to talk to him about algorithmic composition in general.

Purpose Statement
In a broad exploration of algorithmic composition, I will study the creative aspect of music and methods for emulating human creativity. In the end, I will demonstrate my findings and own creative ability by building a working computer program to generate new, original compositions.

Research Questions
I'm still happy with the research questions from last week, I don't think any revisions are appropriate yet. They are guiding me towards the right persuits.

Reflecting on The Week
As I stated above, almost all of this past week was dedicated to raw coding. I started several new plugins including a Trance Progression module, a Trance Bass module, and a Trance Strings module. I'm developing them simultaneously to try to get a basic trance song underway. I'm still feeling great about my topic. I know it's going to be messy. It's going to be a lot more work than I expected and probably more than I expect even now. It's going to be massive. In the beginning I thought I'd have a very workable program by the time I hit ten thousand lines of code. Now I'm thinking at least fifty thousand before I start seeing nice results. Ten thousand seems like child's play. And you don't have to be a programmer to appreciate the magnitude of fifty thousand lines. Open up notepad and see how far you get hitting enter as fast as you can. Now imagine actually typing substantial, logical computer operations on each line. Ouch.

Still, I'm ready to work. I love music. I love computers. I'm clearly on the right track. I'm a firm believer that anything and everything can be accomplished when broken into small, tractable pieces. I sure hope I'm right!

Goals for This Week
(Sorry if these are too technical...there's really no way around that!)

  • Finish the Variating Drum plugin
  • I've been working on a simple drum plugin for mGen that works by taking basic drum patterns and applying random variation algorithms to the patterns to create dynamic drum beats.

  • Develop a Melody Method
  • While I haven't workeda huge amount on any part of mGen yet, melody is the only area that I literally have not touched. And considering that it's arguably the most important part of any song, I need to start thinking about methods for generating melody.

  • Generate a VERY Basic Trance Song
  • Shoot for the stars, hit the moon, right? This goal is probably very unrealistic, even with the lovely qualifiers in the goal statement. But if I could get mGen to crank out anything even faintly resembling trance by the end of this week, I think that would more or less solidify everything. I would not longer be running on faith that my six thousand lines of code thus far are going to magically come together and make sweet music. I need to hear the proof!

Trance: Bass and Progression

Today I worked on a generative module for trance-style bass and a progression module for trance-style chords. The bass is relatively simple, most trance just uses a heavy octaving bass that holds a steady beat. As for the progressions, trance usually keeps it pretty simple and almost always in a minor key.

I've got some really simple results out of the bass and progression modules, culminating in a really simple cheesy piece that inspires the urge to bang one's head repeatedly against a brick wall to the beat of the bass. Nevertheless, progress is progress. You have to start somewhere.

Trance

I've always been a fan of trance. It's the kind of music that really takes the idea of "beauty in simplicity" and makes it work. Good trance mixes separate your mind from your body and engulf you in emotions. The sound waves pulse rhythmically and expectedly, usually with a constant heavy kick drum and bass. And yet, in the simplicity of these waveforms lies the capability to enthrall. I've picked up my old trance mixes and started listening to them again.

Unfortunately, I've underestimated the genre. That's not to say that I should change its position on the flowchart. It's just...the task of recreating the human ability to capture emotions. Wow. Wish me luck.

Genre Flowchart

I created a very condensed list of genres of music that I think represent most of the musical complexity spectrum. Obviously I do not expect extremely complex results in the early stages of the program. In order to stay motivated, I need to see results, which means I'll need to tackle the 'easier,' or less complex genres first. Though the chart I'm sure does a terrible injustice in its descriptions of the genres, it represents a rough road map for my journeys into algorithmic composition.

The chart is ordered with descending complexity, with the most complex genre at the top and the least at the bottom. I'll be starting at the bottom and working my way up.

Progress Report #2

At this point, I'm pretty much locked into a creative thesis dealing with algorithmic composition.

So far I've had no trouble finding sources on the topic. I am keeping a list of all the sources I have found at the bottom of the blog. Here's the current list:

Inquiry Statement
I would like to know more about what elements make up good music and how a computer can be taught to understand and recreate all the aspects required for a good composition.

Research Questions

  • What basic components should I break composition into to alleviate the task of random generation?
  • Which methods of algorithmic composition should I focus on?
  • What should my end goal be? Is it a realistic goal to create a full composition toolkit in a single year?
  • What practical use, if any, would such a toolkit have?
  • Would people oppose the idea of random music generate with arguments such as "it takes the soul out of music"?

Reflection
I have spent most of this week researching methods of algorithmic composition and working on programming the composition toolkit. I have found lots of helpful resources and I feel that I am ready to dive right in to pioneering the methods of composition. I'm feeling confident that I'm going to really love my topic when I start getting into the gritty details and the real work. At the moment I feel that my thesis is going to be weighted more towards the creative side than the research side. I'm already well acquainted with most of the methods of composition, and I'm really much more interested in developing my own and putting them to use than reading about theoretical nonsense that hasn't even been implemented. Less words, more action!

Where is it going?
As of right now, I have very ambitious goals for my thesis. By the time it is completed, I would like to have created my own original program capable of producing completely original compositions with a high amount of variety.

Questions and Code

Began thinking of some questions to bounce off experts. I'm going to try to talk to Mr. Taranto or Mr. Hubbard, or maybe both. Here's what I've come up with so far:

Do you think computers could be used to create full original compositions?
Do you think that there's an objective way to judge, at least to some degree, the quality of a song?
Would such a computer program have widespread applicability? Is there a market or at least an audience for it?
Is music rule-based enough for algorithms to recreate the creative process of humans? Or is there too much 'soul' involved?

I also worked some on the program.

Neural Networks - Emulating Human Creativity

Upon finding the article Algorithmic Composition and Reductionist Analysis: Can a Machine Compose? I immediately got excited. The author gives a great overview of algorithmic composition and details his own endeavors into the field.

In particular, the author touches on the concept of heuristic algorithms - including both genetic algorithms and neural networks - that slowly approach a desired solution by having a human evaluator determine the fitness of the system. I found the following quote astounding:

"A researcher trained a neural network to recognize makes of car from a photograph, and he decided to look inside the network at the individual neurons, rather than regarding it as a "black box" that somehow worked for some incomprehensible reason. He found that certain areas of the network were specializing into recognizing certain features of the car, and, by introducing a level of random "noise" into the network, got the network to design its own cars."

And finally, the author's take on algorithmic composition and creativity:

"I have always felt very uneasy about throwing any musical ideas away, as it would amount to destroying something that I think is unique. But, if computer composition took over to a degree, would the 'preservation people' be content with the idea that the music exists, somewhere, within the set of possibilities? May I delete Clara Empricost's symphony with impunity, once it has generated it? Should I preserve the algorithm and the random number seeds somewhere? An interesting set of problems."