Sorry it's the new university ***king web-mail system, which seems to be doing stuff on its own. Apologies again; I don't like html e-mails as well and mailed so unadvertedly. Victor ----- Original Message ----- From: jpff@cs.bath.ac.uk Date: Wednesday, December 5, 2007 6:23 pm Subject: [Cs-dev] [Victor.Lazzarini@nuim.ie: Re: New opcodes useful?] To: csound-devel@lists.sourceforge.net > Just a mild request; can we limit HTML mail to this list? > I really > find this unreadable > ------- Start of forwarded message ------- > PD seem useful. UDOs are also good because they're didactical, > can you
do both?

How do the waveshaping > opcodes you mention
differ from simply building them with > oscillator and table
lookup?

Victor
---- > - Original Message -----
From: Anthony Kozar >
Date: Wednesday, > December 5, 2007 2:33 am
Subject: [Cs-dev] New opcodes > useful?
To: New Csound Developer list devel@lists.sourceforge.net>

> I am also > planning to add a few new opcodes in the next few days >
> for dynamic
> waveshaping and phase > distortion. I am sure that the
> waveshaping > opcodes
> will be useful, but I wonder about the phase > distortion
> ones. I am
> considering > adding them because two of them would require ksmps
> > == 1 to
> emulate with orchestra code. (pdclip > could be emulated
> with the limit
> opcode, > I think). Do you think t > hese opcodes will be
> useful enough > or
> should I just make them available as > UDOs?
>
> aout > pdhalf ain,
> > kShapeAmount [, ifullscale]
> aout > pdhalfy ain,
> kShapeAmount [, > ifullscale]
> aout > pdclip ain,
> kWidth, > kCenter [, ifullscale]
>
> PDhalf
> >
> This opcode is designed to emulate the "classic" > phase
> distortion synthesis
> method of the > Casio CZ-series of synthesizers from the mid-
> > 1980's. This
> technique reads the first and > second halves of a function table
> at > different
> rates in order to warp the waveform. > The rates are chosen
> so that the
> overall > period of oscillation is preserved. Thus, phase >
> distortion can only
> produce higher > partials in a harmonic s > eries. It does not
> produce > sidebands
> which may be inharmonic in the way that > frequency modulation does.
>
> pdhalf > calculates a transfer function which is composed of two > linear
> segments. (See attached image). > These segments meet
> at a "pivot point"
> > which always lies on the x axis (for a bipolar input). The >
> kShapeAmountparameter specifies where on the x axis > this point
> falls. The negative half
> > of the input range is mapped linearly between -1.0*ifullscale > and
> kShapeAmount. The positive half is mapped > linearly between
> kShapeAmount and
> > ifullscale. A value of zero for kShapeAmount will not have >
> any effect on
> the input signal. If > the output is used to index a table,
> values > for
> kShapeAmount that are less than zero will cause > the first half
> of the table
> to be read > more quickly than > the second half. The reverse
> is true > for
> values of kShapeAmount greater than > zero.
>
> Currently, pdhalf expects a bipolar > input signal. So you
> must scale and
> > offset your input (and output!) appropriately if it is a >
> unipolar phasor. I
> will probably > add an optional parameter to support unipolar
> > signals before
> committing. kShapeAmount is > always between -1 and 1 for
> bipolar > operation.
>
> A typical example of the use > of pdhalf is
> aosc phasor > ifreq
> apd pdhalf 2*aosc - > 1.0,
> kamount ; convert aosc to > bipolar
> aout tablei 0.5*(apd+1.0), > 1,
> 1 ; convert apd back to > unipolar
>
> PDhalfy
>
> > This is a variation on PDhalf that places the pivot point of the > phase
> distortion on the y axis ins > tead of the x axis. Thus, it
> does not > read the
> two halves of a table at different rates, > but instead divides it
> into two
> segments > of different sizes depending upon the kShapeAmount
> > parameter. Each
> of these segments is then > mapped to half of the oscillator
> period (or > just
> the output range if not being used to distort a > phasor).
> This opcode has a
> milder > quality to its distortion in my experience.
> >
> PDclip
>
> This opcode performs > linear clipping on the input signal ain.
> kwidth is > the
> percentage of the signal range that is clipped > (must be between
> 0 and 1).
> The rest of > the input range is mapped linearly from -ifullscale > to
> ifullscale. kcenter specifies an offset for > shifting the
> unclipped window
> of the > signal higher or lower in the range (essentially a DC > offset).
> ifullscale se > ts the maximum amplitude of the input and output > signals
> (defaults to 1.0).
>
> > This amounts to waveshaping the input with the following >
> transfer function
> (normalized to > ifullscale=1.0) :
>
> > 1| >
> _______ width of > clipped region is
> > kwidth | >
> / width of unclipped region is (1-kwidth)
> |
> / kcenter shifts the unclipped region
> -1
> |/ 1 left or right (up to kwidth)
> --------------------
> > /|
> > / |
> > / |
> ------ > |-1
>
> This opcode may be used > for direct, linear distortion of an
> audio > signal.
> Alternatively, you might use it to modify the > output of a phasor
> before it
> is used to > index a function table, effectively making this a > phase
> distortion technique.
>
> > > ------------------------------------------------------------ > -----
> --------
> 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.sourcef > orge.net/lists/listinfo/csound-devel > > - --------------------------------------------------------------- > ---------- > 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 >  -=- MIME -=-  > This is a multi-part message in MIME format. > > --Boundary_(ID_CVeaDXSk8bQb4FmKOISlfA) > Content-type: text/html; charset=us-ascii > Content-transfer-encoding: quoted-printable > Content-disposition: inline > > PD seem useful=2E UDOs are also good because they=27re > didactical=2C can= > you=3CBR=3Edo both=3F=3CBR=3E=26nbsp=3B=3CBR=3EHow do the > waveshaping o= > pcodes you mention=3CBR=3Ediffer from simply building them with > oscillat=or and > table=3CBR=3Elookup=3F=3CBR=3E=3CBR=3EVictor=3CBR=3E----- Origina= > l Message -----=3CBR=3EFrom=3A Anthony Kozar > =26lt=3Banthonykozar=40sbcg=lobal=2Enet=26gt=3B=3CBR=3EDate=3A > Wednesday=2C December 5=2C 2007 2=3A3= > 3 am=3CBR=3ESubject=3A =5BCs-dev=5D New opcodes > useful=3F=3CBR=3ETo=3A N= > ew Csound Developer list =26lt=3Bcsound- > devel=40lists=2Esourceforge=2Ene=t=26gt=3B=3CBR=3E=3CBR=3E=26gt=3B I am also planning to add a few new op= > codes in the next few days =3CBR=3E=26gt=3B for > dynamic=3CBR=3E=26gt=3B = > waveshaping and phase distortion=2E=26nbsp=3B I am sure that the > =3CBR=3E==26gt=3B waveshaping opcodes=3CBR=3E=26gt=3B will be > useful=2C but I won= > der about the phase distortion =3CBR=3E=26gt=3B > ones=2E=26nbsp=3B I am=3C= > BR=3E=26gt=3B considering adding them because two of them would > require = > ksmps =3CBR=3E=26gt=3B =3D=3D 1 to=3CBR=3E=26gt=3B emulate with > orchestr=a code=2E=26nbsp=3B (pdclip could be emulated > =3CBR=3E=26gt=3B with the = > limit=3CBR=3E=26gt=3B opcode=2C I think)=2E=26nbsp=3B Do you > think these= > opcodes will be =3CBR=3E=26gt=3B useful enough > or=3CBR=3E=26gt=3B shoul= > d I just make them available as UDOs=3F=3CBR=3E=26gt=3B > =3CBR=3E=26gt=3B= aout=26nbsp=3B=26nbsp=3B=26nbsp=3B > pdhalf=26nbsp=3B=26nbsp=3B=26nbsp=3B==26nbsp=3B=26nbsp=3B ain=2C > =3CBR=3E=26gt=3B kShapeAmount =5B=2C ifullsc= > ale=5D=3CBR=3E=26gt=3B aout=26nbsp=3B=26nbsp=3B=26nbsp=3B > pdhalfy=26nbsp==3B=26nbsp=3B=26nbsp=3B=26nbsp=3B ain=2C > =3CBR=3E=26gt=3B kShapeAmount =5B= > =2C ifullscale=5D=3CBR=3E=26gt=3B > aout=26nbsp=3B=26nbsp=3B=26nbsp=3B pdc= > lip=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B ain=2C > =3CBR=3E=26=gt=3B kWidth=2C kCenter =5B=2C > ifullscale=5D=3CBR=3E=26gt=3B =3CBR=3E=26= > gt=3B PDhalf=3CBR=3E=26gt=3B =3CBR=3E=26gt=3B This opcode is > designed to= > emulate the =22classic=22 phase =3CBR=3E=26gt=3B > distortion synthesis=3C= > BR=3E=26gt=3B method of the Casio CZ-series of synthesizers from > the mid= > -=3CBR=3E=26gt=3B 1980=27s=2E=26nbsp=3B This=3CBR=3E=26gt=3B > technique r= > eads the first and second halves of a function table > =3CBR=3E=26gt=3B at= > different=3CBR=3E=26gt=3B rates in order to warp the > waveform=2E=26nbsp==3B The rates are chosen =3CBR=3E=26gt=3B so > that the=3CBR=3E=26gt=3B ov= > erall period of oscillation is preserved=2E=26nbsp=3B Thus=2C > phase =3CB= > R=3E=26gt=3B distortion can only=3CBR=3E=26gt=3B produce higher > partials= in a harmonic series=2E=26nbsp=3B It does not > =3CBR=3E=26gt=3B produce = > sidebands=3CBR=3E=26gt=3B which may be inharmonic in the way > that freque= > ncy modulation does=2E=3CBR=3E=26gt=3B =3CBR=3E=26gt=3B pdhalf > calculate=s a transfer function which is composed of two > linear=3CBR=3E=26gt=3B se= > gments=2E=26nbsp=3B (See attached image)=2E=26nbsp=3B These > segments mee= > t =3CBR=3E=26gt=3B at a =22pivot point=22=3CBR=3E=26gt=3B which > always l= > ies on the x axis (for a bipolar input)=2E=26nbsp=3B The > =3CBR=3E=26gt=3B= kShapeAmountparameter specifies where on > the x axis this point =3CBR=3E= > =26gt=3B falls=2E=26nbsp=3B The negative half=3CBR=3E=26gt=3B of > the inp= > ut range is mapped linearly between -1=2E0*ifullscale > and=3CBR=3E=26gt=3B= kShapeAmount=2E=26nbsp=3B The positive > half is mapped linearly between = > =3CBR=3E=26gt=3B kShapeAmount and=3CBR=3E=26gt=3B > ifullscale=2E=26nbsp=3B= A value of zero for kShapeAmount > will not have =3CBR=3E=26gt=3B any eff= > ect on=3CBR=3E=26gt=3B the input signal=2E=26nbsp=3B If the > output is us= > ed to index a table=2C =3CBR=3E=26gt=3B values > for=3CBR=3E=26gt=3B kShap= > eAmount that are less than zero will cause the first half > =3CBR=3E=26gt=3B= of the table=3CBR=3E=26gt=3B to be read > more quickly than the second ha= > lf=2E=26nbsp=3B The reverse =3CBR=3E=26gt=3B is true > for=3CBR=3E=26gt=3B= values of kShapeAmount greater than > zero=2E=3CBR=3E=26gt=3B =3CBR=3E=26= > gt=3B Currently=2C pdhalf expects a bipolar input > signal=2E=26nbsp=3B So= > you =3CBR=3E=26gt=3B must scale and=3CBR=3E=26gt=3B offset > your input (= > and output!) appropriately if it is a =3CBR=3E=26gt=3B unipolar > phasor=2E==26nbsp=3B I=3CBR=3E=26gt=3B will probably add an > optional parameter to = > support unipolar =3CBR=3E=26gt=3B signals before=3CBR=3E=26gt=3B > committ=ing=2E=26nbsp=3B kShapeAmount is always between -1 and 1 > for =3CBR=3E=26= > gt=3B bipolar operation=2E=3CBR=3E=26gt=3B =3CBR=3E=26gt=3B A > typical ex= > ample of the use of pdhalf is=3CBR=3E=26gt=3B =26nbsp=3B > aosc=26nbsp=3B = > phasor=26nbsp=3B ifreq=3CBR=3E=26gt=3B =26nbsp=3B > apd=26nbsp=3B=26nbsp=3B= pdhalf=26nbsp=3B 2*aosc - 1=2E0=2C > =3CBR=3E=26gt=3B kamount=26nbsp=3B=26= > nbsp=3B =3B convert aosc to bipolar=3CBR=3E=26gt=3B =26nbsp=3B > aout=26nb=sp=3B tablei=26nbsp=3B 0=2E5*(apd+1=2E0)=2C 1=2C > =3CBR=3E=26gt=3B 1=26nb= > sp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B =3B convert apd back to > unipolar=3CB=R=3E=26gt=3B =3CBR=3E=26gt=3B > PDhalfy=3CBR=3E=26gt=3B =3CBR=3E=26gt=3B T= > his is a variation on PDhalf that places the pivot point of the > phase=3C=BR=3E=26gt=3B distortion on the y axis instead of the x > axis=2E=26nbsp=3B= Thus=2C it =3CBR=3E=26gt=3B does not > read the=3CBR=3E=26gt=3B two halve= > s of a table at different rates=2C but instead divides it > =3CBR=3E=26gt=3B= into two=3CBR=3E=26gt=3B segments of > different sizes depending upon the= > kShapeAmount =3CBR=3E=26gt=3B parameter=2E=26nbsp=3B > Each=3CBR=3E=26gt=3B= of these segments is then mapped to > half of the oscillator =3CBR=3E=26g= > t=3B period (or just=3CBR=3E=26gt=3B the output range if not > being used = > to distort a phasor)=2E=26nbsp=3B =3CBR=3E=26gt=3B This opcode > has a=3CB= > R=3E=26gt=3B milder quality to its distortion in my > experience=2E=3CBR=3E==26gt=3B =3CBR=3E=26gt=3B > PDclip=3CBR=3E=26gt=3B =3CBR=3E=26gt=3B This o= > pcode performs linear clipping on the input signal ain=2E > =3CBR=3E=26gt=3B= kwidth is the=3CBR=3E=26gt=3B percentage > of the signal range that is cl= > ipped (must be between =3CBR=3E=26gt=3B 0 and > 1)=2E=3CBR=3E=26gt=3B The = > rest of the input range is mapped linearly from -ifullscale > to=3CBR=3E=26=gt=3B ifullscale=2E=26nbsp=3B kcenter specifies an > offset for shifting t= > he =3CBR=3E=26gt=3B unclipped window=3CBR=3E=26gt=3B of the > signal highe= > r or lower in the range (essentially a DC > offset)=2E=3CBR=3E=26gt=3B ifu= > llscale sets the maximum amplitude of the input and output > signals=3CBR=3E==26gt=3B (defaults to 1=2E0)=2E=3CBR=3E=26gt=3B > =3CBR=3E=26gt=3B This am= > ounts to waveshaping the input with the following > =3CBR=3E=26gt=3B trans= > fer function=3CBR=3E=26gt=3B (normalized to ifullscale=3D1=2E0) > =3A=3CBR==3E=26gt=3B =3CBR=3E=26gt=3B > =26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26=nbsp=3B=26nbsp=3B=26nbsp=3B 1=7C=26nbsp=3B=26nbsp=3B =3CBR=3E=26gt=3B =5F= > =5F=5F=5F=5F=5F=5F=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B wid= > th of clipped region is =3CBR=3E=26gt=3B > kwidth=26nbsp=3B=26nbsp=3B=26nb=sp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B =7C=26nbsp=3B =3C= > BR=3E=26gt=3B > /=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp==3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B width of= > unclipped region is (1-kwidth)=3CBR=3E=26gt=3B > =26nbsp=3B=26nbsp=3B=26n=bsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B =7C =3CBR=3E=26= > gt=3B > /=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nb=sp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B kcente= > r shifts the unclipped region=3CBR=3E=26gt=3B - > 1=26nbsp=3B=26nbsp=3B=26n=bsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B > =3CBR=3E=26gt=3B =7C/=26nbsp=3B=26n= > bsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B > 1=26nbsp=3B=26n=bsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B left or right (= > up to kwidth)=3CBR=3E=26gt=3B -------------------- > =3CBR=3E=26gt=3B =26nb= > sp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B /=7C=3C= > BR=3E=26gt=3B > =26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B= / =7C=3CBR=3E=26gt=3B =26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B=26nbsp=3B= > /=26nbsp=3B =7C=3CBR=3E=26gt=3B ------=26nbsp=3B=26nbsp=3B > =7C-1=3CBR=3E= > =26gt=3B =3CBR=3E=26gt=3B This opcode may be used for direct=2C > linear d= > istortion of an =3CBR=3E=26gt=3B audio signal=2E=3CBR=3E=26gt=3B > Alterna=tively=2C you might use it to modify the output of a > phasor =3CBR=3E=26g= > t=3B before it=3CBR=3E=26gt=3B is used to index a function > table=2C effe= > ctively making this a phase=3CBR=3E=26gt=3B distortion > technique=2E=3CBR==3E=26gt=3B =3CBR=3E=26gt=3B =26gt=3B --------- > -------------------------= > -------------------------------=3CBR=3E=26gt=3B -------- > =3CBR=3E=26gt=3B= SF=2ENet email is sponsored by=3A The > Future of Linux Business White Pa= > per=3CBR=3E=26gt=3B from Novell=2E=26nbsp=3B From the desktop to > the dat= > a center=2C Linux is going=3CBR=3E=26gt=3B > mainstream=2E=26nbsp=3B Let i= > t simplify your IT future=2E=3CBR=3E=26gt=3B > http=3A//altfarm=2Emediaple=x=2Ecom/ad/ck/8857-50307-18918- > 4=26gt=3B =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F= > =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F= > =5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=5F=3CBR=3E=26gt=3B Csound- > devel mailin= > g list=3CBR=3E=26gt=3B Csound- > devel=40lists=2Esourceforge=2Enet=3CBR=3E=26=gt=3B > https=3A//lists=2Esourceforge=2Enet/lists/listinfo/csound-devel > > > --Boundary_(ID_CVeaDXSk8bQb4FmKOISlfA) > Content-Type: text/plain; charset="us-ascii" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Content-Disposition: inline > > ----------------------------------------------------------------- > -------- > 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 > --Boundary_(ID_CVeaDXSk8bQb4FmKOISlfA) > Content-Type: text/plain; charset="us-ascii" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Content-Disposition: inline > > _______________________________________________ > Csound-devel mailing list > Csound-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/csound-devel > > --Boundary_(ID_CVeaDXSk8bQb4FmKOISlfA)-- > > > > > ------- End of forwarded message ------- > > ==John ffitch > > ----------------------------------------------------------------- > -------- > 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