summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2015-12-17 15:34:46 -0500
committerAndrew Cady <d@jerkface.net>2015-12-17 15:34:46 -0500
commitce34f94649439bad5f8f6c002c894a6f96e0abd2 (patch)
treef48b02fc44a8b430511ed19ef4017c118c3d035b
parent4ffd34ff263145b65b280118214d0c2721832427 (diff)
Fix some more TimeSpec logic.
(Well, I don't think it was broken, but now it's clearer.)
-rw-r--r--midi-dump.hs10
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