Yahoo Groups archive

Doepfer

Index last updated: 2026-04-29 00:15 UTC

Message

Re: [Doepfer_a100] Re: granular processor & generato

2008-03-09 by Denis Gökdag

one reply to both of your posts :-)

i can see your point about a "less access to individual grains, more  
complex results on a single (small) module" approach. generating a  
typical grain "cloud" would be a lot of modules and patching with my  
approach....but then what i do if i want the "cloud" effect i just  
patch an output from reaktor or an audio track containing such a  
texture into the a100. i agree that it would be a lot more  
comfortable to have this sort of capability in a module,  
though....ideally there would be both. but if there could only be one  
of the two, i'd opt for the "discrete access" one, as this allows for  
stuff you don't get from an external source.


On 07. Mar 2008, at 9:28 PM, gasp_uleg wrote:

> -by "density" i mean "distance between grains", which could go from
> almost total overlap of the grains when a high frecuency clock is
> used with long grains.
k, that's the way i'd use the term too. see my reply to the "voice"  
issue further down.

>
> -by saying "dynamics" i simply mean "changes of volume in time" of
> each grain (that is the vca+envelope of each grain).
>
> im not very sure that having so much control of evey single grain
> would be so much usefull. i think more of grains as being controlable
> all togheter, apliyng the polyfonic envelope to all of them at the
> same time from inside the dsp but controling the general atack and
> release from cv.

Well this is true for texture-type granular sounds, but if you want  
to go down the "sequence of extremely short grains" route,  
essentially building a highly complex, time-varying waveform rather  
than a dense soundscape, control of individual grain fade curves  
makes for a rather huge difference.



>
> i'm a bit confused about the "voice" term you use:
>
> i understand a "granular generator" as being a "granular processor"
> intimatelly associated to a sample player or "source file" as you
> call it.
basically a "grain" is the same as one voice of a sampler playing  
back a specific section of a larger sample ("source file"). If i.e. 2  
grains overlap, you technically need to play back two voices, or  
"streams". In more complex, "meta-style" grain generators like the  
reaktor grain cloud this fact is simply hidden, as this technical  
aspect is not of any interest by itself in the context of generating  
a "cloud", all you want to know there is how "dense" the result will  
be (in whichever way the module achieves this). But when you *build*  
such a module in hardware, it is, as every grain needs to be treated  
as a separate "entity" in memory anyway (thats just the way the  
method works).....so as you already have the grains available  
seperately you might as well make them have their individual outputs  
and individual parameters to better fit the pradigm of a modular  
analog synthesizer. I call this combination of parameter controls,  
one playback "stream" and a set of outputs a "voice". In my proposal  
there would be four of these "voices", effectively making it possible  
for four grains to overlap at any one time. This would make the  
"cloud" type application somewhat possible (though not very dense),  
while making lots of really cool resonation, electrification,  
glitching, noisy, scraping pulsed digital stuff possible :-)



>
> being able to select diferent files for that "source file" doesn't
> mean having several voices. it's allways the same single voice but
> having a diferent basic sound.

Absolutely. Best example is CDPs "brassage(old)" for this kinda  
thing, or waveform software's "amber-x". Even reaktors grain cloud  
can select a different source file per grain triggering event. BUT  
the reason i recommend having one fixed sample/source file for each  
voice is quite simple: this way i can keep track (and thus control)  
of which source file is being used by which grain, as a eurorack  
module will not have a display telling me which file is currently  
being referenced by which voice. This is both of use on stage (or in  
any other "i gotta know my stuff"-performance situation) as well as  
it (ever so slightly) slightly reduces DSP-load (no switching between  
different address spaces in memory) and makes constructing specific  
results more straight-forward and manageable. And you can still  
reference a variety of source files by defining which voice plays at  
which time and possibly using more than one module for more than four  
source files simultaneously. But then tha's just me, i don't mind  
buying multiple modules, i even went and bought two vocoder core  
systems for midi-automated stereo filterbanks ;-)

In general it would be smart to keep a *realtime*, near-to-zero- 
latency granular processor as dumb (or "mechanical"/"close to  
hardware" )as possible, because every additional layer of software  
makes timing more and more inaccurate (or at least it steadily  
becomes more challenging to code the algorithm in such a way that the  
order of things is right) on financially viable DSP setups. If you'd  
want to do it perfect, you'd build it discreetly with counter-ICs for  
memory pointers and only supply these with offsets and reset values  
generated in higher level software as these values are only generated  
once per grain. You'd simply clock the playback and D/As off an on- 
board or external VC-clock (like in the BBD), skipping the common  
system clock/sample rate and hence avoiding aliasing when doing FM  
(as you'd do this at the clock, not in the grain module's memory).  
BUT this approach would basically draw tons of current and require a  
lot of ICs and thus a rather complex board layout etc, making it  
rather unaffordable and large ;-)


>
> the grains are "riden" in realtime from the basic "source file" at
> the point of a "moving cursor" (sort of). (a totally agree that an
> external lag processor could be used if the "cursor" is controlable
> via external cv)
>
> the audio signal "contained" in a grain is constantly changing
> depending on where of the "source file" the grain is being taken and
> depending on how much feedback+delay is aplied to the grains.
>
> only when a "freeze" function is used the grain's audio content is
> totally stabilized.
correct except for that feedback+delay+"freeze"is typically not found  
in *generators* but in *processors*, because:


>
> it makes absolute sense to be able to refeed the grains with their
> output signal with some possible delay so timbre can be alterated in
> many ways. if pitch pitch changes are aplied to the grains or to the
> main "source file" many great sounds can be obtained (from pitch
> shifts to vapourous sounds, time streching, reverbs or infinite kinds
> of digital glitch effects)

a *generator* takes grains from files, a *processor* takes grains  
from a writable memory, as in a delay module or pitch-shifter. While  
the memory content is static in case of a generator (and you'd want  
it to be to be able to take the "colour" of a *specific* source file  
and bring it in to your new sound), the memory content of a  
*processor* is dynamic....the latter could be triggered to record  
from an input (including a delayed and fed-back version of the  
processor's output) and would reference *this* when generating  
grains, instead of a file. A "freeze" function simply sets this  
memory to be un-writable, so it effectively turns into a static  
content as you would have hwen using a file. You wouldn't be able to  
have repeatable and clearly determined results with a *processor*,  
and you wouldn't have the organic uncertainty with the  
*generator*....hence the differentiation between the two, as they are  
used for quite different applications. One is deterministic/ 
constructivistic, one is heuristic.

I fully agree that delayed feedback is of great use in a *processor*.

In my suggested module the *processor*-behaviour could simply be  
implemented with a memory-writer add-on module (except for the  
feedback, which you would have to patch manually).....all this add-on  
would do is provide the generator module with sound that the mem- 
writer records, which the generator would use instead of a loaded  
file. so you'd swap the static file for a writable memory. in this  
case creating a "delay" is simply creating an offset between the  
writing pointer's and the reading pointer's position (which is  
exactly how a delay is implemented). "Freezing" would simply be  
achieved by blocking the "record" control (with an inverter and an  
AND gate, to be specific ;-) )

l8a,
d

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.