module Csound.Options( Options(..), -- * Shortcuts setRates, setBufs, setGain, setJack, setOutput, setInput, setDac, setAdc, setDacBy, setAdcBy, setThru, -- * Flags -- | Csound's command line flags. See original documentation for -- detailed overview: Flags(..), -- * Audio file output AudioFileOutput(..), FormatHeader(..), FormatSamples(..), FormatType(..), Dither(..), IdTags(..), -- * Realtime Audio Input/Output Rtaudio(..), PulseAudio(..), -- * MIDI File Input/Ouput MidiIO(..), -- * MIDI Realtime Input/Ouput MidiRT(..), Rtmidi(..), -- * Display Displays(..), DisplayMode(..), -- * Performance Configuration and Control Config(..) ) where import Data.Monoid import Data.Default import Csound.Typed -- | Sets sample rate and block size -- -- > setRates sampleRate blockSize setRates :: Int -> Int -> Options setRates sampleRate blockSize = def { csdSampleRate = Just sampleRate , csdBlockSize = Just blockSize } -- | Sets hardware and software buffers. -- -- > setBufs hardwareBuf ioBuf 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