Refactored world runner.
[hollow-plutonium.git] / Audio.hs
blob8fd9930939b9cc81874002d42d84a77d3f8cdb69
1 module Audio where
3 import Prelude hiding (lookup)
4 import Graphics.UI.SDL.Mixer
5 import Data.IntMap
6 import Control.Monad
9 data Audio = Audio {
10 sounds :: IntMap Chunk
13 maxChan = 32
15 startAudio :: IO Audio
16 startAudio = do
17 openAudio defaultFrequency AudioS16LSB 2 2048
18 allocateChannels maxChan
19 --load sound files
20 --setup music streams
21 return Audio { sounds = empty }
23 endAudio :: IO ()
24 endAudio = do
25 closeAudio
27 whenJust :: (Monad m) => Maybe a -> (a -> m b) -> m ()
28 whenJust Nothing _ = return ()
29 whenJust (Just x) f = f x >> return ()
31 playSound :: Int -> Audio -> IO ()
32 playSound id audio = do
33 let chunk = lookup id (sounds audio)
34 whenJust chunk (\x -> tryPlayChannel (-1) x 0)
35 return ()
37 fadeAll :: Audio -> IO ()
38 fadeAll audio = do
39 fadeOutChannel (-1) 200
40 return ()