100% found this document useful (1 vote)
274 views12 pages

Wave Shaping Synthesis

Waveshaping synthesis involves modifying an audio signal using a transfer function to distort the signal in a nonlinear way. It can produce precise harmonic spectra similarly to FM synthesis but without warbling artifacts. In Csound, waveshaping is implemented by using a table containing the transfer function and indexing into it with the audio signal plus an offset. Special generator functions like Chebyshev polynomials can be used to create transfer functions that generate specific harmonic spectra.

Uploaded by

Vadim Drokov
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
274 views12 pages

Wave Shaping Synthesis

Waveshaping synthesis involves modifying an audio signal using a transfer function to distort the signal in a nonlinear way. It can produce precise harmonic spectra similarly to FM synthesis but without warbling artifacts. In Csound, waveshaping is implemented by using a table containing the transfer function and indexing into it with the audio signal plus an offset. Special generator functions like Chebyshev polynomials can be used to create transfer functions that generate specific harmonic spectra.

Uploaded by

Vadim Drokov
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 12

Waveshaping Synthesis

 

Also called nonlinear distortion Originally developed by J. C. Risset, later refined by Arfib and LeBrun Involves modifying (distorting) an audio signal by means of a transfer function Achieves results comparable to FM, in terms of its efficiency and its ability to create dynamic changes in timbre Has the advantage of producing precise, harmonic, band-limited spectra, without FM warbling

A Basic Design
The output of an oscillator is used an index into a table containing a transfer function. An envelope is used on the amplitude input to the oscillator, which dynamically controls the range of values retrieved from the table. [Diagram from C. Roads]

Transfer Functions With Outputs


Depending on the transfer function, waveshaping can modify an input signal in various ways. Here, a pure sine wave is: (a) inverted, (b) attenuated, (c) clipped, and (d) radically altered. [From C. Roads]

Example Transfer Functions


A linear function (a) will not change the output spectrum, but non-linear functions will. A function symmetrical around the origin will generate only odd harmonics; one that is symmetrical around the vertical axis will only produce even harmonics. Jagged functions may cause aliasing.
[Dodge/Jerse]

Creating Transfer Functions




Transfer functions can be created in a variety of ways, including drawing them. However, to create a transfer function that will have a limited and predictable output spectrum, it is best to use polynomials. A polynomial of the following form will produce no harmonics above the Nth: F(x) = d0 + d1x + d2x2 + + dNxN

Chebyshev Polynomials


Useful for creating transfer functions that will produce specific harmonic partials at specific relative amplitudes, if the entire function is being referenced by an input sine wave A Chebyshev polynomial of the kth order will produce only the kth harmonic Chebyshev polynomials of various orders can be summed to create a transfer function that will generate a precise harmonic spectrum

Special Gen Subroutines




Csound provides several special Gen Subroutines for use in waveshaping:


   

Gen 3 general polynomials in x Gen 13 Chebsyhev polynomials of 1st kind Gen 14 Chebyshev polynomials of 2nd kind Gen 4 normalization functions

Implementation in Csound
There is no waveshaping opcode in Csound. Instead, we implement it using a table with a normalized index and an offset of .5. E.g., kamp linen .499, irise, idur, idecay aindex oscili kamp, icps, isinefn awsig tablei aindex, iwsfn, 1, .5 Note that the peak value of linen is set to .499, which ensures that the offset index into table will never quite reach 0 or 1.

Using Normalization Functions




Output amplitude of a waveshaper depends heavily on index




Small indices may produce very low amplitudes and/or DC bias Use Gen04 to create Typically size of waveshaping function Use WS Index as pointer

Normalization functions compensate


  

Gen04
Syntax f # time size 4 source# sourcemode Initialization size -- number of points in the table. Should be power-of-2 plus 1. Must not exceed (except by 1) the size of the source table being examined; limited to just half that size if the sourcemode is of type offset (see below). source # -- table number of stored function to be examined. sourcemode -- a coded value, specifying how the source table is to be scanned to obtain the normalizing function. Zero indicates that the source is to be scanned from left to right. Non-zero indicates that the source has a bipolar structure; scanning will begin at the mid-point and progress outwards, looking at pairs of points equidistant from the center.

Example Csound Code


kenv kamp aindex awsig knorm asig linen linen oscili tablei tablei = out p4,irise,idur,idecay .499, irise, idur, idecay kamp, icps, isinefn aindex, iwsfn, 1, .5 kamp, inormfn,1 awsig*knorm asig*kenv

See wavshape.csd

Reading
  

Dodge Chapter 4, pp. 128 Roads, pp. 252 261 Boulanger, pp. 243 - 249

142

You might also like