packages feed

csound-expression-3.1.0: examples/Gui/Envelope.hs

-- | An ADSR-envelope.
module Envelope where

import Csound.Base

-- We use `vdac` to activate the virtual midi keyboard.
-- We can use just `dac` if we have a hardware midi controller.
main = vdac $ do
    -- Creates an Attack-decay-sustain-release widget.
    -- We specify a label, time bounds for attack, decay and release
    -- and init values. It returns a gui-widget and the signal of
    -- the envelope.
    (genv, env) <- linAdsr "" (AdsrBound 1 1 3) (AdsrInit 0.1 0.5 0.5 0.1)
    
    -- Creates a master volume widget.
    (gvol, vol) <- masterVolume 

    -- A simple midi-instrument that plays a triangle wave with
    -- given amplitude envelope.
    let instr = onMsg $ \cps -> env * tri cps

    -- Let's place everything on window. Two elements
    -- are aligned vertically and the master volume slider is
    -- smaller than the envelope widget (we scale it by 0.25).
    panel $ ver [genv, sca 0.25 gvol]

    -- Triggers the midi instrument and scales
    -- the output by given master volume.
    return $ vol * midi instr