{-# LANGUAGE ExistentialQuantification #-} module Sound.Iteratee.Codecs ( module Sound.Iteratee.Codecs.Wave, getWriter, Codec (..), getCodec ) where import Sound.Iteratee.Base import Sound.Iteratee.Codecs.Wave import Sound.Iteratee.Codecs.Raw import Data.Iteratee import qualified Data.Vector.Storable as V -- |Get a writer iteratee for a SupportedFileFormat getWriter :: SupportedFileFormat -> FilePath -> AudioFormat -> Iteratee (V.Vector Double) AudioMonad () getWriter Wave = writeWave getWriter Raw = error "No writer defined for Raw format" -- |An existentially-wrapped codec. This exists in order to get an arbitrary -- codec (and associated information, such as bit depths) -- from a SupportedFileFormat. data Codec = forall a. WritableAudio a => Codec a instance WritableAudio Codec where emptyState (Codec a) = emptyState a initState (Codec a) = initState a supportedBitDepths (Codec a) = supportedBitDepths a fileType (Codec a) = fileType a getCodec :: SupportedFileFormat -> Codec getCodec Wave = Codec WaveCodec getCodec Raw = Codec RawCodec