]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Streams.hs
Monitor
[EsounD.git] / Sound / EsounD / Streams.hs
index b379afb0e9f6724fc097e342e1b3220eabc4abe4..374b60240eb6b6d17971c72fd549ed43b42f4023 100644 (file)
@@ -4,16 +4,32 @@
   #-}
 -- | 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 ()