-- | Type-safe bindings to EsounD with monadic regions.
module Sound.EsounD
- ( Frame
-
- , Channels
- , Mono
- , Stereo
-
- , Player
- , openPlayer
+ ( module Sound.EsounD.Types
+ , module Sound.EsounD.Streams
+ , module Sound.EsounD.Player
+ , module Sound.EsounD.Recorder
+ , module Sound.EsounD.Monitor
+ , module Sound.EsounD.Filter
)
where
-import Bindings.EsounD
-import Control.Monad.CatchIO
-import Control.Monad.Trans.Region
-import Data.Bits
-import Data.Int
-import Network
-import Prelude.Unicode
-import System.IO.SaferFileHandles
-
-class Frame fr where
- frameFmt ∷ fr → C'esd_format_t
-
-instance Frame Int8 where
- frameFmt _ = c'ESD_BITS8
-
-instance Frame Int16 where
- frameFmt _ = c'ESD_BITS16
-
-class Channels ch where
- channelFmt ∷ ch → C'esd_format_t
-
-data Mono
-instance Channels Mono where
- channelFmt _ = c'ESD_MONO
-
-data Stereo
-instance Channels Stereo where
- channelFmt _ = c'ESD_STEREO
-
-
--- ^ An ESD handle for playing a stream.
-data Player fr ch (r ∷ * → *)
- = Player {
- plRate ∷ Int
- , plHandle ∷ RegionalFileHandle WriteMode r
- }
-
-instance Dup (Player fr ch) where
- dup pl
- = do h' ← dup (plHandle pl)
- return pl { plHandle = h' }
-
--- | Open an ESD handle for playing a stream.
-openPlayer ∷ ∀ fr ch s pr.
- ( Frame fr
- , Channels ch
- , MonadCatchIO pr
- )
- ⇒ Int -- ^ sample rate for the stream.
- → HostName -- ^ host to connect to.
- → Maybe String -- ^ name used to identify this stream to
- -- ESD (if any).
- → RegionT s pr (Player fr ch (RegionT s pr))
-openPlayer rate host name
- = do let fmt = frameFmt ((⊥) ∷ fr) .&.
- channelFmt ((⊥) ∷ ch) .&.
- c'ESD_STREAM .&.
- c'ESD_PLAY
- return Player {
- plRate = rate
- , plHandle = error "FIXME: not implemented"
- }
+import Sound.EsounD.Filter
+import Sound.EsounD.Monitor
+import Sound.EsounD.Player
+import Sound.EsounD.Recorder
+import Sound.EsounD.Streams
+import Sound.EsounD.Types