I'm trying to write a software synthesizer that recreates the sounds made by classic synthesizers like the Moog and the DX7. Does anyone know of any code resources for something like this? Thanks.
views:
1850answers:
11I've had some success with the BASS library, but it's .Net support was a little crude when last I played with it. It mostly low-level stream encoding and such, but it does have support for some DX8 effects.
Look at the answers to the Python Music Library question. While the question says "Python", Python is built on C. So anything usable from Python will have a C library, also.
There are an awful lot of C/C++ libraries out there, most no longer updated. There's not much for C#, but I have seen a couple. I haven't really used any of them in anger, so I can't give any recommendations.
I would start with Harmony Central and see if you find anything of use there.
Alternatively, a search for analog synthesis on sourceforge.net has plenty of results.
CCRMA at Stanford can be a good resource for audio software. The Synthesis ToolKit in C++ (STK) looks like it could help you out.
Chuck is the best I know of, but its C++ like, not C++.
[http://chuck.cs.princeton.edu/][Chuck]
your best bet is to check out the developer forums over at KvR. They will be able to point you in the direction of the best open source DSP/synthesis engines as well as some open source VSTi plugins that you can take inspiration from. It will all be in C / C++ though. There is only the most basic of audio synthesis available in managed code at the moment.
There are two articles on CodeProject you might want to check out. Leslie Stanford created a Synth toolkit in C# (as far as I know it's completely managed).
C# Synth Toolkit - Part I C# Synth Toolkit - Part II
Also, I just found this StackOverflow Question which has some good links, though it's Java related
The Moog and the Yamaha DX7 are drastically different. The DX7 uses FM synthesis, which is severely strange. Very different from the usual VCO/VCA/VCF analogs like the Moog.
For a long time, Yamaha litigated to defend its FM patents, but they have all expired by now, I believe. Casio's phase distortion was similar to Yamaha's FM, and managed to avoid Yamaha's wrath (so far as I know).
I'd start by picking one or the other. Virtual Analog (emulating analog synths) is all the rage since the Nord Lead and the Access Virus showed up. And a lot easier to contemplate. So I'd go that way if you want to walk with the hip crowd.
Start with good band-limited oscillators, make an envelope generator, do a filter. For inspiration, check out Welsh's Synthesizer Cookbook to see how all kinds of sounds can be make with a two-oscillator synth. I'd start by implementing the minimum features needed for those patches.
FM and PD are wild. If you go that route, it's all about chaining enough FM operators together in interesting configurations to get a spectrum of interesting sounds. Warning: it's a lot of work to avoid aliasing in FM.
Synthmaker and SynthEdit will generate VST code for you. SynthEdit definitely outputs the uncompiled C++ source files, and is free.
The musicdsp website also has a great synthesis library. Lots of sample code in C/C++ on how to do things.
I wrote a simple synth library as part of an iPhone app. Perhaps it would work for your synth needs as well. Perhaps not. http://mobilesynth.googlecode.com/svn/trunk/mobilesynth/Classes/synth/