]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Player.hs
esound-1: Replace use of MonadPeelIO with MonadControlIO
[EsounD.git] / Sound / EsounD / Player.hs
index 49740fc4167a57872f74b0c9a784b71f0dbb3c6d..4d3c719cdf9fe09cd527da7a32e370bc68d1bb45 100644 (file)
@@ -13,9 +13,9 @@ module Sound.EsounD.Player
     )
     where
 import Bindings.EsounD
-import Control.Exception.Peel
+import Control.Exception.Control
 import Control.Monad.IO.Class
-import Control.Monad.IO.Peel
+import Control.Monad.IO.Control
 import Control.Monad.Trans.Region
 import Control.Monad.Trans.Region.OnExit
 import Control.Monad.Unicode
@@ -49,17 +49,23 @@ instance Stream (Player fr ch) where
 
 instance Frame fr ⇒ WritableStream (Player fr Mono) (L.Vector fr) where 
     writeFrames pl v
-        = liftIO $ sanitizeIOError $ L.hPut (plHandle pl) v
+        = liftIO $
+          sanitizeIOError $
+          do L.hPut (plHandle pl) v
+             hFlush (plHandle pl)
 
 instance Frame fr ⇒ WritableStream (Player fr Stereo) (L.Vector fr, L.Vector fr) where
     writeFrames pl (l, r)
-        = liftIO $ sanitizeIOError $ L.hPut (plHandle pl) (interleave l r)
+        = liftIO $
+          sanitizeIOError $
+          do L.hPut (plHandle pl) (interleave l r)
+             hFlush (plHandle pl)
 
 -- | Open an ESD handle for playing a stream.
 openPlayer ∷ ∀fr ch s pr.
               ( Frame fr
               , Channels ch
-              , MonadPeelIO pr
+              , MonadControlIO pr
               )
            ⇒ Int            -- ^ sample rate for the stream.
            → Maybe HostName -- ^ host to connect to.
@@ -67,7 +73,7 @@ openPlayer ∷ ∀fr ch s pr.
                              --   ESD (if any).
            → RegionT s pr (Player fr ch (RegionT s pr))
 openPlayer rate host name
-    = block $
+    = mask_ $
       do h  ← liftIO openSocket
          ch ← onExit $ sanitizeIOError $ closeSocket h
          return Player {