ELECTRIC OPRPHEUS ACADEMY
SPILLING THE BEANS #16 TWIXEL
In the age of the Fourier transform, the additive
synthesis of sounds that neither temporally change in the amplitude, nor
in the spectrum, is not an issue anymore. One no longer has to labor with,
as Stockhausen formerly did, dozens of sine generators and to mix the
end result together. One sets the corresponding samples in the spectrum
and transforms the whole thing in the time domain.
Each sample in the spectrum represents a constant sine vibration in time.
The position of the sample determines the frequency; its amplitude (complex
radius) determines the amplitude, and its phase determines the initial
state. If the value of the sample is purely real (without an imaginary
part), then it is a cosine; if it is imaginary (without a real part),
then it is a sine.
Strictly speaking, we can consider the Fourier transform itself as an
additive synthesis. But there are very many samples that can form each
temporal course in the time domain possible in the chosen excerpt as sine
vibrations lying close to each other through reciprocal amplification
and cancellation.
The number of all possible frequencies is nevertheless limited: There
are exactly as many frequencies as the transformation buffer has samples.
For a buffer of 16 k, it would be 2^16 = 65536 frequencies, half of them
left-turning, the other half right-turning ('positive' and 'negative'
frequencies). At a sample rate of 44.1 k, sample No. 100 in the spectrum
represents the frequency 100*sr/dim = 67.29126 Hz; sample No. 101 represents
the frequency 67.96417 Hz.
The interval they form is 1.01, approximately a 1/6 half tone.
One can argue over whether a trained ear can sense the difference. (At
so many low frequencies rather not, I would say). Even an untrained ear
can definitively sense this if both frequencies concur. Then they form
a beat that is dependent on the difference frequency, in this case 0.67
Hz, as a pulse of 1/0.67 = 1.49 seconds (the buffer length in seconds).
* * *
If we want to create sophisticated frequency mixes in this manner, we
have to round the sample positions in the spectrum into whole numbers.
As a result, we end up in many cases with such undesired beats.
Therefore, the following question arises: Can one create vibrations whose
frequencies lie between the grid? And what does such a sample look like,
one that lies betwixt two samples – a 'twixel' ?
Let's try it with the following approach:
I can also generate a sine vibration of 67.29126 Hz in the time domain
and properly obtain sample No. 100 set in the spectrum with all other
samples set to zero. The same goes for sample No. 101 at 67.96417 Hz.
So I generate a frequency exactly in between, 67.62772 Hz, and take a
look at its representation in the spectrum. At first glance, the result
seems bewildering:
Sample 100 has the value +1, sample 101 right next to it has the value
-1; before it a short ascent, after it, steeply symmetric, a short descent
– and in the imaginary part, not in the real part! (By the way,
the amplitude standardized here for the graph is 2/π
=0.63662).
So this is what a twixel looks like!
When one observes the number values of the neighboring samples, then one
recognizes the following series:
1/9 |
1/7 |
1/5 |
1/3 |
1 |
-1 |
-1/3 |
-1/5 |
-1/7 |
-1/9 |
The series must seem familiar to filter programmers:
It is to be found, in a different form, also in the impulse response of
a Hilbert transform).
Other intermediate positions appear asymmetrical, more or less rotated
in the real domain, whereby the ascent and descent become even steeper
the closer one comes to an integer sample position, which finally leads
to a purely real, simple sample again.
Finding an algorithm for it is not difficult. Since the left and right
flanks run very steep at the beginning (even steeper the closer to an
integer position), most of the time a few samples in the periphery suffice.
One waveform generated in such a way is somewhat irritated in the first
period, but stabilizes itself already from the second period onward:
black: real part (cosine), red:
imaginary part (sine)
Therefore, I consider the twixel as invented. (Sorry, in case someone
invented it before me and called it something different! – I am
not aware of anything similar).
In any case, it is implemented in VASP from now on as set.twix.
* * *
The filter programmer spots it at first glance: Such a twixel looks like
the typical impulse response of a non-causal filter (in both time directions).
What does it cause if one actually takes it as the impulse response of
a filter? Very simply: a delay in fractions of samples, an all-pass. (The
phase shift lets itself to be easily compensated).
That can also be useful, for instance, to generate impulse series with
non-integral periods.
prime harmonics
An application field for twixels is the generation of frequency mixes
in which fine tuning is absolutely necessary, for example, sub-harmonic
series (1 - 1/2 - 1/3 - 1/4 ...) or logarithmic frequency series, or series
according to other non-integral characteristics.
Recently added to VASP is the generator PH - prime harmonics,
with which the sine mixture can be built up by prime number series. The
trivially ascending prime number series 1:2:3:5:7 ... is already interesting,
not only soundwise, but also in the microstructure. Here are the waveforms
of a frequency mixture according to ascending prime numbers:
black: real part, red: imaginary part
or in the x/y representation:
It is obvious that such waveforms could be attractive for parameter controlling
– be they pitch courses or spatial positionings, or whatever else.
Here is the model of a bend vibration whose tension is varied by the upper,
counter-rotating curves:
ph03_biegeschwingung.mp3
Interesting as well from a sound perspective are the sub-harmonic prime
number series themselves:
ph02a.mp3
or logarithmic:
ph02b.mp3
or in a predetermined frequency band:
ph01b.mp3
Therewith we are already entering the highly interesting field of the
geometric construction of sounds. In the scope of my studies I dealt with
it in great detail at the beginning of the 1980s and produced the most
diverse frequency mixtures with the help of a measurement generator and
audiotape. There are still volumes full of sketches, themes and motives
from which I will occasionally disclose something.
More about that at the next opportunity.
akueto
G.R.
*----------- ph01
size=18
PH 100,0 (phi=sin); view.; sfstore ph01.wav
PH 100,0 (phi=frac180); view.
PH.sub 2000,0 (amp=lin,phi=sin); bevz 35ms; ovp
sfstore ph01a.wav
PH.range 600,2400,2000 (amp=flat,phi=rand); bevz 35ms; ovp
/vsp (o)
view.
sfstore ph01b.wav
view.
*----------- ph02
size=18
PH.sub 10000,0 (phi=cos,amp=flat); view.
bevz 35ms
ovp
sfstore *a.wav
PH.sub 10000,1 (phi=altcos,amp=flat,freq=log); view.
hk.track 10hz
bevz 35ms
ovp
sfstore *b.wav
PH 40,1 (phi=altcos,amp=sqrt,freq=log); view.
bevz 35ms
ovp
sfstore *c.wav
*------------------ ph03
i1=ph01.wav (s)
k1=colnoise.blue
k2=osc.bar (dim=128,*k1,ini=fix,cyc=2)
k3=osc.bar (dim=128,*k1,ini=fix,cyc=2)
k4=msum (*k2,*k3)
out=*.wav (2:2,*<k2,k3>,opt)
seg=1
dur: 10
k2.tens: 0.25 (c=i1.0,cm=lin,ca=0.1)
k2.elast: 0.001
k2.damp: 10 [damp]
k2.smooth: 3 [damp]
k2.inipos: 0
k2.iniamp: 1
k2.inidur: 0.001
k2.pu: 96
i1.vsp: 1/300
k3.tens: 0.25 (c=i1.1,cm=lin,ca=0.1)
k3.elast: 0.001
k3.damp: 10 [damp]
k3.smooth: 3 [damp]
k3.inipos: 0
k3.iniamp: 1
k3.inidur: 0.001
k3.pu: 96
fo: 0.1