#15 ADSR2 enveloppe

The ADSR2 envelope is added to Dittytoy to have an envelope compatible with the default envelope used in Sonic Pi. The ADSR2 envelope works similarly to the ADSR envelope, but the most significant difference is that all durations are in ticks.



sonic-pi.net/tutorial.html#section-2-4
dittytoy.net/syntax#envelopes

#dittytoy #tutorial

Log in to post a comment.

// #15 ADSR2 enveloppe. DittyToy 2022.
// The MIT License.
//
// https://dittytoy.net/ditty/0f2e4c2cdd
//
// The ADSR2 envelope is added to Dittytoy to have an envelope compatible with the default envelope
// used in Sonic Pi. The ADSR2 envelope works similarly to the ADSR envelope, but the most
// significant difference is that all durations are in ticks.
//
// adsr      envelope: https://dittytoy.net/ditty/34e1600f63
// adsr2     envelope: https://dittytoy.net/ditty/0f2e4c2cdd
// segmented envelope: https://dittytoy.net/ditty/ce63852ccf
//
// https://sonic-pi.net/tutorial.html#section-2-4
// https://dittytoy.net/syntax#envelopes
//

input.attack_time   = 0.1;  // min=0, max=0.2, step=0.001
input.attack_level  = 1;    // min=0, max=1, step=0.001
input.decay_time    = 0.2;  // min=0, max=2, step=0.001
input.decay_level   = 0.75; // min=0, max=1, step=0.001
input.sustain_time  = 0;    // min=0, max=2, step=0.001
input.sustain_level = 0.5;  // min=0, max=1, step=0.001
input.release       = 0.5;  // min=0, max=2, step=0.001

// signalProbe - by athibaul
const signalProbe = filter.def(  
    class {
        process(input) {
            debug.probe('signal', input[0]+input[1], 2, 1);
            return input;
        }   
    });

loop( () => {
    sine.play(c, { 
        attack:         input.attack_time,    // in ticks
        attack_level:   input.attack_level,
        decay:          input.decay_time,     // in ticks
        decay_level:    input.decay_level,
        sustain:        input.sustain_time,   // in ticks
        sustain_level:  input.sustain_level,
        release:        input.release,        // in ticks 
        env:            adsr2
    });
    sleep( input.attack_time + input.decay_time + input.sustain_time + input.release + 1);
}, { name: 'ADSR2 envelope' }).connect( signalProbe.create() );