module Sound.ALSA.Sequencer.RealTime ( RealTime.T(..) , fromDouble, fromInteger , toDouble, toInteger ) where import qualified Sound.ALSA.Sequencer.Marshal.RealTime as RealTime import Prelude hiding (fromInteger, toInteger, ) import qualified Prelude as P nanoPerSecond :: Num a => a nanoPerSecond = 10^(9::Int) -- | Convert number of nanoseconds to 'RealTime.T' fromInteger :: Integer -> RealTime.T fromInteger t = let (s,n) = divMod t nanoPerSecond in RealTime.Cons (fromIntegral s) (fromIntegral n) -- | Convert fractional number of seconds to 'RealTime.T' fromDouble :: Double -> RealTime.T fromDouble t = let (s,n) = properFraction t in RealTime.Cons s (floor $ n * nanoPerSecond) -- | Convert number of nanoseconds to 'RealTime.T' toInteger :: RealTime.T -> Integer toInteger (RealTime.Cons s n) = fromIntegral s * nanoPerSecond + fromIntegral n -- | Convert fractional number of seconds to 'RealTime.T' toDouble :: RealTime.T -> Double toDouble (RealTime.Cons s n) = fromIntegral s + fromIntegral n / nanoPerSecond