hsc3-0.21: Sound/Sc3/Ugen/Bindings/Hw/Construct.hs
-- | For hand-writing Ugens.
module Sound.Sc3.Ugen.Bindings.Hw.Construct where
import Sound.Sc3.Common.Rate
import Sound.Sc3.Ugen.Types
-- | Oscillator constructor with constrained set of operating 'Rate's.
mk_osc :: [Rate] -> UgenId -> Rate -> String -> [Ugen] -> Int -> Ugen
mk_osc rs z r c i o =
if r `elem` rs
then mkUgen Nothing rs (Left r) c i Nothing o (Special 0) z
else error ("mk_osc: rate restricted: " ++ show (r, rs, c))
-- | Oscillator constructor with 'all_rates'.
mkOsc :: Rate -> String -> [Ugen] -> Int -> Ugen
mkOsc = mk_osc all_rates no_id
-- | Oscillator constructor, rate restricted variant.
mkOscR :: [Rate] -> Rate -> String -> [Ugen] -> Int -> Ugen
mkOscR rs = mk_osc rs no_id
-- | Rate restricted oscillator constructor, setting identifier.
mkOscIdR :: [Rate] -> UgenId -> Rate -> String -> [Ugen] -> Int -> Ugen
mkOscIdR = mk_osc
-- | Oscillator constructor, setting identifier.
mkOscId :: UgenId -> Rate -> String -> [Ugen] -> Int -> Ugen
mkOscId = mk_osc all_rates
-- | Provided 'UgenId' variant of 'mkOscMCE'.
mk_osc_mce :: UgenId -> Rate -> String -> [Ugen] -> Ugen -> Int -> Ugen
mk_osc_mce z r c i j =
let i' = i ++ mceChannels j
in mk_osc all_rates z r c i'
-- | Variant oscillator constructor with MCE collapsing input.
mkOscMCE :: Rate -> String -> [Ugen] -> Ugen -> Int -> Ugen
mkOscMCE = mk_osc_mce no_id
-- | Variant oscillator constructor with MCE collapsing input.
mkOscMCEId :: UgenId -> Rate -> String -> [Ugen] -> Ugen -> Int -> Ugen
mkOscMCEId = mk_osc_mce
-- | Rate constrained filter 'Ugen' constructor.
mk_filter :: [Rate] -> [Int] -> UgenId -> String -> [Ugen] -> Int -> Ugen
mk_filter rs ix z c i o = mkUgen Nothing rs (Right ix) c i Nothing o (Special 0) z
-- | Filter Ugen constructor.
mkFilterIdR :: [Rate] -> UgenId -> String -> [Ugen] -> Int -> Ugen
mkFilterIdR rs z nm i = mk_filter rs [0 .. length i - 1] z nm i
-- | Filter Ugen constructor.
mkFilterR :: [Rate] -> String -> [Ugen] -> Int -> Ugen
mkFilterR rs = mkFilterIdR rs no_id
-- | Filter 'Ugen' constructor.
mkFilter :: String -> [Ugen] -> Int -> Ugen
mkFilter = mkFilterR all_rates
-- | Filter Ugen constructor.
mkFilterId :: UgenId -> String -> [Ugen] -> Int -> Ugen
mkFilterId = mkFilterIdR all_rates
-- | Provided 'UgenId' filter with 'mce' input.
mk_filter_mce :: [Rate] -> UgenId -> String -> [Ugen] -> Ugen -> Int -> Ugen
mk_filter_mce rs z c i j = mkFilterIdR rs z c (i ++ mceChannels j)
-- | Variant filter constructor with MCE collapsing input.
mkFilterMCER :: [Rate] -> String -> [Ugen] -> Ugen -> Int -> Ugen
mkFilterMCER rs = mk_filter_mce rs no_id
-- | Variant filter constructor with MCE collapsing input.
mkFilterMCE :: String -> [Ugen] -> Ugen -> Int -> Ugen
mkFilterMCE = mk_filter_mce all_rates no_id
-- | Variant filter constructor with MCE collapsing input.
mkFilterMCEId :: UgenId -> String -> [Ugen] -> Ugen -> Int -> Ugen
mkFilterMCEId = mk_filter_mce all_rates
-- | Information unit generators are very specialized.
mkInfo :: String -> Ugen
mkInfo name = mkOsc InitialisationRate name [] 1