module Sound.ALSA.Sequencer.RealTime
( RealTime.T(..)
, fromDouble, fromFractional, fromInteger
, toDouble, toFractional, toInteger
) where
import qualified Sound.ALSA.Sequencer.Marshal.RealTime as RealTime
import Prelude hiding (fromInteger, toInteger, )
nanoPerSecond :: Num a => a
nanoPerSecond :: forall a. Num a => a
nanoPerSecond = a
10forall a b. (Num a, Integral b) => a -> b -> a
^(Int
9::Int)
fromInteger :: Integer -> RealTime.T
fromInteger :: Integer -> T
fromInteger Integer
t =
let (Integer
s,Integer
n) = forall a. Integral a => a -> a -> (a, a)
divMod Integer
t forall a. Num a => a
nanoPerSecond
in Word32 -> Word32 -> T
RealTime.Cons (forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
s) (forall a b. (Integral a, Num b) => a -> b
fromIntegral Integer
n)
fromDouble :: Double -> RealTime.T
fromDouble :: Double -> T
fromDouble = forall a. RealFrac a => a -> T
fromFractional
fromFractional :: (RealFrac a) => a -> RealTime.T
fromFractional :: forall a. RealFrac a => a -> T
fromFractional a
t =
let (Word32
s,a
n) = forall a b. (RealFrac a, Integral b) => a -> (b, a)
properFraction a
t
in Word32 -> Word32 -> T
RealTime.Cons Word32
s (forall a b. (RealFrac a, Integral b) => a -> b
floor forall a b. (a -> b) -> a -> b
$ a
n forall a. Num a => a -> a -> a
* forall a. Num a => a
nanoPerSecond)
toInteger :: RealTime.T -> Integer
toInteger :: T -> Integer
toInteger (RealTime.Cons Word32
s Word32
n) =
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
s forall a. Num a => a -> a -> a
* forall a. Num a => a
nanoPerSecond forall a. Num a => a -> a -> a
+ forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
n
toDouble :: RealTime.T -> Double
toDouble :: T -> Double
toDouble = forall a. RealFrac a => T -> a
toFractional
toFractional :: (RealFrac a) => RealTime.T -> a
toFractional :: forall a. RealFrac a => T -> a
toFractional (RealTime.Cons Word32
s Word32
n) =
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
s forall a. Num a => a -> a -> a
+ forall a b. (Integral a, Num b) => a -> b
fromIntegral Word32
n forall a. Fractional a => a -> a -> a
/ forall a. Num a => a
nanoPerSecond