Classes (extension) | UGens > Delays

Greyhole : Object
ExtensionExtension

A complex echo-like effect
Source: Greyhole.sc

Description

A complex echo-like effect, inspired by the classic Eventide effect of a similar name. The effect consists of a diffuser (like a mini-reverb, structurally similar to the one used in JPverb) connected in a feedback system with a long, modulated delay-line. Excels at producing spacey washes of sound.

Developed as part of the DEIND project.

NOTE: Please increase server realtime memory for this to work properly

s.options.memSize_(65536 * 4);
s.reboot;

Class Methods

Greyhole.ar(in, delayTime: 2, damp: 0, size: 1, diff: 0.707, feedback: 0.9, modDepth: 0.1, modFreq: 2)

NOTE: This UGen always generates a stereo signal.

Arguments:

in

either an array of two audio signals (stereo), or a mono audiosignal.

delayTime

approximate reverberation time in seconds (0.1..60 sec).

damp

controls damping of high-frequencies as the reverb decays. 0 is no damping, 1 is very strong damping. Values should be between (0..1). argumentsize scales size of delay-lines within the diffusion unit, producing the impression of a larger or smaller space. Values below 1 can sound metallic. Values should be between (0.5..5).

diff

controls pattern of echoes produced by the diffuser. At very low values, the diffuser acts like a delay-line whose length is controlled by the 'size' parameter. Medium values produce a slow build-up of echoes, giving the sound a reversed-like quality. Values of 0.707 or greater than produce smooth exponentially decaying echoes. Values should be in the range (0..1).

feedback

amount of feedback through the system. Sets the number of repeating echoes. A setting of 1.0 produces infinite sustain. Values should be in the range (0..1).

modDepth

depth (0..1) of delay-line modulation. Use in combination with modFreq to produce chorus and pitch-variations in the echoes.

modFreq

frequency (0..10 Hz) of delay-line modulation. Use in combination with modDepth to produce chorus and pitch-variations in the echoes.

Returns:

a UGen

Inherited class methods

Instance Methods

Inherited instance methods

Examples

Minimal example (headphones recommended):

s.options.memSize_(65536 * 4);
s.reboot;

{
    var src = SoundIn.ar(0)!2; // stereo input
    var rev = Greyhole.ar(
        src,
        \dtime.kr(0.1),
        \damp.kr(0.1),
        \size.kr(1),
        \diff.kr(0.707),
        \fb.kr(0.1),
        \modDepth.kr(0.01),
        \modFreq.kr(2)
    );

    Mix([src, rev]) * 0.1;
}.play

Ndef-based example:

(
s.options.memSize_(65536 * 4);
s.reboot;

Spec.add(\damp, [0, 1]);
Spec.add(\diff, [0, 1]);
Spec.add(\highband, [1000, 10000, \exp]);
Spec.add(\highx, [0, 1]);
Spec.add(\lowband, [100, 6000, \exp]);
Spec.add(\lowx, [0, 1]);
Spec.add(\modDepth, [0, 50]);
Spec.add(\modFreq, [0, 10]);
Spec.add(\midx, [0, 1]);
Spec.add(\size, [0.5, 3]);
Spec.add(\t60, [0.1, 60, \exp]);
Spec.add(\wet, [0, 1]);
Spec.add(\shelfslope, [1, 10]);
Spec.add(\shelfFreq, \freq);
Spec.add(\fb, [0, 1]);
Spec.add(\dtime, [0, 2]);
)

(
Ndef(\src, {
    //SoundIn.ar([0, 1])
    Splay.ar(Impulse.ar([1, 3, 5, 7, 9]).scramble);

});
Ndef(\hole, {
    var src, delay, amp;

    src = LeakDC.ar(Ndef(\src).ar);
    src = src * \amp.kr(1);
    // var src = Impulse.ar(0.5);

    delay = Greyhole.ar(
        src,
        \dtime.kr(0.1),
        \damp.kr(0.1),
        \size.kr(1),
        \diff.kr(0.707),
        \fb.kr(0.1),
        \modDepth.kr(0.01),
        \modFreq.kr(2)
    );
    delay
});
)


Ndef(\src).play;
Ndef(\hole).play;

Ndef(\hole).edit;
Ndef(\src).edit;

For the Greyball piece ( see http://tai-studio.org/portfolio/greyball.html ), the following source was used, Ndef(\hole) remains unchanged.

Ndef(\src).fadeTime = 4;
Ndef(\src).quant = 2;
Ndef(\src, {
    var src = 10.collect{
        Pan2.ar([HPF, LPF, ComplexRes].choose.performKeyValuePairs(\ar,[
            \in, [Impulse, LFPulse].choose.ar(
                [4, 2, 1, 1/2, 1/3, 1/4, 1/6].choose,
                iphase: [0, 1/4, 1/8, 1/2, 1/3].choose,
                phase: [0, 1/4, 1/8, 1/2, 1/3].choose,
                width:  [0.001, 0.0001, 0.01, 0.1, 0.2].choose,
                mul:    [1, 2, 3, 4].choose.reciprocal * [1, -1].choose
            ),
            \freq, [10000, 2000, 1000, 500, 250, 125, 125/2].choose,
            \decay, [0.1, 0.2, 0.4, 1].choose,
        ]
        ), Rand(-1, 1));
    }.sum;
    HighShelf.ar(src, \shelfFreq.kr(1000), \shelfslope.kr(1));
})
NOTE: Since Impulse and LFPulse are chosen to be used at evaluation time, the given argument names might not match to the chosen UGen's interface. Since a superfluous argument does not affect a UGen's operation, the warnings can be ignored.