haskore-supercollider 0.2 → 0.3
raw patch · 14 files changed
+76/−51 lines, 14 filesdep ~arraydep ~hoscdep ~hsc3
Dependency ranges changed: array, hosc, hsc3, opensoundcontrol-ht, process, supercollider-ht
Files
- Makefile +1/−1
- haskore-supercollider.cabal +10/−9
- src/Haskore/Interface/SuperCollider/Channel.hs +1/−1
- src/Haskore/Interface/SuperCollider/Channel/File.hs +4/−2
- src/Haskore/Interface/SuperCollider/Example.hs +7/−6
- src/Haskore/Interface/SuperCollider/Example/Air.hs +3/−3
- src/Haskore/Interface/SuperCollider/Example/Morph.hs +3/−3
- src/Haskore/Interface/SuperCollider/Play.hs +2/−2
- src/Haskore/Interface/SuperCollider/Play/Channel.hs +5/−4
- src/Haskore/Interface/SuperCollider/Play/Live.hs +7/−6
- src/Haskore/Interface/SuperCollider/Render.hs +3/−3
- src/Haskore/Interface/SuperCollider/Schedule.hs +6/−5
- src/Haskore/Interface/SuperCollider/Schedule/Channel.hs +14/−5
- src/Haskore/Interface/SuperCollider/Schedule/Install.hs +10/−1
Makefile view
@@ -12,7 +12,7 @@ pkill jackd supercollider:- (export SC_JACK_DEFAULT_OUTPUTS=alsa_pcm:playback_1,alsa_pcm:playback_2; \+ (export SC_JACK_DEFAULT_OUTPUTS=system; \ scsynth -u 57110 -D 0) supercollider-stop:
haskore-supercollider.cabal view
@@ -1,8 +1,9 @@ Name: haskore-supercollider-Version: 0.2+Version: 0.3 License: GPL License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>+Maintainer: Henning Thielemann <haskell@henning-thielemann.de> Homepage: http://www.haskell.org/haskellwiki/SuperCollider Category: Sound, Music Synopsis: Haskore back-end for SuperCollider@@ -12,7 +13,7 @@ The functions manage NodeIds and SuperCollider buffers for you. We support realtime replay and rendering to disk. Stability: Experimental-Tested-With: GHC==6.4.1, GHC==6.8.2+Tested-With: GHC==7.8.3 Cabal-Version: >=1.6 Build-Type: Simple Extra-Source-Files:@@ -26,7 +27,7 @@ Source-Repository this type: darcs location: http://code.haskell.org/haskore/revised/supercollider/- tag: 0.2+ tag: 0.3 Flag splitBase description: Choose the new smaller, split-up base package.@@ -40,10 +41,10 @@ haskore-realtime >= 0.2 && < 0.3, haskore >=0.1 && <0.3, -- for SuperCollider support- hosc >=0.13 && <0.14,- hsc3 >=0.13 && <0.14,- opensoundcontrol-ht >=0.2 && <0.3,- supercollider-ht >=0.2 && <0.3,+ hosc >=0.15 && <0.16,+ hsc3 >=0.15 && <0.16,+ opensoundcontrol-ht >=0.3 && <0.4,+ supercollider-ht >=0.3 && <0.4, bytestring >=0.9 && <0.11, -- dependency on non-negative for Haddock non-negative >=0.0.1 && <0.2,@@ -55,8 +56,8 @@ If flag(splitBase) Build-Depends:- process >=1.0 && <1.2,- array >=0.1 && <0.5,+ process >=1.0 && <1.3,+ array >=0.1 && <0.6, containers >=0.1 && <0.6, random >=1.0 && <1.1, base >=3 && <5
src/Haskore/Interface/SuperCollider/Channel.hs view
@@ -5,7 +5,7 @@ -- import qualified Sound.OpenSoundControl.Transport.Monad as Trans -import qualified Sound.SC3.UGen.IO as SCIO+import qualified Sound.SC3.UGen.Bindings.DB as SCIO import qualified Sound.SC3.UGen.Rate as SCRate import Sound.SC3.UGen.Type (UGen, constant, )
src/Haskore/Interface/SuperCollider/Channel/File.hs view
@@ -8,6 +8,8 @@ import Haskore.Interface.SuperCollider.Channel (Channel, NumberChannels) +import System.IO.Error (catchIOError)+ -- import System.Directory (removeFile) import Data.Char (isDigit) @@ -18,11 +20,11 @@ next :: NumberChannels -> IO Channel next inc =- do num <- catch+ do num <- catchIOError (do numStr <- readFile fileName if all isDigit numStr then return (read numStr)- else ioError (userError "not a number in channel file"))+ else ioError (userError "not a number in channel file")) (const $ return ChannelMng.least) -- removeFile fileName writeFile fileName (show (inc+num))
src/Haskore/Interface/SuperCollider/Example.hs view
@@ -8,11 +8,12 @@ import qualified Sound.SC3.UGen.Type as SCType import qualified Sound.SC3.UGen.Math as SCMath import qualified Sound.SC3.UGen.Rate as SCRate-import qualified Sound.SC3.UGen.Oscillator as SCOsci-import qualified Sound.SC3.UGen.Filter as SCFilter-import qualified Sound.SC3.UGen.Noise.ID as SCNoise-import qualified Sound.SC3.UGen.Envelope as SCEnv+import qualified Sound.SC3.UGen.Bindings.DB as SCOsci+import qualified Sound.SC3.UGen.Bindings.DB as SCFilter+import qualified Sound.SC3.UGen.Bindings.DB as SCNoise+import qualified Sound.SC3.UGen.Bindings.DB as SCEnv import qualified Sound.SC3.UGen.Envelope.Construct as SCEnvCons+import Sound.SC3.UGen.Envelope (Envelope(Envelope)) import Sound.SC3.UGen.Enum (DoneAction(DoNothing, PauseSynth), Envelope_Curve(EnvLin, EnvSin))@@ -338,11 +339,11 @@ tone1 = SCOsci.saw SCRate.AR (freq * SCType.mce [0.995, 1.002]) in filtered -bridge :: UGen -> UGen -> UGen -> SCEnv.Envelope UGen+bridge :: UGen -> UGen -> UGen -> Envelope UGen bridge fadeDur sustainDur lvl = let segTypes = [EnvSin, EnvLin, EnvSin] clippedFadeDur = min fadeDur sustainDur- in SCEnv.Envelope+ in Envelope [0, lvl, lvl, 0] [clippedFadeDur, max 0 (sustainDur-fadeDur), clippedFadeDur] segTypes (Just (-1)) (Just (-1))
src/Haskore/Interface/SuperCollider/Example/Air.hs view
@@ -5,9 +5,9 @@ module Haskore.Interface.SuperCollider.Example.Air where -- import qualified Sound.SC3 as SC-import qualified Sound.SC3.UGen.Oscillator as SCOsci-import qualified Sound.SC3.UGen.Filter as SCFilt-import qualified Sound.SC3.UGen.Envelope as SCUGEnv+import qualified Sound.SC3.UGen.Bindings.DB as SCOsci+import qualified Sound.SC3.UGen.Bindings.DB as SCFilt+import qualified Sound.SC3.UGen.Bindings.DB as SCUGEnv import qualified Sound.SC3.UGen.Math as SCMath import Sound.SC3.UGen.Enum (DoneAction(PauseSynth))
src/Haskore/Interface/SuperCollider/Example/Morph.hs view
@@ -6,10 +6,10 @@ module Haskore.Interface.SuperCollider.Example.Morph where -- import qualified Sound.SC3 as SC-import qualified Sound.SC3.UGen.Oscillator as SCOsci-import qualified Sound.SC3.UGen.Filter as SCFilt+import qualified Sound.SC3.UGen.Bindings.DB as SCOsci+import qualified Sound.SC3.UGen.Bindings.DB as SCFilt -- import qualified Sound.SC3.UGen.Math as SCMath-import qualified Sound.SC3.UGen.Envelope as SCEnv+import qualified Sound.SC3.UGen.Bindings.DB as SCEnv import qualified Sound.SC3.UGen.Envelope.Construct as SCEnvCons import Sound.SC3.UGen.Enum (DoneAction(PauseSynth), {- EnvCurve(EnvSin,EnvExp) -} )
src/Haskore/Interface/SuperCollider/Play.hs view
@@ -26,8 +26,8 @@ -- import Sound.SC3.UGen.UGen (UGen) import Sound.OSC.Transport.Monad (Transport, waitReply, )-import qualified Sound.OpenSoundControl.Type as OSC-import qualified Sound.OpenSoundControl.Time as OSCTime+import qualified Sound.OSC.Type as OSC+import qualified Sound.OSC.Time as OSCTime import qualified Haskore.Melody as Melody
src/Haskore/Interface/SuperCollider/Play/Channel.hs view
@@ -7,19 +7,20 @@ {-# DEPRECATED "use Haskore.Interface.SuperCollider.Schedule.Channel instead" #-} where -import qualified Sound.SC3.UGen.Oscillator as SCOsci-import qualified Sound.SC3.UGen.Filter as SCFilt+import qualified Sound.SC3.UGen.Bindings.DB as SCOsci+import qualified Sound.SC3.UGen.Bindings.DB as SCFilt import Sound.SC3.UGen.Rate (Rate(KR)) import qualified Sound.SC3.Server.PlayEasy as SCPlay import qualified Sound.SC3.Server.Command as SCCmd+import Sound.SC3.Server.Enum (AddAction(AddToTail)) import Sound.SC3.UGen.Type (UGen) import Sound.OSC.Transport.FD (Transport) import Sound.OSC.Transport.FD.UDP (UDP)-import qualified Sound.OpenSoundControl.Transport.File as File+import qualified Sound.OSC.Transport.File as File import qualified Haskore.Interface.SuperCollider.Channel.State as ChannelState import qualified Haskore.Interface.SuperCollider.Channel as Channel@@ -124,7 +125,7 @@ (Schedule.fromPerformance [Schedule.installUGenMsg effectsName Schedule.defaultChannel effect]- [SCCmd.s_new effectsName sid SCCmd.AddToTail SCPlay.homeId []]+ [SCCmd.s_new effectsName sid AddToTail SCPlay.homeId []] pf) >> return ()
src/Haskore/Interface/SuperCollider/Play/Live.hs view
@@ -15,12 +15,12 @@ module Haskore.Interface.SuperCollider.Play.Live where import qualified Sound.SC3 as SC-import qualified Sound.SC3.UGen.IO as SCIO import qualified Sound.SC3.UGen.UGen as SCUGen-import qualified Sound.SC3.UGen.Oscillator as SCOsci-import qualified Sound.SC3.UGen.Filter as SCFilt+import qualified Sound.SC3.UGen.Bindings.DB as SCIO+import qualified Sound.SC3.UGen.Bindings.DB as SCOsci+import qualified Sound.SC3.UGen.Bindings.DB as SCFilt+import qualified Sound.SC3.UGen.Bindings.DB as SCNoise import qualified Sound.SC3.UGen.Envelope as SCUGEnv-import qualified Sound.SC3.UGen.Noise.ID as SCNoise import qualified Sound.SC3.UGen.UId as SCUId import Sound.SC3.UGen.Enum (DoneAction(DoNothing, PauseSynth))@@ -28,6 +28,7 @@ import qualified Sound.SC3.Server.PlayEasy as SCPlay import qualified Sound.SC3.Server.Command as SCCmd+import Sound.SC3.Server.Enum (AddAction(AddToTail, AddToHead)) import Sound.SC3.UGen.Type (UGen, constant, ) @@ -234,7 +235,7 @@ (Schedule.fromPerformance [Schedule.installUGenMsg effectsName Schedule.defaultChannel effect]- [SCCmd.s_new effectsName sid SCCmd.AddToTail SCPlay.homeId []]+ [SCCmd.s_new effectsName sid AddToTail SCPlay.homeId []] pf) >> return () @@ -254,7 +255,7 @@ (return ()) (\pitch -> do SCPlay.withSC3 $- Play.playAtom SCPlay.noId name $+ Play.playAtom SCPlay.autoId name $ ("pitch", Pitch.intToFreq pitch) : ("velocity", 1) : [] print (Pitch.fromInt pitch))
src/Haskore/Interface/SuperCollider/Render.hs view
@@ -17,8 +17,8 @@ -- import Sound.OpenSoundControl.Transport (Transport) -- import qualified Sound.OpenSoundControl.Transport.Monad as Trans -import qualified Sound.OpenSoundControl.Type as OSC-import qualified Sound.OpenSoundControl.Time as OSCTime+import qualified Sound.OSC.Type as OSC+import qualified Sound.OSC.Time as OSCTime import qualified Data.ByteString.Lazy as B @@ -31,7 +31,7 @@ import qualified Numeric.NonNegative.Wrapper as NonNeg -import System.Cmd (rawSystem)+import System.Process (rawSystem) import System.Exit (ExitCode) import Data.Array(Array, Ix, (!), listArray)
src/Haskore/Interface/SuperCollider/Schedule.hs view
@@ -19,10 +19,11 @@ import qualified Sound.SC3.Server.Command as SCCmd import qualified Sound.SC3.Server.PlayEasy as SCPlay+import Sound.SC3.Server.Enum (AddAction(AddToTail, AddToHead)) import Sound.SC3.UGen.Type (UGen) -import qualified Sound.OpenSoundControl.Type as OSC+import qualified Sound.OSC.Type as OSC import qualified Haskore.Interface.SuperCollider.Note as Note import qualified Haskore.Interface.SuperCollider.Performance as SCPf@@ -107,7 +108,7 @@ (installUGenMsg effectsName effectChannel (globalEffect (Channel.readUGen numChan instrumentChannel)) : installSoundsMsg instrumentChannel soundAssigns)- [SCCmd.s_new effectsName sid SCCmd.AddToTail SCPlay.homeId []]+ [SCCmd.s_new effectsName sid AddToTail SCPlay.homeId []] pf fromRhythmicMusicSoundEffects ::@@ -138,7 +139,7 @@ in fromPerformance (installUGenMsg effectsName effectChannel globalEffect : installChannelSoundsMsg soundChannelAssigns)- [SCCmd.s_new effectsName sid SCCmd.AddToTail SCPlay.homeId []]+ [SCCmd.s_new effectsName sid AddToTail SCPlay.homeId []] pf -- slightly inconsistent naming with respect to Music.fromMelodyNullAttr@@ -236,7 +237,7 @@ resetMsgs :: [OSC.Message] resetMsgs = [SCCmd.g_freeAll [SCPlay.rootId],- SCCmd.g_new [(SCPlay.homeId, SCCmd.AddToTail, SCPlay.rootId)]]+ SCCmd.g_new [(SCPlay.homeId, AddToTail, SCPlay.rootId)]] atomPlayMsg ::@@ -245,7 +246,7 @@ [(String, Double)] -> OSC.Message atomPlayMsg sid name =- SCCmd.s_new name sid SCCmd.AddToHead SCPlay.homeId+ SCCmd.s_new name sid AddToHead SCPlay.homeId -- adding to head is necessary for allowing global effects like in the Live module
src/Haskore/Interface/SuperCollider/Schedule/Channel.hs view
@@ -5,17 +5,18 @@ -} module Haskore.Interface.SuperCollider.Schedule.Channel where -import qualified Sound.SC3.UGen.Oscillator as SCOsci-import qualified Sound.SC3.UGen.Filter as SCFilt+import qualified Sound.SC3.UGen.Bindings.DB as SCOsci+import qualified Sound.SC3.UGen.Bindings.DB as SCFilt import Sound.SC3.UGen.Rate (Rate(KR)) import qualified Sound.SC3.Server.PlayEasy as SCPlay import qualified Sound.SC3.Server.Command as SCCmd+import Sound.SC3.Server.Enum (AddAction(AddToTail)) import Sound.SC3.UGen.Type (UGen) -import qualified Sound.OpenSoundControl.Type as OSC+import qualified Sound.OSC.Type as OSC import qualified Haskore.Interface.SuperCollider.Channel as Channel import Haskore.Interface.SuperCollider.Channel (Channel, NumberChannels)@@ -44,7 +45,8 @@ import Control.Monad.Trans.State (StateT, runStateT, get, put, ) import Control.Monad.Trans.Writer (Writer, tell, runWriter, ) import Control.Monad.Trans.Class (lift, )-import Control.Monad (liftM2, )+import Control.Monad (liftM2, liftM, ap, )+import Control.Applicative (Applicative, pure, (<*>), ) @@ -55,6 +57,13 @@ Environment {unwrapEnvironment :: StateT (Channel, NumberChannels) (Writer [OSC.Message]) a} +instance Functor Environment where+ fmap = liftM++instance Applicative Environment where+ (<*>) = ap+ pure = return+ instance Monad Environment where x >>= y = Environment $ unwrapEnvironment . y =<< unwrapEnvironment x return = Environment . return@@ -190,7 +199,7 @@ Schedule.fromPerformance (Schedule.installUGenMsg effectsName Schedule.defaultChannel effect : installSounds)- [SCCmd.s_new effectsName sid SCCmd.AddToTail SCPlay.homeId []]+ [SCCmd.s_new effectsName sid AddToTail SCPlay.homeId []] pf
src/Haskore/Interface/SuperCollider/Schedule/Install.hs view
@@ -8,7 +8,7 @@ import Sound.SC3.UGen.Type (UGen) -import qualified Sound.OpenSoundControl.Type as OSC+import qualified Sound.OSC.Type as OSC import qualified Haskore.Interface.SuperCollider.Example as Example import qualified Haskore.Interface.SuperCollider.Play as Play@@ -29,6 +29,8 @@ import Control.Monad.Trans.Writer (Writer, tell, runWriter)+import Control.Monad (liftM, ap, )+import Control.Applicative (Applicative, pure, (<*>), ) @@ -39,6 +41,13 @@ -} newtype Environment a = Environment {unwrapEnvironment :: Writer [OSC.Message] a}++instance Functor Environment where+ fmap = liftM++instance Applicative Environment where+ (<*>) = ap+ pure = return instance Monad Environment where x >>= y = Environment $ unwrapEnvironment . y =<< unwrapEnvironment x