[pd-ot] electric circuits in software

Christian Klippel ck at mamalala.de
Fri Apr 28 04:39:54 CEST 2006


Am Freitag, 28. April 2006 03:21 schrieb Chris McCormick:
> On Thu, Apr 27, 2006 at 02:13:17AM -0400, Mathieu Bouchard wrote:
> > On Thu, 27 Apr 2006, Chris McCormick wrote:
> > > representation of two waveforms at Nyquist; if you have a squarewave
> > > and a sawtooth wave, both sampled at 44100 and playing at a frequency
> > > of 22050, these waves will both be represented by two samples each,
> > > correct? So when they are sent back into the analogue domain, won't
> > > these two waveforms look identical? Wouldn't they look like exactly the
> > > same sound? On analogue gear, wouldn't it be the case that the exact
> > > shape of the waveforms would be more accurately represented (e.g. a
> > > sawtooth and a squarewave at 22050 would look like such)?
> >
> > yeah, it would be more accurate, but are ears capable of hearing the
> > difference? If the resonance of each sensor of the ear is linear, then
> > each sensor can only react to one frequency band, and so if the smallest
> > sensor's frequency is about 20000 Hz, then the ear is incapable of
> > discerning.
> This sounds a bit speculative to me - too many assumptions. It's probably
> not wise to be so quick to dismiss the viewpoint of "analogue cultism"
> until we have concrete research that confirms that humans are unable to
> perceive such differences.

here are some attempts to explain why analog sounds analog .....
lets take the example of a square wave ..... you have two frequencies at once 
here: for one, the fundamental frequency of the waveform, and then the 
frequency resulting from the rise/fall time of the wave. since the latter is 
probably much higher than the fundamental one, you can never ever reproduce 
that with a dac (unless, of course, you are sampling in the mhz range).

on analog equipment, to the contrary, that compnent is preserved, maybe even 
shaped by the filters.

another example, the sine wave .... on analog equipment, you have an infinite 
number of different levels forming the sine. on a dac, you only have discrete 
values. the filtering after the dac shapes the waveform into something that 
should closely resemble the original wave, but only close (like, a square 
comming out as sine at all). since you have to jump between discrete levels, 
that again adds some harmonics, which need to get filtered out, effectively 
modifying the overall frequency response.

if you have purely digital generated sounds (for example, oscillators), they 
are far too perfect. in fact, each osc~ sounds the same. this is never the 
case in the analog world. you can have 100 osc circuits, all built the same, 
but you will never ever find two osc's that have an exact identical output. 
just 1 cm more wire makes a difference. each and every connection between 
analog equipment is some kind of a filter: you have the capacitance of the 
wire-pair, plus its resistance, plus the source's or sink's impedance.

of course all these differencies are very, very subtle, and you may not be 
able to hear the difference between two single elements. but if you now mix & 
combine all that together, the many non-linearities add up as well, giving a 
much wider spectrum (number of active frequencies) than what you would have 
with digital stuff.

oh, and last but not least: noise and distortion. every analog source has some 
noise, and maybe a small level of distortion. each part/wire adds some more 
noise. of course, the noise is part of the final sound as we hear it. many 
people complain that digital sound is too "sterile" ... thats why ... 
something is missing.

you can do a quick test yourself: create an osc~ object (copy the existing 
one, for example). inside the dsp routine, at the end, add some noise to the 
signal (sample[x] = sample[x] + ((1000 / random(1000)) * noise_level) or the 
like (thats probably non-working code above ;)... create some synth with 
these osc~'s and compare the generated sound against the standard osc~'s .... 
try with higher/lower noise_level settings. take it even further and add the 
same stuff to the used *~, +~, etc ..... if you multiply somewhere with a 
fixed number, make that  number fluctuate a little as well. same for filter 
parameters, etc..... do that sample-by-sample, and not just reusing one 
single random value over the whole block ....

you will be surprised by the difference! (and of course, by the increase of 
cpu load as well ;-)

> Best,
> Chris.



> -------------------
> chris at mccormick.cx
> http://mccormick.cx
> _______________________________________________
> PD-ot mailing list
> PD-ot at iem.at
> http://lists.puredata.info/listinfo/pd-ot

More information about the PD-ot mailing list