Safe Haskell | None |
---|---|

Language | Haskell98 |

A friendly family of effects. These functions are kindly provided by Iain McCurdy (designed in Csound).

- adele :: Sigs a => Balance -> DelayTime -> Feedback -> ToneSig -> a -> a
- pongy :: Sig2s a => Balance -> DelayTime -> Feedback -> ToneSig -> WidthSig -> a -> a
- tort :: Sigs a => DriveSig -> ToneSig -> a -> a
- fowler :: Sigs a => SensitivitySig -> BaseCps -> Resonance -> a -> a
- revsy :: Sigs a => TimeSig -> a -> a
- flan :: Sigs a => RateSig -> DepthSig -> DelayTime -> Feedback -> a -> a
- phasy :: Sigs a => RateSig -> DepthSig -> BaseCps -> Feedback -> a -> a
- crusher :: Sigs a => BitsReductionSig -> FoldoverSig -> a -> a
- chory :: RateSig -> DepthSig -> WidthSig -> Sig2 -> Sig2
- pany :: TremWaveSig -> DepthSig -> RateSig -> Sig2 -> Sig2
- oscPany :: DepthSig -> RateSig -> Sig2 -> Sig2
- triPany :: DepthSig -> RateSig -> Sig2 -> Sig2
- sqrPany :: DepthSig -> RateSig -> Sig2 -> Sig2
- tremy :: Sigs a => TremWaveSig -> DepthSig -> RateSig -> a -> a
- oscTremy :: Sigs a => DepthSig -> RateSig -> a -> a
- triTremy :: Sigs a => DepthSig -> RateSig -> a -> a
- sqrTremy :: Sigs a => DepthSig -> RateSig -> a -> a
- ringo :: Sigs a => Balance -> RateSig -> EnvelopeModSig -> a -> a
- type EnvelopeModSig = Sig
- magnus :: Sigs a => D -> DelayTime -> Feedback -> EchoGain -> ToneSig -> RandomSpreadSig -> a -> a
- adele1 :: Sigs a => Balance -> DelayTime -> a -> a
- adele2 :: Sigs a => Balance -> DelayTime -> a -> a
- adele3 :: Sigs a => Balance -> DelayTime -> a -> a
- adele4 :: Sigs a => Balance -> DelayTime -> a -> a
- adele5 :: Sigs a => Balance -> DelayTime -> a -> a
- adele1b :: Sigs a => Balance -> DelayTime -> a -> a
- adele2b :: Sigs a => Balance -> DelayTime -> a -> a
- adele3b :: Sigs a => Balance -> DelayTime -> a -> a
- adele4b :: Sigs a => Balance -> DelayTime -> a -> a
- adele5b :: Sigs a => Balance -> DelayTime -> a -> a
- adele1m :: Sigs a => Balance -> DelayTime -> a -> a
- adele2m :: Sigs a => Balance -> DelayTime -> a -> a
- adele3m :: Sigs a => Balance -> DelayTime -> a -> a
- adele4m :: Sigs a => Balance -> DelayTime -> a -> a
- adele5m :: Sigs a => Balance -> DelayTime -> a -> a
- pongy1 :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy2 :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy3 :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy4 :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy5 :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy1b :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy2b :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy3b :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy4b :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy5b :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy1m :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy2m :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy3m :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy4m :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- pongy5m :: Sig2s a => Balance -> DelayTime -> WidthSig -> a -> a
- tort1 :: Sigs a => a -> a
- tort2 :: Sigs a => a -> a
- tort3 :: Sigs a => a -> a
- tort4 :: Sigs a => a -> a
- tort5 :: Sigs a => a -> a
- tort1b :: Sigs a => a -> a
- tort2b :: Sigs a => a -> a
- tort3b :: Sigs a => a -> a
- tort4b :: Sigs a => a -> a
- tort5b :: Sigs a => a -> a
- tort1m :: Sigs a => a -> a
- tort2m :: Sigs a => a -> a
- tort3m :: Sigs a => a -> a
- tort4m :: Sigs a => a -> a
- tort5m :: Sigs a => a -> a
- fowler' :: Sigs a => Sig -> a -> a
- fowler1 :: Sigs a => a -> a
- fowler2 :: Sigs a => a -> a
- fowler3 :: Sigs a => a -> a
- fowler4 :: Sigs a => a -> a
- fowler5 :: Sigs a => a -> a
- flan' :: Sigs a => Sig -> a -> a
- flan1 :: Sigs a => a -> a
- flan2 :: Sigs a => a -> a
- flan3 :: Sigs a => a -> a
- flan4 :: Sigs a => a -> a
- flan5 :: Sigs a => a -> a
- phasy' :: Sigs a => Sig -> a -> a
- phasy1 :: Sigs a => a -> a
- phasy2 :: Sigs a => a -> a
- phasy3 :: Sigs a => a -> a
- phasy4 :: Sigs a => a -> a
- phasy5 :: Sigs a => a -> a
- chory' :: Sig2s a => Sig -> a -> a
- chory1 :: Sig2s a => a -> a
- chory2 :: Sig2s a => a -> a
- chory3 :: Sig2s a => a -> a
- chory4 :: Sig2s a => a -> a
- chory5 :: Sig2s a => a -> a
- oscPany' :: Sig2s a => Sig -> a -> a
- oscPany1 :: Sig2s a => a -> a
- oscPany2 :: Sig2s a => a -> a
- oscPany3 :: Sig2s a => a -> a
- oscPany4 :: Sig2s a => a -> a
- oscPany5 :: Sig2s a => a -> a
- triPany' :: Sig2s a => Sig -> a -> a
- triPany1 :: Sig2s a => a -> a
- triPany2 :: Sig2s a => a -> a
- triPany3 :: Sig2s a => a -> a
- triPany4 :: Sig2s a => a -> a
- triPany5 :: Sig2s a => a -> a
- sqrPany' :: Sig2s a => Sig -> a -> a
- sqrPany1 :: Sig2s a => a -> a
- sqrPany2 :: Sig2s a => a -> a
- sqrPany3 :: Sig2s a => a -> a
- sqrPany4 :: Sig2s a => a -> a
- sqrPany5 :: Sig2s a => a -> a
- oscTremy' :: Sigs a => Sig -> a -> a
- oscTremy1 :: Sigs a => a -> a
- oscTremy2 :: Sigs a => a -> a
- oscTremy3 :: Sigs a => a -> a
- oscTremy4 :: Sigs a => a -> a
- oscTremy5 :: Sigs a => a -> a
- triTremy' :: Sigs a => Sig -> a -> a
- triTremy1 :: Sigs a => a -> a
- triTremy2 :: Sigs a => a -> a
- triTremy3 :: Sigs a => a -> a
- triTremy4 :: Sigs a => a -> a
- triTremy5 :: Sigs a => a -> a
- sqrTremy' :: Sigs a => Sig -> a -> a
- sqrTremy1 :: Sigs a => a -> a
- sqrTremy2 :: Sigs a => a -> a
- sqrTremy3 :: Sigs a => a -> a
- sqrTremy4 :: Sigs a => a -> a
- sqrTremy5 :: Sigs a => a -> a
- ringo' :: Sigs a => Sig -> a -> a
- ringo1 :: Sigs a => a -> a
- ringo2 :: Sigs a => a -> a
- ringo3 :: Sigs a => a -> a
- ringo4 :: Sigs a => a -> a
- ringo5 :: Sigs a => a -> a
- uiRoom :: Sig2s a => Double -> Source (Fx a)
- uiRoom1 :: Sig2s a => Source (Fx a)
- uiRoom2 :: Sig2s a => Source (Fx a)
- uiRoom3 :: Sig2s a => Source (Fx a)
- uiRoom4 :: Sig2s a => Source (Fx a)
- uiRoom5 :: Sig2s a => Source (Fx a)
- uiChamber :: Sig2s a => Double -> Source (Fx a)
- uiChamber1 :: Sig2s a => Source (Fx a)
- uiChamber2 :: Sig2s a => Source (Fx a)
- uiChamber3 :: Sig2s a => Source (Fx a)
- uiChamber4 :: Sig2s a => Source (Fx a)
- uiChamber5 :: Sig2s a => Source (Fx a)
- uiHall :: Sig2s a => Double -> Source (Fx a)
- uiHall1 :: Sig2s a => Source (Fx a)
- uiHall2 :: Sig2s a => Source (Fx a)
- uiHall3 :: Sig2s a => Source (Fx a)
- uiHall4 :: Sig2s a => Source (Fx a)
- uiHall5 :: Sig2s a => Source (Fx a)
- uiCave :: Sig2s a => Double -> Source (Fx a)
- uiCave1 :: Sig2s a => Source (Fx a)
- uiCave2 :: Sig2s a => Source (Fx a)
- uiCave3 :: Sig2s a => Source (Fx a)
- uiCave4 :: Sig2s a => Source (Fx a)
- uiCave5 :: Sig2s a => Source (Fx a)
- uiMonoRoom :: Double -> Source Fx1
- uiRoom1m :: Source Fx1
- uiRoom2m :: Source Fx1
- uiRoom3m :: Source Fx1
- uiRoom4m :: Source Fx1
- uiRoom5m :: Source Fx1
- uiMonoChamber :: Double -> Source Fx1
- uiChamber1m :: Source Fx1
- uiChamber2m :: Source Fx1
- uiChamber3m :: Source Fx1
- uiChamber4m :: Source Fx1
- uiChamber5m :: Source Fx1
- uiMonoHall :: Double -> Source Fx1
- uiHall1m :: Source Fx1
- uiHall2m :: Source Fx1
- uiHall3m :: Source Fx1
- uiHall4m :: Source Fx1
- uiHall5m :: Source Fx1
- uiMonoCave :: Double -> Source Fx1
- uiCave1m :: Source Fx1
- uiCave2m :: Source Fx1
- uiCave3m :: Source Fx1
- uiCave4m :: Source Fx1
- uiCave5m :: Source Fx1
- uiAdele1 :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele2 :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele3 :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele4 :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele5 :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele1b :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele2b :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele3b :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele4b :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele5b :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele1m :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele2m :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele3m :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele4m :: Sigs a => Double -> Double -> Source (Fx a)
- uiAdele5m :: Sigs a => Double -> Double -> Source (Fx a)
- uiMagnus :: Sigs a => Int -> Double -> Double -> Double -> Double -> Double -> Source (Fx a)
- uiPongy1 :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy2 :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy3 :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy4 :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy5 :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy1b :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy2b :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy3b :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy4b :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy5b :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy1m :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy2m :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy3m :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy4m :: Sigs a => Double -> Double -> Source (Fx a)
- uiPongy5m :: Sigs a => Double -> Double -> Source (Fx a)
- uiTort1 :: Sigs a => Source (Fx a)
- uiTort2 :: Sigs a => Source (Fx a)
- uiTort3 :: Sigs a => Source (Fx a)
- uiTort4 :: Sigs a => Source (Fx a)
- uiTort5 :: Sigs a => Source (Fx a)
- uiTort1b :: Sigs a => Source (Fx a)
- uiTort2b :: Sigs a => Source (Fx a)
- uiTort3b :: Sigs a => Source (Fx a)
- uiTort4b :: Sigs a => Source (Fx a)
- uiTort5b :: Sigs a => Source (Fx a)
- uiTort1m :: Sigs a => Source (Fx a)
- uiTort2m :: Sigs a => Source (Fx a)
- uiTort3m :: Sigs a => Source (Fx a)
- uiTort4m :: Sigs a => Source (Fx a)
- uiTort5m :: Sigs a => Source (Fx a)
- uiFowler' :: Sigs a => Source (Fx a)
- uiFowler1 :: Sigs a => Source (Fx a)
- uiFowler2 :: Sigs a => Source (Fx a)
- uiFowler3 :: Sigs a => Source (Fx a)
- uiFowler4 :: Sigs a => Source (Fx a)
- uiFowler5 :: Sigs a => Source (Fx a)
- uiFlan' :: Sigs a => Source (Fx a)
- uiFlan1 :: Sigs a => Source (Fx a)
- uiFlan2 :: Sigs a => Source (Fx a)
- uiFlan3 :: Sigs a => Source (Fx a)
- uiFlan4 :: Sigs a => Source (Fx a)
- uiFlan5 :: Sigs a => Source (Fx a)
- uiPhasy' :: Sigs a => Source (Fx a)
- uiPhasy1 :: Sigs a => Source (Fx a)
- uiPhasy2 :: Sigs a => Source (Fx a)
- uiPhasy3 :: Sigs a => Source (Fx a)
- uiPhasy4 :: Sigs a => Source (Fx a)
- uiPhasy5 :: Sigs a => Source (Fx a)
- uiChory' :: Sig2s a => Source (Fx a)
- uiChory1 :: Sig2s a => Source (Fx a)
- uiChory2 :: Sig2s a => Source (Fx a)
- uiChory3 :: Sig2s a => Source (Fx a)
- uiChory4 :: Sig2s a => Source (Fx a)
- uiChory5 :: Sig2s a => Source (Fx a)
- uiOscPany' :: Source Fx2
- uiTriPany' :: Source Fx2
- uiSqrPany' :: Source Fx2
- uiOscPany1 :: Source Fx2
- uiOscPany2 :: Source Fx2
- uiOscPany3 :: Source Fx2
- uiOscPany4 :: Source Fx2
- uiOscPany5 :: Source Fx2
- uiTriPany1 :: Source Fx2
- uiTriPany2 :: Source Fx2
- uiTriPany3 :: Source Fx2
- uiTriPany4 :: Source Fx2
- uiTriPany5 :: Source Fx2
- uiSqrPany1 :: Source Fx2
- uiSqrPany2 :: Source Fx2
- uiSqrPany3 :: Source Fx2
- uiSqrPany4 :: Source Fx2
- uiSqrPany5 :: Source Fx2
- uiOscTremy' :: Sigs a => Source (Fx a)
- uiTriTremy' :: Sigs a => Source (Fx a)
- uiSqrTremy' :: Sigs a => Source (Fx a)
- uiOscTremy1 :: Sigs a => Source (Fx a)
- uiOscTremy2 :: Sigs a => Source (Fx a)
- uiOscTremy3 :: Sigs a => Source (Fx a)
- uiOscTremy4 :: Sigs a => Source (Fx a)
- uiOscTremy5 :: Sigs a => Source (Fx a)
- uiTriTremy1 :: Sigs a => Source (Fx a)
- uiTriTremy2 :: Sigs a => Source (Fx a)
- uiTriTremy3 :: Sigs a => Source (Fx a)
- uiTriTremy4 :: Sigs a => Source (Fx a)
- uiTriTremy5 :: Sigs a => Source (Fx a)
- uiSqrTremy1 :: Sigs a => Source (Fx a)
- uiSqrTremy2 :: Sigs a => Source (Fx a)
- uiSqrTremy3 :: Sigs a => Source (Fx a)
- uiSqrTremy4 :: Sigs a => Source (Fx a)
- uiSqrTremy5 :: Sigs a => Source (Fx a)
- uiRevsy :: Sigs a => Double -> Source (Fx a)
- uiCrusher :: Sigs a => Double -> Double -> Source (Fx a)
- uiRingo' :: Sigs a => Source (Fx a)
- uiRingo1 :: Sigs a => Source (Fx a)
- uiRingo2 :: Sigs a => Source (Fx a)
- uiRingo3 :: Sigs a => Source (Fx a)
- uiRingo4 :: Sigs a => Source (Fx a)
- uiRingo5 :: Sigs a => Source (Fx a)
- ambiGuitar :: ThreshSig -> DelayTime -> Feedback -> ToneSig -> DriveSig -> Sig -> SE Sig

# Documentation

adele :: Sigs a => Balance -> DelayTime -> Feedback -> ToneSig -> a -> a Source #

Analog Delay line with low-pass filter in the feedback chain. The filter adds natural decay to the echoes.

adele mixRatio delayTime feedback toneRatio ain

Note that the center frequency of the filter is measured in normalized units (form 0 to 1).

pongy :: Sig2s a => Balance -> DelayTime -> Feedback -> ToneSig -> WidthSig -> a -> a Source #

Ping-pong delay

pongy kmix delayTime feedback tone ain

tort :: Sigs a => DriveSig -> ToneSig -> a -> a Source #

Distortion unit with low-pass filter.

tort driveLevel toneRatio ain

Note that the center frequency of the filter is measured in normalized units (form 0 to 1).

fowler :: Sigs a => SensitivitySig -> BaseCps -> Resonance -> a -> a Source #

Envelope follower.

fowler sensitivity baseFrequencyRatio resonance ain

Arguments:

`sensitivity`

-- sensitivity of the envelope follower (suggested range: 0 to 1)`baseFrequencyRatio`

-- base frequency of the filter before modulation by the input dynamics (range: 0 to 1)`resonance`

-- resonance of the lowpass filter (suggested range: 0 to 1)

revsy :: Sigs a => TimeSig -> a -> a Source #

An effect that reverses an audio stream in chunks

revsy time

`time`

-- the size of the chunck in seconds.

flan :: Sigs a => RateSig -> DepthSig -> DelayTime -> Feedback -> a -> a Source #

A flanger effect following the typical design of a so called 'stomp box'

flan rate depth delayTime feedback ain =

Arguments

`rate`

-- rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)`depth`

-- depth of the lfo of the effect (range 0 to 1)`delayTime`

-- static delay offset of the flanging effect (range 0 to 1)`feedback`

-- feedback and therefore intensity of the effect (range 0 to 1)`ain`

-- input audio to which the flanging effect will be applied

phasy :: Sigs a => RateSig -> DepthSig -> BaseCps -> Feedback -> a -> a Source #

Phaser

An phase shifting effect that mimics the design of a so called 'stomp box'

phasy rate depth freq fback ain

Arguments:

`rate`

-- rate of lfo of the effect (range 0 to 1)`depth`

-- depth of lfo of the effect (range 0 to 1)`freq`

-- centre frequency of the phase shifting effect in octaves (suggested range 0 to 1)`fback`

-- feedback and therefore intensity of the effect (range 0 to 1)`ain`

-- input audio to be pitch shifted

crusher :: Sigs a => BitsReductionSig -> FoldoverSig -> a -> a Source #

LoFi (Bit Crusher)

'Low Fidelity' distorting effects of bit reduction and downsampling (foldover)

crusher bits fold ain = ...

Arguments

`bits`

-- bit depth reduction (range 0 to 1)`fold`

-- amount of foldover (range 0 to 1)`ain`

-- input audio to have low fidelity distortion effects applied

chory :: RateSig -> DepthSig -> WidthSig -> Sig2 -> Sig2 Source #

Stereo Chorus

A stereo chorus effect

chory rate depth width (ainLeft, ainRight)

Arguments

`rate`

-- rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)`depth`

-- depth of the lfo of the effect (range 0 to 1)`width`

-- width of stereo widening (range 0 to 1)`ainX`

-- input stereo signal

pany :: TremWaveSig -> DepthSig -> RateSig -> Sig2 -> Sig2 Source #

Auto pan

pany wave rate depth ain

; Arguments:

`wave`

-- waveform used by the lfo (0=sine 1=triangle 2=square)`rate`

-- rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)`depth`

-- depth of the lfo of the effect (range 0 to 1)`ain`

-- input stereo audio

tremy :: Sigs a => TremWaveSig -> DepthSig -> RateSig -> a -> a Source #

Tremolo

tremolo effect

tremy wave rate depth ain

; Arguments:

`wave`

-- waveform used by the lfo (0=sine 1=triangle 2=square)`rate`

-- rate control of the lfo of the effect *NOT IN HERTZ* (range 0 to 1)`depth`

-- depth of the lfo of the effect (range 0 to 1)`ain`

-- input stereo audio

ringo :: Sigs a => Balance -> RateSig -> EnvelopeModSig -> a -> a Source #

RingModulator

An ring modulating effect with an envelope follower

ringo balance rate envelopeMod ain

`balance`

-- dry / wet mix of the output signal (range 0 to 1) ;`rate`

-- frequency of thew ring modulator *NOT IN HERTZ* (range 0 to 1) ;`envelopeMod`

-- amount of dynamic envelope following modulation of frequency (range 0 to 1)`ain`

-- input audio to be pitch shifted

type EnvelopeModSig = Sig Source #

magnus :: Sigs a => D -> DelayTime -> Feedback -> EchoGain -> ToneSig -> RandomSpreadSig -> a -> a Source #

magnus - simulates magnetic tape echo/delay

magnus size feedback echoGain tone randomSpread ain

- size - how many heads in the tape
- feedback
- echo gain
- tone - normalized center frequency of the filter (0 to 1)
- randomSpread - quality of the tape (the higher - the worser)

# Presets

For all presets we have 5 levels of strength. They are signified by numbers from 1 to 5. Also for some effects (delay and distortion) we have miscellaneous way to alter preset by suffix b (means bright) and m (means muffled). It alters the tone color of the effect.

## Analog Delay

### Bright

### Muted

## Ping Pong Delay

### Bright

### Muted

## Distortion

### Bright

### Muted

## Envelope follower

## Flanger

## Phaser

## Chorus

## Auto Pan

## Tremolo

## Ring modulation

# Presets with UIs

If we use prefix `ui`

we can create an image of our effect that looks like guitar stompbox.

Let's take a distortion fr instance:

type FxFun = Sig2 -> SE Sig2 uiTort2 :: Source FxFun

We can combine the effects with functions:

fxHor, fxVer :: [Source FxFun] -> Source FxFun fxMatrix :: Int -> [Source FxFun] -> Source FxFun fxMatrix numberOfColumns fxs = ...

All these functions stack the effects in the list and align visuals. The visuals can be stacked horizontally, vertically or placed on a square grid.

Let's create a chain of effects and apply it to the input signal:

> let pedals ain = lift1 (\f -> f ain) $ fxHor [uiFlan1, uiAdele2 0.25 0.5, uiHall 0.2, uiGain 0.4] > vdac $ pedals =<< (atMidi $ dryPatch vibraphone)

With `uiGain`

we can change the volume of the output.

## Reverb

### Rooms

## Chambers

### Halls

### Caves

## Mono Reverb

### Rooms

## Chambers

uiChamber1m :: Source Fx1 Source #

uiChamber2m :: Source Fx1 Source #

uiChamber3m :: Source Fx1 Source #

uiChamber4m :: Source Fx1 Source #

uiChamber5m :: Source Fx1 Source #

### Halls

### Caves

## Delay

## Tape echo

uiMagnus :: Sigs a => Int -> Double -> Double -> Double -> Double -> Double -> Source (Fx a) Source #

## Ping Pong Delay

## Distortion

## Envelope follower

## Flanger

## Phaser

## Chorus

## Auto Pan

uiOscPany' :: Source Fx2 Source #

uiTriPany' :: Source Fx2 Source #

uiSqrPany' :: Source Fx2 Source #

uiOscPany1 :: Source Fx2 Source #

uiOscPany2 :: Source Fx2 Source #

uiOscPany3 :: Source Fx2 Source #

uiOscPany4 :: Source Fx2 Source #

uiOscPany5 :: Source Fx2 Source #

uiTriPany1 :: Source Fx2 Source #

uiTriPany2 :: Source Fx2 Source #

uiTriPany3 :: Source Fx2 Source #

uiTriPany4 :: Source Fx2 Source #

uiTriPany5 :: Source Fx2 Source #

uiSqrPany1 :: Source Fx2 Source #

uiSqrPany2 :: Source Fx2 Source #

uiSqrPany3 :: Source Fx2 Source #

uiSqrPany4 :: Source Fx2 Source #

uiSqrPany5 :: Source Fx2 Source #

## Tremolo

## Reverse

## LoFi

## Ring modulation

## Compressor

TODO

# Misc

## Ambi guitar

ambiGuitar :: ThreshSig -> DelayTime -> Feedback -> ToneSig -> DriveSig -> Sig -> SE Sig Source #

Ambient guitar patch. It uses `ambiEnv`

with stack of delays and a bit of compression and distortion.
No reverb is added. The reverb is for user to add.

ambiGuitar thresh delayTime feedback tone driveLevel sig

For thresh try out values like 0.01, 0.02

Example, we read guitar input from soundcard first input, apply ambient guitar effect and a bit of reverb:

main = dac proc proc :: Sig2 -> SE Sig2 proc (x, _) = hall 0.25 $ ambiGuitar 0.02 1 0.7 0.4 0.1 x