mediabus-0.3.0.0: src/Data/MediaBus/Media/Blank.hs
-- | Type class for media content that has /blank/ values, that represent a
-- neutral media content such as silence or a black image.
module Data.MediaBus.Media.Blank
( CanGenerateBlankMedia(..)
, CanBeBlank(..)
) where
import Data.MediaBus.Basics.Ticks
import Data.MediaBus.Media.Segment
import Data.Time.Clock
import Control.Lens
import Data.Proxy
-- | Types that can have /blank/ values.
class CanBeBlank a where
-- | Generate the value that represents neutral media content.
blank :: a
-- | Types that have a dynamic duration, for example a audio sample buffers, can
-- implement this type class to provide methods for generating blank media
-- content (e.g. silence) for a certain duration.
class CanGenerateBlankMedia a where
-- | Generate the value that represents neutral media content, and has at
-- least the given duration.
blankFor :: NominalDiffTime -> a
blankFor dt = blankForTicks (nominalDiffTime # dt :: PicoSeconds)
-- | Generate the value that represents neutral media content, and has at
-- least the given duration given as 'Ticks'
blankForTicks :: CanBeTicks r i => Ticks r i -> a
blankForTicks ticks = blankFor (from nominalDiffTime # ticks)
instance (HasStaticDuration d, CanGenerateBlankMedia a) =>
CanBeBlank (Segment d a) where
blank = MkSegment (blankFor (getStaticDuration (Proxy :: Proxy d)))