X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Sound%2FEsounD%2FStreams.hs;h=374b60240eb6b6d17971c72fd549ed43b42f4023;hb=4570a37d1fc8f21a4ee1221c6ed289d281f1b005;hp=2be218ef4dcb727d10a3761dcac81f77b87aaeda;hpb=2c9350d4762d69bbfcdc58212e27506c3d4f7494;p=EsounD.git diff --git a/Sound/EsounD/Streams.hs b/Sound/EsounD/Streams.hs index 2be218e..374b602 100644 --- a/Sound/EsounD/Streams.hs +++ b/Sound/EsounD/Streams.hs @@ -4,14 +4,32 @@ #-} -- | EsounD stream I/O module Sound.EsounD.Streams - ( Writable(..) + ( Stream(..) + , ReadableStream(..) + , WritableStream(..) ) where -import Control.Monad.IO.Class +import Control.Monad.IO.Class import Control.Monad.Trans.Region -class Writable ws v where - write ∷ ( AncestorRegion pr cr - , MonadIO cr - ) - ⇒ ws (RegionT s pr) → v → cr () +-- | 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 ()