05.02.2015 Views

Creating reverb efects using granular synthesis

Creating reverb efects using granular synthesis

Creating reverb efects using granular synthesis

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

CSOUND CONFERENCE 2011<br />

<strong>Creating</strong> <strong>reverb</strong> effects <strong>using</strong> <strong>granular</strong> <strong>synthesis</strong><br />

Author Kim Ervik AT kimer@ntnu.stud.no<br />

And Øyvind Brandsegg AT oyvind.brandtsegg@ntnu.no<br />

Abstract<br />

In this article we will explain how we have used Csound to create a <strong>reverb</strong> effect <strong>using</strong><br />

<strong>granular</strong> <strong>synthesis</strong>. At first we will present some commercial varieties of <strong>granular</strong> <strong>reverb</strong>,<br />

then show how to create the same effects <strong>using</strong> Csound. We will then show that due to<br />

the flexibility of Csound it is possible to take this idea even further and expand the<br />

concept of a <strong>granular</strong> <strong>reverb</strong> effect by presenting our variant of the <strong>granular</strong> <strong>reverb</strong> effect.<br />

Introduction<br />

Granular <strong>synthesis</strong> has long been available as a sound manipulating and sound generating<br />

technique, and lately has been increasingly used in commercial music software.<br />

Explained shortly, <strong>granular</strong> <strong>synthesis</strong> generates sound based on the additive combination<br />

of many very short sonic grains in to larger acoustical events. This technique has large<br />

expressive possibilities for parametric control tied to the time and frequency domain.<br />

Some basic examples of <strong>granular</strong> <strong>synthesis</strong> are parameters are grain rate, grain envelope,<br />

grain duration, grain pitch and waveform inside each grain.<br />

For a long time it has been common to use pre-sampled sound or complex<br />

waveforms as source waveform in the <strong>granular</strong> <strong>synthesis</strong>. In recent times, due to faster<br />

home computers, <strong>granular</strong> <strong>synthesis</strong> has additionally become relevant as an audio effect<br />

in real time, for instance in a live performance, or as a plug-in in a DAW. One common<br />

usage of <strong>granular</strong> <strong>synthesis</strong> on an incoming audio stream is to create delay- or <strong>reverb</strong>effects.<br />

One example is Ableton Live’s “grain delay”. This effect is similar to the delay in<br />

that it delays the incoming signal, with optional feedback amount and a dry/wet amount.<br />

It differs from the classical delay effect in the way that it’s possible to chop the delayed<br />

signal into grains and treat the signal with <strong>granular</strong> <strong>synthesis</strong>, <strong>using</strong> parameters like grain<br />

pitch, grain rate and modulation of these. It is also possible to scatter the placement of the<br />

grains in the time domain up to 500 ms with the “spray” parameter, which creates a lush<br />

cloud of the repeated signal. If the parameters is tweaked right, this delay effect can<br />

sound like a <strong>reverb</strong> effect.<br />

With Line 6s new stompbox “M” series (M5, M9, and M13) two interesting<br />

<strong>reverb</strong> effect is called “particle verb” and “octoverb” and generates a lush cloud output,<br />

made from the audio input signal. Both these effects contains pitch shift as an integrated<br />

part of the algorithm. Knowing this and taking the name “particle verb” in account we<br />

can assume that <strong>granular</strong> <strong>synthesis</strong> constitute a significant part of the <strong>reverb</strong> algorithm. In


“particle verb” one can also hear a kind of grain scattering, which can also indicate that<br />

this is a variant of grain delay.<br />


I. Granular <strong>reverb</strong>s<br />

Commercial <strong>granular</strong> <strong>reverb</strong>s<br />

In the physical world, <strong>reverb</strong> is generated by reflection from surfaces around the sound<br />

source giving the sound object 1 a short tail. In the early days of spatial effects, sounds<br />

were played back into an echo chamber and recorded to produce such effects. Later, tapedelay<br />

machines could produce the illusion of early reflections by delaying the incoming<br />

signal. A combination of allpass and comb filters has been used to create artificial <strong>reverb</strong><br />

(e.g. Moorer <strong>reverb</strong>, Gardner <strong>reverb</strong>, Freeverb), and feedback delay networks (e.g.<br />

<strong>reverb</strong>sc in Csound) constitute another well-known technique. Currently, also<br />

convolution (Boulanger, 2000: 507) has been used to artificially recreate the response of<br />

a physical room or hall. Granular synthesized <strong>reverb</strong> is more like the delay-effect in the<br />

way that it makes use of the early reflection illusion, but resembles <strong>reverb</strong> in that it also<br />

creates <strong>reverb</strong>-like, lush tails. One could easily term <strong>granular</strong> <strong>reverb</strong> more of a special<br />

effect then a “realistic” effect.<br />

A <strong>granular</strong> <strong>reverb</strong> effect in Csound can be created the same way as Ableton Lives<br />

“grain delay”, with a delayed signal that is chopped up to smaller grains and treated with<br />

<strong>granular</strong> <strong>synthesis</strong>. This is shown in example1.csd. To emulate the Line 6 “octaverb”, we<br />

can use the same example as with the grain delay, but with grain pitch one octave above.<br />

Further expansion on the concept of <strong>granular</strong> <strong>synthesis</strong> as a <strong>reverb</strong><br />

effect<br />

Another way to create a long tail is to stretch the sound object in the time domain. This is<br />

easily done <strong>using</strong> <strong>granular</strong> <strong>synthesis</strong>. One can “chop” the sound object into grains and<br />

stretch the duration of the entire sound object by filling the empty spaces between the<br />

grains with nearby grains. This way we get a longer sound object with the same structure<br />

as the shorter sound object, and without a drop in pitch.<br />

Time stretch <strong>using</strong> <strong>granular</strong> <strong>synthesis</strong><br />

With low grain rates less than 30 Hz, the pitch of the sound object is perceived<br />

through transposition of the source audio, as the original source waveform is not distorted<br />

by <strong>granular</strong> amplitude modulation. We can to some extent avoid the AM effect at higher<br />

grain rates too, by <strong>using</strong> a small random deviation on the sample position for reading<br />

grains.<br />

1 Sound object is described as one isolated sound event, for example a note or a drum hit<br />

or the sound of a train passing by (Roads, 2001)


One way to create a smooth time stretch effect is <strong>using</strong> grain rates on about 30 –<br />

40 grains per second, overlapping grains (3 overlaps seems to be OK) and a tiny random<br />

offset on the sample position. To achieve a broad stereo image one can double the sample<br />

rate and mask every other grain to the left and right stereo channels.<br />

Time stretch as a real time audio effect<br />

There are obviously some conceptual problems with the idea of time stretching in<br />

real time. When a sound is played in its original tempo, at the same time as the same<br />

sound is played back in a lower tempo, the lower tempo playback will lag behind the<br />

original, and increasingly so over time. In real time processing this is a problem because<br />

shortly after the effect instrument is started, the time between the playback position of the<br />

original signal and the playback position of the stretched signal is far to large for it to<br />

sound like a <strong>reverb</strong> effect. Letting the stretching process “skip” some parts of the<br />

incoming sound can solve this problem, though it is not ideal because its not predictable<br />

which parts of the original signal are stretched and which parts are not.<br />

A better approach to real time time stretch is to use several buffers and several<br />

instances of the time stretch instrument simultaneously. Using the “schedkwhen” Csound<br />

opcode we can trigger a Csound instrument to record incoming sound to a buffer or a<br />

table (GENroutine 2 or 1). A metronome and a counter can keep track of which table to<br />

write to, and when to start and stop the instances of the recording instrument. Another<br />

“shedkwhen” can trigger the <strong>granular</strong>- or the time stretching instrument. In this manner,<br />

we can allow several overlapping time stretch instances simultaneously. This can also be<br />

seen as a <strong>granular</strong> process, so we have in effect two separate layers of <strong>granular</strong> <strong>synthesis</strong><br />

running on top of each other, or nested <strong>granular</strong> <strong>synthesis</strong>, if you wish. It can also be<br />

preferable to let the recording instances overlap each other to compensate for the random<br />

offset on the sample position.<br />

Writing to buffer <br />

Reading from <br />

buffers <br />

Figur 1.1 Writing audio to 8 different buffers, at the same time as they are played back.<br />

In our example we’ve used 8 buffers, recording 0.5 seconds to each buffer. This<br />

fraction of sound is time stretched 8 times to 4 seconds (see figure 1.1). These values has<br />

been tweaked by empirical adjustments to find the suitable settings, so that the <strong>reverb</strong> tail<br />

is long enough at the same time as its not too unpredictable when an incoming sound<br />

“returns” from the audio processing. We’ve also applied an envelope with a slow attack<br />

and a slow release to get all the instances to overlap each other smoothly.


GIDELAYTIME INIT 0.5<br />

GITALETIME INIT 4<br />

; LENGTH OF CHUNK TO BE RECORDED FOR STRETCHING<br />

; PLAYBACK TIME OF THE RECORDED CHUNK<br />

; (0.5 SECONDS STRETCHED TO 4 SECONDS)<br />

INSTR 1<br />

KMETROTIME = 2<br />

KTRIG METRO KMETROTIME<br />

; ------- COUNTING TABLE NUMBERS FOR TIME STRETCH INSTRUMENT -------<br />

GKTABLENR = GKTABLENR + KTRIG<br />

IF GKTABLENR > 8 THEN<br />

GKTABLENR = 1<br />

ENDIF<br />

SCHEDKWHEN KTRIG, 0, 3, 2, 0, GIDELAYTIME + 0.4, GKTABLENR ;REC TRIG<br />

IF GKPLAYTABLENR > 0 THEN<br />

SCHEDKWHEN KTRIG, 0, 8, 3, 0, GITALETIME, GKTABLENR ;STRETCH TRIG<br />

ENDIF<br />

ENDIN<br />

Example1.1 :Time stretch trigger instrument.<br />

II. Using the partikkel opcode<br />

The “Partikkel” opcode is inspired by Curtis Roads book “Microsound” (2001) and is<br />

capable of generating all the varieties of <strong>granular</strong> <strong>synthesis</strong> described in his book. It is<br />

extremely flexible and offers a large set of control parameters.<br />

A design detail that profits the time stretch technique is that all the sound<br />

generating calculations is done, and stored in a list, before the grain is played. With the<br />

exception of FM modulation, none of the parameters of a grain can be changed during the<br />

life cycle of the grain. This is done to optimize the CPU usage. If one changes any of the<br />

parameters during the lifecycle of a grain, the changes apply before the next grain is<br />

played. Due to the obvious need to change the sample position when time stretching this<br />

is an advantage. With some <strong>granular</strong> tools the grain is re-pitch when the sample position<br />

is changed. This will not be a problem <strong>using</strong> the “partikkel” opcode.<br />

The “partikkel” opcode is also a good choice because one can use up to four<br />

sound sources in each instrument instance.<br />

With “partikkel” one has “per grain control” over some of the parameters,<br />

meaning that one can, for example, specify the pitch and the amp of each grain. This way<br />

one can spectrally compose the “<strong>reverb</strong> cloud”. A neat suggestion is to let every other<br />

grain be one octave above the original grains. With “per grain control” one can also<br />

adjust the amplitude level of the grains that are pitched one octave above the original<br />

grains.


III. Conclution<br />

We have shown that it is possible to create a <strong>reverb</strong> effect <strong>using</strong> <strong>granular</strong> <strong>synthesis</strong>, <strong>using</strong><br />

commercial tools, and we have shown how to do the same with more flexibly and control<br />

in Csound.


Acknowledgements<br />

- Ableton – “http://www.ableton.com/live-8”<br />

- Boulanger, Richard: 2000. The Csound book. MIT Press, Cambridge, Massachusetts.<br />

- Brandtsegg, Ø. and Saue, S. Particle <strong>synthesis</strong>, a unified model for <strong>granular</strong> <strong>synthesis</strong>.<br />

Accepted paper at Linux Audio Conference 2011<br />

- Line 6 – “http://line6.com/m9/models.html”<br />

- Roads, Curtis: 2001. Microsound. MIT Press, Cambridge, Massachusetts.<br />

- Smith, Julius O, “dsprelated.com/dspbooks/filters” “Introduction to digital filters”<br />

- Smith, Julius O, “dsprelated.com/dspbooks/pasp/Schroeder_Allpas_Sections.html”<br />

“Introduction to digital filters”<br />

- Smith, Julius O, “dsprelated.com/dspbooks/pasp/Schroeder_Reverberations.html”<br />

“Introduction to digital filters”<br />

- Smith, Julius O, “dsprelated.com/dspbooks/pasp/Freeverb.html” “Introduction to digital<br />

filters”

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!