Work at SourceForge, help us to make it a better place! We have an immediate need for a Support Technician in our San Francisco or Denver office.
Close
From: Steve the Fiddle <stevethefiddle@gm...>  20100502 15:08:58
Attachments:
Message as HTML
FadePlus.ny.zip

From: paul beach <sniffyraven@fa...>  20100503 20:43:52

FadePlus is version 3, which does not return audio on version 1. Zip file attachments have always been passed along, by this eMail list, with no problem. Bezier curve is interesting. See Windows Paint: Click on wiggly icon, click and drag mouse. The line has two 'handles'. Click and drag twice to pull the line into a Bezier curve. Comment from FadePlus "The envelope is created as a Cubic Bezier curve (similar to Bezier curves in vector graphics programs)."  paul beach sniffyraven@... 
From: Steve the Fiddle <stevethefiddle@gm...>  20100503 22:18:55
Attachments:
Message as HTML
FadePlus.zip

From: paul beach <sniffyraven@fa...>  20100504 09:35:38

A musical phase needs about 8 handles. The method of adding dynamics to a midi file; (forte, mezzo piano = f, mp), and so on, just does not work. Also, a documentary where music fades behind the speaker; it might be desirable to have as many handles as the stack will bear. This was done before in a midi editor called Zel. But it went out of business. It was not at your level of sophostication. Control of dynamics, sometimes called velocity, is a big deal in my opinion. I have the impression that there are only two ''handles". At the moment, I have dialup for $50 a year on an old Windows 98. You probably want a more technical appraisal, hope this helps. Paul  paul beach sniffyraven@... 
From: Stevethefiddle <stevethefiddle@gm...>  20100509 22:10:40

I agree that only having a few choices of amplitude (pp, p, mp, mf ...) is rather limiting, but this effect allows start and end amplitude settings with precision of at least 4 decimal places. The "handles" define the shape of the fade. Although there are only 2 handles to each fade, these define a series of 50 "control points" that produce a smooth transition from one level to another level. Depending on the values for these handles, the shape of the transition can be adjusted to produce a very wide range of fade types. The number of control points that are generated could be increased to thousands, but in practice increasing the number above about a dozen has negligible affect on the sound as the volume level from one control point to the next is not a jump, but a linear extrapolation. 50 points is a generous number of control points that is likely to exceed the most exacting requirements. The settings are analogous to the speed at which you move a fader on a mixing console. For example: you could start fading out quite rapidly then gradually slow down as you approach the target volume and produce a logarithmic decay type of fade, or you could start slowly, then speed up, then slow down again, to produce a smooth transition from one level to another, or you could move the fader at a constant speed to create a linear fade. For simplicity, a number of useful "preset" fade types are available, but if none of these are adequate the user can customise the fade shape. For more complex envelope shaping, the track can be processed in sections, for example, a smooth fade from 100% to 50%, followed by a linear fade from 50% to 73.6217%, followed by an exponential fade from 73.6217% to silence. As a specific question regarding this effect, I would be interested to know if anyone has a preference for the start and end amplification to be as a % or as +/ dB.  View this message in context: http://audacity.238276.n2.nabble.com/Versatilefadeamplifyeffecttp4993235p5028017.html Sent from the audacitynyquist mailing list archive at Nabble.com. 
From: paul beach <sniffyraven@fa...>  20100511 05:03:27

The Nyquist Manual lists these constant definitions. If a 3dB jump is spread over three or four notes, that should be just fine. lppp = 12.0 (dB) lpp = 9.0 lp = 6.0 lmp = 3.0 lmf = 3.0 lf = 6.0 lff = 9.0 lfff = 12.0 FadePlus is a wave editor. Could this utility act on a piece wise linear (pwl ) function; which in turn, is used to control other things, such as frequency modulation. Example: make a ramp warble upward, (fmosc midi_number (warbleramp)). A "tight turn" might be like a guitar snap or violin slur. > As a specific question regarding this effect, I would be interested to > know > if anyone has a preference for the start and end amplification to be as a > % > or as +/ dB. > dB is familiar to the ears; however % is easier to see. Try viewing the waveform as dB. It is not very helpful.  paul beach sniffyraven@... 
From: Stevethefiddle <stevethefiddle@gm...>  20100511 22:44:36
Attachments:
Message as HTML

Paul Beach23 [via Audacity] wrote: > The Nyquist Manual lists these constant definitions. If a 3dB jump is > spread over three or four notes, that should be just fine. > > lppp = 12.0 (dB) > lpp = 9.0 > lp = 6.0 > lmp = 3.0 > lmf = 3.0 > lf = 6.0 > lff = 9.0 > lfff = 12.0 > > FadePlus is a wave editor. Could this utility act on a piece wise linear > (pwl ) function; which in turn, is used to control other things, such as > frequency modulation. Example: make a ramp warble upward, > (fmosc midi_number (warbleramp)). A "tight turn" might be like a > guitar snap or violin slur. > > > As a specific question regarding this effect, I would be interested to > > know > > if anyone has a preference for the start and end amplification to be > as a > > % > > or as +/ dB. > > > dB is familiar to the ears; however % is easier to see. Try viewing the > waveform as dB. It is not very helpful. >  > paul beach > [hidden email] </user/SendEmail.jtp?type=node&node=5034409&i=0> > > >  > Thanks for the feedback Paul. The "Bezier" function produces a "control signal" that is in the range 0 to +1.0 It is formed using the function (pwlvlist ...) with a list of values that are derived from the equation for a Bezier curve: B(t)=((1t)^3)*P0 + 3*((1t)^2)*t*P1 + 3*((1t)t^2)*P2 + (t^3)*P3 You could use that control signal for just about anything. In this application it is calculated at the sound sample rate so as to avoid producing glitches at the end (if the end amplitude is nonzero). For other applications it would probably be sufficient, and more efficient to calculate it at the control rate. This can be done by simply omiting (controlsrateabs *soundsrate* from the end of the Bezier function. Here is the Bezier function in full: ;; Function BEZIER ;Returns a bezier curve with relative length 1.0 ;Variables used: P0x,P0y,P1x,P1y,P2x,P2y,P3x,P3y ;all values should be positive. ;Equation for Bezier curve: B(t)=((1t)^3)*P0 + 3*((1t)^2)*t*P1 + 3*((1t)t^2)*P2 + (t^3)*P3 ;End points of curve are P0 and P3 ;Handles are P1 and P2 ;Returns sound from (pwllist ....) (defun Bezier (P0x P0y P1x P1y P2x P2y P3x P3y) (let ((coords ())) (dotimes (i 51) (setq var (/ i 50.0)) (setq f0x (* (power ( 1.0 var) 3) p0x)) (setq f0y (* (power ( 1.0 var) 3) p0y)) (setq f1x (* 3.0 (power ( 1.0 var) 2) var p1x)) (setq f1y (* 3.0 (power ( 1.0 var) 2) var p1y)) (setq f2x (* 3.0 ( 1.0 var) var var p2x)) (setq f2y (* 3.0 ( 1.0 var) var var p2y)) (setq f3x (* (power var 3) p3x)) (setq f3y (* (power var 3) p3y)) (setf coords (cons (+ f0x f1x f2x f3x) coords)) (setf coords (cons (+ f0y f1y f2y f3y) coords))) (controlsrateabs *soundsrate* (pwlvlist (cdr (reverse coords)))) ;(print (cdr (reverse coords))) )) Steve  View this message in context: http://audacity.238276.n2.nabble.com/Versatilefadeamplifyeffecttp4993235p5038639.html Sent from the audacitynyquist mailing list archive at Nabble.com. 
From: paul beach <sniffyraven@fa...>  20100516 16:06:18

If Bezier curves are connected, that is, P0(x,y) of the second is connected to P3(x,y) of the first; then there are conditions for it to have a first derivative, C1. http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezierder.html How would that affect the spectrum? From a graphics point of view, it is an interesting curiosity. Is it more than a curiosity with respect to sound files? The plugin seems to do the calculation; but it does not want to print the list, instead, "Does not return audio". ;nyquist plugin ;version 1 ;type generate ;name "Bezier_0 ..." ;action "Bezier_0 ..." ;control P0x "Start" real "Fixed" 0.0 0 100 ;control P0y "Start" real "Fixed" 0.0 0 100 ;control P1x "Cont" real "Var" 4.0 0 100 ;control P1y "Cont" real "Var" 4.0 0 100 ;control P2x "Cont" real "Var" 5.0 0 100 ;control P2y "Cont" real "Var" 5.0 0 100 ;control P3x "End" real "Fixed" 0.0 0 100 ;control P3y "End" real "Fixed" 0.0 0 100 ;; Function BEZIER ;Returns a bezier curve with relative length 1.0 ;Variables used: P0x,P0y,P1x,P1y,P2x,P2y,P3x,P3y ;all values should be positive. ;Equation for Bezier curve: B(t)=((1t)^3)*P0 + 3*((1t)^2)*t*P1 + 3*((1t)t^2)*P2 + (t^3)*P3 ;End points of curve are P0 and P3 ;Handles are P1 and P2 ;Returns sound from (pwllist ....) (defun Bezier (P0x P0y P1x P1y P2x P2y P3x P3y) (let ((coords ())) (dotimes (i 51) (setq var (/ i 50.0)) (setq f0x (* (power ( 1.0 var) 3) p0x)) (setq f0y (* (power ( 1.0 var) 3) p0y)) (setq f1x (* 3.0 (power ( 1.0 var) 2) var p1x)) (setq f1y (* 3.0 (power ( 1.0 var) 2) var p1y)) (setq f2x (* 3.0 ( 1.0 var) var var p2x)) (setq f2y (* 3.0 ( 1.0 var) var var p2y)) (setq f3x (* (power var 3) p3x)) (setq f3y (* (power var 3) p3y)) (setf coords (cons (+ f0x f1x f2x f3x) coords)) (setf coords (cons (+ f0y f1y f2y f3y) coords))) (controlsrateabs *soundsrate* (pwlvlist (cdr (reverse coords)))) (print (cdr (reverse coords))) ))  paul beach sniffyraven@... 
From: Roger Dannenberg <rbd@cs...>  20100517 14:20:06

Continuity is not just a curiosity. The magnitude spectrum of an impulse is a constant. The spectrum of a step function (the integral of an impulse) falls off at 6dB per octave in the limit. A second integral eliminates the discontinuity and falls off at 12dB per octave in the limit. In general, the spectrum of a continuous signal falls off at 12dB per octave (or greater). If the first derivative is continuous, the signal falls off at 18dB per octave, and each additional continuous derivative gives another 6dB of rolloff. Since we are sensitive to higher frequencies, it's better not to introduce discontinuities. Linear cross fades and linear breakpoint envelopes result in continuous signals with discontinuities in the first derivative. The artifacts you get and what you can hear depend on other factors, so linear breakpoint functions are not necessarily bad (consider a good linear approximation to a smooth "S" curve), but it's easy to see that smoother envelopes are going to reduce artifacts at higher frequencies. Roger 
From: paul beach <sniffyraven@fa...>  20100520 21:48:53

Help wanted: There should be a subroutine for (bernsteinlist p0 .... pn, dp) ; dp means number of data points. http://mathworld.wolfram.com/BernsteinPolynomial.html which would be used for (pwlvlist bernstein) This is trivial for 4 points, which was mentioned by Steve. There is a little problem with that version. The Bezier curve is a parametric equation. x = B(t,x) y = B(t,y) Just use Berntstein(t,x): Otherwise, the piecewise function could have 3 or 4 values for one value of time. WHY Roger explains: "If the first derivative is continuous, the signal falls off at 18dB per octave, and each additional continuous derivative gives another 6dB of rolloff. Since we are sensitive to higher frequencies, it's better not to introduce discontinuities." This is contrary to the envelope tools in Nyquist, which introduce triangular notches. Sub bernstein() bt = 0# t = 0 p1 = 1#: p2 = 3#: p3 = 0#: p4 = 1# For i = 1 To 11 bt = (1  t) ^ 3 * p1 + 3 * (1  t) ^ 2 * t * p2 + 3 * (1  t) * t ^ 2 * p3 + t ^ 3 * p4 Cells(i, 1) = t Cells(i, 2) = bt t = t + 0.1 Next i End Sub  paul beach sniffyraven@... 
From: paul beach <sniffyraven@fa...>  20100525 02:15:47

Xlisp has a function and, also a graph for Binomial Distribution. Since the graph is not symetrical; I assume, a continuous formula is being used, or Sterling estimate. Since 70! = 70x69x68... is about 100 digits, you can see that using the binomial coeffiecient might be rather awkward. The binomial distribution should be discreet integers. This could be implemented, "honestly" with the use of Pascal's triangle, which Edgar has posted. http://mathworld.wolfram.com/BinomialDistribution.html  paul beach sniffyraven@... 
From: Roger Dannenberg <rbd@cs...>  20100525 03:37:09

paul beach wrote: > Xlisp has a function and, also a graph for Binomial Distribution. Since > the graph is not symetrical; I assume, a continuous formula is being > used, or Sterling estimate. > Are you refering to the probability distribution? Here's the code from lib/distributions.lsp: (defun bernoullidist (px1 &optional (x1 1) (x2 0)) (let ((u (rrandom))) (if (< u px1) x1 x2))) (defun binomialdist (n p) (let ((suc 0)) (dotimes (count n suc) (setf suc (+ suc (bernoullidist p)))))) Roger > Since 70! = 70x69x68... is about 100 digits, you can see that using the > binomial coeffiecient might be rather awkward. > > The binomial distribution should be discreet integers. This could be > implemented, "honestly" with the use of Pascal's triangle, which Edgar > has posted. > > http://mathworld.wolfram.com/BinomialDistribution.html > 
From: paul beach <sniffyraven@fa...>  20100528 09:38:05

I tried (binomialdist 5 .5) from the command line but got "unbound function". The graph in the document, (Fig 18) seems to be nonsense. I think this should be the output. 0.0313 0.1563 0.3125 0.3125 0.1563 0.0313  Sub bn0() p = 0.5: q = 1#  p Cells(1, 2) = q ^ 5 Cells(2, 2) = 5 * q ^ 4 * p Cells(3, 2) = 10 * q ^ 3 * p ^ 2 Cells(4, 2) = 10 * q ^ 2 * p ^ 3 Cells(5, 1) = 0.01: Cells(5, 2) = 5 * q * p ^ 4 Cells(6, 1) = 0.012: Cells(6, 2) = p ^ 5 End Sub > Are you refering to the probability distribution? Here's the code from > lib/distributions.lsp: > > (defun bernoullidist (px1 &optional (x1 1) (x2 0)) > (let ((u (rrandom))) > (if (< u px1) x1 x2))) > > (defun binomialdist (n p) > (let ((suc 0)) > (dotimes (count n suc) > (setf suc (+ suc (bernoullidist p)))))) > > Roger > > > > http://mathworld.wolfram.com/BinomialDistribution.html > > > >  > > _______________________________________________ > Audacitynyquist mailing list > Audacitynyquist@... > https://lists.sourceforge.net/lists/listinfo/audacitynyquist  paul beach sniffyraven@... 
From: Stevethefiddle <stevethefiddle@gm...>  20100516 17:44:49

The spectrum should be virtually unaffected by the plugin unless you are using very large changes in amplitude over very short time periods. There are practical considerations with connecting multiple Bezier curves in that it requires a lot more controls in the UI, so I have restricted this effect to a single 2 point curve. I've not really investigated multiple points much further other than to establish that it makes the GUI more complex and confusing. If you just require a list of values to be printed you should probably comment out the line: (controlsrateabs *soundsrate* (pwlvlist (cdr (reverse coords)))) You also need to add a line at the bottom that will call the function, for example: (bezier P0x P0y P1x P1y P2x P2y P3x P3y)  View this message in context: http://audacity.238276.n2.nabble.com/Versatilefadeamplifyeffecttp4993235p5062238.html Sent from the audacitynyquist mailing list archive at Nabble.com. 
From: Stevethefiddle <stevethefiddle@gm...>  20100516 17:47:07

Forgot to say  you will also need to run as "Debug" to see the text output.  View this message in context: http://audacity.238276.n2.nabble.com/Versatilefadeamplifyeffecttp4993235p5062242.html Sent from the audacitynyquist mailing list archive at Nabble.com. 
From: Roger Dannenberg <rbd@cs...>  20100528 15:55:48

Hi Paul, The binomialdist function is defined in lib/distributions.lsp. If you don't load this file, then the function will not be defined. Please see the documentation. I believe the function is correctly implemented to return random numbers with the distribution described by the graph, but from your comments, I think you are assuming that binomialdist computes a different function. If there's a difference between what the documentation says and what the function does, please let me know. Roger paul beach wrote: > I tried > (binomialdist 5 .5) > from the command line but got "unbound function". The graph in the > document, (Fig 18) seems to be nonsense. I think this should be the > output. > > 0.0313 > 0.1563 > 0.3125 > 0.3125 > 0.1563 > 0.0313 > >  > Sub bn0() > p = 0.5: q = 1#  p > Cells(1, 2) = q ^ 5 > Cells(2, 2) = 5 * q ^ 4 * p > Cells(3, 2) = 10 * q ^ 3 * p ^ 2 > Cells(4, 2) = 10 * q ^ 2 * p ^ 3 > Cells(5, 1) = 0.01: Cells(5, 2) = 5 * q * p ^ 4 > Cells(6, 1) = 0.012: Cells(6, 2) = p ^ 5 > End Sub > > >> Are you refering to the probability distribution? Here's the code from >> lib/distributions.lsp: >> >> (defun bernoullidist (px1 &optional (x1 1) (x2 0)) >> (let ((u (rrandom))) >> (if (< u px1) x1 x2))) >> >> (defun binomialdist (n p) >> (let ((suc 0)) >> (dotimes (count n suc) >> (setf suc (+ suc (bernoullidist p)))))) >> >> Roger >> >>> http://mathworld.wolfram.com/BinomialDistribution.html >>> >>> >>  >> >> _______________________________________________ >> Audacitynyquist mailing list >> Audacitynyquist@... >> https://lists.sourceforge.net/lists/listinfo/audacitynyquist >> 
From: paul beach <sniffyraven@fa...>  20100601 01:25:37

Figure 18 is a (random)data set. Toss five pennies, and count the number of heads. Do this 100 times. This cannot represent dice, a multinomial distribution is required. If started up transients are somewhatrandom distributions, then steadystate should be the exact distribution. (I think that's part of the reason for all those randon algorithms.) To get things started, I have a plugin for Permutations. Comments, naughty or nice, are welcome. ;nyquist plugin ;version 1 ;type generate ;name "Permutations..." ;action "Same ..." ;control n "numerator" int "find n!" 10 1 20 ;control r "denominator" int "find (rn)!" 4 1 20 ;info " Permutations by Paul Beach. \n Example: How many ways can 10 people be seated in 4 chairs? \n Answer: 5040 different ways." ; Find number of permutations nPr ; Warning! Integer overflow at 15! or 14P1 ; find n!, 10! = 10 x 9 x 8 .... x 1 (setf f 1) (defun fact (n) (dotimes (i n)(setf f (* f (+ i 1) ) ) ) ) ; numerator, num = n! (fact n) (setf num f) ; denominator, den = (n  r)! (setf f 1) (fact ( n r)) (setf den f) ; nPr = n! / (n  r)! (print (/ num den))  paul beach sniffyraven@... 
From: Roger Dannenberg <rbd@cs...>  20100728 18:38:40
Attachments:
Message as HTML

Sorry I didn't respond to this while it was fresh. I filed this request for smooth envelopes away to possibly implement or at least think more about. From mathworld.wolfram.com, " Undesirable properties of Bézier curves are their numerical instability for large numbers of control points, and the fact that moving a single control point changes the global shape of the curve. The former is sometimes avoided by smoothly patching together loworder Bézier curves." But patching together loworder curves also creates discontinuities at least in higher derivatives, and I'm not too clear on the bandlimit properties of Bézier curves. Furthermore, it's relatively expensive to implement highorder polynomials as functions of time without a primitive to do it. I think a better idea is to use piecewise linear functions as provided in Nyquist. This has been a standard approach in computer music and audio signal processing for decades. If the discontinuities worry you, then you can run the pwl function through a lowpass filter using any of the Nyquist primitives, which are fast, efficient, and give you simple control over how much smoothing is done. One particular case where pwl functions are a problem is for quick onsets. If you want to smoothly turn on a signal without a click or pop, the usual technique is a "raised cosine", or (1  cos(t))/2, which generates a sort of "S"curve from 0 to 1. In my experience, this is noticeably better than a simple linear ramp. You can find an implementation for RAISEDCOSINE and examples of its use in nyquist/demos/fft_tutorial.htm. Roger On 5/20/10 5:48 PM, paul beach wrote: > Help wanted: > > There should be a subroutine for > > (bernsteinlist p0 .... pn, dp) ; dp means number of data points. > http://mathworld.wolfram.com/BernsteinPolynomial.html > > which would be used for > > (pwlvlist bernstein) > > This is trivial for 4 points, which was mentioned by Steve. There is a > little problem with that version. The Bezier curve is a parametric > equation. > > x = B(t,x) > y = B(t,y) > > Just use Berntstein(t,x): Otherwise, the piecewise function could have > 3 or 4 values for one value of time. > > WHY > Roger explains: > "If the first derivative is continuous, the > signal falls off at 18dB per octave, and each additional continuous > derivative gives another 6dB of rolloff. Since we are sensitive to > higher frequencies, it's better not to introduce discontinuities." > > This is contrary to the envelope tools in Nyquist, which introduce > triangular notches. > > Sub bernstein() > bt = 0# > t = 0 > p1 = 1#: p2 = 3#: p3 = 0#: p4 = 1# > > For i = 1 To 11 > > bt = (1  t) ^ 3 * p1 + 3 * (1  t) ^ 2 * t * p2 + 3 * (1  t) * t ^ 2 * > p3 + t ^ 3 * p4 > > Cells(i, 1) = t > Cells(i, 2) = bt > t = t + 0.1 > > Next i > End Sub > 
From: paul beach <sniffyraven@fa...>  20100731 22:28:08

Bezier curves for graphics, theory, and, sound wave applications are rather different. Perhaps this will be usefull in deciding which is which. ********** I don't see any reason to use a Bezier curve for smoothing. Global effects are generally unwanted for interpolation. But for wave synthesis, Bernstien polynomials may be just thing. Expert comment has to be in context. There seem to be a few flaws in the aurgument, even if it is only used for smoothing "1. Undesirable properties of Bézier curves are their numerical instability for large numbers of control points, and the fact that moving a single control point changes the global shape of the curve. 2. The former is sometimes avoided by smoothly patching together loworder Bézier curves." 1. The constants are determined by binomial coefficients, for large values, Sterling's aproximation might be used. 2. What the text says is true for a graphics package. It is called a bicubic patch. Each region may have a different color or reflection coefficient; and there may be thousands of squares stitched together like a quilt. Indeed! there may be numerical instability. There can be a three dimensional object in fourspace if you want to do research on the frontiers of mathematics, otherwise the version for wave files is the simplest case. A SURFACE in 3d: This is for graphics, as mentioned above. This might be of some use in modeling waves in a ripple tank, though the theory of interference patterns done by other means. A CURVE in 2d: This has two parameters, two control points in Windows paint. There can be many control points, sometimes called a spline. DO not use two parameters for sound files since there may be two or more values, for one value of time. If you want two parameters, use separate sound tracks. One parameter in 2d: There can be many control points. Over 130 may be awkward for Nyquist. Note that musical instrument waveforms are sometimes called beat frequencies, multiple tracks might be appropriate. Is it HARD? A plugin formula can seems to be the usual thing. For many control points you have to inspect the formula and do the monkey see, monkey do thing. http://mathworld.wolfram.com/BernsteinPolynomial.html For Audacity the pairs, (t, bt) would be pushed into list, and used in a pwl function. bt is just one line of calculations but; would be rather long, if there are many control pointsand you are using a plugin method. A flexible program where the user specifies the number of control points is not without some effort, though it is hardly intractable. Sub b1() bt = 0# t = 0 p1 = 1#: p2 = 3#: p3 = 0#: p4 = 1# For i = 1 To 11 bt = (1  t) ^ 3 * p1 + 3 * (1  t) ^ 2 * t * p2 + 3 * (1  t) * t ^ 2 * p3 + t ^ 3 * p4 Cells(i, 1) = t Cells(i, 2) = bt t = t + 0.1 Next i End Sub On Wed, 28 Jul 2010 14:38:31 0400, "Roger Dannenberg" <rbd@...> said: > Sorry I didn't respond to this while it was fresh. I filed this request > for smooth envelopes away to possibly implement or at least think more > about. From mathworld.wolfram.com, " Undesirable properties of Bézier > curves are their numerical instability for large numbers of control > points, and the fact that moving a single control point changes the > global shape of the curve. The former is sometimes avoided by smoothly > patching together loworder Bézier curves." But patching together > loworder curves also creates discontinuities at least in higher > derivatives, and I'm not too clear on the bandlimit properties of > Bézier curves. Furthermore, it's relatively expensive to implement > highorder polynomials as functions of time without a primitive to do > it. I think a better idea is to use piecewise linear functions as > provided in Nyquist. This has been a standard approach in computer music > and audio signal processing for decades. If the discontinuities worry > you, then you can run the pwl function through a lowpass filter using > any of the Nyquist primitives, which are fast, efficient, and give you > simple control over how much smoothing is done. One particular case > where pwl functions are a problem is for quick onsets. If you want to > smoothly turn on a signal without a click or pop, the usual technique is > a "raised cosine", or (1  cos(t))/2, which generates a sort of > "S"curve from 0 to 1. In my experience, this is noticeably better than > a simple linear ramp. You can find an implementation for RAISEDCOSINE > and examples of its use in nyquist/demos/fft_tutorial.htm. > > Roger >  paul beach sniffyraven@... 