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.

TimeController is a little less extreme; it merely changes the rate at which time passes on the Capybara. If<br />

you set the Rate to 0, however, it too will stop time.<br />

<strong>The</strong> input to a WaitUntil module will not be loaded into the Capybara until Resume is triggered; then the<br />

input plays through at its normal rate and <strong>for</strong> its normal duration.<br />

<strong>The</strong>se modules affect the time-counter that the Capybara uses in order to determine when to start/stop<br />

<strong>Sound</strong>s and when to issue events. ‡ Thus, they have an effect on things like Concatenations and TimeOffsets,<br />

and MIDI files or scripts in the MIDIVoice. <strong>The</strong>y do not have any effect on the sampling rate. For<br />

example, a TimeController would have no effect on the speed of playback of a DiskPlayer, but if that<br />

DiskPlayer were concatenated with an Oscillator, a TimeController could delay the time at which the<br />

DiskPlayer ended and the Oscillator began.<br />

Suppose you have a situation (say a live, musical per<strong>for</strong>mance or a psychoacoustical experiment) where<br />

you know the ordering of the <strong>Sound</strong>s, but you would like to give the per<strong>for</strong>mer (or the subject) control<br />

over exactly when the Capybara switches from one <strong>Sound</strong> to the next. If you put each of the <strong>Sound</strong>s into<br />

a WaitUntil, and then feed all of them into a Concatenation, you can control the exact time at which each<br />

<strong>Sound</strong> is loaded into the Capybara, according to the conditions you place in the Resume field. <strong>The</strong> change<br />

from one <strong>Sound</strong> to the next is instantaneous (to within a single sample-tick), because all of the <strong>Sound</strong>s<br />

have already been compiled and loaded into the memory of the Capybara and are just waiting <strong>for</strong> their<br />

chance to get loaded and start playing!<br />

For example, say you had three sections, each with a different kind of processing on the ADInput. You<br />

would like the per<strong>for</strong>mer to have control over when to start and when to move on to each succeeding<br />

section. <strong>The</strong> first WaitUntil’s Resume field might have a MIDI switch in it, so the per<strong>for</strong>mer could start<br />

things by depressing a foot-switch or by pressing a button on a controller. <strong>The</strong> next WaitUntil might<br />

have a test on the output of a FrequencyTracker on the ADInput so that the next section would not begin<br />

until the per<strong>for</strong>mer sustained a 5 c. <strong>The</strong> last WaitUntil might have a test weighing the strength of the<br />

higher partials relative to the strength of the lower ones in order to detect when the per<strong>for</strong>mer speaks an<br />

“s” (or to detect an attack transient of a musical instrument).<br />

Time (and time again)<br />

When we speak of time in <strong>Kyma</strong>, there are actually several different time scales that we could be talking<br />

about:<br />

♦ <strong>The</strong> rate at which the structure is changing.<br />

♦ <strong>The</strong> asynchronous Event Values that could be coming from MIDI or generated internally.<br />

♦ <strong>The</strong> rate of <strong>Sound</strong>s pasted into parameter fields as control signals.<br />

♦ <strong>The</strong> sampling rate, the rate at which the audio signals are computed.<br />

<strong>The</strong> structure-changing rate is the rate at which old <strong>Sound</strong>s may expire and new ones take their place due<br />

to Concatenations or TimeOffsets. <strong>The</strong>se changes take place “between the samples”, that is, there is no<br />

delay between terminating one <strong>Sound</strong> and loading/starting the next. In order <strong>for</strong> this to work, though, all<br />

of the changes must be specified in advance.<br />

Event Values are asynchronous updates to the parameter values of the <strong>Sound</strong> that is currently loaded on<br />

the Capybara. <strong>The</strong>se could be coming in live from MIDI devices, a MIDI sequencer, generated by the<br />

AnalogSequencer, or they could be read from a stored sequence like a MIDI file or the sequence generated<br />

by a script in a MIDIVoice. In all cases, though, the input is not necessarily periodic and it is not always<br />

known in advance when an event might come in. <strong>The</strong> maximum rate of change <strong>for</strong> these asynchronous<br />

events is once per millisecond, corresponding with the maximum rate of transmission <strong>for</strong> the MIDI interface.<br />

<strong>Sound</strong>s pasted into parameter fields are often used in expressions that include Event Values, so the<br />

maximum rate of LFO-like control updates is also set at once per millisecond (or 1 khz).<br />

‡ <strong>The</strong> Event Values called !Time (time in seconds since the start of the entire <strong>Sound</strong>) and !LocalTime (time in seconds<br />

since the start of the <strong>Sound</strong> referencing !LocalTime) are also affected by these modules. !RealTime (time in<br />

seconds since the start of the entire <strong>Sound</strong>) is not. <strong>The</strong>se Event Values can be read only, not written.<br />

75

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

Saved successfully!

Ooh no, something went wrong!