A flawed, if interesting, aspect of the last audio rendition was that it was playing outside the legal range for the instruments I mapped to it, resulting in dropped notes. This week I set up an R program that accomplishes several things to get around this:
1. A converter to build an array of the major scale of legal notes from any starting note. For instance, if you pick D#0 as your starting note, it will build the D# major scale. It's simple enough to generate one of these for minor and for the other scale types; as long as there is a fixed progression of intervals between notes in the scale, we're good to go.
2. A repository of legal MIDI note ranges for instruments. If I pick weirder, nonsymphonic instruments, I can just specify a few notes that I prefer.
3. A Scale-Instrument checker that creates a new array of what the legal notes are in a scale, taking into account the range of legal notes for that instrument.
4. A converter that then apportions the incoming data signal into this new legal range that the checker provides it.
5. The creation of an output file that gives us these new note values in columns.
I'm no coder but it seemed to work well enough in D major. You can see the
code in plain text or
download the R file directly. I'm no programmer so it's frought with bad style from the naming conventions on, but at least it works! Here's the output song:
New Rendition
If you notice, it's got that ceaseless quality again, which is worsened by the fact that every note is played. I tried to play around with the Java file that does the final output, but nothing I did altered the note duration. I'm open to suggestions in class.
This marks a switchover in my focus for the next 1-1.5 weeks. I'll need to learn Mr. Vista and the visual field maps in order to get the timecourses out of the sample data set. Since that will take some time and we have a pipeline set up for creating the music from the data, I'll be doing less coding of the pipeline. However, there are a few things I'll want to tinker with in the coming week on the music side:
- Discovering a way to increase note duration
- Putting a gating mechanism into the code (only translate note if signal threshold above a certain value)
- Hardcoding other scale pipelines than just major
The first two points should ease up the mechanical nature of things a fair bit. It's coming along!