packages feed

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

-- | Simple buttons
module Button where

import Csound.Base

main = dac $ do    
    -- Let's create a toggle button with label "play".
    -- The toggle button emmits ones and zeros.
    (gbut1, evt1)   <- toggle "play"

    -- Let's create a plain button with label "Hi!".
    (gbut2, evt2)   <- button "Hi!"

    -- It splits the toggle button events on only ones and only zeros.
    let (evtOn, evtOff) = splitToggle evt1

    -- Let's use a standard method to create a master volume slider.
    (gvol, vol) <- masterVolume

    -- A simple instrument that plays a single note
    -- it fades in and out in 0.5 seconds.
    let instr cps _ = return $ fades 0.5 0.5 * osc cps

    -- Creates a window with our elements vertically aligned.
    panel $ ver [gvol, gbut1, gbut2]

    -- Plays a note while toggle button is 'on'.
    let sig1 = schedUntil (instr 440) evtOn evtOff
    -- Plays a note once.
        sig2 = sched (instr 330) $ withDur 0.2 $ fmap (const unit) evt2

    -- Sends the sum to the output scaled with given master volume.
    return $ vol * sum [sig1, sig2]