Building a musical instrument from a library
My last post (Object-Oriented Musical Instruments) provoked an interesting comment:
Previous to the invention of Modeling in the digital world, if you wanted to invent a new instrument you were stuck using parts of instruments you were already familiar with, with (possibly) modifying said parts slightly - larger, smaller, a bellows for a wind source, an eBow instead of a standard bow, etc. Isn't much different that an Object Library, is it?
Well, no--it isn't, at least not unless you have access to a good machine shop and know how to use it. Indeed, even when someone designs a previously unseen instrument, such as those that appear in the Coen brothers' remake of The Ladykillers, it is based on instruments that came before it.
Nevertheless, one can use a suitably well-designed library to build quite a remarkable variety of things. One need not even go outside the domain of musical instruments to see this fact. Instead, consider the modular synthesizer.
The basic idea behind these devices is to take individual modules that create or transform audio signals in interesting ways and connect them to make whatever sounds you have in mind. In practice, of course, what one can imagine is greatly constrained by what the modules can do, which means that learning to interconnect the parts of a modular synthesizer in useful ways is as hard as learning how to play a more traditional musical instrument.
What I find interesting is that in the past few years, processors have become fast enough that it is possible to do a software simulation of a modular synthesizer that is good enough to use as a musical instrument in real time. Indeed, for the past couple of months, I have started learning to use a commercial synthesizer that is really a software simulation of a modular synthesizer, wrapped in a nice metal cabinet with a piano keyboard and a bunch of dials and displays.
In my next few posts, I'm going to say a few things about my experiences with this device, and try to draw connections to the question of software design in general, with a particular emphasis on libraries.