diff options
author | Andrew Cady <d@jerkface.net> | 2015-12-17 15:34:46 -0500 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2015-12-17 15:34:46 -0500 |
commit | ce34f94649439bad5f8f6c002c894a6f96e0abd2 (patch) | |
tree | f48b02fc44a8b430511ed19ef4017c118c3d035b | |
parent | 4ffd34ff263145b65b280118214d0c2721832427 (diff) |
Fix some more TimeSpec logic.
(Well, I don't think it was broken, but now it's clearer.)
-rw-r--r-- | midi-dump.hs | 10 |
1 files 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 | |||
244 | f (Metronome start interval ticked) = do | 244 | f (Metronome start interval ticked) = do |
245 | now <- getAbsTime | 245 | now <- getAbsTime |
246 | let next = ticked + interval | 246 | let next = ticked + interval |
247 | prequeue = 0::Int | 247 | prequeue = 10::Int64 |
248 | when (now > next - (interval * TimeSpec (fromIntegral prequeue) 0)) $ do | 248 | intervals :: Int64 -> TimeSpec |
249 | intervals n = interval * TimeSpec n 0 -- NB. very strange "*" for TimeSpec | ||
250 | when (now > next - intervals prequeue) $ do | ||
249 | let delay = next - now | 251 | let delay = next - now |
250 | forM_ [0..prequeue] $ fromIntegral >>> \n -> alsaDelayNoteEv (delay + interval * TimeSpec n 0) $ metronote 127 | 252 | forM_ [0..prequeue] $ \n -> alsaDelayNoteEv (delay + intervals n) (metronote 127) |
251 | modify $ \s -> s { _metronome = Just $ Metronome start interval (next + interval * TimeSpec (fromIntegral prequeue) 0) } | 253 | modify $ \s -> s { _metronome = Just $ Metronome start interval (next + intervals prequeue) } |
252 | 254 | ||
253 | metronote vel = Event.NoteEv Event.NoteOn $ Event.simpleNote (Event.Channel 9) (Event.Pitch 37) (Event.Velocity vel) | 255 | metronote vel = Event.NoteEv Event.NoteOn $ Event.simpleNote (Event.Channel 9) (Event.Pitch 37) (Event.Velocity vel) |
254 | 256 | ||