From 9d8e1b9b82c1a905a0014fd5b9c5d08f7ce347f0 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Thu, 3 Dec 2015 06:59:16 -0500 Subject: keep track of time --- midi-dump.hs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'midi-dump.hs') diff --git a/midi-dump.hs b/midi-dump.hs index 7d6d238..b345531 100644 --- a/midi-dump.hs +++ b/midi-dump.hs @@ -7,6 +7,7 @@ import qualified Sound.ALSA.Sequencer.Event as Event import Control.Monad.RWS.Strict import Data.Maybe import Data.List +import System.Clock main = main' `AlsaExc.catch` handler where @@ -14,7 +15,8 @@ main = main' `AlsaExc.catch` handler data LoopState = LoopState { keysDown :: MidiPitchSet, - inputHistory :: [Maybe Event.T] + inputHistory :: [Maybe Event.T], + lastTick :: TimeSpec } emptyLoopState = LoopState Set.empty [] @@ -23,12 +25,14 @@ main' = withAlsaInit $ \h public private q publicAddr privateAddr -> do cmdlineAlsaConnect h public putStrLn "Rock on!" + startTime <- getTime Monotonic - (_, ()) <- execRWST loop (h, public, private, q, publicAddr, privateAddr) emptyLoopState + (_, ()) <- execRWST loop (startTime, h, public, private, q, publicAddr, privateAddr) (emptyLoopState startTime) return () loop = do - (h, _, _, q, publicAddr, _) <- ask + (startTime, h, _, _, q, publicAddr, _) <- ask + oldKeys <- gets keysDown let forwardNOW = forwardNoteEvent h q publicAddr (events, newKeys) <- liftIO $ parseAlsaEvents' h oldKeys forwardNOW @@ -36,6 +40,8 @@ loop = do if (oldKeys == newKeys) then liftIO $ threadDelay 15000 -- 15ms. Seems like a lot, but it sounds OK. Cuts CPU down to 2%. else do + now <- liftIO $ getTime Monotonic + let delta = now - startTime let newEvents = map Just events liftIO $ printChordLn newKeys @@ -46,4 +52,5 @@ loop = do liftIO $ print hist modify $ \s -> s { inputHistory = Nothing:inputHistory s } + modify $ \s -> s { lastTick = now } loop -- cgit v1.2.3