Library
Build-Depends:
- base == 4.2.*,
- bindings-EsounD == 0.1.*,
- regions == 0.7.*,
- storablevector == 0.2.*
+ MonadCatchIO-transformers == 0.2.*,
+ base == 4.2.*,
+ bindings-EsounD == 0.1.*,
+ network == 2.2.*,
+ regions == 0.7.*,
+ safer-file-handles == 0.8.*,
+ storablevector == 0.2.*
Exposed-Modules:
Sound.EsounD
+
+ Extensions:
+ KindSignatures
+ UnicodeSyntax
+
+ GHC-Options:
+ -Wall
--- /dev/null
+-- | Type-safe bindings to EsounD with monadic regions.
+module Sound.EsounD
+ ( Player
+ , openPlayer
+ )
+ where
+
+import Control.Monad.CatchIO
+import Control.Monad.Trans.Region
+import Network
+import System.IO.SaferFileHandles
+
+{-
+data Mono
+data Stereo
+
+data Recorder frame channels
+data Filter frame channels
+data Sampler
+-}
+
+-- ^ An ESD handle for playing a stream.
+data Player frame channels (r ∷ * → *)
+ = Player {
+ plRate ∷ Int
+ , plHandle ∷ RegionalFileHandle WriteMode r
+ }
+
+instance Dup (Player frame channels) where
+ dup pl
+ = do h' ← dup (plHandle pl)
+ return pl { plHandle = h' }
+
+-- ^ Open an ESD handle for playing a stream.
+openPlayer ∷ MonadCatchIO pr
+ ⇒ Int -- ^ sample rate for the stream.
+ → HostName -- ^ host to connect to.
+ → Maybe String -- ^ name used to identify this stream to
+ -- ESD (if any).
+ → RegionT s pr (Player frame channels (RegionT s pr))
+openPlayer rate host name
+ = return Player {
+ plRate = rate
+ , plHandle = error "FIXME: not implemented"
+ }
+++ /dev/null
-module Sound.EsounD
- (
- )
- where
-
-{-
-data Mono
-data Stereo
-
-data Player frame channels
-data Recorder frame channels
-data Filter frame channels
-data Sampler
--}