Interesting... I am wondering if radical changes to
the the transfer function would cause discontinuities in
the output signal. Never thought of the question.
I'll love to try them. Coincidentally, I was only yesterday
teaching a class on waveshaping.

Victor

----- Original Message -----
From: Anthony Kozar <anthonykozar@sbcglobal.net>
Date: Wednesday, December 5, 2007 8:30 am
Subject: Re: [Cs-dev] New opcodes useful?
To: Csound Developer list <csound-devel@lists.sourceforge.net>

> Victor.Lazzarini@nuim.ie wrote on 12/5/07 2:54 AM:
>
> > PD seem useful. UDOs are also good because they're didactical,
> can you
> > do both?
>
> Thanks.  I wrote the phase dist. opcodes (and powershape
> below) a while ago
> but I will make UDOs too.
>
> > How do the waveshaping opcodes you mention
> > differ from simply building them with oscillator and table
> > lookup?
>
> They allow for _dynamic_ waveshaping where the transfer function
> varies over
> time.  I have written the following opcodes so far and hope
> to come up with
> some more:
>
> aout  powershape    ain, kShapeAmount [,
> ifullscale]aout  polynomial    ain, ka0 [,
> ka1 [, ka2 [...]]]
> aout  chebyshevpoly ain, ka0 [, ka1 [, ka2 [...]]]
>
> polynomial efficiently calculates any single-variable polynomial
> with k-rate
> coefficients.  chebyshevpoly does the same but each
> coefficient is a
> multiplier for an nth-order chebyshev polynomial.  With a
> sine wave input,
> this allows precise time-varying control over any number of
> harmonically-tuned partials, but requires only one oscillator.
>  
> Manual description for powershape:
>
> This opcode is very similar to the pow unit generators that
> already exist in
> Csound for calculating the mathematical "power of"
> operation.  However, it
> introduces a couple of twists which I think make it much more
> useful for
> waveshaping audio-rate signals.  The kShapeAmount parameter
> is the exponent
> to which the input signal is raised.
>
> Normally, unless the exponent is an odd integer, the pow() of a
> negativeinput is a complex number, so the Csound ugens simply
> return zero in those
> cases.  This will turn a bipolar audio signal into a
> unipolar signal with
> large portions of the output pinned to zero.  The
> powershape opcode instead
> treats all input values as positive but preserves their sign in
> the output
> signal.  This allows for smooth shaping of any input signal
> while varying
> the exponent over any range.  (Powershape also (hopefully) deals
> intelligently with  discontinuities that could arise when
> the exponent and
> input are both zero.  Note though that negative exponents
> will usually cause
> the signal to exceed the maximum amplitude specified by the ifullscale
> parameter and should normally be avoided).
>
> The other adaptation involves the ifullscale parameter. 
> The input signal is
> divided by ifullscale before being raised to kShapeAmount and then
> multiplied by ifullscale before being output.  This
> normalizes the input
> signal to the interval [-1,1], guaranteeing that the output will
> also be
> within this range.  Also, the pow() function provides a
> smoothly evolving
> transfer function when its input is in this range.  Values
> of kShapeAmount
> between (0,1) will make the signal more "convex" while values
> greater than 1
> will make it more "concave" and a value of exactly 1.0 will
> produce no
> change in the input signal.
>
>
> Anthony Kozar
> anthonykozar AT sbcglobal DOT net
> http://anthonykozar.net/
>
>
> -----------------------------------------------------------------
> --------
> SF.Net email is sponsored by: The Future of Linux Business White Paper
> from Novell.  From the desktop to the data center, Linux is going
> mainstream.  Let it simplify your IT future.
> http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel