Patel is a softsynth library [NB:not yet a library]
These are the guiding specifications for its design:


It is supposed to be conducive to making "chiptune" style sounds, primarily
 as musical notes, but with the option of suppressing/disguising the
 fundamental tone to give more general effects (which would still be played
 by specifying notes however).

It needs to be able to combine multiple simultaneous channels of sounds
 to one output (at a time; see output spec below).
It needs to be able to request a new set of sounds to output (including
 a continuation of the sounds already playing) after playing the sounds
 for a specific duration ("1 line"). Ideally a set of such lines would
 be buffered in advance ("a pattern"), but that would be the responsibility
 of the calling program? (Currently Patel provides the lines via a built-in
 parser, this is for testing purposes).

It currently outputs WAV files, but should at some point also support
 direct soundcard output
It is hoped to be as fast as possible on as many types of hardware as
 possible (especially old machines such as 486s, and low power/embedded
 processors like ARM, with low cache and no floating point), to give
 minimum impact on the load of the machine and the speed of the program,
 and less chance of buffer underruns.
It should support a broad range of output formats (different samplerates,
 different number of bits per sample, stereo or mono, whatever) for
 compatibility with less than modern hardware (eg: my old SparcClassic,
 even though it sounds like crap).

Although sounds produced will vary depending on output device (pretty
 much inevitable), they should not be altered (much?) by the machine
 that does the processing. Code will vary on different HW but that should
 be purely to do things in the most efficient way for the HW (speed of
 various operations, quantity of cache, cache miss penalty, etc).
 Slight differences in rounding might be Ok here if it makes the speed
 much better, but...

It should not impede the sorts of applications (not specified here) I
 intend to put it to when it is finished. [This detail obviously would
 need to be elaborated on a bit some time]

