-- | UGen argument labels -- -- These are named the same as their SC counterparts, usually. {-# OPTIONS_HADDOCK show-extensions #-} {-# LANGUAGE NoRebindableSyntax #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE ExistentialQuantification #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE PartialTypeSignatures #-} {-# LANGUAGE TypeFamilies, NoMonoLocalBinds #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE NoIncoherentInstances #-} {-# LANGUAGE NoUndecidableInstances #-} module Vivid.UGens.Args where import Vivid.SC.SynthDef.Types (CalculationRate(..)) import Vivid.SynthDef import Vivid.SynthDef.FromUA -- import Vivid.SynthDef.TypesafeArgs (getSymbolVals) import qualified Data.ByteString.UTF8 as UTF8 (fromString) import qualified Data.Map as Map -- import Data.Monoid -- import GHC.TypeLits a_ :: ToSig s as => s -> UA "a" as a_ = UA . toSig a0_ :: ToSig s as => s -> UA "a0" as a0_ = UA . toSig a1_ :: ToSig s as => s -> UA "a1" as a1_ = UA . toSig a2_ :: ToSig s as => s -> UA "a2" as a2_ = UA . toSig active_ :: ToSig s as => s -> UA "active" as active_ = UA . toSig add_ :: ToSig s as => s -> UA "add" as add_ = UA . toSig ampThreshold_ :: ToSig s as => s -> UA "ampThreshold" as ampThreshold_ = UA . toSig aReal_ :: ToSig s as => s -> UA "aReal" as aReal_ = UA . toSig -- | SC compatibility areal_ :: ToSig s as => s -> UA "aReal" as areal_ = aReal_ aImag_ :: ToSig s as => s -> UA "aImag" as aImag_ = UA . toSig -- | SC compatibility aimag_ :: ToSig s as => s -> UA "aImag" as aimag_ = aImag_ attackSecs_ :: ToSig s as => s -> UA "attackSecs" as attackSecs_ = UA . toSig -- | Alias of 'attackSecs_', for SC compatibility attackTime_ :: ToSig s as => s -> UA "attackSecs" as attackTime_ = attackSecs_ b_ :: ToSig s as => s -> UA "b" as b_ = UA . toSig b1_ :: ToSig s as => s -> UA "b1" as b1_ = UA . toSig b2_ :: ToSig s as => s -> UA "b2" as b2_ = UA . toSig bias_ :: ToSig s as => s -> UA "bias" as bias_ = UA . toSig bins_ :: ToSig s as => s -> UA "bins" as bins_ = UA . toSig bits_ :: ToSig s as => s -> UA "bits" as bits_ = UA . toSig buf_ :: ToSig s as => s -> UA "buf" as buf_ = UA . toSig -- | For SC compatibility -- alias of 'buf_' buffer_ :: ToSig s as => s -> UA "buf" as buffer_ = buf_ bus_ :: ToSig s as => s -> UA "bus" as bus_ = UA . toSig bw_ :: ToSig s as => s -> UA "bw" as bw_ = UA . toSig -- Maybe should actually just be "bw"?: bwFreq_ :: ToSig s as => s -> UA "bwFreq" as bwFreq_ = UA . toSig bwr_ :: ToSig s as => s -> UA "bwr" as bwr_ = UA . toSig c_ :: ToSig s as => s -> UA "c" as c_ = UA . toSig -- | Alias of 'numChans_' chans_ :: ToSig s as => s -> UA "numChans" as chans_ = numChans_ clampSecs_ :: ToSig s as => s -> UA "clampSecs" as clampSecs_ = UA . toSig -- | Alias of 'clampSecs_', for SC compatibility clampTime_ :: ToSig s as => s -> UA "clampSecs" as clampTime_ = clampSecs_ clar_ :: ToSig s as => s -> UA "clar" as clar_ = UA . toSig coef_ :: ToSig s as => s -> UA "coef" as coef_ = UA . toSig control_ :: ToSig s as => s -> UA "control" as control_ = UA . toSig crossFade_ :: ToSig s as => s -> UA "crossFade" as crossFade_ = UA . toSig -- | For SC compatibility -- alias of 'crossFade_' crossfade_ :: ToSig s as => s -> UA "crossFade" as crossfade_ = UA . toSig -- | **This may change in the future** curve_curve :: Int -> UA "curve" as curve_curve = UA . return . Constant . realToFrac {- curve_step = 0 curve_linear = 1 curve_lin = 1 curve_exponential = 2 curve_exp = 2 curve_sine = 3 curve_sin = 3 curve_welch = 4 curve_wel = 4 curve_squared = 6 curve_sqr = 6 curve_cubed = 7 curve_cub = 7 envCurveNumber (Curve_Curve _) = 5 -} damp_ :: ToSig s as => s -> UA "damp" as damp_ = UA . toSig damping_ :: ToSig s as => s -> UA "damping" as damping_ = UA . toSig db_ :: ToSig s as => s -> UA "db" as db_ = UA . toSig decaySecs_ :: ToSig s as => s -> UA "decaySecs" as decaySecs_ = UA . toSig -- | Alias of 'decaySecs_' for SC compatibility decayTime_ :: ToSig s as => s -> UA "decaySecs" as decayTime_ = decaySecs_ -- | Alias of 'decaySecs_' for SC compatibility decaytime_ :: ToSig s as => s -> UA "decaySecs" as decaytime_ = decaySecs_ default_ :: ToSig s as => s -> UA "default" as default_ = UA . toSig -- | Alias of 'delaySecs_' for SC compatibility delay_ :: ToSig s as => s -> UA "delaySecs" as delay_ = delaySecs_ delaySecs_ :: ToSig s as => s -> UA "delaySecs" as delaySecs_ = UA . toSig -- | Alias of 'delaySecs_' for SC compatibility delayTime_ :: ToSig s as => s -> UA "delaySecs" as delayTime_ = delaySecs_ -- | Alias of 'delaySecs_' for SC compatibility delaytime_ :: ToSig s as => s -> UA "delaySecs" as delaytime_ = delaySecs_ density_ :: ToSig s as => s -> UA "density" as density_ = UA . toSig depth_ :: ToSig s as => s -> UA "depth" as depth_ = UA . toSig depthVariation_ :: ToSig s as => s -> UA "depthVariation" as depthVariation_ = UA . toSig div_ :: ToSig s as => s -> UA "div" as div_ = UA . toSig dn_ :: ToSig s as => s -> UA "dn" as dn_ = UA . toSig doneAction_ :: ToSig s as => s -> UA "doneAction" as doneAction_ = UA . toSig downSample_ :: ToSig s as => s -> UA "downSample" as downSample_ = UA . toSig dryLevel_, drylevel_ :: ToSig s as => s -> UA "dryLevel" as dryLevel_ = UA . toSig drylevel_ = dryLevel_ dsthi_ :: ToSig s as => s -> UA "dsthi" as dsthi_ = UA . toSig dstlo_ :: ToSig s as => s -> UA "dstlo" as dstlo_ = UA . toSig -- | Alias of 'duration_' dur_ :: ToSig s as => s -> UA "duration" as dur_ = duration_ duration_ :: ToSig s as => s -> UA "duration" as duration_ = UA . toSig earlyRefLevel_, earlyreflevel_ :: ToSig s as => s -> UA "earlyRefLevel" as earlyRefLevel_ = UA . toSig earlyreflevel_ = earlyRefLevel_ end_ :: ToSig s as => s -> UA "end" as end_ = UA . toSig execFreq_ :: ToSig s as => s -> UA "execFreq" as execFreq_ = UA . toSig -- | Alias of 'exponent_' exp_ :: ToSig s as => s -> UA "exponent" as exp_ = exponent_ exponent_ :: ToSig s as => s -> UA "exponent" as exponent_ = UA . toSig fftSize_ :: ToSig s as => s -> UA "fftSize" as fftSize_ = UA . toSig -- | For SC compatibility -- alias of 'fftSize_' fftsize_ :: ToSig s as => s -> UA "fftSize" as fftsize_ = fftSize_ formFreq_ :: ToSig s as => s -> UA "formFreq" as formFreq_ = UA . toSig frames_ :: ToSig s as => s -> UA "numFrames" as frames_ = numFrames_ frameSize_ :: ToSig s as => s -> UA "frameSize" as frameSize_ = UA . toSig -- | For SC compatibility -- alias of 'frameSize_' framesize_ :: ToSig s as => s -> UA "frameSize" as framesize_ = frameSize_ freeze_ :: ToSig s as => s -> UA "freeze" as freeze_ = UA . toSig freq_ :: ToSig s as => s -> UA "freq" as freq_ = UA . toSig friction_ :: ToSig s as => s -> UA "friction" as friction_ = UA . toSig fundFreq_ :: ToSig s as => s -> UA "fundFreq" as fundFreq_ = UA . toSig g_ :: ToSig s as => s -> UA "g" as g_ = UA . toSig gain_ :: ToSig s as => s -> UA "gain" as gain_ = UA . toSig gate_ :: ToSig s as => s -> UA "gate" as gate_ = UA . toSig hi_ :: ToSig s as => s -> UA "hi" as hi_ = UA . toSig hop_ :: ToSig s as => s -> UA "hop" as hop_ = UA . toSig id_ :: ToSig s as => s -> UA "id" as id_ = UA . toSig in_ :: ToSig s as => s -> UA "in" as in_ = UA . toSig initFreq_ :: ToSig s as => s -> UA "initFreq" as initFreq_ = UA . toSig inputBW_, inputbw_ :: ToSig s as => s -> UA "inputBW" as inputBW_ = UA . toSig inputbw_ = inputBW_ integrate_ :: ToSig s as => s -> UA "integrate" as integrate_ = UA . toSig -- | Interpolation interp_ :: ToSig s as => s -> UA "interp" as interp_ = UA . toSig -- | For SC compatibility -- alias of 'interp_' interpolation_ :: ToSig s as => s -> UA "interp" as interpolation_ = interp_ iphase_ :: ToSig s as => s -> UA "iphase" as iphase_ = UA . toSig irBufNum_ :: ToSig s as => s -> UA "irBufNum" as irBufNum_ = UA . toSig -- | For SC compatibility -- alias of 'irBufSize_' irbufnum_ :: ToSig s as => s -> UA "irBufNum" as irbufnum_ = irBufNum_ kernel_ :: ToSig s as => s -> UA "kernel" as kernel_ = UA . toSig -- | Alias, for SC compatibility lag_ :: ToSig s as => s -> UA "lagSecs" as lag_ = UA . toSig lagSecs_ :: ToSig s as => s -> UA "lagSecs" as lagSecs_ = UA . toSig -- | For SC compatibility: lagTime_ :: ToSig s as => s -> UA "lagSecs" as lagTime_ = lagSecs_ length_ :: ToSig s as => s -> UA "length" as length_ = UA . toSig level_ :: ToSig s as => s -> UA "level" as level_ = UA . toSig lo_ :: ToSig s as => s -> UA "lo" as lo_ = UA . toSig loop_ :: ToSig s as => s -> UA "loop" as loop_ = UA . toSig m_ :: ToSig s as => s -> UA "m" as m_ = UA . toSig max_ :: ToSig s as => s -> UA "max" as max_ = UA . toSig maxBinsPerOctave_ :: ToSig s as => s -> UA "maxBinsPerOctave" as maxBinsPerOctave_ = UA . toSig maxDelaySecs_ :: ToSig s as => s -> UA "maxDelaySecs" as maxDelaySecs_ = UA . toSig -- | Alias of 'maxDelaySecs_' for SC compatibility maxDelayTime_ :: ToSig s as => s -> UA "maxDelaySecs" as maxDelayTime_ = UA . toSig -- | Alias of 'maxDelaySecs_' for SC compatibility maxdelaytime_ :: ToSig s as => s -> UA "maxDelaySecs" as maxdelaytime_ = maxDelayTime_ maxFreq_ :: ToSig s as => s -> UA "maxFreq" as maxFreq_ = UA . toSig maxRoomSize_, maxroomsize_ :: ToSig s as => s -> UA "maxRoomSize" as maxRoomSize_ = UA . toSig maxroomsize_ = maxRoomSize_ -- | Alias of 'max_', for SC compatibility maxVal_ :: ToSig s as => s -> UA "max" as maxVal_ = UA . toSig median_ :: ToSig s as => s -> UA "median" as median_ = UA . toSig min_ :: ToSig s as => s -> UA "min" as min_ = UA . toSig minFreq_ :: ToSig s as => s -> UA "minFreq" as minFreq_ = UA . toSig minmax_ :: ToSig s as => s -> UA "minmax" as minmax_ = UA . toSig -- | Alias of 'min_', for SC compatibility minVal_ :: ToSig s as => s -> UA "min" as minVal_ = UA . toSig mix_ :: ToSig s as => s -> UA "mix" as mix_ = UA . toSig mul_ :: ToSig s as => s -> UA "mul" as mul_ = UA . toSig numChans_ :: ToSig s as => s -> UA "numChans" as numChans_ = UA . toSig numFrames_ :: ToSig s as => s -> UA "numFrames" as numFrames_ = UA . toSig numTeeth_ :: ToSig s as => s -> UA "numTeeth" as numTeeth_ = UA . toSig offset_ :: ToSig s as => s -> UA "offset" as offset_ = UA . toSig onset_ :: ToSig s as => s -> UA "onset" as onset_ = UA . toSig peakLevel_ :: ToSig s as => s -> UA "peakLevel" as peakLevel_ = UA . toSig peakThreshold_ :: ToSig s as => s -> UA "peakThreshold" as peakThreshold_ = UA . toSig phase_ :: ToSig s as => s -> UA "phase" as phase_ = UA . toSig pitchDispersion_ :: ToSig s as => s -> UA "pitchDispersion" as pitchDispersion_ = UA . toSig pos_ :: ToSig s as => s -> UA "pos" as pos_ = UA . toSig post_ :: ToSig s as => s -> UA "post" as post_ = UA . toSig preLevel_ :: ToSig s as => s -> UA "preLevel" as preLevel_ = UA . toSig rate_ :: ToSig s as => s -> UA "rate" as rate_ = UA . toSig rateVariation_ :: ToSig s as => s -> UA "rateVariation" as rateVariation_ = UA . toSig radius_ :: ToSig s as => s -> UA "radius" as radius_ = UA . toSig ratio_ :: ToSig s as => s -> UA "ratio" as ratio_ = UA . toSig recLevel_ :: ToSig s as => s -> UA "recLevel" as recLevel_ = UA . toSig relaxSecs_ :: ToSig s as => s -> UA "relaxSecs" as relaxSecs_ = UA . toSig -- | Alias of 'relaxSecs_' for SC compatibility relaxTime_ :: ToSig s as => s -> UA "relaxSecs" as relaxTime_ = UA . toSig releaseSecs_ :: ToSig s as => s -> UA "releaseSecs" as releaseSecs_ = UA . toSig -- | Alias of 'releaseSecs_', for SC compatibility releaseTime_ :: ToSig s as => s -> UA "releaseSecs" as releaseTime_ = releaseSecs_ repeats_ :: ToSig s as => s -> UA "repeats" as repeats_ = UA . toSig -- | Shorter alias for 'repeats_' reps_ :: ToSig s as => s -> UA "repeats" as reps_ = repeats_ reset_ :: ToSig s as => s -> UA "reset" as reset_ = UA . toSig resetPos_ :: ToSig s as => s -> UA "resetPos" as resetPos_ = UA . toSig revTime_, revtime_ :: ToSig s as => s -> UA "revTime" as revTime_ = UA . toSig -- | Alias, for compatibility revtime_ = revTime_ room_ :: ToSig s as => s -> UA "room" as room_ = UA . toSig roomSize_ :: ToSig s as => s -> UA "roomSize" as roomSize_ = UA . toSig -- | Alias, for compatibility roomsize_ :: ToSig s as => s -> UA "roomSize" as roomsize_ = roomSize_ root_ :: ToSig s as => s -> UA "root" as root_ = UA . toSig rq_ :: ToSig s as => s -> UA "rq" as rq_ = UA . toSig rs_ :: ToSig s as => s -> UA "rs" as rs_ = UA . toSig run_ :: ToSig s as => s -> UA "run" as run_ = UA . toSig sawFreq_ :: ToSig s as => s -> UA "sawFreq" as sawFreq_ = UA . toSig secs_ :: ToSig s as => s -> UA "secs" as secs_ = UA . toSig shift_ :: ToSig s as => s -> UA "shift" as shift_ = UA . toSig slopeAbove_ :: ToSig s as => s -> UA "slopeAbove" as slopeAbove_ = UA . toSig slopeBelow_ :: ToSig s as => s -> UA "slopeBelow" as slopeBelow_ = UA . toSig spread_ :: ToSig s as => s -> UA "spread" as spread_ = UA . toSig spring_ :: ToSig s as => s -> UA "spring" as spring_ = UA . toSig srchi_ :: ToSig s as => s -> UA "srchi" as srchi_ = UA . toSig srclo_ :: ToSig s as => s -> UA "srclo" as srclo_ = UA . toSig startPos_ :: ToSig s as => s -> UA "startPos" as startPos_ = UA . toSig start_ :: ToSig s as => s -> UA "start" as start_ = UA . toSig step_ :: ToSig s as => s -> UA "step" as step_ = UA . toSig stretch_ :: ToSig s as => s -> UA "stretch" as stretch_ = UA . toSig susLevel_ :: ToSig s as => s -> UA "susLevel" as susLevel_ = UA . toSig syncFreq_ :: ToSig s as => s -> UA "syncFreq" as syncFreq_ = UA . toSig tailLevel_, taillevel_ :: ToSig s as => s -> UA "tailLevel" as tailLevel_ = UA . toSig taillevel_ = tailLevel_ threshold_ :: ToSig s as => s -> UA "threshold" as threshold_ = UA . toSig -- | Alias for "threshold_" thresh_ :: ToSig s as => s -> UA "threshold" as thresh_ = threshold_ timeDispersion_ :: ToSig s as => s -> UA "timeDispersion" as timeDispersion_ = UA . toSig trig_ :: ToSig s as => s -> UA "trigger" as trig_ = trigger_ -- | You can use "trig_" instead trigger_ :: ToSig s as => s -> UA "trigger" as trigger_ = UA . toSig trigid_ :: ToSig s as => s -> UA "trigid" as trigid_ = UA . toSig -- | Short alias for 'ugen_' ug_ :: ToSig s as => s -> UA "ugen" as ug_ = UA . toSig ugen_ :: ToSig s as => s -> UA "ugen" as ugen_ = UA . toSig up_ :: ToSig s as => s -> UA "up" as up_ = UA . toSig warp_ :: ToSig s as => s -> UA "warp" as warp_ = UA . toSig width_ :: ToSig s as => s -> UA "width" as width_ = UA . toSig wipe_ :: (ToSig s as) => s -> UA "wipe" as wipe_ = UA . toSig -- | Alias of 'windowSize_' winsize_ :: ToSig s as => s -> UA "windowSize" as winsize_ = windowSize_ windowSize_ :: ToSig s as => s -> UA "windowSize" as windowSize_ = UA . toSig wintype_ :: ToSig s as => s -> UA "windowType" as wintype_ = windowType_ windowType_ :: ToSig s as => s -> UA "windowType" as windowType_ = UA . toSig xi_ :: ToSig s as => s -> UA "xi" as xi_ = UA . (toSig) -- this one gives you: -- (same as above but "args" at the end there) -- Could not deduce (FromUA (UA "phase" args0)) -- (this is the same arg as if you have no type sig) makeMakeUGen :: ( GetSymbolVals (Vs tags) , FromUA optional , FromUA userSupplied , SDBodyArgs optional ~ SDBodyArgs userSupplied , SDBodyArgs optional ~ args ) => (UGen -> SDBody' args x) -> Int -> String -> CalculationRate -> Vs tags -> optional -> (userSupplied -> SDBody' args x) makeMakeUGen addUGenF numOuts sdName calcRate tagList defaultArgs = \userSupplied -> do theArgList <- Map.fromList <$> fromUAWithDefaults (DefaultArgs defaultArgs) (OverwritingArgs userSupplied) let signals = map (\k -> Map.findWithDefault (error $ "that's weird (likely a ugen with a typo in 'Vs'): "++sdName++":"++k) k theArgList) $ getSymbolVals tagList addUGenF $ UGen (UGName_S (UTF8.fromString sdName)) calcRate (signals :: [Signal]) numOuts makeMonoUGen, makeUGen :: ( GetSymbolVals (Vs tags) , FromUA optional , FromUA userSupplied , SDBodyArgs optional ~ SDBodyArgs userSupplied , SDBodyArgs optional ~ args ) => String -> CalculationRate -> Vs tags -> optional -> (userSupplied -> SDBody' args Signal) makeMonoUGen = makeMakeUGen addMonoUGen 1 makeUGen = makeMonoUGen makePolyUGen :: ( GetSymbolVals (Vs tags) , FromUA optional , FromUA userSupplied , SDBodyArgs optional ~ SDBodyArgs userSupplied , SDBodyArgs optional ~ args ) => Int -> String -> CalculationRate -> Vs tags -> optional -> (userSupplied -> SDBody' args [Signal]) makePolyUGen n = makeMakeUGen addPolyUGen n