)
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
import Data.Bits
import Data.StorableVector as S
import Data.StorableVector.Lazy as L
-import Foreign.Storable
import Network
import Prelude.Unicode
import Sound.EsounD.Streams
instance Stream (Monitor fr ch) where
streamSampleRate = moRate
-toLSV ∷ Storable α ⇒ S.Vector α → L.Vector α
-toLSV v = L.fromChunks [v]
-
instance Frame fr ⇒ ReadableStream (Monitor fr Mono) (L.Vector fr) where
readFrames mo nFrames
= liftIO $
openMonitor ∷ ∀fr ch s pr.
( Frame fr
, Channels ch
- , MonadPeelIO pr
+ , MonadControlIO pr
)
⇒ Int -- ^ sample rate for the stream.
→ Maybe HostName -- ^ host to connect to.
-- to ESD (if any).
→ RegionT s pr (Monitor fr ch (RegionT s pr))
openMonitor rate host name
- = block $
+ = mask_ $
do h ← liftIO openSocket
ch ← onExit $ sanitizeIOError $ closeSocket h
return Monitor {
fmt ∷ C'esd_format_t
fmt = frameFmt ((⊥) ∷ fr) .|.
channelFmt ((⊥) ∷ ch) .|.
- c'ESD_STREAM .|.
+ c'ESD_STREAM .|.
c'ESD_MONITOR
openSocket ∷ IO Handle