module SFML.Audio.SoundBufferRecorder
(
module SFML.Utils
, createSoundBufferRecorder
, destroy
, startRecording
, stopRecording
, getSampleRate
, getRecorderBuffer
)
where
import SFML.Audio.SFSampled
import SFML.Audio.SFSoundRecorder
import SFML.Audio.Types
import SFML.SFException
import SFML.SFResource
import SFML.Utils
import Control.Applicative ((<$>), (<*>))
import Control.Exception
import Control.Monad ((>=>))
import Foreign.C.Types
import Foreign.Ptr (nullPtr)
checkNull :: SoundBufferRecorder -> Maybe SoundBufferRecorder
checkNull sbr@(SoundBufferRecorder ptr) = if ptr == nullPtr then Nothing else Just sbr
createSoundBufferRecorder :: IO (Either SFException SoundBufferRecorder)
createSoundBufferRecorder =
let err = SFException $ "Failed creating sound buffer recorder"
in fmap (tagErr err . checkNull) sfSoundBufferRecorder_create
foreign import ccall unsafe "sfSoundBufferRecorder_create"
sfSoundBufferRecorder_create :: IO SoundBufferRecorder
instance SFResource SoundBufferRecorder where
destroy = sfSoundBufferRecorder_destroy
foreign import ccall unsafe "sfSoundBufferRecorder_destroy"
sfSoundBufferRecorder_destroy :: SoundBufferRecorder -> IO ()
instance SFSoundRecorder SoundBufferRecorder where
startRecording rec rate = ((/=0) . fromIntegral) <$> sfSoundBufferRecorder_start rec (fromIntegral rate)
stopRecording = sfSoundBufferRecorder_stop
foreign import ccall unsafe "sfSoundBufferRecorder_start"
sfSoundBufferRecorder_start :: SoundBufferRecorder -> CUInt -> IO CInt
foreign import ccall unsafe "sfSoundBufferRecorder_stop"
sfSoundBufferRecorder_stop :: SoundBufferRecorder -> IO ()
instance SFSampled SoundBufferRecorder where
getSampleRate = sfSoundBufferRecorder_getSampleRate >=> return . fromIntegral
foreign import ccall unsafe "sfSoundBufferRecorder_getSampleRate"
sfSoundBufferRecorder_getSampleRate :: SoundBufferRecorder -> IO CUInt
getRecorderBuffer
:: SoundBufferRecorder
-> IO SoundBuffer
getRecorderBuffer = sfSoundBufferRecorder_getBuffer
foreign import ccall unsafe "sfSoundBufferRecorder_getBuffer"
sfSoundBufferRecorder_getBuffer :: SoundBufferRecorder -> IO SoundBuffer