I’ve had a project in mind for a while, that I may start after I’m done with all my other projects (when I’m 50 years old :-)
I use MIDI to compose all my music, and I frequently am annoyed by its limitations. In fact, the limitations of MIDI may be one of the main reasons I am a piano composer. MIDI’s framework works well for piano, but it fails in the presence of strings, woodwinds, or basically anything that can crescendo in the middle of a note, or change timbre without changing volume.
I want to create a new file format that can handle these things, and a corresponding renderer. Here are some basic things I want:
- The ability to couple a soundfont with a piece, without including it directly in the file. That is, the music file would include a URL at which the player could find a soundfont to use. Then the player could cache this, and avoid downloading it again for another similar piece. It would also encourage sharing of soundfonts.
- The ability to move smoothly between two timbres, for example, a violin playing a note fortepiano. You would use the marcato attack sample from the violin, and then interpolate to the piano sample.
- The ability to glissando between any two notes, not just ones up to a whole step away.
Things like that. I have an idea about the implementation of the soundfonts as well. Each instrument would be a table of state references, each of which a sample and some attributes on that sample. Therefore, an entire instrument could be a single sample referenced from each state (unfilled states would be interpolated in), or it could fill in each state with a different sample (which would likely end up taking a few hundred megs, but has the possibility of sounding extremely realistic).
It would be possible to interpolate between any two states. A glissando would be an interpolation between two different notes; a timbre change would interpolate over the timbre states while keeping the notes the same; a crescendo would interpolate over two volume states. You could even interpolate all three at once.
This is the kind of thing that warrants a lot of experimenting before the real implementation. So, I’ll a-be experimentin’, probably when I’m procrastinating on something else. Watch for updates.