X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=EsounD.git;a=blobdiff_plain;f=Sound%2FEsounD.hs;h=a088e9072c79e8fbac137a5250c1f1fb769d87ee;hp=6adeddf31fcd9128694a176b6621083113a132b3;hb=72018d56d3994c4f514f511d5d0c7970fbb1e79c;hpb=33e5d7d15bd8f124306cf4d6c706bf1b3e1b6704 diff --git a/Sound/EsounD.hs b/Sound/EsounD.hs index 6adeddf..a088e90 100644 --- a/Sound/EsounD.hs +++ b/Sound/EsounD.hs @@ -14,8 +14,10 @@ module Sound.EsounD import Bindings.EsounD import Control.Monad.CatchIO import Control.Monad.Trans.Region +import Data.Bits import Data.Int import Network +import Prelude.Unicode import System.IO.SaferFileHandles class Frame fr where @@ -52,17 +54,22 @@ instance Dup (Player fr ch) where return pl { plHandle = h' } -- | Open an ESD handle for playing a stream. -openPlayer ∷ ( Frame fr - , Channels ch - , MonadCatchIO pr - ) +openPlayer ∷ ∀ fr ch s pr. + ( Frame fr + , Channels ch + , 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 fr ch (RegionT s pr)) openPlayer rate host name - = return Player { - plRate = rate - , plHandle = error "FIXME: not implemented" - } + = do let fmt = frameFmt ((⊥) ∷ fr) .&. + channelFmt ((⊥) ∷ ch) .&. + c'ESD_STREAM .&. + c'ESD_PLAY + return Player { + plRate = rate + , plHandle = error "FIXME: not implemented" + }