haskore-supercollider 0.1.2.2 → 0.2
raw patch · 16 files changed
+138/−154 lines, 16 filesdep ~arraydep ~bytestringdep ~containers
Dependency ranges changed: array, bytestring, containers, haskore-realtime, hosc, hsc3, opensoundcontrol-ht, process, supercollider-ht, transformers
Files
- Makefile +4/−4
- haskore-supercollider.cabal +12/−14
- src/Haskore/Interface/SuperCollider/Channel.hs +3/−4
- src/Haskore/Interface/SuperCollider/Example.hs +30/−30
- src/Haskore/Interface/SuperCollider/Example/Air.hs +6/−6
- src/Haskore/Interface/SuperCollider/Example/Morph.hs +7/−7
- src/Haskore/Interface/SuperCollider/Play.hs +27/−28
- src/Haskore/Interface/SuperCollider/Play/Channel.hs +4/−6
- src/Haskore/Interface/SuperCollider/Play/Install.hs +7/−9
- src/Haskore/Interface/SuperCollider/Play/Life.hs +0/−5
- src/Haskore/Interface/SuperCollider/Play/Live.hs +4/−4
- src/Haskore/Interface/SuperCollider/Render.hs +7/−6
- src/Haskore/Interface/SuperCollider/Schedule.hs +17/−19
- src/Haskore/Interface/SuperCollider/Schedule/Channel.hs +4/−6
- src/Haskore/Interface/SuperCollider/Schedule/Install.hs +5/−5
- src/Haskore/Interface/SuperCollider/SoundMap.hs +1/−1
Makefile view
@@ -5,11 +5,11 @@ jack: # -n 2 is default, larger values are not supported- jackd -d alsa -r 44100 -n 3 -d hw:0 &-# jackd -d alsa -r 44100 -d hw:0 &+ jackd --nozombies -d alsa -Xseq -r 44100 -n 3 -d hw:0 &+# jackd -d alsa -Xseq -r 44100 -d hw:0 & jack-stop:- kill `pgrep jackd`+ pkill jackd supercollider: (export SC_JACK_DEFAULT_OUTPUTS=alsa_pcm:playback_1,alsa_pcm:playback_2; \@@ -25,7 +25,7 @@ # block size 4096 freezes the machine # more than two buffer blocks (-n 2) are not supported # jackd --realtime -d alsa -r 44100 -p 4096 -d hw:0 &- jackd --realtime -d alsa -r 44100 -d hw:0 &+ jackd --realtime -d alsa -Xseq -r 44100 -d hw:0 & scj-rt: jack-rt supercollider echo "start with 'sudo make scj-rt'"
haskore-supercollider.cabal view
@@ -1,5 +1,5 @@ Name: haskore-supercollider-Version: 0.1.2.2+Version: 0.2 License: GPL License-File: LICENSE Author: Henning Thielemann <haskell@henning-thielemann.de>@@ -26,7 +26,7 @@ Source-Repository this type: darcs location: http://code.haskell.org/haskore/revised/supercollider/- tag: 0.1.2.2+ tag: 0.2 Flag splitBase description: Choose the new smaller, split-up base package.@@ -37,27 +37,27 @@ Library Build-Depends:- haskore-realtime >= 0.1 && < 0.2,+ haskore-realtime >= 0.2 && < 0.3, haskore >=0.1 && <0.3, -- for SuperCollider support- hosc >=0.8 && <0.9,- hsc3 >=0.8 && <0.9,- opensoundcontrol-ht >=0.1 && <0.2,- supercollider-ht >=0.1 && <0.2,- bytestring >=0.9 && <1.0,+ hosc >=0.13 && <0.14,+ hsc3 >=0.13 && <0.14,+ opensoundcontrol-ht >=0.2 && <0.3,+ supercollider-ht >=0.2 && <0.3,+ bytestring >=0.9 && <0.11, -- dependency on non-negative for Haddock non-negative >=0.0.1 && <0.2, event-list >=0.0.6 && <0.2, data-accessor >=0.2 && <0.3, utility-ht >=0.0.3 && <0.1, unix >= 2.0 && <3,- transformers >=0.2 && <0.3+ transformers >=0.2 && <0.5 If flag(splitBase) Build-Depends:- process >=1.0 && <1.1,- array >=0.1 && <0.4,- containers >=0.1 && <0.4,+ process >=1.0 && <1.2,+ array >=0.1 && <0.5,+ containers >=0.1 && <0.6, random >=1.0 && <1.1, base >=3 && <5 Else@@ -85,8 +85,6 @@ Haskore.Interface.SuperCollider.Schedule Haskore.Interface.SuperCollider.Schedule.Install Haskore.Interface.SuperCollider.Schedule.Channel- -- deprecated- Haskore.Interface.SuperCollider.Play.Life Other-modules: Haskore.Interface.SuperCollider.Timer Haskore.General.IdGenerator
src/Haskore/Interface/SuperCollider/Channel.hs view
@@ -5,10 +5,9 @@ -- import qualified Sound.OpenSoundControl.Transport.Monad as Trans -import qualified Sound.SC3.UGen.UGen as SCUGen import qualified Sound.SC3.UGen.IO as SCIO import qualified Sound.SC3.UGen.Rate as SCRate-import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen, constant, ) type Channel = Int@@ -36,8 +35,8 @@ readUGen :: NumberChannels -> Channel -> UGen readUGen numChan chan =- SCIO.in' numChan SCRate.AR (SCUGen.Constant (fromIntegral chan))+ SCIO.in' numChan SCRate.AR (constant chan) writeUGen :: Channel -> UGen -> UGen writeUGen chan =- SCIO.out (SCUGen.Constant (fromIntegral chan))+ SCIO.out (constant chan)
src/Haskore/Interface/SuperCollider/Example.hs view
@@ -5,7 +5,7 @@ import qualified Haskore.Interface.SuperCollider.Schedule as Schedule import qualified Haskore.Interface.SuperCollider.SoundMap as SoundMap -import qualified Sound.SC3.UGen.UGen as SCUGen+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@@ -15,9 +15,9 @@ import qualified Sound.SC3.UGen.Envelope.Construct as SCEnvCons import Sound.SC3.UGen.Enum (DoneAction(DoNothing, PauseSynth),- EnvCurve(EnvLin, EnvSin))+ Envelope_Curve(EnvLin, EnvSin)) -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen, ) import Haskore.Melody.Standard as StdMelody import qualified Haskore.Melody as Melody@@ -38,12 +38,14 @@ import qualified Data.Accessor.Basic as Accessor +import System.Exit (ExitCode, ) import Data.List (genericLength)-import Data.Ratio(Rational,(%))+import Data.Ratio ((%)) import System.Random (randomRs, mkStdGen) + latency :: Schedule.Time latency = 0.1 @@ -53,30 +55,28 @@ play = Play.schedule latency . snd -render :: Song -> IO ()+render :: Song -> IO ExitCode render (fileName, schedule) = do B.writeFile (fileName++".osc") (Render.byteStringFromSchedule schedule) Render.runSCSynth [] 2 Render.AIFF Render.Int16 44100 fileName- return () - glissandoStringsUGen :: UGen -> UGen -> UGen glissandoStringsUGen vel freq = let -- control = 2*freq - SCFilter.lag freq 0.2 control = SCFilter.lag freq 0.2 volume = vel * 0.3- tone0 = SCOsci.saw SCRate.AR (control * SCUGen.MCE [0.998, 1.005])- tone1 = SCOsci.saw SCRate.AR (control * SCUGen.MCE [0.995, 1.002])+ tone0 = SCOsci.saw SCRate.AR (control * SCType.mce [0.998, 1.005])+ tone1 = SCOsci.saw SCRate.AR (control * SCType.mce [0.995, 1.002]) in (tone0 + tone1) * volume reverb :: UGen -> UGen -> UGen reverb dec x = 0.7*x + 0.03 * sum (map- (\delfl -> let del = SCUGen.Constant delfl+ (\delfl -> let del = SCType.constant (delfl :: Double) in SCFilter.combN x del del dec)- (take 8 (randomRs (0.01,0.03) (mkStdGen 2347))))+ (take 8 (randomRs (0.01, 0.03) (mkStdGen 2347)))) filterStrings :: SoundMap.Instrument filterStrings =@@ -115,7 +115,7 @@ (\detune phase -> SCOsci.lfSaw SCRate.AR (freq*detune) phase) detunes phases (tonesLeft,tonesRight) = splitAt n tones- in volume * SCUGen.MCE [sum tonesLeft, sum tonesRight]+ in volume * SCType.mce [sum tonesLeft, sum tonesRight] modulatedStrings :: SoundMap.Instrument modulatedStrings =@@ -131,7 +131,7 @@ (randomRs (2,5) (mkStdGen 105)) (randomRs (0,2*pi) (mkStdGen 234)) (tonesLeft,tonesRight) = splitAt n $ take (2*n) tones- in volume * SCUGen.MCE [sum tonesLeft, sum tonesRight]+ in volume * SCType.mce [sum tonesLeft, sum tonesRight] brass :: SoundMap.Instrument brass =@@ -165,7 +165,7 @@ let env = SCEnv.xLine SCRate.KR 1.5 0.1 1 DoNothing saw = SCEnv.xLine SCRate.KR 1 0.05 5 DoNothing * SCOsci.saw SCRate.AR- (SCUGen.MCE [freq*(1-detune), freq*(1+detune)])+ (SCType.mce [freq*(1-detune), freq*(1+detune)]) prc = SCFilter.rlpf saw (exp (2*vel*env) * freq * 1.2) 0.05 in prc * 0.1 @@ -202,7 +202,7 @@ harpsichord = SoundMap.instrumentFromUGen $ \ vel freq -> let env = SCEnv.xLine SCRate.KR 1.5 0.03 1 PauseSynth- saw = SCOsci.saw SCRate.AR (SCUGen.MCE [freq*0.995, freq*1.005]) * env * vel+ saw = SCOsci.saw SCRate.AR (SCType.mce [freq*0.995, freq*1.005]) * env * vel in saw @@ -217,7 +217,7 @@ colorDust sampleRate = SoundMap.instrumentFromUGen $ \ _vel freq -> 0.0005 * SCFilter.rlpf- (SCUGen.Constant sampleRate * SCNoise.dust seed SCRate.AR 10)+ (SCType.constant sampleRate * SCNoise.dust seed SCRate.AR 10) freq 0.01 @@ -227,14 +227,14 @@ cubicSine :: UGen -> UGen cubicSine freq =- let osci = SCOsci.sinOsc SCRate.AR (SCUGen.MCE [freq*1.003, freq*0.997]) 0+ let osci = SCOsci.sinOsc SCRate.AR (SCType.mce [freq*1.003, freq*0.997]) 0 in osci*osci*osci cubicPhaserSaw :: UGen -> UGen cubicPhaserSaw freq = let osci dfreq = sum $ map (SCOsci.saw SCRate.AR) [dfreq*1.003, dfreq*0.997] osciCubic dfreq = osci dfreq * osci dfreq * osci dfreq- in SCUGen.MCE [osciCubic (freq*1.002), osciCubic (freq*0.998)]+ in SCType.mce [osciCubic (freq*1.002), osciCubic (freq*0.998)] @@ -243,7 +243,7 @@ midiInstrMap :: SoundMap.InstrumentTable MidiMusic.Instr midiInstrMap = [(MidiMusic.AcousticGrandPiano, sawPerc),- (MidiMusic.SynthBass1, dynPerc (SCUGen.Constant 0.003)),+ (MidiMusic.SynthBass1, dynPerc 0.003), (MidiMusic.SynthBrass1, brass), (MidiMusic.StringEnsemble1, strings)] @@ -334,18 +334,18 @@ env = SCEnv.envGen SCRate.KR 1 2 0 1 PauseSynth (SCEnvCons.envSine totalDur 1) -- (bridge 1 dur 1)- tone0 = SCOsci.saw SCRate.AR (freq * SCUGen.MCE [0.998, 1.005])- tone1 = SCOsci.saw SCRate.AR (freq * SCUGen.MCE [0.995, 1.002])+ tone0 = SCOsci.saw SCRate.AR (freq * SCType.mce [0.998, 1.005])+ tone1 = SCOsci.saw SCRate.AR (freq * SCType.mce [0.995, 1.002]) in filtered -bridge :: UGen -> UGen -> UGen -> [UGen]+bridge :: UGen -> UGen -> UGen -> SCEnv.Envelope UGen bridge fadeDur sustainDur lvl = let segTypes = [EnvSin, EnvLin, EnvSin] clippedFadeDur = min fadeDur sustainDur- in SCEnvCons.env+ in SCEnv.Envelope [0, lvl, lvl, 0] [clippedFadeDur, max 0 (sustainDur-fadeDur), clippedFadeDur]- segTypes (-1) (-1)+ segTypes (Just (-1)) (Just (-1)) seed :: Int seed = 0@@ -354,7 +354,7 @@ hihat = SoundMap.drumFromUGen $ \ vel -> let noise = SCNoise.whiteNoise seed SCRate.AR- in SCFilter.hpf noise (SCUGen.MCE [4000, 4001]) *+ in SCFilter.hpf noise (SCType.mce [4000, 4001]) * SCEnv.xLine SCRate.KR 1 0.01 0.2 DoNothing * vel * 0.25 bassdrum :: SoundMap.Drum@@ -362,7 +362,7 @@ SoundMap.drumFromUGen $ \ vel -> let freq = SCEnv.xLine SCRate.KR 100 10 0.5 DoNothing env = SCEnv.xLine SCRate.KR 1 0.1 0.5 DoNothing * vel * 0.8- osci = SCOsci.sinOsc SCRate.AR freq 0 * SCUGen.MCE [env,env]+ osci = SCOsci.sinOsc SCRate.AR freq 0 * SCType.mce [env,env] in SCMath.clip2 0.5 osci -- in 0.7 * tanh osci @@ -372,7 +372,7 @@ SoundMap.drumFromUGen $ \ vel -> let freq = SCEnv.xLine SCRate.KR 100 10 0.5 DoNothing env = SCEnv.xLine SCRate.KR 1.5 0.1 0.5 DoNothing * vel * 0.8- osci = SCOsci.sinOsc SCRate.AR freq 0 * SCUGen.MCE [env,env]+ osci = SCOsci.sinOsc SCRate.AR freq 0 * SCType.mce [env,env] distorted = sin (osci^(3::Int)) in distorted @@ -384,7 +384,7 @@ env = SCEnv.xLine SCRate.KR 1 0.1 0.5 DoNothing * vel * 0.8 modu = SCOsci.sinOsc SCRate.AR (2.17*freq) 0 * (2*env) osci = SCOsci.sinOsc SCRate.AR freq modu- in osci * SCUGen.MCE [env,env]+ in osci * SCType.mce [env,env] bassdrumNoisy :: SoundMap.Drum@@ -399,7 +399,7 @@ SCEnv.xLine SCRate.KR 2 0.00001 0.15 PauseSynth noise = SCFilter.lpf (SCNoise.whiteNoise seed SCRate.AR) 5000 * nsenv drm = SCMath.clip2 0.5 (osci + noise) * vel * 0.8- in SCUGen.MCE [drm,drm]+ in SCType.mce [drm,drm] @@ -528,7 +528,7 @@ (SoundMap.registerInstrument dynPercAssign $ \dynPercUG -> SoundMap.registerInstrument sawPercAssign $ \sawPercUG -> let lfoSine = exp (SCOsci.sinOsc SCRate.KR 0.2 (-pi/2) * 0.5) * 1000- lfoSquare = exp (SCOsci.pulse SCRate.KR 5.1 0.5 * 1) * 1000+ lfoSquare = exp (SCOsci.impulse SCRate.KR 5.1 0.5 * 1) * 1000 mix = SCFilter.rlpf (0.5 * sawPercUG) lfoSine 0.1 + SCFilter.rlpf (0.5 * dynPercUG) lfoSquare 0.1
src/Haskore/Interface/SuperCollider/Example/Air.hs view
@@ -1,11 +1,10 @@ {- |-Demonstration song using with SuperCollider and global effects.+Demonstration song using SuperCollider and global effects. This was arranged for the HAL2 meeting in July 2007, Leipzig. -} module Haskore.Interface.SuperCollider.Example.Air where -- import qualified Sound.SC3 as SC-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.Envelope as SCUGEnv@@ -14,7 +13,8 @@ import Sound.SC3.UGen.Enum (DoneAction(PauseSynth)) import Sound.SC3.UGen.Rate (Rate(KR)) -import Sound.SC3.UGen.UGen (UGen)+import qualified Sound.SC3.UGen.Type as SCType+import Sound.SC3.UGen.Type (UGen) import qualified Haskore.Interface.SuperCollider.Example as Example import qualified Haskore.Interface.SuperCollider.Play as Play@@ -304,9 +304,9 @@ schedule = CSchedule.fromRhythmicMusic $ do bass <- installSound SoundMap.with0Attributes "bass"- (Example.fmBass (SCUGen.MCE [0.99,1.01]))+ (Example.fmBass (SCType.mce [0.99,1.01])) guitar <- installSound SoundMap.with0Attributes "guitar"- (Example.fmGuitar (SCUGen.MCE [2.99,3.01]))+ (Example.fmGuitar (SCType.mce [2.99,3.01])) strings <- installSound SoundMap.with1Attribute "strings" envelopedStrings harpsichord <- installSound SoundMap.with0Attributes "harpsichord"@@ -320,7 +320,7 @@ bassdrum <- installSound SoundMap.with0Attributes "bassdrum" Example.bassdrum let lfoSine = 1000 * exp- (0.3 * SCOsci.sinOsc KR 0.1 (SCUGen.MCE [-pi/2, 0]) ++ (0.3 * SCOsci.sinOsc KR 0.1 (SCType.mce [-pi/2, 0]) + 0.3 * SCOsci.sinOsc KR (sqrt 0.03) 0) mix = flip SCMath.clip2 1 $ 0.2 * ( ugenFromSound bass +
src/Haskore/Interface/SuperCollider/Example/Morph.hs view
@@ -6,7 +6,6 @@ module Haskore.Interface.SuperCollider.Example.Morph where -- import qualified Sound.SC3 as SC-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.Math as SCMath@@ -16,7 +15,8 @@ import Sound.SC3.UGen.Enum (DoneAction(PauseSynth), {- EnvCurve(EnvSin,EnvExp) -} ) import Sound.SC3.UGen.Rate (Rate(KR,AR)) -import Sound.SC3.UGen.UGen (UGen)+import qualified Sound.SC3.UGen.Type as SCType+import Sound.SC3.UGen.Type (UGen) import qualified Haskore.Interface.SuperCollider.Example as Example import qualified Haskore.Interface.SuperCollider.Play as Play@@ -51,9 +51,9 @@ let dur = 0.3 env = SCEnv.envGen KR 1 1 0 1 PauseSynth (SCEnvCons.envSine dur 1)- in 0.2 * env * SCUGen.MCE [1+pan,1-pan] *+ in 0.2 * env * SCType.mce [1+pan,1-pan] * SCFilt.hpf- (SCOsci.pulse AR (SCUGen.MCE [freq*0.995, freq*1.005]) 0.5)+ (SCOsci.pulse AR (SCType.mce [freq*0.995, freq*1.005]) 0.5) (4000 * 0.5**env) -} @@ -70,9 +70,9 @@ [EnvSin, EnvExp] (-1) (-1) -}- in vel * env * SCUGen.MCE [1+pan,1-pan] *+ in vel * env * SCType.mce [1+pan,1-pan] * SCFilt.hpf- (SCOsci.saw AR (SCUGen.MCE [freq*0.995, freq*1.005]))+ (SCOsci.saw AR (SCType.mce [freq*0.995, freq*1.005])) (2000 * 0.5**env) @@ -114,7 +114,7 @@ bassSquare :: SoundMap.Instrument bassSquare = SoundMap.instrumentFromUGen $ \ vel freq ->- vel * SCOsci.pulse AR (SCUGen.MCE [freq*0.999, freq*1.001])+ vel * SCOsci.pulse AR (SCType.mce [freq*0.999, freq*1.001]) (0.5 + 0.3 * SCOsci.sinOsc KR 0.3 0) infix 7 +:
src/Haskore/Interface/SuperCollider/Play.hs view
@@ -25,8 +25,8 @@ -- import Sound.SC3.UGen.UGen (UGen) -import qualified Sound.OpenSoundControl.Transport.Monad as Trans-import Sound.OpenSoundControl.OSC (OSC(Bundle))+import Sound.OSC.Transport.Monad (Transport, waitReply, )+import qualified Sound.OpenSoundControl.Type as OSC import qualified Sound.OpenSoundControl.Time as OSCTime @@ -83,9 +83,9 @@ Schedule.fromMelody sound -performanceTrans :: (Trans.C m, MonadIO m) =>+performanceTrans :: (Transport m, MonadIO m) => Time ->- [OSC] ->+ [OSC.Message] -> SCPf.T Time -> m () performanceTrans latency installMsgs =@@ -95,7 +95,7 @@ performance :: Time ->- [OSC] ->+ [OSC.Message] -> SCPf.T Time -> IO () performance latency installMsgs =@@ -128,14 +128,13 @@ defaultLatency :: Time defaultLatency = 0.1 - -- should be moved to Hsc or supercollider-ht-timeStamp :: Time -> Time -> [OSC] -> OSC-timeStamp start t = Bundle $ OSCTime.UTCr $ NonNeg.toNumber (start+t)+timeStamp :: Time -> Time -> [OSC.Message] -> OSC.Bundle+timeStamp start t msgs = OSC.Bundle (OSCTime.ut_to_ntpr $ NonNeg.toNumber (start+t)) msgs installSound ::- (Trans.C m, SoundMap.SoundParameters params) =>+ (Transport m, SoundMap.SoundParameters params) => String -> Sound params -> m ()@@ -143,13 +142,13 @@ SCPlay.simpleSync $ Schedule.installSoundMsg name Schedule.defaultChannel instr -playAtom :: Trans.C m =>+playAtom :: Transport m => SCPlay.NodeId -> String -> [(String,Double)] -> m () playAtom sid name params =- Trans.send (Schedule.atomPlayMsg sid name params)+ SCPlay.send (Schedule.atomPlayMsg sid name params) @@ -186,8 +185,8 @@ -} -scheduleWithPlayer :: Trans.C m =>- (TimeList.T Time OSC -> m ()) ->+scheduleWithPlayer :: Transport m =>+ (TimeList.T Time OSC.Message -> m ()) -> Schedule.T -> m () scheduleWithPlayer player sc =@@ -203,8 +202,8 @@ http://lists.lurk.org/pipermail/haskell-art/2008-February/000102.html -} let isc = Schedule.initial sc- mapM_ Trans.send isc- mapM_ (const (Trans.wait "/done" >> return ())) isc+ mapM_ SCPlay.send isc+ mapM_ (const (waitReply "/done" >> return ())) isc player (Schedule.body sc) return ()@@ -218,18 +217,18 @@ that is, the maximal expected delay of creating and sending messages to the SuperCollider server. -}-messagesGrouped :: (Trans.C m) =>+messagesGrouped :: (Transport m) => Timer.T m -> Time ->- TimeList.T Time OSC -> m ()+ TimeList.T Time OSC.Message -> m () messagesGrouped timer latency = liftM (const ()) . TimeList.runTimeStampGrouped timer- (\time -> Trans.send . timeStamp latency time)+ (\time -> SCPlay.send . timeStamp latency time) {- (\time msgs -> liftIO (print time) >>- Trans.send (timeStamp latency time msgs))+ SCPlay.send (timeStamp latency time msgs)) -} {-@@ -237,10 +236,10 @@ This results in splitted events which actually should occur at the same time. This makes SuperCollider switching the order messages in certain occasions. -}-messagesGroupedManual :: (Trans.C m) =>+messagesGroupedManual :: (Transport m) => Timer.T m -> Time ->- TimeList.T Time OSC -> m ()+ TimeList.T Time OSC.Message -> m () messagesGroupedManual timer latency = liftM (const ()) . -- (\ pf -> liftIO Timer.getTimeSeconds >>= \startTime ->@@ -255,25 +254,25 @@ (liftIO $ putStr (show (time-startTime) ++ ": ") >> (print $ map eventToMark es)) >> -}- (Trans.send . timeStamp latency time)) -- pf)+ (SCPlay.send . timeStamp latency time)) -- pf) . TimeList.collectCoincident -messagesSingly :: (Trans.C m) =>+messagesSingly :: (Transport m) => Timer.T m -> Time ->- TimeList.T Time OSC -> m ()+ TimeList.T Time OSC.Message -> m () messagesSingly timer latency = liftM (const ()) . TimeList.runTimeStamp timer (\time -> -- (liftIO $ print $ eventToMark e) >>- (Trans.send . timeStamp latency time . (:[])))+ (SCPlay.send . timeStamp latency time . (:[]))) -messagesSimple :: (Trans.C m) =>+messagesSimple :: (Transport m) => Timer.T m ->- TimeList.T Time OSC ->+ TimeList.T Time OSC.Message -> m () messagesSimple timer = liftM (const ()) .- TimeList.run timer Trans.send+ TimeList.run timer SCPlay.send
src/Haskore/Interface/SuperCollider/Play/Channel.hs view
@@ -7,7 +7,6 @@ {-# DEPRECATED "use Haskore.Interface.SuperCollider.Schedule.Channel instead" #-} where -import qualified Sound.SC3.UGen.UGen as SCUGen import qualified Sound.SC3.UGen.Oscillator as SCOsci import qualified Sound.SC3.UGen.Filter as SCFilt @@ -16,11 +15,11 @@ import qualified Sound.SC3.Server.PlayEasy as SCPlay import qualified Sound.SC3.Server.Command as SCCmd -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen) -import Sound.OpenSoundControl.Transport (Transport)-import Sound.OpenSoundControl.Transport.UDP (UDP)-import qualified Sound.OpenSoundControl.Transport.File as File+import Sound.OSC.Transport.FD (Transport)+import Sound.OSC.Transport.FD.UDP (UDP)+import qualified Sound.OpenSoundControl.Transport.File as File import qualified Haskore.Interface.SuperCollider.Channel.State as ChannelState import qualified Haskore.Interface.SuperCollider.Channel as Channel@@ -48,7 +47,6 @@ import qualified Haskore.General.IdGenerator as IdGen -import qualified Control.Monad.Trans.State as State import Control.Monad.Trans.State (StateT, evalStateT, ) import Control.Monad.Trans.Reader (ReaderT, ) import Control.Monad.Trans.Class (lift, )
src/Haskore/Interface/SuperCollider/Play/Install.hs view
@@ -10,13 +10,11 @@ {-# DEPRECATED "use Haskore.Interface.SuperCollider.Schedule.Install instead" #-} where -import qualified Sound.SC3.UGen.UGen as SCUGen- import qualified Sound.SC3.Server.PlayEasy as SCPlay -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen) -import qualified Sound.OpenSoundControl.Transport.Monad as Trans+import Sound.OSC.Transport.Monad (Transport, ) import Haskore.Interface.SuperCollider.Schedule.Install (Sound(..),@@ -40,7 +38,7 @@ installSound ::- (Trans.C m, SoundMap.SoundParameters params) =>+ (Transport m, SoundMap.SoundParameters params) => (parameterTuple -> AttributeList, graph -> SoundMap.Sound params) -> String -> graph ->@@ -51,7 +49,7 @@ installSound0 ::- (Trans.C m, SoundMap.SoundParameters params) =>+ (Transport m, SoundMap.SoundParameters params) => String -> SoundMap.Sound params -> m (Sound params ())@@ -59,7 +57,7 @@ installSound SoundMap.with0Attributes installSound1 ::- (Trans.C m, SoundMap.SoundParameters params) =>+ (Transport m, SoundMap.SoundParameters params) => String -> (UGen -> SoundMap.Sound params) -> m (Sound params Double)@@ -67,7 +65,7 @@ installSound SoundMap.with1Attribute installSound2 ::- (Trans.C m, SoundMap.SoundParameters params) =>+ (Transport m, SoundMap.SoundParameters params) => String -> (UGen -> UGen -> SoundMap.Sound params) -> m (Sound params (Double,Double))@@ -77,7 +75,7 @@ -playMusic :: (Trans.C m, MonadIO m) =>+playMusic :: (Transport m, MonadIO m) => RhyMusic.T DrumAttributes InstrumentAttributes -> m () playMusic = Play.performanceTrans Play.defaultLatency [] .
− src/Haskore/Interface/SuperCollider/Play/Life.hs
@@ -1,5 +0,0 @@-module Haskore.Interface.SuperCollider.Play.Life- {-# DEPRECATED "use Play.Live instead" #-}- (module Haskore.Interface.SuperCollider.Play.Live) where--import Haskore.Interface.SuperCollider.Play.Live
src/Haskore/Interface/SuperCollider/Play/Live.hs view
@@ -29,10 +29,10 @@ import qualified Sound.SC3.Server.PlayEasy as SCPlay import qualified Sound.SC3.Server.Command as SCCmd -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen, constant, ) -import Sound.OpenSoundControl.Transport (Transport)-import qualified Sound.OpenSoundControl.Transport.Monad as Trans+import Sound.OSC.Transport.FD (Transport)+import qualified Sound.OSC.Transport.Monad as Trans import qualified Haskore.Interface.SuperCollider.Example as Example import qualified Haskore.Interface.SuperCollider.Play.Install as IPlay@@ -157,7 +157,7 @@ chan <- Channel.next ChannelEnv.manager numChan SCPlay.withSC3 $ SCPlay.simpleSync $ SCPlay.d_recv_synthdef name $- SCIO.out (SCUGen.Constant (fromIntegral chan)) ugen+ SCIO.out (constant chan) ugen return (chan, numChan)
src/Haskore/Interface/SuperCollider/Render.hs view
@@ -17,7 +17,7 @@ -- import Sound.OpenSoundControl.Transport (Transport) -- import qualified Sound.OpenSoundControl.Transport.Monad as Trans -import Sound.OpenSoundControl.OSC (OSC(Bundle))+import qualified Sound.OpenSoundControl.Type as OSC import qualified Sound.OpenSoundControl.Time as OSCTime import qualified Data.ByteString.Lazy as B@@ -105,14 +105,15 @@ scheduleToStream :: Schedule.T ->- [OSC]+ SCNRT.NRT scheduleToStream sc =+ SCNRT.NRT $ timeStamp 0 (Schedule.initial sc) : messagesToStream (Schedule.body sc) messagesToStream ::- TimeList.T Time OSC ->- [OSC]+ TimeList.T Time OSC.Message ->+ [OSC.Bundle] messagesToStream = map (uncurry timeStamp) . AbsoluteEventList.toPairList .@@ -121,5 +122,5 @@ AbsoluteEventList.collectCoincident . TimeList.toAbsoluteEventList 0 -timeStamp :: Time -> [OSC] -> OSC-timeStamp = Bundle . OSCTime.NTPr . NonNeg.toNumber+timeStamp :: Time -> [OSC.Message] -> OSC.Bundle+timeStamp = OSC.Bundle . OSCTime.ut_to_ntpr . NonNeg.toNumber
src/Haskore/Interface/SuperCollider/Schedule.hs view
@@ -17,14 +17,12 @@ -- fromMelodyPerformance, ) where -import qualified Sound.SC3.UGen.UGen as SCUGen- import qualified Sound.SC3.Server.Command as SCCmd import qualified Sound.SC3.Server.PlayEasy as SCPlay -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen) -import Sound.OpenSoundControl.OSC (OSC)+import qualified Sound.OpenSoundControl.Type as OSC import qualified Haskore.Interface.SuperCollider.Note as Note import qualified Haskore.Interface.SuperCollider.Performance as SCPf@@ -57,10 +55,10 @@ data T = Cons {- initial :: [OSC]+ initial :: [OSC.Message] {- ^ All of these messages must be synchronous! Otherwise the player might wait forever. -},- body :: TimeList.T Time OSC+ body :: TimeList.T Time OSC.Message } deriving Show @@ -82,7 +80,7 @@ SCPf.fromMusic makeNote fromMusicMsgs :: Ord note =>- (Note.FromNote NonNeg.Double note, [OSC]) ->+ (Note.FromNote NonNeg.Double note, [OSC.Message]) -> Music.T note -> T fromMusicMsgs (makeNote, installSounds) =@@ -208,8 +206,8 @@ fromPerformance ::- [OSC] ->- [OSC] ->+ [OSC.Message] ->+ [OSC.Message] -> SCPf.T Time -> T fromPerformance installInstruments globalEffects pf =@@ -219,10 +217,10 @@ (resetMsgs ++ globalEffects) (messagesFromPerformance pf)) -prependInitialMsgs :: [OSC] -> TimeList.T Time OSC -> TimeList.T Time OSC+prependInitialMsgs :: [OSC.Message] -> TimeList.T Time OSC.Message -> TimeList.T Time OSC.Message prependInitialMsgs = flip (foldr (TimeList.cons 0)) -messagesFromPerformance :: SCPf.T Time -> TimeList.T Time OSC+messagesFromPerformance :: SCPf.T Time -> TimeList.T Time OSC.Message messagesFromPerformance = flip TimeListPad.snocBody stopMsg . TimeListPad.mapBody (uncurry eventToMsg)@@ -231,11 +229,11 @@ {- * Construction of OpenSoundControl messages -} -stopMsg :: OSC+stopMsg :: OSC.Message stopMsg = SCCmd.g_freeAll [SCPlay.homeId] -resetMsgs :: [OSC]+resetMsgs :: [OSC.Message] resetMsgs = [SCCmd.g_freeAll [SCPlay.rootId], SCCmd.g_new [(SCPlay.homeId, SCCmd.AddToTail, SCPlay.rootId)]]@@ -245,7 +243,7 @@ SCPlay.NodeId -> String -> [(String, Double)] ->- OSC+ OSC.Message atomPlayMsg sid name = SCCmd.s_new name sid SCCmd.AddToHead SCPlay.homeId -- adding to head is necessary for allowing global effects like in the Live module@@ -255,7 +253,7 @@ String -> Channel -> UGen ->- OSC+ OSC.Message installUGenMsg name chan = SCPlay.d_recv_synthdef name . Channel.writeUGen chan@@ -265,7 +263,7 @@ String -> Channel -> Sound params ->- OSC+ OSC.Message installSoundMsg name chan = installUGenMsg name chan . SoundMap.ugenFromSound @@ -277,14 +275,14 @@ installSoundsMsg :: Channel -> [SoundAssign] ->- [OSC]+ [OSC.Message] installSoundsMsg channel = map (\(name,sound) -> installUGenMsg name channel sound) installChannelSoundsMsg :: [(SoundMap.Name, Channel, UGen)] ->- [OSC]+ [OSC.Message] installChannelSoundsMsg = map (\(name, channel, ugen) -> installUGenMsg name channel ugen)@@ -309,7 +307,7 @@ eventToMark (sid, note) = (sid, maybe False (const True) note) -eventToMsg :: SCPlay.NodeId -> Maybe (Time, Note.T) -> OSC+eventToMsg :: SCPlay.NodeId -> Maybe (Time, Note.T) -> OSC.Message eventToMsg sid = maybe (SCCmd.n_free [sid])
src/Haskore/Interface/SuperCollider/Schedule/Channel.hs view
@@ -5,7 +5,6 @@ -} module Haskore.Interface.SuperCollider.Schedule.Channel where -import qualified Sound.SC3.UGen.UGen as SCUGen import qualified Sound.SC3.UGen.Oscillator as SCOsci import qualified Sound.SC3.UGen.Filter as SCFilt @@ -14,9 +13,9 @@ import qualified Sound.SC3.Server.PlayEasy as SCPlay import qualified Sound.SC3.Server.Command as SCCmd -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen) -import Sound.OpenSoundControl.OSC (OSC)+import qualified Sound.OpenSoundControl.Type as OSC import qualified Haskore.Interface.SuperCollider.Channel as Channel import Haskore.Interface.SuperCollider.Channel (Channel, NumberChannels)@@ -42,7 +41,6 @@ import qualified Haskore.General.IdGenerator as IdGen -import qualified Control.Monad.Trans.State as State import Control.Monad.Trans.State (StateT, runStateT, get, put, ) import Control.Monad.Trans.Writer (Writer, tell, runWriter, ) import Control.Monad.Trans.Class (lift, )@@ -55,13 +53,13 @@ newtype Environment a = Environment {unwrapEnvironment ::- StateT (Channel, NumberChannels) (Writer [OSC]) a}+ StateT (Channel, NumberChannels) (Writer [OSC.Message]) a} instance Monad Environment where x >>= y = Environment $ unwrapEnvironment . y =<< unwrapEnvironment x return = Environment . return -writeOSC :: [OSC] -> Environment ()+writeOSC :: [OSC.Message] -> Environment () writeOSC = Environment . lift . tell nextChannel :: NumberChannels -> Environment Channel
src/Haskore/Interface/SuperCollider/Schedule/Install.hs view
@@ -6,9 +6,9 @@ -} module Haskore.Interface.SuperCollider.Schedule.Install where -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen) -import Sound.OpenSoundControl.OSC (OSC)+import qualified Sound.OpenSoundControl.Type as OSC import qualified Haskore.Interface.SuperCollider.Example as Example import qualified Haskore.Interface.SuperCollider.Play as Play@@ -33,18 +33,18 @@ {- |-The @[OSC]@ state is used for messages for installing the instruments.+The @[OSC.Message]@ state is used for messages for installing the instruments. We cannot use a Writer monad for this purpose because we have to read the generated messages for 'playMusic'. -} newtype Environment a =- Environment {unwrapEnvironment :: Writer [OSC] a}+ Environment {unwrapEnvironment :: Writer [OSC.Message] a} instance Monad Environment where x >>= y = Environment $ unwrapEnvironment . y =<< unwrapEnvironment x return = Environment . return -writeOSC :: [OSC] -> Environment ()+writeOSC :: [OSC.Message] -> Environment () writeOSC = Environment . tell
src/Haskore/Interface/SuperCollider/SoundMap.hs view
@@ -11,7 +11,7 @@ import qualified Sound.SC3.UGen.Rate as SCRate import qualified Sound.SC3.UGen.UGen as SCUGen -import Sound.SC3.UGen.UGen (UGen)+import Sound.SC3.UGen.Type (UGen) import Data.Maybe.HT (toMaybe, ) import Data.Maybe (mapMaybe, )