0% found this document useful (0 votes)
6 views316 pages

Understanding Absolute Value and ADSR

The document describes various audio processing components including AbsoluteValue, ADSR, AmplitudeFollower, AnalogSequencer, and others. Each component has specific functions, parameters, and controls for manipulating sound inputs, generating envelopes, filtering, and sequencing audio events. The document provides detailed descriptions of how each component operates and how they can be utilized in audio processing applications.

Uploaded by

Samuel Sacher
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views316 pages

Understanding Absolute Value and ADSR

The document describes various audio processing components including AbsoluteValue, ADSR, AmplitudeFollower, AnalogSequencer, and others. Each component has specific functions, parameters, and controls for manipulating sound inputs, generating envelopes, filtering, and sequencing audio events. The document provides detailed descriptions of how each component operates and how they can be utilized in audio processing applications.

Uploaded by

Samuel Sacher
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

AbsoluteValue

Math Category
The output of an AbsoluteValue is the absolute value of its Input. (Choose Full waveform from the Info menu to see
that the output waveform contains only positive values, rather than values above and below zero).

Input
This is the Sound whose absolute value is taken.

1
ADSR
Envelopes & Control Signals Category
Generates a traditional four-segment envelope with attack, initial decay, sustain, and release segments. As long as
Gate is 0, no envelope is generated. When Gate becomes positive, the attack and decay are generated. The
envelope continues to decay towards the SustainLevel until the Gate value returns to zero at which time the envelope
enters its release portion.
In a prototype with an Envelope parameter field (Oscillator, for example) you can use the ADSR as the Envelope
parameter. Envelope generators can also be used to control other parameters (such as Frequency or OnDuration).
To apply an envelope to any Sound, use the Sound and an envelope generator as Inputs to the VCA prototype. (The
VCA simply multiplies its two inputs by each other).

AttackTime
Time for the envelope to reach the maximum amplitude (attenuated by Scale) once it has been triggered.

DecayTime
Time for the envelope to decay from the maximum level down to the SustainLevel.

SustainLevel
Level that will be sustained for as long as Gate remains nonzero.

ReleaseTime
Time for envelope to decay from SustainLevel down to 0.

Type
Choose between linear envelope segments or exponential segments.

Scale
Overall level for the envelope. IF you have the Linear box checked, you can set Scale to a negative value to generate
envelopes that go from 0 down to a negative value. (Note that this makes most sense when using the ADSR to
control parameters other than amplitude, e.g. when using this as a pitch envelope).

Gate
Enter a 1 in this field to make the envelope last exactly as long as the Sound is on.
If you use an EventValue (for example, !KeyDown) in this field, the envelope can be retriggered as often as you like
for as long as this Sound is on.
When Gate becomes positive, the envelope is started; when Gate becomes zero, the envelope is released.

Legato
Legato affects the behavior of the envelope when triggered by the Gate field.
When Legato has a zero or negative value, the envelope will rapidly reset to zero before beginning the re-attack.
When Legato has a positive value, the attack will begin from the current envelope value (without first resetting to
zero).

2
Interpolation
Controls whether changes to Scale are linearly interpolated or not.

3
AmplitudeFollower
Live Capture & Tracking Category
Follows the amplitude of the Input by taking an average of the absolute values of individual input samples. This is
similar to the RMS but requires less computation. TimeConstant controls how long the average runs; thus, the longer
the TimeConstant, the smoother the output (but the less quickly it can respond to transients in the Input).

Input
This is the Sound whose amplitude is tracked.

TimeConstant
This controls the response time. Longer time constants result in smoother outputs at a cost of losing some of the
detail in the attacks. Short time constants result in outputs that respond more immediately to attack transients but
that may not be as smooth for the steady state portions. For a constant input at maximum amplitude, this is the time
required for the output to reach 60% of the full output amplitude. (Note that the output may never reach the maximum
possible amplitude since it is the average of the absolute value of the amplitudes).

Scale
Attenuates the input amplitude.

4
AnalogSequencer
Sequencers Category
Generates sequences of note events and continuous controller values for EventValues in parameters of the Input.
There is a sequence of MIDI notenumbers, durations, duty cycles and velocities to supply MIDI note events to the
Input, and ExtraValues lets you supply a sequence of values for any continuous controller EventValues in the Input’s
parameters.
The length of all sequences is the length of the longest sequence; any shorter sequences will repeat their final values
in order to be as long as the longest sequence. For example, if you want all values in a sequence to be 0.5, you need
only enter the number a single time, because it will be repeated for as many times as necessary to make it as long as
the other sequences.
If Step is a constant 1, then the Durations and the DutyCycles are used to determine when !KeyDown events should
be generated and how long each key should remain down. If no other units of time are used and if the value of Rate
is 1, the numbers in the Durations sequence are interpreted in seconds. Rate is a divisor on the length of each
duration, so if Rate is greater than 1, the durations will be shorter, and if Rate is less than 1, they will be longer.
Use Step to step through the sequences one by one, according to a trigger. For example, you could use !KeyDown to
control the step rate from a MIDI sequencer, or you could use 1 bpm: (!Speed * 1024) to control it with an internal
metronome, or you could paste in an audio signal that has been passed through an amplitude follower and a
threshold to trigger each element of the sequences in synch with an audio signal, or you could use !TimingClock to
step using the MIDI clock from a software sequencer or external synthesizer.
To trigger using the Step field, you should set all Durations to the same value; this value (taken along with the value
of DutyCycle and Rate) will determine the duration of each note, and the Step trigger will specify the onset time of the
note. The value you pick for the Durations will act as a kind of "mask" on the speed of the step triggers. Notes
cannot be triggered any more often than the minimum values specified in the Durations field. This can be helpful if
you are triggering from the !TimingClock (24 triggers per beat) or an audio signal with lots of peaks in it, because it
will force the sequencer to ignore triggers that occur faster than at the desired rate.

Input
EventValues anywhere in this Sound can be controlled by the arrays of key events or continuous controller values
sequenced by this AnalogSequencer.

Left
Attenuator on the left channel amplitude.

Right
Attenuator on the right channel amplitude.

Gate
When this value changes from 0 to 1, it restarts the sequences. If Loop is checked, the sequences will repeat for as
long as Trigger is nonzero.
Use a constant value of 1 to get an infinitely repeating sequence. Use an EventValue such as !KeyDown to restart
and stop the sequence interactively.

Step
Step to the next set of values in the sequence when this value changes from a zero to a number greater than zero. If
Step is changing faster than the specified durations, some of the steps will be ignored. In other words, you can use

5
the sequence of durations as a kind of mask, constraining the minimum durations to be at least those specified in the
duration sequence.

Rate
This is the rate at which the sequences are traversed. When Rate is 1, all Durations are interpreted as seconds,
when Rate is 2, the Durations are half as long, and when Rate is 0.5 the Durations are twice as long. Negative Rates
cause the sequencer to step BACKWARDS through the sequences of values.

Loop
Check this box to loop back to the StartIndex once the EndIndex has been reached.

StartIndex
This is the starting position of the sequence. Each position in the sequence is numbered from 0 up to the length of
the sequence minus 1.

EndIndex
This is the ending position of the sequence. Each position in the sequence is numbered from 0 up to the length of the
sequence minus 1.

Polyphony
The sequencer is monophonic, but this allows some overlap between the release of one event and the attack of the
next. Polyphony specifies how many events can be heard overlapping each other at any one time.

Durations
A sequence of durations. If no units are used, the numbers are assumed to be in seconds. Each Duration, in
conjunction with the corresponding DutyCycle, is used to determine when to send each !KeyDown and how long to
keep it down.
In this field, you must enclose expressions within curly braces, for example: {2 s * !KeyVelocity}

DutyCycles
A sequence of duty cycles where the duty cycle is the fraction of the beat during which the note is on. For example, a
duty cycle of 0.5 means that the note is on for half the beat and off for the second half of the beat. A duty cycle of 0
would mean that the note is never on, and a duty cycle of 1 would mean that the note is continuously on and never
turns off.
In this field, you must enclose expressions within curly braces, for example: {!Duty * !KeyVelocity}

Pitches
A sequence of MIDI notenumbers that will supply the pitches to any !Pitch or !KeyNumber in the parameters of the
Input.
In this field, you must enclose expressions within curly braces, for example: {60 nn + !Interval nn}

Velocities
A sequence of values between 0 and 1 that will supply the values to any !KeyVelocity in the parameters of the Input.
In this field, you must enclose expressions within curly braces, for example: {0.5 * !VelocityScale}

ExtraValues
Use this field to specify a sequence of changes for any non-keyboard EventValues in the Input. The syntax is:
#(<!EventValue> <val1> <val2>, .., <valn>)
For example, to send a sequence of 3 values for !Morph and for !Pan, you would use something like the following:
#(!Morph 0 0.25 1)

6
#(!Pan 0 0.5 1)
In this field, you must enclose expressions within curly braces, for example:
#(!Pan {0.5 - !PanSpread} {0.5 + !PanSpread})

7
AnalysisFilter
Live Capture & Tracking Category
Bandpass filter designed to isolate the individual harmonics of its Input. It has quadrature output (i.e. the left channel
output is the cosine part of the Input signal at that frequency; the right channel is the sine part of the Input at that
frequency); thus you can use a QuadratureOscillator to frequency shift this harmonic using single side band ring
modulation.
The filter is designed such that, if you were to add together the output of filters set at each harmonic from 0 to the
harmonic closest to half the sampling rate, the amplitude of that sum would be 1.

Input
This is the Sound that gets filtered.

Fundamental
This is the assumed fundamental frequency. In most cases, you should set it to be the same as the Input frequency.

Harmonic
This is the number of the harmonic that the filter will try to isolate. In other words, the center frequency of the filter will
be the Fundamental * this Harmonic.

8
Annotation
Variables & Annotation Category
An Annotation contains a Text commenting on its Input. It does not affect the sound of the Input in any way; it is just
a comment. The Text of an Annotation shows up in the Virtual control surface whenever the Sound is loaded. (The
text of any Annotations that occur in Sounds to the left of this one will appear below this one’s Text in the Virtual
control surface).

Input
The Text refers to this Sound.

Text
This is a textual description of the Input.

FlyByOnly
When unchecked, the text of the Annotation is displayed in the Virtual Control Surface. When checked, the text of the
Annotation is hidden and only a small question mark (?) icon appears in the Virtual Control Surface. When you hover
the cursor over the (?) icon, the text of the Annotation appears as flyBy help; click the icon to open a new window with
the Annotation text.

ShowControllerMappings
When checked, a list of mappings of hot values from external controllers to hot values within the Sound will be added
to the flyBy help of the Annotation. When you hover the mouse over the Annotation text in the VCS, you will see the
mappings from VCS widget to external controller. For example, it would show if you had used right-click to remap
!Frequency to PenY of the Wacom tablet.

9
AR
Envelopes & Control Signals Category
Generates an envelope with the specified attack and release times with either linear or exponential segments.
In a prototype with an Envelope parameter field (Oscillator, for example) you can use an envelope generator directly
as the Envelope parameter. Envelope generators can also be used to control other parameters (such as Frequency
or OnDuration). To apply an envelope to any Sound, use the Sound and an envelope generator as Inputs to the VCA
prototype. (The VCA simply multiplies its two inputs by each other).

AttackTime
Time required for the envelope to reach its maximum value (as attenuated by Scale) whenever its Gate value
becomes positive.

ReleaseTime
Time it takes for the envelope to return to 0 once Gate changes from a positive number back to zero.

Type
Choose between linear and exponential segment shapes.

Scale
Overall attenuation on the envelope generator values.

Gate
Enter a 1 in this field to play the Sound exactly once for the duration of this Sound.
If you use an EventValue (for example, !KeyDown) in this field, the Sound can be retriggered as often as you like
within the duration specified in the Duration field.
When Gate becomes positive, the Sound is heard; when Gate becomes zero, the Sound is released.

Interpolation
Controls whether changes to Scale are linearly interpolated or not.

10
ArcTan
Math Category
The output of ArcTan is the four-quadrant arctangent of the ratio of the right channel input to the left channel input.

Input
This is the Sound whose arctangent is taken.

11
AudioInput
Inputs Category
An AudioInput represents the analog or digital inputs on the back of the Capybara. If Digital Input is selected in the
DSP Status window, then this represents the digital input.
If there are (preamplified) microphones connected to the inputs then this Sound represents the input from those
microphones. You can also connect the audio outputs of some other line-level sound generator (like a CD or DAT) to
the input.
The individual channel check boxes control which audio input channel(s) will be used. If only one channel is checked,
it will be output on both channels of the AudioInput.

Channel1
Check this box to use the channel 1 audio input of the signal processor.

Channel2
Check this box to use the channel 2 audio input of the signal processor.

Channel3
Check this box to use the channel 3 audio input of the signal processor.

Channel4
Check this box to use the channel 4 audio input of the signal processor.

Channel5
Check this box to use the channel 5 audio input of the signal processor.

Channel6
Check this box to use the channel 6 audio input of the signal processor.

Channel7
Check this box to use the channel 7 audio input of the signal processor.

Channel8
Check this box to use the channel 8 audio input of the signal processor.

12
AveragingLowPassFilter
Filters Category
Low-pass filter that operates by taking a running average of the stream of Input values. The length of the running
average is the period of the cutoff frequency. The Cutoff frequency and its harmonics are cancelled out by the filter
(and frequencies close to the cancelled frequencies are attenuated).

Input
This is the Sound that is to be low-pass filtered.

Cutoff
Frequencies above the cutoff will be attenuated by the filter.

Wavetable
This is the wavetable that is used to keep the running average of the last few samples. Select Private if you want the
next free wavetable and do not need to reference this same segment of memory again. (If you want to reference this
same memory segment from another Sound, type in a unique name for the wavetable and use that same name when
accessing the memory from the other Sound.)

Scale
This is the attenuation on the input. For the full amplitude use +1.0 or -1.0 (or 0 dB); any factor whose absolute value
is less than 1 will attenuate the output.

13
ChannelCrosser
Stereo Category
A Crossover lets you switch any portion of the left channel signal into the right channel and vice versa.

Input
The left and right channels of this Sound can be attenuated and mixed using the sliders.

LeftInLeft
This is the portion of the left input that appears in the left output.

RightInLeft
This is the portion of the right input that appears in the left output.

LeftInRight
This is the portion of the left input that appears in the right output.

RightInRight
This is the portion of the right input that appears in the right output.

14
ChannelJoin
Stereo Category
This Sound places the left channel of Left into the left output channel and the right channel of Right into the right
output channel.

Left
The left channel of this Sound is output to the left channel.

Right
The right channel of this Sound is output to the right channel.

15
Channeller
Stereo Category
If LeftChannel is checked, the left channel of Input is output on both channels.
If RightChannel is checked, the right channel of Input is output on both channels.
If both are checked, the Input is passed through unchanged.
If neither is checked, there will be no output.

Input
Either the left or right channel of this Sound will be output.

LeftChannel
If only this control is checked, the left channel of Input will be output on both channels.

RightChannel
If only this control is checked, the right channel of Input will be output on both channels.

16
ChannelSelector
Surround & Multichannel Category
ChannelSelector selects one mono channel of its stereo or multichannel input and sends it to both the right and left
channels as a "dual mono" output.

Input
A Sound whose output has two or more channels.

Channel
Specify the channel number (as an integer from 1 to 8) that should be extracting from the Input and sent to the output
as a dual mono signal.

17
Chopper
Envelopes & Control Signals Category
Multiplies the Input by a stream of "grains" or envelopes (one cycle of the selected wavetable), each lasting for
GrainDuration with InterGrainDelay silence in between. During the InterGrainDelay the Input is multiplied by zero.

Input
This Sound is multiplied by an alternating stream of grains and inter-grain silences.

GrainDuration
This is the duration of each grain. (Duration should always be greater than 0.)

InterGrainDelay
This is the delay time between grains. (Duration should always be greater than 0.)

Wavetable
One cycle of the selected wavetable will be used as the envelope of each grain.

18
CloudBank
Aggregate Synthesis Category
Grain clouds whose center frequencies and amplitudes are supplied by a SpectrumSource and whose frequency
deviation, grain duration deviation, pan, and likelihood of triggering are supplied by input Sounds.

NbrTracks
This is the number of tracks from the SpectumSource that will be used by this CloudBank.

GrainsPerTrack
The number of grains dedicated to synthesizing each track of the SpectrumSource.

BankSize
The number of grains to be scheduled on each processor. It’s best to leave this at "default" unless you are trying to
optimize it by scheduling more or fewer grains per processor.

GrainWave
This is the waveform inside each grain. This file should have exactly 4096 samples.

GrainEnvelope
This is the envelope shape on each grain. This file should have exactly 4096 samples.

GrainDur
The duration of an individual grain. To specify a constant duration, no matter what the frequency of the waveform
within each grain (implying that high frequency grains will have more cycles in them than low frequency grains):
GrainDur = <desired grain duration>
CyclesPerGrain = 0
To specify the number of waveform cycles within each grain (implies that higher frequency grains will have shorter
duration than lower frequency grains and assures that every grain will contain an integer number of full cycles of the
waveform):
GrainDur = 0 s
CyclesPerGrain = <number of cycles in each grain>

CyclesPerGrain
The integer number of full cycles of the waveform that should occur inside each grain. Use this parameter to specify
grains that are shorter for high frequencies than they are for low frequencies. If you prefer uniform grain durations
over all frequencies, set this parameter to zero and use GrainDur to set the grain duration.

Seed
Enter an integer value to be used as the seed for the random number generator used to assign spectral tracks to
grains. Enter a zero if you would like the tracks to be assigned in ascending order (this will have the effect of
sweeping upwards in frequency at medium density values).

Trigger
A new grain can start up only when the Trigger Sound is greater than 0. For random start times, use white Noise as

19
the input.

Pan
Stereo position of each grain (where 0 is hard left, 0.5 is in the middle, and 1 is hard right).

FreqMod
This Sound modulates the center frequency (obtained from the SpectrumSource). The frequency of a grain will be
freq + (freq * freqMod)
where freq is the frequency from the SpectrumSource. In other words, when FreqMod is at its maximum amplitude,
the resulting frequency can range from 0 hz up to twice the center frequency. The modulated frequency is read at the
start of each new grain. (The frequency does not change *during* the grain).

GrainDurMod
This Sound modulates the grainDur (or the CyclesPerGrain). The duration of a grain will be
grainDur + (grainDur * durMod)
In other words, the duration can range from 0 up to twice the grainDur (or CyclesPerGrain).

SpectrumSource
This should be a linear Spectrum (see the Spectral Sources category of the Prototypes for Sounds that can be used
as Spectral Sources). If your Spectrum is log instead of linear, you can use the SpectrumLogToLinear to convert it to
linear.
The SpectrumSource supplies the center frequencies and amplitudes for each grain cloud. Frequency envelope
points are on the right channel and Amplitude envelope points are on the left channel.

Interpolation
Choose linear if you would like to interpolate between the values read from the grain waveform and envelope
wavetables.

20
Constant
Math Category
The output of a Constant is its Value. If Value is set to a number, the output of the Constant is the same number over
its entire duration.
If you paste an Event Value into the Value field of a Constant, the Constant’s output is equal to the Event Value. This
is useful for processing Event Values as if they were Sounds. For example, if you were to paste !cc07 into the Value
field of this Constant, you could then feed the Constant into a delay, put it into a waveshaper, multiply it by a sine
wave oscillator, or perform any number of other signal processing operations on it.

Value
Enter a value from -1.0 to 1.0. You can also paste Event Values or Sounds into this field (since their values fall within
the range of -1 to 1).
If you paste !Pitch or !KeyNumber into this field, you must divide it by 127 in order to scale it down to the range of 0 to
1; if you then use this Constant in the Frequency field of another Sound, remember to multiply the Constant by 127 nn
in order to scale it back into the range of 0 nn to 127 nn.

21
ContextFreeGrammar
Scripts Category
A Sound consisting of Concatenations and CenteringMixers of the Inputs is generated from the startExpression by
rewriting according to the production rules of a context-free grammar. A seed is used for repeatable results.

Inputs
These Sounds act as the terminals of the production rules; in order from top to bottom, left to right they are referred to
in the productions as s1, s2, ..., sn.
Drag a folder or any number of individual Sounds into this field.

RewriteRules
Production rules should be of the following form,
Variable -> option {| option}*.
A single uppercase letter is followed by -> and then one or more options separated by the delimiter, |. Each option
consists of a fully parenthesized expression followed by a number in brackets indicating the relative weighting of that
choice. Each expression should consist of binary combinations of Sounds, s1 - sn where n is the number of Inputs,
and Variables (single uppercase letters), separated by a comma for Concatenation or plus for a CenteringMixer. For
example, the following production rule will always generate palindromes:
A -> ((s1 , A) , (s1)) [2] |
((s2 , A) , (s2)) [2] |
((s3 , A) , (s3)) [2] |
(s1) [1] | (s2) [1] | (s3) [1].
This assumes that there are at least 3 Inputs.

StartExpression
This expression is rewritten using the production rules. It should consist of some combination of variables, A - Z, and
terminals, s1 - sn where n is the number of subSounds, separated by one of the operators, comma or plus (where a
comma represents a Concatenation and a plus represents a CenteringMixer). The starting expression represents a
Sound; it should be fully parenthesized. Some legitimate examples of startExpressions are:
(A)
(A + (s1 , B))
((E , Z) + ((T , U) , (s3 , (X , s5)))),
where A, B, E, Z, T, U, and X all appear on the left hand sides of production rules and there are at least 5 Inputs.

Seed
Type in an integer less than 65535, for example, 34897.

MaxRewrites
This is an upper bound on the number of times the startExpression will be rewritten.

22
MaxSize
This puts an upper bound on the number of Sounds that will be generated by the grammar.

Left
This controls the level of the left input channel. The maximum value is 1 and the minimum is -1. The left channel of
the input is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right input channel. The maximum value is 1 and the minimum is -1. The right channel
of the input is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

23
Crossfade
Level, Compression, Expansion Category
Crossfades between its two Sound inputs while optionally also panning and attenuating the result.

Pan
A Pan value of 0 places the sound entirely in the left speaker, and a Pan value of 1 places it entirely in the right.
Values inbetween those extremes make the Input source appear as if it were placed somewhere inbetween the two
speakers.

Scale
Attenuates the crossfaded signal.

Snd1
This Sound will be crossfaded with Snd2.

Snd2
This Sound is crossfaded with Snd1.

Fade
0 corresponds to entirely Snd1, and 1 corresponds to entirely Snd2. Values in between correspond to mixtures of
Snd1 and Snd2.

Type
Choose between a straight, linear crossfading function (which, psychoacoustically, "jumps" in the middle) and a power
function that will sound, psychoacoustically, as if it were a linear change from one Sound to the other. The linear fade
function is sometimes the more desireable one when crossfading between control functions (See also the
Interpolation prototype).

24
CrossfadingMulticycleOscillator
Oscillators Category
Oscillator that can smoothly switch from one waveshape to another by cross-fading. Intended for use with multicycle
wavetables.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Wavetable
Enter the name of a samples file or click the Disk icon to select a samples file to be used as the wavetable. In the
simple case, your Wavetable should be 4096 samples long (for example, see Sine). If you would like to be able to
switch between waveforms in real time, select a Wavetable (samples file) that contains all of the 4096-sample-long
waveforms, one after another, in the sample (For example, see the samples in the MultiCycle folder which is inside
the Waves folder). The Index field can then be used to select which 4096-sample waveform you want to play.

Modulation
Select whether or not the frequency is to be modulated by the Modulator input. (Note: If the Modulator has hot values
in it, they will *not* show up in the Virtual Control Surface when this box is unchecked.)

Modulator
If Modulation has been set to frequency, then this Sound is the Modulator (otherwise it is ignored). Usually the
Modulator is another Oscillator, but a Sound can be used to modulate the Frequency.

MaxMI
This is the value of the modulation index when the Modulator is at its full amplitude.

Interpolation
The Linear box should be checked when using the Oscillator as an audio signal. If you are using it as a control
signal, you can save on processing time by checking None.

Envelope
This is an attenuator on the output of the Oscillator. Enter 1 (or 0 dB) for the full amplitude. For a time-varying
amplitude, paste in a Sound (such as AR, ADSR, or FunctionGenerator) or an Event Value (such as !Volume) in this

25
field. It is advisable to smooth the EventValue (for example !Volume smoothed) or to use a full sample rate Sound
pasted into the Envelope field. For full sample rate amplitude envelopes, erase the ’L’ that automatically appears
after the name of the pasted Sound.

PitchBend
If you use !KeyPitch in the Frequency field, !PitchBend control is automatically included so you do not need this
parameter. Otherwise, this is a deviation from the specified Frequency computed as:
actualFreq := Frequency + (Frequency * pitchBend).
The maximum pitchBend value is 2 and the minimum value is 0.

Reset
When reset is changed from a 0 to any nonzero number, the phase of the Oscillator is reset to zero. This means that
the Oscillator jumps back to the beginning of the cycle.

Formant
This number is a multiple of the Frequency (range of 1 to 511). At the minimum value, 1, you hear the fundamental
frequency of this oscillator. For higher values, you hear a filtering effect, as if a bandpass filter were sweeping at a
multiple of the Frequency. For numbers greater than 1, the Oscillator reads through its wavetable at a faster rate than
Frequency and outputs zero until the next period starts.
If you prefer to think of this as the DutyCycle of the waveform, you can use the following expression in this field to
give yourself realtime control of the DutyCycle. (Note, !Frequency should be the same as the value that you have in
the Frequency field):
((!Duty vmax: 0.001) inverse vmin: (SignalProcessor halfSampleRate hz / !Frequency hz)) vmin: 511

Index
If you have a multicycle sample selected as the Wavetable, then this is an integer that selects which 4096-sample
waveform to play. An index of 0 selects the first waveform. If the index is less than 0, it selects the 0th waveform (the
first in the wavetable). If the index is larger than the number of waveforms within the wavetable, it selects the last
waveform in the wavetable.
If the wavetable has been set up such that the first waveform has the first harmonic, the second waveform has the
first two harmonics, the third waveform has the first three harmonics, etc., then
(SignalProcessor halfSampleRate hz / !KeyPitch hz) - 1
will select the waveform with the largest number of harmonics that will not alias.
When you change the Index, the Oscillator continues reading at the current phase in the new cycle. If the waveforms
are similar, you should be able to change the Index mid-Cycle without introducing a click due to the discontinuity.

FromMemoryWriter
Check FromMemoryWriter when the wavetable does not come from a disk file but is recorded by a MemoryWriter in
real time. (To improve the scheduling of the MemoryWriter and this Sound, the MemoryWriter should start at the
same time as this Sound, either as part of a Mixer or on another track of the Timeline).

26
CrossFilter_Long
Cross Filtering Category
Crosses an Input (excitation) with a Response (interpreted as an object’s response to being hit). When you hit an
object, you excite many of its modes of vibration (its resonances). If you record its response to being hit, you can use
that information to create a filter having the same resonances as that object. Then you can use that filter to modify
the spectrum of any Input signal.
Use the "Long" version to capture longer responses (at the expense of adding some delay through the filter).
Pete Johnston invented the algorithm and wrote the assembly language code for the CrossFilters.

Input
The Input is heard through the filter defined by the Response.

Response
Each time the value of Capture becomes 1, the output of Response is captured in internal memory for
ResponseDuration seconds. The captured signal is then interpreted as if it were the response of some object (e.g. a
resonator, a room, a piece of wood or metal) to being struck or hit by an object, a single pulse, or a short duration
broadband signal. The resulting filter is then used to filter the Input.

Capture
When this value changes from zero to a positive value, it captures the Response in memory for the length of time
given in ResponseDuration. Whenever you change the signal that is captured in memory, you are also changing the
characteristics of the filter.
If you trigger the Capture while the Input is playing, you will hear the effects of the old filter on the CaptureDuration
seconds of input that came in before the trigger occurred; this is mixed in with the effects of the new filter on the input
that comes in after the trigger. If you silence the input for ResponseDuration seconds before triggering the Capture,
then you will hear the effects of the new filter only.
NOTE: The duration between Capture triggers should be longer than the ResponseDuration.

ResponseDuration
The ResponseDuration specifies the length of time that the Response should be recorded each time Capture is
triggered. (For example, if ResponseDuration is set to 0.1 s, then a tenth of a second of the Response input is
recorded each time there is a trigger in the Capture parameter.) The captured portion of the Response input is then
interpreted as the sonic response of some object to being struck. Note that if your Response is nonzero, the
CrossFilter will extend the duration of each impulse in the Input by ResponseDuration seconds. For example, if your
Input is a live microphone and you clap into the microphone, each clap will last for ResponseDuration seconds when
it passes through the CrossFilter.
If the ResponseDuration you request results in an ’out of real time’ message, try reducing the ResponseDuration
and/or unchecking Stereo. Alternatively, you can record the output of this Sound to disk by checking the NotRealtime
box and using the Record to disk option in the Action menu.
To request the longest possible ResponseDuration given the current sample rate and the number of processors, use
the word
maximum
Checking Stereo will decrease the maximum ResponseDuration. To find out what actual maximum duration in
seconds is for your configuration, evaluate one of the following expressions using Ctrl+Y:

27
SignalProcessor maxResponseDuration
SignalProcessor maxResponseDurationStereo

Level
This is an overall output level of Input after it has gone through the filter.

Start
Once the Response has been captured in memory, you can use subparts of that recording as the filter response by
changing Start and/or End. The beginning of the recorded response is at 0, and the end of the recorded response is
at 1. (To compute the actual start and end times in seconds, multiply the value of Start and End by the time in the
ResponseDuration field.) For example, if you set the value of End to a hot value !End, you can shorten the response
time of the computed filter while the Sound is playing. By setting both Start and End to hot values, you can move a
"window" around within the captured Response recording and use that small interval of time as the response.

End
Once the Response has been captured in memory, you can use subparts of that recording as the filter response by
changing Start and/or End. The beginning of the recorded response is at 0, and the end of the recorded response is
at 1. (To compute the actual start and end times in seconds, multiply the value of Start and End by the time in the
ResponseDuration field.) For example, if you set the value of End to a hot value !End, you can shorten the response
time of the computed filter while the Sound is playing. By setting both Start and End to hot values, you can move a
"window" around within the captured Response recording and use that small interval of time as the response.

Stereo
Check the Stereo box if you have a stereo Response and would like to maintain the difference between left and right
channels. When this box is unchecked, the Response is treated as a mono mix of its left and right channels. The
Input is always treated as a mono mix of its left and right channels. To independently process the channels of a
stereo Input, use the "CrossFilter_Long-Stereo" example from the Prototypes. NOTE: Checking this box reduces the
maximum possible length of the ResponseDuration.

NotRealtime
Check this box if the ResponseDuration you have requested results in an "out of realtime" message. This should
allow you to use the Action menu to record the output of this Sound to disk. (However, if you see the "out of SRAM"
message, you will have to reduce the ResponseDuration or uncheck the Stereo box.)

AllowLongerCapture
Check this box if you would like to try to increase the ResponseDuration at the expense of increasing the delay time
through the CrossFilter. If possible, Kyma will try to increase the efficiency of this Sound (not possible in all cases).

28
CrossFilter_Short
Cross Filtering Category
Crosses an Input (excitation) with a Response (interpreted as an object’s response to being hit). When you hit an
object, you excite many of its modes of vibration (its resonances). If you record its response to being hit, you can use
that information to create a filter having the same resonances as that object. Then you can use that filter to modify
the spectrum of any Input signal.
Use the "Short" version for zero delay through the system (at the expense of limiting the duration of the captured
Response).
Pete Johnston came up with the algorithm and wrote the assembly language code for the CrossFilters.

Input
The Input is heard through the filter defined by the Response.

Response
Each time the value of Capture becomes 1, the output of Response is captured in internal memory for
ResponseDuration seconds. The captured signal is then interpreted as if it were the response of some object (e.g. a
resonator, a room, a piece of wood or metal) to being struck or hit by an object, a single pulse, or a short duration
broadband signal. The resulting filter is then used to filter the Input.

Capture
When this value changes from zero to a positive value, it captures the Response in memory for the length of time
given in ResponseDuration. Whenever you change the signal that is captured in memory, you are also changing the
characteristics of the filter.
If you trigger the Capture while the Input is playing, you will hear the effects of the old filter on the CaptureDuration
seconds of input that came in before the trigger occurred; this is mixed in with the effects of the new filter on the input
that comes in after the trigger. If you silence the input for ResponseDuration seconds before triggering the Capture,
then you will hear the effects of the new filter only.
NOTE: The duration between Capture triggers should be longer than the ResponseDuration.

ResponseDuration
The ResponseDuration specifies the length of time that the Response should be recorded each time Capture is
triggered. (For example, if ResponseDuration is set to 0.1 s, then a tenth of a second of the Response input is
recorded each time there is a trigger in the Capture parameter.) The captured portion of the Response input is then
interpreted as the sonic response of some object to being struck. Note that if your Response is nonzero, the
CrossFilter will extend the duration of each impulse in the Input by ResponseDuration seconds. For example, if your
Input is a live microphone and you clap into the microphone, each clap will last for ResponseDuration seconds when
it passes through the CrossFilter.
If the ResponseDuration you request results in an ’out of real time’ message, try reducing the ResponseDuration
and/or unchecking Stereo. Alternatively, you can record the output of this Sound to disk by checking the NotRealtime
box and using the Record to disk option in the Action menu.
To request the longest possible ResponseDuration given the current sample rate and the number of processors, use
the word
maximum

29
Checking Stereo will decrease the maximum ResponseDuration. To find out what actual maximum duration in
seconds is for your configuration, evaluate one of the following expressions using Ctrl+Y:
SignalProcessor maxResponseDurationShort
SignalProcessor maxResponseDurationStereoShort

Level
This is an overall output level of Input after it has gone through the filter.

Stereo
Check the Stereo box if you have a stereo Response and would like to maintain the difference between left and right
channels. When this box is unchecked, the Response is treated as a mono mix of its left and right channels. The
Input is always treated as a mono mix of its left and right channels. To independently process the channels of a
stereo Input, use the "CrossFilter_Short-Stereo" example from the Prototypes. NOTE: Checking this box reduces the
maximum possible length of the ResponseDuration.

NotRealtime
Check this box if the ResponseDuration you have requested results in an "out of realtime" message. This should
allow you to use the Action menu to record the output of this Sound to disk. (However, if you see the "out of SRAM"
message, you will have to reduce the ResponseDuration or uncheck the Stereo box.)

30
DelayWithFeedback
Reverb, Delay, Feedback Category
Delays the Input signal, optionally feeding some of that delayed signal back and adding it to the current Input.

Type
Choose between Comb and Allpass filters. Both Comb and Allpass are delays with feedback. Allpass also adds
some of the direct signal to the output in order to make the long term frequency response flat. With Comb selected,
you will not hear the Input until after the first delay. With Allpass, you will hear the direct Input immediately.

Input
This is the signal to be delayed.

Scale
An attenuation factor on the Input (where 1 is full amplitude and 0 is completely attenuated so there is no more Input).

Feedback
Controls the amount of the delayed signal that is fed back and added to the Input. It is the attenuation on the
feedback signal (where 1 or 0 dB feeds back the full amplitude signal and adds that to the current Input signal).

Delay
The maximum delay time. The proportion of this time that is actually used is determined by multiplying this value by
DelayScale. Kyma needs to know the maximum possible delay in order to allocate some memory for this Sound to
use as a delay line, but the actual delay can vary over the course of the Sound from 0 s up to the value of DelayTime.

DelayScale
The proportion of DelayTime that is actually used as the delay, where 0 is no delay, and 1 is equal to the value in the
DelayTime field.

Wavetable
In almost all situations, this should be set to Private, so Kyma can allocate some unused wavetable memory to be
used as a delay time for this program. (The only time you would want to name this wavetable is if you would like
multiple delays or resonators to share a single delay line. In that case, you would type a name for the wavetable and
make sure that the other delays use the same name for their wavetables.)

Prezero
Check this box to start with an empty delay line when this program starts. If Prezero is not checked, the delay line
may have garbage in it from previous programs. This can have interesting, if unpredictable, effects and, in some
sense, models a physical object or resonator which would maintain its "state" between excitations.

Interpolation
When Linear is selected, changes to DelayScale are linearly interpolated, causing smoother changes to the delay.
When None is selected, changes to DelayScale are not interpolated, resulting in zipper noise.
For fixed delays, it is better to select None, since that uses fewer DSP resources.

31
SmoothDelayChanges
Checking this box causes the delay time to change slowly to the desired delay. Unchecking this box causes the delay
time to change immediately to the desired delay.
On Capybara-66 and earlier models, this setting has no effect.

32
Difference
Math Category
Outputs the difference of Input and minusInput.

Input
The Sound in the MinusInput field will be subtracted from this Sound.

MinusInput
MinusSound is subtracted from Sound.

33
DiskCache
Recording Category
Stores the Input as a disk recording when Record is clicked. When Record is unclicked, the input is played off the
disk rather than computed in real time.
This Sound can be useful when you are trying to reduce the amount computation required by one branch of a large
Sound structure. Whenever you make a change to the Input, remember to click Record and recapture the new
version of Input on the disk.

Input
When Record is checked, the Input is recorded into a disk file. When Record is not checked, the recording of the
Input is played, not the Input itself.

FileName
Enter a memorable name for the samples file that will be used to "cache" the Input Sound.

Record
Check this box when you want to record the Input. Uncheck it when you want to play back the previously recorded
input.

34
DiskPlayer
Sample playback Category
This Sound plays back recordings from the disk file specified in FileName, starting at the time specified in FilePosition
and continuing for the amount of time specified in Duration and at the rate specified in RateScale. Whenever Trigger
changes to a positive number, the playback restarts from FilePosition and plays again.
To treat this as a sample controlled from the MIDI keyboard, set FileName to the name of the sample, set Duration to
the total time during which you would like to be able to trigger the sample, set Trigger to !KeyDown (or a MIDI switch),
and set RateScale to the ratio of the desired frequency to the original recorded frequency, for example
!Pitch hz / 2 a hz
to use the MIDI keyboard to control a sample whose recorded pitch was 2 a.

FileName
Enter the name of a Samples file or use the Browse button to select a file from the standard file list dialog. The file
can be a recording made in Kyma, a recording imported from another program, or a sample from a CD-ROM (as long
as the file is in one of the formats listed in the Kyma manual).

FilePosition
This is the start time within the recording. In other words, you don’t have to start playback at the beginning of the file;
instead, you can start some amount of time into the file.

RateScale
This is the rate of playback. For example, use 1 to play back at the original rate, 0.5 for half speed, 2 for twice as fast,
etc.

Trigger
When the Trigger becomes nonzero, one event is triggered. You can trigger several events over the course of the
total Duration of this program as long as the value of Trigger returns to zero before the next trigger. Some example
values for Trigger are:
1 (plays once with no retriggering)
0 (the sound is silent, never triggered)
!KeyDown (trigger on MIDI key down)
!cc64 (trigger when controller 64 > 0)
You can also paste another signal into this field, and events will be triggered every time that signal changes from zero
to a positive value. (See the manual for a complete description of hot parameters, Event Values, and the Global map
files).

35
DiskRecorder
Recording Category
Records its Input to disk for CaptureDuration when its Trigger becomes positive.

Input
This is the Sound to be recorded onto disk.

FileName
The name of the samples file where Input will be recorded.

Format
Choose the samples file format. Kyma can record or playback any of these, but if you are going to export this sample
to be used in another application, choose a format that the other application can read.

WordSize
This is the number of bits used for each sample point. 24-bit words take up the most memory but will provide the best
dynamic range and signal to noise ratio. 8-bit words provide the least dynamic range but also take up the least
amount of space on disk. If you are going to export this samples file for use in another application, choose a word
size appropriate for that application. For example, if you are creating an alert sound for a Windows application, you
would choose 8-bit words and the WAV format. But if you have 18-bit converters and digital I/O, and this is an audio
track that you want to use in ProTools, you would probably want to choose 24-bit words and the SD-II format.

Channels
Choose between monaural and stereo recording. If both channels of the Input are identical, choose Mono since it will
take half the disk space of a stereo file.

Trigger
When Trigger becomes positive, the Input will be recorded into the specified file for the specified CaptureDuration.
You cannot retrigger without replaying the DiskRecorder (so you will not accidently write over what you have just
captured on disk).

CaptureDuration
Amount of time to record the Input to disk when triggered. This duration can be shorter than the duration of the Input,
so, for example, you could have a 1 day long ADInput, and just capture 3 s of it when you trigger the recording. To
automatically set the CaptureDuration to the full duration of the Input, enter 0 s here.

Gated
When checked, Gated makes the trigger act as a gate. This means that its input is only recorded when Trigger is a
positive value (for example, if Trigger is !KeyDown, the input is only recorded while the key is held down).

ConfirmOverwrite
Check this box if you want to be asked before overwriting an existing recording.

36
DualParallelTwoPoleFilter
Filters Category
Two parallel second-order filter sections having fixed zeroes (at the complex location 1%0). The output of this Sound
is the sum of the outputs from the two filter sections.
This Sound is useful if you already know the complex pole locations of the filters that you want. Otherwise, use the
TwoFormantElement prototype; it will give you the same results but with more intuitive parameters (like Frequency
and Bandwidth).

Input
This is the Sound that is filtered.

Pole1
This is the pole of the first filter. Type a complex number of the form, r % i, where r is the x coordinate in the z-plane
and i is the y coordinate in the z-plane. If (r**2 + i**2) is greater than 1.0, the filter output will overflow. The second
pole of this filter is automatically the complex conjugate of this one, so you don’t have to specify it.

Scale1
This is the scale factor on the first filter section. For the full amplitude use +1.0 or -1.0; any factor whose absolute
value is less than 1 will attenuate the output.

Pole2
This is the pole of the second filter. Type a complex number of the form, r % i, where r is the x coordinate in the
z-plane and i is the y coordinate in the z-plane. If (r**2 + i**2) is greater than 1.0, the filter output will overflow. The
second pole of this filter is automatically the complex conjugate of this one, so you don’t have to specify it.

Scale2
This is the scale factor on the second filter section. For the full amplitude use +1.0 or -1.0; any factor whose absolute
value is less than 1 will attenuate the output.

37
DynamicRangeController
Level, Compression, Expansion Category
Compresses or expands the Input’s dynamic range as a function of the SideChain’s amplitude envelope. Input
amplitudes at 0 dB remain unchanged in the output.
If Compressor is selected, Input amplitudes below the Threshold are boosted by (Threshold dB/Ratio - Threshold dB).
Input amplitudes at 0 dB pass through unchanged. Input amplitudes between the Threshold and 0 dB are boosted by
variable amounts (depending on the input amplitude envelope) along a line in dB space between 0 and (Threshold
dB/Ratio - Threshold dB).
If Expander is selected, Input amplitudes above the Threshold pass through unchanged. Input amplitudes below the
Threshold are attenuated by variable amounts (depending on the input amplitude envelope) along a line in dB space
between (Threshold dB - (Threshold dB/Ratio)) and minus infinity.
Typical uses include: Limiting (compression with a very large ratio and high threshold), Gating (expansion with
extremely small ratio and low threshold), Ducking (set attack and decay to 1 or 2 seconds, put the signal you want to
duck in an out at the Input and put the controlling signal at the SideChain, and also mix the SideChain with the output
of the DynamicRangeController) , making short percussive sounds seem louder (compress, then increase the overall
gain), and smoothing out extreme changes in amplitude.

SideChain
The amplitude envelope of this signal affects the amplitude envelope on the Input. Whenever the SideChain’s
envelope crosses the Threshold, the Input’s dynamic range will be either compressed or expanded.

Input
This is the signal whose dynamic range will be compressed (if Compressor is checked and Ratio is greater than 1) or
expanded (if Expander is checked and Ratio is less than 1).

Type
Choose Compressor to compress all amplitudes above the threshold to a narrower dynamic range.
Choose Expander to expand the dynamic range of all amplitudes below the threshold to a wider dynamic range.

Ratio
This is the ratio of the Input amplitude to the output amplitude. For compression, it should be greater than 1. For
expansion, it should be less than 1. (This only affects the Input when the SideChain crosses the Threshold).

Threshold
This is the point at which a graph of Input to output level changes from a straight line to a curved line (in linear
amplitude).

AttackTime
This controls how quickly the envelope follower on the SideChain reacts to increases in the SideChain’s amplitude.

ReleaseTime
This controls how quickly the envelope follower on the SideChain reacts to decreases in the SideChain’s amplitude.

38
Delay
Typically set to equal to the same value as AttackTime. Since AttackTime controls how quickly the envelope follower
on the SideChain reacts to increases in the amplitude of the SideChain, the envelope is always lagging by AttackTime
seconds. For example, a sudden spike in the SideChain amplitude results in a spike in the amplitude envelope
follower AttackTime seconds later. Delay is used for delaying the Input signal so that it lines up with the amplitude
envelope.
Maximum is 4096 samples (to compute the value in seconds at your current sample rate, use: 4096 samp s).

Gain
Besides changing the relative levels within the signal, compression and expansion usually change the overall level of
the output signal as well. Use Gain to adjust the overall level up or down.

39
EQFilter
Filters Category
This Sound applies low shelving, high shelving and presence filters to the input signal. The low shelving filter boosts
or cuts the spectrum below LowShelfFreq, the high shelving filter boosts or cuts the spectrum above HighShelfFreq,
and the presence filter boosts or cuts the spectrum within PresenceBW octaves of PresenceFreq.

Input
This is the Sound to be filtered.

Level
This controls the level of the output.

LowShelfDB
Indicate the amount of boost or cut in units of dB. Negative values indicate a cut, positive values a boost.

LowShelfFreq
Frequencies below this will be boost or cut by the amount specified in LowShelfDB.

PresenceDB
Indicate the amount of boost or cut in units of dB. Negative values indicate a cut, positive values a boost.

PresenceFreq
Frequencies within PresenceBW octaves of this frequency will be boost or cut by the amount in PresenceDB.

PresenceBW
The width (in octaves) of the boost or cut region of the spectrum.

HighShelfDB
Indicate the amount of boost or cut in units of dB. Negative values indicate a cut, positive values a boost.

HighShelfFreq
Frequencies above this will be boost or cut by the amount specified in HighShelfDB.

40
Equality
Math Category
Whenever InputA equals InputB (plus or minus the Tolerance), the output of this Sound is one; at all other times, the
output is zero.

Tolerance
This is the amount of deviation from equality that is still to be considered equality.

InputA
InputA is compared, sample point by sample point, against the Sound in InputB.

InputB
InputB is compared, sample point by sample point, against the Sound in InputA.

41
FeedbackLoopInput
Feedback Category
A FeedbackLoopInput and FeedbackLoopOutput must always be used as a pair sharing the same Connection name,
start time, and duration. The FeedbackLoopInput writes into the delay line specified in Connection, and the
FeedbackLoopOutput reads out of that same delay line.
(This differs from other ways of doing feedback in that it allows Kyma’s scheduler to put the input to the delay line and
the output from the delay line on different expansion cards--freeing up more computation time for processing modules
that are in the loop. For simpler cases of feedback, use the DelayWithFeedback or simply write into memory with a
MemoryWriter and read out of it with a TimeOffset Sample, Oscillator, or TriggeredTableRead.)

Input
This is the signal that is to be delayed.

Connection
This is the name of the delay line (It must be the same as that specified in the corresponding FeedbackLoopOutput).

42
FeedbackLoopOutput
Feedback Category
A FeedbackLoopInput and FeedbackLoopOutput must always be used as a pair sharing the same Connection name,
start time, and duration. The FeedbackLoopInput writes into the delay line specified in Connection, and the
FeedbackLoopOutput reads out of that same delay line.
(This differs from other ways of doing feedback in that it allows Kyma’s scheduler to put the input to the delay line and
the output from the delay line on different expansion cards--freeing up more computation time for processing modules
that are in the loop. For simpler cases of feedback, use the DelayWithFeedback or simply write into memory with a
MemoryWriter and read out of it with a TimeOffset Sample, Oscillator, or TriggeredTableRead.)

Connection
This is the name of the delay line and must be the same as that specified in the corresponding FeedbackLoopInput.

Delay
Specify a delay time between 12 samp and 2048 samp. For longer delays, feed the output of this Sound into a
DelayWithFeedback. Shorter delays may cause clicking in the output.

43
FFT
Spectral Analysis FFT Category
The FFT takes an input from the time domain and produces an output signal in the frequency domain or vice versa.
Length is the length of the FFT.
Two independent time domain signals are present: one in the left channel and one in the right.
The frequency domain signal repeats every Length/2 samples, alternating between the spectrum of the left channel
time domain signal and the spectrum of the right channel time domain signal. The frequency signal is output in
frequency order: 0 hz, Fs / Length, 2*Fs / Length, etc. Each frequency domain sample has the real part in the left
channel and the imaginary part in the right channel.
When Inverse is not checked, the Input is a time domain signal and the output is a frequency domain signal. When
Inverse is checked, the Input is a frequency domain signal and the output is a time domain signal.

Input
This is the signal that will be transformed from the time domain to the frequency domain or vice versa.

Length
This is the window length of the FFT. It must be a power of two.

Inverse
Click here to perform an inverse FFT (to convert from a spectrum back to a time-domain waveform).

44
Filter
Filters Category
An IIR filter of the specified type, cutoff frequency, and order with gain or attenuation on the input and an attenuator
on the amount of feedback.

Input
This is the Sound to be filtered.

Type
Choose:
LowPass to attenuate all frequencies above the cutoff Frequency.
HighPass to attenuate all frequencies below the cutoff Frequency.
AllPass to allow all frequencies to pass through unattenuated (but phase shifted by (-90 * Order) degrees at the
specified Frequency, with smaller phase shifts at frequencies below that and larger ones for frequencies above).

Frequency
The cutoff frequency for the filter can be specified in units of pitch or frequency. When Feedback is close to 1, the
filter will tend "ring" at this frequency. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Q
Q is related to Bandwidth.
For AllPass filters, this affects the size of the phase shift on frequencies around the center Frequency (higher Q
corresponds to a narrower band of frequencies that will be phase-shifted).
For LowPass and HighPass filters, this control has no effect.

Scale
This is the attenuation or gain on the Input. The typical maximum for scale is 1, but it can be set as high as 2 if
necessary.
HighPass filters generally require lower Scale values than LowPass filters.

Feedback
The higher the Feedback, the longer the filter will ring in response to an input.

45
This is the amount of filtered signal that is fed back in and added to the Input (when low pass is selected, the
feedback is negative). Negative feedback values are the same as the positive ones but 180 degrees out of phase.
To simulate a traditional analog sound, use a 4th order low pass or high pass filter, and use feedback to increase the
"resonance".

Order
The order of the filter corresponds to the number of poles. In general, the higher the order of the filter, the sharper the
cutoff, and the more real-time computation required.

MaximumUpdateRate
Check this box only if the filter parameters are controlled by a an EventValue being generated by a
SoundToGlobalController. If this is not the case, then Kyma can schedule this Sound more efficiently if you leave the
box unchecked.

46
FilterBank
Aggregate Synthesis Category
This is a bank of bandpass filters whose center frequencies and amplitudes are controlled by the frequency and
amplitude envelopes of the Spectrum input.

NbrFilters
This is the number of filters in the bank. The number should be less than or equal to the number of partials in the
Spectrum input. The more filters you ask for, the more computation is required, so experiment with finding the
minimum number of filters that will still give you the desired result.

BankSize
This is the number of filters that Kyma will schedule on each processor. Leave this set to default unless you are
running out of realtime; in that case, try adding or subtracting one or two filters from the default BankSize, e.g.
default - 2
and using the DSP Status view to see if that results in a more even distribution of computation across your multiple
processors.

Bandwidth
This is a 0 to 1 control on the bandwidth of all the filters in the bank.

Spectrum
This should be one of the Sounds from the Spectral Sources category of the Prototypes. The FilterBank expects a
linear spectrum, so you may have to use the SpectrumLogToLinear conversion module if you are using a log
spectrum source like SpectrumInRAM.

Input
This is the signal that will be filtered through the bank of bandpass filters. In order to hear the effects of all the filters,
the Input should be a broadband signal (such as white noise) to ensure that there is energy present at all the
frequencies that can be affected by the filters.

47
FIRFilter
Filters Category
The left channel of the Input is filtered by an FIR filter with the given filter tap weights.

Input
The left channel of this Sound is filtered.

Coefficients
These are the tap weights of the FIR filter in order from the multiplier on the oldest sample to the multiplier on the
newest sample. You can imagine this as the filter’s impulse response reversed in time.
In this field, you must enclose expressions within curly braces, for example: {!TapWeight1 * !Scale}

48
ForcedProcessorAssignment
Scripts Category
Forces the Input to be scheduled on the specified expansion card’s processor.
In almost all cases, it is better to let Kyma automatically handle the scheduling of Sounds on different processors.
However, this Sound lets you override the default scheduling and force a particular Sound to be computed on a
particular processor. Reasons for doing this might include: wanting to record a sample into the wavetable memory of
a specific expansion card (or range of cards) and being able to read out of that same memory later; or trying to
reschedule a Sound by hand if Kyma’s scheduling of it doesn’t keep up with real time (doing your own processor
allocation by hand is tricky and time-consuming and it is not necessarily recommended! See the Tutorial entitled
"What is Real Time Really" for other ways to reduce the computational complexity of a Sound that can’t keep up with
real time).

Processor
Number of the expansion card that Input will be scheduled on.

Input
Sound that will be forced onto the specified expansion card.

49
FormantBank
Aggregate Synthesis Category
The FormantBank synthesizes impulse responses for a bandpass filter centered at each of the frequencies and with
each of the amplitudes supplied by the Spectrum. The response of the filter is described by the shape of its impulse
response.

ScaleFormant
Values larger than 1 shift the formants up, while values less than one shift them down.

Frequency
This is the fundamental frequency for the resynthesis. It controls the rate at which new impulse responses are started
up. You can set Frequency to a constant value or control it from a MIDI keyboard or continuous controller. To use
the analyzed fundamental from the spectrum, use the SpectrumFundamental module to extract the fundamental from
the spectrum source. Paste the SpectrumFundamental into this field and multiply by the half sample rate, e.g.
([specFund] L * SignalProcessor halfSampleRate hz) nn + !Interval nn - !IntervalFormant
To deviate from the analyzed fundamental, you can add a pitch offset or multiply by a frequency scale, for example
([specFund] L * SignalProcessor halfSampleRate hz) nn + !Interval nn
To shift the formant frequencies independently of the fundamental frequency, first shift the Frequency parameter in
the Spectrum module using something like:
default hz nn + !IntervalFormant nn
Then compensate for the shift in this module’s Frequency field using something like:
([specFund] L * SignalProcessor halfSampleRate hz) nn + !Interval nn - !IntervalFormant nn

NbrFormants
This is the number of spectral partials that you want to resynthesize using the formant oscillators. This number
should be less than or equal to the number of partials in the spectrum source. The more partials you resynthesize,
the more processing power will be required, so if you run out of realtime, experiment with reducing this number to see
if you can get the same results with fewer partials.

BankSize
This is the number of formant generators that should be scheduled on each processor. You should leave this
parameter set to default unless Kyma runs out of realtime. In that case, you can try adding or subtracting a small
amount to the default Banksize, e.g.,
default + 1
and use the DSP Status view to gauge whether the processing looks more evenly distributed among your multiple
processors.

ImpulseResponse
This is the shape of the impulse response for the filter you want to synthesize at each of the partial frequencies.
Choose a simple shape like LinearEnvelope (or one of the other symmetric wavetables in Kyma>Waves>Windows) to
approximate a simple bandpass filter. Shapes with more bumps in them will give you more complex frequency
responses.

50
Spectrum
This is the source of frequency and amplitude envelopes for controlling the bank of impulse responses. It should be a
linear spectrum from the the Spectral Sources category of the Prototypes. Use the SpectrumLogToLinear to convert
a log spectrum (like the SpectrumInRAM) to linear.

NbrImpulses
This is the maximum number of impulse responses that will be playing at any one time. Normally, you should leave
this at its default setting. If you increase the number of impulse responses, the result will be louder but you will have
to reduce the BankSize in order for Kyma to properly schedule the FormantBank on multiple processors.

AllowDC
Check this box if you want to resynthesize any DC (0 hz frequency) components from the spectrum.

51
FormantBank-Element
Oscillators Category
Synthesizes a filtered pulse train where the filter is based on the shape of the FormantImpulse and on the formant
frequencies, amplitudes, and bandwidths that you supply in the Spectrum parameter (which is usually a
SyntheticSpectrumFromArray Sound).

Frequency
This is the fundamental frequency of the pulse train input.

Spectrum
This should be a spectral source (typically a SyntheticSpectrumFromArray) and should specify center frequencies,
bandwidths, and amplitudes for the desired formants.

CascadeInput
Whatever Sound you place at this input will be added to the output of the current Sound. You can use this to cascade
several FormantBankOscillators or to mix the output of a different kind of Sound with the output of this Sound.

FirstFormant
The lowest numbered formant that you would like to read from the spectrum specification. This is almost always
going to be 1 (but can be set to a different number if you would like to skip over some formants or if this is one in a
chain of cascaded FormantBankOscillators).

NbrFormants
The number of formants that you would like to synthesize (which can be less than the number of formants specified in
the Spectrum input).

FormantImpulse
This is a wavetable containing the impulse response for each of the formant filters. In other words, if you were to hit
one of the formant filters with a single 1 followed by an infinite string of zeroes, this would be the output of the filter.

NbrImpulses
This is the maximum number of simultaneous impulse responses that can be generated. Leave it at its default value
unless you hear the sound breaking up (in which case you can try a smaller number).

AllowFormantAtDC
In nearly all situations, you should leave this box unchecked. You can use this option to synthesize a pulse train
whose shape is stored in the FormantImpulse wavetable. (To do this, you also have to specify a spectrum that is a
single formant centered at 0 hz or DC).

52
FrequencyScale
Frequency & Time Scaling Category
Scales the frequency of the Input by the value specified in FrequencyScale. It does this by "granulating" the input and
then either overlapping the grains to scale up in frequency, or leaving time between the grains to scale down in
frequency.

Input
This is the Sound whose frequency is to be scaled.

FreqTracker
In order to scale the frequency, we have to know the frequency.
The normal setup is to have a FrequencyTracker as the Input in this field. It could also be a Constant or a
FunctionGenerator if you already have a good frequency estimate (or intentionally want to supply a different
frequency estimate).

FrequencyScale
The frequency of the input will be multiplied by this value.
For example, to shift up by an octave, the FrequencyScale should be 2, and to shift down and octave, the scale
should be 0.5. To shift up by 3 half steps, you would use:
2 ** (3/12)
To shift down by 7 half steps, you would use:
2 ** (-7/12)
To continuously shift between 0 and 4 half steps under control of !Frequency, you could use:
2 ** (!Frequency * 4 / 12)

MaxScale
This should be equal to the FrequencyScale, or, if FrequencyScale is an Event Value, this should be the maximum
value of the Event Value.
The larger MaxScale is, the more computation time is required by the FrequencyScale.

Window
This function is used as a window or envelope on each grain.

Delay
Use this to delay the Input so that it lines up with the FrequencyTracker’s estimate of its frequency (since the
FrequencyTracker has to have at least two cycles of the Input before it can make its frequency estimate).
It should be a power of two number of samples. Use the following to calculate the delay based on the value of
MinFrequency that you have set in the FreqTracker that feeds into this module:
(2 raisedTo: ((1.0 / 120 "!<-- this should be replaced by the minFrequency in hertz!") s samp removeUnits log: 2)
ceiling) * 2 samp

53
FrequencyTracker
Live Capture & Tracking Category
Outputs a continuously updated estimate of the frequency of the Input. The output of the FrequencyTracker falls
within the range of 0 to1; to use this value in a frequency field, multiply it by the maximum possible frequency:
SignalProcessor sampleRate hz * 0.5
The left channel output is the frequency estimate (in the range of 0.1). The right channel output is an amplitude
envelope estimate. So for example, you paste this Sound into the Frequency field of an Oscillator and enter:
[FreqTrack] L * SignalProcessor halfSampleRate hz
And you could paste it into the Envelope field of the Oscillator as:
[FreqTrack] R smoothed
Set the range of frequencies (MinFrequency to MaxFrequency) to be as narrow as possible given what you know
about the range of the instrument or voice you are tracking. It is recommended that you leave Confidence, Scale,
Emphasis, and Detectors at their default values until you have gotten a reasonably good frequency tracker for a given
Input. Then, if you want to fine-tune the tracker, experiment with making small changes to these values, one at a time
(starting by increasing the number of Detectors), so you can be sure of what effect each one will have on the tracking.
If the tracking gets worse instead of better, revert back to the default values.

Input
Estimates the frequency of this Sound.

MinFrequency
This is the lowest expected input frequency. In general, try to set this as high as possible given what you know about
the input. For example, if you are frequency tracking a recording or sample and know the lowest frequency, enter it
here. Or, for example, if you are tracking the frequency of a live violin, you know that there won’t be any frequencies
lower than that of the lowest open string 3 g, so if you were to enter 3 e here, you know you would be safe.

MaxFrequency
This is the highest expected input frequency. In general, set this as low as you can given what you know about the
Input. But don’t underestimate the value, because higher frequencies will then be misidentified as being an octave
lower than they really are.

Confidence
This is a measure of how confident the FrequencyTracker must be of a new estimate before it lets go of the previous
estimate. In other words, this is a control on how easily the FrequencyTracker will change to a new estimate when
the Input frequency is changing over time. A Confidence value of 1 means that the tracker must be 100% sure of its
new estimate before giving up the previous estimate; since the tracker is not omniscent it never feels *that* sure, so
the result is that it sticks with its very first guess throughout the entire Input, no matter how much the Input’s
frequency changes. Setting the Confidence to 0 means that the tracker will output every guess even if it is not
confident at all, resulting in a lot of spurious frequency estimates. Carefully adjust the Confidence to some value
between these two extremes, fine-tuning this setting depending on the Input.

Scale
This is an attenuator on the Input to the FrequencyTracker. In general, the input must be attenuated, since the
FrequencyTracker uses an autocorrelation which requires summing the contributions of at least 1000 sample points
at a time.

54
Detectors
This determines the sensitivity of the frequency tracking. Try starting with a value of 10, and then experiment with
more or fewer if you want to try fine tuning the frequency tracking. (More is not necessarily better; there is some
optimal number of detectors for each circumstance.)

Emphasis
This is a frequency-dependent weighting giving preference to higher frequency estimates. The range of this value is
0 to 1, where 1 is the highest weighting and 0 means to do no weighting. The recommmended value is 1.

55
FunctionGenerator
Envelopes & Control Signals Category
Reads the specified Wavetable for the specified OnDuration whenever it receives a Trigger.
Useful for envelope generation or for reading recordings stored in the wavetable memory (see also the Sample
prototype).
In a prototype with an Envelope parameter field (Oscillator, for example) you can use the FunctionGenerator directly
as the Envelope parameter. A FunctionGenerator can also be used to control other parameters (such as Frequency
or OnDuration). To apply an envelope to any Sound, use the Sound and an envelope generator as Inputs to the VCA
prototype. (The VCA simply multiplies its two inputs by each other).

Trigger
When the Trigger becomes nonzero, one event is triggered. You can trigger several events over the course of the
total Duration of this program as long as the value of Trigger returns to zero before the next trigger. Some example
values for Trigger are:
1 (plays once with no retriggering)
0 (the sound is silent, never triggered)
!KeyDown (trigger on MIDI key down)
!F1 (trigger when MIDI switch > 0)
You can also paste another signal into this field, and events will be triggered every time that signal changes from zero
to a nonzero value. (See the manual for a complete description of hot parameters, EventValues, EventSources, and
Map files).

OnDuration
This is the duration of each triggered event. OnDuration must be greater than zero, and you must specify the units of
time, for example:
2s (for 2 seconds)
2 ms (for 2 milliseconds)
200 usec (for 200 microseconds)
2m (for 2 minutes)
2h (for 2 hours)
2 days
2 samp (for 2 samples)
1 / 2 hz (for the duration of one period of a 2 hz signal)

Wavetable
This is the name of the function that will be generated (or the sample that will be played) each time the
FunctionGenerator is triggered.

FromMemoryWriter
Check FromMemoryWriter when the wavetable does not come from a disk file but is recorded by a MemoryWriter in
real time.

56
GAOscillators
Additive Synthesis Category
Additive synthesis using oscillators with complex waveforms (rather than sine waves). Each oscillator has its own
amplitude envelope and all oscillators share the same frequency deviation envelope.

TimeIndex
This controls the position within the frequency and amplitude envelopes, where -1 points to the beginning of the
envelopes, 0 points to the middle, and 1 points to the end of the envelopes. To move linearly from the beginning to
the end of the envelopes, use a FunctionGenerator whose wavetable is a FullRamp, or use the EventValue fullRamp
generator. For example,
!KeyDown fullRamp: 3 s
would go from -1 up to 1 whenever a MIDI key goes down.

Analysis0
This is the GA analysis file used when Morph is set to 0. A GA analysis file is an AIFF file containing each of the
wavetables, followed by each of the amplitude envelopes, followed by the frequency deviation envelope. Each of the
waveforms is 4096 samples long, and each of the amplitude envelopes and the frequency envelope is the same
length as each other (but this length varies from analysis to analysis).
To create your own analysis file from a sample, first do a spectral analysis of the sample, and then generate a GA
analysis file from that. Both of these operations can be performed using tools found in the Tools menu. (See the
tutorial on GA analysis/synthesis for full details).

Analysis1
This is the GA analysis file used when Morph is set to 1. A GA analysis file is an AIFF file containing each of the
wavetables, followed by each of the amplitude envelopes, followed by the frequency deviation envelope. Each of the
waveforms is 4096 samples long, and each of the amplitude envelopes and the frequency envelope is the same
length as each other (but this length varies from analysis to analysis).
To create your own analysis file from a sample, first do a spectral analysis of the sample, and then generate a GA
analysis file from that. Both of these operations can be performed using tools found in the Tools menu. (See the
tutorial on GA analysis/synthesis for full details).

Envelope
This is an overall envelope on all of the enveloped oscillators.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:

57
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Morph
This controls a crossfade between each of the waveforms and envelopes in Analysis0 with each of the waveforms
and envelopes in Analysis1.

58
GenericSource
Sample playback Category
This Sound can represent the live input, a sample read from the disk, or a sample read from RAM. If Ask is checked,
you can choose between these three kinds of sources each time you recompile the Sound.

Source
Select the live input, an audio track on disk, or a sample in RAM.

LeftChannel
Check this box to monitor the left channel of the source signal.

RightChannel
Check this box to monitor the right channel of the source signal.

Sample
Enter the name of a sample file or click the disk icon to choose it from the file dialog. To get information on the file,
hold down the Shift key and click the disk icon to the right of this field. To view or edit the samples in this file, hold
down the Ctrl key and click on the disk icon to open the Samples Editor.

Autoloop
Check here to loop the sample or disk.

Trigger
Whenever Trigger changes from 0 to a nonzero value, it will replay the disk or sample in RAM from the beginning.

AttackTime
Attack time for a linear envelope applied to the sample source.

ReleaseTime
Release time for a linear envelope applied to the sample source.

Scale
Scales the amplitude of the source.

Frequency
For samples in RAM or on disk, this controls the playback frequency. For samples that are unpitched, the original
frequency is assumed to be 4 c (60 nn).

59
GrainCloud
Granular Category
Generates a cloud of short-duration grains of sound, each with the specified Waveform and each with an amplitude
envelope whose shape is given by GrainEnv. The density of simultaneous grains within the cloud is controlled by
Density, with the maximum number of simultaneous grains given by MaxGrains. Amplitude controls an amplitude
envelope over the *entire* cloud (each individual grain amplitude is controlled by GrainEnv). You can control the
Frequency, stereo positioning, and duration of each grain as well as specifying how much (if any) random jitter should
be added to each of these parameters (giving the cloud a more focused or a more dispersed sound, depending on
how much randomness is added to each of the parameters).

Waveform
The waveform of the oscillator inside each grain.

GrainEnv
Defines the shape of each grain’s amplitude envelope. To minimize clicks, choose a wavetable that starts and ends
on zero.

MaxGrains
Maximum number of grains that can be playing at any one time. The smaller this number, the less computational
power the GrainCloud requires (but the less dense the texture you can generate). For even denser textures, put
more than one GrainCloud into a Mixer, and give each GrainCloud a different Seed value.

Amplitude
An overall level or amplitude envelope applied to the entire cloud. Note that this is independent of the amplitude
envelope on each individual grain.

Density
Controls the number of new grains that can start up at any one time. Small Density values result in a sparse texture;
large Density values generate a dense texture.

GrainDur
The duration of an individual grain.
The duration of each grain is a function of three parameters:
GrainDur + CyclesPerGrain + (GrainDurJitter * 2 * (GrainDur + CyclesPerGrain))
To specify the number of waveform cycles within each grain (implies that higher frequency grains will have shorter
duration than lower frequency grains and assures that every grain will contain an integer number of full cycles of the
waveform):
GrainDur = 0 s
CyclesPerGrain = <number of cycles in each grain>
To specify a constant duration, no matter what the frequency of the waveform within each grain (implying that high
frequency grains will have more cycles in them than low frequency grains):
GrainDur = <desired grain duration>
CyclesPerGrain = 0

60
GrainDurJitter
The amount of random jitter added to the grain duration value when a new grain starts up. When GrainDurJitter is 0,
every new grain will have the same duration. At the other extreme, when it is set to 1, the durations vary randomly
from 0 to twice the specified duration.

CyclesPerGrain
The integer number of full cycles of the waveform that should occur inside each grain. Use this parameter to specify
grains that are shorter for high frequencies than they are for low frequencies. If you prefer uniform grain durations
over all frequencies, set this parameter to zero and use GrainDur to set the grain duration.

Frequency
Frequency of the oscillator within each grain.

FreqJitter
The amount of random jitter added to the Frequency value when a new grain starts up. When FreqJitter is 0, the
frequency inside each grain will be equal to the value in the Frequency parameter. When it is 1, each grain will have
a different, randomly selected frequency.
It is defined as:
(1 + (<randomNumber> * FreqJitter)) * Frequency
so when FreqJitter is 1, the frequency can range from 0 hz up to twice the specified Frequency (100% up is an octave
up, while 100% down is DC). When FreqJitter is zero, no random deviations are added to the Frequency.

Pan
Stereo position of each grain (where 0 is hard left, 0.5 is in the middle, and 1 is hard right).

PanJitter
The amount of random jitter added to the Pan value when a new grain starts up. The larger this number, the more
diffuse the apparent location, and the smaller the number, the more localized the sound.

Seed
A starting point for the random number generator. It should be a number between 0 and 1. Each different seed
number results in a different (but repeatable) sequence of random numbers. When adding several GrainClouds with
the same control parameters together in a Mixer, give each of them a different seed in order to ensure that each of
them has *different* random jitter added to its parameters (otherwise, they will just double each other).

61
GraphicalEnvelope
Envelopes & Control Signals Category
Similar to the ADSR envelope, except that you can graphically specify an arbitrary number of segments and can
specify loop points.
Typical uses include amplitude envelopes, pitch envelopes, and time index functions.

Envelope
Use this field to edit the envelope.
To add an envelope breakpoint, click the mouse while holding down the Shift key. Click and drag a breakpoint to
move it. Click a breakpoint and press the Delete key to delete it. The button at the lower right of this field is used to
control the looping behavior of the selected breakpoint.
See the section on Parameter Settings in the manual for more information.

Level
This is a scale factor (from 0 to 1) for attenuating the overall output level.

Gate
When Gate changes from zero to a nonzero, the envelope will be triggered. Gate must return to zero again before
the envelope can be retriggered. If you have specified beginning and ending segments for a loop, the envelope will
repeat the loop segments for as long as the Gate is nonzero. If the ending loop segment ends on a higher or lower
value than the start of the beginning segment, the entire looped portion will get larger or smaller each time it is
repeated (because each segment has a *slope* associated with it, not the absolute values at each point).

Rate
This is the rate at which the envelope is played.
Use 1 to play it back as shown in the Envelope parameter field (where each heavy vertical line represents one
second), 0.5 to make the envelope last twice as long, 2 to make it play twice as fast, etc.

JumpToEnd
When checked, jump to the end of the loop as soon as Gate goes to zero. Otherwise, move smoothly from wherever
you are, through all the segments to the end when Gate goes to zero.

62
GraphicEQ
Filters Category
This gives you independent control over the levels of seven, octave-wide bands ranging in center frequency from 250
hz up to 16,000 hz. You can use it for attenuating or accentuating subparts of the Input spectrum. When all levels
are set to 1, you should hear the original Input signal with no change.

Input
This is the Sound to be filtered or equalized.

CF250Hz
Controls the level of a band from DC up to about 4 f.

CF500Hz
Controls the level of an octave band from about 4 f to 5 f (350-670 hz).

CF1000Hz
Controls the level of an octave band from about 5 f to 6 f (670-1340 hz).

CF2000Hz
Controls the level of an octave band from about 6 f to 7 f (1340-2794 hz).

CF4000Hz
Controls the level of an octave band from about 7 f to 8 f (2794-5588 hz).

CF8000Hz
Controls the level of an octave band from about 8 f to 9 f (5588-11,175 hz).

CF16000Hz
Controls the level of an octave band from about 9 f to 10 f (11,175 up to half the sampling rate).

63
HarmonicResonator
Filters Category
A filter that has resonances at the specified Frequency and all of its harmonics.

Input
This is the Sound that will be filtered.

DecayTime
This is the time it will take for the input amplitude to decay to -60 dB below its initial amplitude.

Brightness
The higher this value, the longer it will take for the high frequency partials to die away, resulting in a brighter timbre.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Wavetable
Type in the name of a wavetable to use as a delay line, or select Private to let Kyma choose some free wavetable
memory for you.

Prezero
Check this box if you want to assure that the delay line is clear before it is used in this Sound. Leaving it unchecked
simulates a physical resonator by allowing the filter to remember its state between excitations.

Scale
This is an attenuator on the input Sound. For the full amplitude use +1.0 or -1.0; any factor whose absolute value is
less than 1 will attenuate the output.

64
HighShelvingFilter
Filters Category
Boosts or cuts the frequencies above the specified cutoff frequency.

Input
This is the Sound to be filtered.

CutoffFreq
Frequencies above this will be boosted or cut by the specified amount.

BoostOrCut
Indicate the amount of boost or cut in units of dB. Negative values indicate a cut, positive values a boost.

Scale
Attenuator on the input.

65
HilbertTransform
Math Category
The output of this module can be fed directly into a QuadOscillator for single-sideband ring modulation. The left
channel is the Input phase-shifted by 90 degrees. The right channel is the Input. Delay through this module is
((numberTaps - 1)/ 2 + 1) samples. The larger the number of taps, the higher the quality of the phase shift (but the
more processing time required and the longer the delay time through the module).

Input
The mono mix of the input is used.

NumberTaps
This should be an odd integer. The more taps you request, the more processing power is required, the longer the
delay through this module (and the higher the quality of the phase shift). To use the maximum number of taps
possible, use the expression: SignalProcessor maxFIRTaps

Windowed
Check here to use a Hanning window on the input.

66
ImageDisplay
Visual Displays Category
Selects and displays an image from the list of files in the Images parameter field.

Images
Takes a list of PNG or GIF image file names, each within single quotes.

Index
An expression whose value is the index into the list of image filenames: 0 selects the first file in the list, 1 the second,
and so on.

67
InputOutputCharacteristic
Distortion & Waveshaping Category
Each value of the input signal is mapped to a different value in the output signal. Specify the desired InValues and
their corresponding OutValues. Values that lie between the ones you specify are either the same as the previous
value (Smoothing = 0), linearly interpolated between the previous and next value (Smoothing = 0.5), or interpolated
along a spline curve (Smoothing = 1). For nonzero values of Smoothing, the StartSlope and EndSlope give you the
direction of the curve before the first value and after the last value that you have specified.
Applications for this module include: waveshaping, restricting the output values of a Noise generator, or generating a
variable waveform (by setting Input to a FullRamp Oscillator or looped Sample on a FullRamp as the phase or the
index for looking up a value in the output function).

InValues
This is an array of input values in ascending order and within a range from -1 to 1. The first value should be -1 and
the last should be 1 (if not, Kyma will automatically add them). The values can be numbers or expressions.
Expressions must be delineated by curly braces, for example:
{!x0 * 0.1 + 0.1}
You can also generate the array algorithmically in Smalltalk, for example:
{(1 to: 9) collect: [:i | (i - 1) / 8.0 * 2 - 1]}

OutValues
For each number in the InValues array, this is the corresponding output value. Output values must lie between the
values -1 and 1. For example, if your InValues were
-1 -0.5 0 0.5 1
and your outValues were
1 0.5 0 0.5 1
then negative input values would be remapped to positive output values.
Expressions must be delineated by curly braces, for example:
{!x0 * 0.1 + 0.1}
You can also generate the array algorithmically in Smalltalk, for example:
{(1 to: 9) collect: [:i | (i - 1) / 8.0 * 2 - 1]}

Smoothing
For an input value that lies *between* two numbers in the InValues field, the output value can be:
* The same as the previous value (Smoothing = 0)
* The value that would lie on a straight line between the previous output value and the next output value (Smoothing =
0.5)
* The value that would lie on a spline curve between the previous and the next outValues
OR something in between these behaviors if Smoothing is between 0 and 0.5 or between 0.5 and 1.

StartSlope

68
The direction of the curve before the first specified value. For example, a value of 1 is a straight line going upwards,
and a value of -1 is a straight line going downwards.

EndSlope
The direction of the curve after the last specified value. For example, a value of 1 is a straight line going upwards,
and a value of -1 is a straight line going downwards.

Input
This is the source of input values that will be remapped by the InputOutputCharacteristic to a different set of output
values.

UpdateOnChange
Check this box to update all parameters in the Sound each time you change an InValue, OutValue, Slope, or
Smoothing.
Unless you are triggering the update in the Update parameter, this box should be checked.

Update
When UpdateOnChange is not checked, this parameter triggers the update of the InValues, OutValues, Slopes, and
Smoothing.
The trigger occurs when this parameter changes from a zero (or negative value) to a positive value.

69
Interpolate
Math Category
A linear combination of two inputs. The left channel of Input0 is multiplied by 1-leftInterp, the left channel of Input1 is
multiplied by leftInterp, and the two are added together (and the same for the right channels and rightInterp).
This Sound is useful for interpolating between control functions and envelopes (for example, interpolating between
two sets of analysis envelopes and using the result as an input to an OscillatorBank results in a spectral "morph" from
one spectrum to another before it is fed into the OscillatorBank or one of the Aggregate Synthesis banks).
NB: When using Interpolate to morph between Spectra, ensure that all the Spectral Sources have the same number
of partials and that they are either all Log or all Linear, not a mixture of the two.

Input1
When the Interpolation value is 0, this Sound is at full amplitude and Input2 is at zero amplitude.

Input2
When the Interpolation value is 1, this Sound is at full amplitude and Input1 is at zero amplitude.

LeftInterp
This parameter controls the left channel of the output. 0 results in an output of Input1 alone, and 1 results in an output
of Input2 alone. Any values between 0 and 1 result in a mix of Input1 and Input2 to be output. (If Inputs are spectral
sources, this channel is the amplitude envelopes.)

RightInterp
This parameter controls the right channel of the output. 0 results in an output of Input1 alone, and 1 results in an
output of Input2 alone. Any values between 0 and 1 result in a mix of Input1 and Input2 to be output. (If Inputs are
spectral sources, this channel is the frequency envelopes.)

70
InterpolateN
Math Category
Like Interpolate, except that it linearly interpolates between each Sound input and its neighbors in a series of any
number of Sound inputs. For example, you could use InterpolateN to crossfade from one sample to another in a
sequence, or between Oscillators having different waveforms, or between several spectra before you feed them into
an OscillatorBank or an Aggregate Synthesis bank. To summarize, you can use InterpolateN to fade from one Sound
to the next over any number of Sounds.
NB: When using InterpolateN to morph between Spectra, make sure all the Spectral Sources have the same number
of partials and make sure they are either all Log or all Linear, not a mixture of the two.

Inputs
Interpolate the left and right amplitude outputs of the Sounds in Inputs. The Inputs are ordered from left to right, top
to bottom.

LeftInterp
This parameter controls the left channel of the output. 0 selects the leftmost, uppermost Sound and 1 selects the
rightmost, lowermost Sound of the Inputs. Any values between 0 and 1 selects one of the intermediate Sounds
(smoothly fading from one to the next). If Inputs are spectral sources, LeftInterp controls the amplitude morph.

RightInterp
This parameter controls the left channel of the output. 0 selects the leftmost, uppermost Sound and 1 selects the
rightmost, lowermost Sound of the Inputs. Any values between 0 and 1 selects one of the intermediate Sounds
(smoothly fading from one to the next). If Inputs are spectral sources, RightInterp controls the frequency or pitch
morph.

Type

71
InterpolatePresets
Scripts Category
The Interpolate parameter selects one of the presets of the Input Sound. It functions as a master control over all the
hot values in the Input Sound. Imagine the presets arranged in a straight line from 0 to 1; the value of Interpolate
determines where you are on that line. If you are in between presets, the values of the preset parameters will be
interpolated. Check ShowPresetValues if you want the Input’s controllers to be displayed in the Virtual Control
Surface. Uncheck it if you want to hide those controllers and display the Interpolate control only.

Input
The presets found in this Sound are arranged in a straight line from 0 to 1. The Interpolate parameter travels through
those preset values, interpolating when in between one preset and the next.

Interpolate
This expression is used to interpolate between the values of the parameters saved in the presets of the Input.
For example, if Input has two presets, 0 will use the first preset, 1 will use the second preset, and 0.5 will be a blend
of the first and second preset.

ShowPresetValues
Check this box to show the Input’s preset values in the Virtual Control Surface. (They are under control of the
Interpolate parameter, so you can no longer change them directly in the VCS).

AutoLabelVCS
Check this box to show the Input’s preset values in the Virtual Control Surface. (They are under control of the
Interpolate parameter, so you can no longer change them directly in the VCS).

72
IteratedWaveshaper
Distortion & Waveshaping Category
This is like waveshaping, except that the output of the waveshaping is fed back into the waveshaper for the specified
number of Iterations before the result is finally output.
This algorithm was submitted by Agostino Di Scipio.

Iterations
Specify the number of times the output of the waveshaper should be fed back through the shaping function before the
output.

Input
Each sample of this Sound is used as an index into the shaping function stored in the Wavetable.

Scale
This attenuation is applied prior to feeding the output back into the waveshaper for each iteration.

Wavetable
This is the shaping function. An input value of zero indexes into the middle of this table, minus one indexes into the
beginning, and plus one indexes into the end of the table.

73
KeyMappedMultisample
Sample playback Category
This provides a quick way to map a large bank of samples to specific ranges of a MIDI keyboard. It can be used for
mapping large numbers of samples taken from musical instruments to narrow ranges on the keyboard (much as is
done on a standard sampler) or for being able to select and trigger large banks of sound effects in real time (from a
sequencer or from the MIDI keyboard).
To specify the samples that belong in the same bank, place all of them in the same folder or directory. Kyma will only
look at the top level of your directory, so any folders within that folder will be ignored. The ordering of the samples
within that file will be interpreted to be alphabetical by name (when ordering is important).
The files within the directory must all be mono or all stereo; mixtures of mono and stereo files are not guaranteed to
be interpreted correctly.

Frequency
Check the NoTransposition box below if you want the Frequency to equal the pitch of the recorded sample. The
frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Gate
Enter a 1 in this field to play the Sound exactly once for the duration you have specified in the Duration field.
If you use an EventValue (for example, !KeyDown) in this field, the Sound can be retriggered as often as you like
within the duration specified in the Duration field.
When Gate becomes positive, the Sound is heard; when Gate becomes zero, the Sound is released and will finish
playing through the current sample and then stop.
If the sample file has loop points stored in its header, Kyma will loop the sample for as long as Gate remains positive
(so, for example, as long as the MIDI key is held down).

Velocity
If By Base Pitch is checked, this value will pick between several samples of the same base pitch but different velocity
ranges as long as you have set those ranges in the header of the samples file.

FirstSample
Use the disk icon to browse, and then select one sample file within the folder or directory containing all the samples to
be mapped.

74
LoFreq
This Sound can be triggered at any frequency. The mapping is not defined for frequencies below LoFreq.

HiFreq
This Sound can be triggered at any frequency. The mapping is not defined for frequencies above HiFreq.

Mapping
The policy for mapping note number to samples file:
OnePerHalfStep: assign each samples file in order to the next half step on the keyboard. If you run out of
samples files start over again from the first file. This is a good mode for triggering sound effects from the keyboard
since you know that each half step will trigger a different sample.
EquallySpaced: Give each samples file an equal-sized range of the keyboard. The first samples file in the list gets
the lowest range of keys, the next file gets the next block of keys, etc. This is especially useful when you have
arranged the files alphabetically in your directory from the lowest to the highest originally recorded pitches.
ByBasePitch: Use the base pitch (as specified in the header of AIFF files) to assign samples to the frequencies
closest to their originally recorded pitch. This is the best policy to use when you have a set of samples that covers the
range of a musical instrument, since it will result in the least distortion of the samples if you can play them as close as
possible to their original pitches.
ByPitchRange: Assigns each sample to the pitch range specified in the sample file header. When the ranges
overlap, sample files whose names sort later in the alphabet take precedence.

AttackTime
Duration of the attack of an envelope applied to the sample.

ReleaseTime
Duration of the release of an envelope applied to the sample.

Scale
Overall level of the sample.

Loop
Click here if you want to loop the sample using the loop points specified in the header of the samples file. (Applies
only to samples read from RAM, not those read directly from disk).

FromDisk
Click here to indicate that the sample should be read directly from disk rather than from sample RAM on the
Capybara. You can use this option when Kyma tells you that you have run out of sample RAM (because your
sample is too long or you have requested too many samples).

NoTransposition
Click here to indicate that the samples should not be transposed from their originally recorded pitches. This is so you
can use the keyboard to trigger sound effects or long disk files without changing the duration or frequency of the
recordings.

75
Level
Level, Compression, Expansion Category
Boosts or attenuates the amplitudes of the left and right channels of the Input. (Check NoGain if you will be
attenuating only, because the attenuation program is slightly more efficient than the gain program).

Input
This is the Sound whose level will be changed.

Left
The left scale factor can be any positive or negative value. For example:
0.5
-0.25
-6 db
!Amp
!KeyVelocity
!dBGain db
!Gain
!KeyNumber / 127

Right
The right scale factor can be any positive or negative value. For example:
0.5
-0.25
-6 db
!Amp
!KeyVelocity
!dBGain db
!Gain
!KeyNumber / 127

NoGain
Check this box if you want to attenuate only (in other words if the magnitude of both Left and Right are known to be
numbers less than or equal to 1).

Interpolation
Controls whether changes to Left and Right are linearly interpolated or not.

76
LimeInterpreter
Scripts Category
Reads binary files produced by the Lime music notation program and maps values to parameters of Kyma Sounds.
This allows you to "play" scores produced in Lime using Kyma Sounds as the instruments.

FileName
This is the name of a binary file created and saved in Lime.

Inputs
These Sounds are treated as templates. Each name should begin with a letter and contain only alpha-numeric
characters; this field will reject any Sounds with "illegal" names. You can reference these Sounds by name in the
Script field.

Script
The script contains Smalltalk code that reads and interprets data from the specified Lime binary file. See the manual
for a more details about Smalltalk.

Left
This controls the level of the left input channel. The maximum value is 1 and the minimum is -1. The left channel of
the input is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right input channel. The maximum value is 1 and the minimum is -1. The right channel
of the input is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

77
LiveSpectralAnalysis
Live Capture & Tracking Category
This Sound should be used as the Spectrum parameter of an OscillatorBank. It analyzes the Input and produces
amplitude and frequency envelopes for controlling a bank of oscillators.

Input
The output of the LiveSpectralAnalysis is the spectrum of this Input.

LowestAnalyzedFreq
Check the highest frequency that will still lie below the lowest fundamental frequency of the Input. The lower this
frequency, the more time-smearing and delay, so pick the highest one that will still encompass the fundamental.
The frequency value you select will also determine how many bandpass filters are used in the analysis and, therefore,
the number of tracks or partials generated by the analysis. The lower the frequency, the more partials that are
generated:
1 F: 512
2 F: 256
3 F: 128
4 F: 64
5 F: 32
If you use this LiveSpectralAnalysis to control an OscillatorBank, this is the maximum number of oscillators that you
should specify in the OscillatorBank (you can specify fewer of them, but specifying more of them will not result in any
additional partials).

AmpScale
This is the overall amplitude level for all the partials.

FreqScale
This scales the frequency of all the oscillators without affecting the timing or duration of the amplitude envelopes.
There is no limit on the range, so to control it continuously use:
!Freq * 10
Or to control it from a MIDI keyboard use:
!KeyNumber nn hz / 60 nn hz

Response
This is the time response of the filters. Experiment to find the best time response that does not add distortion to the
sound. This specifies the bandwidth of the bandpass filters used in the analysis: "BestFreq" is the narrowest
bandwidth, "BestTime" is the widest bandwidth, and the others are intermediate bandwidths.

Harmonic
Some kinds of live morphs work better with Harmonic checked, but you should experiment with it both checked and
unchecked. It is a little trickier to do the harmonic analysis, so you should avoid checking this box except in situations
where it is required.
Once you check this box, you must also set several other parameters: LowFreq, HighFreq, InitFreq,
TrackedHarmonic, UnpitchedThreshold.

78
UnpitchedOnly
Set this value to 1, and adjust UnpitchedThreshold if you would like to hear the unpitched parts of the sound only
(transients, clicks, consonants, noise, etc). It requires that you have Harmonic checked.

UnpitchedThreshold
Set UnpitchedOnly to 1, and adjust this value if you would like to hear only the unpitched parts of the Input (clicks,
consonants, transients, noise). This requires that you have Harmonic checked.

TrackedHarmonic
Only required if you have Harmonic set. A pitch-follower attempts to track whichever harmonic you indicate in this
field. Usually it is 1 for the fundamental, but if a higher harmonic is stronger, it may be easier to track harmonic 2, 3 or
higher. The harmonic’s frequency must lie between LowFreq and HighFreq.

LowFreq
Only required if you have Harmonic checked. This is the lowest frequency you expect to see in the tracked harmonic.

HighFreq
Required only when you have Harmonic checked. This is the highest frequency you expect to encounter in the
tracked harmonic.

InitFreq
Required only if Harmonic is checked. This is an estimate of the initial frequency of the tracked harmonic.

FundamentalOnly
This only applies when Harmonic is checked. Set this parameter to 1 if you would like to listen to the estimated
fundamental frequency. It can help you judge whether adjusting LowFreq or HighFreq might result in a better
estimate. To switch between hearing the fundamental only and all harmonics, use an EventValue like !sw01 so you
can switch back and forth using a VCS check box or button.

Stretch
The amount that the partials are stretched from strictly harmonic frequencies. Normally use zero; use positive values
for analyzing stretched strings, for example.
On the Capybara, this parameter is ignored.

79
LowShelvingFilter
Filters Category
Boost or cut the spectrum below the specified cutoff frequency.

Input
This is the Sound to be filtered.

CutoffFreq
Frequencies below this will be boosted or cut by the specified amount.

BoostOrCut
Indicate the amount of boost or cut in units of dB. Negative values indicate a cut, positive values a boost.

Scale
Attenuator on the input.

80
Matrix4
Surround & Multichannel Category
This Sound is a four-input four-output matrix mixer. The four input Sounds are routed and mixed to the four output
channels of the signal processor.
This Sound only works properly as the rightmost Sound in the signal flow diagram.

In1
One of the four input Sounds.

In2
One of the four input Sounds.

In3
One of the four input Sounds.

In4
One of the four input Sounds.

InsToOut1
This parameter is a list of four mixing levels. These levels are used to mix the four inputs into an output for channel 1.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut2
This parameter is a list of four mixing levels. These levels are used to mix the four inputs into an output for channel 2.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut3
This parameter is a list of four mixing levels. These levels are used to mix the four inputs into an output for channel 3.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut4
This parameter is a list of four mixing levels. These levels are used to mix the four inputs into an output for channel 4.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

81
Matrix8
Surround & Multichannel Category
This Sound is a eight-input eight-output matrix mixer. The eight input Sounds are routed and mixed to the eight output
channels of the signal processor.
This Sound only works properly as the rightmost Sound in the signal flow diagram.

In1
One of the eight input Sounds.

In2
One of the eight input Sounds.

In3
One of the eight input Sounds.

In4
One of the eight input Sounds.

In5
One of the eight input Sounds.

In6
One of the eight input Sounds.

In7
One of the eight input Sounds.

In8
One of the eight input Sounds.

InsToOut1
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
1.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut2
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
2.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut3
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
3.

82
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut4
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
4.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut5
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
5.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut6
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
6.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut7
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
7.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

InsToOut8
This parameter is a list of eight mixing levels. These levels are used to mix the eight inputs into an output for channel
8.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

83
MemoryWriter
Live Capture & Tracking Category
When Trigger becomes positive, records the Input into the wavetable memory of the signal processor for the length of
time specified in CaptureDuration.
Any Sounds that read wavetables can be used to play back this recording (for example, FunctionGenerator, Sample,
and others).

Input
The output of this Sound is recorded into the wavetable memory of the signal processor.

CaptureDuration
The length of time to record the Input. Enter 0 s if you want to record Input for its full duration.

Global
Click here to record the Input into the wavetable memory on all expansion cards (otherwise, it will be recorded only
into the memory of the expansion card on which the MemoryWriter happens to get scheduled, and Kyma will be
forced to schedule the playback Sound on that same card. If you make the recording global, it is much easier for
Kyma to schedule the playback Sounds, because it can schedule them on any cards, knowing that the recording is
available in the memory of all the cards.)

Cyclic
When Cyclic is selected, the MemoryWriter does a "looping" recording. In other words, it records for the specified
CaptureDuration; then, if Trigger is still positive, it wraps around to the beginning of the recording and continues
recording the Input, overwriting what it had previously recorded there.

RecordingName
Enter a name for the sample that you are recording into the wavetable memory. Use this same name in the playback
Sounds, so they can find the sample in the wavetable memory. Any Sound that reads from the wavetable memory
can also read the sample that you are writing into the memory with MemoryWriter. Sounds like Sample and
FunctionGenerator read arbitarily long tables, whereas Sounds like Oscillator will use only the first 4096 entries of the
named wavetable (only the first 4096 sample points).

Silent
Click here if you would like to record the Input silently, without also monitoring it at the same time.

Trigger
When the Trigger becomes nonzero, the recording is triggered. You can trigger several events over the course of the
total Duration of this program as long as the value of Trigger returns to zero before the next trigger. Some example
values for Trigger are:
1 (plays once with no retriggering)
0 (the sound is silent, never triggered)
!KeyDown (trigger on MIDI key down)
!F1 (trigger when MIDI switch > 0)
You can also paste another signal into this field, and events will be triggered every time that signal changes from zero
to a nonzero value. (See the manual for a complete description of hot parameters, EventValues, EventSources, and

84
Map files).

85
MIDIFileEcho
MIDI Out Category
This Sound reads up all MIDI events on the specified range of channels from the designated file and then echoes
them to the MIDI output.
It does not output MIDI within Kyma but copies the MIDI file directly to the DSP MIDI output.

LowChannel
The lowest MIDI channel to echo.

HighChannel
Highest MIDI channel to echo.

FileName
A MIDI file

86
MIDIMapper
MIDI In Category
Defines its Input as a MIDI voice of the specified polyphony that takes its input from the specified MIDI input channel
within the given range of pitches either in real time or from a MIDI file. Left and Right are attenuators on the left and
right channels of the audio output of this Sound.
A local map supplied in the Map field overrides the global MIDI map for any Event Values in its Input. If you don’t
need to override the global map, use MIDIVoice instead.

Input
Input (including all of its inputs) is the Sound associated with this MIDI voice. If any of Input’s parameters are Event
Values, they will be mapped to Event Sources by the Map parameter (which overrides the currently select global map
but only for Input)

Map
Enter any mappings from Event Values to Event Sources that should be *different* in Input (and its inputs) than they
are in the currently selected global map. If an Event Value is not defined here in the local map, Kyma will use the
global map to determine its Event Source.
The syntax for a mapping is:
!EventValueName is: ‘EventSourceName

Left
This controls the level of the left input channel. The maximum value is 1 and the minimum is -1. The left channel of
the input is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right input channel. The maximum value is 1 and the minimum is -1. The right channel
of the input is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Channel
The MIDIMapper only pays attention to this incoming MIDI channel (or MIDI events on this channel of the MIDI file).

87
Set Channel to 0 to use whatever channel is specified in the global map.

Source
Choose between live MIDI input, reading from a MIDI file, or receiving MIDI events specified in the Script field.

MidiFile
Read the MIDI event stream from this file if MIDI File is selected as the Source. Use the Browse button to bring up a
standard file list and select the filename from the list.

Polyphony
Number of simultaneous MIDI note events possible on this voice. For example, if you specify a Polyphony value of 4,
Kyma makes 4 copies of the Input Sound, so any one of them can be triggered at any time and all four can be
sounding at the same time. The higher the value of Polyphony, the more computation time is required per sample
tick.

LowPitch
The lowest MIDI pitch that this voice responds to. Be sure to include units of pitch or frequency with the value. (For
this particular Sound, if you specify this value as a frequency, Kyma will round to the nearest equal-tempered MIDI
notenumber).
This allows you to map different regions of the MIDI note range to different voices and to define keyboard splits.

HighPitch
The highest MIDI pitch that this voice responds to. Be sure to include units of pitch or frequency with the value. (For
this particular Sound, if you specify this value as a frequency, Kyma will round to the nearest equal-tempered MIDI
notenumber).
This allows you to map different regions of the MIDI note range to different voices and to define keyboard splits.

Script
When Source is set to Script, this program sends MIDI events to the Input (just as if these events were being read
from a MIDI file). See the manual for more information on algorithmically generating and manipulating MIDI events.
To specify a MIDI event, use:
self keyDownAt: <aTime> duration: <aDur> frequency: <aFreq> velocity: <aVel>.
Be sure to include units on the start time, duration, and frequency values, and specify velocity within a range of 0 to 1.
Frequency can be any value specified in hz or nn; you are not limited to the pitches from the 12-tone equal tempered
scale. All arguments must be real values (as opposed to EventValues).
As a shortcut, you can drop any of the tags, for example, the following are all valid:
self keyDownAt: 0 s.
self keyDownAt: 3 s duration: 10 beats.
self keyDownAt: 0 beats duration: 10 beats frequency: 4 c.
self keyDownAt: 5 beats duration: 0.25 beats frequency: 4 c + 0.5 nn velocity: 0.75.
This field is actually a Smalltalk program, so you can use Smalltalk expressions or control structures to generate
these events algorithmically, for example:
1 to: 12 do: [ :i |
self keyDownAt: (i - 1) beats duration: 0.25 beats frequency: 4 c + i nn velocity: (i / 12.0)].
or:
|rt|
r := Random newForKymaWithSeed: 66508.
t := 0.
100 timesRepeat: [

88
t := t + r next.
self keyDownAt: t s duration: 0.25 beats frequency: (r next * 1000 + 60) hz velocity: r next].
You can also create sequences and mixes of "notes" and "rests" or collections of MIDI events, each associated with
its own time tag.
To create a rest object, use:
Rest durationInBeats:
To create a note, use any of the following creation messages:
Note durationInBeats:
Note durationInBeats:frequency:
Note durationInBeats:frequency:velocity:
Note durationInBeats:velocity: frequency:
Note durationInBeats: frequency:durationInBeats:velocity:
To create a sequence of events (where an event is a Note, a Rest, an EventSequence, an EventMix, or a
TimedEventCollection) use:
EventSequence events: <anArrayOfEvents>.
To create a mix of events which all start at the same time (where an event is a Note, a Rest, an EventSequence, an
EventMix, or a TimedEventCollection) use:
EventMix events: <anArrayOfEvents>.
To create a collection of events, each of which has a starting time associated with it (where an event is a Note, a
Rest, an EventSequence, an EventMix, or a TimedEventCollection, and the starting time is specified in beats) use:
TimedEventCollection startingBeats: <anArrayOfBeatsWithNoUnits> events: <anArrayOfEvents>.
To play a Note, Rest, EventSequence or EventMix, use:
<anEvent> playOnVoice:onBeat:bpm:
<anEvent> playOnVoice:
<anEvent> playOnVoice:bpm:
<anEvent> playOnVoice:onBeat:
Transformations that can be applied to Notes, Rests, EventSequences, EventMixes or TimedEventCollections
include:
dim: <aDurationScaleFactor>
trsp: <anIntervalOfTranspositionInHalfSteps>
dbl: <anIntervalOfDoublingInHalfSteps>
retrograde
Transformations that can be applied to EventSequences, EventMixes or TimedEventCollections include:
randomOrder
randomizeTimesUsing: <aRandomStream>
pickingEventsUsing: <aRandomStream>
totalBeats: <durInBeats>
quantizeTo: <shortestDur>
maxSpacing: <longestDur>
For examples using these creation and manipulation methods, see MIDI scripts in the manual.

Shared
Check this box if you want MIDI note events on this Sound’s MIDI channel and in this Sound’s pitch range to be
shared with other Sounds with the same channel and range.

89
MIDIOutputController
MIDI Out Category
This Sound outputs its Value parameter to the MIDI output on the specified channel as the specified continuous
controller.

Channel
MIDI output channel.

ControllerNumber
This is the MIDI continuous controller number.

Value
This is the value that will be output as the controller data. Paste a Sound in here to turn a Sound into a MIDI
controller output.

90
MIDIOutputEvent
MIDI Out Category
When Gate becomes positive, a note-on message with the current values of Frequency and Amplitude is sent as the
note number and velocity on the given MIDI channel. When Gate returns to zero, a note-off message will be sent.

Frequency
There is no help available for this parameter.

Amplitude
There is no help available for this parameter.

Channel
There is no help available for this parameter.

Gate
There is no help available for this parameter.

91
MIDIOutputEventInBytes
MIDI Out Category
This Sounds sends an uninterpreted sequence of bytes to the MIDI output. You can use it to send arbitrary MIDI
events.

Trigger
When the Trigger becomes positive, the sequence of bytes will be sent to the MIDI output.

Bytes
Enter the MIDI message as a sequence of numbers separated by spaces. If you want to specify them in hex,
precede the number with 16r, for example:
16rFF
In this field, you must enclose expressions within curly braces, for example: {(?velocity * 0.1) rounded}

92
MIDIVoice
MIDI In Category
Defines its Input as a MIDI voice of the specified polyphony that takes its input from the specified MIDI input channel
within the given range of pitches either in real time or from a MIDI file. Left and Right are attenuators on the left and
right channels of the audio output of this Sound.

Input
Input (including all of its inputs) is the Sound associated with this MIDI voice. If any of Input’s parameters are Event
Values, they will be mapped to Event Sources by the Map parameter (which overrides the currently select global map
but only for Input)

Left
This controls the level of the left input channel. The maximum value is 1 and the minimum is -1. The left channel of
the input is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right input channel. The maximum value is 1 and the minimum is -1. The right channel
of the input is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Channel
The MIDIVoice only pays attention to this incoming MIDI channel (or MIDI events on this channel of the MIDI file).
Set Channel to 0 to use the channel specified as the Default MIDI Input Channel in DSP>Configure MIDI...

Source
Choose between live MIDI input, reading from a MIDI file, or receiving events specified in the Script field.

MidiFile
Read the MIDI event stream from this file if MIDI File is selected as the Source. Use the Browse button to bring up a
standard file list and select the filename from the list.

93
Polyphony
Number of simultaneous MIDI note events possible on this voice. For example, if you specify a Polyphony value of 4,
Kyma makes 4 copies of the Input Sound, so any one of them can be triggered at any time and all four can be
sounding at the same time. The higher the value of Polyphony, the more computation time is required per sample
tick.

LowPitch
The lowest MIDI pitch that this voice responds to. Be sure to include units of pitch or frequency with the value. (For
this particular Sound, if you specify this value as a frequency, Kyma will round to the nearest equal-tempered MIDI
notenumber).
This allows you to map different regions of the MIDI note range to different voices and to define keyboard splits.

HighPitch
The highest MIDI pitch that this voice responds to. Be sure to include units of pitch or frequency with the value. (For
this particular Sound, if you specify this value as a frequency, Kyma will round to the nearest equal-tempered MIDI
notenumber).
This allows you to map different regions of the MIDI note range to different voices and to define keyboard splits.

Script
When Source is set to Script, this program sends MIDI events to the Input (just as if these events were being read
from a MIDI file). See the manual for more information on algorithmically generating and manipulating MIDI events.
To specify a MIDI event, use:
self keyDownAt: <aTime> duration: <aDur> frequency: <aFreq> velocity: <aVel>.
Be sure to include units on the start time, duration, and frequency values, and specify velocity within a range of 0 to 1.
Frequency can be any value specified in hz or nn; you are not limited to the pitches from the 12-tone equal tempered
scale. All arguments must be real values (as opposed to EventValues).
As a shortcut, you can drop any of the tags, for example, the following are all valid:
self keyDownAt: 0 s.
self keyDownAt: 3 s duration: 10 beats.
self keyDownAt: 0 beats duration: 10 beats frequency: 4 c.
self keyDownAt: 5 beats duration: 0.25 beats frequency: 4 c + 0.5 nn velocity: 0.75.
This field is actually a Smalltalk program, so you can use Smalltalk expressions or control structures to generate
these events algorithmically, for example:
1 to: 12 do: [ :i |
self keyDownAt: (i - 1) beats duration: 0.25 beats frequency: 4 c + i nn velocity: (i / 12.0)].
or:
|rt|
r := Random newForKymaWithSeed: 66508.
t := 0.
100 timesRepeat: [
t := t + r next.
self keyDownAt: t s duration: 0.25 beats frequency: (r next * 1000 + 60) hz velocity: r next].
You can also create sequences and mixes of "notes" and "rests" or collections of MIDI events, each associated with
its own time tag.
To create a rest object, use:
Rest durationInBeats:
To create a note, use any of the following creation messages:
Note durationInBeats:

94
Note durationInBeats:frequency:
Note durationInBeats:frequency:velocity:
Note durationInBeats:velocity: frequency:
Note durationInBeats: frequency:durationInBeats:velocity:
To create a sequence of events (where an event is a Note, a Rest, an EventSequence, an EventMix, or a
TimedEventCollection) use:
EventSequence events: <anArrayOfEvents>.
To create a mix of events which all start at the same time (where an event is a Note, a Rest, an EventSequence, an
EventMix, or a TimedEventCollection) use:
EventMix events: <anArrayOfEvents>.
To create a collection of events, each of which has a starting time associated with it (where an event is a Note, a
Rest, an EventSequence, an EventMix, or a TimedEventCollection, and the starting time is specified in beats) use:
TimedEventCollection startingBeats: <anArrayOfBeatsWithNoUnits> events: <anArrayOfEvents>.
To play a Note, Rest, EventSequence or EventMix, use:
<anEvent> playOnVoice:onBeat:bpm:
<anEvent> playOnVoice:
<anEvent> playOnVoice:bpm:
<anEvent> playOnVoice:onBeat:
Transformations that can be applied to Notes, Rests, EventSequences, EventMixes or TimedEventCollections
include:
dim: <aDurationScaleFactor>
trsp: <anIntervalOfTranspositionInHalfSteps>
dbl: <anIntervalOfDoublingInHalfSteps>
retrograde
Transformations that can be applied to EventSequences, EventMixes or TimedEventCollections include:
randomOrder
randomizeTimesUsing: <aRandomStream>
pickingEventsUsing: <aRandomStream>
totalBeats: <durInBeats>
quantizeTo: <shortestDur>
maxSpacing: <longestDur>
For examples using these creation and manipulation methods, see MIDI scripts in the manual.

Shared
Check this box if you want MIDI note events on this Sound’s MIDI channel and in this Sound’s pitch range to be
shared with other Sounds with the same channel and range.

95
MidSideEncoderDecoder
Stereo Category
Based on a Sound by Jesus Gestoso (who also designed the icon), the MidSideEncoderDecoder encodes a stereo
input into two parts: Mid (the part that appears in the middle of the stereo image because it is the same in the left and
right speakers) and Side (the part that appears on the sides of the stereo image because it differs between left and
right speakers). You can apply processing to the Side, the Mid, or both (with independent controls on Mid and Side
processing) prior to recombining Mid and Side to form the left and right channels of a standard stereo signal.
If you have MS-encoded recordings (or an MS-encoding microphone) you can use this Sound to process and decode
in real time by checking the SkipEncoding box.

ReplicatedSound
The ReplicatedSound is usually a stereo source followed by some kind of processing. If you Ctrl+drag the stereo
source into the SharedSounds field, then a single stereo source is MS-encoded, the Mid and Side signals are sent
through the processing (with independent controls on Mid and Side processing), and the processed signals are
recombined to form the left and right channels of a stereo signal.

SharedSounds
The SharedSounds is the stereo Sound (or Sounds) that will be MS-encoded. Typically it is the Sound just to the left
of the processing module (or chain of processing modules).
To ensure that this Sound is shared, hold down the Option (or Control) key as you drag the source Sound from the
signal flow diagram into the SharedSounds field. That way it will be truly shared (and not just copied) and if you make
changes to it in the future, it will be automatically updated in both places.

DoNotChange
This is a list of hot values present in the ReplicatedSound that should NOT be duplicated and uniquely labelled for
independent Mid and Side controls. In other words, these are the hot values that are the same for both. (Any hot
values in the SharedSounds will not be duplicated, so it is not necessary to add them to this list).

Prefix
Whatever you type here within single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or
green variable name in the copies. If the prefix includes a number and IncrementPrefix is checked, this number is
incremented in each copy. Uncheck IncrementPrefix if you want the same prefix added to all controls and green
variables. To append a different prefix to each copy, enter one prefix for each copy with a space separating each
prefix from the next (for example, ’Mid’ ’Side’). Leave this field blank if you do not want to add any prefixes. If there
are fewer than 2 prefixes, the last prefix will be repeated (and, if it includes a numeral and you have checked the
IncrementPrefix box, each prefix will include a unique number).

Suffix
Whatever you type here within single quotes (for example ’-1’) will be tacked onto the end of each hot value or green
variable name in the copies. If the suffix includes a number and IncrementSuffix is checked, this number is
incremented in each copy. Uncheck IncrementSuffix if you want the same suffix added to all controls and green
variables. To append a different suffix to each copy, enter one suffix for each copy with a space separating each
suffix from the next (for example, ’-Mid’ ’-Side’). Leave this field blank if you do not want to add any suffixes. If there
are fewer than 2 suffixes, the last suffix will be repeated (and, if it includes a numeral and you have checked the
IncrementSuffix box, each suffix will include a unique number).

96
IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

MidBypass
Check this box to leave the Mid (the part of the signal that is the same in both channels) unprocessed.

SideBypass
Check this box to leave the Side (the part of the signal that is different between the left and right channels)
unprocessed.

SkipEncoding
If you have a recording or a microphone signal that is already MidSide (MS)-encoded, you can skip the encoding step
by checking this box.

Mid
(-1,1) control on the amplitude of the Mid (the part of the signal that appears in the middle of the stereo image
because it is the same in the right and left channels).

Side
(-1,1) control on the amplitude of the Side (the part of the signal that appears on the sides of the stereo image
because it is the different in the right and left channels). You can control the apparent stereo spread of a signal by
setting Mid to 1 and making Side a hot value like !Spread.

97
Mixer
Mixing Category
Adds all of its Inputs together. Mixes the outputs of all the Sounds in the Inputs field.

Inputs
Inputs are all added together (mixed) so they will be heard simultaneously.

Left
This controls the level of the left input channel. The maximum value is 1 and the minimum is -1. The left channel of
the input is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right input channel. The maximum value is 1 and the minimum is -1. The right channel
of the input is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

98
ModalFilter
Filters Category
This Sound is a collection of modes (implemented as parallel second order filter sections) with optional filtering and/or
distortion in the feedback loop. You can use ModalFilter to model objects like rooms, strings, air columns,
membranes, pieces of metal or other objects for which you can obtain data on the mode frequencies, amplitudes and
bandwidths.
Internally the signal flow is:
Additive:
[((Fdbk * FdbkAmp) * PreShaping -> Waveshaper) * PostShaping + (Input * InputLevel)] --> modes
Multiplicative:
sum = (Fdbk * FdbkAmp) + (Input * InputLevel)
[(sum * PreShaping -> Waveshaper) * PostShaping * sum] --> modes
(modes * Envelope) --> output
modes --> FdbkFilter --> Fdbk
You can use subparts of this algorithm, for example, the modes without feedback or the feedback without filtering or
distortion, or the feedback without the mode filters. (See the individual parameter help messages for the values that
turn off various sections).

Input
Excitation signal for the modes. For example, this could be live audio input, a click from a FunctionGenerator, Noise,
a Chopper, etc.

Envelope
Amplitude scale on the output of the modes.

ModeAmps
An array of amplitudes (-1,1) indicating the relative strength of each mode.
To bypass the mode filters and use only the filtered feedback with distortion, set this field to 1. (Set ModeFreqs and
ModeBWs to 0)

ModeFreqs
An array of frequencies (0, halfSampleRate) indicating the center frequency or cutoff frequency of each mode.
To bypass the mode filters and use only the filtered feedback with distortion, set to 0. (Set ModeAmps to 1 and
ModeBWs to 0)

ModeBWs
An array of positive values indicating the proportion of each frequency to use as the bandwidth of each mode. For
example, if the BW of the first mode is 0.5 and the frequency of the first mode is 100 hz, the bandwidth of the first
mode will be 50 hz.
To bypass the mode filters and use only the filtered feedback with distortion, set this field to 0. (Set ModeAmps to 1
and ModeFreqs to 0)

99
ModeFilter
Select a type for the modal filters: bandpass, highpass, lowpass, or allpass.

BWNormalize
Check this box to automatically increase the amplitude as the bandwidths of the modes is decreased. This can be
useful for maintaining roughly equal amplitude output for any bandwidth.

FdbkAmp
Amplitude scale on the signal that is fed back (and optionally filtered and distorted).
To remove the feedback, set this parameter to 0.

FdbkFreq
Center frequency or cutoff frequency for the filter in the feedback path.
To bypass filtering in the feedback path, set this parameter to 0. (Set FdbkBW to 0)

FdbkBW
Bandwidth of the filter in the feedback path. Narrow bandwidths tend to ring or resonate.
To bypass filtering in the feedback path, set this parameter to 0. (Set FdbkFreq to 0.)

FdbkFilter
Select a filter type for the filter in the feedback path: lowpass, bandpass, allpass, or highpass.

InputLevel
Amplitude scale factor on the input signal. Range is (-1,1).

PreShaping
Amplitude scale factor on the signal before it goes through the waveshaper.
To bypass distortion:
Multiplicative: Set PreShape to 0. Set ShapingFunction to Rectangular. Set PostShape to 1.
Additive: Set PreShape to 1. Set ShapingFunction to FullRamp. Set PostShape to 1.

PostShaping
Amplitude scale on the output of the waveshaper before it is added to or multiplied by the input and feedback.
To bypass distortion:
Multiplicative: Set PreShape to 0. Set ShapingFunction to Rectangular. Set PostShape to 1.
Additive: Set PreShape to 1. Set ShapingFunction to FullRamp. Set PostShape to 1.

Waveshaper
Chooses the type of distortion: additive or multiplicative.
Additive distortion mixes the distorted feedback signal with the input.
Multiplicative distortion multiplies the distorted input and feedback signal by the input and feedback signal.

ShapingFunction
Select an input-output characteristic (shaping function) for the optional waveshaping of the feedback.
To bypass distortion:
Multiplicative: Set PreShape to 0. Set ShapingFunction to Rectangular. Set PostShape to 1.

100
Additive: Set PreShape to 1. Set ShapingFunction to FullRamp. Set PostShape to 1.

FromMemoryWriter
Use this option if you want to change the shaping function while the Sound is playing. Check this box if you are using
a MemoryWriter scheduled in parallel with this Sound to write into the memory used as the waveshaping function.

MaximumUpdateRate
Check this box only if some of the filter parameters are controlled by a an EventValue being generated by a
SoundToGlobalController. If this is not the case, then Kyma can schedule this Sound more efficiently if you leave the
box unchecked.

101
MonoToMultichannel
Surround & Multichannel Category
Converts a mono processing chain into up to eight independent chains with independent controls (labelled CH1
through CH8), corresponding to the eight output channels. Any controls that should be shared among all channels
should be added to the DoNotChange list. The SharedInput is the "dry" signal that is to be shared among all
channels. It can be any mono Sound (including a long chain), but it should be the Sound you think of as the Source.
Hot values within the SharedInput are shared among all channels (not unique to each channel).

ReplicatedSound
This is the Sound (or portion of a Sound) that is replicated in each of the channels. Think of the chain from the
sharedSound to the output as being replicated and assigned to an output channel. Think of the sharedSound as a
single source being fed through each of the replicated processing chains (each of which has independent controls).

SharedSounds
These Sounds are not replicated but are shared among all the replicated copies. Use option+Drag (or Ctrl+Drag) to
drag a Sound or Sounds from the signal flow graph into this field so it is exactly the *same* Sound(s) as appear in the
ReplicatedSound’s signal flow graph.

DoNotChange
This is a list of hot values that should NOT be duplicated and uniquely named for each independent channel. In other
words, these are the hot values that are the same in all channels.

Ch1
Check this box to duplicate the processing in the Input on this channel.

Ch2
Check this box to duplicate the processing in the Input on this channel.

Ch3
Check this box to duplicate the processing in the Input on this channel.

Ch4
Check this box to duplicate the processing in the Input on this channel.

Ch5
Check this box to duplicate the processing in the Input on this channel.

Ch6
Check this box to duplicate the processing in the Input on this channel.

Ch7
Check this box to duplicate the processing in the Input on this channel.

Ch8

102
Check this box to duplicate the processing in the Input on this channel.

Prefix
Whatever you type here within single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or
green variable name in the copies. If the prefix includes a number and IncrementPrefix is checked, this number is
incremented in each copy. Uncheck IncrementPrefix if you want the same prefix added to all controls and green
variables. To append a different prefix to each copy, enter one prefix for each copy with a space separating each
prefix from the next (for example, ’hi’ ’mid’ ’lo’). Leave this field blank if you do not want to add any prefixes. If there
are fewer prefixes than copies created by the Replicator, the last prefix will be repeated (and, if it includes a numeral
and you have checked the IncrementPrefix box, each prefix will include a unique number).

Suffix
Whatever you type here within single quotes (for example ’-1’) will be tacked onto the end of each hot value or green
variable name in the copies. If a suffix includes a number and IncrementSuffix is checked, this number is
incremented in each copy. Uncheck IncrementSuffix if you want the same suffix added to all controls and green
variables. To add a different suffix to the hot values of each copy, enter a suffix for each Sound copy with a space
separating one from the next (for example, ’-hi’ ’-mid’ ’-lo_1’). Leave this field blank if you do not want to add any
suffixes. If there are fewer IncrementSuffix than copies created by the Replicator, the last IncrementSuffix will be
repeated (and, if it includes a numeral and you have checked the IncrementSuffix box, each suffix will include a
unique number).

IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

103
Monotonizer
Frequency & Time Scaling Category
Removes pitch changes from the input and uses the specified Frequency instead.

Input
Any frequency changes in the Input will be flattened out or removed by this module.

Frequency
This is the new frequency of the monotonized input.

MinInputPitch
This is the lowest frequency you expect in the input. It must include units: hz for a frequency or nn for a notenumber.

MaxInputPitch
This is the highest frequency you expect in the input. It must include units: hz for a frequency or nn for a notenumber.

104
Morph1dGA
Abstract Morphing Category
Morph1d takes the list of file names in the Timbres parameter field and uses the Morph control to create a smooth
timbral transition from one file to the next. The files are synthesized using GA (group additive) synthesis.

Frequency
To use the base pitches stored in the file headers, use ’default’. Other frequencies can be specified in units of pitch
or frequency. Different frequencies are obtained by changing the size of the increment through the recorded sample.
The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is 1, the
original frequency envelope variations around the nominal pitch are added back in. When the value is larger than 1,
the original frequency deviations are magnified, causing wider pitch variations than were in the original file.

Level
Amplitude scale on the output.

Timbres
A list of GA (.gaf) files. Each filename should be in single quotes.

Scales
A list of scale factors, each corresponding to one of the timbres. Use this for normalizing the amplitudes of the
timbres, for example in the case where one of them is much louder than the others.

Morph
As morph changes, the timbre selection morphs smoothly from one timbre to the next in the same order in which they
are listed in Timbres.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately

105
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control file position n terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the file,
for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the file,
for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original

106
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
The files in the Timbres field can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma
assumes there are other files in the same folder having the same name but with a different channel extension. If a file
with that channel extension is not found, that channel will be silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard control over triggering, sustaining, looping

AttackTime
This is the attack duration of an overall linear amplitude envelope applied to the output of this Sound. To use the
natural attack times of the files, set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

AutoLabel
To see the names of the files displayed next to the Morph control, check AutoLabel.

107
Morph1dPsi
Abstract Morphing Category
Morph1d takes the list of file names in the Timbres parameter field and uses the Morph control to create a smooth
timbral transition from one file to the next. The files are synthesized using Psi resynthesis.

Frequency
To use the base pitches stored in the file headers, use ’default’. Other frequencies can be specified in units of pitch
or frequency. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in
the original file.

Level
Amplitude scale on the output.

Timbres
A list of Psi files (.psi) files. Each filename should be within single quotes. For split stereo or split multichannel, list
only one channel for each file name (the other channel(s) will be detected as long as they are in the same folder and
are based on the same file name with a different channel extension). See the Format parameter for additional help.

Scales
A list of scale factors, each corresponding to one of the timbres. Use this for normalizing the amplitudes of the
timbres, for example, in the case where one of them is much louder than the others.

Morph
As morph changes, the timbre selection morphs smoothly from one timbre to the next in the same order in which they
are listed in Timbres.

ScaleFormant
For no change in the formant, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the formant, for
example:
!ScaleFormant * 1.5 + 0.5.

108
NB: FormantScale should always be larger than 0. A FormantScale of 0 results in a silent output and cannot be
restarted without replaying the Sound (Ctrl+R).

LoopMode
LoopMode Result
------------------
None: No looping (use Gate to retrigger)
Live: Loop using live controls in LoopStart, LoopEnd, Start & End
TimeIndex: TimeIndex controls the play position
Markers: Loop according to markers saved in PsiFile

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfPsiFile’ psiFileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfPsiFile’ psiFileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the attack portion of the Psi
file, for example:
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

109
ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Psi files can be mono, split stereo, or split surround. For example, if you select Stereo, the PsiPlayer assumes there
are other files in the same folder as PsiFileName and that they have the same name but with a different channel
extension. If a corresponding file is not found, the result is silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the Psi file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the Psi
files, set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the Psi files, set this to an extremely long duration like 1 day.

TimeScaling
Check the TimeScaling box for higher quality time stretching. If you aren’t doing time-scaling, uncheck the box to
reduce the computation cost.

Cost
Cost corresponds to the maximum number of octaves between the base pitches of adjacent files (when Frequency is
set to default), or to the maximum number of octaves you want to shift any file from its original base pitch. Select the
maximum number of octaves pitch change (combined with the inverse of the FormantScale, for example if
FormantScale = 1/2, the Cost is inverse of that which is 2). The smaller the Cost, the more efficiently this Sound can
be scheduled on multiple processors (and the more polyphony you will be able to get).

AutoLabel
To see the names of the files displayed next to the Morph control, check AutoLabel.

110
Morph1dSampleCloud
Abstract Morphing Category
Morph1dSampleCloud takes the list of file names in the Timbres parameter field and uses the Morph control to create
a smooth timbral transition from one file to the next. The files are synthesized using granular synthesis.

Frequency
Frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Level
Amplitude scale on the output.

Timbres
A list of samples (.aif, .wav) files. Each filename should be in single quotes. For split stereo or split multichannel, list
only one channel for each file name (the other channel(s) will be detected as long as they are in the same folder and
are based on the same file name with a different channel extension).

Scales
A list of scale factors, each corresponding to one of the timbres. Use this for normalizing the amplitudes of the
timbres, for example in the case where one of them is much louder than the others.

Morph
As morph changes, the timbre selection morphs smoothly from one timbre to the next in the same order in which they
are listed in Timbres.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex

111
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control file position n terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.)
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the file,
for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the file,
for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
The files in the Timbres field can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma

112
assumes there are other files in the same folder having the same name but with a different channel extension. If a file
with that channel extension is not found, that channel will be silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard control over triggering, sustaining, looping

AttackTime
This is the attack duration of an overall linear amplitude envelope applied to the output of this Sound. To use the
natural attack times of the files, set this to 0 s.

ReleaseTime
This is the release duration of an overall linear amplitude envelope applied to the output of this Sound. To use the
natural release times of the files, set this to an extremely long duration like 1 day. Otherwise, to avoid clicks during
voice-stealing set this to the desired decay time.

Cost
Cost determines the maximum number of simultaneous grains, where 4 is the maximum number of grains possible
and smaller numbers generate fewer grains (but use less processing time). For more polyphony, set the cost lower;
for more density, set the cost higher.

GrainEnv
This is the shape of the amplitude envelope on each grain. The wavetables in the Windows category make the
classic, smooth grain envelopes. Some of the shapes in Impulse Responses also give interesting results.

Density
Small Density values result in a sparse texture; large Density values generate a dense texture. This controls the
average number of new grains starting up at any given point in time. For maximum density, set the Cost parameter to
4.

GrainDur
This is the duration of each individual grain.

GrainDurJitter
Adds some amount of random jitter to the grain durations. When set to 1, the durations vary randomly from 0 to twice
the specified duration. When this is set to 0, all grains will have a duration of GrainDur. In other words, the actual
grain duration for each grain is:
GrainDur + (<rand> * GrainDurJitter * GrainDur)
where <rand> is a random number between -1 and 1.

FreqJitter

113
Amount of frequency deviation around the value in the Frequency field. Set FreqJitter to 0 for no frequency jitter. The
actual frequency of a new grain is (Frequency * (1 + (FreqJitter * random(-1,1))), so the range of frequencies is (0,
Frequency * 2).

Seed
This should be a number between 0 and 1. The seed provides a starting point for the random number generator, so
each different seed results in a different (but repeatable) sequence of random numbers. Use a negative number if
you want each file to have its own seed (and a positive number for all files to share the same seed).

TimeIndexJitter
TimeIndex is a time point in the Samples, and TimeIndexJitter is an amount of random deviation forward or backward
in time from the one point specified TimeIndex. A TimeIndexJitter of zero means that all grains will be chosen from
the single point specified in TimeIndex; if TimeIndex = 0 and TimeIndexJitter = 1, then grains may be chosen at
random from any time point in the entire sample. The start point of a grain is (TimeIndex + (TimeIndexJitter *
random(-1,1)) clipped to the range of (-1,1).

AutoLabel
To see the names of the files displayed next to the Morph control, check AutoLabel.

114
Morph1dSpectrum
Abstract Morphing Category
Morph1d takes the list of file names in the Timbres parameter field and uses the Morph control to create a smooth
spectral transition from one file to the next. The morphed spectra can be resynthesized by feeding the output of this
module into an OscillatorBank, CloudBank, FilterBank, or FormantBank. NB: The output of this module is a control
signal, not an audio signal, so it’s better not to listen to the output of this Sound directly.

Frequency
To use the base pitches stored in the file headers, use ’default’. Other frequencies can be specified in units of pitch
or frequency. Different frequencies are obtained by changing the size of the increment through the recorded sample.
The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is 1, the
original frequency envelope variations around the nominal pitch are added back in. When the value is larger than 1,
the original frequency deviations are magnified, causing wider pitch variations than were in the original file.

Level
Amplitude scale on the output.

Timbres
A list of spectrum (.spc) files. Each filename should be in single quotes.

Scales
A list of scale factors, each corresponding to one of the timbres. Use this for normalizing the amplitudes of the
timbres.

Morph
As morph changes, the timbre selection morphs from one timbre to the next in the same order in which they are listed
in Timbres.

ScaleFormant
If the Timbres are harmonic spectra, you can modify the formant. For no change in the formant, enter 1 or ’default’.
Otherwise, enter a fixed or hot value for scaling the formant, for example:
!ScaleFormant * 1.5 + 0.5.

115
LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack
If the analysis has added time-smearing to the attack, try setting ScaleAtkDur to 0 or a very small number.

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the file,
for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the file,
for example:

116
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
The files in the Timbres field can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma
assumes there are other files in the same folder having the same name but with a different channel extension. If a file
with that channel extension is not found, that channel will be silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of an overall linear amplitude envelope applied to the output of this Sound. To use the
natural attack times of the files, set this to 0 s.

ReleaseTime
This is the release duration of an overall linear amplitude envelope applied to the output of this Sound. To use the
natural release times of the files, set this to an extremely long duration like 1 day. Otherwise, to avoid clicks during
voice-stealing set this to the desired decay time.

Cost
Cost determines the number of partials used in resynthesizing the analyzed file.
Cost = 1 Partials = 128
Cost = 2 Partials = 256
Cost = 3 Partials = 512
Cost = 4 Partials = 1024

AutoLabel
To see the names of the files displayed next to the Morph control, check AutoLabel.

PreserveFormants
When checked, it tries to preserve the positions of the formants during pitch shifting. This uses more computational
resources so if Frequency is set to default (meaning you are not doing any pitch shifting), you can uncheck this box to
make this Sound more efficient.

117
Morph2dKeymappedGA
Abstract Morphing Category
A Morph2dKeymapped takes a folder of filenames, each with a different base pitch stored in its header, and uses the
current value of Frequency to select which of the files should be morphed with each other to produce the output. You
can specify up to 4 folders of files, each of which will be morphed according to the current value of Frequency. You
can, in addition, morph between the folders of files, using MorphX and MorphY. Imagine the folders positioned at the
corners of a square as:
Timbre01--------------------Timbre11
|
|
|
|
|
Timbre00--------------------Timbre10
MorphX controls the transition from left to right (Timbres00 & 01 to Timbres10 & 11).
MorphY controls the transition from low to high (Timbres00 & 10 to Timbres01 & 11).
The timbres are resynthesized using group additive (GA) synthesis.

Frequency
The current value of Frequency determines a morph between the files in each folder, according to the base pitch
stored in that files header. Frequency can be specified in units of pitch (nn) or frequency (hz). The following are all
ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in
the original file.

Level
Amplitude scale on the output.

Timbre00
Select a single .gaf file from a folder of files, each having a different base pitch. Imagine a square with Timbre00 at

118
lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high. .

Timbre01
Select a single .gaf file from a folder of files, each having a different base pitch. Imagine a square with Timbre00 at
lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high.

Timbre10
Select a single .gaf file from a folder of files, each having a different base pitch. Imagine a square with Timbre00 at
lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high. .

Timbre11
Select a single .gaf file from a folder of files, each having a different base pitch. Imagine a square with Timbre00 at
lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high. .

MorphX
Controls your position in the timbre square in the left to right direction, where 0 is at the far left, 1 is at the far right,
and 0.5 is in the middle.

MorphY
Controls your position in the timbre square in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5
is in the middle.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.

119
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the file,
for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the file,
for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Files can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma will match each file name
with another file from the same folder having same name but a different channel extension. If a corresponding file is
not found, that channel is silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

120
AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the files,
set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale00
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale01
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale10
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale11
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

121
Morph2dKeymappedPsi
Abstract Morphing Category
A Morph2dKeymapped takes a folder of filenames, each with a different base pitch stored in its header, and uses the
current value of Frequency to select which of the files should be morphed with each other to produce the output. You
can specify up to 4 folders of files, each of which will be morphed according to the current value of Frequency. You
can, in addition, morph between the folders of files, using MorphX and MorphY. Imagine the folders positioned at the
corners of a square as:
Timbre01--------------------Timbre11
|
|
|
|
|
Timbre00--------------------Timbre10
MorphX controls the transition from left to right (Timbres00 & 01 to Timbres10 & 11).
MorphY controls the transition from low to high (Timbres00 & 10 to Timbres01 & 11).
The timbres are resynthesized using Psi resynthesis.

Frequency
The current value of Frequency determines a morph between the files in each folder, according to the base pitch
stored in that files header. Frequency can be specified in units of pitch (nn) or frequency (hz). The following are all
ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in
the original file.

Level
Amplitude scale on the output.

Timbre00
Select a .psi file for Timbre00. Imagine a square with Timbre00 at lower left corner, Timbre10 at lower right, Timbre01

122
at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right within the square and
MorphY controls where you are from low to high.

Timbre01
Select a .psi file for Timbre00. Imagine a square with Timbre00 at lower left corner, Timbre10 at lower right, Timbre01
at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right within the square and
MorphY controls where you are from low to high.

Timbre10
Select a .psi file for Timbre00. Imagine a square with Timbre00 at lower left corner, Timbre10 at lower right, Timbre01
at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right within the square and
MorphY controls where you are from low to high.

Timbre11
Select a .psi file for Timbre00. Imagine a square with Timbre00 at lower left corner, Timbre10 at lower right, Timbre01
at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right within the square and
MorphY controls where you are from low to high.

MorphX
Controls your position in the timbre square in the left to right direction, where 0 is at the far left, 1 is at the far right,
and 0.5 is in the middle.

MorphY
Controls your position in the timbre square in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5
is in the middle.

ScaleFormant
For no change in the formant, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the formant, for
example:
!ScaleFormant * 1.5 + 0.5.
NB: FormantScale should always be larger than 0. A FormantScale of 0 results in a silent output and cannot be
restarted without replaying the Sound (Ctrl+R).

LoopMode
LoopMode Result
------------------
None: No looping (use Gate to retrigger)
Live: Loop using live controls in LoopStart, LoopEnd, Start & End
TimeIndex: TimeIndex controls the play position
Markers: Loop according to markers saved in PsiFiles

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfPsiFile’ fileDuration)

123
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfPsiFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the attack portion of the Psi
file, for example:
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Psi files can be mono, split stereo, or split surround. For example, if you select Stereo, the PsiPlayer assumes there
are other files in the same folder as PsiFileName and that they have the same name but with a different channel
extension. If a corresponding file is not found, the result is silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

124
Gate
Gate Result
----------------
1 Play the Psi file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the Psi
files, set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the Psi files, set this to an extremely long duration like 1 day.

Scale00
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale01
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale10
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale11
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Cost
The Cost determines the maximum number of octaves you can shift above the highest base pitch in each group of
files divided by the smallest FormantScale. For example, if the highest base pitch in a folder is 5 a and the maximum
pitch you are playing is 6 a, you could use a Cost of 1. If you also wanted to use FormantScale = 1/2, the Cost should
be 2 multiplied by 1). The smaller the Cost, the more efficiently this Sound can be scheduled and the more polyphony
you will be able to get. So it is worth experimenting and selecting the smallest Cost that does not produce artifacts at
the high end of your keyboard.

TimeScaling
Check the TimeScaling box for higher quality time stretching. If you aren’t doing time-scaling, uncheck the box to
reduce the computation cost.

125
Morph2dKeymappedSampleCloud
Abstract Morphing Category
A Morph2dKeymapped takes a folder of filenames, each with a different base pitch stored in its header, and uses the
current value of Frequency to select which of the files should be morphed with each other to produce the output. You
can specify up to 4 folders of files, each of which will be morphed according to the current value of Frequency. You
can, in addition, morph between the folders of files, using MorphX and MorphY. Imagine the folders positioned at the
corners of a square as:
Timbre01--------------------Timbre11
|
|
|
|
|
Timbre00--------------------Timbre10
MorphX controls the transition from left to right (Timbres00 & 01 to Timbres10 & 11).
MorphY controls the transition from low to high (Timbres00 & 10 to Timbres01 & 11).
The timbres are synthesized using granular synthesis.

Frequency
The current value of Frequency determines a morph between the files in each folder, according to the base pitch
stored in that files header. Frequency can be specified in units of pitch (nn) or frequency (hz). The following are all
ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Level
Amplitude scale on the output.

Timbre00
Select a samples file (.aif or .wav) for Timbre00. Imagine a square with Timbre00 at lower left corner, Timbre10 at
lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right
within the square and MorphY controls where you are from low to high.

Timbre01
Select a samples file (.aif or .wav) for Timbre01. Imagine a square with Timbre00 at lower left corner, Timbre10 at
lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right

126
within the square and MorphY controls where you are from low to high.

Timbre10
Select a samples file (.aif or .wav) for Timbre10. Imagine a square with Timbre00 at lower left corner, Timbre10 at
lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right
within the square and MorphY controls where you are from low to high.

Timbre11
Select a samples file (.aif or .wav) for Timbre11. Imagine a square with Timbre00 at lower left corner, Timbre10 at
lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls where you are from left to right
within the square and MorphY controls where you are from low to high.

MorphX
Controls your position in the timbre square in the left to right direction, where 0 is at the far left, 1 is at the far right,
and 0.5 is in the middle.

MorphY
Controls your position in the timbre square in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5
is in the middle.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original

127
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Files can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma will match each file name
with another file from the same folder having same name but a different channel extension. If a corresponding file is
not found, that channel is silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the Psi
files, set this to 0 s.

ReleaseTime

128
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale00
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale01
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale10
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale11
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Cost
Cost determines the maximum number of simultaneous grains, where 4 is the maximum number of grains possible
and smaller numbers generate fewer grains (but use less processing time). For more polyphony, set the cost lower;
for more density, set the cost higher.

GrainEnv
This is the shape of the amplitude envelope on each grain. The wavetables in the Windows category make the
classic, smooth grain envelopes. Some of the shapes in Impulse Responses also give interesting results.

Density
Small Density values result in a sparse texture; large Density values generate a dense texture. This controls the
average number of new grains starting up at any given point in time.

GrainDur
This is the duration of each individual grain.

GrainDurJitter
Adds some amount of random jitter to the grain durations. When set to 1, the durations vary randomly from 0 to twice
the specified duration. When this is set to 0, all grains will have a duration of GrainDur. In other words, the actual
grain duration for each grain is:
GrainDur + (<rand> * GrainDurJitter * GrainDur)
where <rand> is a random number between -1 and 1.

FreqJitter
Amount of frequency deviation around the value in the Frequency field. Set FreqJitter to 0 for no frequency jitter. The
actual frequency of a new grain is (Frequency * (1 + (FreqJitter * random(-1,1))), so the range of frequencies is (0,
Frequency * 2).

129
Seed
This should be a number between 0 and 1. The seed provides a starting point for the random number generator, so
each different seed results in a different (but repeatable) sequence of random numbers. Use a negative number if
you want each file to have its own seed (and a positive number for all files to share the same seed).

TimeIndexJitter
TimeIndex is a time point in the files, and TimeIndexJitter is an amount of random deviation forward or backward in
time from the one point specified TimeIndex. A TimeIndexJitter of zero means that all grains will be chosen from the
single point specified in TimeIndex; if TimeIndex = 0 and TimeIndexJitter = 1, then grains may be chosen at random
from any time point in the entire sample. The start point of a grain is (TimeIndex + (TimeIndexJitter * random(-1,1))
clipped to the range of (-1,1).

130
Morph2dKeymappedSpectrum
Abstract Morphing Category
A Morph2dKeymapped takes a folder of filenames, each with a different base pitch stored in its header, and uses the
current value of Frequency to select which of the files should be morphed with each other to produce the output. You
can specify up to 4 folders of files, each of which will be morphed according to the current value of Frequency. You
can, in addition, morph between the folders of files, using MorphX and MorphY. Imagine the folders positioned at the
corners of a square as:
Timbre01--------------------Timbre11
|
|
|
|
|
Timbre00--------------------Timbre10
MorphX controls the transition from left to right (Timbres00 & 01 to Timbres10 & 11).
MorphY controls the transition from low to high (Timbres00 & 10 to Timbres01 & 11).
The morphed spectra can be resynthesized by feeding the output of this module into an OscillatorBank, CloudBank,
FilterBank, or FormantBank. NB: The output of this module is a control signal, not an audio signal.

Frequency
The current value of Frequency determines a morph between the files in each folder, according to the base pitch
stored in that files header. Frequency can be specified in units of pitch (nn) or frequency (hz). The following are all
ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in
the original file.

Level
Amplitude scale on the output.

Timbre00

131
Select a single .spc file from a folder of files, each file having a different base pitch. Imagine a square with Timbre00
at lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high. .

Timbre01
Select a single .spc file from a folder of files, each file having a different base pitch. Imagine a square with Timbre00
at lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high.

Timbre10
Select a single .spc file from a folder of files, each file having a different base pitch. Imagine a square with Timbre00
at lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high.

Timbre11
Select a single .spc file from a folder of files, each file having a different base pitch. Imagine a square with Timbre00
at lower left corner, Timbre10 at lower right, Timbre01 at upper left, and Timbre11 at upper corner. MorphX controls
where you are from left to right within the square and MorphY controls where you are from low to high.

MorphX
Controls your position in the timbre square in the left to right direction, where 0 is at the far left, 1 is at the far right,
and 0.5 is in the middle.

MorphY
Controls your position in the timbre square in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5
is in the middle.

ScaleFormant
For no change in the formant, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the formant, for
example:
!ScaleFormant * 1.5 + 0.5.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s

132
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Files can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma will match each file name
with another file from the same folder having same name but a different channel extension. If a corresponding file is
not found, that channel is silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result

133
----------------
1 Play the Psi file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the Psi
files, set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale00
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale01
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale10
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Scale11
Adjust this scale factor to normalize the amplitude of this timbre relative to the other three. Adjust each of the scale
factors and set the values of MorphX and MorphY to (0,0), (0,1), (1,0) and (1,1) until timbre00, 01, 10, 11 are
approximately matched in loudness.

Cost
Cost determines the number of partials used in resynthesizing the analyzed file. The fewer partials required, the
more efficient the computation:
Cost = 1 Partials = 128
Cost = 2 Partials = 256
Cost = 3 Partials = 512
Cost = 4 Partials = 1024

PreserveFormants
When checked, it will try to preserve the positions of the formants during pitch shifting. Preserving the formants uses
more computational resources, so if Frequency is set to default or if you are not playing outside the range of base
pitches represented in the folders, or if the timbres do not have strong formants, uncheck this box to make this Sound
more efficient. Compare the results when this box is checked versus unchecked, and select the version that sounds
best for the files you have specified. The effect of this checkbox may be most noticeable at the extremes of the
keyboard (for the lowest and highest pitches).

134
Morph3dGA
Abstract Morphing Category
A Morph3d can take up to eight Timbres and smoothly morph between them. Imagine the timbres positioned at the
vertices of a cube:
/Timbre011-------------------------Timbre111|
/ | / |
/ | / |
Timbre010-------------------------Timbre110| |
| | | |
| | | |
| /Timbre001--------------------------Timbre101
| / | /
|/ |/
Timbre000----------------------------Timbre100
with Timbre000, Timbre100, Timbre 010 and Timbre 110 on the near square face of the cube and
Timbre001, 101, 011 and 111 on the far square face of the cube. The numbers after the Timbre correspond to the X,
Y, Z coordinates of that corner (for example, Timbre 010 would be at position x = 0, y = 1, z = 0 or the top left corner
of the near face of the cube.
MorphX, MorphY, and MorphZ determine your position within the cube and the mixture of files that are morphed
together to create the timbre at that point.
The morphed timbre is synthesized using group additive (GA) synthesis.

Frequency
Use default to use the original base pitches stored in the files.
Other frequencies can be specified in units of pitch (nn) or frequency (hz). The following are all ways to specify the A
above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in

135
the original file.

Level
Amplitude scale on the output.

Timbre000
The GA fileName (.gaf) for the left, bottom, near corner of the cube.

Timbre001
The GA fileName (.gaf) for the left, bottom, far corner of the cube.

Timbre010
The GA fileName (.gaf) for the left, bottom, near corner of the cube.

Timbre011
The GA fileName (.gaf) for the left, top, far corner of the cube.

Timbre100
The GA fileName (.gaf) for the right, bottom, near corner of the cube.

Timbre101
The GA fileName (.gaf) for the right, bottom, far corner of the cube.

Timbre110
The GA fileName (.gaf) for the right, top, near corner of the cube.

Timbre111
The GA fileName (.gaf) for the right, top, far corner of the cube.

MorphX
Controls your position in the timbre cube in the left to right direction, where 0 is at the far left, 1 is at the far right, and
0.5 is in the middle.

MorphY
Controls your position in the timbre cube in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5 is
in the middle.

MorphZ
Controls your position in the timbre cube in the near to far direction, where 0 is close (on the front face of the cube), 1
further from you (on the back face of the cube), and 0.5 is in the middle distance.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)

136
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Files can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma will match each file name
with another file from the same folder having same name but a different channel extension. If a corresponding file is
not found, that channel is silent. The file extensions are:

137
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the files, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the files,
set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale000
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale001
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale010
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale011
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale100
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale101
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale110
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

138
Scale111
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

139
Morph3dPsi
Abstract Morphing Category
Imagine a cube with a timbre at each corner. Then imagine controlling a point inside the cube (X,Y,Z) with the
controls in MorphX, MorphY and MorphZ; the closer this point is to one of the corners, the closer the audio output will
be to the timbre in that corner.
The timbre are numbered according to their coordinates in (x,y,z). So for example Timbre000 is at point (0,0,0) where
XMorph, YMorph and ZMorph are all equal to zero. Timbre100 is at point (1,0,0) where XMorph equals 1 and the
other morph parameters are zero. Timbre011 is the corner at (0,1,1) where XMorph=0, and both Y and ZMorph are
equal to 1.
It may help to think of the cube as two square faces, the first one (where z is always zero):
010-----110
000-----100
and a second square face, closer to you, where z = 1:
011-----111
001-----101
The morphed timbre is synthesized using Psi synthesis.

Frequency
To use the original base pitches of the files, type ’default’ in this field. For other frequencies, select a frequency that is
no more than Cost octaves above the original base pitch of each of the Timbre000-111 Psi files.
Frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in
the original file.

Level
Amplitude scale on the output.

Timbre000
Select a psi file (.psi) for the left, bottom, near corner of the cube.

140
Timbre001
Select a psi file (.psi) for the left, bottom, far corner of the cube.

Timbre010
Select a psi file (.psi) for the left, top, near corner of the cube.

Timbre011
Select a psi file (.psi) for the left, top, far corner of the cube.

Timbre100
Select a psi file (.psi) for the right, bottom, near corner of the cube.

Timbre101
Select a psi file (.psi) for the right, bottom, far corner of the cube.

Timbre110
Select a psi file (.psi) for the right, top, near corner of the cube.

Timbre111
Select a psi file (.psi) for the right, top, far corner of the cube.

MorphX
Controls your position in the timbre cube in the left to right direction, where 0 is at the far left, 1 is at the far right, and
0.5 is in the middle.

MorphY
Controls your position in the timbre cube in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5 is
in the middle.

MorphZ
Controls your position in the timbre cube in the near to far direction, where 0 is close (on the front face of the cube), 1
further from you (on the back face of the cube), and 0.5 is in the middle distance.

ScaleFormant
For no change in the formant, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the formant, for
example:
!ScaleFormant * 1.5 + 0.5.
NB: For FormantScales less than 1, use a Cost value of 2 or 3.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)

141
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Files can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma will match each file name
with another file from the same folder having same name but a different channel extension. If a corresponding file is
not found, that channel is silent. The file extensions are:

142
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the Psi file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the Psi
files, set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale000
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

Scale001
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

Scale010
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

Scale011
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

Scale100
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

Scale101
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

Scale110
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

143
Scale111
Scale000-111 are normalizing scale factors you can apply to the corresponding Psi Files in Timbre000-111. If one
Psi File is louder than the others, you can normalize them by attenuating it using the corresponding Scale parameter.

TimeScaling
Check the TimeScaling box for higher quality time stretching. If you aren’t doing time-scaling, uncheck the box to
require less computation.

Cost
Select the maximum number of octaves pitch shift (and/or the inverse of the minimum FormantScale, for example, a
FormantScale of 0.5 requires a Cost of 2). The smaller the Cost, the more efficiently this Sound can be scheduled on
multiple processors (and the more polyphony you will be able to get).

144
Morph3dSampleCloud
Abstract Morphing Category
A Morph3d can take up to eight Timbres and smoothly morph between them. Imagine the timbres positioned at the
vertices of a cube:
/Timbre011-------------------------Timbre111|
/ | / |
/ | / |
Timbre010-------------------------Timbre110| |
| | | |
| | | |
| /Timbre001--------------------------Timbre101
| / | /
|/ |/
Timbre000----------------------------Timbre100
with Timbre000, Timbre100, Timbre 010 and Timbre 110 on the near square face of the cube and
Timbre001, 101, 011 and 111 on the far square face of the cube. The numbers after the Timbre correspond to the X,
Y, Z coordinates of that corner (for example, Timbre 010 would be at position x = 0, y = 1, z = 0 or the top left corner
of the near face of the cube.
MorphX, MorphY, and MorphZ determine your position within the cube and the mixture of files that are morphed
together to create the timbre at that point.
The morphed timbre is synthesized using granular synthesis.

Frequency
Use default to use the original base pitches stored in the files.
Other frequencies can be specified in units of pitch (nn) or frequency (hz). The following are all ways to specify the A
above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Level
Amplitude scale on the output.

145
Timbre000
Select a samples file (.aif or .wav) for the left, bottom, near corner of the cube.

Timbre001
Select a samples file (.aif or .wav) for the left, bottom, far corner of the cube.

Timbre010
Select a samples file (.aif or .wav) for the left, top, near corner of the cube.

Timbre011
Select a samples file (.aif or .wav) for the left, top, far corner of the cube.

Timbre100
Select a samples file (.aif or .wav) for the right, bottom, near corner of the cube.

Timbre101
Select a samples file (.aif or .wav) for the right, bottom, far corner of the cube.

Timbre110
Select a samples file (.aif or .wav) for the right, top, near corner of the cube.

Timbre111
Select a samples file (.aif or .wav) for the right, top, far corner of the cube.

MorphX
Controls your position in the timbre cube in the left to right direction, where 0 is at the far left, 1 is at the far right, and
0.5 is in the middle.

MorphY
Controls your position in the timbre cube in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5 is
in the middle.

MorphZ
Controls your position in the timbre cube in the near to far direction, where 0 is closest to you (on the front face of the
cube), 1 furthest from you (on the back face of the cube), and 0.5 is in the middle ground.

LoopMode
LoopMode Result
----------------------------------
Markers: Loop according to startLoop & endLoop markers saved in the files
NoLoop: Do not loop, but morph each envelope segment duration (attack, sustain, release) separately
NoMarkers: Morph the total file durations, ignoring the segment markers
TimeIndex: TimeIndex is controlled by the value of the Sound or expression in the TimeIndex parameter

TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:

146
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Files can be mono, split stereo, or split surround. For example, if you select Stereo, Kyma will match each file name
with another file from the same folder having same name but a different channel extension. If a corresponding file is
not found, that channel is silent. If the file is interleaved stereo, a mono mix of left and right is used. The file
extensions are:
Stereo: .L .R

147
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the files & loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the files,
set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale000
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale001
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale010
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale011
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale100
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale101
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale110
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale111

148
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Cost
Cost determines the maximum number of simultaneous grains, where 4 is the maximum number of grains possible
and smaller numbers generate fewer grains (but use less processing time). For more polyphony, set the cost lower;
for more density, set the cost higher.

GrainEnv
This is the shape of the amplitude envelope on each grain. The wavetables in the Windows category make the
classic, smooth grain envelopes. Some of the shapes in Impulse Responses also give interesting results.

Density
Small Density values result in a sparse texture; large Density values generate a dense texture. This controls the
average number of new grains starting up at any given point in time.

GrainDur
This is the duration of each individual grain.

GrainDurJitter
Adds some amount of random jitter to the grain durations. When set to 1, the durations vary randomly from 0 to twice
the specified duration. When this is set to 0, all grains will have a duration of GrainDur. In other words, the actual
grain duration for each grain is:
GrainDur + (<rand> * GrainDurJitter * GrainDur)
where <rand> is a random number between -1 and 1.

FreqJitter
Amount of frequency deviation around the value in the Frequency field. Set FreqJitter to 0 for no frequency jitter. The
actual frequency of a new grain is (Frequency * (1 + (FreqJitter * random(-1,1))), so the range of frequencies is (0,
Frequency * 2).

Seed
This should be a number between 0 and 1. The seed provides a starting point for the random number generator, so
each different seed results in a different (but repeatable) sequence of random numbers. Use a negative number if
you want each file to have its own seed (and a positive number for all files to share the same seed).

TimeIndexJitter
TimeIndex is a time point in the Sample, and TimeIndexJitter is an amount of random deviation forward or backward
in time from the one point specified TimeIndex. A TimeIndexJitter of zero means that all grains will be chosen from
the single point specified in TimeIndex; if TimeIndex = 0 and TimeIndexJitter = 1, then grains may be chosen at
random from any time point in the entire sample. The start point of a grain is (TimeIndex + (TimeIndexJitter *
random(-1,1)) clipped to the range of (-1,1).

149
Morph3dSpectrum
Abstract Morphing Category
To hear an audio signal, feed this spectrum into an OscillatorBank, a CloudBank, a FilterBank, or FormantBank.
Imagine a cube with a timbre at each corner. Then imagine controlling a point inside the cube (X,Y,Z) with the
controls in MorphX, MorphY and MorphZ; the closer this point is to one of the corners, the closer the audio output will
be to the timbre in that corner.
The timbres are numbered according to their coordinates in (x,y,z). So for example Timbre000 is at point (0,0,0)
where XMorph, YMorph and ZMorph are all equal to zero. Timbre100 is at point (1,0,0) where XMorph equals 1 and
the other morph parameters are zero. Timbre011 is the corner at (0,1,1) where XMorph=0, and both Y and ZMorph
are equal to 1.
It may help to think of the cube as two square faces, the first one (where z is always zero):
010-----110
000-----100
and a second square face, further from you, where z = 1:
011-----111
001-----101

Frequency
To use the original base pitches stored in the files, use ’default’ as the Frequency.
Other frequencies can be specified in units of pitch (nn) or frequency (hz). The following are all ways to specify the A
above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

ScaleFreqDev
When this value is 0, the frequency of the playback is exactly the value of the Frequency parameter. When it is at its
maximum value of 1, the original frequency envelope variations around the nominal pitch are added back in. When
the value is larger than 1, the original frequency deviations are magnified, causing wider pitch variations than were in
the original file.

Level
Amplitude scale on the output.

Timbre000
Select a spectrum file (.spc) for the left, bottom, near corner of the cube.

150
Timbre001
Select a spectrum file (.spc) for the left, bottom, far corner of the cube.

Timbre010
Select a spectrum file (.spc) for the left, top, near corner of the cube.

Timbre011
The Spectrum file (.spc) at the left, top, far corner of the cube.

Timbre100
The Spectrum file (.spc) at the right, bottom, near corner of the cube.

Timbre101
The Spectrum file (.spc) at the right, bottom, far corner of the cube.

Timbre110
The Spectrum file (.spc) at the right, top, near corner of the cube.

Timbre111
The Spectrum file at the right, top, far corner of the cube.

MorphX
Controls your position in the timbre cube in the left to right direction, where 0 is at the far left, 1 is at the far right, and
0.5 is in the middle.

MorphY
Controls your position in the timbre cube in the up down direction, where 0 is at the bottom, 1 is at the top, and 0.5 is
in the middle.

MorphZ
Controls your position in the timbre cube in the near to far direction, where 0 is close (on the front face of the cube), 1
further from you (on the back face of the cube), and 0.5 is in the middle distance.

ScaleFormant
For no change in the formant, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the formant, for
example:
!ScaleFormant * 1.5 + 0.5.

LoopMode
LoopMode Result
------------------
None: No looping (use Gate to retrigger)
Live: Loop using live controls in LoopStart, LoopEnd, Start & End
TimeIndex: TimeIndex controls the play position
Markers: Loop according to markers saved in the file

TimeIndex
Range: (-1,1)

151
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfFile’ fileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfFile’ fileDuration) * 2 - 1

ScaleAtkDur
When LoopMode is set to Markers or NoLoop, use this field to compress or expand the duration of the attack portion
of the file. When LoopMode is set to noMarkers, this is a scale factor on the duration of the entire file.
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the file,
for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the file,
for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

Format
Psi files can be mono, split stereo, or split surround. For example, if you select Stereo, the PsiPlayer assumes there
are other files in the same folder as PsiFileName and that they have the same name but with a different channel
extension. If a corresponding file is not found, the result is silent. The file extensions are:

152
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

Gate
Gate Result
----------------
1 Play the file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

AttackTime
This is the attack duration of a linear amplitude envelope applied to the sound. To use the natural attack of the files,
set this to 0 s.

ReleaseTime
This is the release duration of a linear amplitude envelope applied to the sound. To use the natural duration and
release of the files, set this to an extremely long duration like 1 day. To avoid clicks during voice-stealing, set this to
the desired decay duration.

Scale000
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale001
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters. Scale001
corresponds to Timbre001.

Scale010
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale011
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale100
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale101
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Scale110
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

153
Scale111
Scale000-111 are normalizing scale factors you can apply to the corresponding Timbre000-111. If some of the files
are louder than others, you can normalize them by attenuating the louder ones in the Scale parameters.

Cost
Cost determines the number of partials used in resynthesizing the analyzed file.
Cost = 1 Partials = 128
Cost = 2 Partials = 256
Cost = 3 Partials = 512
Cost = 4 Partials = 1024

PreserveFormants
When checked, it tries to preserve the positions of the formants during pitch shifting. This uses more computational
resources so if Frequency is set to default (meaning you are not doing any pitch shifting), you can uncheck this box to
make this Sound more efficient.

154
MultichannelMixer
Surround & Multichannel Category
A Mixer that accepts multichannel inputs. Each of the Inputs has an overall Level. The output of channel 1 is the
sum of the Inputs’ channel 1 outputs. The output of channel 2 is the sum of the Inputs’ channel 2s, etc. Each Input
has an overall amplitude control specified n the Levels field.

Inputs
Each output channel of each of these Inputs is summed and sent to the output of the MultichannelMixer.

Levels
An array of levels (-1,1). The first Level value controls the overall amplitude of the first Input, the second level
controls overall amplitude of the second Input, and so on. If there are fewer Levels than Inputs, the final Level value is
repeated for subsequent Inputs.

155
MultichannelPan
Surround & Multichannel Category
This Sound uses the same panning algorithm as the Timeline with the option of independently controlled processing
for each spatial position. Given the Speaker Placement (specified in Edit>Preferences), MultichannelPan pans the
SharedSound signal in a circle around the listener. The processing (defined as a portion of the signal chain from just
to the right of the SharedSound through the ReplicatedSound) is replicated so it has independent controls, and it is
assigned to a fixed spatial position. The source (the SharedSound) can pan through each of copy of the processing
algorithm as it passes through different positions.
For simple panning without independently controlled processing chains in each channel, set SharedSound and
ReplicatedSound to be exactly the same.

ReplicatedSound
This is the Sound (or portion of a Sound) that is replicated in each of the channels. Think of the chain from the
sharedSound to the output as being replicated and having a fixed position in space. Think of the sharedSound as
panning through the space, passing through the replicated processing chains (each of which has independent
controls).

SharedSound
Think of this as the sound source that can be panned to any position in the room. The chain between this Sound and
the Replicated Sound is replicated and has a fixed position in the space while the SharedSound can pan through that
processing chain. Use option+Drag (or Ctrl+Drag) to drag the SharedSound from the signal flow graph into this field
so it is exactly the *same* Sound as appears in the ReplicatedSound’s signal flow graph.

Prefix
Whatever you type here within single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or
green variable name in the copies. If the prefix includes a number and IncrementPrefix is checked, this number is
incremented in each copy. Uncheck IncrementPrefix if you want the same prefix added to all controls and green
variables. To append a different prefix to each copy, enter one prefix for each copy with a space separating each
prefix from the next (for example, ’hi’ ’mid’ ’lo’). Leave this field blank if you do not want to add any prefixes. If there
are fewer prefixes than copies created by the Replicator, the last prefix will be repeated (and, if it includes a numeral
and you have checked the IncrementPrefix box, each prefix will include a unique number).

Suffix
Whatever you type here within single quotes (for example ’-1’) will be tacked onto the end of each hot value or green
variable name in the copies. If a suffix includes a number and IncrementSuffix is checked, this number is
incremented in each copy. Uncheck IncrementSuffix if you want the same suffix added to all controls and green
variables. To add a different suffix to the hot values of each copy, enter a suffix for each Sound copy with a space
separating one from the next (for example, ’-hi’ ’-mid’ ’-lo_1’). Leave this field blank if you do not want to add any
suffixes. If there are fewer IncrementSuffix than copies created by the Replicator, the last IncrementSuffix will be
repeated (and, if it includes a numeral and you have checked the IncrementSuffix box, each suffix will include a
unique number).

IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

156
IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

DoNotChange
This is a list of hot values that should NOT be duplicated (and given a unique name) for each position in space. In
other words, these are the hot values that are shared.

Angle
(-0.5,1.5) range covers positions along a circle surrounding the listener with 0 corresponding to hard left, 0.5 straight
ahead, 1 hard right, and -0.5 (and 1.5) directly behind the listener. Use a Rotary widget in the VCS to visualize the
position.

Radius
(0,2) where 0 is inside the head of the listener, 1 is on a circle surrounding the listener approximately connecting the
speakers, and 2 is outside the circle. The strongest panning effects are heard when Radius = 1.

Level
(-1,1) attenuator on the overall output amplitude.

157
MultifileDiskPlayer
Sample playback Category
This is similar to DiskPlayer except that you specify an array of disk file names rather than a single disk file name.
The value of Index determines which file will play on the next retrigger. (An index of 0 chooses the first file in the
array, an index of 1 chooses the second, etc.) Only one disk file will play at any one time, but the choice of file can be
made in real time. (To get more than one disk file to play simultaneously, feed this Sound into a MIDIVoice and set
the desired polyphony).
You can use a single Rate for all disk files, or make Rate a function of the Index if you want different files to play at
different rates.
The MultiFileDiskPlayer can be used whenever you need real-time random access to several different disk recordings
through a keyboard or MIDI controller. For example, it can be used to choose from a set of live sound effects and
synchronize them by hand to a film, to create a disk-based sampler with a different sample for every key on the
keyboard, to perform a composition made up of several, long disk recordings, or (if the trigger is linked to the
FrequencyTracker or EnvelopeFollower) as a synchronizable "tape part" that responds to a live performer.

FileNames
List each of the file names that could be triggered, enclosing each of them within single quotes. The Index
corresponds to the placement of the filename in this field. In other words, an index of 0 selects the first filename in
the field, and index of 1 selects the second filename, etc.

RateScale
This is the rate of playback. For example, use 1 to play back at the original rate, 0.5 for half speed, 2 for twice as fast,
etc.

Trigger
When the Trigger becomes nonzero, one event is triggered. You can trigger several events over the course of the
total Duration of this program as long as the value of Trigger returns to zero before the next trigger. Some example
values for Trigger are:
1 (plays once with no retriggering)
0 (the sound is silent, never triggered)
!KeyDown (trigger on MIDI key down)
!cc64 (trigger when controller 64 > 0)
You can also paste another signal into this field, and events will be triggered every time that signal changes from zero
to a positive value. (See the manual for a complete description of hot parameters, Event Values, and the Global map
files).

Gated
NOT IMPLEMENTED YET.

Index
This is an integer that selects which of the disk files should be played when the next trigger is received. An index of 0
selects the first file. If the index is less than 0, it selects the 0th file (the first file in the list). If the index is larger than
the length of the file list, it selects the last file in the list.

158
AutoLabel
Check AutoLabel to label the Index fader with the names of the disk files.

159
MultiplyingWaveshaper
Level, Compression, Expansion Category
Multiplies Input by a value read from the Wavetable at an index supplied by the NonlinearInput and attenuates or
amplifies the result by multiplying it by Scale.
Can be used as a computationally inexpensive dynamic range controller if the NonlinearInput is a signal fed through a
peak detector or RMS detector and the Input is that same signal delayed by some amount. In this situation, the
Wavetable describes the attenuation of the output amplitude as a function of input amplitude.
To design a new input-output characteristic function, open the Sample/Wavetable editor and use the
InputOutputCharacteristic template to generate a new transfer function with the desired compression/expansion
parameters.

NonlinearInput
The output of this Sound is used as an index into the Wavetable.

Input
This Sound is multiplied by the value from the Wavetable that is indexed by the NonlinearInput.

Scale
This is a gain control for the output. It can be any positive number.

Wavetable
This is the transfer function that the NonlinearInput indexes into. When used as a dynamic range control, this function
describes a multiplier on the output amplitude as a function of the input amplitude.

160
Multisample
Sample playback Category
This provides a quick way to select from a number of samples. The sample files are listed in the Samples field, and
the Index field is used to determine which sample file to play whenever the Gate changes to a positive value.

Frequency
Use 0 hz here if you want the Frequency to equal the pitch of the recorded sample. The frequency can be specified
in units of pitch or frequency. Different frequencies are obtained by changing the size of the increment through the
recorded sample. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Gate
Enter a 1 in this field to play the Sound exactly once for the duration you have specified in the Duration field.
If you use an EventValue (for example, !KeyDown) in this field, the Sound can be retriggered as often as you like
within the duration specified in the Duration field.
When Gate becomes positive, the Sound is heard; when Gate becomes zero, the Sound is released. If the sample
file has loop points stored in its header, Kyma will loop the sample for as long as Gate remains positive (so, for
example, as long as the MIDI key is held down).

Samples
Takes a list of samples file names, each within single quotes.

Index
An expression whose value is the index into the list of filenames: 0 selects the first file in the list, 1 the second, and so
on.

AttackTime
Duration of the attack of an envelope applied to the sample.

ReleaseTime
Duration of the release of an envelope applied to the sample.

Scale
Overall level of the sample.

161
Loop
Click here if you want to loop the sample using the loop points specified in the header of the samples file.

AutoLabel
Check AutoLabel to label the Index fader with the names of the Sample files.

162
MultiSampleCloud
Sample playback Category
A SampleCloud on a selection of SampleFileNames accessed by Index.

SampleFileNames
Enter any number of sample file names, each name enclosed within single quotes. Alternatively, you can click the
disk icon and select samples using the file dialog. To specify all of the samples in a folder, use an expression of the
form:
{’nameOfOneSampleInFolder’ fileNamesOfSameTypeInSameFolder}

GrainEnv
This is the shape of the amplitude envelope on each grain. The wavetables in the Windows category make the
classic, smooth grain envelopes. Some of the shapes in Impulse Responses also give interesting results.

MaxGrains
This is the maximum number of simultaneous grains. The smaller this number, the less computational power the
SampleCloud requires (but the less dense the texture you can generate). For even denser textures, put more than
one SampleCloud into a Mixer, and give each cloud a different Seed value.

Amplitude
This is an overall level applied to the entire cloud. Paste an envelope generator into this field to give an overall
envelope to the cloud.

Density
Small Density values result in a sparse texture; large Density values generate a dense texture. This controls the
average number of new grains starting up at any given point in time.

GrainDur
This is the duration of each individual grain.

GrainDurJitter
Adds some amount of random jitter to the grain durations. When set to 1, the durations vary randomly from 0 to twice
the specified duration. When this is set to 0, all grains will have a duration of GrainDur. In other words, the actual
grain duration for each grain is:
GrainDur + (<rand> * GrainDurJitter * GrainDur)
where <rand> is a random number between -1 and 1.

Pan
This is the stereo position of each new grain where 0 is hard left, 0.5 is in the middle, and 1 is hard right.

PanJitter
This is the amount of random deviation added to the pan position of each grain. The larger this number, the more
diffuse the apparent location, and the smaller the number, the more localized the sound.

163
Seed
This should be a number between 0 and 1. The seed provides a starting point for the random number generator, so
each different seed results in a different (but repeatable) sequence of random numbers. When adding several
SampleGrains with the same control parameters together in a Mixer, give each of them a different seed in order to
ensure that each of them has *different* random jitter added to its parameters (otherwise, they will just double each
other).

TimeIndex
This is a pointer into the Sample memory. -1 points to the beginning of the sample, 0 points to the middle, and 1
points to the end of the sample. Grains are selected from this point and from random positions in the neighborhood
(whose size is determined TimeIndexJitter) around this point.
To read through the sample in linear, forward time, you can use something like:
!KeyDown fullRamp: 10 s
which will scan the sample from beginning to end over the course of 10 seconds each time it receives a MIDI note
event.
To remove the element of time from the sample, set TimeIndex to a fixed position like 0 (the middle of the sample),
and increase TimeIndexJitter to its maximum value. Then grains will be chosen at random from all different time
points within the sample.

TimeIndexJitter
TimeIndex is a time point in the Sample, and TimeIndexJitter is an amount of random deviation forward or backward
in time from the one point specified TimeIndex. A TimeIndexJitter of zero means that all grains will be chosen from
the single point specified in TimeIndex; if TimeIndex = 0 and TimeIndexJitter = 1, then grains may be chosen at
random from any time point in the entire sample. The start point of a grain is (TimeIndex + (TimeIndexJitter *
random(-1,1)) clipped to the range of (-1,1).

Frequency
Frequency is the center value for the playback rate of the sample. Use ’default’ to get the original frequency. To
scale the original frequency, use
default * !Rate
If the frequency of the sample is stored in the samples file, you can use specific frequency values like !KeyPitch or
!Frequency hz in this field. (If you have not labelled the frequency of a sample, it will play back at its original rate
when the pitch is 60 nn (4 c), and be shifted up or down from that reference pitch when you play other pitches).
To read backwards within each grain from the TimeIndex for the GrainDur, use a negative Frequency value.

FreqJitter
This parameter has no effect unless Interpolation is set to Linear. Amount of frequency deviation around the value in
the Frequency field. Set FreqJitter to 0 for no frequency jitter. The actual frequency of a new grain is (Frequency *
(1 + (FreqJitter * random(-1,1))), so the range of frequencies is (0, Frequency * 2).

Index
An expression whose value is the index into the list of filenames: 0 selects the first file in the list, 1 the second, and so
on.

Gate
A new file selection can be triggered each time the Gate value changes from 0 to 1.
If you use an EventValue (for example, !KeyDown) or an expression (for example, 1 s tick) in this field, a new sample
can be selected each time this expression changes from 0 to a non-zero value.

AutoLabel
To label the Index fader with the SampleFileNames, check this box.

164
MultisegmentEnvelope
Envelopes & Control Signals Category
Similar to the ADSR envelope, except that you can specify an arbitrary number of segments and can specify loop
points. See also MultiSlopeFunctionGenerator and GraphicalEnvelope. Use the GraphicalEnvelope except in those
cases where you need hot BreakPoints or Levels.
Typical uses include amplitude envelopes, pitch envelopes, and time index functions.

Durations
Enter the durations of each segment of the envelope. You must include the units of time and enclose the duration
and its units within curly braces, for example
{!Length s} or {2 s}
The number of Durations must be one less than the number of BreakPoints.

BreakPoints
These are the amplitude values at the endpoints of each segment. There should always be one more breakpoint than
there are segment durations.
Every time there is a change in slope or a "break" in the line corresponding to the envelope, you have to specify the
amplitude at that point (including the very last point in the envelope, since it does not necessarily have to end on a
zero). These numbers can be any value from 0 to 1. If you enter a larger value, the amplitude of the envelope will
approach that number at the rate required to reach that number in the given duration, but it will stick at the value of 1
once that has been reached.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

StartLoop
The number of the first segment included in the loop (where the segments are numbered from 1 to the number of
segments). The first segment of the envelope cannot be used as the start of the loop.

EndLoop
The number of the last segment included in the loop (where the segments are numbered from 1 to the number of
segments).

Level
This is a scale factor (from 0 to 1) for attenuating the overall output level.

Gate
When Gate changes from zero to a nonzero, the envelope will be triggered. Gate must return to zero again before
the envelope can be retriggered. If you have specified beginning and ending segments for a loop, the envelope will
repeat the loop segments for as long as the Gate is nonzero. If the ending loop segment ends on a higher or lower
value than the start of the beginning segment, the entire looped portion will get larger or smaller each time it is
repeated (because each segment has a *slope* associated with it, not the absolute values at each point).

JumpToEnd

165
166
MultislopeFunctionGenerator
Envelopes & Control Signals Category
This is similar to the MultiSegmentEnvelope, except that you specify time points and *slopes* between the time points
(rather than time points and the levels at those time points), and you cannot loop the envelope.
GraphicalEnvelope is easier to use than the MultiSlopeFunctionGenerator except in those situations where you need
hot TimePoints and/or Slopes.
The resting value of this envelope is 1. Each time it is triggered, it generates the envelope exactly once.

TimePoints
These are the time points at which the slope of the envelope should change. There should be one more TimePoint
than there are Slopes because the slopes specify the slope of a line *between* adjacent pairs of TimePoints.
You must include the units of time and enclose the time point and its units within curly braces, for example
{!TimePoint1 s} or {2 s}

Slopes
Specify a slope for each pair of adjacent TimePoints (you should end up with one more TimePoint than you have
slopes). A slope of 1 is a 45 degree angle, slopes of less than 1 are shallower, and slopes of greater than 1 are
steeper. Negative slopes go downward at the same angle as the positive slopes go upward.
In this field, you must enclose expressions within curly braces, for example: {!Slope1 * !KeyVelocity}

Level
This is an overall amplitude scale on the entire envelope.

Gate
When this changes from a zero to a number larger than zero, the envelope is generated exactly once. The resting
value of the envelope is the maximum amplitude (1).

Rate
This is the rate at which the envelope is played. Use 1 to play it back normally, 0.5 to make the envelope last twice as
long, 2 to make it play twice as fast, etc.

167
MultiSpectrumPlayer
Spectral Sources Category
MultiSpectrum is like the SpectrumInRAM except that, instead of supplying a single spectrum file, you supply a list of
SpectrumFileNames selectable in realtime by an Index. The switch from the previously selected spectrum to the
currently selected function takes place when Trigger becomes true so you can change the Index at any time and then
trigger the change at exactly the right moment.
Note that the MultiSpectrum should be used as the input to an OscillatorBank (or one of the aggregate synthesis
banks) in order to produce an audio signal. The output of this Sound is sub audio control envelopes.

Frequency
Frequency of the resynthesis. Use default to reproduce the original frequency, multiply default by a scale factor, or
enter an exact frequency or pitch controller.

Level
Amplitude scale on the output.

TimeIndex
This controls time in the amplitude and frequency envelopes for the resynthesis. The beginning of the analysis is at
-1, the middle is at 0, and the end is at 1.

SpectrumFileNames
Give a list of spectrum file names enclosed within single quotes. Click the disk icon to locate a file and paste its full
pathname at the end of the current list. If the spectrum files are all in the same folder you can use the shortcut of the
form: {’cat h’ fileNamesOfSameTypeInSameFolder}

NbrPartials
Number of partials to resynthesize.

FirstPartial
First or lowest partial to resynthesize.

Index
Index of the file to be resynthesized (range is from 0 for the first fileName up to the number of fileNames in the
SpectrumFileNames field).

Trigger
Trigger the change from the currently playing spectrum, to the newly selected spectrum. You can change the Index
value in advance and then trigger the change from this field.

168
MultiToMultichannel
Surround & Multichannel Category
MultiToMultichannel takes a multichannel input, optionally processes all channels, and produces either a multichannel
output or, if Stereo is checked, just the first two channels of the processed input. To get a mix of all the input
channels on each output, check Mix. To let a channel pass through unchanged, check that channel’s Bypass check
box.

ReplicatedSound
This is the Sound (or portion of a chain of Sounds) that is replicated in each of the channels. Typically, this will be a
multichannel source going through a chain of mono or stereo processing modules. Think of the chain from the
sharedSound(s) to the output as defining the processing on each channel. Think of the Sound in the SharedSounds
field as a multichannel source, each of whose channels will be processed through a copy of the processing chain
(each of which can, optionally, have independent controls).

SharedSounds
Use option+Drag (or Ctrl+Drag) to drag the multichannel source from the ReplicatedSound’s signal flow graph into
this field. You can think of this as the multichannel source, each of whose channels is optionally processed through
the chain of modules in the ReplicatedSound (unless its corresponding Bypass box is checked). Any other portions of
the ReplicatedSound’s processing chain that are shared among all the channels should also be dragged into this
field, but the multichannel source should always be the *first* (highest and leftmost) Sound in the field.

DoNotChange
This is a list of hot values that should NOT be duplicated and uniquely named for each independent channel. To use
the same processing on all channels, enter all the hot values controlling the processing here, so the controls are
shared among all the channels.

Bypass1
Send the SharedInput’s channel 1 to this Sound’s output channel 1 unchanged.

Bypass2
Send the SharedInput’s channel 2 to this Sound’s output channel 2 unchanged.

Bypass3
Send the SharedInput’s channel 3 to this Sound’s output channel 3 unchanged.

Bypass4
Send the SharedInput’s channel 4 to this Sound’s output channel 4 unchanged.

Bypass5
Send the SharedInput’s channel 5 to this Sound’s output channel 5 unchanged.

Bypass6
Send the SharedInput’s channel 6 to this Sound’s output channel 6 unchanged.

169
Bypass7
Send the SharedInput’s channel 7 to this Sound’s output channel 7 unchanged.

Bypass8
Send the SharedInput’s channel 8 to this Sound’s output channel 8 unchanged.

Prefix
To perform the same processing on all channels, leave this field blank. Otherwise, whatever you type here within
single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or green variable name in the
copies. If the prefix includes a number and IncrementPrefix is checked, this number is incremented in each copy.
Uncheck IncrementPrefix if you want the same prefix added to all controls and green variables. To append a different
prefix to each copy, enter one prefix for each copy with a space separating each prefix from the next (for example, ’hi’
’mid’ ’lo’). Leave this field blank if you do not want to add any prefixes. If there are fewer prefixes than copies created
by the Replicator, the last prefix will be repeated (and, if it includes a numeral and you have checked the
IncrementPrefix box, each prefix will include a unique number).

Suffix
To perform the same processing on all channels, leave this field blank. Otherwise, whatever you type here within
single quotes (for example ’-1’) will be tacked onto the end of each hot value or green variable name in the copies. If
a suffix includes a number and IncrementSuffix is checked, this number is incremented in each copy. Uncheck
IncrementSuffix if you want the same suffix added to all controls and green variables. To add a different suffix to the
hot values of each copy, enter a suffix for each Sound copy with a space separating one from the next (for example,
’-hi’ ’-mid’ ’-lo_1’). Leave this field blank if you do not want to add any suffixes. If there are fewer IncrementSuffix
than copies created by the Replicator, the last IncrementSuffix will be repeated (and, if it includes a numeral and you
have checked the IncrementSuffix box, each suffix will include a unique number).

IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

StereoOut
To send the ReplicatedSound’s channels 1 and 2 ONLY to the output as a stereo pair, check this box.
To output a 2-channel mix of the input channels, check this box and the Mix box. If you want a stereo mix, the
panning must be included as part of the processing chain in the ReplicatedSound field. Otherwise, the output is a
dual mono mix of all the input channels (with optional processing on each channel).

Mix
To mix all the channels of the ReplicatedSound, check this box. The resulting mono mix will be output on all
channels. For a stereo mix, also check the StereoOut box (and include left/right panning information in your
ReplicatedSound).

170
Noise
Noise & Pulse Trains Category
Noise generates a stream of random numbers at the sample rate for use as an audio signal or as a source of jitter for
parameter controls. The distribution of the random numbers is determined by the "color" selection: White, Pink or
HotPink. InitialState is the first value in the stream. Different InitialStates result in different streams of random
numbers.

InitialState
Choose a number between -1 and 1 as a seed for the random number generator. If you want two Noise modules to
be uncorrelated with each other, give each one a unique InitialState.

Type
On each sample of White noise, any output value is equally likely. White noise has the same amount of energy in
each frequency band. For example, if you were to measure the energy in the band of frequencies from 0 to 100 hz it
would be the same as the energy in the band of frequencies from 1000 to 1100 hz. If you look at the spectrum of
White noise using Info>SpectrumAnalyzer, you can see that the spectrum appears flat or uniform across all
frequencies, because it is equal energy for all frequencies.
Pink noise has equal energy in equal pitch ranges. For example the octave from 2 a to 3 a would have the same
energy in it as the octave from 4 c to 5 c. If you look at the spectrum of Pink noise in the SpectrumAnalyzer, it looks
more lowpass than White noise, because, for example, the octave from 1000 to 2000 hz is ten times wider in
frequency space than the octave from 100 to 200 hz, even though they cover equal amounts of pitch space and have
equal energy spread across them.
In HotPink noise, the size of the changes between the current random number and the previous one are most likely to
be small. The larger the change, the less likely it is. The resulting waveform has lots of small changes in it with an
occasional large jump to a new area followed by a lot more small changes around that new value. Frequency
controls the maximum rate at which the largest changes can occur. You will be able to hear a quasi repetion rate in
the random number stream at that Frequency. If you look at the spectrum of the HotPink noise in the
SpectrumAnalyzer, you see the largest amplitude at the frequency specified in the Frequency parameter field and an
exponential drop in amplitude with increasing frequency values.

Frequency
This is active only when HotPink is checked. It controls the rate at which the largest changes can occur and thus
gives a quasi "fundamental frequency" or quasi-periodic repetition rate to the noise.

CenterValue
The random numbers are equally distributed around this center value. For audio signals, this is like a DC offset for
the noise. When you use Noise as a control signal, this is the center value (and there will be "jitter" around this center
value).

Scale
When using Noise as an audio signal, you can use this parameter to control the amplitude or level of the noise.
When using Noise as a parameter controller, this is the amount of "jitter" added to the parameter. The stream of
random numbers is multiplied by the value in Scale.

171
Oscillator
Oscillators Category
The Wavetable is treated as a single cycle that is repeated at the cycles-per-second rate specified in the Frequency
field.
To control the phase of the Oscillator in real time, select Frequency as the Modulation type, set the MaxMI to Float pi
* 2, use a Constant as the Modulator input and set the Constant’s Value field to !Phase.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Wavetable
Enter the name of a samples file or click the Disk icon to select a samples file to be used as the wavetable. In the
simple case, your Wavetable should be 4096 samples long (for example, see Sine). If you would like to be able to
switch between waveforms in real time, select a Wavetable (samples file) that contains all of the 4096-sample-long
waveforms, one after another, in the sample (For example, see the samples in the MultiCycle folder which is inside
the Waves folder). The Index field can then be used to select which 4096-sample waveform you want to play.

Modulation
Select whether or not the frequency is to be modulated by the Modulator input. (Note: If the Modulator has hot values
in it, they will *not* show up in the Virtual Control Surface when this box is unchecked.)

Modulator
If Modulation has been set to frequency, then this Sound is the Modulator (otherwise it is ignored). Usually the
Modulator is another Oscillator, but a Sound can be used to modulate the Frequency.

MaxMI
This is the value of the modulation index when the Modulator is at its full amplitude.

Interpolation
The Linear box should be checked when using the Oscillator as an audio signal. If you are using it as a control
signal, you can save on processing time by checking None.

Envelope

172
This is an attenuator on the output of the Oscillator. Enter 1 (or 0 dB) for the full amplitude. For a time-varying
amplitude, paste in a Sound (such as AR, ADSR, or FunctionGenerator) or an Event Value (such as !Volume) in this
field. It is advisable to smooth the EventValue (for example !Volume smoothed) or to use a full sample rate Sound
pasted into the Envelope field. For full sample rate amplitude envelopes, erase the ’L’ that automatically appears
after the name of the pasted Sound.

PitchBend
If you use !KeyPitch in the Frequency field, !PitchBend control is automatically included so you do not need this
parameter. Otherwise, this is a deviation from the specified Frequency computed as:
actualFreq := Frequency + (Frequency * pitchBend).
The maximum pitchBend value is 2 and the minimum value is 0.

Reset
When reset is changed from a 0 to any nonzero number, the phase of the Oscillator is reset to zero. This means that
the Oscillator jumps back to the beginning of the cycle.

Formant
This number is a multiple of the Frequency (range of 1 to 511). At the minimum value, 1, you hear the fundamental
frequency of this oscillator. For higher values, you hear a filtering effect, as if a bandpass filter were sweeping at a
multiple of the Frequency. For numbers greater than 1, the Oscillator reads through its wavetable at a faster rate than
Frequency and outputs zero until the next period starts.
If you prefer to think of this as the DutyCycle of the waveform, you can use the following expression in this field to
give yourself realtime control of the DutyCycle. (Note, !Frequency should be the same as the value that you have in
the Frequency field):
((!Duty vmax: 0.001) inverse vmin: (SignalProcessor halfSampleRate hz / !Frequency hz)) vmin: 511

Index
If you have a multicycle sample selected as the Wavetable, then this is an integer that selects which 4096-sample
waveform to play. An index of 0 selects the first waveform. If the index is less than 0, it selects the 0th waveform (the
first in the wavetable). If the index is larger than the number of waveforms within the wavetable, it selects the last
waveform in the wavetable.
If the wavetable has been set up such that the first waveform has the first harmonic, the second waveform has the
first two harmonics, the third waveform has the first three harmonics, etc., then
(SignalProcessor halfSampleRate hz / !KeyPitch hz) - 1
will select the waveform with the largest number of harmonics that will not alias.
When you change the Index, the Oscillator continues reading at the current phase in the new cycle. If the waveforms
are similar, you should be able to change the Index mid-Cycle without introducing a click due to the discontinuity.

FromMemoryWriter
Check FromMemoryWriter when the wavetable does not come from a disk file but is recorded by a MemoryWriter in
real time. (To improve the scheduling of the MemoryWriter and this Sound, the MemoryWriter should start at the
same time as this Sound, either as part of a Mixer or on another track of the Timeline).

173
OscillatorBank
Additive Synthesis Category
Generates the sum of several oscillators on the specified waveform, each with its own frequency and amplitude
envelope.

NbrOscillators
This is the number of oscillators that will be added together. Each oscillator is associated with a partial from the
time-varying spectrum given in the Spectrum field.

BankSize
This is the number of oscillators that will be synthesized at a time. This is important since the signal processor has a
maximum number of oscillators it can add at a single time (typically 50-56).
For instance, if NbrOscillators is 100 and BankSize is 50, this Sound will add up two groups of 50 oscillators.

Wavetable
This is the waveform used by all the oscillators.

Spectrum
The Spectrum controls the amplitude and frequency envelopes for each oscillator. This should come from one of the
Sounds in the Spectral Sources or Spectral Modifiers categories of the System Prototypes.

174
OscilloscopeDisplay
Visual Displays Category
Displays the Input as an oscilloscope trace on the Virtual control surface. Use the buttons along the bottom of the
display to zoom in or out in the time or amplitude dimensions. The value at the cursor point (where the red cross
hairs meet) is displayed in the upper left. Clicking on the display freezes it so you can hold down the mouse over
specific points to read their exact values.
An Oscilloscope can be placed anywhere along the signal flow path; it does not necessarily have to be the final
Sound in a signal flow path (it could, for example, be displaying the Input to the Sound that is actually being heard). If
a Sound has more than one Oscilloscope within it, all the traces will be displayed side by side in the Virtual control
surface.
You can also view the oscilloscope trace of any Sound by selecting the Sound and then choosing Oscilloscope from
the Info menu. (But the menu method only allows you to view one Sound at a time on the Oscilloscope and does not
allow you to adjust the trigger frequency for a stable display).

Input
The amplitude of this Sound is continuously displayed on the Virtual control surface, as if by an oscilloscope.

Trigger
In order to see a picture of the waveform that does not drift across the screen, use a PulseTrain here, and set the
repetition period of the pulses to equal the inverse of the Input’s frequency. That way, the Oscilloscope is triggered
once every Input period, and you will see a single period of the Input in the display window.

175
Output4
Outputs Category
This Sound routes the four input Sounds to the four output channels of the signal processor.

Out1
This Sound is routed to output channel 1 of the signal processor.

Out2
This Sound is routed to output channel 2 of the signal processor.

Out3
This Sound is routed to output channel 3 of the signal processor.

Out4
This Sound is routed to output channel 4 of the signal processor.

176
Output8
Outputs Category
This Sound routes the eight input Sounds to the eight output channels of the signal processor.

Out1
This Sound is routed to output channel 1 of the signal processor.

Out2
This Sound is routed to output channel 2 of the signal processor.

Out3
This Sound is routed to output channel 3 of the signal processor.

Out4
This Sound is routed to output channel 4 of the signal processor.

Out5
This Sound is routed to output channel 5 of the signal processor.

Out6
This Sound is routed to output channel 6 of the signal processor.

Out7
This Sound is routed to output channel 7 of the signal processor.

Out8
This Sound is routed to output channel 8 of the signal processor.

177
OverlappingMixer
Mixing Category
Overlaps the start times of its Inputs by the specified OverlapTime.

Inputs
These Sounds will be played one after another, overlapping with each other by the amount of time specified in
OverlapTime. The ordering is determined by their position in the Inputs field: left to right and top to bottom.

OverlapTime
This is the amount of time that each Input overlaps with the previous Input. Be sure to include the units of time.

Left
This controls the level of the left input channel. The maximum value is 1 and the minimum is -1. The left channel of
the input is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right input channel. The maximum value is 1 and the minimum is -1. The right channel
of the input is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

178
Pan
Panning Category
Places the Input between the left and right speakers and optionally attenuates the overall output.

Input
This is the signal being attenuated and positioned between the speakers.

Pan
A Pan value of 0 places the sound entirely in the left speaker, and a Pan value of 1 places it entirely in the right.
Values inbetween those extremes make the Input source appear as if it were placed somewhere inbetween the two
speakers.

Scale
Attenuates the Input.

Type
When Power is selected, the Input is about as loud for Pan = 0.5 as it is for Pan = 0 and Pan = 1. When Linear is
selected, the Input is softer at the midpoint than it is at the two extremes.

179
ParameterTransformer
Scripts Category
Parameters of the Input can be altered or set by statements made in the Transformation field (for full details, see the
corresponding tutorial and chapter in the manual). All transformations take place symbolically (in other words, these
are not signal processing transformations but transformations to the parameters fields *before* the Input is compiled
and loaded into the signal processor--before it has started generating sound).

Input
The parameters of this Sound (and, in turn, any inputs *it* might have) can be set or modified by statements in the
Transformation field.

Transformation
Here are two examples of simple modifications. For examples of more elaborate transformations, see the manual.
To set the all parameters named "frequency" to 400 hz, type:
snd frequency: 400 hz.
To double all frequencies, type:
snd frequency isNil ifFalse: [snd frequency: snd frequency * 2].

180
PartialOscillatorBank
Additive Synthesis Category
Generates the sum of several oscillators on the specified waveform, each with its own frequency and amplitude
envelope.

Spectrum
This should be either a SpectralShape or an SOSAnalysis. The Spectrum controls the amplitude and frequency
envelopes for each oscillator.

CascadeInput
The left channel of this input is mixed with the outputs of the oscillators.

NbrOscillators
This is the number of oscillators that will be added together. Each oscillator is associated with a partial from the Input
analysis, starting from the partial number associated with the firstOscillator.

FirstOscillator
This is the partial number to be resynthesized by the first oscillator in the bank. For example, set this to 1 if you want
the lowest frequency oscillator to correspond to the fundamental. If you want to skip the fundamental, set this to 2.
If you are mixing two or more OscillatorBanks, they can cover different portions of the spectrum. For instance, one
OscillatorBank might have 1 as its FirstPartial and 10 as the number of partials; the next OscillatorBank might have
11 as its FirstPartial and 10 as its number of partials; and a third might have 21 as its FirstPartial and 10 as its
number of partials.

Wavetable
This is the waveform used by all the oscillators.

181
PeakDetector
Live Capture & Tracking Category
Outputs an amplitude envelope for its Input by tracking changes in the Input’s absolute value. Responds to increases
in the Input amplitude within the specified AttackTime and responds to decreases in Input amplitude within the
specified ReleaseTime. Scale is an attenuator on the Input amplitude.

Input
This is the Sound whose amplitude is being tracked.

AttackTime
This is the shortest attack time that will be tracked by the PeakDetector. You are specifying that any faster increases
in amplitude should be smoothed over.

ReleaseTime
This is the shortest decay time that will be tracked by the PeakDetector. You are specifying that any faster decreases
in amplitude should be smoothed over.

Scale
This is an attenuator on the input.

182
PhaseShiftBy90
Math Category
This is a combination of two filters tuned to do a 90 degree phase shift between the left and right channels at the
specified Frequency (by shifting one channel backwards 45 degrees and the other channel forward 45 degrees).
Expand the prototype SingleSideBandRM for an example of how to use this Sound as the Envelope of a
QuadratureOscillator to do single side band ring modulation on Input.
NOTE: These filters are very sensitive to Input amplitude. Try attenuating the Input amplitude by 0.05 and gradually
adjusting it upwards until you hear distortion and then backing it off a little. (It helps to also look at the output of the
PhaseShiftBy90 on the Info Oscilloscope as you adjust the Input amplitude).

Frequency
This is the only frequency at which the 90 degree phase shift occurs. Frequency can be specified in units of pitch or
frequency. The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Input
This is the Sound whose left and right channels will shifted 90 degrees out of phase from each other (but only at the
specified Frequency).

183
Prefixer
Replicators & Prefixers Category
Adds an ID as a prefix or suffix to hot values occurring in parameter fields to the left of this Sound. By default, the ID
is the name of the Input but you can change it to an identifier of your choosing by editing the ID field. A Prefixer can
be useful when you plan to combine two or more Sounds having several hot values and you’d like to differentiate their
controllers. (If you combine two or more Sounds that do NOT have Prefixers, their controls are intermingled in the
VCS and any parameters with shared names are controlled by the same controller.)
The VCS sorts the controllers alphabetically by name, so use a prefix if you’d like to group the Input’s controls
together; use a suffix if you prefer to group the controllers by function (for example, all Amp controls) rather than
grouping them by the Sound in which they occur.

Input
Any hot values in the parameter fields of this Sound (and any Sounds to its left) will be prefixed or suffixed by the
name of this Sound or an ID of your choosing.

Id
Enter a string for identifying the hot values to the left of this Sound. To use the name of the Input as the ID, leave this
field blank.

Suffix
Check this box if you’d like the identifier to be added to the end of the controller name rather than prefixed to the
beginning of the controller name. Bear in mind that the automatic layout of the VCS is alphabetical, so controls
sharing the same prefix will be automatically grouped together (for example !Snd1_Dur !Snd1_Freq), whereas, if you
add a suffix ID, controls of the same *type* will be automatically grouped together (for example !Dur_snd1
!Dur_snd2).

DoNotChange
Enter any hot values that should NOT bear the ID prefix of suffix. For example, if there are hot values that should be
SHARED between this Sound and any other Sounds you combine with it.

184
PresenceFilter
Filters Category
Acts as a band pass or band reject (notch) filter. Specify a center frequency, a bandwidth, and indicate the boost or
cut amount in units of dB (negative values are cuts, positive values boosts).

Input
This is the Sound to be filtered.

CenterFreq
The center of the boost or cut region of the spectrum.

Bandwidth
The width of the boost or cut region of the spectrum.

BoostOrCut
Indicate the amount of boost or cut in units of dB. Negative values indicate a cut, positive values a boost.

Scale
Attenuator on the input.

185
PresetSpace
Scripts Category
The X, Y, and Z parameters select one of the first 8 presets of the Input Sound. It functions as a master control over
all the hot values in the Input Sound. Imagine the presets arranged on the corners of a cube; the values of X, Y, and
Z determine where you are within that cube. If you are in between presets, the values of the preset parameters will
be interpolated. Check ShowPresetValues if you want the Input’s controllers to be displayed in the Virtual Control
Surface. Uncheck it if you want to hide those controllers and display the X, Y, and Z controls only.
NB: You must play the input to this Sound at least once before this Sound can capture its presets!

Input
NB: Before the PresetSpace can capture the presets of this Sound it’s necessary that you play it at least once on its
own before playing the PresetSpace! The first 8 presets found in this Sound are arranged onto the corners of a cube
in X, then Y, then Z order: (0,0,0) (1,0,0) (0,1,0) (0,1,1) (1,0,0) (1,0,1) (1,1,0) (1,1,1). The X, Y, and Z parameters
travels through the space of preset values, interpolating when in between one preset and the next.

X
This expression determines the X coordinate of the position within the cube of presets. It is used to interpolate
between the values of the parameters saved in the presets of the Input.

Y
This expression determines the Y coordinate of the position within the cube of presets. It is used to interpolate
between the values of the parameters saved in the presets of the Input.

Z
This expression determines the Z coordinate of the position within the cube of presets. It is used to interpolate
between the values of the parameters saved in the presets of the Input.

ShowPresetValues
Check this box to show the Input’s preset values in the Virtual Control Surface. (They are under control of the X, Y,
and Z parameters, so you can no longer change them directly in the VCS).

186
Product
Math Category
Outputs the product of its Inputs. If there are two, audio frequency inputs, this does ring modulation. If one of the
Inputs changes at sub-audio frequencies and the other is at audio frequencies, the effect will be like applying an
amplitude envelope to the Input that is at audio frequencies.

Inputs
The output of the Product is the product of all the Sounds in this field.

187
PsiPlayer
Tau & Psi Category
Play a PSI file with time, frequency, or formant scaling.

PsiFileName
Enter the name of a Psi file or open the File Dialog by clicking the disk icon. To view and edit the Psi file, Ctrl+Click
on the disk icon. You can find example Psi files in the Kyma/Tau files/psi folder. To create your own Psi file, use
File>New to create a new Tau editor; then drag any Sound or samples file from the Sound Browser into the Tau editor
and save the analysis as a Psi file.

FormantScale
For no change in the formant, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the formant, for
example:
!ScaleFormant * 1.5 + 0.5.
NB: FormantScale should always be larger than 0. A FormantScale of 0 results in a silent output and cannot be
restarted without replaying the Sound (Ctrl+R).

AmpScale
Range: (0, 1)
To use the original amplitude, enter 1 or ’default’. Otherwise, enter a fixed or hot value for scaling the amplitude
envelope, for example:
!Amp
!KeyVelocity
!Level

OnDuration
Enter the desired duration or use ’default’ for the original duration of the file. For example:
default * !DurScale
3s
!BPM bpm s
!Duration s

Frequency
For the original frequency envelope, use ’default’. You can also do arithmetic on the default envelope, for example:
default nn + !Interval nn
default * !ScaleFreq
To override the default envelope, specify a frequency in units of pitch or frequency. The following are all ways to
specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)

188
0.00227273 s (inverse of a period at 44.1 kHz sample rate)
Range: (0, (SignalProcessor halfSampleRate))
The following are examples of how to control the frequency using MIDI or the virtual control surface:
!KeyPitch (key number in units of nn plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Range * 12 nn) (continuous controller from 4 c to 4 a)
Here is an example random pitch expression:
0.2 s randExp s random * !Interval + !LogFreq nn

Gate
Gate Result
----------------
1 Play the Psi file, loop according to LoopMode
0 Stop playing
!Gate Live control of the gate from VirtualControlSurface or MIDI
!KeyDown MIDI keyboard or DAW control over triggering, sustaining, looping

LoopMode
LoopMode Result
------------------
None: No looping (use Gate to retrigger)
Live: Loop using live controls in LoopStart, LoopEnd, Start & End
TimeIndex: TimeIndex controls the play position
Markers: Loop according to markers saved in PsiFile

LoopStart
Range: (0,1)
When LoopMode is set to Live, LoopStart controls the relative starting point of the loop within the files. The range of
values is (0,1) where 0 corresponds to the beginnings of the files and 1 corresponds with the ends of the files. If the
value of StartLoop is larger than the value of EndLoop, the files are played backwards.
To control the start time in seconds, use an expression of the form:
!t s / (’[Link]’ psiFileDuration)
where !t is the time in seconds and where ’[Link]’ is same as the name of the file in the PsiFileName field.

LoopEnd
Range: (0,1)
When LoopMode is set to Live, LoopEnd controls the relative end point of the loop within the files. The range of
values is (0,1) where 0 corresponds to the beginnings of the files and 1 corresponds with the ends of the files. If the
value of StartLoop is larger than the value of EndLoop, the files are played backwards.
To control the start time in seconds, use an expression of the form:
!t s / (’[Link]’ psiFileDuration)
where !t is the time in seconds and where ’[Link]’ is same as the name of the file in the PsiFileName field.

Start
Range: (0,1)

189
Start is the point in the file where playback begins on a retrigger.
To control the start time in seconds, use an expression of the form:
!t s / (’[Link]’ psiFileDuration)
where !t is the time in seconds and where ’[Link]’ is same as the name of the file in the PsiFileName field.

End
Range: (0,1)
End is the point in the files where playback stops.
To control the start time in seconds, use an expression of the form:
!t s / (’[Link]’ psiFileDuration)
where !t is the time in seconds and where ’[Link]’ is same as the name of the file in the PsiFileName field.

ScaleAtkDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the attack portion of the Psi
file, for example:
Value Result
----------------------
1 Attack has original duration
0.5 Attack is half as long as original
2 Attack takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the attack

ScaleSusDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the looped portion of the Psi
file, for example:
Value Result
----------------------
1 Loop has original duration
0.5 Loop is played twice as fast
2 Loop is takes twice as long
!ScaleLoop Loop duration is scaled by a fader

ScaleRelDur
When LoopMode is set to Markers, use this field to compress or expand the duration of the release portion of the Psi
file, for example:
Value Result
----------------------
1 Release has original duration
0.5 Release is half as long as original
2 Release takes twice as long as original
(1 - !KeyVelocity) The faster the key is depressed, the shorter the release time

TimeIndex

190
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginning of the file, 0 corresponds to the middle of the file and 1
correspond to the end of the file. The value in the TimeIndex field corresponds with the playback position in the files.
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfPsiFile’ psiFileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfPsiFile’ psiFileDuration) * 2 - 1

Cost
The Cost roughly corresponds to the number of octaves up you plan to shift the original frequency (and/or the value of
Formant). For the maximum range of frequency, formant, and rate scaling, set the Cost value to 4 (or, on the
Capybara, 3). For playback with rate scaling and small frequency/formant changes, select a Cost of 2 for more
efficiency. For playback with time stretching/compression only, select a Cost value of 1 for even greater efficiency.
The higher the value of Cost, the more processing power is required so select the smallest Cost value for which the
sound quality is still maintained for high frequencies and formant shifts.

Unvoiced
When checked, you hear ONLY the unvoiced segments of the file.

WarpVoicedOnly
When this box is checked, the file playback will be warped during voiced segments ONLY. Unvoiced segments will
play back unmodified. In other words, if you scale the frequency, formant, amplitude, or rate, you will affect the
voiced segments of the file ONLY.

Format
Psi files can be mono, split stereo, or split surround. For example, if you select Stereo, the PsiPlayer assumes there
are other files in the same folder as PsiFileName and that they have the same name but with a different channel
extension. If a corresponding file is not found, the result is silent. The file extensions are:
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

TimeScaling
Check the TimeScaling box for higher quality time stretching. If you aren’t doing time-scaling, uncheck the box to
require less computation.

191
PulseGenerator
Noise & Pulse Trains Category
For use as an audio signal (for a control signal pulse, please see PulseTrain). Generates a bandlimited square wave
of the specified DutyCycle. The square wave always has a zero DC offset regardless of the pulse width setting; this
means that the minimum and maximum of the waveform will change as the pulse width is changed.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Modulation
Select whether or not there should be frequency modulation.

Modulator
If Modulation has been set to frequency, then this Sound is the Modulator (otherwise it is ignored).

MaxMI
When Modulation is set to frequency, this is the value of the modulation index when the Modulator is at its full
amplitude.

Interpolation
Choose linear if you would like to interpolate between the values read from the wavetable.

Envelope
This is an attenuator on the output. Enter 1 (or 0 dB) for the full amplitude. For a time-varying amplitude, paste in a
Sound (such as AR, ADSR, or FunctionGenerator) or an Event Value (such as !Volume) in this field.

DutyCycle
The proportion of each period that the waveform is in the "up" portion of its cycle. (If you add up all the sample points
in a cycle, the sum is zero, no matter what the duty cycle; when the duty cycle is 0.5 the waveform is above zero half
the time and below zero for the other half cycle.).

Reset
When reset is nonzero, it resets the phase to zero. In other words, it sets the wavetable index to its initial position.

192
PulseTrain
Noise & Pulse Trains Category
For use as a control signal (for a band-limited, audio pulse, please see PulseGenerator). If VariableDutyCycle is
unchecked, then PulseTrain’s value is 1 for the first sample of each period and zero for the remainder of each period.
If VariableDutyCycle is checked, then DutyCycle controls how much of each period’s is spent outputting 1 and how
much is spent outputting 0.

Period
The amount of time for each period.
If you want a period corresponding to a certain frequency, for example 440 hz, use:
440 hz inverse

VariableDutyCycle
Check here to control the percentage of the period that the output should be one. If unchecked, the output will be one
for eactly one sample per period.

DutyCycle
Enter a value between 0 and 1, where 0 means that the output is never 1, 0.5 means that it is 1 for half of each
period, and 1 means that it is 1 for all of each period.

Gate
When Gate positive, the PulseTrain will output pulses; when zero or negative, the PulseTrain will output zero.
The first pulse will be output when the Gate becomes positive, providing a way to trigger the PulseTrain.

193
QuadOscillator
Oscillators Category
Multiplies the left channel of Envelope by a sine wave oscillator and the right channel of Envelope by a cosine
oscillator. The output is the sum of the ring-modulated left and right channels. If the Envelope has the same signal
but 90 degrees out of phase in the left and right channels, the lower sideband will be cancelled out, leaving only the
upper sideband (the sum of the frequencies of the Envelope and the QuadratureOscillator).
Expand the SingleSideBandRM prototype for an example of how to use this as a nonharmonic frequency shifter.

Frequency
This is the frequency of the sine and cosine oscillators. The frequency can be specified in units of pitch or frequency.
The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Envelope
The left channel of Envelope will be multiplied by a sine and the right channel by a cosine. If this Sound has gone
through a PhaseShiftBy90 (forcing its left and right channels to be 90 degrees out of phase with each other at a
specified frequency), then putting it through the QuadratureOscillator will perform single side band ring modulation. In
this configuration, only the upper sideband is heard. To get the lower sideband alone, use a negative frequency for
the QuadratureOscillator (or else swap the left and right channels of Envelope using a ChannelCrosser).

194
Replicator
Replicators & Prefixers Category
Use Replicator to automatically create multiple Sounds based on a single Sound as a template. Each copy can have
different parameter values based on its ?VoiceNumber and the ?NumberVoices. And each copy can have
independent controls in the VCS.
Creates a mixer of Number copies of the Input. Each copy can have its own independent parameter controls, since
every hot value or green variable in the Input can have an optional prefix and/or suffix added to its name. If
incrementPrefix (and/or Suffix) is checked, then any numbers in the Prefix or Suffix string is incremented by 1 for
each copy, starting with the original number.
To simply add a prefix or suffix to the Input, set Number to 1. To create multiple copies of the Input, each with its own
controls, set Number to the number of Sounds desired.
For constant parameters (i.e. parameter fields with white backgrounds where a hot value cannot be used because the
values are computed before the Sound starts playing), you can use ?VoiceNumber to compute different values for
each copy of the Input. ?VoiceNumber ranges from 1 to the Number of copies.
NB: If the Input contains MIDI key events (e.g. !KeyDown), adding a prefix or suffix will change them into regular
continuous controller events, not controllable from a keyboard. This can be useful if you want to change a
keyboard-controlled Sound to one controlled from the VCS. For multiple copies of Keyboard-controlled Sounds, use
MIDIVoice instead.

ReplicatedSound
This Sound is used as a template for creating Number copies. Any hot values or green variables in its parameter
fields will have the prefix and/or suffix strings added to its name.

SharedSounds
These Sounds (and their inputs) are *not* duplicated by the Replicator. If you do *not* want the copies to share any
inputs (in other words, if you want to copy *all* Sounds in the chain to the left of the Replicator), simply leave a
ConstantSound in this field. To replicate the chain between the SharedInputs and the Replicator, hold down the Ctrl
key and drag the SharedInputs into this field.

Number
The total number of Sounds to create. It should be an integer value of at least 1 but can be as large as the number
as you can play in real time (which depends on the Input ).

Prefix
Whatever you type here within single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or
green variable name in the copies. If the prefix includes a number and IncrementPrefix is checked, this number is
incremented in each copy. Uncheck IncrementPrefix if you want the same prefix added to all controls and green
variables. To append a different prefix to each copy, enter one prefix for each copy with a space separating each
prefix from the next (for example, ’hi’ ’mid’ ’lo’). Leave this field blank if you do not want to add any prefixes. If there
are fewer prefixes than copies created by the Replicator, the last prefix will be repeated (and, if it includes a numeral
and you have checked the IncrementPrefix box, each prefix will include a unique number).

Suffix
Whatever you type here within single quotes (for example ’-1’) will be tacked onto the end of each hot value or green
variable name in the copies. If a suffix includes a number and IncrementSuffix is checked, this number is
incremented in each copy. Uncheck IncrementSuffix if you want the same suffix added to all controls and green

195
variables. To add a different suffix to the hot values of each copy, enter a suffix for each Sound copy with a space
separating one from the next (for example, ’-hi’ ’-mid’ ’-lo_1’). Leave this field blank if you do not want to add any
suffixes. If there are fewer IncrementSuffix than copies created by the Replicator, the last IncrementSuffix will be
repeated (and, if it includes a numeral and you have checked the IncrementSuffix box, each suffix will include a
unique number).

IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

DoNotChange
This is an Array field expecting a list of hot values that are NOT to be changed by the replication (no suffix or prefix
added). Hot values in this list will be shared among all of the replicated Sounds. If either IncrementPrefix or
IncrementSuffix is checked, hot values NOT in this list will be numbered and will be unique to each replicated Sound.

Left
Output attenuator for the left channel.

Right
Output attenuator for the right channel.

196
REResonator
Filters Category
This is a time-varying filter whose coefficients have been derived by analyzing a digital recording (a "sample") using
the RE Analysis Tool. RE (resonator/exciter) analysis assumes that the sound was produced by an excitation signal
feeding into a resonator. This Sound is the resonator and its input is the excitation.
The most striking results occur when the analyzed signal is from a source whose resonances change dramatically
over time (e.g. human speech, singing, instruments like the didgeridoo, mouth harp, or tabla). For analyses of
instruments or other sound sources that do not change shape very much over time, the REResonator will sound like a
fixed, unchanging filter.

Input
This is the new excitation that you are substituting for the original excitation. Be sure to use extreme attenuation of
your input.
Broadband signals such as noise or pulse trains work best as inputs, because they cover more of the spectrum and
will be able to excite all the resonances of the filter.

Wavetable
This is a table of time-varying filter coefficents produced by the RE analysis. Use the RE Analysis Tool to create your
own sets of filter coefficients.

TimeIndex
This determines where to read from the sequence of filter coefficients. A value of -1 reads the beginning set of
coefficients, and a value of 1 reads the last set of coefficients. A FunctionGenerator whose wavetable is a FullRamp
will go through the coefficients in time order. To go through the coefficients at the original rate, set the duration of the
FunctionGenerator to be the same as the duration of the original, analyzed sample. Use longer or shorter durations
to stretch or compress time.

197
ReverbSection
Reverb, Delay, Feedback Category
You can use combinations of these Sounds and others to build your own reverberation algorithms. Each element has
its own Delay, ScaleFactor, and DecayTime, the time it takes for the delayed and fed-back input to die away 60 dB
below its initial level.

Type
Choose between comb and allpass filters. Both comb and allpass are delays with feedback. Allpass also adds some
of the direct signal to the output in order to make the long term frequency response flat.

Input
This signal is delayed and added to itself.

Scale
An attenuation factor on the Input (where 1 is full amplitude and 0 is completely attenuated so there is no more Input).

DecayTime
This is the time it takes for the signal to die away to 60 dB below its original level.

Delay
The maximum delay time. The proportion of this time that is actually used is determined by multiplying this value by
DelayScale. Kyma needs to know the maximum possible delay in order to allocate some memory for this Sound to
use as a delay line, but the actual delay can vary over the course of the Sound from 0 s up to the value of DelayTime.

DelayScale
The proportion of DelayTime that is actually used as the delay, where 0 is no delay, and 1 is equal to the value in the
DelayTime field.

Wavetable
In almost all situations, this should be set to Private, so Kyma can allocate some unused wavetable memory to be
used as a delay time for this program. (The only time you would want to name this wavetable is if you would like
multiple delays or resonators to share a single delay line. In that case, you would type a name for the wavetable and
make sure that the other delays use the same name for their wavetables.)

Prezero
Check this box to start with an empty delay line when this program starts. If Prezero is not checked, the delay line
may have garbage in it from previous programs. This can have interesting, if unpredictable, effects.

Interpolation
When Linear is selected, changes to DelayScale will be interpolated, causing smoother changes to the delay.
When None is selected, changes to DelayScale are not interpolated, resulting in zipper noise.
For fixed delays, it is better to select None, since that uses less DSP resources.

SmoothDelayChanges

198
Checking this box causes the delay time to change slowly to the desired delay. Unchecking this box causes the delay
time to change immediately to the desired delay.
On Capybara-66 and earlier models, this setting has no effect.

199
RMSSquared
Live Capture & Tracking Category
This can be used to get an estimate of the amplitude envelope of the Input. The output is
input^2 * timeConst + prev * (1 - timeConst)
This is the root mean square of the input without the final square root at the end.

Input
This is the Sound whose amplitude is tracked.

TimeConstant
This controls the response time. Longer timeConstants result in smoother outputs at a cost of losing some of the
detail in the attacks. Short timeConstants result in outputs that respond more immediately to attack transients but that
may not be as smooth for the steady state portions. For a constant input at maximum amplitude, this is the time
required for the output to reach 60% of the full output amplitude. (Note that the output may never reach the maximum
possible amplitude since it is the average of the squares of the amplitudes).

Scale
Attenuates the input amplitude.

200
RunningMax
Math Category
Output is the maximum of all Input amplitudes seen so far, from the start of the Sound until the current time. To reset
the maximum to zero and restart on calculating the running max, set Reset to a nonzero value. By the end of the
Sound, if there have been no resets, the value is the maximum of all the Input’s sample points.
(For the instantaneous maximum value of two inputs, see the Prototype called ’MAX’).

Input
This is the Sound whose maximum amplitude over its entire duration is being computed.

Reset
When this Sound becomes nonzero, it resets the running maximum.

201
RunningMin
Math Category
The output of this Sound is the minimum amplitude of its Input as seen so far. Whenever Reset is nonzero, the
current minimum is thrown away, and the process starts over again. If Reset is always zero, the final value of this
Sound is the minimum of all the output values of its Input.
(For the instantaneous minium output value of two inputs, see the Prototype called ’MIN’).

Input
This is the Sound whose minimum amplitude is being computed.

Reset
Whenever this Sound is nonzero, the min is reset to the maximumAmplitude and the process of keeping track of the
minimum seen so far begins again.

202
Sample
Sample playback Category
Plays the specified sample from the wavetable memory of the signal processor. If there is a loop stored in the header
of the sample file or if you have SetLoop checked, the sample will play once up through the LoopEnd; then it will loop
back to LoopStart and continue looping for as long as Gate has a positive value; when Gate returns to zero, the
sample will play on through LoopEnd to the end of the sample file.
If the frequency is negative, the sample will be played backwards (except on Capybara-66).

Frequency
Use default here if you want the Frequency to equal the pitch of the recorded sample. The frequency can be
specified in units of pitch or frequency. Different frequencies are obtained by changing the size of the increment
through the recorded sample. If the frequency is negative, the sample will be played backwards (except on
Capybara-66). The following are all ways to specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Gate
Enter a 1 in this field to play through the sample exactly once. If you use an EventValue (for example, !KeyDown) in
this field, the Sound can be retriggered as often as you like.
When Gate becomes positive, the sample plays; when Gate becomes zero, it fades to zero amplitude in ReleaseTime
seconds (so specify a long ReleaseTime if you want to ensure that the sample plays to the end once released).
If the sample file has loop points stored in its header, Kyma will loop the sample for as long as Gate remains positive
(for example, as long as the MIDI key is held down).

Sample
Choose a sample from among those stored in the Wavetables folder or directory. When you compile/load/start, Kyma
will read the sample from the hard disk of the host computer and load it into the wavetable memory (the sample RAM)
of the signal processor. This Sound then reads the sample from the memory of the signal processor, not directly off
the disk.

SetLoop
Check this box if you would like to set the loop points using the LoopStart and LoopEnd parameter fields.

LoopStart
When SetLoop is checked, this is the start point of the loop (otherwise it is ignored). Enter a value in the range from 0
to 1, where 0 is the beginning of the sample and 1 is the end of the sample. In other words, this is the proportion of
the total sample duration when the start point should occur. (To compute the exact time within the sample where the

203
start point occurs, multiply LoopStart’s value by the total duration of the sample. For example, if your sample is 5
seconds long and LoopStart is set to 0.2, then the beginning of the loop is 1 second into the sample.)

LoopEnd
When SetLoop is checked, this is the end point of the loop (otherwise it is ignored). Enter a value in the range from 0
to 1, where 0 is the beginning of the sample and 1 is the end of the sample. In other words, this is the proportion of
the total sample duration when the end point should occur. (To compute the exact time within the sample where the
end point of the loop occurs, multiply LoopEnd’s value by the total duration of the sample. For example, if your
sample is 5 seconds long and LoopEnd is set to 0.4, then the end of the loop occurs at 2 seconds into the sample.)

LoopFade
When checked, this puts a quick fade in at the beginning of a loop and a quick fade out at the end to help minimize
any clicks due to discontinuities in the waveform between the beginning and end of the looped section.

Start
This is the start point of playback within the sample. Enter a value in the range from 0 to 1, where 0 is the beginning
of the sample and 1 is the end of the sample. In other words, this is the proportion of the total sample duration when
the start point should occur. (To compute the exact time within the sample where the start point occurs, multiply
Start’s value by the total duration of the sample. For example, if your sample is 5 seconds long and Start is set to 0.2,
then the beginning of the playback is 1 second into the sample.)

End
This is the end point of the sample playback. Enter a value in the range from 0 to 1, where 0 is the beginning of the
sample and 1 is the end of the sample. In other words, this is the proportion of the total sample duration when the
end should occur. (To compute the exact time within the sample where the end occurs, multiply End’s value by the
total duration of the sample. For example, if your sample is 5 seconds long and End is set to 0.4, then the end of the
playback occurs at 2 seconds into the sample.)

FromMemoryWriter
Check FromMemoryWriter when the wavetable does not come from a disk file but is recorded by a MemoryWriter in
real time.

AttackTime
Duration of the attack of an envelope applied to the sample.

ReleaseTime
Duration of the release of an envelope applied to the sample.

Scale
Overall level of the sample.

204
SampleAndHold
Math Category
Every HoldTime seconds, the SampleAndHold reads and holds onto the current value of its Input for the duration
specified in HoldTime. While it is holding onto this value, it ignores any changes in its Input’s value. When HoldTime
has expired, the SampleAndHold looks at its Input’s value again, and holds onto THAT value for HoldTime and so on.
You can use SampleAndHold to change an audio signal into a slowly changing, discrete-valued control signal. For
example, try pasting this Sound into another Sound’s Frequency field, multiplying it by the desired range of
frequencies and adding an offset frequency:
4 c + ([SampleAndHold] * 12 nn)
where [SampleAndHold] is a this Sound copied and pasted into another Sound’s Frequency field.

Input
This is the Sound whose output is periodically sampled by the SampleAndHold.

HoldTime
The amount of time that each sampled value is held before the Input is sampled again. If you think of the
SampleAndHold as downsampling its input, then this is the period of the new, lower sample rate.

OffsetTime
This is the amount of time to initially wait before starting the process of sampling and holding.

205
SampleCloud
Sample playback Category
Generates a cloud of grains, each using GrainEnv as an amplitude envelope on a short segment of sound read from
the specified Sample at a point in the sample given by the TimeIndex +/- TimeIndexJitter. Density is the likelihood
that a new grain will start up on each sample (given that the number of simultaneous grains currently playing does not
exceed MaxGrains). Amplitude controls an amplitude envelope over the *entire* cloud (each individual grain
amplitude is controlled by GrainEnv). Pan, Frequency, and GrainDur control the stereo position of the grain, the
frequency (or rate at which the grain reads through its waveform), and the duration of the grain envelope. Each of
these parameter values is multiplied by its corresponding jitter control which is (1 + ( JitterControl * a uniform random
number between -1 and 1)). Thus, each parameter value can be surrounded by a cloud of random values in a range
from 0 to twice the parameters center value. A new random number is generated on each sample, and each
parameter plus any random deviation is sampled once at the beginning of the grain and held for the duration of that
grain.

Sample
Enter the name of a MONO sample file or click the disk icon to choose a file from the file dialog. This is the source
material for each of the short duration grains.

GrainEnv
This is the shape of the amplitude envelope on each grain. The wavetables in the Windows category make the
classic, smooth grain envelopes. Some of the shapes in Impulse Responses also give interesting results.

MaxGrains
This is the maximum number of simultaneous grains. The smaller this number, the less computational power the
SampleCloud requires (but the less dense the texture you can generate). For even denser textures, put more than
one SampleCloud into a Mixer, and give each cloud a different Seed value.
At SR = 44.1kHz, you should be able to get approximately 28 simultaneous grains when Interpolation is None, and
around 20 simultaneous grains when Interpolation is Linear.

Amplitude
This is an overall level applied to the entire cloud. Paste an envelope generator into this field to give an overall
envelope to the cloud.

Density
Small Density values result in a sparse texture; large Density values generate a dense texture. This controls the
average number of new grains starting up at any given point in time.

GrainDur
This is the duration of each individual grain. If Interpolation = None, the maximum grain duration is 1 s. For longer
grain durations, set Interpolation to Linear.

GrainDurJitter
Adds some amount of random jitter to the grain durations. When set to 1, the durations vary randomly from 0 to twice
the specified duration. When this is set to 0, all grains will have a duration of GrainDur. In other words, the actual
grain duration for each grain is:

206
GrainDur + (<rand> * GrainDurJitter * GrainDur)
where <rand> is a random number between -1 and 1.

Pan
This is the stereo position of each new grain where 0 is hard left, 0.5 is in the middle, and 1 is hard right.

PanJitter
This is the amount of random deviation added to the pan position of each grain. The larger this number, the more
diffuse the apparent location, and the smaller the number, the more localized the sound.

Seed
This should be a number between 0 and 1. The seed provides a starting point for the random number generator, so
each different seed results in a different (but repeatable) sequence of random numbers. When adding several
SampleGrains with the same control parameters together in a Mixer, give each of them a different seed in order to
ensure that each of them has *different* random jitter added to its parameters (otherwise, they will just double each
other).

FromMemoryWriter
Check this box to granulate the live input or to granulate a sample that is being changed by a MemoryWriter as the
granulation is going on. This SampleCloud should be fed into a Mixer along with a MemoryWriter that is recording
something into the sample that you are granulating with the SampleCloud.

TimeIndex
This is a pointer into the Sample memory. -1 points to the beginning of the sample, 0 points to the middle, and 1
points to the end of the sample. Grains are selected from this point and from random positions in the neighborhood
(whose size is determined TimeIndexJitter) around this point.
To read through the sample in linear, forward time, you can use something like:
!KeyDown fullRamp: 10 s
which will scan the sample from beginning to end over the course of 10 seconds each time it receives a MIDI note
event.
To remove the element of time from the sample, set TimeIndex to a fixed position like 0 (the middle of the sample),
and increase TimeIndexJitter to its maximum value. Then grains will be chosen at random from all different time
points within the sample.

TimeIndexJitter
TimeIndex is a time point in the Sample, and TimeIndexJitter is an amount of random deviation forward or backward
in time from the one point specified TimeIndex. A TimeIndexJitter of zero means that all grains will be chosen from
the single point specified in TimeIndex; if TimeIndex = 0 and TimeIndexJitter = 1, then grains may be chosen at
random from any time point in the entire sample. The start point of a grain is (TimeIndex + (TimeIndexJitter *
random(-1,1)) clipped to the range of (-1,1).

Frequency
This parameter has no effect unless Interpolation is set to Linear. Frequency is the center value for the playback rate
of the sample. Use ’default’ to get the original frequency. To scale the original frequency, use
default * !Rate
If the frequency of the sample is stored in the samples file, you can use specific frequency values like !KeyPitch or
!Frequency hz in this field. (If you have not labelled the frequency of a sample, it will play back at its original rate
when the pitch is 60 nn (4 c), and be shifted up or down from that reference pitch when you play other pitches).
To read backwards within each grain from the TimeIndex for the GrainDur, use a negative Frequency value.

FreqJitter

207
This parameter has no effect unless Interpolation is set to Linear. Amount of frequency deviation around the value in
the Frequency field. Set FreqJitter to 0 for no frequency jitter. The actual frequency of a new grain is (Frequency *
(1 + (FreqJitter * random(-1,1))), so the range of frequencies is (0, Frequency * 2).

Interpolation
Check None only if the following are true:
File sample rate is the same as the Signal Processor sample rate
Maximum desired grain duration is 1 s or shorter
Sample frequency will not be changed
When Linear is checked, you can control the center Frequency and FreqJitter, the GrainDur can be longer than 1 s,
and you can use sample rates other than the file’s sample rate. However, you will not be able to get as many
simultaneous grains as when None is checked (MaxGrains is approximately 5/7 of what it can be when None is
checked).

208
ScaleAndOffset
Math Category
The output of this Sound is:
(Input * Scale) + Offset
This is can be useful for changing the minimum value and range of a control signal before using it to control another
Sound, as for example, in scaling or offsetting the left and right channel outputs of a SpectrumFromRAM before they
are fed into an OscillatorBank. (However, for those cases when the control signal is pasted directly into a hot
parameter field, it may be more straightforward to just use regular arithmetic to scale or offset the value in the
parameter field itself).

Input
The output of this Sound is multiplied by Scale and then the added to Offset.

LeftScale
Multiplier on the left channel. The range of allowable values is -2 to +2.

LeftOffset
Offset on the left channel. The range of allowable values is -1 to +1.

RightScale
Multiplier on the right channel. The range of allowable values is -2 to +2.

RightOffset
Offset on the right [Link] on the left channel. The range of allowable values is -1 to +1.

209
ScaleVocoder
Vocoders Category
Vocoder whose center frequencies are tuned to a base pitch and a scale.

Input
This is the source material to be filtered by the SideChain-controlled filters. This Sound is heard directly, through the
filters (whereas the SideChain is never heard directly). For example, if you want to make an animal talk, put a sample
of the animal sound here and put a sample of speech (or use a microphone) as the SideChain.
The best Inputs tend to be fairly broad band signals that have energy in each of the frequency bands covered by the
resynthesis filter bank. For example, Noise or an Oscillator on a waveform with lots of harmonics (such as Buzz128)
will work well because they generate energy over the full frequency range.

SideChain
Sometimes referred to as the "modulation", this Sound is never heard directly; it controls the amplitudes of the filters
in the bank.

TimeConstant
This determines how quickly the amplitude envelopes on the filters will respond to changes in the SideChain. For
precise, intelligible results, use values less than 0.1 s. For a more diffuse, reverberated result, use a longer
TimeConstant.

NbrBands
This is the number of band pass filters in the filter bank.

BankSize
This is the number of filters per processor. Type
default
to get the standard number of filters per processor. If you are running out of time, try reducing the default size, for
example
default * 0.75

Tonic
This is the tonic or first pitch in the scale.

Intervals
This is the interval pattern of the scale in half steps. For example, a major scale would be
0 2 4 5 7 9 11
Arithmetic expressions should be enclosed in curly braces, for example
{!SmallInterval1 rounded nn}
The scale can have any number of steps, and the steps are repeated in each octave for as many bands as you have
specified.

SideLevel

210
Controls the level of the SideChain Sound before it is fed into the analysis filters.

InputLevel
Controls the level on the input Sound before it goes through the filters.

InBandwidth
Control on the bandwidth of the filters on the Input Sound.

SideBandwidth
Control on the bandwidth of the filters on the Sidechain Sound.

Tone
A tone control where higher values emphasize higher frequencies, and lower values emphasize lower frequencies.
Rolloff determines the width of the tone control filter.

Rolloff
This controls the steepness of the edges of a weak tone control filter on the Input. Use 1 if the edges should rolloff
precipitously at LoCutoff and HiCutoff. Use smaller numbers if you would like the attenuation to start sooner and take
longer.

Gain
You can boost or cut the overall output level here.

211
Script
Scripts Category
A Script is a handy way to construct Sounds algorithmically (rather than piecing them together graphically in the
Sound editor). The constructed Sound will be a Mixer of several Inputs, each with its own start time (or TimeOffset).
A Script is like any other Sound in that it can be used as an Input to a more complex Sound; for example, a Script can
contain variables and can even be used as an Input to another Script.

Inputs
Use the script to schedule each of these Sounds at a specific time and to supply values for any variables in the
Sound’s parameters. (Script actually uses each of these Input Sounds as a template or model for creating new
instances of the Sounds with specific values at specific times. Multiple instances of a Sound can be scheduled from
the script by specifying simultaneous start times or overlapping durations.)

Script
The script supplies start times for the Sounds in the Inputs field and, optionally, sets the values of any variable
parameters. To specify an event in the script, type:
<name of an Input> start: <aTime in s or samp> {<variableParameterName>: <aValue>}.
In other words, type the name of an Input Sound, a space, the word "start" followed by a colon and then a space, a
start time followed by units of samp or s or beats, and then any number of <parameter: value> pairs followed by a
period. The <parameter: value> pairs consist of the name of a variable in the Input, a colon, a space, and then a
value for that variable. To specify the length of a beat, assign the desired metronome setting to the variable MM. If an
Input takes another Sound as an argument, you can supply it from the script as a parenthesized event with no start
time.
Any Smalltalk expression can appear in the script, including temporary variable declarations and control structures
like loops.
See the manual for more details and examples.

Left
This controls the level of the left output channel. The maximum value is 1 and the minimum is -1. The left channel of
the output is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right output channel. The maximum value is 1 and the minimum is -1. The right channel
of the output is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)

212
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

213
SelectableAudioInput
Selectable Category
The output of this Sound is the audio input channel specified in the Channel parameter field. This Sound lets you
select (in real time) from among all available input channels.

Channel
An integer in the range from 1 to the number of input channels. You can change this while the Sound is playing.
Note: You can change the number of inputs shown on the fader by unlocking the Virtual Control Surface,
double-clicking the fader, and changing its range in the VCS Editor.

214
SelectableAudioOutput
Selectable Category
Routes the mono (or the left channel of the) Input Sound to the output channel specified in the Channel parameter.

Channel
An integer in the range from 1 to the number of output channels. You can change this while the Sound is playing.
NOTE: For random channel selection, set this field to a hot value (for example, !Channel), use a
SoundToGlobalController to generate a random EventValue (for example, using the expression (1 s random abs * 5)
truncated + 1) and schedule the SoundToGlobalController in parallel with this Sound. This ensures that a *single*
channel will be chosen on each selection.

Input
A mono Sound that will be routed to any one of the output channels according to the value of Channel. If the Input
has more than one channel, only its first channel (or left channel) is used.

215
SelectableSound
Selectable Category
A SelectableSound selects one of its Input Sounds. The Inputs are arranged in order from left to right, top to bottom
and numbered from 1 to the total number of Inputs. The Selection parameter is an integer corresponding to the
position number of the Sound you’d like to select.

Selection
An integer in the range from 1 to the number of Inputs. Think of the Inputs as being numbered from 1 to the total
number of inputs. Selection is the number of the selected Sound. Changes between Sounds are not crossfades but
instantaneous switches with 1 ms smoothing.

Inputs
One of these Sounds is selected (the others are silent). Arrange them in order from left to right (and top to bottom).
The first Input corresponds to a Selection value of 1, the second to a value of 2, etc.

216
SetDuration
Time & Duration Category
Sets the duration and start time of its input. (It is the equivalent of dragging the input Sound into a timeline and
changing its duration and start time graphically). Without the SetDuration the Input Sound’s program would continue
running indefinitely; with the SetDuration you can specify that it should stop after a given amount of time.

Input
Duration sets the duration of this Sound and StartTime sets its start time relative to the SetDuration.

StartTime
Start time of the Sound in Input relative to the start time of the SetDuration. Must be a value greater than zero.
Examples of startTimes:
0
1 samp
440 hz

Duration
Duration of the Input. Can be specified in seconds, samples, or in terms of frequency (where the duration will be the
duration of one period at that frequency). Must be a value greater than zero. Examples of durations:
1s
44100 samp
440 hz

217
SetRange
Math Category
This maps the output range of the Input to the specified range of newMin to newMax.

Input
The output of this Sound is scaled to a range of newMin to newMax. Set oldMin and oldMax to the current output
range of this Sound (typically -1.0 to 1.0 or 0 to 1.0). For example, a FunctionGenerator that steps through the
wavetable #ramp has a range of 0 to 1.0, but if the wavetable is #sine the range is -1.0 to 1.0.

OldMin
The current minimum value of the Input. This is typically -1.0 (for full range wavetables) or 0 (for wavetables like
#ramp that never go negative).

OldMax
The current maximum output of the Input. Typically, this is the full amplitude: 1.0.

NewMin
This is the new minimum output.

NewMax
This is the new maximum output.

218
SimplePitchShifter
Frequency & Time Scaling Category
Shift the pitch of the input up or down by an interval (given in half steps).

Input
The frequency of this input will be shifted up or down by the given interval. Works best on monophonic inputs with a
strong formant structure.

Interval
A positive or negative number of halfsteps by which to shift the input’s pitch up or down. This does not have to be an
integer but can include fractions of halfsteps.

MinInputPitch
This is the lowest frequency you expect in the input. It must include units: hz for a frequency or nn for a notenumber.

MaxInputPitch
This is the highest frequency you expect in the input. It must include units: hz for a frequency or nn for a notenumber.

219
SingleSideBandRM
Frequency & Time Scaling Category
Does nonharmonic frequency scaling of the input. Takes the input and does a 90 degree phase shift between the left
and right channels at the frequency specified in the Frequency parameter field. Multiplies this by a
QuadratureOscillator with sine in the left and cosine in the right. The resulting ring modulation gives you sum and
difference frequencies but, because they are 90 degrees out of phase, the difference frequency is mostly cancelled
out, leaving you with single side band modulation. Expand to see how this is put together.

Input
This signal will be ring modulated to scale its frequency by the specified FreqScale.

Frequency
This is the frequency at which there will be perfect cancellation of the difference frequency side-band. The further the
input is from this frequency, the less cancellation there will be and the more the result will be like regular ring
modulation.

FreqScale
Any part of the input that was at Frequency will be scaled by this ratio.

220
SlewRateLimiter
Live Capture & Tracking Category
The output amplitude follows the input amplitude at a maximum linear slope determined by the AttackTime and
DecayTime parameters.
Inspired by PeteJohnstonsDSPMods Ver 5.1.

Input
This is the Sound whose left channel amplitude is being tracked.

AttackTime
This is the amount of time that it would take the output to follow an input step from zero to one.

ReleaseTime
This is the amount of time that it would take the output to follow an input step from one to zero.

221
SlipStick
Distortion & Waveshaping Category
A physical model of an object being dragged across a surface by a control point at the end of a spring. Initially, the
object is sticking to the surface due to the force of gravity pushing down on it. As you increase the distance between
your control position and the position of the object, you also increase the tension of the spring which increase the pull
or the force on the object at right angles to the downward force of gravity. Once the force due to the spring exceeds
the force due to gravity, the object starts sliding along the surface. As it does so, it compresses the spring and which
pushes back in the other direction. If there is very low slip friction, the object may start to oscillate back and forth. You
specify the (changing) position of the control, friction when the object is stationary, friction when the object is sliding,
the stiffness of the spring, the frequency of oscillation, and the decay time of any oscillations with nonzero slip friction.

ControlPosition
Typically this is a controller input. This is where you are trying to drag the object which is at the end of a spring. It
can also be an audio rate input if you paste a Sound in the field and remove the ’L’ that automatically appears after it.

Frequency
If SlipFriction is low or zero, the system can go into oscillations at this frequency.

Stiffness
The stiffness of the spring affects how quickly the object will slide to its new position. Think of the difference between
a very stiff spring and a spring that is more relaxed. For low stiffness values, it takes bigger changes in
ControlPosition before the object breaks free of gravity and starts sliding. If you have a periodic ControlPosition input,
the response of the object is less regular for low spring stiffness.

Decay
For settings that produce oscillations, Decay controls how much time it takes for the oscillations to die out.

StickFriction
Friction between the object and the surface when the object is sticking on the surface.

SlipFriction
Friction between the object and the surface while the object is sliding along the surface.

Velocity
To output the velocity of the object in both channels, check this box. (To output the velocity on the left channel and
the spring tension on the right channel, check both boxes).

Stretch
To output the tension or stretching of the spring on both channels, check this box. (To output the velocity on the left
channel and the spring tension on the right channel, check both boxes).

Level
Controls the amplitude of the output signal.

TimeConstant

222
Use TimeConstant to smooth out any steps or unevenness in the ControlPosition input (for example, if you supplying
the ControlPosition by hand using a physical controller). The shorter the TimeConstant, the faster the actual
ControlPosition reaches the desired ControlPosition. Longer TimeConstants give you smoother (but more sluggish)
changes in ControlPosition.

Reset
To reset the object and spring to their original states, change this value from 0 to 1 and then back to 0 (for example,
using !Trigger).

SetReference
Use this field to give an additional push to an object that is already in motion (imagine adding an extra push to an
already spinning roulette wheel). This field resets the reference position to the current control position, so you can
give the object another push from its current (rather than original) position.

223
SoundCollectionVariable
Variables Category
This represents a collection of Sounds. It can appear in any parameter field that takes more than one Sound. It is
typically used when creating new Sound classes that have an arbitrary number of inputs.

224
SoundToGlobalController
Live Capture & Tracking Category
Takes a number, a pasted Sound, or an Event expression as its input and generates a corresponding EventValue
(either a single event or a continuous controller stream) which, to all other Kyma Sounds, looks the same as
EventValues coming from the Virtual Control Surface or from an external MIDI source.
The GeneratedEvent’s value is displayed in the VCS, but you cannot control it there.

GeneratedEvent
Enter an EventValue name (including the exclamation point prefix) for the generated EventValue.

Value
Paste a Sound or enter a number or EventValue here. The constant or time-varying value here will be translated into
an EventValue named in GeneratedEvent.
The value specified here will have its range modified by the settings in the VCS. This means that if the range of
values specified here is (0, 1), the GeneratedEvent will take on values between the minimum and maximum (with
grid) specified in the VCS. Alternatively, if you leave the VCS settings at their default of minimum 0, maximum 1, and
grid 0, then the GeneratedEvent will have exactly the same value as the value specified here.

Silent
If the Silent box is not checked, the audio output of this Sound is the value entered in the Value field. Check the Silent
box to output silence.

225
SpectralShape
Spectral Sources Category
A SpectralShape sets the frequencies and amplitudes of oscillators in an OscillatorBank according to the Spacing and
SpectralEnvelope parameters. This kind of Sound makes sense only when used as an Input to an OscillatorBank.
Frequencies are output on the right channel and their corresponding amplitudes are output on the left channel.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Spacing
This is the spacing between the partials and should be specified in units of frequency. To specify harmonic partials,
set the Spacing to be the same as the Frequency. For example, if you have set Frequency to !KeyNumber nn, then
setting Spacing to !KeyNumber nn will tell the OscillatorBank to generate harmonics of !KeyNumber nn.

NbrPartials
This is the number of (amplitude,frequency) pairs that the SpectralShape will supply to an OscillatorBank. For
example, if there are 20 partials, this Sound will output the amp1 and freq1 on the first sample, amp2 and freq2 on the
second sample, and on through amp20 and freq20 on the 20th sample. Then it will start over again with amp1 and
freq1.

Wavetable
The shape stored in this wavetable is interpreted as the shape of the spectrum, from 0 hz up to half the sampling rate.
An OscillatorBank can use this table to set the amplitude of each of its oscillators according to that oscillator’s
frequency. For example, if the frequency falls in a region with a low amplitude in this table, it will be attenuated in the
OscillatorBank. To see the spectral envelope, open this file using File open with the file type set to Samples file. If
the OscillatorBank waveform is Sine, and you have chosen harmonic spacing, then this shape will be something like a
filter acting on a bandlimited pulse train (equal amplitude, harmonically spaced sine waves).

Scale
Used as an overall amplitude scale applied equally to all of the oscillators.

226
SpectrumAnalyzerDisplay
Visual Displays Category
A real-time spectrum analyzer. Displays the spectrum of the Input on the Virtual control surface. Use the buttons
below the display to zoom in or out in the frequency or magnitude dimensions. The value at the cursor point (where
the red cross hairs meet) is displayed in the upper left. Clicking on the display freezes it so you can hold down the
mouse over specific points to read their exact values.
A SpectrumAnalyzer can be placed anywhere along the signal flow path; it does not necessarily have to be the final
Sound in a signal flow path (it could, for example, be displaying the spectrum of the Input to the Sound that is actually
being heard). If a Sound has more than one SpectrumAnalyzer within it, all the spectra will be displayed side by side
in the Virtual control surface.
You can also view the real-time spectrum of any Sound by selecting the Sound and then choosing Spectrum analyzer
from the Info menu. (But the menu method only allows you to view one Sound at a time on the SpectrumAnalyzer and
does not allow you to adjust the windowing function or the length of the FFT, except by changing the Preferences).

Input
The spectrum of this Sound is continuously displayed on the Virtual control surface, as if by a real-time spectrum
analyzer.

Window
Window weighting function applied to the analysis window of the FFT used to compute the spectra.

Length
Length of the FFT. Ideally it should be the same as the number of samples in the period of the lowest frequency or
fundamental frequency.

227
SpectrumFrequencyScale
Spectral Modifiers Category
Takes a spectral source (which must be harmonic) as its input and scales the frequency envelopes without changing
the amplitude envelopes. This allows you to shift the pitch of the resynthesis, while leaving the formants at their
original frequencies. The SpectrumFrequencyScale should be fed to an OscillatorBank in order to resynthesize the
newly scaled spectrum.

Spectrum
Should be a Sound from the spectral sources category of the Prototypes (based on an harmonic analysis).

Scale
All frequencies in the spectrum will be multiplied by this scale factor. For example, use 2 to scale up by one octave, 1
for no change, 0.5 for down by one octave. You can get other intervals by using a ratio of two pitches that have been
converted to hertz. For example, to get a half step up, you could use
4 c sharp hz / 4 c hz
or to shift down by a perfect fifth, you could use
4 c hz / 4 g hz
To control the pitch from the MIDI keyboard, use the ratio of !Pitch to the original pitch of the recording. For example,
if the original recording is a 3rd octave b, you could use
!Pitch hz / 3 b

228
SpectrumFromSingleCycle
Spectral Sources Category
Computes the harmonic spectrum of a waveform so you can use it as the spectral input to an OscillatorBank (or any
of the Aggregate Synthesis banks) to resynthesize an automatically band-limited (anti-aliased) version of the
waveform at any fundamental frequency.

Frequency
Specify the fundamental frequency of the resynthesis.
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

FirstPartial
This is the first analyzed harmonic that you want to output--usually it is partial number 1. If you want to skip over the
lower harmonics, enter a higher number here.

NbrPartials
This is the total number of harmonic partials, starting from firstPartial. In the OscillatorBank (or Aggregate Synthesis
bank), you can specify how many of the analyzed harmonics to actually resynthesize (the number should be less than
or equal to the number specified in this field).

Log
Check the log frequency box if you are using this spectrum in a morph (that is, in an Interpolation with another
spectrum source). For most other synthesis and processing, leave this box unchecked.

Bandwidth
For OscillatorBank (and most of the Aggregate synthesis banks), bandwidth does not make sense, so leave this at its
default value of 1. For synthesis banks (such as VocoderChannelBank) that utilize an array of bandwidths, you can
set this value to a control between 0 and 1 to increase or decrease the width of the band around each harmonic
frequency.

Envelope
An overall amplitude envelope on the spectrum.

229
Waveform
This is the name of a mono file containing one cycle of a waveform. For best results, use files that either have fewer
than 1024 samples or, if they are longer, that have a power of two number of samples in them. To prepare a file in
the Samples File editor, select a single cycle, Edit>Trim, then choose Interpolate Selection from the menu at the
bottom of the wave editor. Set New Duration an integer power of two, then (making sure the waveform is selected)
click the Insert button and save the result.
If you select a stereo file, a mono mix of left and right (or more, if you select an interleaved multichannel file) will be
used as the waveform.
If you select a file that has more than 1024 samples (and the number of samples it contains is not a power of 2), then
a sub-sampled version of the file will be used as the waveform.

230
SpectrumFundamental
Spectral Modifiers Category
If you feed a harmonic spectrum into this Sound, the output (on both left and right channels) will be the fundamental
frequency envelope of the spectrum.
You can use this to control the frequency of another Sound by pasting this module into the Frequency parameter of
that Sound and multiplying it by SignalProcessor halfSampleRate. If the input spectrum is not linear, use a
SpectrumLogToLinear to convert it first. Set the NbrPartials to default + 4.

Spectrum
This should be a harmonic Spectrum with NbrPartials set to default + 4. See the Spectral Sources category of the
Prototypes for examples of modules that can be used as inputs to this module.

231
SpectrumInRAM
Spectral Sources Category
This Sound does not generate an audio signal; it produces frequency and amplitude envelope controls for
Bank-synthesis Sounds in the Additive and Aggregate synthesis categories (for example, OscillatorBank, CloudBank,
FilterBank, etc).
SpectrumInRAM reads an analysis file containing a sequence of spectral frames indexed by TimeIndex. It outputs
the spectral frame as a series of partials specified as (left = amplitude, right = frequency) pairs, one partial per sample
for nbrPartials samples. After nbrPartials samples, it starts on the next time frame, starting with the first partial, the
second partial and so on, until it outputs the nbrPartials partial for that frame.

Frequency
Use default to leave the frequency unchanged from the original analysis. Otherwise, the frequency envelopes will be
scaled so the base pitch of the analysis matches the value in this parameter field.
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Level
This is a control on the overall amplitude of all the partials. Use 1 to leave the amplitudes unchanged; smaller values
attenuate the amplitudes.

TimeIndex
This selects where we are in the series of spectral snapshots or frames. The first snapshot is at -1, the middle
snapshot is at 0, and the last snapshot is at 1. To go through the series in linear time, use a FunctionGenerator
whose Duration equals the duration of the original recording and whose Wavetable is FullRamp (which goes from -1
to 1). Change the Duration of the FunctionGenerator to go through the spectra at different rates. Change the
wavetable to go through the spectra in a different order or to make time nonlinear.

Analysis
Use a spectrum file (sometimes identified with the .spc file extension). To create your own spectrum files, select
Spectral Analysis from the Tools menu.

Log
Check the log frequency box if you are using this spectrum as one point in a morph. For most other synthesis and
processing, leave this box unchecked.

232
FirstPartial
This is the first analyzed partial that you want to output--usually it is partial number 1. If you want to skip over the
lower partials, enter a higher number here.

NbrPartials
This is the total number of partials, starting from firstPartial.

233
SpectrumInRAMLog
Spectral Sources Category
This Sound is used only as the Spectrum input to an OscillatorBank.
It reads an analysis file that contains a series of spectra indexed by TimeIndex. It outputs a spectrum as a sequence
of (amplitude,frequency) pairs on every sample tick for nbrPartials samples. After nbrPartials samples, it starts over
again from the fundamental and outputs the entire spectrum again.

Frequency
Use Default to leave the frequency unchanged from the original analysis. Otherwise, the frequency envelopes will be
altered to scale the base pitch of the analysis to the value listed in this parameter field.
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Level
This is a control on the overall amplitude of all the partials. Enter 1 to leave all amplitudes as they are; numbers larger
than one result in a gain, and numbers less than one result in attenuation.

TimeIndex
This selects where we are in the series of spectral snapshots. The first snapshot is at -1, the middle snapshot is at 0,
and the last snapshot is at 1. To go through the series in linear time, use a FunctionGenerator whose Duration
equals the duration of the original recording and whose Wavetable is FullRamp (which goes from -1 to 1). Change
the Duration of the FunctionGenerator to go through the spectra at different rates. Change the wavetable to go
through the spectra in a different order.

Analysis
Use a spectrum file from the Wavetables folder or directory. These files came from spectral analyses performed on
digital recordings by the Spectral Analysis Tool or by Lemur.

NbrPartials
This is the number of partials you want to output for the resynthesis. Use Default to output all of the partials in the file.

FirstPartial
This is the first analyzed partial that you want to output--usually it is partial number 1. If you want to skip over some of
the lower partials, enter a higher number here.

234
SpectrumLogToLinear
Spectral Modifiers Category
A spectrum can be in one of two forms: linear frequency or logarithmic frequency. This Sound converts a logarithmic
frequency spectrum input into a linear frequency spectrum output.
Generally, a spectrum that comes from a spectrum file has logarithmic frequencies, and a spectrum generated in real
time has linear frequencies.

Spectrum
This logarithmic frequency spectrum input is converted to linear frequency and then output.

235
SpectrumModifier
Spectral Modifiers Category
A SpectrumModifier takes one of the Sounds from the Spectral Sources category of the Prototype strip as its input
and modifies the spectrum. To resynthesize the modified spectrum, feed the SpectrumModifier into the spectrum
input of an OscillatorBank.
In order to modify the output of a spectral source, the SpectrumModifier selects or rejects tracks of the spectrum
according to some criteria, and then it optionally scales and offsets each frequency and/or amplitude value of the
selected tracks.
Decide whether to select or reject the tracks that meet the criteria.
Then decide whether the rejected tracks should have their amplitudes set to zero or whether they should simply pass
through unaffected by the scale and offset modifications.
Then set the selection (or rejection) criteria, including frequency range, track number range, or amplitude range. The
frequency and amplitude hysteresis values can prevent tracks that are close to the selected range from popping in
and out as they cross the threshold. Probability is the likelihood (ranging from 0 up to 1) that a track will be selected
(or rejected) on each frame.
Finally, you can choose to scale and/or offset either the frequency or amplitude (or both) on each frame of each
selected track.

Spectrum
This is the spectrum that will be modified; it should be one of the classes of Sound found in the Spectral Sources
category (e.g. LiveSpectralAnalysis, SpectrumInRAM). The SpectrumModifier assumes linear (rather than log)
frequencies, so you may see a dialog asking you to insert a SpectrumLogToLinear module inbetween the spectral
source and the SpectrumModifier.

Select
Check this to specify the criteria for *selection*. Otherwise, the tracks that meet the criteria will be *rejected*.
Unchecking this box is like placing a logical NOT after all of the selection criteria.

LoTrack
Enter an integer track number. Only this track and higher-numbered tracks will be selected.

HiTrack
Enter an integer track number. Only this track and lower-numbered tracks will be selected. To be certain of selecting
all tracks, enter a number much larger than the highest possible track number (e.g. 10000).

LoFreq
Enter a pitch or frequency with units. On each frame, a track will be selected if the value of the frequency envelope
on that frame is at this frequency or a higher frequency. Use FreqHysteresis to prevent tracks from popping in and
out on each frame if they are wavering around this frequency.

HiFreq
Enter a pitch or frequency with units. On each frame, a track will be selected if the value of the frequency envelope
on that frame is at this frequency or a lower frequency. Use FreqHysteresis to prevent tracks from popping in and out
on each frame if they are wavering around this frequency.

236
FreqHysteresis
Enter a frequency or pitch with units that is smaller than the value of LoFreq. If a track is currently selected, its
frequency will have to drop this much *lower* than LoFreq in order to be rejected. If a track is currently unselected, it
will have to be this much *higher* than LoFreq in order to become selected. (And similarly, the frequency of a
selected track must be this much *higher* than HiFreq in order to be deselected, and the frequency of a rejected track
would have to be this much lower than HiFreq in order to switch from being rejected to selected).
Adjust this value to keep tracks that are close to LoFreq or HiFreq from switching between on and off on every frame.

FreqScale
Multiply the frequency of each selected track by this number between 0 and 1.

FreqOffset
Add this number (between 0 and 1) to the frequency value of each selected track.

LoAmp
Enter an amplitude value between 0 and 1 (or from -1000 to 0 dB). On each frame, a track will be selected if the
value of the amplitude envelope on that frame is at this amplitude or a higher amplitude. Use AmpHysteresis to
prevent tracks from popping in and out on each frame if they are wavering around this amplitude.

HiAmp
Enter an amplitude value between 0 and 1 (or from -1000 to 0 dB). On each frame, a track will be selected if the
value of the amplitude envelope on that frame is at this amplitude or a lower amplitude. Use AmpHysteresis to
prevent tracks from popping in and out on each frame if they are wavering around this amplitude.

AmpHysteresis
Enter a number between 0 and 1 but smaller than the value of LoAmp. If a track is currently selected, its amplitude
will have to drop this much *lower* than LoAmp in order to be rejected. If a track is currently unselected, it will have to
be this much *higher* than lowAmp in order to become selected. (And similarly, the amplitude of a selected track
must be this much *higher* than HiAmp in order to be deselected, and the amplitude of a rejected track would have to
be this much lower than HiAmp in order to switch from being rejected to selected).
Adjust this value to keep tracks that are close to LoAmp or HiAmp from switching between on and off on every frame.

AmpScale
Multiply the amplitude of each selected track by this number between 0 and 1.

AmpOffset
Add this number (between 0 and 1) to the amplitude value of each selected track.

Probability
Enter a likelihood from 0 to 1. Numbers larger than 1 will be clipped to 1 (the maximum likelihood). On each frame
and for each track, this is the likelihood that the track will be selected on this frame. Use 1 to say that the track will be
selected 100% of the time, use 0.5 to give it a 50-50 chance of being selected, and use 0 to indicate that it will never
be selected. You can make the likelihood a function of the track number. For example,
TrackNumber / 128
would make the higher tracks more likely to be selected on each frame than the lower tracks, and:
(TrackNumber - 1) rem: 2
would make the even-numbered tracks 100% likely, and the odd-numbered tracks 0% likely (because an odd number
minus 1 is an even number, and an even number modulo 2 is zero, while an odd number modulo 2 is 1).

Seed

237
Enter a number from -1 to 1. This is the seed for the random number generator used in conjunction with the value of
Probability to determine whether a track should be selected on a given frame.

HearAll
Check this box to hear all the tracks, both the selected and the rejected. Uncheck it to set the rejected tracks’
amplitudes to zero.
(Only the selected tracks are affected by the FreqScale, FreqOffset, AmpScale, and AmpOffset, so check the HearAll
box to hear all tracks but modify only the selected tracks).

238
SpectrumOnDisk
Spectral Sources Category
This can be used in place of a SpectrumInRAM as the input to an OscillatorBank. The difference is that this reads the
analysis file directly off the disk, rather than first loading the analysis file into RAM. This is helpful for SOS analyses
that are too long to fit into sample RAM.
Unlike the SpectrumInRAM, this Sound can only go through the analysis envelopes in forward-time order. (The
SpectrumInRAM TimeIndex parameter lets you read the analysis at any point in time and in any time order with any
function). In this Sound, you can, however, control the Rate at which you go forward through the analysis file.

Frequency
Use Default to leave the frequency unchanged from the original analysis. Otherwise, the frequency envelopes will be
altered to scale the base pitch of the analysis to the value listed in this parameter field.
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Level
This is a control on the overall amplitude of all the partials.
Enter 1 to leave all amplitudes as they are; numbers larger than one result in a gain, and numbers less than one
result in attenuation.

RateScale
This controls the rate at which the analysis is read: use 1 to read it at the original rate, numbers greater than 1 to read
through it faster, and numbers less than 1 to read through it more slowly.

FileName
Click the Browse button to be able to select the file name from a list of names in the standard file dialog.

NbrPartials
This is the number of partials you want to output for the resynthesis. Use Default to output all of the partials in the file.

FirstPartial
This is the first analyzed partial that you want to output--usually it is partial number 1. If you want to skip over some of
the lower partials, enter a higher number here.

239
Trigger
When this number becomes positive, the Sound will start over again at the beginning of the analysis file.

240
SpectrumTrackSelector
Spectral Modifiers Category
Extracts a single partial (an amplitude envelope and frequency envelope) from the Spectrum input. The amplitude
envelope will appear at the left output, and the frequency envelope will appear at the right. To extract the amplitude
envelope ONLY, check the Amp box and uncheck the Freq box. Typically the output of the SpectrumTrackSelector is
used to control a parameter of another Sound.

Spectrum
This should be a spectral source (like a SpectrumInRAM or a LiveSpectralAnalysis).

Track
This is the track number that you want to extract from the Spectrum. If Spectrum is harmonic, the track number is the
same as the harmonic number.

Amp
Check here if you want the amplitude envelope of the track. If Freq is also checked, you will get the amplitude
envelope in the left channel and the frequency envelope in the right channel. If you uncheck Freq, then you will get
the amplitude envelope in both the left and the right channels.

Freq
Check here if you want the frequency envelope of the track. If Amp is also checked, you will get the amplitude
envelope in the left channel and the frequency envelope in the right channel. If you uncheck Amp, then you will get
the frequency envelope in both the left and the right channels.

241
SpectrumVoicedUnvoiced
Spectral Modifiers Category
If you feed a harmonic spectrum into this Sound, the output (on both left and right channels) will be the
Voiced/Unvoiced envelope of the spectrum. When the spectrum is in an unvoiced or transient segment, the output is
zero. When the spectrum is in a voiced or harmonic segment, the output of this Sound is one. Transitions between
voiced and unvoiced are at 0.5 for one frame.
You can use this Sound as an envelope for controlling the parameters of other Sounds.

Spectrum
This should be a harmonic Spectrum. See the Spectral Sources category of the Prototypes for examples of modules
that can be used as inputs to this module.

242
SplitSurroundFilePlayer
Surround & Multichannel Category
Plays back previously-recorded files on multiple channels for 7.1 Surround (.L .R .LS .RS .C .LFE .LC .RC), 5.1
Surround (.L .R .LS .RS .C .LFE), Quadraphonic (.L .R .LS .RS), or Cinema Stereo (.L .R .C), as long as you follow
the file-naming convention
[Link]
when naming your files during the recording step and as long as you have saved the related files within the same
folder. Any missing files will result in the corresponding files being silent during the playback.
You can select whether to read the files from RAM or to stream them directly off the disk.
NOTE: This Sound, as other multichannel output Sounds, can only be used as the *last* (rightmost) Sound in a chain,
just prior to the output.

Source
Select whether to stream the files directly off the Disk (recommended for long duration files) or to preload them into
RAM first (recommended when more polyphony and layering is required).

Sample
Select one file of a previouslly recorded stereo PAIR of files labelled according to the .L .R convention, for example:
[Link]
You can either type the name of the file or click the disk icon to choose it from the file dialog.

Autoloop
Check here to play the sample or disk repeatedly as a loop.

Trigger
Whenever Trigger changes from 0 to a nonzero value, it will replay the disk or sample in RAM from the beginning.

AttackTime
Attack time for a linear envelope applied to the sample source.

ReleaseTime
Release time for a linear envelope applied to the sample source.

Scale
An amplitude scale on the source. Range is (-1,1).

Frequency
For samples in RAM or on disk, this controls the playback frequency. For samples that are unpitched, the original
frequency is assumed to be 4 c (60 nn).

SurroundFormat

243
Stereo: .L .R
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

244
SplitSurroundSample
Surround & Multichannel Category
Plays back previously-recorded files out of RAM with the option of looping or reversing on multiple channels for 7.1
Surround (.L .R .LS .RS .C .LFE .LC .RC), 5.1 Surround (.L .R .LS .RS .C .LFE), Quadraphonic (.L .R .LS .RS), or
Cinema Stereo (.L .R .C), as long as you have followed the naming convention
[Link]
when naming your files during the recording step and as long as you have saved the related files within the same
folder. Any missing files will result in the corresponding files being silent during the playback.
NOTE: This Sound, as other multichannel output Sounds, should be used as the final processing step in a chain, just
prior to the output.
NOTE: If your recordings do not fit in RAM, you can use the SplitSurroundFilePlayer instead and set it to read from
Disk as the source.

Sample
Select one file of a previously recorded set of files representing the channels of a surround sound recording labelled
according to the (.L .R .LS .RS .C .LFE .LC .RC) convention, for example:
[Link]
You can either type the name of the file or click the disk icon to choose it from the file dialog.

Autoloop
Check here to play the sample repeatedly as a loop.

Trigger
Whenever Trigger changes from 0 to a nonzero value, it will replay the sample in RAM from the beginning.

AttackTime
Attack time for a linear envelope applied to the sample source.

ReleaseTime
Release time for a linear envelope applied to the sample source.

Scale
An amplitude scale on the source. Range is (-1,1).

Frequency
Controls the playback frequency (and thus the rate). Use default for the original frequency. For samples that have no
specified base pitch, the original frequency is assumed to be 4 c (60 nn). Negative frequencies go backwards
through the samples.

SurroundFormat
Stereo: .L .R

245
CinemaStereo: .L .C .R
Quad: .L .R .LS .RS
5.1: .L .R .LS .RS .C .LFE
7.1: .L .R .LS .RS .C .LFE .LC .RC

LoopStart
(0,1) indicating the start of a loop as the fraction of the full file duration. To specify this value in seconds, enter the
number of seconds divided by the total file duration, for example:
!LoopStartSeconds s / ’[Link]’ sampleFileDuration

LoopEnd
(0,1) indicating the end of a loop as the fraction of the full file duration. To specify this value in seconds, enter the
number of seconds divided by the total file duration, for example:
!LoopEndSeconds s / ’[Link]’ sampleFileDuration

LoopFade
To avoid clicks due to discontinuities at the start or end of a loop, click this box to add a quick fade in and fade out on
the looped portion of the sample.

Start
(0,1) indicating the start of the sample as the fraction of the full file duration. When you retrigger the sample, it returns
to the Start. The loop points are computed relative to the Start and End points. To specify this value in seconds,
enter the number of seconds divided by the total file duration, for example:
!StartSeconds s / ’[Link]’ sampleFileDuration

End
(0,1) indicating the end of the sample as the fraction of the full file duration. When you retrigger the sample, it returns
to the Start and plays to the End. The loop points are computed relative to the Start and End points. To specify this
value in seconds, enter the number of seconds divided by the total file duration, for example:
!EndSeconds s / ’[Link]’ sampleFileDuration

246
SqrtMagnitude
Math Category
This is the square root of the sum of the left and right channels squared. If the square root of the sum of the squares
is greater than 1.0, this Sound saturates at 1.0. It can be useful in doing spectral analysis where the left channel is
defined to be the real part and the right channel as the imaginary part of a complex number. You could also use this
as a strange kind of measure of the instantaneous "distance" between two signals, one in the left and one in the right.

Input
The output is the square root of the sum of the squares of the left and right channels of this Sound.

247
StereoInOutput4
Outputs Category
This Sound routes the two stereo input Sounds to the four output channels of the signal processor.
This Sound only works properly as the rightmost Sound in the signal flow diagram.

Out12
This Sound will be routed to channels 1 and 2.

Out34
This Sound will be routed to channels 3 and 4.

248
StereoInOutput8
Outputs Category
This Sound routes the four stereo input Sounds to the eight output channels of the signal processor.
This Sound only works properly as the rightmost Sound in the signal flow diagram.

Out12
This Sound will be routed to channels 1 and 2.

Out34
This Sound will be routed to channels 3 and 4.

Out56
This Sound will be routed to channels 5 and 6.

Out78
This Sound will be routed to channels 7 and 8.

249
Stereoizer
Stereo Category
Converts a mono processing Sound into a stereo processing Sound with independent controls for left and right
channels (labelled with prefix(es) and/or suffix(es)). Typically, the SharedSounds act as the source(s) and the chain
of modules between the SharedSounds and the output act as the processing, with independent controls on the
processing for the left and the right channels. If the SharedSounds have stereo outputs (for example a GrainCloud or
a StereoSample), each channel is routed through its own chain of processing modules to maintain left/right
separation. If there are any controls that should *not* be different in the two channels, add them to the DoNotChange
list.
Stereoizer is also a handy way to process just the left or just the right channel of a stereo Sound. For example, to
process the right channel ONLY, check the LeftBypass box.

ReplicatedSound
This is the Sound that will be duplicated to obtain independent right and left channels with independent live controls.

SharedSounds
The SharedSounds is the Sound (or Sounds) that should be shared between right and left channels. Typically it is the
Sound just to the left of the processing module (or chain of processing modules). To ensure that this Sound is
shared, hold down the Option (or Control) key as you drag the source Sound from the signal flow diagram into the
SharedSounds field. That way it will be truly shared (and not just copied) and if you make changes to it in the future, it
will be automatically updated in both places. A Sound in the SharedSound field is any Sound that you think of as the
Source, prior to processing. If it has independent right and left channels, the left/right separation will be maintained
by the Stereoizer.
To simply copy the ReplicatedSound to both the right and left channels with *no* shared Sounds between the
channels, drag a Constant (or some other Sound *not* present in the Input) into this field.

DoNotChange
This is a list of hot values present in the ReplicatedSound that should NOT be duplicated and uniquely labelled for
independent left and right channel controls. In other words, these are the hot values that are the same for both
channels. (Any hot values in the SharedSounds will not be duplicated so it is not necessary to add them to this list).

Prefix
Whatever you type here within single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or
green variable name in the copies. If the prefix includes a number and IncrementPrefix is checked, this number is
incremented in each copy. Uncheck IncrementPrefix if you want the same prefix added to all controls and green
variables. To append a different prefix to each copy, enter one prefix for each copy with a space separating each
prefix from the next (for example, ’hi’ ’mid’ ’lo’). Leave this field blank if you do not want to add any prefixes. If there
are fewer prefixes than copies created by the Replicator, the last prefix will be repeated (and, if it includes a numeral
and you have checked the IncrementPrefix box, each prefix will include a unique number).

Suffix
Whatever you type here within single quotes (for example ’-1’) will be tacked onto the end of each hot value or green
variable name in the copies. If a suffix includes a number and IncrementSuffix is checked, this number is
incremented in each copy. Uncheck IncrementSuffix if you want the same suffix added to all controls and green
variables. To add a different suffix to the hot values of each copy, enter a suffix for each Sound copy with a space
separating one from the next (for example, ’-hi’ ’-mid’ ’-lo_1’). Leave this field blank if you do not want to add any

250
suffixes. If there are fewer IncrementSuffix than copies created by the Replicator, the last IncrementSuffix will be
repeated (and, if it includes a numeral and you have checked the IncrementSuffix box, each suffix will include a
unique number).

IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

LeftBypass
To leave the left channel dry, check this box. When this box is checked, the left channel of the first of the
SharedSounds used directly, without being processed through the rest of the ReplicatedSound chain.

RightBypass
To leave the right channel dry, check this box. When this box is checked, the right channel of the first of the
SharedSounds used directly, without being processed through the rest of the ReplicatedSound

251
StereoMix2
Mixing Category
Adds the outputs of the Sounds in the In1 and In2 fields, each with the specified Pan and Scale (attenuation) value.
The overall output can also be panned and attenuated.

Left
This controls the level of the left outpu channel. The maximum value is 1 and the minimum is -1. The left channel of
the mix is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right output channel. The maximum value is 1 and the minimum is -1. The right channel
of the mix is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

In1
The output of this Sound will be added to the output of the Sound in In2.

Pan1
The stereo position of In1. (0 is hard left and 1 is hard right).

Scale1
Attenuation on In1. 1 (or 0 dB) is no attenuation, and 0 is fully attenuated.

In2
This Sound is added to the Sound in the In1 field.

Pan2
The stereo position of In2. (0 is hard left and 1 is hard right).

Scale2
Attenuation on In2. 1 (or 0 dB) is no attenuation, and 0 is fully attenuated.

252
StereoMix4
Mixing Category
Adds the outputs of In1, In2, In3, and In4, each with its own Pan position and Scale (attenuation). Scale and Pan
control the attenuation and stereo position of the overall mix.

Left
This controls the level of the left output channel. The maximum value is 1 and the minimum is -1. The left channel of
the mix is multiplied by the value of this parameter. Some example values for Left are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

Right
This controls the level of the right output channel. The maximum value is 1 and the minimum is -1. The right channel
of the mix is multiplied by the value of Right. Some example values for Right are:
1 (no attenuation)
0 (maximum attenuation)
!Fader1 (continuous controller sets level)
!KeyVelocity (MIDI key velocity controls the amplitude)
You can also paste another signal into this field, and the amplitude will vary with the output amplitude of the pasted
signal (something like an LFO controlling the attenuation). (See the manual for a complete description of hot
parameters, EventValues, EventSources, and Map files).

In1
The output of this Sound will be added to the output of the Sounds in In2, In3, and In4.

Pan1
The stereo position of In1. (0 is hard left and 1 is hard right).

Scale1
Attenuation on In1. 1 (or 0 dB) is no attenuation, and 0 is fully attenuated.

In2
The output of this Sound will be added to the output of the Sounds in In1, In3, and In4.

Pan2
The stereo position of In2. (0 is hard left and 1 is hard right).

Scale2
Attenuation on In2. 1 (or 0 dB) is no attenuation, and 0 is fully attenuated.

253
In3
The output of this Sound will be added to the output of the Sounds in In1, In2, and In4.

Pan3
The stereo position of In3. (0 is hard left and 1 is hard right).

Scale3
Attenuation on In3. 1 (or 0 dB) is no attenuation, and 0 is fully attenuated.

In4
The output of this Sound will be added to the output of the Sounds in In1, In2, and In3.

Pan4
The stereo position of In4. (0 is hard left and 1 is hard right).

Scale4
Attenuation on In4. 1 (or 0 dB) is no attenuation, and 0 is fully attenuated.

254
SumOfSines
Additive Synthesis Category
Resynthesizes sounds from the spectral analyses stored in Analysis0 and Analysis1. The dbMorph parameter
interpolates between the amplitudes of Analysis0 and Analysis1, and the pchMorph parameter interpolates between
the pitches in Analysis0 and Analysis1.

OnDuration
This is the duration of each triggered event. It should be the same length or shorter than the Duration which is the
total length of time that this program is available to be triggered. Think of Duration as analogous to the total lifetime of
a piano string, and OnDuration as the duration of each individual note that you play on that piano string. The
OnDuration must be greater than zero, and you must specify the units of time, for example:
2s (for 2 seconds)
2 ms (for 2 milliseconds)
200 usec (for 200 microseconds)
2m (for 2 minutes)
2h (for 2 hours)
2 days
2 samp (for 2 samples)
1 / 2 hz (for the duration of one period of a 2 hz signal)

Frequency0
Frequency of of the resynthesis based on Analysis0. Use 0 hz to default to the base frequency as stored in the
samples file.

Frequency1
Frequency of resynthesis based on Analysis1. Use 0 hz to default to the base frequency as stored in the samples
file.

Analysis0
Select a spectrum file from the dialog that you get when you click on the disk button next to this field.
The spectrum file contains frequency and amplitude information for resynthesizing an analyzed sound using banks of
sine wave oscillators.

Analysis1
Select a spectrum file from the dialog that you get when you click on the disk button next to this field.
The spectrum file contains frequency and amplitude information for resynthesizing an analyzed sound using banks of
sine wave oscillators.

DBMorph
Specifies how much of the amplitude envelopes of each of the envelopes is present in the resynthesized sound. A
value of zero specifies that the amplitude envelopes come from Analysis0 only, a value of one specifies Analysis1
only, and values between specify mixtures of the two analyses.
Use a continuous controller or a control signal here to morph continuously between the two sets of amplitude
envelopes.

255
PchMorph
Specifies how much of the frequency envelopes of each of the envelopes is present in the resynthesized sound. A
value of zero specifies that the frequency envelopes come from Analysis0 only, a value of one specifies Analysis1
only, and values between specify mixtures of the two analyses.
Use a continuous controller or a control signal here to morph continuously between the two sets of frequency
envelopes.

NbrPartials
This is the total number of sine wave oscillators used to resynthesize the analyzed sound. Try increasing the number
of partials to hear the effect on the sound. There will be some maximum number above which there is no longer any
improvement in the perceived quality of the sound. The more partials you request, the more computation this
algorithm requires, so choose the minimum number of partials that still gives you acceptable sound quality.

BankSize
This specifies the number of oscillators per bank. If you get a message that you are running out of real time, try larger
or smaller bank sizes.

TimeIndex
The analyzed sounds are like sequences of spectral snapshots. This value describes which snapshot to
resynthesize. A FunctionGenerator with Fullramp as its Wavetable is a straight line from - 1 to 1, and this moves
forward through the spectra in linear time. Try different functions (or use a continuous controller) to go backwards
through the sequence of spectra or to vary the rate at which you are stepping through the spectra.
This parameter is only active if CtrlTime is checked.

Gate
Enter a 1 in this field to play the Sound exactly once for the duration you have specified in the Duration field.
If you use an EventValue (for example, !KeyDown) in this field, the Sound can be retriggered as often as you like
within the duration specified in the Duration field.
When Gate becomes positive, the Sound is heard; when Gate becomes zero, the Sound is released.
This parameter is ignored if CtrlTime is checked.

Loop
Check this box if you would like to set the loop points using the LoopStart and LoopEnd parameter fields.
This parameter is ignored if CtrlTime is checked.

LoopStart
When Loop is checked, this is the start point of the loop (otherwise it is ignored). Enter a value in the range from 0 to
1, where 0 is the beginning of the sample and 1 is the end of the sample. In other words, this is the proportion of the
total sample duration when the start point should occur. (To compute the exact time within the sample where the start
point occurs, multiply LoopStart’s value by the total duration of the sample. For example, if your sample is 5 seconds
long and LoopStart is set to 0.2, then the beginning of the loop is 1 second into the sample.)

LoopEnd
When Loop is checked, this is the end point of the loop (otherwise it is ignored). Enter a value in the range from 0 to
1, where 0 is the beginning of the sample and 1 is the end of the sample. In other words, this is the proportion of the
total sample duration when the end point should occur. (To compute the exact time within the sample where the end
point of the loop occurs, multiply LoopEnd’s value by the total duration of the sample. For example, if your sample is
5 seconds long and LoopEnd is set to 0.4, then the end of the loop occurs at 2 seconds into the sample.)

CtrlTime
The analyzed sounds are like sequences of spectral snapshots. This sound provides two ways to move through these
spectral snapshots.

256
If CtrlTime is not checked, then the snapshots will be played back in forward order over the duration given in the
OnDuration field. The playback will start whenever Gate becomes positive. If Loop is checked, the playback will loop
between the StartLoop and EndLoop points within the analysis for as long as Gate is positive.
If CtrlTime is checked, then the snapshot played back is controlled directly by the value in the TimeIndex field.

Envelope
This is an attenuator on the output of the Oscillator. Enter 1 (or 0 dB) for the full amplitude. For a time-varying
amplitude, paste in a Sound (such as AR, ADSR, or FunctionGenerator) or an Event Value (such as !Volume) in this
field.

257
Surroundifier
Surround & Multichannel Category
Creates a pseudo-surround mix by splitting a stereo input into L, R, LS, RS, C, and LFE, routed to output channels
1-6, each with its own level control. Each channel is (optionally) processed through its own independently controlled
copy of the ReplicatedSound (controls are labelled with prefixes and/or suffixes). For example, if the
ReplicatedSound is a high pass filter, each output channel could have its own cutoff frequency (or could bypass the
filtering altogether). On the subwoofer channel 6 you hear the first SharedSound plus a controllable amount of
SubBass distortion subharmonics.

ReplicatedSound
This is the Sound is duplicated on each channel. Any hot values in this Sound will be labelled with the Prefixes
and/or Suffixes to give you independent control over the processing on each channel.

SharedSounds
The SharedSounds are the part of the ReplicatedSound that is shared among all the copies on all the channels. You
can think of the SharedSounds as the stereo source(s) of sound prior to the processing module (or chain of
processing modules). These Sounds are split into 5 channels prior to processing. To ensure that this Sound is
shared, hold down the Option (or Control) key as you drag the source Sound from the signal flow diagram into the
SharedSounds field. That way it will be truly shared (and not just copied) and if you make changes to it in the future, it
will be automatically updated in both places.
To copy the ReplicatedSound to all channels with *no* shared Sounds between the channels, drag a Constant (or
some other Sound *not* present in the Input) into this field.

DoNotChange
This is a list of hot values present in the ReplicatedSound that should NOT be duplicated and uniquely labelled for
independent channel controls. In other words, these are the hot values that are the same for all channels. (Any hot
values in the SharedSounds will not be duplicated so it is not necessary to add them to this list).

Prefix
Whatever you type here within single quotes (for example ’1-’) will be tacked onto the beginning of each hot value or
green variable name in the copies. If the prefix includes a number and IncrementPrefix is checked, this number is
incremented in each copy. Uncheck IncrementPrefix if you want the same prefix added to all controls and green
variables. To append a different prefix to each copy, enter one prefix for each copy with a space separating each
prefix from the next (for example, ’Left’ ’Right’ ’LeftSur’ ’RightSur’ ’Center’). Leave this field blank if you do not want
to add any prefixes. If there are fewer prefixes than copies created by the Replicator, the last prefix will be repeated
(and, if it includes a numeral and you have checked the IncrementPrefix box, each prefix will include a unique
number).

Suffix
Whatever you type here within single quotes (for example ’-1’) will be tacked onto the end of each hot value or green
variable name in the copies. If a suffix includes a number and IncrementSuffix is checked, this number is
incremented in each copy. Uncheck IncrementSuffix if you want the same suffix added to all controls and green
variables. To add a different suffix to the hot values of each copy, enter a suffix for each Sound copy with a space
separating one from the next (for example, ’Left’ ’Right’ ’LeftSur’ ’RightSur’ ’Center’). Leave this field blank if you do
not want to add any suffixes. If there are fewer IncrementSuffix than copies created by the Replicator, the last
IncrementSuffix will be repeated (and, if it includes a numeral and you have checked the IncrementSuffix box, each
suffix will include a unique number).

258
IncrementPrefix
Check this box if there is a number in the Prefix and you’d like that number to be incremented for each copy of the
Input.

IncrementSuffix
Check this box if there is a number in the Suffix and you’d like that number to be incremented for each copy of the
Input.

LeftBypass
To leave the left channel dry, check this box. When this box is checked, the left channel of the first of the
SharedSounds used directly, without being processed through the rest of the ReplicatedSound chain.

RightBypass
To leave the right channel dry, check this box. When this box is checked, the right channel of the first of the
SharedSounds used directly, without being processed through the rest of the ReplicatedSound

LeftSurBypass
To leave the left surround channel dry, check this box. When this box is checked, the left surround channel of the first
of the SharedSounds used directly, without being processed through the rest of the ReplicatedSound

RightSurBypass
To leave the right surround channel dry, check this box. When this box is checked, the right surround channel of the
first of the SharedSounds used directly, without being processed through the rest of the ReplicatedSound

CenterBypass
To leave the center channel dry, check this box. When this box is checked, the center channel of the first of the
SharedSounds used directly, without being processed through the rest of the ReplicatedSound chain.

Left
(-1,1) level control on the left channel.

Right
(-1,1) level control on the right channel.

LeftSur
(-1,1) level control on the left surround channel.

RightSur
(-1,1) level control on the right surround channel.

Center
(-1,1) level control on the center channel.

Sub
(-1,1) level control on the subwoofer channel.

SubBass
(0,1) control on the amount of subharmonic distortion added to the subwoofer channel.

259
SyntheticSpectrumFromArray
Spectral Sources Category
Creates a synthetic spectrum from two arrays: an array of amplitude values for each track in the frame, and an array
of frequency values for each track in the frame (and, if SendBandwidths is checked, a corresponding array of
bandwidths for each of the tracks as well). A SyntheticSpectrumFromArray should be fed to an OscillatorBank,
FormantBankOscillator, or VocoderChannelBank in order to synthesize the partials, formants, or bank of vocoder
filters. The SyntheticSpectrumFromArray produces a set of envelopes for controlling the parameters of an
OscillatorBank, FormantBankOscillator, or VocoderChannelBank.

NbrPartials
This is the number of partials (or filters) to synthesize. In most cases, it should be the same as the size of the
Frequencies array; however, you can specify a slower update rate for the envelopes by using a larger number here.
The time between updates of the control envelopes is equal to the number you specify here but in units of samples. If
you enter 128 here, for example, the envelopes will be updated every 128 samples (that is about every 3 milliseconds
if your sampling rate is 44.1 kHz).

LogScale
Check this box to output the Frequencies (and, optional Bandwidths) in log rather than linear frequency. In most
cases, this box should be unchecked; the only time it should be checked is if you want to manipulate the frequency
envelopes in pitch space rather than in hertz.

SendBandwidths
Check this box to send bandwidth information. Bandwidths are required for controlling the filters of a
FormantBankOscillator or a VocoderChannelBank, but they are not required for controlling the oscillators in an
OscillatorBank.

Envelope
This is an overall amplitude envelope.

Amplitudes
Enter an array of amplitude values separated by spaces. Enclose any arithmetic expressions or units within curly
braces, for example:
!Amp1 {!Amp2 * 0.5} {-6 db} !KeyVelocity {!KeyDown ramp: 5 s} {0.1 s random}
The number of amplitude values should be the same as the number of frequency values (and optional bandwidth
values). If the frequency, amplitude (and bandwidth if used) arrays are different sizes, the smallest array will be used,
and any extra values in the other two arrays are thrown away.

Frequencies
Enter an array of frequency values separated by spaces. If you leave off the units, the values will be interpreted as
frequencies in hertz. Enclose any arithmetic expressions or frequencies with units within curly braces, for example:
609 {!Freq1 * 1000} {2048 hz} {60 nn} {5 c}
The number of frequency values should be the same as the number of amplitude values (and optional bandwidth
values). If the frequency, amplitude (and bandwidth if used) arrays are different sizes, the smallest array will be used,
and any extra values in the other two arrays are thrown away.

260
Bandwidths
This is array is optional and need only be set if the SendBandwidths box is checked. Bandwidths are required by the
FormantBankOscillator and VocoderChannelBank, but they are not required by the OscillatorBank.
Enter an array of bandwidth values separated by spaces. If you leave off the units, the values will be interpreted as
frequencies in hertz. Enclose any arithmetic expressions or frequencies with units within curly braces, for example:
609 {!Freq1 * 1000} {2048 hz} {60 nn} {5 c}
The number of bandwidth values should be the same as the number of amplitude and frequency values. If the
frequency, amplitude and bandwidth arrays are different sizes, the smallest array will be used and any extra values in
the other two arrays are thrown away.

261
SyntheticSpectrumFromSounds
Spectral Sources Category
Generates a synthetic spectrum whose amplitudes, frequencies (and optionally, bandwidths) are controlled by two
input Sounds. One input supplies the amplitudes and the other supplies the frequencies (optionally alternating with
bandwidths). You can think of each cycle of the input Sounds as defining one frame of the spectrum. If the input
Sounds change from cycle to cycle, then the spectrum will also change from frame to frame.
A SyntheticSpectrumFromSounds (like other Sounds in the Spectral Sources category) outputs spectral envelopes in
the following format:
Left Channel: Amp1 Amp2 ... AmpN
Right Channel: Freq1 Freq2 ... FreqN
For each frame, Amp1 is the amplitude of the first partial (and Freq1 is the frequency or pitch of the first partial),
Amp2 is the amplitude of the second partial (corresponding with Freq2), and AmpN is the amplitude of the highest
numbered partial (specified in NbrPartials). Then the whole sequence repeats for the next frame of the spectrum.
Because of this repetition rate, the output of the SyntheticSpectrumFromSound has a kind of periodicity to it, where
the period is the equal to the same number of samples as there are partials in each frame.

Amplitudes
If the period of this Sound in samples is equal to NbrPartials, then one cycle of this Sound defines one frame’s worth
of amplitudes for the synthesized spectrum. (For example, to synthesize 80 partials, set the Frequency of this Sound
to 80 samp inverse if you want the cycles to line up with frames). If the repetition rate of this Sound is lined up with
the number of partials in each frame of the spectrum, then the waveform of each cycle of this Sound will correspond
to a kind of spectral envelope for each frame of the spectrum. For example, if you select ExponRev as the waveform
of an oscillator whose period is 80 samples and set NbrPartials to 80, then each frame of the spectrum will have high
amplitudes on its lower-numbered partials and lower amplitudes on the upper partials. Even more interesting is to
make this Sound’s frequency adjustable within a narrow range so you can create spectral envelopes that "drift"
because their repetition rates are slightly out of phase with the number of partials being generated on each frame.

FrequenciesAndBandwidths
If the period of this Sound in samples is equal to NbrPartials, then one cycle of this Sound defines one frame’s worth
of frequencies (or pitches i f you have LogScale checked) for the synthesized spectrum. (For example, to synthesize
80 partials, set the Frequency of this Sound to 80 samp inverse if you want the cycles to line up with frames). If the
repetition rate of this Sound is lined up with the number of partials in each frame of the spectrum, then the waveform
of each cycle of this Sound will provide the frequencies for each partial in one frame of the spectrum. For example, if
you select Ramp as the waveform of an oscillator whose period is 80 samples and set NbrPartials to 80, then, in each
frame of the spectrum, the lower-numbered partials will have low frequencies, and the higher-numbered partials will
have high frequencies. Even more interesting is to make this Sound’s frequency adjustable within a narrow range so
you can create spectra that "drift" because their repetition rates are slightly out of phase with the number of partials
being generated on each frame.
If the SyntheticSpectrumFromSounds is controlling something that requires bandwidth (like FormantBankOscillator or
VocoderChannelBank), and you have checked the SendBandwidths box, then every other value of this Sound will be
interpreted as a bandwidth, rather than a frequency.

NbrPartials
This is the number of partials in the synthetic spectrum. It should be greater than or equal to the number of oscillators
or filters in the Sound being controlled by the SyntheticSpectrumFromSounds.

262
LogScale
Check this box to output log-frequency (pitch) envelopes rather than frequency envelopes.

IncludesBandwidths
Check here if the synthetic spectrum is feeding into a Sound that can use bandwidth information (e.g.
FormantBankOscillators and VocoderChannelBanks).

263
TauPlayer
Tau & Psi Category
A TauPlayer plays back a tau file (previously created using the Tau editor) as a mix, a morph, or a cross of the
constituent Psi files. Once you have selected a Tau file, use the pull down menu (located to the right of the disk icon)
to select/deselect the Psi files that should be combined.
In Mix mode, you can scale the frequency, formant, amplitude, and rate of the files. If only one Psi file is selected (or
if you specify the name of a Psi file rather than a Tau file in the TauFile field), you can use this Sound to scale the
frequency, formant, amplitude and rate of that Psi file.
In Morph mode you can, additionally, control the interpolation from one file’s parameter envelopes to those of another
file (in addition to scaling the frequency, formant, amplitude and rate parameters).
You can trigger the playback, set the playback to loop, or control the TimeIndex using a hot value or expression.
To create a Tau file, use File New and select TauFile as the file type. Then select two or more Psi files for alignment
or warping. (To create a Psi file, drag any Sound into the Tau editor, save it as a samples file, and then follow the
analysis steps to create and save a Psi file). When you save in the Tau editor, you create a Tau file that can be
played by the TauPlayer.

TauFile
Select a Tau file; then use the drop down menu just to the right of this field to select which of its Psi files should be
heard in combination. The selected Psi file names are displayed in green. To toggle the selection state of a Psi file,
select it from the drop down list.
To create a Tau file, use the Tau editor. The Tau editor takes several Psi files and presents you with envelopes for
each of the analyzed parameters: frequency, amplitude, and formant. You can use the Tau editor to modify the timing
and the values of these parameters (for example, by bringing the envelopes of two or more Psi files into alignment
with each other). Once you have saved a Tau file you can play it in the TauPlayer.
To play back a single, unedited Psi file (outside the context of any Tau file), enter the name of the .psi file here (or
select it by clicking the disk icon and using the File browser). A single Psi file can be referenced by several different
Tau files (and might sound very different in the context of each Tau file depending on what kinds of modifications
were made to it in the Tau editor).

Frequency
Range: (0, (SignalProcessor halfSampleRate))
This is the original frequency envelope (FreqScale is a modification to this envelope). To use the original frequency
envelope of the Psi file(s), type the word ’default’ in this field. You can also do arithmetic on the default envelope, for
example:
default + !FreqOffset hz
To override the default envelope, specify a frequency in units of pitch or frequency. The following are all ways to
specify the A above middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:

264
!KeyPitch (key number in units of nn plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Range * 12 nn) (continuous controller from 4 c to 4 a)
An example random pitch expression:
0.2 s randExp s random * !Interval + !LogFreq nn

FreqScale
Range: (0, ~(2.0**Cost))
FreqScale is multiplier on the value in the Frequency field. To use the time-varying frequency warping defined in the
Tau file, type ’default’ in this field. To override the default frequency scaling enter a fixed or hot value for scaling the
frequency envelope. Some examples:
!ScaleFreq
0.2 s random abs smooth: 0.2 s + 0.5

FormantScale
Range: (epsilon, ~(2.0**Cost)), where epsilon is a small number > 0
To use the formant warping defined in the Tau file, use ’default’. Otherwise, you can override the default formant
scaling by entering a fixed or hot value for scaling the formant envelope, for example:
!ScaleFormant * 1.5 + 0.5.
NB: Protect the value of FormantScale so that it is always larger than 0! A FormantScale of 0 results in a silent output
and cannot be restarted.

AmpScale
Range: (0, 1)
To use the amplitude warping defined in the Tau file, use ’default’. Otherwise, you can override the default amplitude
scaling by entering a fixed or hot value for scaling the amplitude envelope, for example: !Amp

WarpVoicedOnly
When this box is checked, the file playback will be warped during voiced segments ONLY. Unvoiced segments will
play back unmodified. In other words, if you scale the frequency, formant, amplitude, or rate, you will affect the
voiced segments of the file ONLY. If you morph from one Psi file to the next, no morphing will occur during the
unvoiced segments (if this box is checked); the unvoiced segments will come directly from one of the original files,
whichever one is closest to the morph values (morphing proceeds from left to right through the files according to the
order they appear at the top of the Tau editor).

Trigger
Trigger or retrigger the file to start at the beginning. The trigger occurs on the transition from 0 to a non-zero value.
To avoid looping, set LoopMode to None. For example, you could use the following as triggers:
1 for continuous looping (LoopMode should be set to Live)
!KeyDown trigger from MIDI input
(1 bpm: !BPM) repeatedly trigger at the rate of !BPM beats per minute
!sw01 trigger from a MIDI switch or a Virtual Control Surface button
1 s random gt: !p trigger at random

Rate
Range: (-Infinite, +Infinite)
Controls the timing of the playback. For the original timing, use a Rate of 1. To play through the files at half speed,
use a Rate of 0.5. To play through them twice as fast, use a Rate of 2, etc. To play through the files backwards, use

265
a negative value for Rate.

LoopMode
None: Play back once with no looping (use the Trigger field to replay from the beginning)
Live: Repeatedly loop through the files under live control of StartLoop and EndLoop
TimeIndex: The expression or Sound in the TimeIndex field controls the play position in the files (-1 is the beginning
of the files, 0 is the middle, and 1 is the end).
Markers: When Markers is checked, the time index loops forward and backward from the StartLoop (Red Triangle)
and EndLoop (Blue Triangle) positions that were saved in the TAU editor. The Start and End loop markers are found
at the left and right edges of the top of the TAU editor in the same horizontal strip as the green markers.

LoopStart
Range: (0,1)
When LoopMode is set to Live, LoopStart controls the relative starting point of the loop within the files. The range of
values is (0,1) where 0 corresponds to the beginnings of the files and 1 corresponds with the ends of the files. If the
value of StartLoop is larger than the value of EndLoop, the files are played backwards. (Note that when LoopMode is
not set to Live, LoopStart and LoopEnd have no effect).
To control the start time in seconds, use an expression of the form:
!t s / (’[Link]’ tauFileDuration)
where !t is the time in seconds and you have substituted the name of your tau file for ’[Link]’.

LoopEnd
Range: (0,1)
When LoopMode is set to Live, LoopEnd controls the relative end point of the loop within the files. The range of
values is (0,1) where 0 corresponds to the beginnings of the files and 1 corresponds with the ends of the files. If the
value of StartLoop is larger than the value of EndLoop, the files are played backwards. (Note that when LoopMode is
not set to Live, LoopStart and LoopEnd have no effect).
To control the duration of the loop in seconds, use an expression of the form:
!t s + !dur s / (’[Link]’ tauFileDuration)
where !t is the start time in seconds, !dur is the duration of the loop, and you have substituted the name of your tau
file for ’[Link]’.

Start
Range: (0,1)
Start is the point in the file where playback begins on a retrigger.
To control the start time in seconds, use an expression of the form:
!t s / (’[Link]’ tauFileDuration)
where !t is the time in seconds and you have substituted the name of your tau file for ’[Link]’.

End
Range: (0,1)
End is the point in the files where playback stops.
To control the duration in seconds, use an expression of the form:
!t s + !dur s / (’[Link]’ tauFileDuration)
where !t is the start time in seconds, !dur is the duration, and you have substituted the name of your tau file for
’[Link]’.

266
TimeIndex
Range: (-1,1)
In the TimeIndex field, -1 corresponds to the beginnings of the files, 0 corresponds to the middles of the files and 1
corresponds to the ends of the files. The value in the TimeIndex field corresponds with the playback position in the
files. (Note that when LoopMode is not set to TimeIndex, the value of this field has no effect).
To create a "scrub" control you could use:
!TimeIndex smooth: !Slew s
To create a loop, you could use:
1 repeatingFullRamp: (’nameOfTauFile’ tauFileDuration)
To create a random TimeIndex, you could use:
(1 s randExp) s random smooth: 1 s
To control where you are in the file in terms of seconds, use an expression of the form:
(!t s / ’nameOfTauFile’ tauFileDuration) * 2 - 1

CombinationMode
The Combination mode specifies whether the Psi files of the Tau file are to be Mixed, Morphed, or Crossed.
Mix: You hear a mix of all selected Psi files as they have been modified in the Tau editor (the Morph parameter
fields have no effect in this mode)
Morph: The Morph parameter fields select which one of the Psi files you are listening to (with interpolation from one
to the next, moving from left to right)
Cross: MorphAmp controls which of the Psi file amplitude envelopes is heard. The other Morph parameters behave
as in Morph mode

SourceMorph
Range: (0,1)
Source morph controls which of the Psi files you are hearing. When the value is 0, you hear the first selected Psi file,
when the value is 1 you hear the last selected Psi file and for intermediate values, you hear the selected Psi files in
between the first and the last. For example, if you have three selected Psi files and you change this value from 0 up
to 1, you will hear a smooth change from the first file to the second file to the third file.
When CombinationMode is Mix, the value in this field has no effect.

PitchMorph
Range: (0,1)
PitchMorph controls the transition between frequency envelopes (along with any frequency-scaling you might have
added in the Tau editor). For example, if you have three selected Psi files and you change this value from 0 up to 1,
you will hear a smooth change from the frequency envelope of the first file to that of the second file to that of the third
file.
When CombinationMode is Mix, the value in this field has no effect.

FormantMorph
Range: (0,1)
FormantMorph controls the transition between formant-scaling envelopes (If you have not made any changes to the
formant envelopes in the Tau editor, this control has no audible effect). For example, if you have three selected Psi
files and you change this value from 0 up to 1, you will hear a smooth change from the formant-scaling envelope of
the first file to that of the second file to that of the third file.
When CombinationMode is Mix, the value in this field has no effect.

267
AmpMorph
Range: (0,1)
When CombinationMode is Morph, the AmpMorph controls the transition between amplitude-scaling envelopes (If you
have not made any changes to the amplitude envelopes in the Tau editor, this control has no audible effect). For
example, if you have three selected Psi files and you change this value from 0 up to 1, you will hear a smooth change
from the amplitude-scaling envelope of the first file to that of the second file to that of the third file.
When CombinationMode is Cross, the AmpMorph controls the transition between the actual amplitude envelopes of
the Psi files (as distinct from amplitude-SCALING envelopes applied to the Psi files). This has an effect whether or
not you have made any alterations to the amplitude envelopes in the Tau editor.
When CombinationMode is Mix, the value of this field has no effect.

TimingMorph
Range: (0,1)
TimingMorph controls the transition between rate-scaling envelopes (If you have not made any changes to the timings
or durations of the envelopes in the Tau editor, this control has no audible effect). For example, if you have three
selected Psi files and you change this value from 0 up to 1, you will hear a smooth change from the rate of the first file
to that of the second file to that of the third file.
When CombinationMode is Mix, the value in this field has no effect.

Cost
Cost roughly corresponds to the number of octaves frequency shift that you can achieve (and it also affects how low
the Formant can go and how smooth the time stretching will be). However, the higher the value of Cost, the more
processing power is required by the Sound.

TimeScaling
Check the TimeScaling box for higher quality time stretching. If you aren’t doing time-scaling, uncheck the box to
require less computation.

268
Threshold
Live Capture & Tracking Category
The output of a Threshold is 1 when its Input amplitude exceeds the specified threshold; otherwise it is 0. The
smaller the value of hysteresis, the more sensitive the Threshold is to momentary changes in the Input amplitude.
When trying to detect when an amplitude is exceeded, it is usually a good idea to put your input through an
AmplitudeFollower or PeakDetector first so you are detecting when the amplitude *envelope* exceeds the threshold
rather than when individual sample points might cross the threshold.

Input
When this Sound’s amplitude exceeds the threshold, the output of the Threshold will be a 1 (i.e. the maximum
deviation).

Threshold
When the amplitude of the Input is less than the threshold (plus or minus half the hysteresis), the output of this sound
is zero. Otherwise the output is 1.

Hysteresis
The larger the hysteresis, the less sensitive the Sound will be to small changes in the Input amplitude. Hysteresis
comes from the Greek husteros, come later or behind. This is the tendency of this Sound to stay in its previous state
(either 1 or 0).

269
TimeControl
Time & Duration Category
Slows down or speeds up the rate that time is progressing in its Input by controlling how the time counter is
incremented on the signal processor. This affects only the start time of events within the Input (e.g. if Input is a Script
or Concatenation or contains TimeOffsets), not the sample rate. Thus, its primary use would be in a Timeline, serving
a function similar to the WaitUntil (but in this case, changing the rate of the time cursor rather than completely
stopping it).

Input
The duration of this Sound can be shortened or lengthened depending on the value of Rate.

Rate
This is the rate that time progresses. For example, use 1 to increment time at the normal rate, 0.5 for half speed, 2
for twice as fast, etc.

270
TimeFrequencyScale
Frequency & Time Scaling Category
Simultaneously time stretches and/or frequency scales a disk recording or a sample stored in wavetable memory.

FrequencyScale
The frequency of the input will be multiplied by this value.
For example, to shift up by an octave, the FrequencyScale should be 2, and to shift down and octave, the scale
should be 0.5. To shift up by 3 halfsteps, you would use:
2 raisedTo: (3/12)
To shift down by 7 half steps, you would use:
2 raisedTo: (-7/12)

Rate
This is the rate of playback. The value should be less than or equal to 1, because the Sound can only do time
stretching, not time compression. For example, use 1 to play back at the original rate, 0.5 for half speed, 0.25 for one
quarter of the speed, etc.

Gate
Enter a 1 in this field to play the Sound exactly once at the specified Rate. If you use an EventValue (for example,
!KeyDown) in this field, the Sound can be retriggered as often as you like. When Gate becomes positive, the Sound is
heard; when Gate becomes zero, the Sound is released.

MinInputFreq
This is the minimum frequency you expect to hear at the input. Follow the usual conventions for specifying
frequencies.

MaxInputFreq
This is the maximum frequency you expect to hear at the input. Follow the usual conventions for specifying
frequencies.

MaxFreqScale
This is the largest scale that will be applied to the frequency (the maximum allowable is 4).

Detectors
This determines the sensitivity of the frequency tracking. Try starting with a value of 10, and then experiment with
more or fewer if you want to try fine tuning the frequency tracking. (More is not necessarily better; there is some
optimal number of detectors for each circumstance.)

FromDisk
When the box is checked, read the recording directly from the disk. Otherwise, look for it in wavetable memory.

Sample

271
If FromDisk is checked, this is the name of the disk file. Otherwise, this should be the name of a sample in the
Wavetables list or the name of a segment of wavetable memory being recorded into by a MemoryWriter prior to or in
parallel with this Sound.

FromMemoryWriter
Check FromMemoryWriter when the wavetable does not come from a disk file but is recorded by a MemoryWriter in
real time.

272
TimeOffset
Time & Duration Category
Offsets the start time of its Input by the specified SilentTime. If Retrograde or Reverse is set, a Constant zero is
concatenated to the end of Input; this can be useful for adding some silence to the end of an input to a reverberator or
echo in order to give the reverberation time to die away. (Note, TimeOffset has been deprecated in favor of
SetDuration)

Input
This Sound’s start time is delayed by the amount of time specified in SilentTime. If retrograde or reverse (but not
both) is true, the silence will follow this Sound.

SilentTime
Amount of time to delay the start time of the Input. It can be any amount of time from 0 to the maximum possible
duration. If retrograde or reverse (but not both) is true, this silence follows the Input.

273
TimeStopper
Time & Duration Category
Allows Input to be loaded into the signal processor and start playing but then stops any further progress of time on the
signal processor. Time resumes only when the value in the Resume field becomes nonzero. For example, even if
Input had a duration of 1 samp, it would last until Resume became nonzero. If the input has multiple events in it that
occur sequentially, only the first one will take place immediately; the others will occur only after Resume becomes
nonzero.

Input
This Sound is loaded and started but it will not terminate unless Resume becomes nonzero.

Resume
Time is stopped until this value becomes something other than 0. You could use an EventValue (such as !KeyDown)
in this field to control when time should progress. By putting a Threshold Sound here, you can make the progress of
time depend on the amplitude of another Sound (such as the ADInput). Use an Equality prototype to make time
depend on an Event Value or Sound reaching an exact value.

ResumeOnZero
Click here if you would like time to resume when Resume equals 0 (rather than resuming whenever the value in
Resume becomes nonzero).

274
TriggeredSampleAndHold
Math Category
When triggered, reads a value from Input and holds onto it until triggered again. This is like SampleAndHold except
that the sampling only occurs on triggers, not periodically.

Input
A sample of this Sound is read each time the Trigger becomes positive.

Trigger
When the Trigger becomes positive, one event is triggered. You can trigger several events over the course of the
total Duration of this program as long as the value of Trigger returns to zero before the next trigger. Some example
values for Trigger are:
1 (plays once with no retriggering)
0 (the sound is silent, never triggered)
!KeyDown (trigger on MIDI key down)
!F1 (trigger when MIDI switch > 0)
You can also paste another signal into this field, and events will be triggered every time that signal changes from zero
to a nonzero value. (See the manual for a complete description of hot parameters, EventValues, EventSources, and
Map files).

275
TriggeredSoundToGlobalController
Live Capture & Tracking Category
Takes a number, a pasted Sound, or an Event expression as its input and generates a corresponding EventValue
(either a single event or a continuous controller stream) which, to all other Kyma Sounds, looks the same as
EventValues coming from the Virtual Control Surface or from an external MIDI source. The value is updated once
whenever the Trigger becomes positive.
The GeneratedEvent’s value is displayed in the VCS, but you cannot control it there.

GeneratedEvent
Enter an EventValue name (including the exclamation point prefix) for the generated EventValue.

Value
Paste a Sound or enter a number or EventValue here. The constant or time-varying value here will be translated into
an EventValue named in GeneratedEvent.
The value specified here will have its range modified by the settings in the VCS. This means that if the range of
values specified here is (0, 1), the GeneratedEvent will take on values between the minimum and maximum (with
grid) specified in the VCS. Alternatively, if you leave the VCS settings at their default of minimum 0, maximum 1, and
grid 0, then the GeneratedEvent will have exactly the same value as the value specified here.

Silent
If the Silent box is not checked, the audio output of this Sound is the value entered in the Value field. Check the Silent
box to output silence.

Trigger
When Trigger becomes greater than zero, the GeneratedEvent will be set to Value.

276
TunableVocoder
Vocoders Category
Tune the base frequency of the vocoder and control the spacing of the center frequencies of the filters.

Input
The sound source that you hear going through the filter bank.

SideChain
The spectrum of this Sound controls the amplitudes of each filter in the filter bank.

TimeConstant
The smaller the time constant, the more quickly the amplitude envelopes respond to changes in the side chain
spectrum. Longer time constants result in a less precise sound (and give a reverberated effect).

NbrBands
This is the number of filters desired.

BankSize
This is the number of filters that should be scheduled on each processor. Ordinarily you should leave this set to
default. If you run out of realtime processing, you can try reducing the bankSize, as for example
0.75 * default

LogSpacing
Check this box to specify the spacing between center frequencies as an interval in pitch space. Uncheck the box if
you prefer to specify the spacing as a frequency in hertz.

AnalysisFreq
This is the lowest center frequency in the filter bank operating on the SideChain.

SynthesisFreq
This is the lowest center frequency in the filter bank operating on the Input.

AnalysisLevel
This is an attenuator on the amplitude of the SideChain before it goes through the filters.

SynthesisLevel
This is an attenuator on the amplitude of the Input before it goes through the filters.

AnalysisSpacing
This is the spacing between the center frequencies of the filters on the SideChain. Use nn as the units if
LogFrequency is checked. Use hz as the units if LogFrequency is unchecked.

SynthesisSpacing

277
This is the spacing between the center frequencies of the filters on the Input. Use nn as the units if LogFrequency is
checked. Use hz as the units if LogFrequency is unchecked.

AnalysisBW
This is a control on the bandwidth of the filters on the SideChain.

SynthesisBW
This is a control on the bandwidth of the filters on the Input.

Tone
This is a tone control. Higher values emphasize the filters with higher center frequencies. Lower values emphasize
the filters with lower center frequencies. (Rolloff determines the narrowness of this filter).

Rolloff
This is a control on the bandwidth of the Tone filter. Set this to 0 if all filters should have equal weight. The bigger the
value of Rolloff, the sharper the cutoff on the effect of the Tone filter.

Gain
You can boost or cut the final output amplitude here.

278
TwoFormantElement
Filters Category
A TwoFormantElement is realized as a DualParallelTwoPoleFilter; however, rather than specifying the filter in terms
of pole locations, you specify the desired center frequency and bandwidth of the two formants.

Input
This is the Sound to be filtered.

Formant1
This is the center frequency of the first formant.

Bandwidth1
This is the bandwidth of the lower formant region. The narrower the bandwidth, the more "pitched" the formant will
sound--also the more likely the the filter is to overflow.

Scale1
This controls the amplitude of the first formant. For the full amplitude use +1.0 or -1.0; any factor whose absolute
value is less than 1 will attenuate the output.

Formant2
This is the center frequency of the second formant.

Bandwidth2
This is the bandwidth of the upper formant region. The narrower the bandwidth, the more "pitched" the formant will
sound--also the more likely the the filter is to overflow.

Scale2
This controls the amplitude of the second formant. For the full amplitude use +1.0 or -1.0; any factor whose absolute
value is less than 1 will attenuate the output.

279
TwoFormantVoiceElement
Filters Category
An excitation signal similar to a glottal pulse (with a randomly chosen rate of vibrato) is used as the input to a pair of
parallel second-order filter sections that simulate two of the formants of the vocal cavity.

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

Formant1
For an [IY] sound, try a center frequency of 238 hz. This will be the center frequency of the first formant. This is not
the fundamental frequency of the TwoFormantVoiceElement but the center of an emphasized region of the spectrum.

Bandwidth1
For an [IY] sound, try a a bandwidth of 70 hz. This is the bandwidth of the lower formant region. The narrower the
bandwidth, the more "pitched" the formant will sound--also the more likely the the filter is to overflow.

Scale1
For an [IY] sound, scale this formant to 0.3. This controls the amplitude of the first formant. For the full amplitude use
+1.0 or -1.0; any factor whose absolute value is less than 1 will attenuate the output.

Formant2
For an [IY] sound, try a center frequency of 1741 hz. This will be the center frequency of the second formant. This is
not the fundamental frequency of the TwoFormantVoiceElement but the center of an emphasized region of the
spectrum.

Bandwidth2
For an [IY] sound, try a a bandwidth of 100 hz. This is the bandwidth of the upper formant region. The narrower the
bandwidth, the more "pitched" the formant will sound--also the more likely the the filter is to overflow.

Scale2
For an [IY] sound, scale this formant to 1.0. This controls the amplitude of the second formant. For the full amplitude
use +1.0 or -1.0; any factor whose absolute value is less than 1 will attenuate the output.

280
Seed
Supply an integer less than 2**30 as a seed for the random number generator that controls the vibrato rate.

281
Variable
Variables & Annotation Category
A Variable is a placeholder that represents a single Sound. You can assign a value to the Variable in a Script or
related Sound by typing the name of the Variable followed by a colon, a space, and then the name of the Sound that
you want to assign to the variable.
You can also use a Variable Sound to represent a Sound Input to a User Defined Class (See the Action menu, New
class from example).

282
VCA
Envelopes & Control Signals Category
Multiplies its Inputs together. To apply an amplitude envelope to a Sound, use the Sound and the envelope generator
as inputs to this Sound.

Inputs
These Sounds are multiplied together. Typically the inputs are a Sound and the amplitude envelope that you want to
apply to the Sound.

283
VCF
Filters Category
Analog voltage-controlled-filter emulation.

Input
This is the Sound to be filtered.

Amplitude
Controls attenuation of the Input’s amplitude. This field accepts numbers, expressions, or Sounds. To use an
audio-rate control, paste a Sound in the field and remove the ’L’ after the Sound name.

Cutoff
The cutoff frequency for the filter can be specified in units of pitch or frequency. When Resonance is close to 1, the
filter will tend "ring" at the cutoff frequency. The value in this field is frequency modulated as: Cutoff +
(CutoffModulator * CutoffModRange).
Frequencies can be specified in the following manner:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

CutoffModulator
This input modulates the filter cutoff frequency. A full scale signal will modulate the cutoff frequency by the amount
shown in CutoffModRange. When this value is 0 there is no modulation, when it is positive the Cutoff frequency goes
higher, when it is negative the Cutoff frequency goes lower.

CutoffModRange
The CutoffModRange specifies the range in frequency or pitch that the CutoffModulator input will have on the filter
cutoff. When CutoffModulator is a full scale signal will modulate the cutoff frequency by the amount shown in
CutoffModRange. Since the actual cutoff frequency is Cutoff + (CutoffModulator * CutoffModRange), a CutoffRange
that is larger than the Cutoff can result in negative frequencies.

Resonance
The higher the Resonance, the longer the filter will ring in response to an input. A Resonance of 1 will cause the filter
to ring at the cutoff frequency. To control this parameter at the audio rate, paste a Sound in the field and delete the
’L’ after the Sound name.

284
Vocoder
Vocoders Category
The Vocoder applies the spectral character of the SideChain Sound onto the Input Sound. What you hear is the Input
Sound filtered by the SideChain Sound. For example, you can use this module to apply the spectral characteristics of
human speech (the SideChain) onto any other sample or synthetic sound (the Input). On some analog vocoders, the
SideChain input is called the "modulation" input.
The Vocoder is implemented as two filter banks--an analysis bank and a resynthesis bank. The analysis bank is used
to measure the amount of energy in each frequency band of the SideChain Sound. The resynthesis bank is used to
filter the Input Sound. There is an amplitude follower on the output of each of the filters in the analysis bank. The
resulting amplitude envelopes are then applied to the corresponding filters in the resynthesis bank. In this way, the
SideChain controls the amplitude envelopes on the resynthesis filters.

Input
This is the source material to be filtered by the SideChain-controlled filters. This Sound is heard directly, through the
filters (whereas the SideChain is never heard directly). For example, if you want to make an animal talk, put a sample
of the animal sound here and put a sample of speech (or use a microphone) as the SideChain.
The best Inputs tend to be fairly broad band signals that have energy in each of the frequency bands covered by the
resynthesis filter bank. For example, Noise or an Oscillator on a waveform with lots of harmonics (such as Buzz128)
will work well because they generate energy over the full frequency range.

SideChain
Sometimes referred to as the "modulation", this Sound is never heard directly; it controls the amplitudes of the filters
in the bank.

TimeConstant
This determines how quickly the amplitude envelopes on the filters will respond to changes in the SideChain. For
precise, intelligible results, use values less than 0.1 s. For a more diffuse, reverberated result, use a longer
TimeConstant.

NbrBands
This is the number of band pass filters in the filter bank. In other words, this is the number of equally-spaced
frequency bands between LowCF and HighCF, inclusive.

BankSize
This is the number of filters per expansion card. In general, you should be able to get about 10 to 11 filters per card.
Experiment with fewer or more filters per card to optimize the efficiency of your particular Sound.

InputLevel
Controls the level on the input Sound before it goes through the filters.

SideLevel
Controls the level of the SideChain Sound before it is fed into the analysis filters.

LowCF
This is the center frequency of the lowest bandpass filter in the bank.

285
HighCF
This is the center frequency of the highest bandpass filter in the bank.

InFreq
This is a scale factor on all of the center frequencies in the "resynthesis" bank.

SideFreq
A scale factor on all of the center frequencies in the "analysis" filter bank.

Bw
A control on the bandwidth of all the bandpass filters in both the analysis and the resynthesis filter banks.

Pitch
Check here if you would like the bandpass filters to be spaced equally in pitch space from the LowCF to the HighCF.
If you uncheck this box, the filters will be spaced equally in frequency space.

LoCutoff
Everything below this frequency should drop off in amplitude according to the slope specified in Rolloff. This is a
weak tone-control-style filter applied to the Input Sound before it is fed to the resynthesis filter bank. Use it to
attenuate the low end if the output is too boomy (or set it to 0 hz if you want to give your subwoofers something to do).

HiCutoff
Everything above this frequency should drop off in amplitude according to the slope specified in Rolloff. This is a
weak tone-control-style filter applied to the Input Sound before it is fed to the resynthesis filter bank. Use it to
attenuate the high end if the output is too piercing or trebly. Set it to an even higher frequency if the output sounds
muffled or low pass and you would like to boost the high end.

Rolloff
This controls the steepness of the edges of a weak tone control filter on the Input. Use 1 if the edges should rolloff
precipitously at LoCutoff and HiCutoff. Use smaller numbers if you would like the attenuation to start sooner and take
longer.

286
VocoderChannelBank
Vocoders Category
For most situations, you should use a Vocoder rather than the VocoderChannelBank, because the Vocoder is a
higher-level Sound with higher-level parameters and controls. Use a VocoderChannelBank only in those situations
requiring independent control over the center frequency, amplitude, and bandwidth of each filter in both the analysis
and the resynthesis filter banks.
The VocoderChannelBank works by feeding the sidechain input through a bank of bandpass filters (the analysis
filters), extracting an amplitude envelope from the output of each of those filters, applying the extracted amplitude
envelopes to a second bank of filters (the synthesis filters), and feeding the input through that bank of filters.
To see an example of how the VocoderChannelBank can be used, drag a Vocoder into a Sound file window and
expand it; it expands into cascaded VocoderChannelBanks.

CascadeInput
The cascaded input is added to whatever output is produced by this VocoderChannelBank. Use it to cascade several
VocoderChannelBanks when you need more filter banks than can fit on a single expansion card (usually around 11).

Input
This is the Sound that is actually heard through the filter bank. The output of the VocoderChannelBank is the sound
of the Input but filtered through formants of the SideChain.
The kinds of Inputs that work best are those that are broadband and continuous enough to excite all of the filters in
the bank at all times.

SideChain
This is the Sound that controls the amplitude envelopes on each of the filters in the filter bank. The formants of the
SideChain will be imposed on the basic sound characteristics of the Input.
The kinds of SideChains that work best are those with strong formants that change noticeably over time (e.g. human
speech, tablas, mouth harps).

InputParameters
This should be a Sound from the spectral sources category (most typically the SyntheticSpectrumFromArray). Use
the spectral source Sound to specify the center frequencies, amplitudes, and bandwidths for all the filters in the
synthesis bank.
To use the same settings on both the analysis filters and the synthesis filters (as it is in the classic channel vocoder),
hold down the option key and drag this Sound into the SideChainParameters field.

SideChainParameters
This should be one of the Sounds from the spectral sources category (most typically the
SyntheticSpectrumFromArray). Use the spectral source Sound to specify the center frequencies, amplitudes, and
bandwidths for all the filters in the analysis bank.
To use the same settings on both the analysis filters and the synthesis filters (as it is in the classic channel vocoder),
hold down the option key and drag this Sound into the InputParameters field.

287
TimeConstant
Controls the reaction time of the envelope follower on each of filters in the side chain bank. Smaller numbers should
be used for better intelligibility, larger numbers for a more diffuse, reverberated result.

First
This is the number of the first filter in this bank. If this is the first VocoderChannelBank in a cascade, this number will
be 1, but the next VocoderChannelBank in the cascade should start at (1 + Count). The total number of filters in the
entire cascade should be equal to the NbrPartials specified in the InputParameters and the SideChainParameters.

Count
This is the total number of filters in this bank. You can get about 11 filters per card on a Capybara-66. To get more
filters, feed this Sound into the cascade input of another VocoderChannelBank.

288
WaitUntil
Time & Duration Category
Don’t start the Input Sound until the Resume condition is true. This is like TimeStopper except that a WaitUntil won’t
even let its Input start until the Resume value becomes nonzero (and a TimeStopper lets its Input get started but
won’t let it end until Resume becomes nonzero).
The primary use for this Sound is in the Timeline. If you place a WaitUntil in one track of a Timeline, when the time
cursor reaches the WaitUntil, the time cursor stops (in all tracks) until the Resume condition is met.

Input
Input will not start until Resume becomes nonzero.

Resume
Input will not start playing until this value becomes positive.
If this field contains a Sound, the Input will not resume until the Sound in this field ends.

ResumeOnZero
Click here if you want the Input to start whenever Resume becomes zero (rather than whenever it is no longer zero).

289
WarpedTimeIndex
Time & Duration Category
Can be used as the input to any Sound that requires a time index (e.g. GAOscillators, REResonator, SampleCloud,
SpectrumInRAM). Generates a time index with a variable slope so that it can move more quickly through some parts
of sound and more slowly through others. You provide a set of current time points that should be adjusted forward or
backward in time to match a set of ideal time points, and it generates a time index function that moves from -1 up to 1
but with a varying slope.

IdealTimePoints0
Enter a chronological sequence of time points with units, enclosed within curly braces and separated by spaces.
These are the new time points. Time will be sped up or slowed down to make the CurrentTimePoints line up with
these ideal time points when Morph is zero.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

IdealTimePoints1
Enter a chronological sequence of time points with units, enclosed within curly braces and separated by spaces.
These are the new time points. Time will be sped up or slowed down to make the CurrentTimePoints line up with
these ideal time points when Morph is one.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

CurrentTimePoints
Enter a chronological sequence of time points with units, enclosed within curly braces and separated by spaces.
These are the time points that should be moved forward or backward in time in order until they line up with the
IdealTimePoints.
In this field, you must enclose expressions within curly braces, for example: {!Val1 * !KeyVelocity}

Trigger
Each time this value changes from a zero to a number greater than zero, the time function starts over again from the
beginning.

Rate
This is the rate of the time index. For example, use 1 to play back at the original rate, 0.5 for half speed, 2 for twice
as fast, etc.

Morph
This controls which set of ideal time points should be used. Intermediate settings interpolate between the sets of ideal
time points.

290
Waveshaper
Distortion & Waveshaping Category
The Input is used as an index into the table specified in ShapingFunction (if ShapeFrom is set to Wavetable) or as the
input to a polynomial whose coefficients are those listed in the Coefficients parameter field (if ShapeFrom is set to
Polynomial).
Unless the ShapingFunction or polynomial is a straight line, the Input will be nonlinearly distorted. The distortion adds
harmonics to the synthesized or sampled Input. Since polynomials tend to be close to linear around zero and less
linear the further they are from zero, low amplitude Inputs will be less distorted than high amplitude Inputs. This tends
to match the behavior of physical instruments (which sound "brighter" when played louder) and also of electronic
components like amplifiers which produce harmonic distortions of their inputs at high amplitudes.
A Waveshaper can also be used to map non-signal Inputs to new values according to the ShapingFunction or
polynomial. For example, if the Input were a Constant whose Value were !Pitch, the full range of MIDI notenumbers
could be remapped by a Waveshaper to frequencies of an alternate tuning system as stored in a table (the
ShapingFunction).

Input
This Sound is used as an index into the ShapingFunction (or as the input into the polynomial described the list of
Coefficients).

Interpolation
Choose whether to use only integer values to index into the ShapingFunction or whether to use the fractional part of
the Input value to interpolate between the values actually stored in the table to values that would fall "inbetween" the
table entries if the actual values were connected by a straight line.

ShapeFrom
Choose whether to use a function stored in a table (Wavetable) or a polynomial computed on the fly using the
Coefficients (Polynomial).

ShapingFunction
Select the wavetable that will be used to map the Input to the output.

Coefficients
Enter a list of coefficients A0 A1 A2 ... An (separated by spaces) for a polynomial of the form:
A0 + A1x + A2x^2 + A3x^3 + ... + Anx^n
where Input is x.
In this field, you must enclose expressions within curly braces, for example:
0 {!Val1 * !KeyVelocity} 0.25 1

FromMemoryWriter
Check FromMemoryWriter when the shaping function does not come from a disk file but is recorded by a
MemoryWriter in real time.

291
XenOscillator
Oscillators Category
The waveform of the XenOscillator is determined by breakpoints that you supply in the XValues and YValues fields.
Depending on the value of the Smoothing parameter, the waveform breakpoints are connected by stairsteps, straight
lines, or smooth curves. The XValues and YValues fields are hot, so the waveform can change continuously as the
oscillator is playing.
This oscillator was inspired by the chapter "New Proposals in Microsound Structure" in Iannis Xenakis’ _Formalized
Music: Thought and Mathematics in Compostion_ in which he proposes generating waveforms that are stochastic
variations of sound pressure (for example, by using random number generators to continuously change the YValues
of this Sound so that it never repeats exactly).

Frequency
The frequency can be specified in units of pitch or frequency. The following are all ways to specify the A above
middle C:
440 hz (in hertz or cycles per second)
4a (as the 4th octave A)
69 nn (as a MIDI notenumber)
4 c + 9 nn (as 9 half steps above middle C)
1.0 / 0.00227273 s (inverse of a period at 44.1 kHz sample rate)
The following are examples of how to control the frequency using MIDI, the virtual control surface, or a third-party
program:
!Pitch (key number plus pitch bend)
!KeyNumber nn (MIDI notenumber)
4 c + (!Frequency * 9 nn) (continuous controller from 4 c to 4 a)

XValues
This is an array of values specifying the horizontal position of each value in the waveform. You can think of each of
these values as a phase value or a time point in the waveform. Alternatively, you could think of each value in this
array as the x value of a point in the waveform function. The range of x values goes from -1.0 to 1.0, and the values
should be entered in ascending order. The first value should be -1 and the last should be 1 (if not, Kyma will
automatically add these values as the first and last points). The values can be numbers or expressions. Expressions
must be delineated by curly braces, for example:
{!x0 * 0.1 + 0.1}
You can also generate the array algorithmically in Smalltalk, for example:
{(1 to: 9) collect: [:i | (i - 1) / 8.0 * 2 - 1]}

YValues
This is an array of values specifying the vertical position of each point in the waveform. You can think of each of
these values as an amplitude value or as the size of the deviation up or down in the waveform. Alternatively, you
could think of each value in this array as the y component of a point in the waveform function. The range of y values
goes from -1.0 to 1.0, and the values can be numbers or expressions. Expressions must be delineated by curly
braces, for example:
{!y0 * 0.1 + 0.1}

292
You can also generate the array algorithmically in Smalltalk, for example:
{(1 to: 9) collect: [:i | (i - 1) / 8.0 * 2 - 1]}

Smoothing
Choose 0 for a stairstep waveform, 0.5 if you want straight lines connecting the breakpoints, and 1 if you want smooth
curves connecting the points. In other words, for the values that lie *between* the x,y points you have provided as the
breakpoints of the waveform function:
* Each y-value is the same as that of the previous breakpoint (Smoothing = 0)
* Each point lies on a straight line between the previous breakpoint and the next breakpoint (Smoothing = 0.5)
* Each point lies on a spline curve that also includes the previous and the next points
OR something in between these behaviors if Smoothing is between 0 and 0.5 or between 0.5 and 1.

Modulation
Select whether or not the frequency is to be modulated by the Modulator input. (Note: If the Modulator has hot values
in it, they will *not* show up in the Virtual Control Surface when this box is unchecked.)

Modulator
If Modulation has been set to frequency, then this Sound is the Modulator (otherwise it is ignored). Usually the
Modulator is another Oscillator, but a Sound can be used to modulate the Frequency.

MaxMI
This is the value of the modulation index when the Modulator is at its full amplitude.

Interpolation
The Linear box should be checked when using the Oscillator as an audio signal. If you are using it as a control
signal, you can save on processing time by checking None.

Envelope
This is an attenuator on the output of the Oscillator. Enter 1 (or 0 dB) for the full amplitude. For a time-varying
amplitude, paste in a Sound (such as AR, ADSR, or FunctionGenerator) or an Event Value (such as !Volume) in this
field. It is advisable to smooth the EventValue (for example !Volume smoothed) or to use a full sample rate Sound
pasted into the Envelope field. For full sample rate amplitude envelopes, erase the ’L’ that automatically appears
after the name of the pasted Sound.

Reset
When reset is changed from a 0 to any nonzero number, the phase of the Oscillator is reset to zero. This means that
the Oscillator jumps back to the beginning of the cycle.

Formant
This number is a multiple of the Frequency (range of 1 to 511). At the minimum value, 1, you hear the fundamental
frequency of this oscillator. For higher values, you hear a filtering effect, as if a bandpass filter were sweeping at a
multiple of the Frequency. For numbers greater than 1, the Oscillator reads through its wavetable at a faster rate than
Frequency and outputs zero until the next period starts.
If you prefer to think of this as the DutyCycle of the waveform, you can use the following expression in this field to
give yourself realtime control of the DutyCycle. (Note, !Frequency should be the same as the value that you have in
the Frequency field):
((!Duty vmax: 0.001) inverse vmin: (SignalProcessor halfSampleRate hz / !Frequency hz)) vmin: 511

293
294
Sound Classes by Category
Sources & Generators FormantBank 50
Sources & Generators CloudBank 19
Sources & Generators CrossfadingMulticycleOscillator 25
Sources & Generators DiskPlayer 35
Sources & Generators DynamicRangeController 38
Sources & Generators FilterBank 47
Sources & Generators TwoFormantElement 279
Sources & Generators Oscillator 172
Sources & Generators GenericSource 59
Sources & Generators GrainCloud 60
Sources & Generators AudioInput 12
Sources & Generators ModalFilter 99
Sources & Generators SumOfSines 255
Sources & Generators ChannelJoin 15
Sources & Generators Mixer 98
Sources & Generators Morph3dGA 135
Sources & Generators Morph3dPsi 140
Sources & Generators Multisample 161
Sources & Generators MultiSampleCloud 163
Sources & Generators Noise 171
Sources & Generators Stereoizer 250
Sources & Generators OscillatorBank 174
Sources & Generators PsiPlayer 188
Sources & Generators PulseGenerator 192
Sources & Generators SpectrumAnalyzerDisplay 227
Sources & Generators Level 76
Sources & Generators Sample 203
Sources & Generators SampleCloud 206
Sources & Generators SlipStick 222
Sources & Generators SplitSurroundFilePlayer 243
Sources & Generators Replicator 195
Sources & Generators SplitSurroundSample 245
Sources & Generators TimeFrequencyScale 271
Sources & Generators MultiplyingWaveshaper 160
Sources & Generators XenOscillator 292
Sources & Generators KBD Ctrl OscillatorBank 174
Sources & Generators KBD Ctrl ScaleVocoder 210

295
Sources & Generators KBD Ctrl CrossfadingMulticycleOscillator 25
Sources & Generators KBD Ctrl Mixer 98
Sources & Generators KBD Ctrl FormantBank 50
Sources & Generators KBD Ctrl FormantBank-Element 52
Sources & Generators KBD Ctrl GAOscillators 57
Sources & Generators KBD Ctrl GrainCloud 60
Sources & Generators KBD Ctrl HarmonicResonator 64
Sources & Generators KBD Ctrl KeyMappedMultisample 74
Sources & Generators KBD Ctrl ModalFilter 99
Sources & Generators KBD Ctrl SumOfSines 255
Sources & Generators KBD Ctrl Morph1dGA 105
Sources & Generators KBD Ctrl Morph2dKeymappedGA 118
Sources & Generators KBD Ctrl Morph2dKeymappedPsi 122
Sources & Generators KBD Ctrl Morph2dKeymappedSampleCloud 126
Sources & Generators KBD Ctrl Stereoizer 250
Sources & Generators KBD Ctrl Product 187
Sources & Generators KBD Ctrl VCA 283
Sources & Generators KBD Ctrl Multisample 161
Sources & Generators KBD Ctrl Filter 45
Sources & Generators KBD Ctrl Oscillator 172
Sources & Generators KBD Ctrl VCF 284
Sources & Generators KBD Ctrl Replicator 195
Sources & Generators KBD Ctrl Level 76
Sources & Generators KBD Ctrl SampleCloud 206
Sources & Generators KBD Ctrl SelectableSound 216
Sources & Generators KBD Ctrl TunableVocoder 277
Sources & Generators KBD Ctrl IteratedWaveshaper 73
Sources & Generators KBD Ctrl XenOscillator 292
Additive Synthesis OscillatorBank 174
Additive Synthesis DynamicRangeController 38
Additive Synthesis Mixer 98
Additive Synthesis GAOscillators 57
Additive Synthesis SumOfSines 255
Additive Synthesis ChannelJoin 15
Additive Synthesis Morph1dGA 105
Additive Synthesis Stereoizer 250
Additive Synthesis Morph2dKeymappedGA 118
Additive Synthesis Morph3dGA 135
Additive Synthesis Product 187
Additive Synthesis PartialOscillatorBank 181

296
Additive Synthesis Level 76
Aggregate Synthesis CloudBank 19
Aggregate Synthesis FilterBank 47
Aggregate Synthesis FormantBank 50
Aggregate Synthesis Stereoizer 250
Aggregate Synthesis Level 76
Compression/Expansion Replicator 195
Compression/Expansion DynamicRangeController 38
Compression/Expansion Crossfade 24
Compression/Expansion Mixer 98
Compression/Expansion MultiToMultichannel 169
Compression/Expansion Level 76
Cross Synthesis DynamicRangeController 38
Cross Synthesis CrossFilter_Long 27
Cross Synthesis ChannelJoin 15
Cross Synthesis CrossFilter_Short 29
Cross Synthesis REResonator 197
Cross Synthesis Vocoder 285
Crossfading Crossfade 24
Crossfading Interpolate 70
Crossfading InterpolateN 71
Delays DelayWithFeedback 31
Delays Mixer 98
Delays CrossFilter_Long 27
Disk DiskCache 34
Disk DiskRecorder 36
Distortion & Waveshaping Mixer 98
Distortion & Waveshaping Level 76
Distortion & Waveshaping MultiplyingWaveshaper 160
Drum Machines StereoMix4 253
Envelopes & Control Signals ADSR 2
Envelopes & Control Signals Product 187
Envelopes & Control Signals Level 76
Envelopes & Control Signals AR 10
Envelopes & Control Signals Constant 21
Envelopes & Control Signals FunctionGenerator 56
Envelopes & Control Signals GraphicalEnvelope 62
Envelopes & Control Signals Oscillator 172
Envelopes & Control Signals MultisegmentEnvelope 165

297
Envelopes & Control Signals MultislopeFunctionGenerator 167
Envelopes & Control Signals PeakDetector 182
Envelopes & Control Signals PulseTrain 193
Envelopes & Control Signals SampleAndHold 205
Envelopes & Control Signals SlewRateLimiter 221
Envelopes & Control Signals Difference 33
Envelopes & Control Signals TriggeredSampleAndHold 275
Envelopes & Control Signals VCA 283
EQ StereoMix2 252
EQ Vocoder 285
EQ Level 76
EQ EQFilter 40
EQ GraphicEQ 63
EQ PresenceFilter 185
EQ HighShelvingFilter 65
EQ LowShelvingFilter 80
EQ ModalFilter 99
EQ MultiToMultichannel 169
Feedback DelayWithFeedback 31
Feedback MemoryWriter 84
Feedback FeedbackLoopInput 42
Feedback FeedbackLoopOutput 43
Filters SelectableSound 216
Filters Stereoizer 250
Filters Filter 45
Filters AnalysisFilter 8
Filters AveragingLowPassFilter 13
Filters ScaleVocoder 210
Filters Difference 33
Filters DualParallelTwoPoleFilter 37
Filters EQFilter 40
Filters FIRFilter 48
Filters GraphicEQ 63
Filters HarmonicResonator 64
Filters HighShelvingFilter 65
Filters LowShelvingFilter 80
Filters ModalFilter 99
Filters PresenceFilter 185
Filters Mixer 98
Filters TunableVocoder 277

298
Filters TwoFormantElement 279
Filters VCF 284
Filters Vocoder 285
Flanging & Chorusing Mixer 98
Flanging & Chorusing StereoMix4 253
Frequency & Time Scaling OscillatorBank 174
Frequency & Time Scaling Annotation 9
Frequency & Time Scaling FrequencyScale 53
Frequency & Time Scaling Monotonizer 104
Frequency & Time Scaling PsiPlayer 188
Frequency & Time Scaling QuadOscillator 194
Frequency & Time Scaling SimplePitchShifter 219
Frequency & Time Scaling Level 76
Frequency & Time Scaling SpectrumFrequencyScale 228
Frequency & Time Scaling TauPlayer 264
Frequency & Time Scaling SumOfSines 255
Frequency & Time Scaling TimeFrequencyScale 271
Frequency & Time Scaling Mixer 98
Gain & Level Level 76
Global Controllers SoundToGlobalController 225
Global Controllers Mixer 98
Global Controllers TriggeredSoundToGlobalController276
Granular Synthesis GrainCloud 60
Granular Synthesis MultiSampleCloud 163
Granular Synthesis Mixer 98
Granular Synthesis SampleCloud 206
Granulating & Chopping Chopper 18
Granulating & Chopping Mixer 98
Granulating & Chopping Product 187
Inputs AudioInput 12
Inputs GenericSource 59
Inputs Mixer 98
Inputs SelectableAudioInput 214
Live Capture & Tracking Level 76
Live Capture & Tracking Threshold 269
Live Capture & Tracking FrequencyTracker 54
Live Capture & Tracking MemoryWriter 84
Live Capture & Tracking PeakDetector 182
Live Capture & Tracking Mixer 98

299
Live Capture & Tracking SlewRateLimiter 221
Looping Sample 203
Looping AnalogSequencer 5
Looping Mixer 98
Math AbsoluteValue 1
Math Level 76
Math ArcTan 11
Math Difference 33
Math Equality 41
Math HilbertTransform 66
Math Interpolate 70
Math InterpolateN 71
Math Constant 21
Math PhaseShiftBy90 183
Math Product 187
Math DelayWithFeedback 31
Math RunningMax 201
Math RunningMin 202
Math SampleAndHold 205
Math ScaleAndOffset 209
Math SetRange 218
Math SqrtMagnitude 247
Math TriggeredSampleAndHold 275
MIDI In MIDIMapper 87
MIDI In MIDIVoice 93
MIDI In SoundToGlobalController 225
MIDI Out MIDIFileEcho 86
MIDI Out MIDIOutputController 90
MIDI Out MIDIOutputEvent 91
MIDI Out MIDIOutputEventInBytes 92
Mixing ChannelJoin 15
Mixing Crossfade 24
Mixing Matrix4 81
Mixing Matrix8 82
Mixing Mixer 98
Mixing MultichannelMixer 155
Mixing MultiToMultichannel 169
Mixing OverlappingMixer 178
Mixing StereoInOutput8 249
Mixing StereoMix2 252

300
Mixing StereoMix4 253
Modulation Oscillator 172
Modulation Product 187
Modulation Level 76
Modulation VCA 283
Morphing SumOfSines 255
Morphing ChannelJoin 15
Morphing OscillatorBank 174
Morphing Morph1dGA 105
Morphing Morph1dSampleCloud 111
Morphing CloudBank 19
Morphing Stereoizer 250
Morphing Level 76
Morphing FormantBank 50
Morphing Morph2dKeymappedGA 118
Morphing Morph2dKeymappedSampleCloud 126
Morphing Morph3dGA 135
Morphing Morph3dPsi 140
Morphing Morph3dSampleCloud 145
Morphing TauPlayer 264
Oscillators CrossfadingMulticycleOscillator 25
Oscillators GAOscillators 57
Oscillators Oscillator 172
Oscillators KeyMappedMultisample 74
Oscillators SpectrumAnalyzerDisplay 227
Oscillators VCF 284
Oscillators Replicator 195
Oscillators QuadOscillator 194
Oscillators XenOscillator 292
Outputs Matrix4 81
Outputs Matrix8 82
Outputs Output4 176
Outputs Output8 177
Outputs SelectableAudioOutput 215
Outputs StereoInOutput4 248
Outputs StereoInOutput8 249
Panning Stereoizer 250
Panning Output4 176
Panning MultichannelPan 156

301
Panning Pan 179
Recording DiskCache 34
Recording DiskRecorder 36
Replicators & Prefixers Replicator 195
Replicators & Prefixers Prefixer 184
Reverb GraphicEQ 63
Reverb Mixer 98
Reverb StereoInOutput4 248
Reverb ReverbSection 198
Reverb Surroundifier 258
Reverb MonoToMultichannel 102
Sample playback DiskPlayer 35
Sample playback GenericSource 59
Sample playback MultifileDiskPlayer 158
Sample playback KeyMappedMultisample 74
Sample playback Morph1dSampleCloud 111
Sample playback Morph2dKeymappedSampleCloud 126
Sample playback Morph3dSampleCloud 145
Sample playback Multisample 161
Sample playback Mixer 98
Sample playback MultiSampleCloud 163
Sample playback Filter 45
Sample playback Sample 203
Sample playback SampleCloud 206
Sample playback TauPlayer 264
Scripts ContextFreeGrammar 22
Scripts StereoMix4 253
Scripts ForcedProcessorAssignment 49
Scripts InterpolatePresets 72
Scripts LimeInterpreter 77
Scripts ParameterTransformer 180
Scripts PresetSpace 186
Scripts Script 212
Scripts MIDIVoice 93
Selectable Sounds SelectableSound 216
Selectable Sounds ChannelSelector 17
Selectable Sounds Mixer 98
Selectable Sounds MultiToMultichannel 169
Selectable Sounds SelectableAudioInput 214
Selectable Sounds SelectableAudioOutput 215

302
Sequencers AnalogSequencer 5
Spectral Analysis-FFT Level 76
Spectral Analysis-FFT ChannelJoin 15
Spectral Analysis-FFT Mixer 98
Spectral Modifiers SpectrumModifier 236
Spectral Modifiers SpectrumFrequencyScale 228
Spectral Modifiers SpectrumFundamental 231
Spectral Modifiers SpectrumLogToLinear 235
Spectral Modifiers SpectrumTrackSelector 241
Spectral Modifiers SpectrumVoicedUnvoiced 242
Spectral Processing-Live Level 76
Spectral Processing-Live OscillatorBank 174
Spectral Processing-Preanalyzed OscillatorBank 174
Spectral Processing-Preanalyzed SumOfSines 255
Spectral Sources Interpolate 70
Spectral Sources LiveSpectralAnalysis 78
Spectral Sources InterpolateN 71
Spectral Sources Morph1dSpectrum 115
Spectral Sources Morph2dKeymappedSpectrum 131
Spectral Sources Morph3dSpectrum 150
Spectral Sources MultiSpectrumPlayer 168
Spectral Sources SyntheticSpectrumFromSounds 262
Spectral Sources SpectralShape 226
Spectral Sources Mixer 98
Spectral Sources SpectrumFromSingleCycle 229
Spectral Sources SpectrumInRAMLog 234
Spectral Sources SpectrumInRAM 232
Spectral Sources SpectrumOnDisk 239
Spectral Sources SyntheticSpectrumFromArray 260
Stereo ChannelCrosser 14
Stereo ChannelJoin 15
Stereo Channeller 16
Stereo Crossfade 24
Stereo MidSideEncoderDecoder 96
Stereo Difference 33
Stereo Stereoizer 250
Stereo Mixer 98
Stereo Level 76
Surround & Multichannel ChannelSelector 17

303
Surround & Multichannel StereoInOutput8 249
Surround & Multichannel Matrix4 81
Surround & Multichannel Matrix8 82
Surround & Multichannel MonoToMultichannel 102
Surround & Multichannel Surroundifier 258
Surround & Multichannel MultiToMultichannel 169
Surround & Multichannel MultichannelMixer 155
Surround & Multichannel MultichannelPan 156
Surround & Multichannel Output4 176
Surround & Multichannel Output8 177
Surround & Multichannel SplitSurroundFilePlayer 243
Surround & Multichannel Replicator 195
Surround & Multichannel SplitSurroundSample 245
Surround & Multichannel StereoInOutput4 248
Tau & Psi Mixer 98
Tau & Psi Morph2dKeymappedPsi 122
Tau & Psi Morph3dPsi 140
Tau & Psi VCA 283
Time & Duration SetDuration 217
Time & Duration TimeControl 270
Time & Duration TimeOffset 273
Time & Duration TimeStopper 274
Time & Duration WaitUntil 289
Time & Duration WarpedTimeIndex 290
Variables & Annotation Annotation 9
Variables & Annotation SoundCollectionVariable 224
Variables & Annotation Variable 282
Virtual Inputs & Outputs Output8 177
Visual Displays ImageDisplay 67
Visual Displays SoundToGlobalController 225
Visual Displays OscilloscopeDisplay 175
Visual Displays SpectrumAnalyzerDisplay 227
Visual Displays Mixer 98
Vocoders Vocoder 285
Vocoders ScaleVocoder 210
Vocoders TunableVocoder 277
Vocoders VocoderChannelBank 287

304
305
Sound Classes by Name
AbsoluteValue Math 1
ADSR Envelopes & Control Signals 2
AnalogSequencer Looping 5
AnalogSequencer Sequencers 5
AnalysisFilter Filters 8
Annotation Frequency & Time Scaling 9
Annotation Variables & Annotation 9
AR Envelopes & Control Signals 10
ArcTan Math 11
AudioInput Sources & Generators 12
AudioInput Inputs 12
AveragingLowPassFilter Filters 13
ChannelCrosser Stereo 14
ChannelJoin Sources & Generators 15
ChannelJoin Additive Synthesis 15
ChannelJoin Cross Synthesis 15
ChannelJoin Mixing 15
ChannelJoin Morphing 15
ChannelJoin Spectral Analysis-FFT 15
ChannelJoin Stereo 15
Channeller Stereo 16
ChannelSelector Selectable Sounds 17
ChannelSelector Surround & Multichannel 17
Chopper Granulating & Chopping 18
CloudBank Sources & Generators 19
CloudBank Aggregate Synthesis 19
CloudBank Morphing 19
Constant Envelopes & Control Signals 21
Constant Math 21
ContextFreeGrammar Scripts 22
Crossfade Compression/Expansion 24
Crossfade Crossfading 24
Crossfade Mixing 24
Crossfade Stereo 24
CrossfadingMulticycleOscillator Sources & Generators 25
CrossfadingMulticycleOscillator Sources & Generators KBD Ctrl 25
CrossfadingMulticycleOscillator Oscillators 25

306
CrossFilter_Long Cross Synthesis 27
CrossFilter_Long Delays 27
CrossFilter_Short Cross Synthesis 29
DelayWithFeedback Delays 31
DelayWithFeedback Feedback 31
DelayWithFeedback Math 31
Difference Envelopes & Control Signals 33
Difference Filters 33
Difference Math 33
Difference Stereo 33
DiskCache Disk 34
DiskCache Recording 34
DiskPlayer Sources & Generators 35
DiskPlayer Sample playback 35
DiskRecorder Disk 36
DiskRecorder Recording 36
DualParallelTwoPoleFilter Filters 37
DynamicRangeController Sources & Generators 38
DynamicRangeController Additive Synthesis 38
DynamicRangeController Compression/Expansion 38
DynamicRangeController Cross Synthesis 38
EQFilter EQ 40
EQFilter Filters 40
Equality Math 41
FeedbackLoopInput Feedback 42
FeedbackLoopOutput Feedback 43
Filter Sources & Generators KBD Ctrl 45
Filter Filters 45
Filter Sample playback 45
FilterBank Sources & Generators 47
FilterBank Aggregate Synthesis 47
FIRFilter Filters 48
ForcedProcessorAssignment Scripts 49
FormantBank Sources & Generators 50
FormantBank Sources & Generators KBD Ctrl 50
FormantBank Aggregate Synthesis 50
FormantBank Morphing 50
FormantBank-Element Sources & Generators KBD Ctrl 52
FrequencyScale Frequency & Time Scaling 53
FrequencyTracker Live Capture & Tracking 54

307
FunctionGenerator Envelopes & Control Signals 56
GAOscillators Sources & Generators KBD Ctrl 57
GAOscillators Additive Synthesis 57
GAOscillators Oscillators 57
GenericSource Sources & Generators 59
GenericSource Inputs 59
GenericSource Sample playback 59
GrainCloud Sources & Generators 60
GrainCloud Sources & Generators KBD Ctrl 60
GrainCloud Granular Synthesis 60
GraphicalEnvelope Envelopes & Control Signals 62
GraphicEQ EQ 63
GraphicEQ Filters 63
GraphicEQ Reverb 63
HarmonicResonator Sources & Generators KBD Ctrl 64
HarmonicResonator Filters 64
HighShelvingFilter EQ 65
HighShelvingFilter Filters 65
HilbertTransform Math 66
ImageDisplay Visual Displays 67
Interpolate Crossfading 70
Interpolate Math 70
Interpolate Spectral Sources 70
InterpolateN Crossfading 71
InterpolateN Math 71
InterpolateN Spectral Sources 71
InterpolatePresets Scripts 72
IteratedWaveshaper Sources & Generators KBD Ctrl 73
KeyMappedMultisample Sources & Generators KBD Ctrl 74
KeyMappedMultisample Oscillators 74
KeyMappedMultisample Sample playback 74
Level Sources & Generators 76
Level Sources & Generators KBD Ctrl 76
Level Additive Synthesis 76
Level Aggregate Synthesis 76
Level Compression/Expansion 76
Level Distortion & Waveshaping 76
Level Envelopes & Control Signals 76
Level EQ 76

308
Level Frequency & Time Scaling 76
Level Gain & Level 76
Level Live Capture & Tracking 76
Level Math 76
Level Modulation 76
Level Morphing 76
Level Spectral Analysis-FFT 76
Level Spectral Processing-Live 76
Level Stereo 76
LimeInterpreter Scripts 77
LiveSpectralAnalysis Spectral Sources 78
LowShelvingFilter EQ 80
LowShelvingFilter Filters 80
Matrix4 Mixing 81
Matrix4 Outputs 81
Matrix4 Surround & Multichannel 81
Matrix8 Mixing 82
Matrix8 Outputs 82
Matrix8 Surround & Multichannel 82
MemoryWriter Feedback 84
MemoryWriter Live Capture & Tracking 84
MIDIFileEcho MIDI Out 86
MIDIMapper MIDI In 87
MIDIOutputController MIDI Out 90
MIDIOutputEvent MIDI Out 91
MIDIOutputEventInBytes MIDI Out 92
MIDIVoice MIDI In 93
MIDIVoice Scripts 93
MidSideEncoderDecoder Stereo 96
Mixer Sources & Generators 98
Mixer Sources & Generators KBD Ctrl 98
Mixer Additive Synthesis 98
Mixer Compression/Expansion 98
Mixer Delays 98
Mixer Distortion & Waveshaping 98
Mixer Filters 98
Mixer Flanging & Chorusing 98
Mixer Frequency & Time Scaling 98
Mixer Global Controllers 98
Mixer Granular Synthesis 98

309
Mixer Granulating & Chopping 98
Mixer Inputs 98
Mixer Live Capture & Tracking 98
Mixer Looping 98
Mixer Mixing 98
Mixer Reverb 98
Mixer Sample playback 98
Mixer Selectable Sounds 98
Mixer Spectral Analysis-FFT 98
Mixer Spectral Sources 98
Mixer Stereo 98
Mixer Tau & Psi 98
Mixer Visual Displays 98
ModalFilter Sources & Generators 99
ModalFilter Sources & Generators KBD Ctrl 99
ModalFilter EQ 99
ModalFilter Filters 99
MonoToMultichannel Reverb 102
MonoToMultichannel Surround & Multichannel 102
Monotonizer Frequency & Time Scaling 104
Morph1dGA Sources & Generators KBD Ctrl 105
Morph1dGA Additive Synthesis 105
Morph1dGA Morphing 105
Morph1dSampleCloud Morphing 111
Morph1dSampleCloud Sample playback 111
Morph1dSpectrum Spectral Sources 115
Morph2dKeymappedGA Sources & Generators KBD Ctrl 118
Morph2dKeymappedGA Additive Synthesis 118
Morph2dKeymappedGA Morphing 118
Morph2dKeymappedPsi Sources & Generators KBD Ctrl 122
Morph2dKeymappedPsi Tau & Psi 122
Morph2dKeymappedSampleCloud Sources & Generators KBD Ctrl 126
Morph2dKeymappedSampleCloudMorphing 126
Morph2dKeymappedSampleCloudSample playback 126
Morph2dKeymappedSpectrum Spectral Sources 131
Morph3dGA Sources & Generators 135
Morph3dGA Additive Synthesis 135
Morph3dGA Morphing 135
Morph3dPsi Sources & Generators 140

310
Morph3dPsi Morphing 140
Morph3dPsi Tau & Psi 140
Morph3dSampleCloud Morphing 145
Morph3dSampleCloud Sample playback 145
Morph3dSpectrum Spectral Sources 150
MultichannelMixer Mixing 155
MultichannelMixer Surround & Multichannel 155
MultichannelPan Panning 156
MultichannelPan Surround & Multichannel 156
MultifileDiskPlayer Sample playback 158
MultiplyingWaveshaper Sources & Generators 160
MultiplyingWaveshaper Distortion & Waveshaping 160
Multisample Sources & Generators 161
Multisample Sources & Generators KBD Ctrl 161
Multisample Sample playback 161
MultiSampleCloud Sources & Generators 163
MultiSampleCloud Granular Synthesis 163
MultiSampleCloud Sample playback 163
MultisegmentEnvelope Envelopes & Control Signals 165
MultislopeFunctionGenerator Envelopes & Control Signals 167
MultiSpectrumPlayer Spectral Sources 168
MultiToMultichannel Compression/Expansion 169
MultiToMultichannel EQ 169
MultiToMultichannel Mixing 169
MultiToMultichannel Selectable Sounds 169
MultiToMultichannel Surround & Multichannel 169
Noise Sources & Generators 171
Oscillator Sources & Generators 172
Oscillator Sources & Generators KBD Ctrl 172
Oscillator Envelopes & Control Signals 172
Oscillator Modulation 172
Oscillator Oscillators 172
OscillatorBank Sources & Generators 174
OscillatorBank Sources & Generators KBD Ctrl 174
OscillatorBank Additive Synthesis 174
OscillatorBank Frequency & Time Scaling 174
OscillatorBank Morphing 174
OscillatorBank Spectral Processing-Live 174
OscillatorBank Spectral Processing-Preanalyzed 174
OscilloscopeDisplay Visual Displays 175

311
Output4 Outputs 176
Output4 Panning 176
Output4 Surround & Multichannel 176
Output8 Outputs 177
Output8 Surround & Multichannel 177
Output8 Virtual Inputs & Outputs 177
OverlappingMixer Mixing 178
Pan Panning 179
ParameterTransformer Scripts 180
PartialOscillatorBank Additive Synthesis 181
PeakDetector Envelopes & Control Signals 182
PeakDetector Live Capture & Tracking 182
PhaseShiftBy90 Math 183
Prefixer Replicators & Prefixers 184
PresenceFilter EQ 185
PresenceFilter Filters 185
PresetSpace Scripts 186
Product Sources & Generators KBD Ctrl 187
Product Additive Synthesis 187
Product Envelopes & Control Signals 187
Product Granulating & Chopping 187
Product Math 187
Product Modulation 187
PsiPlayer Sources & Generators 188
PsiPlayer Frequency & Time Scaling 188
PulseGenerator Sources & Generators 192
PulseTrain Envelopes & Control Signals 193
QuadOscillator Frequency & Time Scaling 194
QuadOscillator Oscillators 194
Replicator Sources & Generators 195
Replicator Sources & Generators KBD Ctrl 195
Replicator Compression/Expansion 195
Replicator Oscillators 195
Replicator Replicators & Prefixers 195
Replicator Surround & Multichannel 195
REResonator Cross Synthesis 197
ReverbSection Reverb 198
RunningMax Math 201
RunningMin Math 202

312
Sample Sources & Generators 203
Sample Looping 203
Sample Sample playback 203
SampleAndHold Envelopes & Control Signals 205
SampleAndHold Math 205
SampleCloud Sources & Generators 206
SampleCloud Sources & Generators KBD Ctrl 206
SampleCloud Granular Synthesis 206
SampleCloud Sample playback 206
ScaleAndOffset Math 209
ScaleVocoder Sources & Generators KBD Ctrl 210
ScaleVocoder Filters 210
ScaleVocoder Vocoders 210
Script Scripts 212
SelectableAudioInput Inputs 214
SelectableAudioInput Selectable Sounds 214
SelectableAudioOutput Outputs 215
SelectableAudioOutput Selectable Sounds 215
SelectableSound Sources & Generators KBD Ctrl 216
SelectableSound Filters 216
SelectableSound Selectable Sounds 216
SetDuration Time & Duration 217
SetRange Math 218
SimplePitchShifter Frequency & Time Scaling 219
SlewRateLimiter Envelopes & Control Signals 221
SlewRateLimiter Live Capture & Tracking 221
SlipStick Sources & Generators 222
SoundCollectionVariable Variables & Annotation 224
SoundToGlobalController Global Controllers 225
SoundToGlobalController MIDI In 225
SoundToGlobalController Visual Displays 225
SpectralShape Spectral Sources 226
SpectrumAnalyzerDisplay Sources & Generators 227
SpectrumAnalyzerDisplay Oscillators 227
SpectrumAnalyzerDisplay Visual Displays 227
SpectrumFrequencyScale Frequency & Time Scaling 228
SpectrumFrequencyScale Spectral Modifiers 228
SpectrumFromSingleCycle Spectral Sources 229
SpectrumFundamental Spectral Modifiers 231
SpectrumInRAM Spectral Sources 232

313
SpectrumInRAMLog Spectral Sources 234
SpectrumLogToLinear Spectral Modifiers 235
SpectrumModifier Spectral Modifiers 236
SpectrumOnDisk Spectral Sources 239
SpectrumTrackSelector Spectral Modifiers 241
SpectrumVoicedUnvoiced Spectral Modifiers 242
SplitSurroundFilePlayer Sources & Generators 243
SplitSurroundFilePlayer Surround & Multichannel 243
SplitSurroundSample Sources & Generators 245
SplitSurroundSample Surround & Multichannel 245
SqrtMagnitude Math 247
StereoInOutput4 Outputs 248
StereoInOutput4 Reverb 248
StereoInOutput4 Surround & Multichannel 248
StereoInOutput8 Mixing 249
StereoInOutput8 Outputs 249
StereoInOutput8 Surround & Multichannel 249
Stereoizer Sources & Generators 250
Stereoizer Sources & Generators KBD Ctrl 250
Stereoizer Additive Synthesis 250
Stereoizer Aggregate Synthesis 250
Stereoizer Filters 250
Stereoizer Morphing 250
Stereoizer Panning 250
Stereoizer Stereo 250
StereoMix2 EQ 252
StereoMix2 Mixing 252
StereoMix4 Drum Machines 253
StereoMix4 Flanging & Chorusing 253
StereoMix4 Mixing 253
StereoMix4 Scripts 253
SumOfSines Sources & Generators 255
SumOfSines Sources & Generators KBD Ctrl 255
SumOfSines Additive Synthesis 255
SumOfSines Frequency & Time Scaling 255
SumOfSines Morphing 255
SumOfSines Spectral Processing-Preanalyzed 255
Surroundifier Reverb 258
Surroundifier Surround & Multichannel 258

314
SyntheticSpectrumFromArray Spectral Sources 260
SyntheticSpectrumFromSounds Spectral Sources 262
TauPlayer Frequency & Time Scaling 264
TauPlayer Morphing 264
TauPlayer Sample playback 264
Threshold Live Capture & Tracking 269
TimeControl Time & Duration 270
TimeFrequencyScale Sources & Generators 271
TimeFrequencyScale Frequency & Time Scaling 271
TimeOffset Time & Duration 273
TimeStopper Time & Duration 274
TriggeredSampleAndHold Envelopes & Control Signals 275
TriggeredSampleAndHold Math 275
TriggeredSoundToGlobalController Global Controllers276
TunableVocoder Sources & Generators KBD Ctrl 277
TunableVocoder Filters 277
TunableVocoder Vocoders 277
TwoFormantElement Sources & Generators 279
TwoFormantElement Filters 279
Variable Variables & Annotation 282
VCA Sources & Generators KBD Ctrl 283
VCA Envelopes & Control Signals 283
VCA Modulation 283
VCA Tau & Psi 283
VCF Sources & Generators KBD Ctrl 284
VCF Filters 284
VCF Oscillators 284
Vocoder Cross Synthesis 285
Vocoder EQ 285
Vocoder Filters 285
Vocoder Vocoders 285
VocoderChannelBank Vocoders 287
WaitUntil Time & Duration 289
WarpedTimeIndex Time & Duration 290
XenOscillator Sources & Generators 292
XenOscillator Sources & Generators KBD Ctrl 292
XenOscillator Oscillators 292

315
316

You might also like