jack-0.6: examples/ImpulseTrain.hs
module Main where
import qualified Sound.JACK.Audio as Audio
import qualified Sound.JACK as JACK
import qualified Control.Monad.Trans.Class as Trans
import qualified Foreign.C.Error as E
import System.Environment (getProgName)
import Data.Array.Storable (writeArray, )
main :: IO ()
main = do
name <- getProgName
JACK.handleExceptions $
JACK.withClientDefault name $ \client ->
JACK.withPort client "output" $ \output -> do
JACK.setProcess client =<<
(Trans.lift $ JACK.mkProcess $ process output)
JACK.withActivation client $ Trans.lift $ do
putStrLn $ "started " ++ name ++ "..."
JACK.waitForBreak
process ::
Audio.Port JACK.Output -> JACK.Process
process output nframes _buffer = do
outArr <- Audio.getBufferArray output nframes
case JACK.nframesIndices nframes of
[] -> return ()
zero:rest -> do
writeArray outArr zero 1
mapM_ (\i -> writeArray outArr i 0) rest
return E.eOK