ELECTRIC OPRPHEUS ACADEMY
SPILLING THE BEANS #5 TEMPO
In my time at the ELAK, one of the first themes
I brought to discussion in class was the transformation 'tempo'. The simplest
thing in the world, known since the beginnings of sound recording and
frequently applied, with the record as with the audiotape: One plays back
a recorded sound faster or slower, thereby changing its duration, rhythmic
structure, as well as its pitch. (Several other, not so unimportant aspects
will also be changed as a result – but more about that another time).
It is a fundamental method that has become a vital part of the technical
repertoire of electroacoustics (even if it has sometimes been supplanted
by apparently sophisticated effects, which more accommodate conservative
musical thinking).
This method thus had a prominent status in VASP and AMP right from the
start. Only the perspective is always a different one. In VASP there is
the command stretch – the stretching or clinching
of a predetermined sound stored in a register (buffer).
In AMP, by contrast, there is a variable speed when scanning the sound
files on an input channel 'varispeed', which is available as parameter
.vsp in the sequencer. More still: This tempo factor, as with all other
parameters as well, is controllable and can be modulated by wave forms
of generators or other inputs (from tempo glissando to scratching).
What is new is a system of methods for certain applications, one of which
I would like to particularly emphasize, because it is astoundingly simple:
pack.
If one would like to execute large tempo transpositions upwards (speedups),
one of the most radical means of doing this is to simply allow the corresponding
number of samples to be dropped, that is, only using each 100th sample,
for instance. Audio engineers would probably smash their hands together
over their heads: on a half-way clean recording that does not contain
any extreme low frequencies, nothing at all should be able to be heard
below 10kHz. The rest is merely aliasing!
And that’s the way it is, too, only these mirror frequencies (aliasing)
are so diverse that they take on a character of their own.
The range of 0-220 Hz is retained (it becomes 0-22 Hz)
220-440 Hz will be mirrored downwards
440-660 Hz will again be mirrored upwards
660-880 Hz will again be mirrored downwards
and so on...
One can speak of a 'frequency folding' in which all frequencies are retained
in any one of these numerous mirrorings – and, consequently, the
spectral density as well.
In the Eighties I produced such frequency foldings with analogue means
– in hours-long work with the frequency shifter and umpteen intermediate
copies (>> STYX). With this simple digital method we receive this,
so to say, free as an encore ...
Here, as an example:
sfload menuett.wav (pack=128)
play
A second example: A low-frequency generator will be used here to control the varispeed. The sound file at the input will be, so to say, scratched at a point, while the point slowly moves on. In the AMP script it looks like this:
i1=menuett.wav (s)
k1=noise.band (m)
out=menuett_scratch.wav (s,*i1)
dur: 20
i1.pos: 11
i1.vsp: 0.1 (c=k1,cm=lin,ca=1)
k1.lower: 2
k1.upper: 5
A generator that creates noise within a certain frequency band that can be arbitrarily low, in this case between 2 Hz (k1.lower) and 5 Hz (k1.upper), will be defined as core object 1.
menuett_scratch.wav, likewise in stereo, will be defined as the output and take over the stream of input 1 in the patching (*i1).
Total duration (dur): 20 seconds.
What is interesting about this example is perhaps that, except for the one generator, no other special objects are needed. That is the standard of the input scanner and the parameter conventions.
Each parameter that does not represent durations or modes can be put in sequencer lists, interpolated, and be controlled or modulated by any other object. In the example above one could, as said, also use the wave forms of other sound files for the control, or the same sound files, or even the same outputs. Feedbacks are also possible.
* * *
With the advent of real-time systems, this fundamental method has increasingly taken a backseat. Naturally, tempo transformation in a real-time context is, strictly speaking, paradoxical. One cannot input a sound stream and 'at the same moment' play it back quicker, or even in time reversal. It could be done slower, but the synchronicity between the original and its slowdown disperses from the first moment onwards.
Nevertheless, such a thing could be deployed live, not only in regard to pitches, but also in a polyrhythmic manner.
In AMP there is the core object retard which allows such a process to be simulated. (AMP does not go in real-time, but allows, if one wants, thinking in streams).
One can imagine it in this way. At an input, a stream from a sound file lies in an approaching fashion. It runs over a delay buffer that can be read arbitrarily slower, also in layerings in several different tempi. The only thing one needs for this is a large enough delay buffer. With a cue parameter, the process can be synchronized again at any moment.
demo08_retard.mp3
This audio example
shall be understood as the processing of an excerpt from published recordings.
With the possibility to listen it and study it here for demonstration
purposes, there are no further exploitation rights associated with it.
Here, a synchronization takes place every 2 seconds; one could naturally
adjust the cue to the content of the sound as well. The corresponding
AMP script looks like this:
i1=tomsdiner.wav (m)
k1=retard (layer=3,*i1,dim=80sec,bev=400)
out=demo08_retar.wav (m,*k1,opt)
seg=20
dur: 2
k1.status: 1
k1.rate.0: 1
k1.rate.1: 8/9
k1.rate.2: 4/5
tomsdiner.wav (Suzanne Vega) will be addressed to input 1 (mono). Core object 1 is the said retard routine with tempo transformations in 3 layers (layer=3), the delay buffer can record for a maximum of 80 seconds (if necessary), crossfade, so that it does not crackle, 400 samples (I call it bevel). The output writes the result of k1 in the sound file, but optimizes the total amplitude beforehand.
The sequencer has 20 segments lasting 2 seconds each.
The status of each segment (k1.status) is 1 (=cue).
The tempo factors of the 3 layers (k1.rate.0 to .2) are 1 (original), 8/9 (a whole tone lower and slower), 4/5 (a major third lower and slower).
If one takes the durations between the cues much smaller, then one has already entered the world of granular methods. The same example with 200 segments lasting 0.1 seconds each:
demo08_retard_gran.mp3
This
audio example shall be understood as the processing of an excerpt from
published recordings. With the possibility to listen it and study it here
for demonstration purposes, there are no further exploitation rights associated
with it."
As indicated, such a thing would also work in a live context. Everything
one needs as far as interfaces are concerned would be as many controls
as one would like to have tempo layers, and a button for the sync cue.
[Whoever wants to recreate it, please: The delays have
to be read in an interpolated manner so that fine tempo nuances are possible;
crossfades, so that the transitions do not crackle; besides, with denser
layerings an adjustable 'lag' is advantageous so that all tracks do not
begin simultaneously, which would lead to phasing effects. Another possibility
would be that someone helps me extend AMP to a real-time tool, which would
principally work ...].
akueto
G.R.
(c) Günther Rabl 2010