{-# LANGUAGE RankNTypes, FlexibleContexts #-} {- | Generic functions and iteratees to support writing files. -} module Sound.Iteratee.Writer ( -- * Audio writing functions fileDriverAudio ,runAudioMonad ,enumAudioFile ) where import Sound.Iteratee.Base import Sound.Iteratee.Codecs import Data.Iteratee import Data.Iteratee.IO import qualified Data.Vector.Storable as V import Data.Word (Word8) import Control.Monad.CatchIO runAudioMonad :: AudioMonad a -> IO a runAudioMonad am = do (a, s) <- runStateT am NoState case s of NoState -> return a WaveState{} -> runWaveAM (put s >> return a) -- | A simplified interface to running an audio iteratee fileDriverAudio :: Iteratee (V.Vector Word8) AudioMonad a -> FilePath -> IO a fileDriverAudio i fp = runAM (fileDriverRandom i fp) where runAM = runAudioMonad enumAudioFile :: MonadCatchIO m => Int -> FilePath -> Enumerator (V.Vector Word8) m a enumAudioFile = enumFileRandom