Merge branch 'clients/inter_client_comms' into feature/rt-queries

nix
Owen Green 6 years ago
commit 1d6fd8f1b0

@ -351,8 +351,8 @@ class NonRealTime : public SCUnit
using SharedState = std::shared_ptr<WrapperState<Client>>;
public:
static index ControlOffset(Unit*) { return IsModel_t<Client>::value ? 1 : 0; }
static index ControlSize(Unit* unit) { return index(unit->mNumInputs) - unit->mSpecialIndex - 2; }
static index ControlOffset(Unit*) { return 0; }
static index ControlSize(Unit* unit) { return index(unit->mNumInputs) - unit->mSpecialIndex - 2 - (IsModel_t<Client>::value ? 1 : 0); }
static void setup(InterfaceTable* ft, const char* name)
{
@ -691,7 +691,8 @@ struct LifetimePolicy<Client, Wrapper,std::true_type, std::false_type>
static void constructClass(Unit* unit)
{
index uid = static_cast<index>(unit->mInBuf[Wrapper::ControlOffset(unit)][0]);
index uid = static_cast<index>(unit->mInBuf[Wrapper::ControlOffset(unit)+Wrapper::ControlSize(unit)][0]);
FloatControlsIter controlsReader{unit->mInBuf + Wrapper::ControlOffset(unit),Wrapper::ControlSize(unit)};
auto& entry = mRegistry[uid];
auto& client = entry.client;
@ -995,6 +996,24 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase<C>
ft->fRTFree(w,chunk);
return res;
}
static auto fromArgs(Unit*, FloatControlsIter& args,typename LongArrayT::type&, int)
{
//first is array size, then items
using Container = typename LongArrayT::type;
using Value = typename Container::type;
index size = static_cast<index>(args.next());
Container res(size);
for (index i = 0; i < size; ++i)
res[i] = static_cast<Value>(args.next());
return res;
}
template <typename T>
static std::enable_if_t<std::is_integral<T>::value, T>
@ -1333,6 +1352,8 @@ class FluidSCWrapper : public impl::FluidSCWrapperBase<C>
ForEach(args,[x,&inArgs](auto& arg){
arg = ParamReader<sc_msg_iter*>::fromArgs(x, inArgs,arg,0);
});
x->client().setParams(x->params());
ft->fDoAsynchronousCommand(
x->mWorld, nullptr, getName(), msg,

@ -11,10 +11,9 @@ FluidBufCompose : UGen {
^super.new1(rate, source, startFrame, numFrames, startChan, numChans, gain, destination, destStartFrame, destStartChan, destGain, trig, blocking);
}
/* *kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, gain = 1, destination, destStartFrame = 0, destStartChan = 0, destGain = 0, trig = 1|
^this.multiNew('control', source, startFrame, numFrames, startChan, numChans, gain, destination, destStartFrame, destStartChan, destGain, trig, blocking:1);
}*/
*kr { |source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, gain = 1, destination, destStartFrame = 0, destStartChan = 0, destGain = 0, trig = 1|
^this.new1('control', source, startFrame, numFrames, startChan, numChans, gain, destination, destStartFrame, destStartChan, destGain, trig, 1);
}
*process { |server, source, startFrame = 0, numFrames = -1, startChan = 0, numChans = -1, gain = 1, destination, destStartFrame = 0, destStartChan = 0, destGain = 0, action|

@ -10,7 +10,7 @@ FluidLoadFolder {
play { |server, action|
var sizes,channels,maxChan, startEnd,counter;
server ?? server = Server.default;
server ?? {server = Server.default};
files = SoundFile.collect(path +/+ '*');
sizes = files.collect{|f|f.numFrames()};
channels = files.collect{|f| f.numChannels()};
@ -56,7 +56,7 @@ FluidSliceCorpus {
^super.newCopyArgs(sliceFunc,labelFunc);
}
play{ |server,sourceBuffer,bufIdx, action|
play{ |server,sourceBuffer,bufIdx, action, tasks = 4|
var counter, tmpIndices,perf,jobs,total,uid, completed, pointstotal;
uid = UniqueID.next;
sourceBuffer ?? {"No buffer to slice".error; ^nil};
@ -111,7 +111,8 @@ FluidSliceCorpus {
FreeSelfWhenDone.kr(onsets);
}.play;
};
4.do{perf.value(Buffer.new)};
tasks ?? {tasks = 4};
tasks.asInteger.min(jobs.size).do{perf.value(Buffer.new)};
}
}

@ -2,7 +2,7 @@ FluidNormalize : FluidManipulationClient {
*new {|server, min = 0, max = 1|
var uid = UniqueID.next;
^super.new(server,uid,min,max)!?{|inst|inst.init(uid);inst}
^super.new(server,min,max,uid)!?{|inst|inst.init(uid);inst}
}
init {|uid|

Loading…
Cancel
Save