sdl2-mixer-0.1: examples/Jumbled.hs
module Main where
import Control.Monad (when)
import Data.Default.Class (def)
import System.Environment (getArgs)
import System.Exit (exitFailure)
import qualified SDL
import qualified SDL.Mixer as Mix
main :: IO ()
main = do
SDL.initialize [SDL.InitAudio]
Mix.withAudio def 256 $ do
putStr "Available chunk decoders: "
print =<< Mix.chunkDecoders
args <- getArgs
case args of
[] -> do
putStrLn "Usage: cabal run sdl2-mixer-jumbled FILE..."
exitFailure
xs -> runExample xs
SDL.quit
-- | Play each of the sounds at the same time!
runExample :: [FilePath] -> IO ()
runExample paths = do
Mix.setChannels $ length paths
Mix.whenChannelFinished $ \c -> putStrLn $ show c ++ " finished playing!"
chunks <- mapM Mix.load paths
mapM_ Mix.play chunks
delayWhile $ Mix.playing Mix.AllChannels
Mix.setChannels 0
mapM_ Mix.free chunks
delayWhile :: IO Bool -> IO ()
delayWhile check = loop'
where
loop' = do
still <- check
when still $ SDL.delay 300 >> delayWhile check