From 0465b7e3bed042d72da053bceeb4959403cc53a6 Mon Sep 17 00:00:00 2001 From: PHO Date: Wed, 3 Nov 2010 15:31:14 +0900 Subject: [PATCH] decided the Player type --- EsounD.cabal | 18 ++++++++++++++---- Sound/EsounD.hs | 45 +++++++++++++++++++++++++++++++++++++++++++++ Sound/EsounD.hsc | 14 -------------- 3 files changed, 59 insertions(+), 18 deletions(-) create mode 100644 Sound/EsounD.hs delete mode 100644 Sound/EsounD.hsc diff --git a/EsounD.cabal b/EsounD.cabal index cd06f1b..60e1e5b 100644 --- a/EsounD.cabal +++ b/EsounD.cabal @@ -22,10 +22,20 @@ Source-Repository head 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 diff --git a/Sound/EsounD.hs b/Sound/EsounD.hs new file mode 100644 index 0000000..ba46305 --- /dev/null +++ b/Sound/EsounD.hs @@ -0,0 +1,45 @@ +-- | 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" + } diff --git a/Sound/EsounD.hsc b/Sound/EsounD.hsc deleted file mode 100644 index 2e86329..0000000 --- a/Sound/EsounD.hsc +++ /dev/null @@ -1,14 +0,0 @@ -module Sound.EsounD - ( - ) - where - -{- -data Mono -data Stereo - -data Player frame channels -data Recorder frame channels -data Filter frame channels -data Sampler --} -- 2.40.0