** SpiralSynth **

Last changed Saturday 2 December 2000.

SpiralSynth is open source software, distributed under the General
Public License (GPL). See the file COPYING.

SpiralSynth is a polyphonic analogue softsynth. It should work on i386 or 
big-endian hardware running Linux or FreeBSD. 
It is currently in a sort of pre beta state (and probably always will be ;). 

It uses the OSS /dev/dsp driver, (although this is configurable) and the GUI 
it uses is FLTK (www.fltk.org).

The (PC) Keyboard can be used to play the synth, "q" & "z" are C, and the keys
progess from there, ie "2" is C#, "w" is D etc. These are just the defaults, 
and can be changed from the .Spiralrc file.
The F keys change the octave. 
More functionality comes from the midi interface, such as velocities, pitchbend 
and other parameters.

To build the source type:

./configure 
make

Copy the file .SpiralPatches.bank to your home directory, if you want some 
example patches to play with.

The GUI requires FLTK to be installed (www.fltk.org), Which may in turn 
require Mesa or OpenGL to link correctly.

If you have SpiralLoops, you can build SpiralSynth as a plugin. Uncomment the 
#define PLUGIN at the top of the Synth.cpp file, and link with the -shared 
option. 

Specs:

You don't have to understand any of this to play SpiralSynth, you can tweak it 
purely based on the sounds you make - but if your interested in techy synth 
specs:

3 ocillators. Capable of Pulse/Square, Tri/Sawtooth and Noise (with sample & 
hold) waveforms.
Each oscillator has it's own envelope generator.
2 mixers connect the oscillators together, with a ring or cross modulation 
option.
1 resonant low pass filter.
1 delay effect.

An Envelope and LFO can modulate oscillator 1 or 2's pitch or pulsewidth, or 
the filter's cutoff or resonance each.

MIDI interface, (works on my Roland PC-160A Keyboard - I can't vouch for 
anything else). Note velocity and pitchbend is catered for. The filter's cutoff 
can be controlled with midi via the general midi "reverb send level" or control 
code 91 (effect 1). The idea is to make all the controls midi, at some point.

The oscillators have independant portmento, for super wierd effects. Move the 
PM slider up to make the response slide with the keyboard presses. Move the 
slider to the bottom to turn it off completely.
Portmento will also effect any frequency modulation on the oscillator. Using 
this with sample and hold is quite fun.

Cross modulation is really frequency modulation, or FM. It modulates one 
source's frequency with the other source. When enabled on mixer 1, 
oscillator 2's frequency is changed using oscillator 1. On mixer 2, oscillator 3
is modulated by the output of mixer 1. (phew)
It can be used to create a whole different set of sounds. Ths kind of thing is 
really additive synthesis, and shouldn't really be on an analogue synth, but I 
don't care!

Unlimited polyphony. You can play as many notes at once as your CPU will allow.

Meaning of Oscillator sliders:
PW = PulseWidth
SH = Sample and hold
PM = Portmento depth

Wav file output is availible, click on the Record button in the output window 
to choose a filename to save to. All the synth's output will be written directly
to disk until record is turned off.

You can also save your sounds as patch information, so you don't have to lose 
sounds as you tweak the synth. There are 100 save slots, selected by the buttons 
and dial at the bottom of the Spiral Synth window.
There is also a randomise button, which scrambles all the settings on the 
control panel.

Changing the config settings:

You can edit .Sprialrc (in your home directory), to change the settings of the 
synth.

SpiralSynth resource file

BufferSize        = 512       - Size of the buffer in samples, lower no. - lower latency
Samplerate        = 44100     - Sample rate
WantMidi          = 1         - Set this to 0 to disable midi input checking
FilterGranularity = 50        - Updates the filter dynamics every 50 samples
Output            = /dev/dsp  - The output device file
Midi              = /dev/midi - The Midi input device file
WantRealtimeOut   = 1         - Use this to disable the soundcard output
KeyMap            = zsxdcvgbhnjmq2w3er5t6y7ui9o0p[
Polyphony         = 3         - The number of voices the synth can play at once

The keymap defines the keys to note mapping. Two and a half octaves are 
availible, starting from a C.

For example, the keymap for a French keyboard goes as follows:

KeyMap            = wsxdcvgbhnjma2z3er5t6y7ui9o0p]

Todos:

* More realtime midi controllers. 
* Wav file input, so you can load your own oscillator waveforms.

Disclaimer:
No representations are made about the suitability of this software 
for any purpose. This software is provided "as is" without express 
or implied warranty. 
(Damage to ears, speakers or buildings are not my fault :))

Dave Griffiths - dave@pawfal.org
www.pawfal.org
