Announcement:
Sonic Field now works with Jython 2.7.
Alongside this is the new work stealing schedular.
Also, today I have pushed an enhancement which allows parallel execution via an annotation/decorator (which required Jython 2.7):
Here is the decorator:
# An experimental decorator approach equivalent to sf_do
class sf_parallel(object):
def __init__(self,func):
self.func=func
def __call__(self,*args, **kwargs):
def closure():
return self.func(*args, **kwargs)
return sf_superFuture(closure)
For example - what would have required sf_do being called on a manually created closure can now look like this:
@sf_parallel
def granularReverb(signal,ratio,delay,density,length=50,stretch=1,vol=1):
print "Granular reverb: ratio:",ratio," delay:",delay," density",density," length:",length," stretch:",stretch," volume:",vol
out=[]
for grain in sf.Granulate(signal,length,10):
(signal_i,at)=grain
signal_i=sf.Realise(signal_i)
signal_i=sf.Realise(sf.DirectRelength(signal_i,ratio-0.01+(0.02*random.random())))
for x in range(0,density):
out.append(
(
+signal_i,
int((at + (random.random()+random.random())*delay)*stretch)
)
)
-signal_i
out=sf.Realise(sf.MixAt(out))
out=sf.Realise(sf.NumericVolume(out,vol))
return out
Just annotate a method sf_parallel and it will happen in parallel!
Not that parallel methods should have no side effects other than the manipulation of resource counts. I must write this up in greater detail sometime.
No comments:
Post a Comment