]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Filter.hs
esound-1: Replace use of MonadPeelIO with MonadControlIO
[EsounD.git] / Sound / EsounD / Filter.hs
index 21413647b2fc5e728fc03a98c221d1ef46edbf03..60c6d1d36954034cbff94fe7d55898b7e47fb594 100644 (file)
@@ -13,9 +13,9 @@ module Sound.EsounD.Filter
     )
     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
@@ -67,11 +67,17 @@ instance Frame fr ⇒ ReadableStream (Filter fr Stereo) (L.Vector fr, L.Vector f
 
 instance Frame fr ⇒ WritableStream (Filter fr Mono) (L.Vector fr) where 
     writeFrames fi v
-        = liftIO $ sanitizeIOError $ L.hPut (fiHandle fi) v
+        = liftIO $
+          sanitizeIOError $
+          do L.hPut (fiHandle fi) v
+             hFlush (fiHandle fi) 
 
 instance Frame fr ⇒ WritableStream (Filter fr Stereo) (L.Vector fr, L.Vector fr) where
     writeFrames fi (l, r)
-        = liftIO $ sanitizeIOError $ L.hPut (fiHandle fi) (interleave l r)
+        = liftIO $
+          sanitizeIOError $
+          do L.hPut (fiHandle fi) (interleave l r)
+             hFlush (fiHandle fi)
 
 -- | Open an ESD handle for filtering sound produced by ESD.
 --
@@ -81,7 +87,7 @@ instance Frame fr ⇒ WritableStream (Filter fr Stereo) (L.Vector fr, L.Vector f
 openFilter ∷ ∀fr ch s pr.
               ( Frame fr
               , Channels ch
-              , MonadPeelIO pr
+              , MonadControlIO pr
               )
            ⇒ Int            -- ^ sample rate for the stream.
            → Maybe HostName -- ^ host to connect to.
@@ -89,7 +95,7 @@ openFilter ∷ ∀fr ch s pr.
                              --   ESD (if any).
            → RegionT s pr (Filter fr ch (RegionT s pr))
 openFilter rate host name
-    = block $
+    = mask_ $
       do h  ← liftIO openSocket
          ch ← onExit $ sanitizeIOError $ closeSocket h
          return Filter {