From ce34f94649439bad5f8f6c002c894a6f96e0abd2 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Thu, 17 Dec 2015 15:34:46 -0500 Subject: Fix some more TimeSpec logic. (Well, I don't think it was broken, but now it's clearer.) --- midi-dump.hs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/midi-dump.hs b/midi-dump.hs index 275593d..0de26bf 100644 --- a/midi-dump.hs +++ b/midi-dump.hs @@ -244,11 +244,13 @@ metronome = gets _metronome >>= mapM_ f f (Metronome start interval ticked) = do now <- getAbsTime let next = ticked + interval - prequeue = 0::Int - when (now > next - (interval * TimeSpec (fromIntegral prequeue) 0)) $ do + prequeue = 10::Int64 + intervals :: Int64 -> TimeSpec + intervals n = interval * TimeSpec n 0 -- NB. very strange "*" for TimeSpec + when (now > next - intervals prequeue) $ do let delay = next - now - forM_ [0..prequeue] $ fromIntegral >>> \n -> alsaDelayNoteEv (delay + interval * TimeSpec n 0) $ metronote 127 - modify $ \s -> s { _metronome = Just $ Metronome start interval (next + interval * TimeSpec (fromIntegral prequeue) 0) } + forM_ [0..prequeue] $ \n -> alsaDelayNoteEv (delay + intervals n) (metronote 127) + modify $ \s -> s { _metronome = Just $ Metronome start interval (next + intervals prequeue) } metronote vel = Event.NoteEv Event.NoteOn $ Event.simpleNote (Event.Channel 9) (Event.Pitch 37) (Event.Velocity vel) -- cgit v1.2.3