The last 14 working sessions were dedicated to building the CreateMotif
musical strategy- something like the last 4 weeks.
I only usually get an hour a day to work on my personal projects, from 5-6am, so building a relatively complex function that makes reasonable sound music takes a long time to finish.
But it’s done, and now I’m back to the thorny problem of Task Selection.
Task selection is probably the most critical skill you can develop in small/start-up projects. There is no shortage of things that you can do, but success is usually only possible if you choose the things with the highest return.
So I chose to do something dead simple, adding a “Rest” musical strategy that will add an empty InstrumentSchedule:
But mainly I did it procrastinate on the hard job of deciding what my next task is.
There’s a few candidates:
- Bring drum patterns into MusicComposer
- Rebuild MusicComposer to be “pure” music theory
- Add “EvolveMotif” musical strategy(’s)
- Start work on completely new features
I’m drifting to the Rebuild MusicComposer task though, as it should make managing musical strategies easier once its done.
Basically what I want to do is to abstract out the MusicComposer to only work with pure music theory. One of the things that made the CreateMotif function so difficult to manage is that it is doing mulitple things:
- Deciding what notes to play and when
- Translating those notes/timing into data consumable by the rest of the game.
I think the intention here is to have the notes to play decided by the music composer, and push the translation into useable data into the MusicConductor.
This is necessary because my next trick for the Composer is to move from creating a musical motif to extending/evolving motifs, copying motifs to other instruments, converting motifs into chords, etc.
That introduces another set of complexity, which multiplies the existing complexity.
So, I have convinced myself- my next task will be to refactor MusicComposer (and musical strategies) to work with pure music theory objects, and pull the translation into useable data into the MusicConductor.
Next session, I will begin designing what that actually means.