]> gitweb @ CieloNegro.org - EsounD.git/blobdiff - Sound/EsounD/Player.hs
save my changes from being lost
[EsounD.git] / Sound / EsounD / Player.hs
index b60eda08a87213b3bd7f5be2c1ecadd4f8454194..7691672c24d5dd26a5a5139ef63f4560ba948a19 100644 (file)
@@ -1,26 +1,36 @@
+{-# LANGUAGE
+    FlexibleContexts
+  , FlexibleInstances
+  , KindSignatures
+  , MultiParamTypeClasses
+  , UnicodeSyntax
+  , ScopedTypeVariables
+  , TypeFamilies
+  #-}
 -- | 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 L
 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 +44,10 @@ instance Dup (Player fr ch) where
     dup pl = do ch' ← dup (plCloseH pl)
                 return pl { plCloseH = ch' }
 
+instance (Mux L.Vector fr ch, dvec ~ DemuxedVec L.Vector fr ch) ⇒ Writable (Player fr ch) dvec where
+      write pl dvec
+          = liftIO $ sanitizeIOError $ L.hPut (plHandle pl) (mux dvec)
+
 -- | Open an ESD handle for playing a stream.
 openPlayer ∷ ∀fr ch s pr.
                ( Frame fr