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,
idPadsynth, idTanh, idExp, idSone, idFarey, idWave
) where
import Control.Applicative
import Data.Default
import qualified Data.IntMap as IM
import qualified Data.Map as M
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.8 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
, tabNamedFiGens :: M.Map String Int }
instance Default TabFi where
def = fineFi 13
[(idLins, 11), (idExps, 11), (idConsts, 9), (idSplines, 11), (idStartEnds, 12)]
[(idPadsynth, 18), (idSone, 14), (idTanh, 13), (idExp, 13)]
fineFi :: Int -> [(Int, Int)] -> [(String, Int)] -> TabFi
fineFi n xs ys = TabFi n (IM.fromList xs) (M.fromList ys)
coarseFi :: Int -> TabFi
coarseFi n = TabFi n IM.empty M.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
idPadsynth, idTanh, idExp, idSone, idFarey, idWave :: String
idPadsynth = "padsynth"
idTanh = "tanh"
idExp = "exp"
idSone = "sone"
idFarey = "farey"
idWave = "wave"