#-}
-- | EsounD stream I/O
module Sound.EsounD.Streams
- ( Writable(..)
- , Mux(..) -- defined by Internals
+ ( Stream(..)
+ , ReadableStream(..)
+ , WritableStream(..)
)
where
import Control.Monad.IO.Class
import Control.Monad.Trans.Region
-import Sound.EsounD.Internals
-class Writable ws dvec where
- write ∷ ( AncestorRegion pr cr
- , MonadIO cr
- )
- ⇒ ws (RegionT s pr) → dvec → 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 ()