Discussion:
ScoreClock: ERROR: Server-getControlBusValue only supports local servers
Ali Rustamov
2014-09-30 18:41:29 UTC
Permalink
I have a following code in one of patterns:
\dur, Pseq(
(
~pno[\durSeq] * Array.fill(~pno[\durSeq].size,{
[
~inCtlBus.getSynchronous.abs,
~inCtlBus1.getSynchronous.abs,
~inCtlBus2.getSynchronous.abs,
~inCtlBus3.getSynchronous.abs,
].choose
})
).normalizeSum * ~pno[\durSeq].sum,
inf
),

~inCtlBus' are control buses
When I attempt to render NRT using ScoreClock I get following error.

ERROR: Server-getControlBusValue only supports local servers
Is there any workaround possible?



PROTECTED CALL STACK:
Server:getControlBusValue 0x96ef120
arg this = ScoreDummy
arg busIndex = 1
a FunctionDef 0xac047ff0
sourceCode = "{
[
~inCtlBus.getSynchronous.abs,
~inCtlBus1.getSynchronous.abs,
~inCtlBus2.getSynchronous.abs,
~inCtlBus3.getSynchronous.abs,
].choose
}"
a FunctionDef 0xa3424a0
sourceCode = "<an open Function>"
arg i = 0
Integer:do 0x9b4a3e0
arg this = 5
arg function = a Function
var i = 0
Meta_Collection:fill 0xa3421e0
arg this = Array
arg size = 5
arg function = a Function
var obj = [ ]
a FunctionDef 0xac01e1b0
sourceCode = "{
[
~inCtlBus.getSynchronous.abs,
~inCtlBus1.getSynchronous.abs,
~inCtlBus2.getSynchronous.abs,
~inCtlBus3.getSynchronous.abs,
].choose
})
).normalizeSum * ~pno[\\durSeq].sum,
inf
),


// \\dur , PseqFunc(
// ~pno[\\durSeq],
// inf,
// func: {arg i;
// i * ((~inCtlBus.getSynchronous / 2) +
1).rrand((~inCtlBus1.getSynchronous / 2) + 1)
// }
// )
)
],
inf
); "
a FunctionDef 0xa0673a0
sourceCode = "<an open Function>"
Function:prTry 0x9eaa2e0
arg this = a Function
var result = nil
var thread = a Routine
var next = a Function
var wasInProtectedFunc = true
Function:protect 0x9ea9c60
arg this = a Function
arg handler = a Function
var result = nil
Interpreter:executeFile 0xa067060
arg this = an Interpreter
arg pathName =
/mnt/win_f/ali/zotero/zotero/my/work_dir/patterns/piano.sc
arg args = nil
var result = [ ]
var saveExecutingPath = nil
a FunctionDef 0xac5841d0
sourceCode = "{arg i;
if(~grainBeatInd[i] == 0,
{Pfindur(~beats,~grainPlayBeat)} ,
{Pfindur(~beats,~rest)}) }
))

];

~song = Ppar(~alltrx);
//~song = Ppar(~alltrx[0..1]);



"
a FunctionDef 0xa0673a0
sourceCode = "<an open Function>"
Function:prTry 0x9eaa2e0
arg this = a Function
var result = nil
var thread = a Routine
var next = nil
var wasInProtectedFunc = false

CALL STACK:
Exception:reportError 0xc5ff5d0
arg this = <instance of Error>
Nil:handleError 0xc6bcc90
arg this = nil
arg error = <instance of Error>
Thread:handleError 0xb533350
arg this = <instance of Thread>
arg error = <instance of Error>
Thread:handleError 0xb76adb0
arg this = <instance of Routine>
arg error = <instance of Error>
Object:throw 0xb740810
arg this = <instance of Error>
Function:protect 0xc6c5090
arg this = <instance of Function>
arg handler = <instance of Function>
var result = <instance of Error>
Interpreter:executeFile 0xac58e6d0
arg this = <instance of Interpreter>
arg pathName = "/mnt/win_f/ali/zotero/zotero..."
arg args = [*0]
var result = nil
var saveExecutingPath = "/mnt/win_f/ali/zotero/zotero..."
< closed FunctionDef > (no arguments or variables)
Routine:prStart 0xbbc1a90
arg this = <instance of Routine>
arg inval = 43.592278957367
^^ The preceding error dump is for ERROR: Server-getControlBusValue
only supports local servers

_______________________________________________
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/
James Harkins
2014-10-01 03:48:07 UTC
Permalink
Post by Ali Rustamov
\dur, Pseq(
(
~pno[\durSeq] * Array.fill(~pno[\durSeq].size,{
[
~inCtlBus.getSynchronous.abs,
~inCtlBus1.getSynchronous.abs,
~inCtlBus2.getSynchronous.abs,
~inCtlBus3.getSynchronous.abs,
].choose
})
).normalizeSum * ~pno[\durSeq].sum,
inf
),
~inCtlBus' are control buses
When I attempt to render NRT using ScoreClock I get following error.
ERROR: Server-getControlBusValue only supports local servers
Is there any workaround possible?
The conceptual problem is that getting values from a control bus assumes
that the patterns and the server are running together -- that is, realtime
rendering. In NRT, the patterns generate their data completely, and only
after that does the server run. So you're quite literally trying to get
information from a server that doesn't exist.

You could run the patterns realtime, and save the OSC messages in a score,
and then render the score NRT. I don't have code for that; maybe someone
else has something.

BTW your array is inefficient: getting 4 values from the server, and using
only one. Better would be to .choose one of the Bus objects -- i.e. delete
getSynchronous.abs from inside the array -- and then [...
buses...].choose.getSynchronous.abs.

hjh

Sent with AquaMail for Android
http://www.aqua-mail.com



_______________________________________________
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/
Ali Rustamov
2014-10-01 04:15:45 UTC
Permalink
What about routines, tasks? Does the same rule apply?

ОтправлеМП с ЌПбОльМПгП телефПМа. ИзвОМОте за краткПсть
Post by James Harkins
Post by Ali Rustamov
\dur, Pseq(
(
~pno[\durSeq] * Array.fill(~pno[\durSeq].size,{
[
~inCtlBus.getSynchronous.abs,
~inCtlBus1.getSynchronous.abs,
~inCtlBus2.getSynchronous.abs,
~inCtlBus3.getSynchronous.abs,
].choose
})
).normalizeSum * ~pno[\durSeq].sum,
inf
),
~inCtlBus' are control buses
When I attempt to render NRT using ScoreClock I get following error.
ERROR: Server-getControlBusValue only supports local servers
Is there any workaround possible?
The conceptual problem is that getting values from a control bus assumes
that the patterns and the server are running together -- that is, realtime
rendering. In NRT, the patterns generate their data completely, and only
after that does the server run. So you're quite literally trying to get
information from a server that doesn't exist.
You could run the patterns realtime, and save the OSC messages in a score,
and then render the score NRT. I don't have code for that; maybe someone
else has something.
BTW your array is inefficient: getting 4 values from the server, and using
only one. Better would be to .choose one of the Bus objects -- i.e. delete
getSynchronous.abs from inside the array -- and then [... buses...].choose.
getSynchronous.abs.
hjh
Sent with AquaMail for Android
http://www.aqua-mail.com
_______________________________________________
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/
James Harkins
2014-10-01 04:35:38 UTC
Permalink
Post by Ali Rustamov
What about routines, tasks? Does the same rule apply?
Yes, of course. It could not possibly be otherwise.

When you run a NRT server, you provide all the information that it needs
for rendering in the OSC score file. The NRT server does not respond to any
outside interaction. It just runs the OSC commands in the score file, and
then it quits.

Just so the point is not missed: There is NO WAY to interact with a NRT
server during its run. None.

So it doesn't matter if you're interacting with a server in patterns or
routines. You cannot simply switch the server to NRT and expect it to work.
You have to put everything into the score file in advance. This means the
code building the score file can't poll the NRT server. No way. It's not
just that it isn't supported. It's conceptually impossible.

You could, as I said, run the code against a realtime server and collect
the server-side values, then plug those values into the Score.

hjh

Sent with AquaMail for Android
http://www.aqua-mail.com

Loading...