module Csound.Options(
Options(..),
setDur,
setRates, setBufs, setGain, setJack,
setOutput, setInput,
setDac, setAdc, setDacBy, setAdcBy, setThru,
setSilent,
Flags(..),
AudioFileOutput(..),
FormatHeader(..), FormatSamples(..), FormatType(..),
Dither(..), IdTags(..),
Rtaudio(..), PulseAudio(..),
MidiIO(..),
MidiRT(..), Rtmidi(..),
Displays(..), DisplayMode(..),
Config(..)
) where
import Data.Monoid
import Data.Default
import Csound.Typed
setRates :: Int -> Int -> Options
setRates sampleRate blockSize = def
{ csdSampleRate = Just sampleRate
, csdBlockSize = Just blockSize }
setBufs :: Int -> Int -> Options
setBufs hw io = def { csdFlags = def { config = def { hwBuf = Just hw, ioBuf = Just io } } }
setGain :: Double -> Options
setGain d = def { csdGain = Just d' }
where d' = max 0 $ min 1 $ d
setJack :: String -> Options
setJack name = def { csdFlags = def { rtaudio = Just $ Jack name "input" "output" } }
setDac :: Options
setDac = setDacBy ""
setAdc :: Options
setAdc = setAdcBy ""
setInput :: String -> Options
setInput a = def { csdFlags = def { audioFileOutput = def { input = Just a } } }
setOutput :: String -> Options
setOutput a = def { csdFlags = def { audioFileOutput = def { output = Just a } } }
setDacBy :: String -> Options
setDacBy port = setOutput name
where name
| null port = "dac"
| otherwise = "dac:" ++ port
setAdcBy :: String -> Options
setAdcBy port = setInput name
where name
| null port = "adc"
| otherwise = "adc:" ++ port
setThru :: Options
setThru = mappend setDac setAdc
setSilent :: Options
setSilent = (def { csdFlags = def { audioFileOutput = def { nosound = True } } })