)
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
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.
-- 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 {