Thursday, February 26, 2009

Meeting with Machover

Well today was the day! My meeting with professor Machover went better than I ever could have dreamed. We talked for about forty minutes. He listened to my thesis ideas and project, pointed out some resources and told me I was headed in the right direction. He liked the design plans I have so far and shared some words of wisdom on music. Being single-handedly responsible for the composition program HyperScore, he was also able to discuss the more technical side of algorithmic composition.

After a lengthy conversation with Tod, he was kind enough to walk me over to the office of his research assistant for the Hyperscore project, who took a great interest in my program after talking for a short while. I was able to get contact information from both Machover and his assistant, both of whom expressed a great interest in keeping up with the project and hearing how my endeavors go. Perhaps I can have some professional beta-testers for the program!

I'll post more specific details of everything later. Today was all a little surreal. I love my project.

Monday, February 23, 2009

Questions for Tod Machover

These probably need to be refined and I need to think of a few more, preferably more over-arching questions so I can get the most out of my time with Machover. Here's what I've got so far, in order of importance:

  • Given your experience with assisted-composition tools such as Hyperscore, what are your thoughts on completely autonomous randomly-generated music?
  • How, in your opinion, should one approach simulating the human's creative ability to compose?
  • Do you think there would be enough demand for a generative mp3 player to warrant serious commercial consideration?


Also, if anyone reads this post before Thursday and would like the chance to have a music-related question answered by a famous composer, theorist, and musician, comment back and I'll consider asking it if I have any time left after I pose my questions. Robin, Jules, this is your chance to find out whether the tritone really is the devil or not!

Tod Machover

Tod Machover
  • World-renowned composer and music technology innovator
  • Professor of Music and Media at the MIT Media Lab
  • Head of the Hyperinstruments group at MIT
  • Designed custom instruments for renowned artists including Prince and Peter Gabriel
  • Contributed to the development of Guitar Hero
  • Composed a huge number of pieces and worked on several operas
And the best part? I will be getting fifteen to thirty minutes of his time in three days! I can't wait to talk to him and hear what he has to say about algorithmic composition. He's a BIG deal. He's won numerous awards and is on the cutting edge of digital music.

I'm psyched out of my mind right now.

Sunday, February 22, 2009

Interval Analysis

In order to make a better progression module that retains both originality and coherence, I need a method for evaluating certain qualities of progressions. One can break progressions into individual chords for easier analysis. Even better, one can break chords down into intervals for the most specific analysis. Intervals, which are more specific than individual notes, yet more general than chords, provide a good basis upon which to judge qualities of chords and progressions with fair accuracy.

I made up three criteria for intervals and evaluated every interval in the minor key based on the criteria (which have values between one a five, inclusive). Higher mood values indicate a 'happier' feel while low mood values indicate a 'somber' feel. High suspense values indicate a sense of tension in the interval, while low values designate chords with greater stability. Low consonance values indicate a clashing of harmonics, which high values indicate a relatively consonant interval.

Below is the table of intervals and quality values I wrote down. 'Bad' intervals, or those with a consonance value of 1 have been marked in red.

Interval: Mood, Suspense, Consonance
1-2: 1,5,2
1-3: 2,2,5
1-4: 2,3,4
1-5: 3,4,4
1-6: 2,4,4
1-7: 2,3,2

2-3: 1,4,1
2-4: 3,2,3
2-5: 2,3,3
2-6: 2,5,1
2-7: 4,2,4

3-4: 3,4,2
3-5: 4,2,4
3-6: 5,1,5
3-7: 5,2,4

4-5: 3,4,2
4-6: 3,3,3
4-7: 4,3,3

5-6: 3,4,1
5-7: 4,2,4

6-7: 4,4,1

Friday, February 20, 2009

Markov Drumming Ideas

I need to create a list of statistical attributes that can be analyzed and linked to form a statistical Markov profile for drum styles. I also need to establish how attributes will be stored. Here are some ideas:

Format for statistical attribute: Node-(Trigger:Boolean Operator:Trigger...)=[Correlation],[Strength]

Examples
Snare-(Beat5:AND:CHatLast1)=26.73,2
Snare-(Beat5:AND:!CHatLast1:AND:ChatLast2)=53.9,4


The above attributes specify a few things. First, there is a 26.73% chance that a snare hit will directly follow a closed hi-hat hit on beat 5 (meaning the hi-hat hit falls on beat 4 and the snare hit falls on beat 5). Second, there is a 53.9% chance that a snare hit will follow a closed hi-hat hit by two beats on beat 5 provided that it does not directly follow a closed hi-hat hit (meaning the hi-hat hit falls on beat 3, beat 4 must not be filled by a hi-hat hit, and the snare hit falls on beat 5).

I think that these kinds of logical combinations will allow a thorough analysis of percussive styles.

Absolute Beat
The most basic trigger, this fires on a specific beat number.

Modulus Beat
Very similar to the absolute beat trigger, this trigger fires for each beat number computed modulus a certain divisor. In other words, it may fire every fourth beat, or every other beat, etc.

More on triggers later.

Thursday, February 19, 2009

Markov Drumming Ideas

The Problem: Given a Markov analysis module, particularly for percussion, analyzing pieces of different styles (or even a single piece with slight variations in style) and averaging them into a primary statistics file would cause the file to become a "soup" of conflicting styles. This mushy average would turn into a rather nasty output. It's like taking vibrant blue and green, both very nice colors when taken separately, and combining them to get a nasty brown.

Possible Solution: When analyzing pieces, create statistical profiles of each segment (on an individual measure, or maybe a 4-measure basis) and compare the divergence of the statistics. If the divergence measure surpasses a certain threshold (which the user may set), then the segments are treated as separate styles that use separate statistical profiles. If they don't diverge by much, then the statistics can safely be averaged and saved to the main statistical profile for that style. It's like averaging all the shades of red and all the shades of green separately, so as to avoid mixing to get brown. Furthermore, an overarching statistical profile for style transitions could be made so that the drummer knows how often Style A moves to Style B and when, based on the segmented analysis of each piece. In this way, the analysis could conceivable decipher and reproduce an entire sequence of Intro, Verse, Chorus, Verse, etc. without actually understanding what each part means, just knowing that the statistical profiles for each diverge and transition into each other in certain parts of the composition.

Tuesday, February 17, 2009

Music, the Brain, and Ecstasy

Music, the Brain, and Ecstasy
Chapter 4: Harmony
  • Harmony is essentially the "depth" dimension of music
  • Dissonance is greater between lower notes and it is for this reason that bass notes should be well-spaced
  • The effect or "feeling" of a chord depends mostly on its context within a larger harmonic progression, not solely upon the identity of the chord
  • Notes 1, 3, 4, and 5 in a scale tend to appear more in musical phrases, especially in positions of emphasis
  • "Triads are at the heart of the harmony we are accustomed to"
  • "Western music is built on variations of a few dozen standard progressions"
  • Harmony is all about offsets - relations between notes and chords, not the identity of individual members
  • A group of composers known as serialists, including Arnold Schoenberg, Béla Bartók, and Igor Stravinsky tried discarding tonal centers (thus effectively removing harmony), resulting in a kind of atonal music that few listeners could grasp and even fewer enjoyed
These constitute the notes I took on my reading today.

Monday, February 16, 2009

Saving & Loading

Although it might not seem likes a big step, the ability to save and load project data is pivotal in almost every program. Imagine having to always type an essay in a single sitting, and then having to retype it when you want to make corrections. We simple wouldn't be able to function efficiently without the ability to save and load.

Today I finished a basic saving/loading system that allows my program to save project files and load them again when the user wants. The system saves all instrument and composition data, including all the individual plugin configurations. It wasn't an easy task, but it works, and it makes testing everything a lot easier, since now I can simply make a save file that contains the configurations for all my testing instruments and use it over and over again.

Progress!

Sunday, February 15, 2009

Progress Report #6

Advisor
On Friday I met with Mr. Taranto, ran my ideas by him and filled him in on everything I was planning to do. He seemed very interested and impressed by the scope of the project. He said he'd gladly be my advisor. So I guess that's pretty much that as far as advisors are concerned! With my programming abilities and his musical expertise, I think we'll make a killer team.

Goals/Deadlines
Since I've not had good luck with setting abstract goals in the past, I'm going to set more manageable, concrete ones this week that I know I can achieve. In particular, I'd like to really get cranking on all the books I've ordered pertaining to my thesis, so that I can absorb knowledge to use in the creation of my program.
  1. Read through page 200 in Music, the Brain, and Ecstasy
  2. Read through page 50 in Sweet Anticipation: Music and the Psychology of Expectation
  3. Again, try to have something audible for the class to listen to for the next status seminar.

Goals 1 and 2 should be met by next Monday, if not earlier. Goal 3 should be met by the next status seminar.

So basically my week is going to involve a LOT of reading and absorbing information. I think they're reasonable goals that will help me move towards a greater understanding of music that will ultimately manifest itself in my programming.

Thursday, February 12, 2009

Contour and Arpeggiation

One of the easiest trends for brains to identify in listening to music is that of contour. Contour is the direction of a certain instrument in terms of pitch. For instant, walking your fingers up the keys of a piano would constitute an unbroken upwards contour. Contour is a simple way to create pleasant-sounding order in music. An arpeggio is the technical term for musically walking along a contour - that is, playing a continuous scale either up or down.

A simple arpeggio, notice the note is just increasing by a step each time. This pattern represents a simple upwards contour

I started writing a new plugin for my program that will focus on the orderly but random manipulation of contours to produce pleasing background patterns for music. I am starting with simple contours: up and down. I plan to experiment with nested contours, that is, contours within contours. It's easier to understand this graphically:

This time, the inner contour is increasing by two steps with each note and goes four notes before resetting. The outer contour, however, increases the starting position of the inner contour by a single step each time the inner contour finishes its four notes, then the whole process repeats with the inner contour's new starting position


Although this seems very simple on sheet music (and would seem even simpler in sound form), contour isn't quite so easy for computers to comprehend, especially with several layers of nested contours. I think, however, that creating a program that understands the manipulation of contours will allow a great variety of generated patterns that please the ear.

Monday, February 9, 2009

Renovations

I've completely deconstructed the program's main GUI over the past few days and am now in the process of redesigning it to be sleeker, more efficient, and more powerful all at the same time. It's starting to actually look like a real piece of software now. One of the problems with algorithmic composition is that it's so darn complicated. If I'm ever to get this thing going mainstream, users will need the interface to be intuitive and easy to use.

Thursday, February 5, 2009

Progress Report #5

Purpose Statement

In a broad exploration of algorithmic composition, I will study the creative aspects of music composition. In doing so, I will attempt to learn more about the human creative process and methods for simulating such creativity. I will demonstrate my findings and show my own creative ability by building a working computer program to generate new, original compositions. I will conclude the demonstration by producing a collection of unique and original music for each and every other seminar member in the form of a CD.

Reflection

My inquiry here is no doubt a vast one. My love of composing, performing, and listening to music coupled with my fascination with computer programming has led me to a deep study of the art of computer-generated music. Formally known as algorithmic composition, the field of computer music demands a high degree of knowledge in all of the aforementioned skills; for this reason, the field continues to progress rather slowly even in an age of technological explosion. In order to algorithmically create music, one must not only attempt to uncover the mechanisms behind the human creative process, but also study the patterns that lie within and constitute enjoyable music as well as pack all of this abstract knowledge into the precise bounds of code and user interfaces.

I find the project of creating my own algorithmic composition program appealing for a number of reasons. As I mentioned above, it involves all of the subjects in which I have a great interest: music, computers, and even math. Since the field has had relatively few breakthroughs and an equally scarce number of working programs that implement algorithmic composition, I imagine that if I put a lot of effort into my work, I can make a serious contribution to the field. I can literally count on one hand the number of decent, working algorithmic composition programs available on the internet. Very few fields boast such a lack of implementation.

The work will be difficult. My ability to endure through the challenges that I will face in trying to emulate the creativity of a true human being will no doubt prove my worth as an honors student, provided I manage to endure said challenges. I also think that my work will show my passion for the subjects involved in this project. I'm excited, nervous, happy, and ready to work, all at the same time.

Sources

Resource Link Lists

Algorithmic.net
The largest bank of resources I have found so far, algorithmic.net contains a huge list of algorithmic composition projects as well as all sorts of literature on the subject.
IBM developerWorks spaces: Music Programming and Algorithmic Composition
Another huge repository of all sorts of resources related to algorithmic composition and general computer programming with relation to music.
The Voice of Al-Kwarismi
A very extensive list of links related to algorithmic composition, music theory, and mathematics in relation to music. Unfortunately the site appears to be extremely old and few of the links have survived the years.
Algorithmic Composition Tools

Bloom
Bloom is a mobile application developed for the iPhone that implements algorithmic composition to compose original ambient tracks with or without user input. Brian Eno, the founder of ambient music, co-developed this project.
cgMusic
A freely-available and unpublicized software, cgMusic is the gem of all algorithmic composition tools that I have found so far. Maciej Biedrzycki created this flexible architecture that uses a scripting engine and expert systems to generate coherent music. A very impressive demonstration of algorithmic composition.
noatikl
A fairly extensive algorithmic composition tool aimed at creating ambient music. Good implementation and interface, though restricted in terms of genre.
Soundtrek Jammer Pro
Though more of an assisted-composition tool rather than a full-out algorithmic composition software, Jammer still qualifies to some extent as random composition. The sound demos are pretty impressive and it looks like a well-made program with a nice interface. I could probably learn a lot if I could get my hands on this program.
Algorithmic Composition Methodology and General Information

Algorithmic Composition
A great overview of the history and methods of algorithmic composition as well as a broad definition.
Algorithmic Composition as a Model of Creativity
Bruce Jacob describes the workings behind his variation system for algorithmic composition. Interestingly, his method involves splitting the work into two distinct parts: the 'composer' module and the 'ear' module. The first generates music, the second evaluates the quality of the generated music and filters it until a piece of adequate quality is found. This sounds like a promising method.
A Brief History of Algorithmic Composition
The title of this one leaves little to be explained. Very concise and well-summarized history of algorithmic composition.
Composing with Genetic Algorithms
Bruce Jacob explains in further detail the method of genetic algorithms, part of the variation algorithmic composition system mentioned above.
The Geometry of Music
Discusses and interesting analysis method developed by Dmitri Tymoczko in which chord progressions are mapped to various mathematical spaces. Provides a look into the math of chord progressions and could be useful for the progression module in my algorithmic composition program.

Wednesday, February 4, 2009

New Resource Links

IBM: Music Programming and Algorithmic Composition
Developer space for a wide variety of algorithmic composition resources, tools, etc. Very extensive!

The Geometry of Music
Excellent article that takes a more mathematical approach to music analysis.

Blog: Ideas and thoughts on computer programs that compose music
Katarina Miljkovic seems to have produced a new electronic piece of music for her blog each day for quite some time in 2007. I haven't yet figured out if these pieces were generated algorithmically or by her, but it seems like a valuable resource.

Music Algorithms
Really cool website dedicated to demonstrating the mathematical relations in music. It has a bunch of fun tools that let you try algorithmic composition yourself!

The Voice of Al-Kwarismi
Great list of sources related to algorithms, music, and math in general.

Generative Art and Music
Yet another helpful list of sources related to generative music.

Intermorphic

I discovered the company Intermorphic. They market three algorithmic composition tools: a generative music application for desktops, one for mobile devices, and a generative lyrics tool. The programs are known as noatikl, mixtikl, and liptikl, respectively. Brian Eno, known of the father of ambient music, helped author the programs.

Considering that these make up a large portion of the algorithmic composition software that I have encountered so far, I think it would be wise for me to study them and learn how they operate. I have messed around briefly with noatikl already, and have found the following:

Pros of Noatikl
  • Clean interface
  • Well-structured generative process
  • Flexible, powerful scripting engine and ability to make "hyperinstruments"
Cons of Noatikl
  • While the interface is clean, it's not altogether inviting to inexperienced users
  • Not powerful enough for genres outside of ambient
In short, Noatikl is a fairly well-implemented algorithmic composition program, but it lacks the power to break outside of the droning ambient genre, thus severely hindering its mass appeal.

Monday, February 2, 2009

Brian Eno

Brian Eno
  • Father of ambient music
  • Worked with popular bands such as U2 and Cold Play
  • Help produce the SSEYO Koan Generative Music system
  • Co-developed "Bloom," an interactive generative application for iPhones
  • Designed the generative sound engine for the game "Spore"
Links

Sunday, February 1, 2009

Progress Report #4

This week, although I worked hard on my program each day, I did not preview any sources. At least I'm honest, right? I had decided that the week would be dedicated to the programming/creative aspect of my thesis. Next week I will shift my focus back to research. I think alternating this way will help me, since I can research methods one week and then spend the next week trying to implement them. So, in short, no sources this week, but expect many next week.

Reflecting on the Week
In my last report, I set three goals, two of which I have partially met this week. First, I said I would like to finish the Variating Drummer plugin. I should have known that 'finish' is simply too strong of a word to ever use in setting goals. Nonetheless, I 'finished' giving the plugin some basic functionality this week. In other words, it now works on a very basic level. I doubt that any single component will truly be 'finished' until the end. But it now works, so I consider that goal fulfilled.

My second goal was to develop a method for generating melody. In this goal I failed. I did not even attempt to develop such a method this week. It's a very, very difficult problem to tackle, and to be honest, I'm still not entirely sure how I'll approach it. Eventually I'm going to have to face the problem, but I think for now I should stick to the basics rather than try tackling something this difficult.

Finally, I said I wished to have a basic trance song outputted by the program by the end of the week. In theory I met the goal, but it wasn't really what I had in mind. There's still not much creativity in the output, so it hardly counts as a song...all the elements are very simple. Nonetheless, I think it still counts.

Overall, I think things are going well. My only concern is losing my creative steam. Right now I'm pushing full force ahead...but it's very easy to get sucked into the routine of grinding out lines of code without really thinking about the innovation it takes to 'synthesize' creativity. I need to be inspired in order to make an inspiring program. That means I just need to keep my creative juices flowing.

Goals for This Week
I'm going to try to be more specific and more realistic about my goals this week. Hopefully I'll be able to meet them all.

  • Research a New Method
  • It's about time I researched a new method of algorithmic composition. This week I will aim to find and extensively research a new method which I will implement next week if all goes well.
  • Finish the VDrummer Variation Algorithm Editor
  • I was too vague last week when I said complete the Variating Drummer plugin. This week I'll focus on trying to get the variation algorithm editor working since it's the last piece of the plugin that's not working yet. Variation algorithms basically provide the instructions for making drum style random and interesting; they comprise the heart of the VDrummer (Variating Drummer) system.
  • Make a Sound Demo
  • Last week I said I would try to make a basic trance song. Since I wasn't really impressed with my attempts to do so, I'm going to be more general this time. For the next status seminar (that is, in a week, not this coming one) I would like to have something to show for my work. Whether it's just a short clip of the VDrummer groovin' or a fully fleshed-out song demo, I want something tangible.