packages feed

supercollider-ht 0.1.1.1 → 0.2

raw patch · 4 files changed

+136/−122 lines, 4 filesdep ~hoscdep ~hsc3dep ~opensoundcontrol-htPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: hosc, hsc3, opensoundcontrol-ht, transformers

API changes (from Hackage documentation)

- Sound.SC3.Example.Effect: formant0, formant2, formant1 :: UGen
+ Sound.SC3.Example.Effect: formant0 :: UGen
+ Sound.SC3.Example.Effect: formant1 :: UGen
+ Sound.SC3.Example.Effect: formant2 :: UGen
+ Sound.SC3.Example.Effect: void :: Monad m => m a -> m ()
+ Sound.SC3.Server.PlayEasy: send :: (OSC a, SendOSC m) => a -> m ()
- Sound.SC3.Example.Effect: envPerc' :: [UGen]
+ Sound.SC3.Example.Effect: envPerc' :: Fractional a => Envelope a
- Sound.SC3.Example.Effect: loadEffect :: C m => String -> UGen -> m OSC
+ Sound.SC3.Example.Effect: loadEffect :: Transport m => String -> UGen -> m ()
- Sound.SC3.Example.Effect: loadTone :: C m => String -> (UGen -> UGen -> UGen) -> m OSC
+ Sound.SC3.Example.Effect: loadTone :: Transport m => String -> (UGen -> UGen -> UGen) -> m ()
- Sound.SC3.Example.Effect: newGroup :: C m => Int -> Int -> m ()
+ Sound.SC3.Example.Effect: newGroup :: Transport m => Int -> Int -> m ()
- Sound.SC3.Example.Effect: playEffect :: C m => Int -> String -> m ()
+ Sound.SC3.Example.Effect: playEffect :: Transport m => Int -> String -> m ()
- Sound.SC3.Example.Effect: playTone :: C m => String -> Double -> Double -> m ()
+ Sound.SC3.Example.Effect: playTone :: Transport m => String -> Double -> Double -> m ()
- Sound.SC3.Example.Effect: playToneInGroup :: C m => Int -> String -> Double -> Double -> m ()
+ Sound.SC3.Example.Effect: playToneInGroup :: Transport m => Int -> String -> Double -> Double -> m ()
- Sound.SC3.Example.Effect: playToneSep :: C m => String -> Double -> Double -> m ()
+ Sound.SC3.Example.Effect: playToneSep :: Transport m => String -> Double -> Double -> m ()
- Sound.SC3.Server.PlayEasy: audition :: UGen -> IO OSC
+ Sound.SC3.Server.PlayEasy: audition :: UGen -> IO Message
- Sound.SC3.Server.PlayEasy: d_recv_synthdef :: String -> UGen -> OSC
+ Sound.SC3.Server.PlayEasy: d_recv_synthdef :: String -> UGen -> Message
- Sound.SC3.Server.PlayEasy: play :: C m => UGen -> m OSC
+ Sound.SC3.Server.PlayEasy: play :: Transport m => UGen -> m Message
- Sound.SC3.Server.PlayEasy: playId :: C m => NodeId -> UGen -> m OSC
+ Sound.SC3.Server.PlayEasy: playId :: Transport m => NodeId -> UGen -> m Message
- Sound.SC3.Server.PlayEasy: playIdCustomOut :: C m => NodeId -> UGen -> m OSC
+ Sound.SC3.Server.PlayEasy: playIdCustomOut :: Transport m => NodeId -> UGen -> m Message
- Sound.SC3.Server.PlayEasy: reset :: C m => m ()
+ Sound.SC3.Server.PlayEasy: reset :: Transport m => m ()
- Sound.SC3.Server.PlayEasy: set :: C m => String -> Double -> m ()
+ Sound.SC3.Server.PlayEasy: set :: Transport m => String -> Double -> m ()
- Sound.SC3.Server.PlayEasy: setId :: C m => NodeId -> String -> Double -> m ()
+ Sound.SC3.Server.PlayEasy: setId :: Transport m => NodeId -> String -> Double -> m ()
- Sound.SC3.Server.PlayEasy: setMulti :: C m => [(String, Double)] -> m ()
+ Sound.SC3.Server.PlayEasy: setMulti :: Transport m => [(String, Double)] -> m ()
- Sound.SC3.Server.PlayEasy: simpleSync :: C m => OSC -> m ()
+ Sound.SC3.Server.PlayEasy: simpleSync :: (Transport m, OSC a) => a -> m ()
- Sound.SC3.Server.PlayEasy: stop :: C m => m ()
+ Sound.SC3.Server.PlayEasy: stop :: Transport m => m ()
- Sound.SC3.Server.PlayEasy: stopId :: C m => NodeId -> m ()
+ Sound.SC3.Server.PlayEasy: stopId :: Transport m => NodeId -> m ()
- Sound.SC3.Server.PlayEasy: sync :: C m => OSC -> m OSC
+ Sound.SC3.Server.PlayEasy: sync :: (OSC a, Transport m) => a -> m Message
- Sound.SC3.Server.PlayEasy: withSC3 :: T UDP a -> IO a
+ Sound.SC3.Server.PlayEasy: withSC3 :: Connection UDP a -> IO a
- Sound.SC3.Server.PlayEasy: withSC3File :: FilePath -> T T a -> IO a
+ Sound.SC3.Server.PlayEasy: withSC3File :: FilePath -> Connection T a -> IO a
- Sound.SC3.Server.PlayEasy: withSC3TCP :: T TCP a -> IO a
+ Sound.SC3.Server.PlayEasy: withSC3TCP :: Connection TCP a -> IO a
- Sound.SC3.Server.PlayEasy: withSC3UDP :: T UDP a -> IO a
+ Sound.SC3.Server.PlayEasy: withSC3UDP :: Connection UDP a -> IO a

Files

src/Sound/SC3/Example/Effect.hs view
@@ -5,40 +5,42 @@ -} module Sound.SC3.Example.Effect where -import Sound.SC3.UGen.UGen+import Sound.SC3.UGen.UGen (mrg2, control, )+import Sound.SC3.UGen.Type (UGen, mce, ) import Sound.SC3.UGen.Rate import Sound.SC3.UGen.Math-import Sound.SC3.UGen.Envelope (envGen, xLine, pauseSelf, )+import Sound.SC3.UGen.Envelope (Envelope, envGen, xLine, pauseSelf, ) import Sound.SC3.UGen.Filter import Sound.SC3.UGen.IO import Sound.SC3.UGen.Noise.ID import Sound.SC3.UGen.Panner import Sound.SC3.UGen.Oscillator-import Sound.SC3.UGen.Enum (Warp(Linear), DoneAction(RemoveSynth), EnvCurve(EnvNum), )+import Sound.SC3.UGen.Enum (Warp(Linear), DoneAction(RemoveSynth), Envelope_Curve(EnvNum), ) import Sound.SC3.Server.Command import Sound.SC3.Server.PlayEasy as Play-import Sound.SC3.Server.NRT (writeNRT, )+import Sound.SC3.Server.NRT (NRT(NRT), writeNRT, ) import qualified Sound.SC3.UGen.Envelope.Construct as EnvCons -import Sound.OpenSoundControl.OSC (OSC(Bundle), )-import Sound.OpenSoundControl.Transport.Monad (send, )-import qualified Sound.OpenSoundControl.Time as Time-import qualified Sound.OpenSoundControl.Transport.Monad as Trans--import System.Random(randomRs, mkStdGen, )-import Control.Concurrent(threadDelay, )-import Control.Monad.Trans.Class (lift, )+import qualified Sound.OpenSoundControl.Type as OSC+import Sound.OSC.Transport.Monad (Transport, ) +import Control.Concurrent (threadDelay, )+import Control.Exception (finally, ) import System.Cmd (rawSystem) +import System.Random (randomRs, mkStdGen, ) +import Control.Monad.Trans.Class (lift, )+import Control.Monad (liftM, )++ {- * example sounds -}  analogBubbles :: UGen analogBubbles = combN s 0.2 0.2 4   where s = sinOsc AR (midiCPS f) 0 * 0.1         f = lfSaw KR 0.4 1 * 24 + o-        o = lfSaw KR (MCE [8, 7.23]) 0 * 3 + 80+        o = lfSaw KR (mce [8, 7.23]) 0 * 3 + 80   pgmouse :: UGen -> UGen@@ -79,11 +81,11 @@    in  rlpf noise lfo 0.005  ps :: UGen-ps = MRG a b+ps = mrg2 a b     where a = pauseSelf (mouseX KR (-1) 1 Linear 0.1)           b = out 0 (sinOsc AR 440 0 * 0.1) -envPerc' :: [UGen]+envPerc' :: Fractional a => Envelope a envPerc' = EnvCons.envPerc' 0.01 1.0 1.0 (dbl (EnvNum (-4.0)))  dbl :: a -> (a,a)@@ -100,44 +102,49 @@ bassFilter :: UGen bassFilter = w   where ctrl  = control KR "cutoff" 1000-        tone  = saw AR (MCE [55, 55.1]) * 0.1+        tone  = saw AR (mce [55, 55.1]) * 0.1         w     = rlpf tone ctrl 0.05  bassFilterRun :: IO () bassFilterRun =-  withSC3 $-   do play bassFilter+   flip finally (withSC3 stop) $+   withSC3 $ do+      void $ play bassFilter       mapM_          (\p -> set "cutoff" p >> lift (threadDelay 150000))          (randomRs (400,2000) (mkStdGen 34))-      stop   bassFilterGlissando :: UGen bassFilterGlissando =    let ctrl = 600 * exp (lag (lfNoise0 seed KR 6) 0.1)-       tone = saw AR (MCE [55, 55.1]) * 0.1+       tone = saw AR (mce [55, 55.1]) * 0.1        w    = rlpf tone ctrl 0.05    in  w  -loadTone :: Trans.C m =>-            String-            -> (UGen -> UGen -> UGen)-            -> m OSC+void :: Monad m => m a -> m ()+void = liftM (const ())++loadTone ::+   Transport m =>+   String ->+   (UGen -> UGen -> UGen) ->+   m () loadTone name tone =-   Play.sync (Play.d_recv_synthdef name-       (tone (control KR "velocity" 0)-             (control KR "pitch" 0)))+   void $ Play.sync $ Play.d_recv_synthdef name $+        tone (control KR "velocity" 0)+             (control KR "pitch" 0) -loadEffect :: Trans.C m =>-              String-              -> UGen-              -> m OSC+loadEffect ::+   Transport m =>+   String ->+   UGen ->+   m () loadEffect name effect =-   Play.sync (Play.d_recv_synthdef name effect)+   void $ Play.sync $ Play.d_recv_synthdef name effect -playTone :: Trans.C m =>+playTone :: Transport m =>             String             -> Double             -> Double@@ -148,7 +155,7 @@               ("velocity", v)])  -- makes the same, but more complicated-playToneSep :: (Trans.C m) =>+playToneSep :: (Transport m) =>    String    -> Double    -> Double@@ -159,7 +166,7 @@           n_set lastId $ ("pitch", f) :                        ("velocity", v) : []] -playToneInGroup :: Trans.C m =>+playToneInGroup :: Transport m =>                    Int                    -> String                    -> Double@@ -170,12 +177,12 @@              [("pitch", f),               ("velocity", v)]) -newGroup :: Trans.C m =>+newGroup :: Transport m =>             Int -> Int -> m () newGroup superGid gid =    send (g_new [(gid, AddToTail, superGid)]) -playEffect :: Trans.C m =>+playEffect :: Transport m =>               Int -> String -> m () playEffect gid name =    send (s_new name autoId AddToTail gid [])@@ -193,7 +200,7 @@ filterPerc :: UGen -> UGen -> UGen filterPerc v f = out 0 (w * 0.5)   where e = envGen KR 1 2 0 1 RemoveSynth envPerc'-        s = v * e * saw AR (MCE [f*1.001, f*0.999])+        s = v * e * saw AR (mce [f*1.001, f*0.999])         w = rlpf s (exp (e*filterDepth) * filterBase) 0.05         filterBase  = control KR "filter-base"  1000         filterDepth = control KR "filter-depth"    1@@ -227,7 +234,7 @@    withSC3 $    do loadTone "string"          (\vel freq -> out 0 $-             filterSweep 2000 (saw AR (MCE [freq, freq*1.002]) * vel))+             filterSweep 2000 (saw AR (mce [freq, freq*1.002]) * vel))       playTone "string" 0.3 55  playSuccSweep :: IO ()@@ -285,17 +292,16 @@    let oscFileName   = name++".osc"        audioFileName = name++".aiff"        numChannels = Play.mceDegree ugen-   in  do writeNRT oscFileName-             [Bundle (Time.NTPr 0) $+   in  do writeNRT oscFileName $ NRT $+             [OSC.bundle 0 $                  g_new [(homeId, AddToTail, rootId)] :                  Play.d_recv_synthdef name (out 0 ugen) :                  s_new name autoId AddToTail homeId [] :                  [],-              Bundle (Time.NTPr time) [g_freeAll [homeId]]]-          rawSystem "scsynth"+              OSC.bundle time [g_freeAll [homeId]]]+          void $ rawSystem "scsynth"              ["-o", show numChannels, "-N", oscFileName, "_", audioFileName,               "44100", "AIFF", "int16"]-          return ()  renderAnalogBubbles :: IO () renderAnalogBubbles =
src/Sound/SC3/Example/Timing.hs view
@@ -1,21 +1,22 @@ {- Rohan Drape: Haskell-Cafe, 2006-11-08 -}--import qualified Sound.OpenSoundControl.Transport.Monad.IO as TIO-import Sound.OpenSoundControl(OSC(Bundle))-import Sound.OpenSoundControl.Time-          (Time(UTCr), utcr, pauseThread, pauseThreadUntil, )-import Sound.OpenSoundControl.Transport.Monad(send, )-import Sound.OpenSoundControl.Transport.UDP (UDP)+import qualified Sound.SC3.Server.PlayEasy as Play import Sound.SC3           (UGen, out, s_new, n_run, n_free,            Rate(AR,KR), sinOsc, envGen, envPerc',-           EnvCurve(EnvNum), DoneAction(RemoveSynth),+           Envelope_Curve(EnvNum), DoneAction(RemoveSynth),            AddAction(AddToTail), )-import qualified Sound.SC3.Server.PlayEasy as Play++import qualified Sound.OpenSoundControl.Time as Time+import qualified Sound.OpenSoundControl.Type as OSC+import Sound.OpenSoundControl.Time+          (Time, pauseThread, pauseThreadUntil, )+import Sound.OSC.Transport.FD.UDP (UDP)+ import Control.Concurrent (forkIO, ) import Control.Monad.IO.Class (liftIO, )+import Control.Monad.Trans.Reader (ReaderT, )   -- * from old Rhs.Schedule module@@ -23,12 +24,11 @@ http://slavepianos.org/rd/sw/sw-76 Build-Depends: Rhs >=0.1 && <0.2 -}-type UTC = Double-type Interval = Double-type Action = UTC -> IO (Maybe Interval)+type Interval = Time+type Action = Time -> IO (Maybe Interval)  -- | Apply action at indicated time and reschedule after interval.-at :: Double -> Action -> IO ()+at :: Time -> Action -> IO () at t f = pauseThreadUntil t >> f t >>= resched t f  -- | Rescheduler@@ -44,39 +44,39 @@      where c = EnvNum (-4.0)            e = envGen KR 1 a 0 1 RemoveSynth (envPerc' 0.1 0.6 1 (c,c)) -latency :: Double+latency :: Time latency = 0.05 -bundle :: Double -> [OSC] -> OSC-bundle t m = Bundle (UTCr $ t + latency) m+bundle :: Time -> [OSC.Message] -> OSC.Bundle+bundle t m = OSC.bundle (t + latency) m -scPutStrLn :: String -> TIO.T UDP ()+scPutStrLn :: String -> ReaderT UDP IO () scPutStrLn = liftIO . putStrLn  pinger :: IO () pinger =    let f t = Play.withSC3 $-                do send (bundle t [s_new "ping" 42 AddToTail 1 []])---                   send (n_run (-1) True)-                   send (bundle (t+0.1) [n_run [(42, False)], n_free [42]])---                   send (bundle (t+0.1) [])---                   send (n_free [101])---                   send (bundle (t+0.1) [s_new "pong" 5 AddToTail 1 []])+                do Play.send (bundle t [s_new "ping" 42 AddToTail 1 []])+--                   Play.send (n_run (-1) True)+                   Play.send (bundle (t+0.1) [n_run [(42, False)], n_free [42]])+--                   Play.send (bundle (t+0.1) [])+--                   Play.send (n_free [101])+--                   Play.send (bundle (t+0.1) [s_new "pong" 5 AddToTail 1 []])                    scPutStrLn "Sending ping"                    return (Just 1.0)-   in  do now <- utcr+   in  do now <- Time.time           at (fromInteger (ceiling now)) f  main :: IO () main =    Play.withSC3 $        do scPutStrLn "Sending Ping Instrument"-          Play.sync (Play.d_recv_synthdef "ping" (ping 880 0.1))+          _ <- Play.sync (Play.d_recv_synthdef "ping" (ping 880 0.1)) --          sync (d_recv_synthdef "pong" (ping 660 0.1))           scPutStrLn "Resetting scsynth"           Play.reset           scPutStrLn "Starting schedule thread"-          liftIO $ forkIO pinger+          _ <- liftIO $ forkIO pinger           scPutStrLn "Delaying main thread"-          liftIO $ pauseThread 30+          liftIO $ pauseThread (30::Time)           scPutStrLn "End of delay, exiting"
src/Sound/SC3/Server/PlayEasy.hs view
@@ -4,66 +4,74 @@     NodeId, noId, autoId, lastId, rootId, homeId,     set, setMulti, setId,     playIdCustomOut, playId, stopId,-    sync, d_recv_synthdef,+    send, sync, d_recv_synthdef,     simpleSync, mceDegree,    ) where  import Sound.SC3.UGen.IO (out)-import Sound.SC3.UGen.UGen (UGen(..))+import Sound.SC3.UGen.Type (UGen(..), constant, Proxy(Proxy), MRG(..), Primitive(..), )+import Sound.SC3.UGen.MCE (MCE(..), ) import Sound.SC3.Server.Synthdef (synthdef, ) import Sound.SC3.Server.Command          (AddAction(AddToTail), s_new, d_recv, g_new, g_freeAll,-          n_set, n_free)-import Sound.OpenSoundControl (OSC(Message))-import Sound.OpenSoundControl.Transport.TCP (TCP)-import Sound.OpenSoundControl.Transport.UDP (UDP)-import Sound.OpenSoundControl.Transport.Monad (send, wait, )+          n_set, n_free, ) -import qualified Sound.OpenSoundControl.Transport.TCP   as TCP-import qualified Sound.OpenSoundControl.Transport.UDP   as UDP-import qualified Sound.OpenSoundControl.Transport.File  as File-import qualified Sound.OpenSoundControl.Transport.Monad as Trans-import qualified Sound.OpenSoundControl.Transport.Monad.IO as TIO+import qualified Sound.OpenSoundControl.Type as OSC +import Sound.OpenSoundControl.Class (OSC)+import Sound.OpenSoundControl.Type (Packet(Packet_Message), )+import Sound.OSC.Transport.FD.TCP (TCP)+import Sound.OSC.Transport.FD.UDP (UDP)+import Sound.OSC.Transport.Monad+          (Transport, SendOSC, Connection, sendOSC, waitReply, withTransport, )++import qualified Sound.OSC.Transport.FD.TCP as TCP+import qualified Sound.OSC.Transport.FD.UDP as UDP+import qualified Sound.OpenSoundControl.Transport.File as File+ import Prelude hiding (init, )    type NodeId = Int +send :: (OSC a, SendOSC m) => a -> m ()+send = sendOSC+ -- | Construct an instrument definition, send /d_recv and /s_new messages to scsynth.-play :: Trans.C m => UGen -> m OSC+play :: Transport m => UGen -> m OSC.Message play u =    do r <- sync (d_recv_synthdef "Anonymous" (addOut u))       send (s_new "Anonymous" autoId AddToTail homeId [])       return r  -- | Free all nodes at the group with node id 'homeId'.-stop :: Trans.C m => m ()+stop :: Transport m => m () stop = send (g_freeAll [homeId])  -- | Free all nodes and re-create group node with id 'homeId'.-reset :: Trans.C m => m ()+reset :: Transport m => m () reset = send (g_freeAll [rootId]) >> init  -- | Bracket SC3 communication.-withSC3 :: TIO.T UDP a -> IO a+withSC3 :: Connection UDP a -> IO a withSC3 = withSC3UDP  -- | Bracket SC3 communication via UDP.-withSC3UDP :: TIO.T UDP a -> IO a-withSC3UDP = TIO.with (UDP.openUDP "127.0.0.1" 57110)+withSC3UDP :: Connection UDP a -> IO a+withSC3UDP = withTransport (UDP.openUDP "127.0.0.1" 57110)  -- | Bracket SC3 communication via TCP.-withSC3TCP :: TIO.T TCP a -> IO a-withSC3TCP = TIO.with (TCP.openTCP "127.0.0.1" 57110)+withSC3TCP :: Connection TCP a -> IO a+withSC3TCP = withTransport (TCP.openTCP "127.0.0.1" 57110)  -- | Write SC3 communication to a command file.-withSC3File :: FilePath -> TIO.T File.T a -> IO a-withSC3File fn = TIO.with (File.open (Message "/done" []) fn)+withSC3File :: FilePath -> Connection File.T a -> IO a+withSC3File fn =+   withTransport (File.open (Packet_Message (OSC.Message "/done" [])) fn)  -- | withSC3 . play-audition :: UGen -> IO OSC+audition :: UGen -> IO OSC.Message audition = withSC3 . play  @@ -92,60 +100,60 @@  {- ** Functions for custom node identifiers -} -sync :: Trans.C m => OSC -> m OSC-sync o = send o >> wait "/done"+sync :: (OSC a, Transport m) => a -> m OSC.Message+sync o = send o >> waitReply "/done" -- sync o = send o >> recv -simpleSync :: Trans.C m => OSC -> m ()+simpleSync :: (Transport m, OSC a) => a -> m () simpleSync o = sync o >> return () -init :: Trans.C m => m ()+init :: Transport m => m () init = send (g_new [(homeId, AddToTail, rootId)]) -playIdCustomOut :: Trans.C m => NodeId -> UGen -> m OSC+playIdCustomOut :: Transport m => NodeId -> UGen -> m OSC.Message playIdCustomOut sid u =    do r <- sync (d_recv_synthdef "Anonymous" u)       send (s_new "Anonymous" sid AddToTail homeId [])       return r -set :: Trans.C m => String -> Double -> m ()+set :: Transport m => String -> Double -> m () set = setId lastId -setMulti :: Trans.C m => [(String, Double)] -> m ()+setMulti :: Transport m => [(String, Double)] -> m () setMulti = setMultiId lastId  -playId :: Trans.C m => NodeId -> UGen -> m OSC+playId :: Transport m => NodeId -> UGen -> m OSC.Message playId sid u = playIdCustomOut sid (addOut u) -stopId :: Trans.C m => NodeId -> m ()+stopId :: Transport m => NodeId -> m () stopId sid   = send (n_free [sid]) -setId :: Trans.C m => NodeId -> String -> Double -> m ()+setId :: Transport m => NodeId -> String -> Double -> m () setId  sid name value = send (n_set sid [(name, value)]) -setMultiId :: Trans.C m => NodeId -> [(String, Double)] -> m ()+setMultiId :: Transport m => NodeId -> [(String, Double)] -> m () setMultiId sid attrs = send (n_set sid attrs)    -- | If the UGen has output ports connect it to an 'out' UGen. addOut :: UGen -> UGen-addOut u = if hasOutputs u then out (Constant 0) u else u+addOut u = if hasOutputs u then out (constant (0::Integer)) u else u -d_recv_synthdef :: String -> UGen -> OSC+d_recv_synthdef :: String -> UGen -> OSC.Message d_recv_synthdef n = d_recv . synthdef n  -- | True if the 'UGen' has output ports (ie. is not a sink UGen). hasOutputs :: UGen -> Bool-hasOutputs (Primitive _ _ _ o _ _) = not (null o)-hasOutputs (MCE l)            = any hasOutputs l-hasOutputs (MRG l r)          = hasOutputs l || hasOutputs r-hasOutputs (Proxy _ _)        = True+hasOutputs (Primitive_U (Primitive _ _ _ o _ _)) = not (null o)+hasOutputs (MCE_U (MCE_Vector l))            = any hasOutputs l+hasOutputs (MRG_U (MRG l r))          = hasOutputs l || hasOutputs r+hasOutputs (Proxy_U (Proxy _ _))        = True hasOutputs _                  = False  -- | Returns 1 for mono signals. mceDegree :: UGen -> Int-mceDegree (Primitive _ _ _ _ _ _) = 1-mceDegree (MCE l) = length l+mceDegree (Primitive_U (Primitive _ _ _ _ _ _)) = 1+mceDegree (MCE_U (MCE_Vector l)) = length l mceDegree _       = error "mceDegree: illegal ugen"
supercollider-ht.cabal view
@@ -1,23 +1,23 @@ Name:             supercollider-ht-Version:          0.1.1.1+Version:          0.2 License:          GPL License-File:     LICENSE-Copyright:        Henning Thielemann, 2008-2009+Copyright:        Henning Thielemann, 2008-2013 Author:           Henning Thielemann <supercollider@henning-thielemann.de> Maintainer:       Henning Thielemann <supercollider@henning-thielemann.de> Stability:        Experimental Homepage:         http://www.haskell.org/haskellwiki/SuperCollider Synopsis:         Haskell SuperCollider utilities Description:-   Some additional modules I regular use+   Some additional modules I use    in connection with the SuperCollider wrapper hsc3 by Rohan Drape.    It contains:    .-   * play routines using the Transport monad from opensoundcontrol-ht+   * common play routines    .    * example effects Category:         Sound-Tested-With:      GHC==6.4.1, GHC==6.8.2+Tested-With:      GHC==7.4.2 Cabal-Version:    >=1.6 Build-Type:       Simple Source-Repository head@@ -27,7 +27,7 @@ Source-Repository this   type:     darcs   location: http://code.haskell.org/~thielema/supercollider/-  tag:      0.1.1.1+  tag:      0.2   Flag splitBase@@ -38,9 +38,9 @@   default:     False  Library-  Build-Depends: hosc >=0.8 && <0.9, hsc3 >=0.8 && <0.9-  Build-Depends: opensoundcontrol-ht >=0.1 && <0.2-  Build-Depends: transformers >=0.2 && <0.4+  Build-Depends: hosc >=0.13 && <0.14, hsc3 >=0.13 && <0.14+  Build-Depends: opensoundcontrol-ht >=0.2 && <0.3+  Build-Depends: transformers >=0.2 && <0.5   If flag(splitBase)     Build-Depends:       random >= 1.0 && <2,