From 71b8dea17e015d3266bda8705868184bb1fe4e5a Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Sun, 6 Dec 2015 04:01:46 -0500 Subject: use the MidiController type alias in all type signatures --- midi-dump.hs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/midi-dump.hs b/midi-dump.hs index 536d78d..b68a790 100644 --- a/midi-dump.hs +++ b/midi-dump.hs @@ -67,7 +67,7 @@ data LoopEnv = LoopEnv { _lineReader :: MVar String } -getAbsTime :: RWST LoopEnv () LoopState IO TimeSpec +getAbsTime :: MidiController TimeSpec getAbsTime = do startTime <- asks _startTime startTimeReal <- asks _startTimeReal @@ -128,7 +128,7 @@ main' = withAlsaInit $ \h public private q publicAddr privateAddr -> do (_, ()) <- execRWST mainLoop env $ initializeState startTimeReal return () -mainLoop :: RWST LoopEnv () LoopState IO () +mainLoop :: MidiController () mainLoop = do maybeReadLine >>= maybe processMidi processCommand wantExit <- gets _wantExit @@ -150,7 +150,7 @@ playImmediates = do -- TODO: flush ALSA output here (and remove flush from playNoteEv) modify $ \s -> s { _playNOW = [] } -_playNote :: Bool -> Event.Note -> RWST LoopEnv () LoopState IO () +_playNote :: Bool -> Event.Note -> MidiController () _playNote noteOn note = playNoteEv $ Event.NoteEv onoff note where onoff = if noteOn then Event.NoteOn else Event.NoteOff @@ -159,21 +159,22 @@ delayEvent :: Event.T -> TimeSpec -> Event.T delayEvent evt ts = evt {Event.time = Time.consRel $ Time.Real (RealTime.fromInteger nanosecs)} where nanosecs = timeSpecAsNanoSecs ts -playNoteEv :: Event.Data -> RWST LoopEnv () LoopState IO () +playNoteEv :: Event.Data -> MidiController () playNoteEv = alsaDelayNoteEv (TimeSpec 0 0) -alsaDelayNoteEv :: TimeSpec -> Event.Data -> RWST LoopEnv () LoopState IO () +alsaDelayNoteEv :: TimeSpec -> Event.Data -> MidiController () alsaDelayNoteEv delay nevdata = do ms <- getMidiSender publicAddr <- asks _publicAddr liftIO $ ms $ Event.simple publicAddr nevdata `delayEvent` delay + queueAction :: (Queue Event.Data -> MidiController (Queue Event.Data)) -> MidiController () queueAction act = do q <- gets _scheduled act q >>= \q' -> modify $ \s -> s { _scheduled = q' } -delayNoteEv :: TimeSpec -> Event.Data -> RWST LoopEnv () LoopState IO () +delayNoteEv :: TimeSpec -> Event.Data -> MidiController () delayNoteEv delay nevdata = queueAction $ scheduleEventIO (delay, nevdata) _whenFlag :: forall (m :: * -> *) s. MonadState s m => (s -> Bool) -> m () -> m () @@ -182,7 +183,7 @@ _whenFlag flag f = gets flag >>= flip when f mkNote :: Word8 -> Event.Note mkNote pitch = Event.simpleNote (Event.Channel 0) (Event.Pitch pitch) (Event.Velocity 128) -processCommand :: String -> RWST LoopEnv () LoopState IO () +processCommand :: String -> MidiController () processCommand "exit" = modify $ \s -> s { _wantExit = True } -- processCommand "" = return () processCommand "" = gets _replay >>= playRecording @@ -205,21 +206,20 @@ processCommand str = liftIO $ putStrLn $ "Unknown command: " ++ str type MidiControllerT m = RWST LoopEnv () LoopState m type MidiController = MidiControllerT IO --- playRecording :: Recording -> RWST LoopEnv () LoopState IO () playRecording :: Recording -> MidiController () playRecording (RecordingInProgress _ _ evts@(_:_)) = mapM_ (uncurry delayNoteEv) (zip (subtract (head delays) <$> delays) events) where (delays, events) = unzip $ fmap Event.body <$> reverse evts playRecording _ = return () -getMidiSender :: RWST LoopEnv () LoopState IO MidiHook +getMidiSender :: MidiController MidiHook getMidiSender = do h <- asks _h q <- asks _q publicAddr <- asks _publicAddr return $ forwardNoteEvent h q publicAddr -processMidi :: RWST LoopEnv () LoopState IO () +processMidi :: MidiController () processMidi = do h <- asks _h oldKeys <- gets keysDown @@ -256,7 +256,7 @@ latestEvent (StartRecording x) = x latestEvent (RecordingInProgress _ x []) = x latestEvent (RecordingInProgress _ _ ((x,_):_)) = x -maybeReadLine :: RWST LoopEnv () LoopState IO (Maybe String) +maybeReadLine :: MidiController (Maybe String) maybeReadLine = asks _lineReader >>= liftIO . tryTakeMVar startLineReader :: IO (MVar String) -- cgit v1.2.3