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 :: Int
maxVolume = 128
foreign import ccall unsafe "&Mix_FreeChunk" mixFreeChunkFinal :: FunPtr (Ptr ChunkStruct -> IO ())
mkFinalizedChunk :: Ptr ChunkStruct -> IO Chunk
mkFinalizedChunk :: Ptr ChunkStruct -> IO Chunk
mkFinalizedChunk = FinalizerPtr ChunkStruct -> Ptr ChunkStruct -> IO Chunk
forall a. FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
newForeignPtr FinalizerPtr ChunkStruct
mixFreeChunkFinal
foreign import ccall unsafe "macros.h HS_Mix_LoadWAV"
mixLoadWAV :: CString -> IO (Ptr ChunkStruct)
tryLoadWAV :: FilePath -> IO (Maybe Chunk)
tryLoadWAV :: FilePath -> IO (Maybe Chunk)
tryLoadWAV string :: FilePath
string
= FilePath -> (CString -> IO (Maybe Chunk)) -> IO (Maybe Chunk)
forall a. FilePath -> (CString -> IO a) -> IO a
withCString FilePath
string ((CString -> IO (Maybe Chunk)) -> IO (Maybe Chunk))
-> (CString -> IO (Maybe Chunk)) -> IO (Maybe Chunk)
forall a b. (a -> b) -> a -> b
$ \cString :: CString
cString ->
do Ptr ChunkStruct
chunk <- CString -> IO (Ptr ChunkStruct)
mixLoadWAV CString
cString
if Ptr ChunkStruct
chunk Ptr ChunkStruct -> Ptr ChunkStruct -> Bool
forall a. Eq a => a -> a -> Bool
== Ptr ChunkStruct
forall a. Ptr a
nullPtr
then Maybe Chunk -> IO (Maybe Chunk)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Chunk
forall a. Maybe a
Nothing
else (Chunk -> Maybe Chunk) -> IO Chunk -> IO (Maybe Chunk)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Chunk -> Maybe Chunk
forall a. a -> Maybe a
Just (Ptr ChunkStruct -> IO Chunk
mkFinalizedChunk Ptr ChunkStruct
chunk)
loadWAV :: FilePath -> IO Chunk
loadWAV :: FilePath -> IO Chunk
loadWAV path :: FilePath
path = FilePath -> IO (Maybe Chunk) -> IO Chunk
forall a. FilePath -> IO (Maybe a) -> IO a
unwrapMaybe "Mix_LoadWAV" (FilePath -> IO (Maybe Chunk)
tryLoadWAV FilePath
path)
foreign import ccall unsafe "Mix_VolumeChunk" mixVolumeChunk :: Ptr ChunkStruct -> Int -> IO Int
volumeChunk :: Chunk -> Int -> IO Int
volumeChunk :: Chunk -> Int -> IO Int
volumeChunk chunk :: Chunk
chunk volume :: Int
volume = Chunk -> (Ptr ChunkStruct -> IO Int) -> IO Int
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr Chunk
chunk (\ptr :: Ptr ChunkStruct
ptr -> Ptr ChunkStruct -> Int -> IO Int
mixVolumeChunk Ptr ChunkStruct
ptr Int
volume)