module Sound.ALSA.PCM.Parameters.Software (
   -- * Types
   SwParams.T, Size,
   TimestampMode, timestampNone, timestampMmap,

   -- * Primitive accessors to software parameters
   getAvailMin,         setAvailMin,
   getSilenceSize,      setSilenceSize,
   getSilenceThreshold, setSilenceThreshold,
   getSleepMin,         setSleepMin,
   getStartThreshold,   setStartThreshold,
   getStopThreshold,    setStopThreshold,
   getTimestampMode,    setTimestampMode,
   getXferAlign,        setXferAlign,

   -- * Complex software parameter configuration
   setBufferSize,
   ) where

import Sound.ALSA.PCM.Core.SwParams as SwParams
import Sound.ALSA.PCM.Core.Handle (Size, )


setBufferSize ::
      Size -- ^ buffer size
   -> Size -- ^ period size
   -> SwParams.T i y ()
setBufferSize :: forall i y. Size -> Size -> T i y ()
setBufferSize Size
_bufferSize Size
periodSize = do
   -- let startThreshold =
   --        (setBufferSize `div` periodSize) * periodSize
   -- setStartThreshold startThreshold
   Size -> T i y ()
forall i y. Size -> T i y ()
setStartThreshold Size
0
   Size -> T i y ()
forall i y. Size -> T i y ()
setAvailMin (Size -> T i y ()) -> Size -> T i y ()
forall a b. (a -> b) -> a -> b
$ Size -> Size
forall a b. (Integral a, Num b) => a -> b
fromIntegral Size
periodSize
   Size -> T i y ()
forall i y. Size -> T i y ()
setXferAlign Size
1
   -- pad buffer with silence when needed
   -- setSilenceSize periodSize
   -- setSilenceThreshold periodSize