The Vocal Processor was a research project developed in our group for the Yamaha Company, Japan. The Vocal Processor is a VST plugin for singing voice processing that implements spectral domain techniques. It is designed to run on real-time and, because of its complex algorithms, demands many computer resources.
The initial implementation was done in C++ but the code was highly unstructured and hardly maintainable. For that reason it was decided to port the code to the CLAM framework (see chapter 3). Once the VST plugin was running in its CLAM version, it was discovered that this implementation was almost one hundred percent slower. The first impression was that the Object-Oriented techniques and overall design of the framework were causing this and that it would not be possible to compete with the fine-tuned but highly unstructured original code. The process that followed, and demonstrated that other reasons were behind that bad performance, illustrates the overall message of this section.
None of the efficiency problems found in this application were related to any of the previously mentioned prejudices against object-orientation: encapsulation, modularity, or inheritance. As a matter of fact, having a clear and clean design and code enabled a fast refactoring that ended up in having a fully object-oriented CLAM version of the plugin that was even about thirty percent faster than the original one.
Using specialized profiling tools, the efficiency hotspots were found. These are the main actions that had to be taken in order to improve the first CLAM version: