synthesizer-llvm-0.8: render/Synthesizer/LLVM/Server/Option.hs
module Synthesizer.LLVM.Server.Option (
T(..),
get,
) where
import qualified Synthesizer.LLVM.Server.OptionCommon as Option
import qualified Synthesizer.LLVM.Server.Default as Default
import Synthesizer.LLVM.Server.Common (SampleRate, )
import qualified Data.StorableVector.Lazy as SVL
import qualified Sound.MIDI.Message.Channel as ChannelMsg
import qualified System.Path as Path
import qualified Options.Applicative as OP
import Control.Applicative (pure, (<$>), (<*>), )
import Data.Maybe (fromMaybe, )
import Data.Monoid ((<>), )
import Prelude hiding (Real, )
data T =
Cons {
channel, extraChannel :: ChannelMsg.Channel,
sampleDirectory :: Path.AbsRelDir,
sampleRate :: SampleRate Int,
chunkSize :: SVL.ChunkSize
-- volume :: Float
}
deriving (Show)
options :: OP.Parser T
options =
pure Cons
<*> Option.channel
<*> Option.extraChannel
<*> Option.sampleDirectory
<*> fmap (fromMaybe Default.sampleRate) Option.sampleRate
<*> Option.blockSize (SVL.chunkSize (128*1024))
{-
<*>
(OP.option (parseNumber "volume" (const True) "any")
(OP.short 'v' <>
OP.long "volume" <>
OP.metavar "FACTOR" <>
OP.help "global volume")
-}
parser :: OP.Parser (T, String, Maybe String)
parser =
pure (,,)
<*> options
<*> OP.strArgument (OP.metavar "infile.mid")
<*> OP.argument (Just <$> OP.str)
(OP.metavar "outfile.wav" <> OP.value Nothing)
get :: IO (T, String, Maybe String)
get = Option.get parser "Render MIDI to audio files using LLVM and SoX"