{- | System Real Time messages -} module Sound.MIDI.Message.System.RealTime ( T(..), get, put, ) where -- import Sound.MIDI.Parser.Primitive import qualified Sound.MIDI.Parser.Class as Parser import qualified Sound.MIDI.Writer.Basic as Writer import Data.Ix(Ix) data T = TimingClock -- F8 | Start -- FA | Continue -- FB | Stop -- FC | ActiveSensing -- FE | Reset -- FF deriving (Eq, Ord, Show, Enum, Ix) -- * serialization get :: Parser.C parser => Int -> Parser.Fallible parser T get code = case code of 0xF8 -> return TimingClock 0xFA -> return Start 0xFB -> return Continue 0xFC -> return Stop 0xFE -> return ActiveSensing 0xFF -> return Reset _ -> Parser.giveUp ("unknown System Real Time message code " ++ show code) put :: Writer.C writer => T -> writer put msg = case msg of TimingClock -> Writer.putByte 0xF8 Start -> Writer.putByte 0xFA Continue -> Writer.putByte 0xFB Stop -> Writer.putByte 0xFC ActiveSensing -> Writer.putByte 0xFE Reset -> Writer.putByte 0xFF