in Jim's office
""" Looping backwards through a list """
def play_phrase(phrase):
for note in reversed(phrase):
# ... do something with each note
One letter variable names are bad. Really bad.
Explicitly defining this protocol you're using would be good. Really good.
Sep 9
Over the past week, I've tried to address the issues you brought up, such as adding a header with a description of the project, adding some text about future features, links to libraries, etc.
I added a basic OSC Python script that replicates some of the data I was sending from my Max/MSP patch. Doing that made it clearer to me how janky things like my density value are. I think I'm going to replicate that function in the Python code instead. Parts of the Max/MSP patch need a lot of tweaking too, mainly how it's often it believes a new note is being sounded.
I've been going through all of the music21 docs to understand how it works and what it's capable of. I don't see evidence of it being used for real-time projects like mine, but I generally find it flexible and I think it will be useful for spitting out quick analyses. I tried writing some basic functions with it to get a feel for how I can incorporate it with the kind of data I've been working with.
I've also been reading a book published this year called "Computational Music Analysis" (edited by David Meredith, published by Springer,
http://www.springer.com/la/book/9783319259291), which functions as a survey of the different kinds of work being done in the Music Information Retrieval/Computational Musicology world. There are some chapters about analyzing larger musical structures that I'll likely draw on.
Last week, Matan and I discussed how to make the project feasible in the time I have, and part of that will likely be making the system's output (and subsequently the overall performance) fall into a more defined structure. For example:
- I play by myself for a minute so the system can retrieve information such as some motifs I'm establishing, my pitch range, etc.
- The system enters and we play together until it signals a move towards some sort of climax.
- The system continues to play over the course of a few minutes as a finale.
The exact lengths of these sections would likely be randomly generated at the beginning of the performance so that it doesn't become too predictable.
The code is now on GitHub.