From: dionf@ERE.UMontreal.CA (Dion Francois)
Subject: Re: Why GUS == synth (even longer)was:Re: Why GUS != synth (longish)
Organization: Universite de Montreal
Date: Wed, 14 Oct 1992 02:32:29 GMT

In article <Bw0K1n.91p@dcs.glasgow.ac.uk> dam@dcs.glasgow.ac.uk (David Morning) writes:
>>In a digital synth it's typical to have 1-4 DCOs (Digitally Controlled
>>Oscillators) which can play ROM waveforms. These waveforms are run
>>through DCAs (amplifiers) and DCFs (filters).  Throw in modulation
>>capabilities, like envelope generators for DCAs and DCFs, LFO (Low
>>Frequency Osc) for DCOs and DCFs. A setting of these parameters is
>>called a preset, which is usually stored in RAM.
>
>Hang on a minute, this sounds like the old Curtis ElectroMusic chip set
>your describing. These were analogue oscillators which used true FM to
>get the sounds. The digital part was merely digitally controlling the pitch
>of whatever oscillator you were running. There was no wavetable per se.
>This stuff went out with the Ark. It's no more than a digitally controlled
>analogue synth with real (unstable :-) ) analogue oscillators.
[excellent explanation NOT deleted see the end]


I must praise David Morning for finally untangling all this wavetable
thing. It initiated a flashback of an old file describing the FM and PM
synthesis. Just a sec... Ok, i have it on paper, but it's probably
somewhere on the net. It was written by James McCartney and it explained
the difference of FM and PM. Yamaha synths are actually PM synthesizers.
Some blah blah and some C code on a digital implementation of these.

Some of the code is diffenrently arranged. Some syntax changes. I also
removed some comments. (Hey i'm typing this...)

#define PI 3.14159265358979
#define RADIANS_TO_INDEX (512.0 / (2.0 * PI))

typedef struct {
   double freq;
   double phase;
   double wavetable[512]; /* [ednote] familiar name? 8) */
} OscilRec;

double oscil(OscilRec *orec, double fm, double pm, double am)
{
long tableindex;
double instantaneous_freq;
double instantaneous_phase;
double output;

   instantaneous_freq = orec->freq+fm; /* get freq */
   orec->phase += instantaneous_freq; /* accumulate phase */
   instantaneous_phase = orec->phase+pm; /* get phase */

   tableindex = RADIANS_TO_INDEX * instantaneous_phase;
   tableindex &= 511; /* modulo 512 */

   output = orec->wavetable[tableindex] * am;

   return (output);
}

So this looks like a software implementation of the Curtis chip. This is
different of: (quoting again David Morning)

>A crude wavetable synth is to take a table stored in ROM (say a sine table)
>and feed it into another table (say another sine) to give a sine^2 waveform
>or a sine^-1 table and get a triangle wave out. If you can write to either
>or both tables, you can do whatever you like. If you can sample to one of
>those tables (or both) then the world's your oyster as far as synthesising
>is concerned.

My mac plus had this possibility (4 channel, 8 bits and each wavetables had
4096 bytes)

>Of course nobody would build one like the above, most modern synths use
>DSPs to do all the digital filtering and waveform manipulation so you can't,
>without a lot of DSP programming experience get into that side, but you can
>get to the basic wavetable side and use whatever has been preprogrammed into
>the synth. An Ensoniq EPS16 will do this, sample a sound, chop it down to
>a wave (or a number of different waves from different parts of the sample)
>add them all together wrt time, add loops and manipulate via the on-board
>DSP.

This is where the Michelangelo chip does its work. The final stage is done
not by MichelAngelo, but by an ENSONIQ DOC II chip. (can anybody who has the
card confirm?).

>Of course, if you bought a Mac, you were always able to do this - 8 bit though.
>...unless it was a Mac 11

A Mac II had 16 bits???? I tought the ensoniq chip was the same as on the Plus,
but in stereo?

>Dave
>
>-- 

Ciao,
--
Francois Dion
    '  _   _   _
 CISM (_) (_)  _) FM       Montreal , Canada       Email: CISM@ERE.UMontreal.CA
      (_)  / . _)             10000 Watts          Telephone no: (514) 343-7511
_______________________________________________________________________________

Newsgroups: comp.sys.ibm.pc.soundcard