WACM: Day 8

Accomplishments

  • Played around extensively with neural network/genetic algorithm combination
  • Developed test for GA convergence
  • Decided that the genetic algorithm was NOT converging with neural net fitness functions...abandoned the whole darn project and got a new idea
  • Finished L-system engine

Well, my new direction is a much simpler one.  Basically, I'm going to try to use L-systems for percussive pattern generation.  In other words, an L-system drummer.

WACM: Day 7

Accomplishments
  • Began neural network engine

Notes from Cope on EMMY

  • Lazy voice-leading for high parts
  • Separate composition into “beats”
  • Make vertical lexicons
  • Look at next lexicon, use voice-leading
  • Essentially a first-order Markov analysis of grouped “lexicons”
  • To give the impression of higher-level structure
    • Put more information into lexicons
    • Contextual information (where is the lexicon supposed to go?)
  • Roughly 2% of EMMY is actual music-composition related

WACM: Day 6

Accomplishments
  • Finished and tested genetic algorithm engine
  • Reformatted the compositional data structure into a "general property list" that can be mutated by the GA
  • Ran some initial tests on composing using individuals of a random genetic population

Something Paul said today really struck me.  He talked about "transforming" rhythmic space such that durations and onsets map to a nonlinear space.  The space can be chosen in such a way as to create the impression of some degree of rhythmic coherence even in the presence of random input data.

Essentially, consider snapping time and duration to a nonlinear grid.  I imagine that this could have interesting consequences for plugins like Fraccut that would be conducive to such paradigms.

WACM: Day 3

Accomplishments

  • Wrote a library for turning a bitmap into a composition (sonification project)
  • Added some more functions to stream-line the composition process
    • An entire piece can be made now by calling (composition->MIDI)
  • Began work on random streams

The sonification project turned out really well.  Was very happy with results and could clearly hear the picture of the galaxy as intended.  Things are going really well; now it's time to start hammering on the final project.

WACM: Day 2

Accomplishments

  • Wrote libraries to handle more specific music functions and data structures, including
    • Progressions
    • Chords
    • Fractal Spaces
    • Fractal Blocks
  • Learned more LISP
  • First MIDI output from LISP (very basic random patterns)

I think I'm headed down the fractal cutting road.  After all, Fraccut has served me well for many, many compositions, so why not reuse these techniques in the new LISP library?

WACM: Day 1

Accomplishments

  • Learned LISP
  • Wrote a basic library for handling generic music data structures like patterns, notes, etc.

Well, it's finally here.  I got to meet David Cope today, who has been discussed in many previous blog posts.  I've used several of his books for inspiration in my work in algorithmic composition.  I look forward to a productive two weeks...I know they'll be what I make of them, nothing more, nothing less, so it's time to kick the programming into high gear like never before.

Selective Erosion of Heightmaps Using Density Maps

In an improvement on the original heightmap erosion algorithm, which (roughly) approximates fluvial erosion in terrains, I have incorporated a density map as an input to the erosion shader.  This is almost identical to the algorithm explained several months ago, though it seems to work far better and produces very interesting results.

Given a simple Perlin noise density maps, interesting effects can be achieved in the final, eroded terrain:

The left map represents the heightmap, whereas the right image represents the terrain density map.  It is easy to see that parts of the height map have been severely eroded; while other parts have stayed intact (white areas on the density map correspond to areas of high terrain density where erosion will have less of an effect).  The effect in this case seems rather unrealistic, since real terrains would not erode in such a non-uniform way.  The threshold values in the shader, however, can be used to control the degree to which the density map influences the erosion factor of the shader.

With more tweaking, I believe that this algorithm will be able to produce some very interesting features in terrains, as well as add a heterogeneous feel to them.

Procedural Trees, Part 1

Finally, after having thought about the automatic creation of tree models for many months, I implemented my ideas with the help of XNA and HLSL.  The results were absolutely fantastic, far better than I could have imagined:

Yes, admittedly, it's just a trunk.  But it sure is a good-looking trunk!

The trunk is actually just a basic primitive that's being displaced in the vertex shader in real time, which means that the tree model can be changed almost instantly by making changes to the handful of maps that are controlling the vertex shader.  As with terrains, I can generate trees - well, tree trunks, at least - nearly instantly.

The next step is to hammer out branches and leaves.  Considering how well the trunk turned out, I'm confident that the rest of the procedural tree system will turn out nicely!

Long live procedural content.