Post by Stefan NussbaumerCould you provide some code that triggers the behavior on your machine?
I'm using Ndef a lot in combination with the Conductor quark. Within
Conductor the NodeProxy:-set gets overwritten. However, there has been a
change to the original (the overwritten) method that made NodeProxy:-set
fail as defined within Conductor.
I do not use Ndef nor Conductor, and, to be honest, I do not know to much
about these.
To give some perspective: this show has been touring for 13 years. All
samplers (E64, MPC2000XL) have SCSI interfaces. Backup systems used Zip
and Jaz (cool stuff for computer historians...). In short: the way of the
way dodo. After a SCSI disk died I decided to program these samplers in SC.
So what I have is mainly soundfileplayers that simulate OneShot samples,
Looping samples, mono and stereo.
These players are spread out over 8 servers:
var server1 = Server.new(name: \localServer1, addr: NetAddr.new(hostname:
"127.0.0.1", port: 57111), options: nil, clientID: 0);
Here is an example of a SynthDef (sorry for the comments in Dutch, but I
will translate them if needed):
// MONO LOOPING SYNTH
serversArray.do({
arg item, i;
theMonoLoopingSynthDef = SynthDef(\quickMonoLoopSampler, { | bufnum, out
= 0,
envelopeAttackTime = 0, envelopeDecayTime = 0, envelopeSustainLevel =
1, envelopeReleaseTime = 0, envelopePeakLevel = 1, envelopeCurve = 0, gate
= 1,
startInSeconds, endInSeconds, loopFadeLengthInSeconds = 0.001,
fadeCurve = 1, rate = 1.0, volume = 1, velocity = 1, gain = 1 |
var loopStartInSamples, loopEndInSamples, endMinusStartInSeconds,
upOrDown, loopLengthInSeconds;
var startLoopFrequency, loopFrequency, trigger, triggers,
firstLoopXFadeEnvelopeGenerator, xFadeEnvelopeGenerators;
var firstLoopBufferPosition, bufferPositions, envelopes,
theFirstLoopBufferReader, theBufferReader, sample;
// Conversie van seconden naar samples; samplerichting; loopfrequentie
loopStartInSamples = startInSeconds * BufSampleRate.ir(bufnum); //
originele samplerate van de soundfile
loopEndInSamples = endInSeconds * BufSampleRate.ir(bufnum); //
originele samplerate van de soundfile
endMinusStartInSeconds = endInSeconds - startInSeconds;
upOrDown = endMinusStartInSeconds.sign;
loopLengthInSeconds = abs(endMinusStartInSeconds);
loopFrequency = 1 / (loopLengthInSeconds - loopFadeLengthInSeconds);
// PulseDivider: Outputs one impulse each time it receives a certain
number (= div) of triggers at its input
// start: Starting value for the trigger count. If startCount is
negative it adds that many counts to the first time the output triggers.
// Er lopen twee PulseDividers: de ene begint op 1 (-1), de andere op 2
(-0).
// Het resultaat is 2 triggers die elkaar afwisselen
trigger = Impulse.kr(freq: loopFrequency);
triggers = PulseDivider.kr(trig: trigger, div: 2, start: [-0,-1]);
//triggers.scope("triggers", zoom: 0.001);
// omdat de attack tijdens de 1e loop niet gecrossfade wordt, is er een
aparte EnvGen nodig
// Omdat Env.linen een fixed length heeft werkt de gate als een trigger.
firstLoopXFadeEnvelopeGenerator = EnvGen.kr(
envelope: Env.linen(
attackTime: 0,
sustainTime: loopLengthInSeconds - loopFadeLengthInSeconds,
releaseTime: loopFadeLengthInSeconds,
curve: fadeCurve),
gate: gate);
//firstLoopXFadeEnvelopeGenerator.scope("firstLoopXFadeEnvelopeGenerator
");
// Omdat Env.linen een fixed length heeft werkt de gate als een trigger.
xFadeEnvelopeGenerators = EnvGen.kr(
envelope: Env.linen(
attackTime: loopFadeLengthInSeconds,
sustainTime: loopLengthInSeconds - (2 * loopFadeLengthInSeconds),
releaseTime: loopFadeLengthInSeconds,
curve: fadeCurve),
gate: triggers);
//xFadeEnvelopeGenerators.scope("xFadeEnvelopeGenerators");
// OSCFunc = sendTrigMessage
//SendTrig.kr(in: Impulse.kr(freq: 1), id: 0, value:
loopFadeLengthInSeconds); // The trigger message sent back to the client:
/tr, int: Node ID, int: Trigger ID, float: Trigger Value
//SendTrig.kr(in: Impulse.kr(freq: 1), id: 2, value:
loopLengthInSeconds);
//SendTrig.kr(in: Impulse.kr(freq: 1), id: 4, value:
BufRateScale.kr(bufnum));
//SendTrig.kr(in: Impulse.kr(freq: 1), id: 6, value:
BufSampleRate.ir(bufnum));
//SendTrig.kr(in: Impulse.kr(freq: 1), id: 8, value:
SampleRate.ir(bufnum));
firstLoopBufferPosition = Line.ar(
start: loopStartInSamples,
end: loopEndInSamples,
dur: (loopLengthInSeconds / rate) // je hoeft niet te corrigeren met
BufRateScale omdat de lengte van Line in secondes wordt gegeven
);
//firstLoopBufferPosition.poll;
// These Phasors are used as indexes into the buffers.
// The triggers reset the positions of the two phasors.
// rate: The amount of change per sample, i.e at a rate of 1 the value
of each sample will be 1 greater than the preceding sample.
// resetPos: The value to jump to upon receiving a trigger.
bufferPositions = Phasor.ar(
trig: triggers,
rate: rate * BufRateScale.kr(bufnum) * upOrDown, // Als rate = 1 dan
is de waarde van iedere volgende sample 1 groter
// je moet hier corrigeren met BufRateScale omdat de snelheid van
Phasor is gebaseerd op de huidige samplerate
start: loopStartInSamples,
end: loopEndInSamples,
resetPos: loopStartInSamples);
//bufferPositions.poll;
//(bufferPositions/ 500000).scope("buf", zoom: 0.001);
// ADSR envelope
envelopes = EnvGen.kr(
envelope: Env.adsr(
attackTime: envelopeAttackTime,
decayTime: envelopeDecayTime,
sustainLevel: envelopeSustainLevel,
releaseTime: envelopeReleaseTime,
peakLevel: envelopePeakLevel,
curve: envelopeCurve),
gate: gate,
doneAction: 2 // free the enclosing synth
);
theFirstLoopBufferReader = BufRd.ar(
numChannels: 1,
bufnum: bufnum,
phase: firstLoopBufferPosition,
loop: 0);
theBufferReader = BufRd.ar(
numChannels: 1,
bufnum: bufnum,
phase: bufferPositions, // 2 Phasors: Audio rate modulateable index
into the buffer.
loop: 0);
//theBufferReader.scope("theBufferReader");
// Two Mono BufferReaders
sample = (
(
(theFirstLoopBufferReader * 0.5) +
(theBufferReader * xFadeEnvelopeGenerators)
)
* envelopes * volume * velocity * gain;
).sum;
// sample = [ an OutputProxy, an OutputProxy ].sum ==> sample = a
BinaryOpUGen
// [ an OutputProxy, an OutputProxy ] is een Array
// The use of the binary operator sum (= +) instantiates a BinaryOpUGen.
Out.ar(out, sample ! 2); // equivalent to dup(2): return an Array with
2 BinaryOpUGens: [ a BinaryOpUGen, a BinaryOpUGen ]
}).send(item); // Compile the def and send it to server without writing
to disk
// add(libname, completionMsg, keepDef: true)
// SynthDescLib.global.addServer(server)
// SynthDescLib.global.browse;
// SynthDescLib.global.synthDescs.at(\quickMonoLoopSampler).hasGate;
// SynthDef.synthDefDir;
});
I hope this code makes enough sense to be helpful. Does this have any
relation to the kind of problems you mention? If so, I'm willing to look
into the peculiarities of Ndef. I have no quarks installed (installing
quarks became sort of a hassle, in combination with limited time, and
still lots to learn...).
In my opinion this matter is quite important with regards to using SC in a
professional environment. I'm willing invest what is needed to bring SC
back to a level where it can be trusted on a Mac, since I lack the time to
look into Linux (at least during this tour...).
Thanks for looking into this.
Best regards,
Arthur
Post by Stefan NussbaumerJust a shot in the dark but my guts feeling says it's not related to the
OS but something that has changed in SC...
regards, stefan
Post by xs4all sauermusicIt happend more than once. All nodes were killed. I have been touring
with this software for two months already without problems on 10.8. The
only differences: computer, OS.
Any pointers on what to look for (Console, XCode, SC)? Worth trying 3.7
(would nor like to have another unknown in the equation)?
Other suggestions?
Best regards,
Arthur
Sent from Arthur's iPhone
_______________________________________________
sc-users mailing list
http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: http://www.listarc.bham.ac.uk/marchives/sc-users/
search: http://www.listarc.bham.ac.uk/lists/sc-users/search/
_______________________________________________
sc-users mailing list
http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: http://www.listarc.bham.ac.uk/marchives/sc-users/
search: http://www.listarc.bham.ac.uk/lists/sc-users/search/
_______________________________________________
sc-users mailing list
info (subscription, etc.): http://www.beast.bham.ac.uk/research/sc_mailing_lists.shtml
archive: http://www.listarc.bham.ac.uk/marchives/sc-users/
search: http://www.listarc.bham.ac.uk/lists/sc-users/search/