Lance’s Status Report for Feb 18th

Over the past week I’ve been reevaluating how I want to handle music generation.

Previously, I had planned on having multiple different solutions to different problems, but have come to the conclusion that it would be best to focus on one functional approach.

I’ve approached the problem with the idea of the user playing single notes. This slightly simplifies the problem while also leaving room for algorithmic improvisation. With the user playing single notes, we can use software to analyze what notes they’ve played, and create a chord progression from that.

Chord progressions are cyclical (generally), so we can assume that it should repeat every 4 to 8 bars with little variation. This can be seen below:

Here you can see that- although not in the key of C- chord progressions can be simple, even for popular songs.

The way a chord progression will be assumed is through Bayesian Updating. The cyclic nature of progressions allows us to examine bars individually. Through this, we can measure the frequency of notes played and create a probability measure for what chord is being played during the measure.
As a simple example, say we play the note D five times, F six times, A 3 times, and B twice. If we were to make an assumption about what chord was being played  over(triads only), we could assume that either D minor or B minor were being played. A was played more than B, so we know that there’s a higher chance that the chord is D minor (the triad being D, F, A).

This does involve some assumptions, and could require us to examine surrounding measures to ensure aforementioned assumptions make sense. However, with this approach, the algorithm is free to comp the user with chords and rhythms that can make the piece more interesting (we can also use a similar approach to decide rhythm!).

I’ve been testing algorithms by hand, and overall they seem to work well enough. I’ve also managed to send regular signals through an Arduino, now I just need to make a specific parser for translating to different tempos. I would say that overall, I am on track with our current schedule. During this upcoming week, I plan on writing the Bayesian Update algorithm and ensuring it works.