]> gitweb @ CieloNegro.org - EsounD.git/blob - Sound/EsounD.hs
ba46305e0af46eaaf354d81d9d16931e29d8a467
[EsounD.git] / Sound / EsounD.hs
1 -- | Type-safe bindings to EsounD with monadic regions.
2 module Sound.EsounD
3     ( Player
4     , openPlayer
5     )
6     where
7
8 import Control.Monad.CatchIO
9 import Control.Monad.Trans.Region
10 import Network
11 import System.IO.SaferFileHandles
12
13 {-
14 data Mono
15 data Stereo
16
17 data Recorder frame channels
18 data Filter   frame channels
19 data Sampler
20 -}
21
22 -- ^ An ESD handle for playing a stream.
23 data Player frame channels (r ∷ * → *)
24     = Player {
25         plRate   ∷ Int
26       , plHandle ∷ RegionalFileHandle WriteMode r
27       }
28
29 instance Dup (Player frame channels) where
30     dup pl
31         = do h' ← dup (plHandle pl)
32              return pl { plHandle = h' }
33
34 -- ^ Open an ESD handle for playing a stream.
35 openPlayer ∷ MonadCatchIO pr
36            ⇒ Int          -- ^ sample rate for the stream.
37            → HostName     -- ^ host to connect to.
38            → Maybe String -- ^ name used to identify this stream to
39                            --   ESD (if any).
40            → RegionT s pr (Player frame channels (RegionT s pr))
41 openPlayer rate host name
42     = return Player {
43         plRate   = rate
44       , plHandle = error "FIXME: not implemented"
45       }