]> gitweb @ CieloNegro.org - EsounD.git/blob - Sound/EsounD/Streams.hs
Monitor
[EsounD.git] / Sound / EsounD / Streams.hs
1 {-# LANGUAGE
2     UnicodeSyntax
3   , MultiParamTypeClasses
4   #-}
5 -- | EsounD stream I/O
6 module Sound.EsounD.Streams
7     ( Stream(..)
8     , ReadableStream(..)
9     , WritableStream(..)
10     )
11     where
12 import Control.Monad.IO.Class
13 import Control.Monad.Trans.Region
14
15 -- | ESD streams.
16 class Stream s where
17     streamSampleRate ∷ s pr → Int
18
19 -- | ESD streams which behave as sources.
20 class Stream rs ⇒ ReadableStream rs dvec where
21     readFrames ∷ ( AncestorRegion pr cr
22                   , MonadIO cr
23                   )
24                ⇒ rs pr
25                → Int     -- ^ number of frames to read
26                → cr dvec -- ^ frames in deinterleaved vectors
27
28 -- | ESD streams which behave as sinks.
29 class Stream ws ⇒ WritableStream ws dvec where
30     writeFrames ∷ ( AncestorRegion pr cr
31                    , MonadIO cr
32                    )
33                 ⇒ ws pr
34                 → dvec  -- ^ frames in deinterleaved vectors
35                 → cr ()