packages feed

hsc3-server 0.8.0 → 0.9.1

raw patch · 7 files changed

+83/−26 lines, 7 filesdep ~hsc3

Dependency ranges changed: hsc3

Files

+ CHANGELOG.md view
@@ -0,0 +1,30 @@+### [v0.6.0](https://github.com/kaoskorobase/hsc3-server/tree/v0.6.0)++* Add `Control.Failure.Failure` instance to `Sound.SC3.Server.State.Monad.Server`+* Add `hostname` parameter to `Sound.SC3.Server.State.Monad.Process.withTransport`++### [v0.5.0](https://github.com/kaoskorobase/hsc3-server/tree/v0.5.0)++* Use distinct types for audio and control buses and IDs+* Factor monad type classes into `Sound.SC3.Server.Monad.Class`+* Remove `Sound.SC3.Server.Monad.capture` combinator+* Upgrade to `hosc` 0.13 and `hsc3` 0.13+* Move `Sound.SC3.Server.Monad` hierarchy to `Sound.SC3.Server.State.Monad` to avoid a clash with `hsc3`+* Rename `Sound.SC3.Server.Monad.Send` to `Sound.SC3.Server.State.Monad.Request` and refactor interface and semantics+* Export `withTransport` from `Sound.SC3.Server.State.Monad.Process`++### v0.4.0++* Move allocation interface to `Sound.SC3.Server.Monad` and add monad control+  instances: Remove allocation interface from `Sound.SC3.Server.Connection` and+  move it to `Sound.SC3.Server.Monad`.+* Remove `data-accessor` dependency.+* Add instances for `MonadBase`, `MonadBaseControl` and `MonadTransControl`,+  allowing to lift control operations from the base monad into ServerT.+* Implement `Sound.SC3.Server.Monad.fork` in terms of+  `Control.Concurrent.Lifted.fork`. `fork` may be removed from the interface in+  future versions.++### [v0.3.0](https://github.com/kaoskorobase/hsc3-server/tree/v0.3.0)++* Add new modules `Sound.SC3.Server.Monad.Send` and `Sound.SC3.Server.Monad.Command` providing abstractions for synchronous and asynchronous commands and completion messages
+ README.md view
@@ -0,0 +1,23 @@+# hsc3-server [![Hackage version](https://img.shields.io/hackage/v/hsc3-server.svg?style=flat)](http://hackage.haskell.org/package/hsc3-server) [![Build Status](https://img.shields.io/travis/kaoskorobase/hsc3-server.svg?style=flat&branch=develop)](https://travis-ci.org/kaoskorobase/hsc3-server)++**hsc3-server** is a Haskell library for managing [SuperCollider](http://supercollider.sourceforge.net) server resources such as node, buffer and bus ids. It also provides synchronization primitives.++### Installation++    cabal install hsc3-server++### Documentation++* [Change log](https://github.com/kaoskorobase/hsc3-server/blob/master/ChangeLog.md)+* [API documentation](http://hackage.haskell.org/package/hsc3-server)+* [Example scripts](https://github.com/kaoskorobase/hsc3-server/tree/master/examples)++### Reporting bugs++Please report bugs in our [issue tracker](https://github.com/kaoskorobase/hsc3-server/issues).++### Development++**hsc3-server**'s source code is hosted at [github](https://github.com/kaoskorobase/hsc3-server). You can check out a copy of the repository with the following command:++    git clone git://github.com/kaoskorobase/hsc3-server.git
Sound/SC3/Server/Allocator/Range.hs view
@@ -19,7 +19,7 @@   , join ) where -import Prelude hiding (last, null)+import Prelude hiding (join, last, null)  -- $setup -- >>> import Control.Applicative ((<$>), (<*>))
Sound/SC3/Server/State/Monad.hs view
@@ -49,7 +49,7 @@ import           Sound.OSC (Bundle(..), Datum(Int32), Message(..), Packet(..), immediately) import           Sound.OSC.Transport.Monad (DuplexOSC, RecvOSC(..), SendOSC(..), Transport) import qualified Sound.SC3.Server.Allocator as A-import           Sound.SC3.Server.Command.Core (notify)+import           Sound.SC3.Server.Command (notify) import           Sound.SC3.Server.Connection (Connection) import qualified Sound.SC3.Server.Connection as C import qualified Sound.SC3.Server.Notification as N
Sound/SC3/Server/State/Monad/Command.hs view
@@ -128,11 +128,9 @@ import qualified Sound.SC3.Server.Allocator.Range as Range import qualified Sound.SC3.Server.Synthdef as Synthdef import           Sound.SC3.Server.Allocator (AllocFailure(..))-import           Sound.SC3.Server.Enum (AddAction(..), ErrorScope(..), ErrorMode(..), PrintLevel(..))-import qualified Sound.SC3.Server.Command.Core as C-import qualified Sound.SC3.Server.Command.Completion as C-import qualified Sound.SC3.Server.Command.Double as C-import qualified Sound.SC3.Server.Command.Int as C+import           Sound.SC3.Server.Enum (AddAction(..), B_Gen, ErrorScope(..), ErrorMode(..), PrintLevel(..))+import qualified Sound.SC3.Server.Command as C+import qualified Sound.SC3.Server.Command.Completion as CC import           Sound.SC3.Server.Enum (SoundFileFormat(..), SampleFormat(..)) import qualified Sound.SC3.Server.Notification as N import           Sound.SC3.Server.Process.Options (ServerOptions(..))@@ -142,7 +140,6 @@ import           Sound.SC3.Server.State.Monad.Class (MonadIdAllocator, MonadServer, RequestOSC, serverOption) import           Sound.SC3.Server.State.Monad.Request (Request, Result, after_, finally, mkAsync, mkAsync_, mkSync, waitFor) import qualified Sound.SC3.Server.State.Monad.Request as R-import           Sound.SC3.UGen.Enum (B_Gen)  -- ==================================================================== -- Utils@@ -219,15 +216,15 @@     | length name < 255 = mkAsync $ return (SynthDef name, f)     | otherwise = error "d_recv: name too long, resulting string exceeds 255 characters"     where-        f osc = (mkC C.d_recv C.d_recv' osc) (Synthdef.synthdef name ugen)+        f osc = (mkC C.d_recv CC.d_recv' osc) (Synthdef.synthdef name ugen)  -- | Load a synth definition from a named file. (Asynchronous) d_load :: Monad m => FilePath -> Request m ()-d_load fp = mkAsync_ $ \osc -> mkC C.d_load C.d_load' osc $ fp+d_load fp = mkAsync_ $ \osc -> mkC C.d_load CC.d_load' osc $ fp  -- | Load a directory of synth definition files. (Asynchronous) d_loadDir :: Monad m => FilePath -> Request m ()-d_loadDir fp = mkAsync_ $ \osc -> mkC C.d_loadDir C.d_loadDir' osc $ fp+d_loadDir fp = mkAsync_ $ \osc -> mkC C.d_loadDir CC.d_loadDir' osc $ fp  -- | Remove definition once all nodes using it have ended. d_free :: Monad m => SynthDef -> Request m ()@@ -456,14 +453,14 @@ b_alloc :: MonadIdAllocator m => Int -> Int -> Request m Buffer b_alloc n c = mkAsync $ do     bid <- M.alloc M.bufferIdAllocator-    let f osc = (mkC C.b_alloc C.b_alloc' osc) (fromIntegral bid) n c+    let f osc = (mkC C.b_alloc CC.b_alloc' osc) (fromIntegral bid) n c     return (Buffer bid, f)  -- | Allocate buffer space and read a sound file. (Asynchronous) b_allocRead :: MonadIdAllocator m => FilePath -> Maybe Int -> Maybe Int -> Request m Buffer b_allocRead path fileOffset numFrames = mkAsync $ do   bid <- M.alloc M.bufferIdAllocator-  let f osc = (mkC C.b_allocRead C.b_allocRead' osc)+  let f osc = (mkC C.b_allocRead CC.b_allocRead' osc)                 (fromIntegral bid) path                 (maybe 0 id fileOffset)                 (maybe (-1) id numFrames)@@ -473,7 +470,7 @@ b_allocReadChannel :: MonadIdAllocator m => FilePath -> Maybe Int -> Maybe Int -> [Int] -> Request m Buffer b_allocReadChannel path fileOffset numFrames channels = mkAsync $ do   bid <- M.alloc M.bufferIdAllocator-  let f osc = (mkC C.b_allocReadChannel C.b_allocReadChannel' osc)+  let f osc = (mkC C.b_allocReadChannel CC.b_allocReadChannel' osc)                 (fromIntegral bid) path                 (maybe 0 id fileOffset)                 (maybe (-1) id numFrames)@@ -490,7 +487,7 @@  -> Bool  -> Request m () b_read (Buffer bid) path fileOffset numFrames bufferOffset leaveOpen =-  mkAsync_ $ \osc -> (mkC C.b_read C.b_read' osc)+  mkAsync_ $ \osc -> (mkC C.b_read CC.b_read' osc)                       (fromIntegral bid) path                       (maybe 0 id fileOffset)                       (maybe (-1) id numFrames)@@ -508,7 +505,7 @@  -> [Int]  -> Request m () b_readChannel (Buffer bid) path fileOffset numFrames bufferOffset leaveOpen channels =-  mkAsync_ $ \osc -> (mkC C.b_readChannel C.b_readChannel' osc)+  mkAsync_ $ \osc -> (mkC C.b_readChannel CC.b_readChannel' osc)                       (fromIntegral bid) path                       (maybe 0 id fileOffset)                       (maybe (-1) id numFrames)@@ -531,7 +528,7 @@         fileOffset numFrames         leaveOpen = mkAsync_ f     where-        f osc = (mkC C.b_write C.b_write' osc)+        f osc = (mkC C.b_write CC.b_write' osc)                     (fromIntegral bid) path                     soundFileFormat                     sampleFormat@@ -544,13 +541,13 @@ b_free b = mkAsync $ do     let bid = bufferId b     M.free M.bufferIdAllocator bid-    let f osc = (mkC C.b_free C.b_free' osc) (fromIntegral bid)+    let f osc = (mkC C.b_free CC.b_free' osc) (fromIntegral bid)     return ((), f)  -- | Zero sample data. (Asynchronous) b_zero :: MonadIO m => Buffer -> Request m () b_zero buffer = mkAsync_ $ \osc ->-  (mkC C.b_zero C.b_zero' osc)+  (mkC C.b_zero CC.b_zero' osc)     (fromIntegral (bufferId buffer))  -- | Set sample values.@@ -605,7 +602,8 @@  -- | Close attached soundfile and write header information. (Asynchronous) b_close :: Monad m => Buffer -> Request m ()-b_close buffer = mkAsync_ $ \osc -> mkC C.b_close C.b_close' osc $ fromIntegral (bufferId buffer)+b_close buffer = mkAsync_ $ \osc ->+  mkC C.b_close CC.b_close' osc $ fromIntegral (bufferId buffer)  -- | Request 'BufferInfo'. b_query :: MonadIO m => Buffer -> Request m (Result N.BufferInfo)
hsc3-server.cabal view
@@ -1,5 +1,5 @@ Name:               hsc3-server-Version:            0.8.0+Version:            0.9.1 Synopsis:           SuperCollider server resource management and synchronization. Description:     This library provides abstractions for managing SuperCollider server@@ -11,14 +11,19 @@ License:            GPL License-File:       LICENSE Category:           Sound-Copyright:          Copyright (c) Stefan Kersten 2008-2013+Copyright:          Copyright (c) Stefan Kersten 2008-2014 Author:             Stefan Kersten Maintainer:         kaoskorobase@gmail.com Homepage:           https://github.com/kaoskorobase/hsc3-server+Bug-Reports:        https://github.com/kaoskorobase/hsc3-server/issues Tested-With:        GHC == 7.4 Build-Type:         Simple Cabal-Version:      >= 1.9.2 +Extra-Source-Files:+  CHANGELOG.md+  README.md+ Flag build-examples     Description:    Build example programs     Default:        False@@ -50,7 +55,7 @@       , failure >= 0.2       , hashtables >= 1.0       , hosc >= 0.14-      , hsc3 >= 0.14+      , hsc3 >= 0.15       , hsc3-process == 0.10.*       , lifted-base >= 0.1       , ListZipper
tests/Sound/SC3/Server/Allocator/Range/Test.hs view
@@ -10,7 +10,7 @@ import Control.Applicative ((<$>), (<*>)) import Test.Framework (Test, testGroup) import Test.Framework.Providers.QuickCheck2 (testProperty)-import Test.QuickCheck (Arbitrary(..), NonNegative)+import Test.QuickCheck (Arbitrary(..), NonNegative, getNonNegative)  instance (Integral i, Arbitrary i) => Arbitrary (Range i) where     arbitrary = sized <$> ((`mod`10000) <$> arbitrary) <*> arbitrary@@ -20,11 +20,12 @@     [ testGroup "Sound.SC3.Server.Allocator.Range"         [ testProperty "bounds" $ \(r :: Range Int) -> begin r <= end r         , testProperty "split" $ \(n :: NonNegative Int) (r :: Range Int) ->-            let n' = fromIntegral n+            let n' = getNonNegative n                 (r1, r2) = split n' r in             if n' > size r                 then r1 == r && null r2                 else size r1 == n' && size r2 == (size r - n')-        , testProperty "split/join" $ \(n :: Int) (r :: Range Int) -> uncurry join (split n r) == r+        , testProperty "split/join" $ \(n :: Int) (r :: Range Int) ->+            uncurry join (split n r) == r         ]     ]