openal-ffi-0.0.1: src/Sound/OpenAL/FFI/ALC.hs
{-# LANGUAGE PatternSynonyms #-}
module Sound.OpenAL.FFI.ALC where
import Foreign (FunPtr, Ptr, nullPtr)
import Foreign.C.Types (CChar(..), CInt(..), CUInt(..))
import Foreign.C.String (CString)
import Sound.OpenAL.FFI.Utils (Dynamic)
-- * Context
newtype Context = Context (Ptr Context)
deriving (Eq, Ord, Show)
foreign import ccall unsafe "alcCreateContext"
alcCreateContext :: Device -> Ptr CInt -> IO Context
foreign import ccall unsafe "alcDestroyContext"
alcDestroyContext :: Context -> IO ()
foreign import ccall unsafe "alcGetCurrentContext"
alcGetCurrentContext :: IO Context
foreign import ccall unsafe "alcMakeContextCurrent"
alcMakeContextCurrent :: Context -> IO CChar
foreign import ccall unsafe "alcSuspendContext"
alcSuspendContext :: Context -> IO ()
foreign import ccall unsafe "alcProcessContext"
alcProcessContext :: Context -> IO ()
foreign import ccall unsafe "alcGetContextsDevice"
alcGetContextsDevice :: Context -> IO Device
-- * Device
newtype Device = Device (Ptr Device)
deriving (Eq, Ord, Show)
nullDevice :: Device
nullDevice = Device nullPtr
foreign import ccall unsafe "alcOpenDevice"
alcOpenDevice :: CString -> IO Device
foreign import ccall unsafe "alcCloseDevice"
alcCloseDevice :: Device -> IO CChar
-- * Errors
foreign import ccall unsafe "alcGetError"
alcGetError :: Device -> IO CInt
pattern INVALID_DEVICE :: (Eq a, Num a) => a
pattern INVALID_DEVICE = 0xA001
pattern INVALID_CONTEXT :: (Eq a, Num a) => a
pattern INVALID_CONTEXT = 0xA002
pattern INVALID_ENUM :: (Eq a, Num a) => a
pattern INVALID_ENUM = 0xA003
pattern INVALID_VALUE :: (Eq a, Num a) => a
pattern INVALID_VALUE = 0xA004
pattern INVALID_OPERATION :: (Eq a, Num a) => a
pattern INVALID_OPERATION = 0xA006
pattern OUT_OF_MEMORY :: (Eq a, Num a) => a
pattern OUT_OF_MEMORY = 0xA005
-- * Extensions
foreign import ccall unsafe "alcGetProcAddress"
alcGetProcAddress :: Device -> CString -> IO (FunPtr a)
foreign import ccall unsafe "alcGetEnumValue"
alcGetEnumValue :: Device -> CString -> IO CInt
-- * Queries
foreign import ccall unsafe "alcGetString"
alcGetString :: Device -> CInt -> IO CString
foreign import ccall unsafe "alcGetIntegerv"
alcGetIntegerv :: Device -> CInt -> CInt -> Ptr CInt -> IO ()
foreign import ccall unsafe "alcIsExtensionPresent"
alcIsExtensionPresent_ :: Device -> CString -> IO CChar
-- * Capture
foreign import ccall unsafe "dynamic"
invokeCaptureOpenDevice :: Dynamic (CString -> CUInt -> CInt -> CInt -> IO Device)
foreign import ccall unsafe "dynamic"
invokeCaptureStartStop :: Dynamic (Device -> IO ())
foreign import ccall unsafe "dynamic"
invokeCaptureSamples :: Dynamic (Device -> Ptr a -> CInt -> IO ())
foreign import ccall unsafe "dynamic"
invokeCaptureCloseDevice :: Dynamic (Device -> IO CChar)
-- * Enums
pattern FREQUENCY :: (Eq a, Num a) => a
pattern FREQUENCY = 0x1007
pattern REFRESH :: (Eq a, Num a) => a
pattern REFRESH = 0x1008
pattern SYNC :: (Eq a, Num a) => a
pattern SYNC = 0x1009
pattern MONO_SOURCES :: (Eq a, Num a) => a
pattern MONO_SOURCES = 0x1010
pattern STEREO_SOURCES :: (Eq a, Num a) => a
pattern STEREO_SOURCES = 0x1011
pattern DEFAULT_DEVICE_SPECIFIER :: (Eq a, Num a) => a
pattern DEFAULT_DEVICE_SPECIFIER = 0x1004
pattern DEVICE_SPECIFIER :: (Eq a, Num a) => a
pattern DEVICE_SPECIFIER = 0x1005
pattern EXTENSIONS :: (Eq a, Num a) => a
pattern EXTENSIONS = 0x1006
pattern CAPTURE_DEFAULT_DEVICE_SPECIFIER :: (Eq a, Num a) => a
pattern CAPTURE_DEFAULT_DEVICE_SPECIFIER = 0x0311
pattern CAPTURE_DEVICE_SPECIFIER :: (Eq a, Num a) => a
pattern CAPTURE_DEVICE_SPECIFIER = 0x0310
pattern ATTRIBUTES_SIZE :: (Eq a, Num a) => a
pattern ATTRIBUTES_SIZE = 0x1002
pattern ALL_ATTRIBUTES :: (Eq a, Num a) => a
pattern ALL_ATTRIBUTES = 0x1003
pattern MAJOR_VERSION :: (Eq a, Num a) => a
pattern MAJOR_VERSION = 0x1000
pattern MINOR_VERSION :: (Eq a, Num a) => a
pattern MINOR_VERSION = 0x1001
pattern CAPTURE_SAMPLES :: (Eq a, Num a) => a
pattern CAPTURE_SAMPLES = 0x0312