]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Streams.hs
Monitor
[EsounD.git] / Sound / EsounD / Streams.hs
index 216fdafda4cf4b2f21284a5260fe5c7bc3e10a34..374b60240eb6b6d17971c72fd549ed43b42f4023 100644 (file)
@@ -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.Trans.Region
 
-class Writable ws dvec where
-    write ∷ ( AncestorRegion pr cr
-             , MonadIO cr
-             )
-          ⇒ ws 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 ()