hsc3-0.21: Sound/Sc3/Ugen/Bindings/Hw/External/Sc3_Plugins.hs
-- | Bindings to unit generators in sc3-plugins.
module Sound.Sc3.Ugen.Bindings.Hw.External.Sc3_Plugins where
import Sound.Sc3.Common.Rate
import qualified Sound.Sc3.Ugen.Bindings.Db.External as X
import qualified Sound.Sc3.Ugen.Bindings.Hw.Construct as C
import Sound.Sc3.Ugen.Types
import qualified Sound.Sc3.Ugen.Util as Util
-- | Convert frequency value to value appropriate for Ay tone inputs.
ayFreqToTone :: Fractional a => a -> a
ayFreqToTone f = 110300 / (f - 0.5)
-- | Ladspa plugins inside SuperCollider.
ladspa :: Int -> Rate -> Ugen -> [Ugen] -> Ugen
ladspa nc rt k z = C.mkOsc rt "LADSPA" (constant nc : k : z) nc
-- | Lookup index of Stk instrument by name.
stkAt :: (Num t, Enum t) => String -> t
stkAt nm =
let nm_seq =
[ "Clarinet"
, "BlowHole"
, "Saxofony"
, "Flute"
, "Brass"
, "BlowBotl"
, "Bowed"
, "Plucked"
, "StifKarp"
, "Sitar"
, "Mandolin"
, "Rhodey"
, "Wurley"
, "TubeBell"
, "HevyMetl"
, "PercFlut"
, "BeeThree"
, "FMVoices"
, "VoicForm"
, "Moog"
, "Simple"
, "Drummer"
, "BandedWG"
, "Shakers"
, "ModalBar"
, "Mesh2D"
, "Resonate"
, "Whistle"
]
tbl = zip nm_seq [0 ..]
in case lookup nm tbl of
Just ix -> ix
Nothing -> error "stkAt: unknown instr"
-- | freq=220, gate=1, onamp=1, offamp=1, bowpressure=64, bowposition=64, vibfreq=64, vibgain=64, loudness=64
stkBowedI :: Rate -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen -> Ugen
stkBowedI rt freq gate_ onamp offamp bowpressure bowposition vibfreq vibgain loudness =
let args = mce [2, bowpressure, 4, bowposition, 11, vibfreq, 1, vibgain, 128, loudness]
in X.stkInst rt (stkAt "Bowed") freq gate_ onamp offamp args
{- | Wrapping Synthesis toolkit.
StkGlobals [ar] showWarnings=0.0 printErrors=0.0 rawfilepath=0.0
-}
stkGlobals :: Rate -> Ugen -> Ugen -> Ugen -> Ugen
stkGlobals rate showWarnings printErrors rawfilepath =
mkUgen Nothing [ar] (Left rate) "StkGlobals" ([showWarnings, printErrors] ++ Util.unpackLabel False rawfilepath) Nothing 1 (Special 0) NoId