[sdiy] Linear offset movies, was: Observations of synthesized stretched-harmonic waveforms and subjective comments on their musical qualities

cheater cheater cheater00 at gmail.com
Fri Apr 9 14:38:32 CEST 2010


Hi guys,
I have made some video recordings of how the setting 'f_o' works.

http://dl.dropbox.com/u/5958997/rotation.rar

By the end of the first animation the function is a bit rippled, those
ripples are only created by errors in the model. It should in fact
look smooth like in the beginning.

In the 2nd movie, at the beginning I raise and then lower the offset
frequency of the partials (f_o), and then set it to 0. On 0:32 I reset
the resynthesis model (this is irrelevant to the effect, but it
explains why the waveform suddenly changes). Later I set f_o to +1 Hz
and 0 Hz, alternating the setting.

In the 3rd and 4th animations I alternate f_o between +1 Hz and 0 Hz.

Cheers,
D.

On Thu, Apr 8, 2010 at 04:45, cheater cheater <cheater00 at gmail.com> wrote:
> Hi guys,
> I've done some experiments with additive synthesis lately to check out
> what stretched harmonic waveforms could sound like. I haven't seen
> much about that on the internet and thought I would share my comments,
> also benefiting myself from being able to organize my thoughts here.
> First I explain the oscillator and how it works, then I talk about how
> the parameters work when they're set to constant values, then what
> happens when they're being modulated at a slow rate, and then finally
> I mention what happens when the parameters are set to constants with a
> second oscillator present at the same pitch and similar parameters. I
> have not been able to make any tests of how these parameters behave
> when modulated at audio rate. My computer is not fast enough and I am
> expecting a huge increase in computational power consumption for a
> full-blown model that works with audio-rate control, perhaps beyond
> current-day desktop computer power, but who knows.
>
> I've made a model which has a bank of 15 free-running sinewave
> oscillators with these properties:
>
> - assign to every partial (15 in total) the frequency f_n = f_B +
> f_B*(n^p*l) + f_o
>
> where:
> n is the partial number counted from 0 (the partial at base
> frequency). The for a 440 Hz note the 0th partial will 'typically'
> have the frequency 440 Hz, the 1st partial will be the octave at 880
> Hz, the 2nd partial will be at 1320 Hz, and so on. In fact the 0th
> partial is mostly useless in many of the situations.
> f_B is the base frequency ('note frequency')
> p is the 'polynomial stretch', a parameter (not really sure of this name)
> l is the 'linear stretch', a parameter
> f_o is the 'linear offset frequency', a parameter
>
> - assign to the nth partial the level of (n+1)^w where w is the
> 'partial weighting' and is a floating-point number. For example
> triangle and square waves will be using w = 2, the saw wave will be
> using a weighting parameter of 1. I did this because without this the
> weighting parameter is 0 and it's not similar to any normal synth
> waves, I needed some reference to previous experience.
>
> - group the even (0, 2, ...) and odd (1, 3, ...) partials and freely
> mix between the two groups (to make square/triangle waves). In fact
> the triangle would be missing the base partial, but that doesn't
> matter much. Note that here even and odd partials are swapped in
> relation to 'normal' uses of these terms.
>
> - sum the levels of all partials and normalize the mixed output to
> make it easier to compare waves of different weightings
>
> A bare oscillator on its own doesn't sound *very* special at all when
> you're not animating any of the parameters, until you start going far
> with the stretching parameters so that the partials start interacting
> with each other. I bet it would sound great if there were any
> non-linearities present, but I didn't model that - that would be the
> benefit of using analog, which would be cool for this.
>
> The following is for w = 1, all other parameters set to 'normal':
>
> The parameter 'p' just on its own set to something small like 1.005
> manages for some light beating in the higher partials. That's a very
> light effect. The further you go with that parameter, the faster the
> beating gets. The setting 1.5 is already extreme and limits a 500 Hz
> waveform to 12 partials. The waveform is fairly acyclic when 'p' is in
> use and it would probably be very pronounced with some clipping, but
> without it it's very discrete - in fact other than the slight beating
> or 'wobbliness' to the sound it sounds just like the input wave, but
> any sort of processing (such as using this as an FM modulator) will
> probably let it come out very pronounced.
>
> Using positive 'p' less than 1 will make the partials beat much more
> since they will become closer, rather than further apart, starting to
> group up around the 1st partial. This goes on until p=0.5 which sounds
> like AM with a fairly fast LFO, after that at p=0.35 there's a
> 'gurgling' quality to the sound (maybe like a chorus/ensemble at a
> very fast setting) and at 0.17 the sound is similar to bandpassed
> noise.
>
> A negative 'p' will at first sound like long-tail reverb (p = -1) but
> soon the partials degenerate to components around the 0th partial's
> frequency. The 0th partial in itself is not computable and does not
> exist in the model because the formula includes n^p which evaluates to
> division by 0.
>
> It is interesting that waves with the same weighting w but different p
> seem to sound more similar than partials with the same p but different
> w. This is however limited in credibility by the fact that the amount
> of partials is limited to 15, which is not a whole lot. For
> comprehensive full-band testing of this you'd need hundreds of
> partials.
>
> When increasing 'l' above 1 similar beating effects happen as with
> 'p', except this time all the partials stretch around the 0th not the
> 1st partial. This might conclude that my formula for 'polynomial
> stretch' needs some sort of revising to make it stretch around the 0th
> partial as well.
>
> When decreasing 'l' below 1 the sound is similar to simple pitch
> bending. Then when the partials get very close together, the sound
> works quite differently from 'p' around positive numbers less than 1.
> Starting with l=0, the sound is just a single sine wave (sum of all
> partials being at f_B). Then as it is increased this sinewave gets a
> bit of a 'bandpassed noise' quality and then starts beating in some
> weird (but perfectly cyclic) pattern. This weird pattern is probably
> due to the different phases of the partials and/or lack of numeric
> precision, but oddly enough for the same 'l' the pattern is always the
> same. This goes on to l = 0.005 after which time the beating is very
> fast and starts soundling like sinewave AM. Then the higher l goes the
> faster this 'AM' effect is, it gets into audio rate, and goes on. It's
> interesting to hear the 'AM' effect get faster and faster and convert
> a sinewave to something like, say, a triangle wave, without
> transitions.
>
> When decreasing 'l' below 0 something yet different happens.  At first
> there's this 'AM style' effect as above (for 'l' just above 0), but
> it's different than what happens for 'p' just below 0, which sounds
> more like a quickly-modulated 'chorus' or 'ensemble' effect, whereas
> 'l' just sounds much more like amplitude-modulation or maybe FM; but
> when the beating gets to audio rate, it starts sounding like frequency
> mirroring or aliasing. And this is understandable because the partials
> do take on patterns that happen when you have a wave that you start
> pitching up in a digital system and it starts aliasing, mirroring the
> partials and making the well-known techno sound. This effect is better
> audible at higher frequencies because then the partials have more
> space before they reach 0 Hz, and it's also important to band-limit
> the system clamping the frequencies to 0 Hz because otherwise the
> partials will start assuming negative frequencies and therefore alias,
> obscuring the area in the frequency domain in which the interesting
> effect happens.
>
> The parameters 'p' and 'l' have an effect on the waveform that can be
> described thus: depending on whether they are above or below 1, the
> waveform has a main 'shape' described by the fundamental and the
> higher partials are seen as 'ripples' that skid over that shape like
> little ripples on water. The stronger the stretch, the faster the
> 'ripple skid'. This effect can be explained by the fact that if the
> oscilloscope is tuned to the note frequency, then the partials are not
> at an integer multiple of the note frequency and will either be of
> higher frequency (and skid to the right) or of lower frequency (and
> skid to the left). Thanks to this effect you can notice the single
> partials on waveform display without having a frequency analyzer and
> can learn about the terms of the 'harmonic' series (such as partial
> weighting w here). I wonder if this effect has been described anywhere
> before? I also wonder if it would be possible to somehow measure the
> terms of the series (measure the amplitudes of the partials) by
> measuring the wave in the time domain.
>
> The parameter 'f_o' seems to have little effect on the sound on its
> own. It just sounds like pitch bend. What is *very* interesting is the
> effect it has on the time-domain waveform display. It does not have
> the 'ripple effect', the wave (mostly) is stationary, but in a weird
> way.. Imagine that the waveform as you see it on the oscilloscope is
> not drawn on a flat strip of, say, paper, but is instead drawn on a
> glass cylinder (its axis of symmetry is the x-axis, of course); the
> nearer the point on the graph is to 0, the closer to the axis of
> rotation it is (generally *) on the cylinder. Then as you start
> increasing the 'f_o' parameter, the 'cylinder' starts rotating around
> the x-axis. The higher 'f_o' is, the quicker the cylinder rotates.
> Analogously for f_o<0 the cylinder starts rotating faster and faster
> but in the other direction. It's a fairly crazy effect and you have to
> see it. I wonder if it has been described somewhere? To save on
> confusion I define that when f_o>0 then the part of the cylinder
> closer to the viewer is rotating down, while the part further from the
> viewer is rotating up; mathematically speaking, the cylinder is
> rotating in the positive direction around the time axis on the graph,
> according to the right-hand screw rule; although it could be defined
> the other way, it's just up to our imagination, I'll define it this
> way :-) I believe the location of the dots on the cylinder (the angle
> around the 'cylinder') depends on the phases of the partials, but I
> can't tell for sure, because they are not (right now) adjustable in my
> model and it would take a lot of reworking to get that done. Of course
> other than this rotation, you'd the waveform starts sliding to the
> left slightly for f_o<0 and to the right slightly for f_o>0 - but
> surprisingly it doesn't! What's furthermore, it seems that the waves
> have a hidden 'z' component which puts the point on the graph of the
> wave somewhere on the cylinder above or below the plane of the graph
> (so closer or further from the viewer); this can be seen when the
> cylinder starts 'spinning' but the zero crossings don't stay in a
> single spot. Another effect is that with f_o rising in magnitude, the
> cylinder seems to twist up, which is quite interesting in its own
> right.
>
> It is notable that when using the 'p', 'l' and 'f_o' parameters,
> sometimes the frequencies of the partials will approximate the
> frequencies of partias for the square or triangle wave, therefore
> becoming a bit square-ish or triangle-ish in sound. Then when going
> further with the modulation of those parameters, the waves will lose
> that quality and become something different.
>
> The weighting parameter 'w' is a bit like a high shelving/low shelving
> filter. A negative w will be like a (non-resonant) high pass filter
> changing its steepness rather than frequency the lower w goes, a
> positive w will be like a low pass filter becoming sharper when w
> increases.
>
> The odd/even frequency mix has the obvious effect of making the wave
> more square-ish or more triangle-ish or more saw-ish, but this only
> happens without stretch, as with stretch the waves work completely
> differently anyways.
>
> When you do start animating the frequency parameters, the 'p' and 'l'
> and 'f_o' parameters sound quite a bit like FM, but less 'crazy'. This
> is not surprising since many of the sounds are in fact available from
> ring modulation, if you heterodyne a wave up and then back down in
> order to frequency-shift it - and ring modulation doesn't sound that
> different from FM. Frequency shifting can emulate the parameters 'l'
> and 'f_o'. I don't know of any typical process which could emulate the
> 'p' parameter - any ideas?
>
> When animating the 'w' parameter, the waveform goes from mellow to
> bright, as expected.
>
> I have not been able to steer any of these parameters with audio-rate
> modulation, maybe if I can figure out how to render stuff from max/msp
> in offline mode.
>
> The interesting stuff starts happening when you introduce a second
> oscillator to the mix:
> - the parameter 'f_o' works like linear FM, but every partial is
> offset by the same amount, so all the partials beat at the same speed.
> This sounds pretty cool especially if the phases of the partials are
> not in perfect sync (because of previous manipulations to the
> oscillators) and they zero-out at different moments but still in the
> same distances (periods) of time. So having an oscillator at 500 Hz
> and one at 502 Hz will make them beat at 2 Hz giving it the
> 'glistening' effect animating the higher frequencies. In contrast,
> having two oscillators at 500 Hz with one at f_o = 0 and the other at
> f_o = 2, the oscillator partials will beat at 2 Hz, but there will be
> none of that animation, it will be much more plain (which is just an
> interesting, different situation); it sounds much more like a slow AM
> at 2 Hz; in fact, I wonder if it can be mathematically proven to be
> the same. Finally, with one oscillator at 500 Hz and f_o = 0 and
> another at 502 Hz and f_o = -2, the oscillators will have that nice
> animation as a 500 and 502 Hz oscillator pair with no 'f_o' applied,
> but they will not beat - the waveform level will stay mostly the same.
> - a little amount of the parameter 'p' together with a little 'l'
> allows you to control which partials are how inharmonic, making them
> beat faster or slower against a fully harmonic series, for example to
> just have effect on the highest partials.
>
> And a little video:
>
> http://dl.dropbox.com/u/5958997/oscillator.rar
>
> for one thing I haven't seen something like this before, in FM or not.
>
> You see me playing around with the harmonic stretch parameters (makes
> the wave wobble faster or slower) and the weighting (changes to a
> bassy wave and finally to a sinewave, and then back to the bassy wave
> and then a very treble wave). I'm also playing around with the
> stretching parameters. Finally I change the pitch of the wave as well
> and show how the parameters work on it.
>
> Unfortunately no audio as I don't know how to make the recording
> software pick up max/msp - any ideas? I've used CamStudio, which is
> free and good, but doesn't seem to be picking up the sound from
> max/msp, I probably need to change some settings. I'm using max/msp
> 4.5. Any idea how to make this work properly?
>
> Cheers
> D.
>



More information about the Synth-diy mailing list