Genetic Algorithm Chord Progression Generator – idea

I’d like to create a plugin for DAW’s and/or an iPhone app that generates chord progressions genetically. This would start with a large database of chord progressions from all types of music that I will accumulate.

Algorithm

  • initial population is a random selection of progressions from the database
  • initial crossover will happen at random from initial population without fitness to generate something for the user to listen to
  • fitness will be two parts: 1.¬†user will listen and rate how the progression sounds. 2. chord progressions adhering more closely to voice leading rules will receive higher fitness
  • mutation will happen to random parts of the population with a markov chain analysis of the entire database

User Interface

  • knobs: 1. evaluating fitness, 2. changing tempo of chord progression (playback), 3. changing rhythm (playback)
  • buttons: 1. evolving to next round (will evolve only once then loop new chord progression), 2. starting over with completely new population, 3. adding current chord progression to database (database evolves too)
  • screen for feedback

Here is a quick initial UI mockup:

chordGeneratorUI

Tone Row Generator

A tone row is an ordered set of musical pitches. Typically all 12 notes of the western chromatic scale are used, and notes will not repeat until all others have sounded. This generator creates tone rows where each interval between notes will be no larger than 5 semitones, and the same interval will not happen back to back. The generator lets you listen to each tone row as it is, or in polyrhythms with its retrograde inversion (the inverse of all the intervals, played backwards) and a low B pedal point (listen to an example). You can download the source code on github. In order for the sound to work you should make sure you have the IAC MIDI driver turned on on your computer, and a soft synth receiving MIDI via the IAC driver. The generator was made with Cinder.

Screen Shot 2013-09-29 at 9.35.04 PM

generatorWithNotes