------------------------------------------------------------------------------ -- ConductiveDefaults.hs -- created: Sun Sep 16 22:15:39 JST 2012 ------------------------------------------------------------------------------ -- This module contains useful defaults for getting started with Conductive. module Sound.Conductive.ConductiveDefaults where import Control.Concurrent.STM import Data.Map import Sound.Conductive.ConductiveBaseData import Sound.Conductive.MusicalEnvironment import Sound.Conductive.MusicalTime import Sound.Conductive.MutableMap import Sound.Conductive.Player defaultPlayerStore :: IO (TVar (Map String Player)) defaultPlayerStore = newPlayerStore ("default",("default","defaultIOI","defaultAction",0)) defaultTempoClock :: IO TempoClock defaultTempoClock = do s <- currentTime let defaultTempo = TempoChange { newTempo = 120 , beatOfTempoChange = 0 , timeOfTempoChange = s } let defaultTS = TimeSignature { startingMeasure = 0 , startingBeat = 0 , timeSignature = 4 } return $ TempoClock { startTime = s , tempoChanges = [defaultTempo] , timeSignatureChanges = [defaultTS] } defaultTempoClockStore :: IO (TVar (Map [Char] TempoClock)) defaultTempoClockStore = do t <- defaultTempoClock newMMap [("default",t)] defaultActionStore :: IO (TVar (Map [Char] (t -> t1 -> t2 -> t3 -> IO ()))) defaultActionStore = newMMap [("defaultAction", (\x y z zz -> putStrLn message))] where message = "The default action is to print this message: yeah!" -- defaultIOI e p = iOIFromList e p "default" defaultIOIStore :: IO (TVar (Map [Char] a)) defaultIOIStore = newMMap [("defaultIOI", undefined)] defaultInterruptStore :: IO (TVar (Map [Char] [IO ()])) defaultInterruptStore = newMMap [("defaultInterrupt",[return()::IO()])] defaultMusicalEnvironment :: IO MusicalEnvironment defaultMusicalEnvironment = do tcs <- defaultTempoClockStore ps <- defaultPlayerStore iois <- defaultIOIStore acs <- defaultActionStore ints <- defaultInterruptStore let me = MusicalEnvironment { environmentName = "default MusicalEnvironment" , playerStore = ps , tempoClockStore = tcs , iOIStore = iois , actionStore = acs , interruptStore = ints } return me