]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Streams.hs
Monitor
[EsounD.git] / Sound / EsounD / Streams.hs
index 2be218ef4dcb727d10a3761dcac81f77b87aaeda..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.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 ()