module Graphics.UI.SDL.Mixer.Samples
( mkFinalizedChunk
, maxVolume
, tryLoadWAV
, loadWAV
, volumeChunk
) where
import Foreign(Ptr, FunPtr, nullPtr, withForeignPtr, newForeignPtr)
import Foreign.C(withCString, CString)
import Graphics.UI.SDL.Mixer.Types(Chunk, ChunkStruct)
import Graphics.UI.SDL.General(unwrapMaybe)
maxVolume :: Int
maxVolume = 128
foreign import ccall unsafe "&Mix_FreeChunk" mixFreeChunkFinal :: FunPtr (Ptr ChunkStruct -> IO ())
mkFinalizedChunk :: Ptr ChunkStruct -> IO Chunk
mkFinalizedChunk = newForeignPtr mixFreeChunkFinal
foreign import ccall unsafe "macros.h HS_Mix_LoadWAV"
mixLoadWAV :: CString -> IO (Ptr ChunkStruct)
tryLoadWAV :: FilePath -> IO (Maybe Chunk)
tryLoadWAV string
= withCString string $ \cString ->
do chunk <- mixLoadWAV cString
if chunk == nullPtr
then return Nothing
else fmap Just (mkFinalizedChunk chunk)
loadWAV :: FilePath -> IO Chunk
loadWAV path = unwrapMaybe "Mix_LoadWAV" (tryLoadWAV path)
foreign import ccall unsafe "Mix_VolumeChunk" mixVolumeChunk :: Ptr ChunkStruct -> Int -> IO Int
volumeChunk :: Chunk -> Int -> IO Int
volumeChunk chunk volume = withForeignPtr chunk (\ptr -> mixVolumeChunk ptr volume)