module Graphics.UI.SDL.Mixer.Channels
( allocateChannels
, volume
, tryPlayChannel
, playChannel
, tryFadeInChannel
, fadeInChannel
, tryFadeInChannelTimed
, fadeInChannelTimed
, pause
, resume
, haltChannel
, expireChannel
, fadeOutChannel
, isChannelPlaying
, numChannelsPlaying
, isChannelPaused
, numChannelsPaused
, fadingChannel
, getChunk
) where
import Foreign(Ptr, newForeignPtr_, toBool, withForeignPtr)
import Graphics.UI.SDL.Mixer.Types(Fading, Channel, Chunk, ChunkStruct)
import Graphics.UI.SDL.General(unwrapInt)
foreign import ccall unsafe "Mix_AllocateChannels" allocateChannels :: Int -> IO Int
foreign import ccall unsafe "Mix_Volume" volume :: Int -> Int -> IO Int
tryPlayChannel :: Channel -> Chunk -> Int -> IO Int
tryPlayChannel channel chunk loops
= tryPlayChannelTimed channel chunk loops (1)
playChannel :: Channel -> Chunk -> Int -> IO Int
playChannel channel chunk loops
= playChannelTimed channel chunk loops (1)
foreign import ccall unsafe "Mix_PlayChannelTimed" mixPlayChannelTimed
:: Int -> Ptr ChunkStruct -> Int -> Int -> IO Int
tryPlayChannelTimed :: Channel -> Chunk -> Int -> Int -> IO Int
tryPlayChannelTimed channel chunk loops ticks
= withForeignPtr chunk $ \chunkPtr ->
mixPlayChannelTimed channel chunkPtr loops ticks
playChannelTimed :: Channel -> Chunk -> Int -> Int -> IO Int
playChannelTimed channel chunk loops ticks
= unwrapInt (/=(1)) "Mix_PlayChannelTimed"
(tryPlayChannelTimed channel chunk loops ticks)
tryFadeInChannel :: Channel -> Chunk -> Int -> Int -> IO Int
tryFadeInChannel channel chunk loops ms
= tryFadeInChannelTimed channel chunk loops ms (1)
fadeInChannel :: Channel -> Chunk -> Int -> Int -> IO Int
fadeInChannel channel chunk loops ms
= fadeInChannelTimed channel chunk loops ms (1)
foreign import ccall unsafe "Mix_FadeInChannelTimed" mixFadeInChannelTimed
:: Int -> Ptr ChunkStruct -> Int -> Int -> Int -> IO Int
tryFadeInChannelTimed :: Channel -> Chunk -> Int -> Int -> Int -> IO Int
tryFadeInChannelTimed channel chunk loops ms ticks
= withForeignPtr chunk $ \chunkPtr ->
mixFadeInChannelTimed channel chunkPtr loops ms ticks
fadeInChannelTimed :: Channel -> Chunk -> Int -> Int -> Int -> IO Int
fadeInChannelTimed channel chunk loops ms ticks
= unwrapInt (/=(1)) "Mix_FadeInChannelTimed"
(tryFadeInChannelTimed channel chunk loops ms ticks)
foreign import ccall unsafe "Mix_Pause" pause :: Channel -> IO ()
foreign import ccall unsafe "Mix_Resume" resume :: Channel -> IO ()
foreign import ccall unsafe "Mix_HaltChannel" mixHaltChannel :: Int -> IO Int
haltChannel :: Channel -> IO ()
haltChannel channel = mixHaltChannel channel >> return ()
foreign import ccall unsafe "Mix_ExpireChannel" expireChannel :: Channel -> Int -> IO Int
foreign import ccall unsafe "Mix_FadeOutChannel" fadeOutChannel :: Channel -> Int -> IO Int
foreign import ccall unsafe "Mix_Playing" mixPlaying :: Int -> IO Int
isChannelPlaying :: Channel -> IO Bool
isChannelPlaying = fmap toBool . mixPlaying
numChannelsPlaying :: IO Int
numChannelsPlaying = mixPlaying (1)
foreign import ccall unsafe "Mix_Paused" mixPaused :: Int -> IO Int
isChannelPaused :: Channel -> IO Bool
isChannelPaused = fmap toBool . mixPaused
numChannelsPaused :: IO Int
numChannelsPaused = mixPaused (1)
foreign import ccall unsafe "Mix_FadingChannel" mixFadingChannel :: Int -> IO Int
fadingChannel :: Channel -> IO Fading
fadingChannel = fmap toEnum . mixFadingChannel
foreign import ccall unsafe "Mix_GetChunk" mixGetChunk :: Int -> IO (Ptr ChunkStruct)
getChunk :: Channel -> IO Chunk
getChunk ch = newForeignPtr_ =<< mixGetChunk ch