import Sound.EsounD.Internals
import System.IO
import System.IO.SaferFileHandles.Unsafe
-
+import Text.Printf
-- ^ An opaque ESD handle for playing a stream.
data Player fr ch (r ∷ ★ → ★)
dup pl = do ch' ← dup (plCloseH pl)
return pl { plCloseH = ch' }
-instance Frame fr ⇒ Writable (Player fr Mono) (L.Vector fr) where
- write pl v
+instance Stream (Player fr ch) where
+ streamSampleRate = plRate
+
+instance Frame fr ⇒ WritableStream (Player fr Mono) (L.Vector fr) where
+ writeFrames pl v
= liftIO $ sanitizeIOError $ L.hPut (plHandle pl) v
-instance Frame fr ⇒ Writable (Player fr Stereo) (L.Vector fr, L.Vector fr) where
- write pl (l, r)
+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)
-- | Open an ESD handle for playing a stream.
openPlayer ∷ ∀fr ch s pr.
- ( Frame fr
- , Channels ch
- , MonadPeelIO pr
- )
+ ( Frame fr
+ , Channels ch
+ , MonadPeelIO pr
+ )
⇒ Int -- ^ sample rate for the stream.
→ Maybe HostName -- ^ host to connect to.
→ Maybe String -- ^ name used to identify this stream to
hostPtr
namePtr
≫= wrapSocket
- ( "esd_play_stream("
- ⧺ show fmt
- ⧺ ", "
- ⧺ show rate
- ⧺ ", "
- ⧺ show host
- ⧺ ", "
- ⧺ show name
- ⧺ ") returned an error"
+ ( printf "esd_play_stream(%s, %s, %s, %s) returned an error"
+ (show fmt )
+ (show rate)
+ (show host)
+ (show name)
)