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