]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Player.hs
Writable class
[EsounD.git] / Sound / EsounD / Player.hs
index b60eda08a87213b3bd7f5be2c1ecadd4f8454194..0525a7bea358e40cb458dd081583f453d80d6acc 100644 (file)
@@ -1,26 +1,34 @@
+{-# LANGUAGE
+    FlexibleInstances
+  , KindSignatures
+  , MultiParamTypeClasses
+  , UnicodeSyntax
+  , ScopedTypeVariables
+  #-}
 -- | EsounD player streams.
 module Sound.EsounD.Player
     ( Player
     , openPlayer
     )
     where
-
 import Bindings.EsounD
 import Control.Monad.IO.Class
 import Control.Monad.Trans.Region
 import Control.Monad.Trans.Region.OnExit
 import Control.Monad.Unicode
 import Data.Bits
+import Data.StorableVector.Lazy as Lazy
 import Foreign.C.String
 import Network
 import Prelude.Unicode
+import Sound.EsounD.Streams 
 import Sound.EsounD.Internals
 import System.IO
 import System.IO.SaferFileHandles.Unsafe
 
 
 -- ^ An opaque ESD handle for playing a stream.
-data Player fr ch (r ∷ * → *)
+data Player fr ch (r ∷ ★ → ★)
     = Player {
         plRate   ∷ !Int
       -- THINKME: We really want to use RegionalFileHandle but we
@@ -34,6 +42,10 @@ instance Dup (Player fr ch) where
     dup pl = do ch' ← dup (plCloseH pl)
                 return pl { plCloseH = ch' }
 
+instance Frame fr ⇒ Writable (Player fr Mono) (Lazy.Vector fr) where
+    write pl v
+        = liftIO $ sanitizeIOError $ Lazy.hPut (plHandle pl) v
+
 -- | Open an ESD handle for playing a stream.
 openPlayer ∷ ∀fr ch s pr.
                ( Frame fr