-- | Single channel (Mono) PCM audio module Data.MediaBus.Media.Audio.Raw.Mono ( Mono() ) where import Control.DeepSeq import Control.Lens import Data.Default import Data.MediaBus.Media.Audio.Raw import Data.MediaBus.Media.Blank import Data.MediaBus.Media.Channels import Data.Typeable import Foreign.Storable import Test.QuickCheck -- | The channel layout indicator type for **mono** audio data Mono instance KnownChannelLayout Mono where numberOfChannels _ = 1 newtype instance Pcm Mono s = MkMonoSample{_monoSample :: s} deriving (CanBeBlank, NFData, Eq, Storable, Default, Typeable, Arbitrary, IsPcmValue, Num, Ord, Integral, Real, Enum) instance (IsPcmValue a, IsPcmValue b) => EachChannel (Pcm Mono a) (Pcm Mono b) where type ChannelsFrom (Pcm Mono a) = a type ChannelsTo (Pcm Mono b) = b eachChannel = iso _monoSample MkMonoSample instance Show s => Show (Pcm Mono s) where showsPrec d (MkMonoSample !s) = showParen (d > 10) $ showString "M " . showsPrec 11 s