-- | This module centers around the data family 'Audio' that provides general -- info about an audio stream, such as sampling rate and channel layout and -- codec. module Data.MediaBus.Media.Audio ( Audio ) where import Data.MediaBus.Media.Media import Data.MediaBus.Media.Channels import Data.MediaBus.Basics.Ticks import Control.Lens -- | Family of audio media types, indexed by a sampleRate, a channel layout -- and a /codec/ parameter. This type family is intended as a basis for all audio -- media, raw as well as encoded audio. data family Audio (sampleRate :: Rate) channelLayout encoding instance (KnownRate r) => HasRate (Audio r c t) where type GetRate (Audio r c t) = r type SetRate (Audio r c t) x = Audio x c t instance (KnownChannelLayout c) => HasChannelLayout (Audio r c t) where type ChannelLayout (Audio r c t) = c type SetChannelLayout (Audio r c t) c' = Audio r c' t instance (IsMedia (Audio r c e), IsMedia (Audio r' c' e')) => HasMedia (Audio r c e) (Audio r' c' e') where type MediaFrom (Audio r c e) = Audio r c e type MediaTo (Audio r' c' e') = Audio r' c' e' media = iso id id