Make Your Own Software Synth, Part 3
Pages: 1, 2
Now that you’ve played your synth, it’s time to give the computer a turn. From the top window, right-click on the OReillyEG container and select Automation. The window in Figure 6 will appear.
Figure 6. By enabling automation, you can control your synth through VST
host programs.
Almost every knob, switch, and list in your synth can be altered by host programs by default; this is called VST automation. The Private column in Figure 6 lets you prevent specific controls from being automatable, which is sometimes desirable.
A large synth has numerous controls, so it’s important to give controls unambiguous titles, even if the title is not shown on the front panel. One slight annoyance in SynthEdit is that some controls, such as the knobs used in OReillyEG, need to be unlocked before the label can be changed. (Search for “lock” in SynthEdit's help file for details.)
Closely related to VST automation is MIDI automation; this maps various control parameters to specific MIDI commands. The Controller column in the Automation window lets you select the MIDI Control Change number to use. The MIDI standard assigns MIDI Control Change numbers (aka Continuous Controllers or CCs) to many common features, and you should use these for maximum compatibility with VST host user interfaces and hardware MIDI controllers. For example, MIDI Control Change 7 typically affects overall volume.
Well-documented VST instruments will also provide a MIDI implementation chart, although these are less important now that direct VST automation is available. (Instead of looking up a number, you can simply click the target knob onscreen.) Following is the abridged MIDI implementation chart for the Ricko-3A. Following convention, an X means an assignment is not implemented, and an O means it’s implemented. The minimum three assignments users will expect are probably:
The final stage of the project is to create a VST. It’s a simple, two-step process:
Figure 7. Creating a VST instrument from your SynthEdit patch.
VSTs should each have unique four-character identifiers; hosts use that ID internally to keep track of them. Steinberg maintains a central database for that purpose. I have not registered OREG; it’s just an example.
Saving a document as a VST creates a .DLL file that can be loaded into a host. Depending on the options you set, the VST may appear as a synthesizer or as an effects plug-in. The name your host uses for the plug-in will vary. Some hosts use the file name; some use the name you entered in the Product field, perhaps with capitalization changes. One host I tried seemed to use the title of the container, so it’s best to use the product name for that container.
SynthEdit synths can get much more complicated than the simple example above. For example, Figure 8 shows most of the actual circuit for the 8' oscillator in the Ricko-3A.
Figure 8. The Ricko-3A oscillator (click to enlarge).
The top left four modules provide the 8' chorus effect, a pulse-width modulation effect we probably would call celeste today. The oscillator can be routed through one of four different waveshapers, each of which bends the wave according to a particular formula. The clipper is a precaution to set the maximum and minimum level of the oscillator. The bottom line provides a slight level compensation for different pulse widths on square waves. A fixed value added to Input 2 of the multiplication module at bottom right is not shown. (Also not shown is a level-compensation signal from the 8' level slider to a later stage.)
The module called swarf is one I programmed in C++; when the pitch is high, it filters out the highest frequency components. That reduces the aliasing effect that polynomial waveshapers can produce on high notes. On some very rare settings, some high notes in the Ricko-3A still have audible aliasing; that is a design trade-off for using polynomial waveshapers.
When designing a synth, conventional programming wisdom is to create a prototype and then optimize it for efficiency. You can see an example of such an optimization in Figure 8; the switch to select which waveshaper is used comes before the waveshapers, not after them; we want the shortest possible signal path to be active at any time.
You want your synth to be popular? Here are some hints:
Of course, the other approach is to ignore all these hints and just make some virtual synths that give you pleasure and generate your own unique sound. I built the Ricko-3A for my own use, and I am happy if there are other people who get a kick from it, be they other old Roland SH-3A users or simply musicians looking for a different tone color. But the Ricko is not designed to be massively popular; it begs for outboard effects and more presets for a start! There is fun in creating your synth for sure, but I think there is more satisfaction in subsequently playing it and sharing the musical results.
The download site for stable versions of SynthEdit is synthedit.com. However, there is a semi-secret site where the most recent beta versions are placed; those include the most up-to-date features.
You can also download components. They can be classified as pre-fabs, which are collections of modules created in SynthEdit and saved as .SE1 files; modules, which are created using the C++ SDK and are .DLL files renamed with a .SEP extension; and little VSTs, which just provide part of the functionality of a synth and are intended to be patched together inside a VST host such as SynthEdit.
The SynthEdit C++ software developer kit (SDK) is also available for creating custom modules. In some cases, functionality is more efficiently implemented in code than by connecting modules onscreen. However, SynthEdit is often surprisingly efficient compared to modules written in straight C++. The SDK also has a Yahoo support group, syntheditsdk.
Bob Hug maintains the excellent SynthEdit SEP/SEM Database, which is the best place to start. It contains listings from dozens of developers. The three major sources of modules are as follows:
|
Developer |
Description |
|
Over 100 modules in two packs, mostly for audio, control, and MIDI manipulation. These are donationware, through PayPal indexed to sales for commercial products. |
|
|
Almost 100 modules, some available in packages, mostly for improved user interfaces. Most are donationware through PayPal. |
|
|
Group members can access various free open-source prefabs and modules. I have contributed a few modules to the Yahoo site: RJ_SWARF is a simple filter for high notes that can be used to reduce aliasing noise in some cases; RJ_SLEEPER can help your synth be more CPU-efficient in some cases. I used both modules in the Ricko-3A. Some C++ is also available at the Yahoo SynthEdit SDK group site. |
SynthEdit synths can get very large. Custom modules can reduce the complexity, and you can often use SynthEdit’s container modules to hide details. Figure 9, courtesy of synthesizer and module designer Xoxos (Rurik Leffanta), shows how complex the connections in a large circuit can become, even with containers.
Figure 9.
bird’s-eye
view of a complex SynthEdit pre-fab, courtesy of Xoxos. (Click to enlarge.)
These are exciting times for adventurous musicians and sound designers. No longer do you need a microchip foundry or extensive electronic know-how to create your own unique instruments. All it takes is some shareware and a willingness to explore, and there are plenty of people online who will help you along the way. I hope this series has inspired you to develop your own sounds and share them with the world.
|
Related Reading C++ Pocket Reference |
Showing messages 1 through 4 of 4.
HOW TO MARKET SAMPLE BASED VST
I'm geting started on Synthedit and I've made a VST synth with no troubles because I'm used to analog synthesis but I've been trying to create a Piano VST based on a soundfont file using the sample oscilator exactly as told on the Synthedit's Help files and it sounded exactly as I expected but after saving as a VST the Plugin didn't show up on the Host's List. (I'm Using Forte Ensemble)
So I need to know if there is some specific thing to do when working with sample oscilator based project on synthedit because with simple synth everything is working very well to me.
Thanks a lot!