09.12.2012 Views

The Kyma Language for Sound Design, Version 4.5

The Kyma Language for Sound Design, Version 4.5

The Kyma Language for Sound Design, Version 4.5

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

Looping, Feedback<br />

Several <strong>Kyma</strong> <strong>Sound</strong>s have internal feedback loops, but you can also create your own feedback loop by<br />

writing into memory with one module and reading out of it (after an arbitrary delay) with another. In the<br />

signal flow diagram, the writer must occur be<strong>for</strong>e the reader.<br />

MemoryWriter/Reader<br />

Take a look at the first <strong>Sound</strong> in this file, the one called write memory, read memory. This is an implementation<br />

of a basic feedback loop which you might draw as:<br />

Source<br />

+<br />

Delay<br />

134<br />

Output<br />

Notice that in the <strong>Kyma</strong> <strong>Sound</strong> the last module in the diagram is a MemoryWriter. It writes the sum of<br />

the source plus the delayed source into a delay line named, in this example, recording. Notice that the<br />

<strong>Sound</strong> called read the memory is a Sample, one of several <strong>Kyma</strong> <strong>Sound</strong>s that can read from the sample<br />

RAM of the Capybara. Double-click on read the memory because there is one very important parameter<br />

setting that is easy to overlook. Any time you are reading something from memory that is being written<br />

into memory elsewhere in the <strong>Sound</strong> structure, you must check the FromMemoryWriter box. Otherwise,<br />

<strong>Kyma</strong> will search your hard disk looking <strong>for</strong> the sample named recording. If you check FromMemory-<br />

Writer, then <strong>Kyma</strong> knows that it has to put the MemoryWriter on the same expansion card as the<br />

Sample that reads the memory. Try playing write memory, read memory to verify that it does indeed<br />

sound like a simple feedback loop.<br />

Actually you could have done exactly the same thing in a much easier way — by feeding the source into a<br />

DelayWithFeedback and controlling the feedback with a fader. But what if you want to insert some kind<br />

of processing in the feedback loop? Open up process in fdbk loop to see an example of this. <strong>The</strong> fed back<br />

portion of the signal goes through a single side band ring modulator be<strong>for</strong>e it is added in with the source<br />

and fed back into the delay line — so the processing is compounded each time around the loop. Try<br />

playing process in fdbk loop to hear the effect.<br />

In write memory, granulate memory, you see an example of using a GrainCloud, rather than a Sample, to<br />

read out of the delay line. <strong>The</strong> result is a kind of granulated delay line. Try playing it once with the default<br />

source chosen and then switch it over to Live source so you can try singing some long tones into it.<br />

As you probably noticed in this example, the delay line might already have some leftover sound in it<br />

from a previous example. Look at granular read w/zero mem <strong>for</strong> an example of how to clear the memory<br />

in the delay line be<strong>for</strong>e using it. Notice that the input to the MemoryWriter is a Concatenation of a Constant<br />

(with Value zero) followed by the feedback loop. This will write zeroes into the memory on all the<br />

cards first, so the delay lines will be silent at the beginning.<br />

FeedbackLoopInput/FeedbackLoopOutput<br />

What if the modifications you put into the feedback loop are so extensive that they cannot all be scheduled<br />

on the same expansion card as the memory writer and memory reader? To implement a feedback<br />

loop that crosses expansion cards, use the modules called FeedbackLoopInput (writes into the delay line)<br />

and FeedbackLoopOutput (reads from the delay line). Note that these modules can only implement delay<br />

lines of from 12 to 2048 samples long, so if you can get away with using the previous design <strong>for</strong> feedback,<br />

you should preferentially do it that way, because that gives you a larger range of delay times (down to a<br />

single sample).<br />

Open up basic Feedback in/out example to see a stripped-down illustration of how to set one of these up.<br />

Reading from left to right in the signal flow diagram, the first module is a FeedbackLoopOutput called<br />

read from loop. Notice that its parameters are set so that it reads from a “connection” called feedback<br />

after 128 samples of delay. This is fed into an Attenuator so you can control the amount of feedback, then<br />

it is fed into a DelayWithFeedback to add additional delay if desired. From that point on, it should look

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

Saved successfully!

Ooh no, something went wrong!