{-# LANGUAGE UnicodeSyntax , MultiParamTypeClasses #-} -- | EsounD stream I/O module Sound.EsounD.Streams ( Stream(..) , ReadableStream(..) , WritableStream(..) ) where import Control.Monad.IO.Class import Control.Monad.Trans.Region -- | ESD streams. class Stream s where streamSampleRate ∷ s pr → Int -- | ESD streams which behave as sources. class Stream rs ⇒ ReadableStream rs dvec where readFrames ∷ ( AncestorRegion pr cr , MonadIO cr ) ⇒ rs pr → Int -- ^ number of frames to read → cr dvec -- ^ frames in deinterleaved vectors -- | ESD streams which behave as sinks. class Stream ws ⇒ WritableStream ws dvec where writeFrames ∷ ( AncestorRegion pr cr , MonadIO cr ) ⇒ ws pr → dvec -- ^ frames in deinterleaved vectors → cr ()