Sound Designs

Home
Up
About
News
Products
Ordering
SoundFonts
Emu EOS
Emulator X
SY77
F.A.Q.
CS6x


Send Email

Wave Modulation Synthesis For Programmers   Last Changed 01/19/2005

Some Books on the subject ...

         


A. Sine Wave Modulation (FM Variant)

Variables used throughout the document:

Variables Description
Hz Frequency in Hertz (cycles per second)
SR Sampling Rate in Hertz
O Operator/Output
F Frequency of Operator
A Amplitude of Operator
FB Feedback of Operator into itself
FI Feed-In of an Operator into another Operator
T Samples/Ticks (time)
L Length of sample (in samples)
p Pi = 3.1415
Phase Phase Offset Percentage
PH Phase Offset


1. The Basis of all Sounds - The Sine Wave

The smallest building block of any sound in the real world is the Sine wave, and according to Fourier theory, all sounds are constructed from a multitude of sine waves at differing frequencies and amplitudes. I won't explain the dynamics of this theory, but it essentially means that you could create any sound by adding different frequencies of sine wave together. Harmonic sounds generally consist of sine waves which are multiples of each other, while noises or inharmonic sounds consist of sine waves at inharmonic frequencies. Since we now know that sine waves are what we need, let us start off by defining how a single sine wave is generated. The formula for a simple sine wave is as follows:


Equation A1 - Simple Sine Wave

O = A * (sin(F * T))

To correctly calculate the waveform, we first need to calculate the value of F in the equation, which determines the period (frequency) of the waveform in Hertz. This is calculated as follows:

F = (2p * Hz) / SR

Obviously Hz is the actual frequency we are looking for, but in the equation F is required to produce a waveform at Hz frequency. Thus if we wanted to render 1000 samples of a 440 Hz sine wave, at a maximum amplitude of 32760 (this is around the maximum amplitude value for 16-bit recording), and at a sampling rate of 22000 Hz, we would use the following Visual Basic code:

VB5 Code A1

Dim F, Pi as Single
Dim SR, A, L, Hz, O as Integer
Hz = 440
L = 1000
A = 32760
SR = 22000
Pi = 3.1415

F = (2 * Pi * Hz) / SR

For T = 0 to L
  O = int(A * (sin(F * T)))
Next T


This coding will produce 1000 samples of a 440 Hz sine wave at a maximum amplitude of 32760. Plotting each value of O on an X-Y graph will produce the following representation of a sine wave:

Figure 1 - Simple Sine Wave
Sine

It is clear that if sounds are made up of a multitude of sine waves, using only a single sine wave is not going to produce very interesting results. A first suggestion would be to add several sine waves together and see what we get. This brings us to our first form of synthesis - Additive Synthesis.


2. Additive Synthesis

In its most crude form, Additive Synthesis is simply the result of adding different frequencies of sine wave together to form a sound. If you created several sine waves using Equation 1, to implement additive synthesis you would simply need to add their outputs together to create an additive sound. Let us say you create two sine waves: O1 at 800 Hz, and O2 at 1200 Hz. Using Additive synthesis you would create your sound (O3) as follows:

Equation A2 - Additive Waveform

O3 = (O1 + O2) / 2

Here, O3 would be the resultant Additive waveform, which would look as follows:

Figure 2 - Additive Wave
Additive

If you plan to do this, make sure that your result (O3) stays below the ABS(32760) amplitude, since this is the maximum amplitude for a 16-bit waveform. For this reason I have divided my result by the number of waves being added together - In this case, 2.

Now I guess if your PC is fast enough to calculate thousands of sine waves very quickly, additive synthesis may produce some great results. The only problem is, how does one arrange the different frequencies to achieve a desired sound? What different frequencies do we use? What amplitudes must we apply to each waveform? The answer to all of these is, "with difficulty!" If you build a house out of tiny bricks, it takes a very long time to complete, but you have ultimate control as to how your house is to be structured. If you build it with larger bricks, it is completed a lot quicker, but you can't get the precision you did with the smaller bricks. Compare Additive Synthesis to the small bricks, and other forms of synthesis to the larger bricks, and you'll see that most computers just don't have the resources for generating hundreds of sine waves and being able to build sounds from them. If we could distort these sine waves, perhaps we could use less to create more, if you will. This brings us to feedback..


3. The Feedback Sine Wave

One simple way of warping (Warping? Scott me up, Beamie!) a sine wave is to allow the output of the wave to effect the input of the wave. i.e. Allowing each sample of the waveform to affect each successive sample thereafter. Well, there is an easy solution to this: Just include some of the output from the RHS side of the simple sine wave equation and plug it into the LHS of the equation. What this does is, it allows the sine wave to modulate itself by mixing back into the equation, some of the output itself. The way to achieve this is to add one expression (
·) to the simple sine wave equation (Equation 1). With this new addition, the equation changes as follows:

Equation A3 - Feedback Sine Wave

O = A * (sin((F * T)
+ (FB * O)))

Here, FB is a feedback constant for Operator O, which forces O on the RHS of the equation to be affected by previous calculations of O on the LHS of the equation. With low values of FB, the waveform produced by this equation resembles a distorted sine wave, but with successively higher values the waveform begins to resemble white noise. I find that keeping the value of FB between -1 and 1 produces the best results, but take note that extremely slight changes in FB (even FB = 0.000001) can affect the waveform produced by the Feedback Sine Wave. I use the following formula for working with FB values:

FB = (-1 >= Value <= 1)

For ease of use, set Value to a number between -100 and 100, and then divide this by (A * 25) to fit in with the above formula as follows:

FB = (-100 <= Value <= 100) / (A * 25) 
' Amplitude * 25

This yields results which are much more controllable than integer values between -1 and 1. Using this Feedback Sine Wave at different values of FB, results similar to the following can be achieved:

Figure 3 - FB = 30
Feedback1
Figure 4 - FB = 40
Feedback2
Figure 5 - FB = 1000
Feedback3

Of course with this new Feedback Sine Wave you could obtain better results with additive synthesis too, but this is not enough because you still require a lot of waveforms to achieve complex sounds. The ideal situation would of course be a formula which provides several waveforms with as little computation as possible. Well, thanks to Dr. John Chowning we have a solution to this in his formula for Frequency Modulation (FM) Synthesis.


4. Frequency Modulation Synthesis

Now here's a form of synthesis which has unfortunately become uncool of late, and is consequently very underrated. Mark my words though, it will come back again because the possibilities of this form of synthesis are immense, especially with new technology. Sadly, it has not been explored and expanded further than was done by Yamaha with their SY range of synths, except perhaps for a few token appearances in some virtual and software synths.

Yamaha started the trend when they introduced Chowning's original FM theory in their DX range of synths in about 1983. Back then it was a breakthrough, but now it is considered a cheap form of synthesis. With today's advances in technology, FM synthesis could be huge. Better oscillators (modulators, carriers ... whatever you want to call them), more options available, speedier processors (much faster is an understatement), lots of memory ... etc. Most people remember FM synths because of the bell-like textures it produced, and especially for its Rhodes-like electric piano sounds, but for me it was the bass sounds that shone out from the rest. There are still bass sounds on old DX synths which are almost impossible to recreate on any other synths, be they analog or digital - except of course for samplers (Duh!) Anyone heard variations of the TX81Z (4-Op FM module from ... urrrrm, Yamaha of course) "Lately Bass"? That is one floor-shaking bass! I'll let you in on a secret ... that bass is used in a lot of dance songs, and I mean a lot. The thumping depth of it is enough to make even the most ardent analog-synth supporter cringe with envy.

Without going in-depth into FM synthesis and the use of its technical terms, it can basically be described as the output produced when one operator modulates the frequency of another. In traditional FM theory, the terms Modulator and Carrier are used for two sine waves which interact with each other. For the sake of simplicity though, I will keep to the term Operator, which is used throughout this document.

In our equation for the Feedback Sine Wave, we used the Operator as part of it's own calculation for feedback. Essentially, this is exactly what we do with FM Synthesis, except in this case we have feedback of one Operator into another Operator (
·) rather than feedback of the Operator into itself. I like to use the term feed-in rather than feedback, since it is one Operator feeding into another. The formula for simple FM Synthesis is as follows:

Equation A4 - FM Waveform

O2 = A2 * (sin((F2 * T)
+ (FI * O1)))

Here, O2 is the Frequency Modulated output of the second waveform, and FI is the feed-in constant (calculated in a similar manner as feedback FB) for Operator O1. This formula produces an output based on the output of the first waveform (O1), and also based on the output (O2) of the second waveform. There are various sidebands which are produced by the interaction of these waveforms, and this is essentially where FM synthesis has an advantage over the prior mentioned waveforms. You get many sine waves from the interaction of just two original waves. Of course if each of the waveforms involved in the equation has a different decay setting, this also changes the final output substantially - the sound changes as it decays. If the frequency of one of the operators is a multiple of the other, this produces a harmonic timbre (instrumental sound). If not, the timbre produced is inharmonic, like many percussion sounds. Put simply, your second operator (the Carrier) is the one which supplies both the overriding decay, and pitch of the final waveform, while operator 1 (the Modulator) supplies the change in timbre.

What would make this formula even more complex is the feedback portion from the Feedback Sine Wave. This will allow the creation of even more complex sounds because each feedback can be seen as another waveform. Looking at it in this light, an FM waveform constructed from two sine waves can actually be seen as one created from 4 waveforms - Two sine waves and two feedback loops. The formula for this type of FM synthesis is simply the Feedback Sine Wave with the inclusion of Feed-in:

Equation A5 - FM Waveform with feedback

O2 = A2 * (sin((F2 * T)
+ (FB * O1) + (FI * O1)))

The following diagram shows an FM waveform resulting from the interaction of two simple sine waves - the first (Modulator) at 800 Hz and the second (Carrier) at 1200 Hz.

Figure 6 - FM Synthesis
O1 = 800Hz
O2 = 1200Hz

FM

FM synthesis can become quite complex when you begin to use more than 2 operators. This is because your options increase substantially when you combine more than 2 operators. Take an example of using 4 operators (sine waves): You could combine these into a mixture of both FM and Additive synthesis, and produce several different ways of combining them into new sounds. In fact, Using Additive and FM with 2 Operators you have 22 (8) options, with 4 operators you have 24 (16) options, and with 6 operators you have 26 (64) options. Below are a few examples of how one could combine both Additive and FM synthesis with 4 Operators:

Algorithm Description
FM Algorithms 1 -> 2 -> X (FM Synthesis)
2 -> 3 -> Y (FM Synthesis)
X + Y -> Output (Additive)
FM Algorithms 1 + 2 + 3 -> X (Additive)
X -> 4 -> Output (FM Synthesis)
FM Algorithms 1 + 2 -> X (Additive)
X -> 3 -> Y (FM Synthesis)
Y + 4 -> Output (Additive)

Now, the great thing about making your own waveform-rendering programs is that you have Carte Blanche editability - If you don't like the way the algorithm does things, you are free to implement any additions or subtractions to change it. Something I have found useful in this regard is to keep the previous iteration of a waveform and use it as input to one you are currently rendering. Let me explain exactly what I mean by this:

Say you have created a program for generating 2-op (two waveforms) FM waveforms. In your two original feedback FM algorithms, you would have your first waveform with feedback, and your second waveform with feedback, and a feed-in from the first waveform into the second. This immediately gives you 5 parameters to play with, over-and-above those for frequency, amplitude and the like. Your 5 parameters are the 2 actual sine waves themselves, the Feedback for waveform 1, Feedback for waveform 2, and Feed-In from waveform 1 into waveform 2. If you generated a 100Hz sine wave for waveform 1, wouldn't it be great if you could modulate it without touching waveform 2 ... yet? Well, you would probably have your waveforms stored in an array or pointer, so why not have a loop-back value from your old waveform array/pointer into the one currently being rendered? Take a look at figure 7 below:

Figure 7 - Two-Stage FM Synthesis
FM Diagram

This shows how we can use only 1 waveform-generating routine to create 2-op FM synthesis, by including previously generated versions of waveform 1 back into current versions of the same waveform. So, you generate a 100Hz sine wave for Operator 1. Then you set a loop-back value (red portion of wave 1 above) and generate, say, a 200Hz sine wave for Operator 1. The previous 100Hz sine wave will modulate the current 200Hz sine wave, and there you have 2-op FM synthesis without needing 2 sets of information - well, sort-of! If you include the same concept in Operator 2, we have another 2 variables to add to our list of parameters, bringing the total now to 7 - 2 waveform outputs, 2 feedback loops, 2 loop-back loops, and 1 feed-in loop. Whew!

What if we decide that this feed-in should perform AM synthesis, or perhaps Additive synthesis instead of Frequency Modulation? Your algorithms would need some adjustments, but this again increases the number of parameters now available, which of course increases the complexity of resulting sounds. The more parameters you have at your disposal the more complex you can make your sounds. Unfortunately, this also means that making sounds becomes more difficult, because you have so many parameters to work with. With careful control of these, however, this should pose limited problems. You could, for instance, set up a list of default settings or templates for achieving certain sounds. That way you have something to start with each time you load in the settings. In fact, this is almost a necessity because things become extremely complicated with so many options. Just think, if you were using 6 operators, you already have 64 different ways in which these can interact with each other using only Additive and FM synthesis. Then you go and add several parameters on top of that, like Frequency, Decay, Sample-Length, Feedback ... etc. This can become a nightmare if you're not careful about how you structure everything. Then you go and add Amplitude Modulation to go with your FM and Additive ... things get a little bit too exciting.


5. Adding Complexities

As I mentioned earlier, the more variables you can add to your formula, the more complex you can make your sounds. So, what ways are there of making the formula more complex? Let's look at what we already have, in the light of a 4-op example:  

  •  2 types of synthesis - FM and Additive.
  •  16 different combinations for the Operators.
  •  4 Frequencies.
  •  4 Amplitudes.
  •  4 Feedbacks.
  •  3 Feed-Ins.

What else is there? What about a Phase Offset value? Remember in our first example code we showed how to programatically produce a sine wave. Look at the variable T (samples/ticks) - that determines exactly where we are in the wave cycle. Starting with T at 0, the sine wave starts at 0. But what if we started with T at some other value? This produces a shift as shown in the following examples :

Figure 8 - Phase = 0%
Phase1
Figure 9 - Phase = 25%
Phase2

The easiest way of implementing this phase shift is to work in percentages of a waveform cycle, and the calculations are as follows ...

Let's simplify things, and use a sampling rate of, say 10000Hz. This would mean that to generate 1 second of a waveform would require 10000 samples, since we are sampling at 10000 times per second (10000 samples/sec). If we set a frequency of 100 Hz for our sine wave, this would mean that we would get 100 sine wave cycles in 1 second. How do we get this figure? 10000Hz/100Hz = 100 samples. So, we now have the cycle size : 1 cycle = 100 samples. Now we use a percentage of this to offset the waveform. If the above descriptions are a bit difficult to fathom, don't worry ... here's the code : 

Equation A6 - Phase Offset Sine Wave

O = A * (sin(F * (T +
PH)))

Now lets make this a bit easier by using some actual code which references our variables defined at the start of this document.

VB Code A2

Dim F, Pi as Single
Dim SR, A, L, Hz, O, PH as Integer
Dim Phase as Single

Hz = 100
' Frequency of Waveform
L = 10000
' Length in Samples
A = 32760
' Amplitude
SR = 10000
' Sampling Rate
Pi = 3.1415
Phase = 25
' 25 % of 1 cycle

PH = (Phase / 100) * (SR / Hz)
' PH = a percentage of 1 cycle

F = (2 * Pi * Hz) / SR
For T = 0 to L
  O = int(A * (sin(F * (T * PH))))
Next T

 

B. Wave Distortion (PD Variant)


1. A Little Information

This type of synthesis was used extensively on the mid '80s Casio CZ synthesizers. The name brand Casio didn't do much to promote the synthesisers at all, mainly because Casio was well known for making home keyboards worthy of toy status, rather than real instruments. But, if you're like me you believe that anything emitting a sound is worth something in music, and Casio's CZ range of synthesisers were certainly worth more than they were given credit for. In my humble opinion, the Casio CZ synths are some of the most underrated in the business. PD synthesis and FM synthesis, as used in Yamaha's DX range, were often lumped into the same category, and although they use similar synthesis techniques, they are most certainly very different beasts. Firstly, PD synthesis is easier to program than FM, and secondly it also produces sounds which are almost worthy of analog status - Almost, but not quite. You could extract a grunginess, almost a distortion effect from PD synths which was not possible with FM. Ask Vince Clarke (ex Depeche Mode, Yazoo and Erasure front-runner) if he thinks the Casio CZ101 synth is a cheap piece of junk. He was so enthralled by them that he used a bank load of several running in parallel to get the effects he wanted. All they lacked was huge polyphony, hence the bank load of CZ101's. With today's technology combined with the resurgence of vintage sounds over the past 6 years, it is very surprising (almost shocking, actually) that Casio has not attempted a CZ revival of sorts. A revamped CZ synth with all the modern trimmings (polyphony, timbrality, more waveforms ... etc) could quite easily be the biggest thing since Virtual Analog!


2. What is PD Synthesis?

So how does PD synthesis work? Well, in a lot of ways it is very similar to FM synthesis, but the fundamental operations performed on waveforms are not quite the same. In simple terms, PD works by distorting a sine wave, and depending on what sort of algorithms you are using to distort the wave, this can be quite dramatic. The easiest way of imagining this is to use the feedback sine wave as an example, where the feedback loop distorts the sine wave. If you use an algorithm to perform the distortion, this is where PD synthesis sets in. Actually, let's jump directly into some algorithms and equations, since this is a lot easier to understand and visualise. Besides, I'm getting a little lost myself without the algorithms in front of me.

Firstly, we need an algorithm which will provide us with an undistorted sine wave. You may be tempted to use the original formula from the beginning of the FM tutorial (re. The simple sine wave), but there is a better formula which is more flexible, and can be used for PD and FM synthesis, and much else inbetween. The coding is as follows :

VB5 Code B1

Dim T, F, SR, A, O, SR As Integer
Dim Phase_Add, Phase As Single
Dim Pi2 As Double

Pi2 = 6.28318530717958
' 2*Pi
SR = 22000
    ' Sampling Rate
F = 880
       ' Frequency in Hz
Phase_Add = F / SR   
' Used to output F Hz
A = 32760
     ' Amplitude
For T = 0 To 100
  O = A * Sin(Pi2 * Phase)
  Phase = Phase + Phase_Add
  If Phase > 1 Then Phase = Phase - 1
Next T

Firstly, Phase is a variable which fluctuates between 0 and 1 - this is where we get the sine wave from. Secondly, this variable is kept between 0 and 1 by the coding indicated in yellow, and thirdly, Phase_Add determines the frequency of the resultant sine wave. There you have it - a new formula for generating a sine wave. Okay then, so how does PD synthesis fit into this equation?

The simple answer to this is that PD synthesis relies on distorting Phase in a periodic manner. i.e. An algorithm is used to distort Phase over a period of time. In FM synthesis, the feed-in loop had a similar effect in that the first waveform modulated the second waveform using this feed-in value. In the case of PD, the waveform is not modulated by another waveform, but distorted by an algorithm. The easiest way of understanding a distortion algorithm is to imagine Phase being manipulated in such a way that it forces a different waveform from the above equation - Say for instance, producing a square wave output rather than a sine wave. First off, you need to develop several algorithms which will force the output of specific waveforms from the above equation. Set each different routine up as a separate function, and then call a specific function within the above equation. Yes, this is a real mouthful, but take a look at the code and see how easy it actually is :

Equation B1 - The Distortion Algorithm

O = A * Sin(Pi2 *
PD(Phase)) ##

Here,
PD(Phase) is actually calling a function which distorts Phase and forces the equation to give O a different waveform. Now depending on what your function PD( ) does, you could produce square waves, white noise, triangles and the like. Let's take an example where this function produces a square wave. We would need to add the following function to the above code ## to produce a square wave :

VB5 Code B2

Function PD(Phh) As Double
 If Phh < 0.5 Then
   PD = 0.25
 Else
   PD = 0.75
 End If
End Function

This function takes the Phase value, and manipulates it so that the Distortion Algorithm outputs a square wave. There are of course other waveforms to think about too, like sawtooth, triangle, pulse-width and noise, and these are detailed as follows :

VB5 Code B3

Function Square(Phh, PW) As Double
  ' Square
 
If Phh < PW Then ' 0 < PW < 1
   Square = 0.25
 Else
   Square = 0.75
 End If
End Function

Here you would need to send the distortion algorithm an extra parameter (PW), denoting what percentage of pulse-width you require (e.g. 0 to 100%).

Here are a few more distortion algorithms :

VB5 Code B4

Function Sine(Phh) As Double
  Sine = Phh    
' Mmm, not much here is there
End Function

Function Saw(Phh) as Double  
' Sawtooth
 
If Phh < 0.5 Then
   Saw = 0.35 * Sin(Phh)
 Else
   Saw = (0.35 * Sin(1 - Phh)) + 0.5
 End If
End Function

Function Tri(Phh) as Double  
' Triangle
 Static Ph As Single
 Static Flag As Integer
 If Flag = 0 Then
   Flag = 1
   Ph = 0.25
 End If
 Ph = Phh + 0.25
 If Ph > 1 Then Ph = Ph - 1
 If Ph < 0.5 Then
   Tri = 0.7 * (Ph - 0.25)
 Else
   Tri = 0.7 * (0.75 - Ph)
 End If
End Function

Function Noise(Phh) As Double  
' White Noise
  Noise = ((Rnd * 1000000000) / 1000000000)
End Function

Now don't take the above algorithms as the only method of getting the desired waveforms. There are probably hundreds of different methods, but in my infinite mathematical wisdom (not!), these were the ones I came up with. There are also an infinite number of other distortion algorithms you could use too, but these are the basis of analog synthesis so they are probably the best to start off with.


3. Changing the Phasing - Phase Distortion

Now the above algorithm certainly gives you several types of waveform, and depending on how many algorithms you have, there will probably be way too many waveforms to choose from. Beyond this, you won't get many interesting effects because ultimately the sounds need to change over time to employ the full effect of PD synthesis. In FM synthesis this change is achieved with the different ADSR settings of each waveform, and the changes are sometimes quite dramatic. In PD synthesis these changes are usually set up as a phasing between different algorithms, controlled either by an LFO or by an ADSR. Basically, with the above PD algorithms you will achieve a sound whose timbre remains constant throughout the ADSR process - like an organ with an Amplitude ADSR envelope. The question is, how do we introduce some form of dynamic change throughout the ADSR of the sounds?

As far as I am aware, traditional PD synthesis employs a transition or phasing between different waveforms - you can think of this transition as a morphing between algorithms. Don't make the mistake of thinking that this is a morphing between sounds. It's not, but in some respects it is similar. How we achieve this transition is to allow the waveform output to swing between one distortion algorithm and another. Say for instance, you choose 2 algorithms for your transition - Square and Sine. Now what happens in PD synthesis is that your output swings between a sine wave and a square wave at a specific frequency, giving you an almost filtering effect. The way of doing this is to create a formula where the value of one distortion algorithm is negatively proportional to the value of another - As the value of one increases, the other decreases proportionately. This looks as follows :

Equation B2 - The PD Algorithm

y = ((1 - z) * Sine(Phase)) + (z * Square(Phase))
O = A * Sin(Pi2 * PD(y))

Here, z is a variable much like Phase, which swings between 0 and 1 at a specific frequency. The frequency can be set in exactly the same manner as the variable Phase by using a variable z_Add = Phase_Frequency (in Hz) / SR. Now employ the same formula used with Phase and Phase_Add in VB5 Code Example 1, and z will swing between 0 and 1, forcing the above equation to swing between a Sine and a Square wave at frequency = Phase_Frequency. It works because with z = 0, O is at a full Sine wave. At z = 1, O is at a full Square wave. So, the speed (frequency) at which z swings between 0 and 1 determines how quickly O swings between a Sine Wave and a Square wave.

There certainly is no need to exclusively use this sort of linear phasing. A better method is to set up an ADSR envelope which will be used to control the level of one algorithm against the level of another. Depending on how many points of change you have allowed in your envelope, this would probably be a lot more fruitful than simply using an LFO as shown above.


4. Using PD Synthesis

Want to make it more complex? Sure, just add in everything you know about FM, Additive and AM synthesis. Add in the feedback loop, or add in some FM and we now have an even more complex system. With feedback and FM added to the PD equation, it now looks as follows :

Equation B3 - PD, with Feedback and FM

O2 = A * Sin((Pi2 * PD(y)) + (FB * O2) + (FI * O1))

I won't explain much about FM, AM, Additive, and PD synthesis together because with the above algorithm, and the previous explanations of FM synthesis you should be able to create some great techniques for melting these all together. In fact, once you understand the techniques involved in PD synthesis, you may choose to use these algorithms above those developed in the earlier sections of FM synthesis. The reason for this is that it is easier to work with the variables as given in the PD equations, and manipulating the waveforms is a lot easier.

I am no expert on this, but my feeling is that PD synthesis is very limited without the introduction of other forms of synthesis to enhance it. Perhaps a resonant-filter algorithm would give it a real kick, but then again a resonant-filter is useful for any type of synthesis. PD synthesis as described above will most definitely give you very thin sounding textures, so you would need to layer a couple of waves on top of each other (additive synthesis), and even better, sew the PD waveforms into some AM and Fm synthesis as well.

I have not yet delved very far in the area of mixing the fundamental principles of FM and PD synthesis, but I can only imagine how much PD synthesis can enhance traditional FM theory. In the earliest FM synths, there was exclusive use of sine waves for producing sounds. Later on Yamaha added a few extra waveforms in synths like the TX81Z. This allowed the 4-op TX81Z synth to perform as well as a 6-op synth, but only because the fundamental waveforms were not always sine waves. With PD synthesis you have as many waveforms as you have distortion algorithms, so applying these to FM and AM synthesis could be quite exciting.

Earlier FM synths using a variety of waveforms employed the use of very few extra waveforms - perhaps 5 or 6. This, however, allowed for many variations in sound texture over sine waves, so the necessity to have lots of operators was reduced. Now with PD algorithms there are many fundamental waveforms to choose from, so the sonic possibilities are huge. Then add to this the fact that we now know how to phase between different algorithms, and this makes the whole process even more complex. Phasing, distortion, different frequencies and amplitudes, different ADSR envelopes, different FM and AM algorithms ...... these are all starting to constitute something BIG.

The trick will obviously be to harness the power somehow, so as not to make the whole process too complex. This certainly will not be an easy task ...

but I'll leave that up to you ...

_____________________________________________________
All contents Copyright © 2000-2003 Analoguesque Sound Designs