The idea was to create a synthesizer that does not have a static timbre.
Rather, it has the ability to change it's timbre or sound character randomly
at specific time intervals.
The design is basically a granular synth. Each granule is a computed single wave cycle generated using constrained random numbers. The synth responds to MIDI clock messages for changing from one timbre to another. There is a cross fade system to prevent pops when the waveform is switched which can also be used to make the timbre change smooth and graceful. New timbres are created by generating random waveshapes that are looped to play for a period of time. The crossfade time can be controlled in a range from 1 mSec to several seconds. Waveforms are generated using random data within the following algorithm: From 5 to 35 points are chosen for waveform construction. The Y values are all assigned random numbers except for the first and last points in the wave table, these are assigned a Y value of zero. Constraints on the points' X values control how close together in time any two points can be. This helps to band limit the waveforms being produced and also reduces the buzzy nature of some of the generated waveforms. Additionally, there is an adjustable single pole lowpass IIR filter at the synth's output to further limit high frequency harmonic content. Once the table of points is filled and valid, the table is "normalized". |
Normalized in the sense that there will be at least one value at maximum
positive amplitude and at least one value at maximum negative amplitude.
This was achieved by finding the least and greatest values and simply setting
them to the minimum and maximum allowable values (for 18 bits signed). This provides
for a mostly constant amplitude.
Once normalized, the points are sorted by X value. Finally, the sorted points are connected with splines (sigmoids) calculated using a simple cubic equation: y = ( x - 1 ) * x * ( x + 1 )
So, essentially a bunch of random points are chosen and connected with curvey lines. The system always sets the Y value of the first and last point to zero so that the waveform can wrap without causing a transient. This is very important because great pains have been taken to make sure this synth does sound too buzzy. This synth contains a delay effect of up to approximately 167.7 seconds and supports portamento. An LFO was added for pitch modulation. Using the pitch LFO, image alias artifacts were faint, but audible when the minimum spline width is small. At 5, it was obvious. I've tested from 24 down to 11 with no audible artifacts (that I detect). At 11, it can get buzzy, so addressing the aliasing by restricting the minimum spline width seems workable. | |||