From b9bd6a28fddaf52c8a3a480bb5844b44742fce98 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Thu, 3 Dec 2015 06:29:29 -0500 Subject: cleaner --- midi-dump.hs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'midi-dump.hs') diff --git a/midi-dump.hs b/midi-dump.hs index 1a331e8..7d6d238 100644 --- a/midi-dump.hs +++ b/midi-dump.hs @@ -5,6 +5,8 @@ import qualified Data.Set as Set import qualified Haskore.Basic.Pitch as Pitch import qualified Sound.ALSA.Sequencer.Event as Event import Control.Monad.RWS.Strict +import Data.Maybe +import Data.List main = main' `AlsaExc.catch` handler where @@ -22,23 +24,26 @@ main' = withAlsaInit $ \h public private q publicAddr privateAddr -> do putStrLn "Rock on!" - (s, ()) <- execRWST loop (h, public, private, q, publicAddr, privateAddr) emptyLoopState + (_, ()) <- execRWST loop (h, public, private, q, publicAddr, privateAddr) emptyLoopState return () loop = do - (h, public, private, q, publicAddr, privateAddr) <- ask - loopState <- get + (h, _, _, q, publicAddr, _) <- ask oldKeys <- gets keysDown let forwardNOW = forwardNoteEvent h q publicAddr - (events, newKeys) <- liftIO $ parseAlsaEvents' h oldKeys forwardNOW if (oldKeys == newKeys) then liftIO $ threadDelay 15000 -- 15ms. Seems like a lot, but it sounds OK. Cuts CPU down to 2%. else do - let newHistory = if Set.null oldKeys then Nothing:newEvents else newEvents - newEvents = map Just events + let newEvents = map Just events + liftIO $ printChordLn newKeys - put loopState { keysDown = newKeys, inputHistory = newHistory ++ inputHistory loopState } + modify $ \s -> s { keysDown = newKeys, inputHistory = newEvents ++ inputHistory s } + + when (Set.null newKeys) $ do + hist <- gets (takeWhile isJust . inputHistory) + liftIO $ print hist + modify $ \s -> s { inputHistory = Nothing:inputHistory s } loop -- cgit v1.2.3