module Csound.Typed.GlobalState.Options (
Options(..),
defGain, defSampleRate, defBlockSize, defTabFi,
TabFi(..), fineFi, coarseFi,
idWavs, idMp3s, idDoubles, idSines, idSines3, idSines2,
idPartials, idSines4, idBuzzes, idConsts, idLins, idCubes,
idExps, idSplines, idStartEnds, idPolys, idChebs1, idChebs2, idBessels, idWins
) where
import Control.Applicative
import Data.Monoid
import Data.Default
import qualified Data.IntMap as IM
import Csound.Dynamic hiding (csdFlags)
data Options = Options
{ csdFlags :: Flags
, csdSampleRate :: Maybe Int
, csdBlockSize :: Maybe Int
, csdGain :: Maybe Double
, csdTabFi :: Maybe TabFi
}
instance Default Options where
def = Options def def def def def
instance Monoid Options where
mempty = def
mappend a b = Options
{ csdFlags = mappend (csdFlags a) (csdFlags b)
, csdSampleRate = csdSampleRate a <|> csdSampleRate b
, csdBlockSize = csdBlockSize a <|> csdBlockSize b
, csdGain = csdGain a <|> csdGain b
, csdTabFi = csdTabFi a <|> csdTabFi b }
defGain :: Options -> Double
defGain = maybe 0.5 id . csdGain
defSampleRate :: Options -> Int
defSampleRate = maybe 44100 id . csdSampleRate
defBlockSize :: Options -> Int
defBlockSize = maybe 64 id . csdBlockSize
defTabFi :: Options -> TabFi
defTabFi = maybe def id . csdTabFi
data TabFi = TabFi
{ tabFiBase :: Int
, tabFiGens :: IM.IntMap Int }
instance Default TabFi where
def = fineFi 13 [(idLins, 11), (idExps, 11), (idConsts, 9), (idSplines, 11), (idStartEnds, 12)]
fineFi :: Int -> [(Int, Int)] -> TabFi
fineFi n xs = TabFi n (IM.fromList xs)
coarseFi :: Int -> TabFi
coarseFi n = TabFi n IM.empty
idWavs, idMp3s, idDoubles, idSines, idSines3, idSines2,
idPartials, idSines4, idBuzzes, idConsts, idLins, idCubes,
idExps, idSplines, idStartEnds, idPolys, idChebs1, idChebs2, idBessels, idWins :: Int
idWavs = 1
idDoubles = 2
idSines = 10
idSines3 = 9
idSines2 = 9
idPartials = 9
idSines4 = 19
idBuzzes = 11
idConsts = 17
idLins = 7
idCubes = 6
idExps = 5
idStartEnds = 16
idSplines = 8
idPolys = 3
idChebs1 = 13
idChebs2 = 14
idBessels = 12
idWins = 20
idMp3s = 49