{-
Copyright 2016 Markus Ongyerth
This file is part of pulseaudio-hs.
Monky is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Monky is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with pulseaudio-hs. If not, see .
-}
{-# LANGUAGE RecordWildCards #-}
{-|
Module : Sound.Pulse.SampleSpec
Description : provides the time type used for pa_sample_spec.
Maintianer : ongy
Stability : experimental
-}
module Sound.Pulse.SampleSpec
( SampleFormat(..)
, SampleSpec(..)
)
where
#if __GLASGOW_HASKELL__ < 800
#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
#endif
#include
import Control.Applicative ((<$>), (<*>))
import Sound.Pulse.Def (SampleFormat(..), sampleFormatFromInt, sampleFormatToInt)
import Foreign.Storable (Storable(..))
import Data.Word (Word32, Word8, Word)
-- |The pa_sample_spec type for Haskell.
data SampleSpec = SampleSpec
{ ssFormat :: SampleFormat
, ssRate :: Word32
, ssChannels :: Word8
} deriving (Eq, Show)
instance Storable SampleSpec where
sizeOf _ = #{size struct pa_sample_spec}
alignment _ = #{alignment struct pa_sample_spec}
peek p = SampleSpec
<$> (sampleFormatFromInt <$> #{peek struct pa_sample_spec, format} p)
<*> #{peek struct pa_sample_spec, rate} p
<*> #{peek struct pa_sample_spec, channels} p
poke p (SampleSpec {..}) = do
#{poke struct pa_sample_spec, format} p $ sampleFormatToInt ssFormat
#{poke struct pa_sample_spec, rate} p ssRate
#{poke struct pa_sample_spec, channels} p ssChannels