LFO1

Table of Contents:

 

CAGLFO1 introduction. 1

Your wish is my comment 1

A screen dump for CAGLFO1. 2

Internal structure of CAGLFO1. 2

Phasor 3

PhaseDistortion. 3

WaveShaper 3

Envelope. 3

Scale + Offset 3

nn-space (OutMode = -1) 3

positive (OutMode = 0) 3

normal (OutMode = 1) 3

Mix/Modulate. 4

Product (MixMode = -1) 4

Mono-Stereo (MixMode = 0) 4

Mid-Side (MixMode = 1) 4

Interpolate. 4

LowPass. 4

 

 

Back one page

 

CAGLFO1 introduction

CAGLFO1 are in fact 2 LFO's. These are really LFO's! Meaning they operate on the 1kHz control rate! Output values are linear interpolated and 1st order filtered to become audio rate. You can listen to the output of the LFO's, but they are meant for generating very low frequencies (<100 Hz, mostly between 0.1 and 10 Hz) that are hardly audible.

 

When developing this CAGLFO1, I asked my self the following questions many times: What do I want from an LFO? What do I want to achieve with an LFO? In what kind of application/patch/sound do I use them?

 

CAGLFO1 is the result. Is it perfect then? Well it depends what you have in mind for answering the above questions. I do can think of more features I want to have in an LFO, but several things hold me back from implementing them: One is my lack of know-how in CapyTalk (read lack of time to study), two the clarity of presented parameters.

 

Back one page

 

Your wish is my comment

How are your wishes implemented in CAGLFO1:

 

 

AM = Amplitude Modulation, FM = Frequency Modulation

 

As you can see I thought about this very thoroughly!

 

-- ChristiaanGelauff - 23 Feb 2007

 

A screen dump for CAGLFO1

 

 

Internal structure of CAGLFO1

 

As you can see in the screen dump, there are quite a number of parameters. It is not easy to understand their relation to each other or what they exactly do. I created an extra drawing to give an overview of the basic building blocks, how they are connected and which parameter influences which block.

 

Architecture of CAGLFO1:

Phasor

You can think of the phasor being a counting number starting at 0 and going up to just not 1. At 1 the counter jumps back to zero again, it is what we call a "modulo-1" counter. The starting value of the counter can be changed by the PhaseDelay parameter. The speed for up counting (or down counting) is determined by Freq. When the Trigger becomes negative and FreeRun is not set to 1, the counter is reset to his start position.

PhaseDistortion

PhaseDistortion is a power operation: Bx = Ax**(WarpAdjust*10). The "WarpAdjust" in this formula has a value in the range [0.1,...,1] for Warp < 0 and [1,...,10] for Warp >= 0. It enables warping of the Phasor output signal (Ax). Positive Warp compresses the end of the wave and expands the beginning of the waveform. Negative Warp does the opposite.

WaveShaper

The WaveShaper changes the incoming (possibly warped) phasor signal (Bx) into an LFO waveform. The WaveShaper can change it into saw (=no change), sine, triangle, square and random. The Select parameter determines the waveform shape. Random is made with a LUT of 100 samples. The PhaseShift parameter allows an extra offset in the wave shaping process. The effect of this parameter is exactly equal to the PhaseDelay parameter in case there is no warping. If however there is warping (Warp <> 0) this behaves different. For the triangle signal the range of the phase is limited to half the waveform. For the square waveform the parameter represent the duty cycle. For the random signal PhaseShift is ignored.

Envelope

The Envelope is a multi segment envelope. The Envelope is triggered when Trigger becomes negative. The envelope segments are defined using the Env1arr or Env2arr. In the array one has to define the envelope points. The points are defined as {ms@value}. The ms represent the time in millisecond of the envelope point. By default the segments are linear. With ExpEnv set > 1 the segments become non-linear (ExpEnv is the exponent applied). The Scale is an overall scaling of the envelope.

Scale + Offset

This block enables easy use of the LFO in different applications. The OutMode can combine the LFO (Cx) and Envelope (Dx) signals in three ways: nn-space, positive, normal (-1,0,1 respectively). The DCOffset allows an up or down movement of the waveform.

nn-space (OutMode = -1)

In this mode the waveform (Cx) is considered a modulation in the (midi) note number space. The output is then normalized to the sample rate. One can easily use it as modulator in all (CAG) oscillators with normalized frequency input (meaning 0 = DC and 1 = Fs/2). Output calculation in pseudo CapyTalk formula:

 

Ex = (((Cx+1)*30*Dx)+(60*(DCOffset+1))) nn hz / (0.5*Fs hz)

 

For those who do not fully understand this formula: DCOffset represent a constant value in nn-space. When DCOffset = -1 this represents note number 0. When DCOffset = 0 this represents note number 60. When DCOffset = 1 this represents note number 120. The LFO waveform is the modulation that is added onto this constant. The LFO waveform can maximally modulate between note number 0 and 60 (for Scale = 1 and the envelope value = 1).

positive (OutMode = 0)

In this mode the waveform (Cx) is considered to be positive only. A typical application would be amplitude modulation. Output calculation in pseudo CapyTalk formula:

 

Ex = ((Cx+1)*0.5*Dx)+DCOffset

 

For those who do not fully understand this formula: The LFO waveform is first shifted up, so it never can become negative again. The envelope is applied to this positive LFO waveform. The DCOffset is added.

normal (OutMode = 1)

In this mode the waveform (Cx) is considered to be positive and negative. Output calculation in pseudo CapyTalk formula:

 

Ex = (Cx*Dx)+DCOffset

 

For those who do not fully understand this formula: The envelope is applied to the LFO waveform and the DCOffset is added.

Mix/Modulate

This block combines the signals (E1 and E2) coming from the two LFO's into the left and right output signals (F1 and F2). The MixMode can combine the LFO signals in three ways: Product, Mono-Stereo, Mid-Side. The Spread parameter allows a way of controlling the mix.

Product (MixMode = -1)

In this mode the two LFO's are multiplied. Spread allows the Left and Right output to be phase inverted. Output calculation in pseudo CapyTalk formula:

 

F1 = (Spread normCos abs)*E1*E2 F2 = (Spread normCos)*E1*E2

 

For those who do not fully understand this formula: If Spread = 0 then the output is LFO1*LFO2. If Spread = 0.5 then the output is zero. If Spread = 1 then the Left output is LFO1*LFO2 and the Right output is -LFO1*LFO2.

Mono-Stereo (MixMode = 0)

In this mode the two LFO's are mixed together. Spread allows a mix from mono to full stereo. Output calculation in pseudo CapyTalk formula:

 

F1 = (E1+E2+(Spread*(E1-E2)))/2 F2 = (E1+E2+(Spread*(E2-E1)))/2

 

For those who do not fully understand this formula: If Spread = 0 then the output is LFO1+LFO2. If Spread = 1 then the Left output is LFO1 and the Right output is LFO2.

Mid-Side (MixMode = 1)

In this mode LFO1 is considered a mono component (=Mid) and LFO2 is considered the stereo component (=Side). Spread allows mixing from Mid to Side. Output calculation in pseudo CapyTalk formula:

 

F1 = E1+(Spread*(E2-E1)) F2 = E1-(Spread*(E1+E2))

 

For those who do not fully understand this formula: If Spread = 0 then the output is LFO1. If Spread = 0.5 then the Left output is 0.5*(LFO1+LFO2) and the Right output is 0.5*(LFO1-LFO2). If Spread = 1 then Left output is LFO2 and the Right output is -LFO2.

Interpolate

This block interpolates the control rate (=1kHz) LFO signals (Fx) to audio rate by linear interpolation.

LowPass

This block is a first order low pass filter to smooth the LFO signals (Gx) even more. Cutoff sets the corner frequency in Hertz for both filters.

 

Back one page