module Csound.Options(
Options(..),
setDur,
setRates, setBufs, setGain,
setJack, setJackConnect, setAlsa, setCoreAudio, setMme,
setOutput, setInput,
setDac, setAdc, setDacBy, setAdcBy, setThru,
setSilent, setMidiDevice, setMa,
setMessageLevel, noMessages, setTrace,
setCabbage,
setJacko,
Flags(..),
AudioFileOutput(..),
FormatHeader(..), FormatSamples(..), FormatType(..),
Dither(..), IdTags(..),
Rtaudio(..), PulseAudio(..),
MidiIO(..),
MidiRT(..), Rtmidi(..),
Displays(..), DisplayMode(..),
Config(..)
) where
import Data.Default
import Data.Text (Text)
import Data.Text qualified as Text
import Csound.Typed
setRates :: Int -> Int -> Options
setRates :: Int -> Int -> Options
setRates Int
sampleRate Int
blockSize = Options
forall a. Default a => a
def
{ csdSampleRate = Just sampleRate
, csdBlockSize = Just blockSize }
setBufs :: Int -> Int -> Options
setBufs :: Int -> Int -> Options
setBufs Int
hw Int
io = Options
forall a. Default a => a
def { csdFlags = def { config = def { hwBuf = Just hw, ioBuf = Just io } } }
setGain :: Double -> Options
setGain :: Double -> Options
setGain Double
d = Options
forall a. Default a => a
def { csdGain = Just d' }
where d' :: Double
d' = Double -> Double -> Double
forall a. Ord a => a -> a -> a
max Double
0 (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double -> Double -> Double
forall a. Ord a => a -> a -> a
min Double
1 (Double -> Double) -> Double -> Double
forall a b. (a -> b) -> a -> b
$ Double
d
setJack :: Text -> Options
setJack :: Text -> Options
setJack Text
name = Options
forall a. Default a => a
def { csdFlags = def { rtaudio = Just $ Jack name "input" "output" } }
setJacko :: Jacko -> Options
setJacko :: Jacko -> Options
setJacko Jacko
jackoSpec = Options
forall a. Default a => a
def { csdJacko = Just jackoSpec }
setCoreAudio :: Options
setCoreAudio :: Options
setCoreAudio = Options
forall a. Default a => a
def { csdFlags = def { rtaudio = Just $ CoreAudio } }
setAlsa :: Options
setAlsa :: Options
setAlsa = Options
forall a. Default a => a
def { csdFlags = def { rtaudio = Just $ Alsa } }
setMme :: Options
setMme :: Options
setMme = Options
forall a. Default a => a
def { csdFlags = def { rtaudio = Just $ Mme } }
setDac :: Options
setDac :: Options
setDac = Text -> Options
setDacBy Text
""
setAdc :: Options
setAdc :: Options
setAdc = Text -> Options
setAdcBy Text
""
setInput :: Text -> Options
setInput :: Text -> Options
setInput Text
a = Options
forall a. Default a => a
def { csdFlags = def { audioFileOutput = def { input = Just a } } }
setOutput :: Text -> Options
setOutput :: Text -> Options
setOutput Text
a = Options
forall a. Default a => a
def { csdFlags = def { audioFileOutput = def { output = Just a } } }
setDacBy :: Text -> Options
setDacBy :: Text -> Options
setDacBy Text
port = Text -> Options
setOutput Text
name
where name :: Text
name
| Text -> Bool
Text.null Text
port = Text
"dac"
| Bool
otherwise = Text
"dac:" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
port
setAdcBy :: Text -> Options
setAdcBy :: Text -> Options
setAdcBy Text
port = Text -> Options
setInput Text
name
where name :: Text
name
| Text -> Bool
Text.null Text
port = Text
"adc"
| Bool
otherwise = Text
"adc:" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
port
setThru :: Options
setThru :: Options
setThru = Options -> Options -> Options
forall a. Monoid a => a -> a -> a
mappend Options
setDac Options
setAdc
setSilent :: Options
setSilent :: Options
setSilent = (Options
forall a. Default a => a
def { csdFlags = def { audioFileOutput = def { nosound = True } } })
setMidiDevice :: Text -> Options
setMidiDevice :: Text -> Options
setMidiDevice Text
a = Options
forall a. Default a => a
def { csdFlags = def { midiRT = def { midiDevice = Just a } } }
setMa :: Options
setMa :: Options
setMa = Text -> Options
setMidiDevice Text
"a"
setMessageLevel :: Int -> Options
setMessageLevel :: Int -> Options
setMessageLevel Int
n = Options
forall a. Default a => a
def { csdFlags = def { displays = def { messageLevel = Just n }}}
noMessages :: Options
noMessages :: Options
noMessages = Int -> Options
setMessageLevel Int
0
setTrace :: Options
setTrace :: Options
setTrace = Options
forall a. Default a => a
def { csdTrace = Just True }
setCabbage :: Options
setCabbage :: Options
setCabbage = [Options] -> Options
forall a. Monoid a => [a] -> a
mconcat [Int -> Int -> Options
setRates Int
48000 Int
64, Options
setNoRtMidi, Text -> Options
setMidiDevice Text
"0"]
where setNoRtMidi :: Options
setNoRtMidi = Options
forall a. Default a => a
def { csdFlags = def { rtmidi = Just NoRtmidi, audioFileOutput = def { nosound = True } }}
setJackConnect :: [(Text, Text)] -> Options
setJackConnect :: [(Text, Text)] -> Options
setJackConnect [(Text, Text)]
connections = Options
forall a. Default a => a
def { csdJackConnect = Just connections }