sc3-rdu 0.14 → 0.15
raw patch · 5 files changed
+131/−69 lines, 5 filesdep ~hsc3dep ~hsc3-db
Dependency ranges changed: hsc3, hsc3-db
Files
- README +14/−2
- hs/Sound/SC3/UGen/External/RDU.hs +111/−20
- hs/Sound/SC3/UGen/External/RDU/ID.hs +0/−19
- hs/Sound/SC3/UGen/External/RDU/Monad.hs +0/−20
- sc3-rdu.cabal +6/−8
README view
@@ -3,9 +3,21 @@ [supercollider3][sc3] unit generators -- [rdl](?t=sc3-rdu&l=hs/Help/rdl.help.lhs) - dsp dynamic library host+- [DustR](?t=sc3-rdu&e=md/sc3-rdu.md#dustr)+- [PV_Split](?t=sc3-rdu&e=md/sc3-rdu.md#pv_split)+- [*RandN](?t=sc3-rdu&e=md/sc3-rdu.md#randn)+- [RDelayMap](?t=sc3-rdu&e=md/sc3-rdu.md#rdelaymap)+- [RDelaySet*](?t=sc3-rdu&e=md/sc3-rdu.md#rdelayset)+- [RDL](?t=sc3-rdu&e=md/sc3-rdu.md#rdl)+- [RFreezer](?t=sc3-rdu&e=md/sc3-rdu.md#rfreezer)+- [RLoopSet](?t=sc3-rdu&e=md/sc3-rdu.md#rloopset)+- [RPlayTrace](?t=sc3-rdu&e=md/sc3-rdu.md#rplaytrace)+- [RShufflerB](?t=sc3-rdu&e=md/sc3-rdu.md#rshufflerb)+- [RShufflerL](?t=sc3-rdu&e=md/sc3-rdu.md#rshufflerl)+- [RTraceRd](?t=sc3-rdu&e=md/sc3-rdu.md#rtracerd)+- [TScramble](?t=sc3-rdu&e=md/sc3-rdu.md#tscramble) -© [rohan drape][rd], 1998-2012, [gpl][gpl].+© [rohan drape][rd], 1998-2014, [gpl][gpl]. [sc3]: http://audiosynth.com/ [rd]: http://rd.slavepianos.org/
hs/Sound/SC3/UGen/External/RDU.hs view
@@ -1,36 +1,74 @@ -- | RDU UGen definitions. module Sound.SC3.UGen.External.RDU where -import Sound.SC3.UGen.DB.Record-import Sound.SC3.UGen.Rate-import Sound.SC3.UGen.Type-import Sound.SC3.UGen.UGen+import Sound.SC3.UGen {- hsc3 -}+import Sound.SC3.UGen.Bindings.DB {- hsc3 -}+import Sound.SC3.UGen.Bindings.HW.Construct {- hsc3 -}+import Sound.SC3.UGen.DB.Record {- hsc3-db -} std_I :: Int -> String -> Double -> I-std_I ix nm df = I (ix,ix) nm df Nothing+std_I _ nm df = I nm df -osc_U :: String -> [Rate] -> Rate -> [I] -> Int -> String -> U-osc_U nm rr r i nc dsc = U nm rr r Nothing i Nothing (Left nc) dsc+-- | Input meta-data, @(min,max,warp,step,units)@.+type I_Meta = (Double,Double,String,Double,String) +-- | In cases where inputs have clear meta-data this should be stored+-- at hsc3-db, but it isn't.+std_I' :: Int -> String -> Double -> I_Meta -> I+std_I' ix nm df _ = std_I ix nm df++osc_U :: String -> [Rate] -> Rate -> [I] -> Int -> String -> Bool -> U+osc_U nm rr r i nc dsc nd = (read_meta (nm,rr,r,i,nc,dsc)) {ugen_nondet = nd}+ dustR_dsc :: U dustR_dsc = let i = [std_I 0 "lo" 0.0001 ,std_I 1 "hi" 1.0]- in osc_U "DustR" [AR] AR i 1 "Range variant of Dust"+ in osc_U "DustR" [AR] AR i 1 "Range variant of Dust" True +u_nc_input :: U -> U+u_nc_input u = u {ugen_outputs = Nothing,ugen_nc_input = True}+ expRandN_dsc :: U expRandN_dsc = let i = [std_I 0 "lo" 0.0001 ,std_I 1 "hi" 1.0] dsc = "Multi-channel variant of Rand"- in U "ExpRandN" [IR] IR Nothing i Nothing (Right 0) dsc+ in u_nc_input (osc_U "ExpRandN" [IR] IR i (-1) dsc True) +-- | Copies spectral frame (ie. PV_Copy with two outputs).+pv_Split :: UGen -> UGen -> UGen+pv_Split ba bb = mkOsc KR "PV_Split" [ba,bb] 2++-- | Variant that unpacks the output /mce/ node.+pv_Split' :: UGen -> UGen -> (UGen,UGen)+pv_Split' a b =+ case mceChannels (pv_Split a b) of+ [p,q] -> (p,q)+ _ -> error "pv_split"++-- | A 'pv_Split' variant, like 'ffta', that allocates a 'localBuf' by+-- tracing the input graph to locate the parent @FFT@ or @PV_Split@+-- node.+pv_Splita :: ID i => i -> UGen -> UGen+pv_Splita z u =+ case pv_track_nframes u of+ Left err -> error err+ Right nf -> let b = localBuf z nf 1 in pv_Split u b++-- | Variant that unpacks the output /mce/ node.+pv_splita :: ID i => i -> UGen -> (UGen,UGen)+pv_splita z u =+ case mceChannels (pv_Splita z u) of+ [p,q] -> (p,q)+ _ -> error "pv_splita"+ randN_dsc :: U randN_dsc = let i = [std_I 0 "lo" 0.0001 ,std_I 1 "hi" 1.0] dsc = "Multi-channel variant of Rand"- in U "RandN" [IR] IR Nothing i Nothing (Right 0) dsc+ in u_nc_input (osc_U "RandN" [IR] IR i (-1) dsc True) rDelayMap_dsc :: U rDelayMap_dsc =@@ -38,7 +76,7 @@ ,std_I 1 "input" 0 ,std_I 2 "dynamic" 0 ,std_I 3 "mapArray" 0]- in osc_U "RDelayMap" [AR] AR i 1 "Network of delay line maps"+ in osc_U "RDelayMap" [AR] AR i 1 "Network of delay line maps" False -- | Network of delay line operations. rDelayMap :: UGen -> UGen -> UGen -> UGen -> UGen@@ -48,7 +86,7 @@ rDelaySet_dsc = let i = [std_I 0 "input" 0 ,std_I 1 "setArray" 0]- in osc_U "RDelaySet" [AR] AR i 1 "Delay set (RTAlloc)"+ in osc_U "RDelaySet" [AR] AR i 1 "Delay set (RTAlloc)" False rDelaySet :: UGen -> UGen -> UGen rDelaySet i s = mkFilterMCE "RDelaySet" [i] s 1@@ -58,7 +96,7 @@ let i = [std_I 0 "buffer" 0 ,std_I 1 "input" 0 ,std_I 2 "setArray" 0]- in osc_U "RDelaySetB" [AR] AR i 1 "Delay set (Buffer)"+ in osc_U "RDelaySetB" [AR] AR i 1 "Delay set (Buffer)" False rDelaySetB :: UGen -> UGen -> UGen -> UGen rDelaySetB b i s = mkFilterMCE "RDelaySetB" [b,i] s 1@@ -66,7 +104,7 @@ rdl_dsc :: U rdl_dsc = let i = [std_I 0 "inputs" 0]- in osc_U "RDL" [AR] AR i 1 "Dynamic library host"+ in osc_U "RDL" [AR] AR i 1 "Dynamic library host" False rdl :: Int -> UGen -> UGen rdl nc i = mkOscMCE AR "RDL" [] i nc@@ -84,7 +122,7 @@ ,std_I 8 "syncPhaseTrigger" 0 ,std_I 9 "randomizePhaseTrigger" 0 ,std_I 10 "numberOfLoops" 6]- in osc_U "RFreezer" [AR] AR i 1 "Concurrent loops at signal buffer"+ in osc_U "RFreezer" [AR] AR i 1 "Concurrent loops at signal buffer" False rFreezer :: UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen -> UGen rFreezer b l r g i io ir rr ps pt nl =@@ -117,7 +155,7 @@ ,std_I 17 "ftableReadLocationIncrement" 0 ,std_I 18 "readIncrementQuanta" 0 ,std_I 19 "interOffsetTimeQuanta" 0]- in osc_U "RShufflerB" [AR] AR i 2 "Signal shuffler (Buffer)"+ in osc_U "RShufflerB" [AR] AR i 2 "Signal shuffler (Buffer)" False data RShufflerB a = RShufflerB {bufnum :: a ,readLocationMinima :: a@@ -151,7 +189,7 @@ let i = [std_I 0 "in" 0 ,std_I 1 "fragmentSize" 0.005 ,std_I 2 "maxDelay" 0.005]- in osc_U "RShufflerL" [AR] AR i 1 "Signal shuffler (Linear)"+ in osc_U "RShufflerL" [AR] AR i 1 "Signal shuffler (Linear)" False rShufflerL :: UGen -> UGen -> UGen -> UGen rShufflerL i fs md = mkFilterR [AR] "RShufflerL" [i,fs,md] 1@@ -162,7 +200,7 @@ ,std_I 1 "degree" 4 ,std_I 2 "index" 0 ,std_I 3 "access" 1]- in osc_U "RTraceRd" [AR] AR i 1 "Read trace buffer"+ in osc_U "RTraceRd" [AR] AR i 1 "Read trace buffer" False rTraceRd :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen rTraceRd rt b d ix ac = mkOsc rt "RTraceRd" [b,d,ix,ac] 1@@ -173,7 +211,7 @@ ,std_I 1 "degree" 4 ,std_I 2 "rate" 0 ,std_I 3 "access" 1]- in osc_U "RPlayTrace" [AR] AR i 1 "Play trace buffer"+ in osc_U "RPlayTrace" [AR] AR i 1 "Play trace buffer" False rPlayTrace :: Rate -> UGen -> UGen -> UGen -> UGen -> UGen rPlayTrace rt b d ix ac = mkOsc rt "RPlayTrace" [b,d,ix,ac] 1@@ -184,7 +222,60 @@ let i = [std_I 0 "trigger" 0 ,std_I 1 "inputs" 0] s = "Scramble inputs on trigger."- in U "TScramble" [KR] KR Nothing i (Just 1) (Right 1) s+ in U {ugen_name = "TScramble"+ ,ugen_operating_rates = [KR]+ ,ugen_default_rate = KR+ ,ugen_inputs = i+ ,ugen_outputs = Nothing+ ,ugen_summary = s+ ,ugen_std_mce = True+ ,ugen_nc_input = False+ ,ugen_nc_mce = Just 1+ ,ugen_filter = Nothing+ ,ugen_reorder = Nothing+ ,ugen_enumerations = Nothing+ ,ugen_nondet = True+ ,ugen_pseudo_inputs = Nothing+ ,ugen_fixed_rate = Just KR+ }++dustR :: ID z => z -> Rate -> UGen -> UGen -> UGen+dustR z rt lo hi = mkOscId (toUId z) rt "DustR" [lo,hi] 1++expRandN :: ID z => Int -> z -> UGen -> UGen -> UGen+expRandN nc z l r = mkOscId (toUId z) IR "ExpRandN" [l,r] nc++iRandN :: ID z => Int -> z -> UGen -> UGen -> UGen+iRandN nc z l r = mkOscId (toUId z) IR "IRandN" [l,r] nc++linRandN :: ID z => Int -> z -> UGen -> UGen -> UGen -> UGen+linRandN nc z l r bias = mkOscId (toUId z) IR "LinRandN" [l,r,bias] nc++randN :: ID z => Int -> z -> UGen -> UGen -> UGen+randN nc z l r = mkOscId (toUId z) IR "RandN" [l,r] nc++tScramble :: ID z => z -> Rate -> UGen -> UGen -> UGen+tScramble z rt tr i = mkOscMCEId (toUId z) rt "TScramble" [tr] i (mceDegree i)++-- * Monadic++dustRM :: UId m => Rate -> UGen -> UGen -> m UGen+dustRM = liftUId3 dustR++expRandNM :: UId m => Int -> UGen -> UGen -> m UGen+expRandNM nc = liftUId2 (expRandN nc)++iRandNM :: UId m => Int -> UGen -> UGen -> m UGen+iRandNM nc = liftUId2 (iRandN nc)++linRandNM :: UId m => Int -> UGen -> UGen -> UGen -> m UGen+linRandNM nc = liftUId3 (linRandN nc)++randNM :: UId m => Int -> UGen -> UGen -> m UGen+randNM nc = liftUId2 (randN nc)++tScrambleM :: UId m => Rate -> UGen -> UGen -> m UGen+tScrambleM = liftUId3 tScramble -- Local Variables: -- truncate-lines:t
− hs/Sound/SC3/UGen/External/RDU/ID.hs
@@ -1,19 +0,0 @@--- | RDU UGen definitions.-module Sound.SC3.UGen.External.RDU.ID where--import Sound.SC3.UGen.Identifier-import Sound.SC3.UGen.Rate-import Sound.SC3.UGen.Type-import Sound.SC3.UGen.UGen--dustR :: ID z => z -> Rate -> UGen -> UGen -> UGen-dustR z rt lo hi = mkOscId z rt "DustR" [lo,hi] 1--expRandN :: ID z => Int -> z -> UGen -> UGen -> UGen-expRandN nc z l r = mkOscId z IR "ExpRandN" [l,r] nc--randN :: ID z => Int -> z -> UGen -> UGen -> UGen-randN nc z l r = mkOscId z IR "RandN" [l,r] nc--tScramble :: ID z => z -> Rate -> UGen -> UGen -> UGen-tScramble z rt tr i = mkOscMCEId z rt "TScramble" [tr] i (mceDegree i)
− hs/Sound/SC3/UGen/External/RDU/Monad.hs
@@ -1,20 +0,0 @@--- | RDU UGen definitions.-module Sound.SC3.UGen.External.RDU.Monad where--import Sound.SC3.UGen.Rate-import Sound.SC3.UGen.Type-import Sound.SC3.UGen.UId--import qualified Sound.SC3.UGen.External.RDU.ID as I--dustR :: UId m => Rate -> UGen -> UGen -> m UGen-dustR = liftUId3 I.dustR--expRandN :: UId m => Int -> UGen -> UGen -> m UGen-expRandN nc = liftUId2 (I.expRandN nc)--randN :: UId m => Int -> UGen -> UGen -> m UGen-randN nc = liftUId2 (I.randN nc)--tScramble :: UId m => Rate -> UGen -> UGen -> m UGen-tScramble = liftUId3 I.tScramble
sc3-rdu.cabal view
@@ -1,15 +1,15 @@ Name: sc3-rdu-Version: 0.14+Version: 0.15 Synopsis: Haskell bindings to sc3-rdu (sc3 rd ugens) Description: Haskell bindings to sc3-rdu (sc3 rd ugens) License: GPL Category: Sound-Copyright: (c) Rohan Drape, 1998-2012+Copyright: (c) Rohan Drape, 1998-2014 Author: Rohan Drape Maintainer: rd@slavepianos.org Stability: Experimental-Homepage: http://rd.slavepianos.org/?t=sc3-rdu-Tested-With: GHC == 7.6.1+Homepage: http://rd.slavepianos.org/t/sc3-rdu+Tested-With: GHC == 7.8.2 Build-Type: Simple Cabal-Version: >= 1.8 @@ -18,12 +18,10 @@ Library hs-source-dirs: hs Build-Depends: base == 4.*,- hsc3 == 0.14.*,- hsc3-db == 0.14.*+ hsc3 == 0.15.*,+ hsc3-db == 0.15.* GHC-Options: -Wall -fwarn-tabs Exposed-modules: Sound.SC3.UGen.External.RDU- Sound.SC3.UGen.External.RDU.ID- Sound.SC3.UGen.External.RDU.Monad Source-Repository head Type: darcs