X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Sound%2FEsounD%2FFilter.hs;h=60c6d1d36954034cbff94fe7d55898b7e47fb594;hb=fe6d908;hp=21413647b2fc5e728fc03a98c221d1ef46edbf03;hpb=cb4f21e26b30aff97bd7615fba86405e50b163b3;p=EsounD.git diff --git a/Sound/EsounD/Filter.hs b/Sound/EsounD/Filter.hs index 2141364..60c6d1d 100644 --- a/Sound/EsounD/Filter.hs +++ b/Sound/EsounD/Filter.hs @@ -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 {