[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[sc-dev] wrapping of functionality: does this make sense?
would the redefinition of Synth in SC3
along the lines of this example make sense?
I'm not sure myself, as this creates the impression that everything worked
as it used to, which isn't true.
sc2 code like
Synth.play({ SinOsc.ar(800 + 500.rand2, 0, 0.1) });
can be evaluated without problems then.
Synth {
*play { arg func, bus=0, name, server, delay=0.5;
name = name ? "default" ++ UniqueID.next;
server = server ? Server.default;
SynthDef(name, { Out.ar(bus, func.value)}).writeDefFile;
SystemClock.play(
Routine({
delay.wait;
server.sendMsg("/d_load",
"engine/synthdefs/"++name++".scsyndef");
delay.wait;
server.sendMsg("/s_new", name,
UniqueID.next, 0);
})
);
}
}
(http://swiki.hfbk-hamburg.de:8080/MusicTechnology/431)
apart from this, one could define remote objects like the following
as a proxy opbject to send messages to:
RemoteNode {
var <>server, <>id;
remove {
server.sendMsg("/n_remove", id);
}
free {
server.sendMsg("/n_free", id);
}
run { arg flag=1;
server.sendMsg("/n_run", id, flag);
}
set { arg name, value;
var args;
args = ["/n_set", id] ++ this.class.convertPairs(name, value);
server.performList(\sendMsg, args);
}
fill { arg name, value;
var args;
args = ["/n_fill", id] ++
this.class.convertPairs(name, value);
server.performList(\sendMsg, args);
}
before { arg argID;
server.sendMsg("/n_before", id, argID)
}
after { arg argID;
server.sendMsg("/n_after", id, argID)
}
*convertPairs { arg name, value;
^if(name.isKindOf(SequenceableCollection), {
[name.asArray.collect({ arg item;
item.asString }), value.asArray].flop.flat;
}, {
[name.asString, value]
});
}
}