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!"
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