X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=EsounD.git;a=blobdiff_plain;f=Sound%2FEsounD%2FPlayer.hs;h=0525a7bea358e40cb458dd081583f453d80d6acc;hp=b60eda08a87213b3bd7f5be2c1ecadd4f8454194;hb=2c9350d4762d69bbfcdc58212e27506c3d4f7494;hpb=332de27c05d195598689979c035bd136a47f4394 diff --git a/Sound/EsounD/Player.hs b/Sound/EsounD/Player.hs index b60eda0..0525a7b 100644 --- a/Sound/EsounD/Player.hs +++ b/Sound/EsounD/Player.hs @@ -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