[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sc-users] callback



Hello list,

Is there a way in sc to use a callback (like in js for example) for asynchronous execution ?
I'd like to have only one file open with calls to other files like that:
this.executeFile(PathName(thisProcess.nowExecutingPath).parentPath ++ "SetUp.scd"); // set ServerOptions and boot it this.executeFile(PathName(thisProcess.nowExecutingPath).parentPath ++ "SynthDef.scd"); // add SynthDef on the server

If I execute these two lines at the same time, in this order, I have the following error:
ERROR: Message 'uid' not understood.
RECEIVER:
   nil
ARGS:
PATH: D:/SuperCollider/ORBM/ORBM_Start.scd

PROTECTED CALL STACK:
	Meta_MethodError:new	000000004388AAC0
		arg this = DoesNotUnderstandError
		arg what = nil
		arg receiver = nil
	Meta_DoesNotUnderstandError:new	000000004388CA80
		arg this = DoesNotUnderstandError
		arg receiver = nil
		arg selector = uid
		arg args = [  ]
	Object:doesNotUnderstand	0000000043122A00
		arg this = nil
		arg selector = uid
		arg args = nil
	Meta_MIDIOut:new	0000000044D5F380
		arg this = MIDIOut
		arg port = 2
		arg uid = nil
	a FunctionDef	000000004868BBC8
		sourceCode = "{
	~cleanup.value;
});
) "
	a FunctionDef	0000000043743040
		sourceCode = "<an open Function>"
	Function:prTry	0000000043B70D40
		arg this = a Function
		var result = nil
		var thread = a Thread
		var next = nil
		var wasInProtectedFunc = false

CALL STACK:
	DoesNotUnderstandError:reportError
		arg this = <instance of DoesNotUnderstandError>
	Nil:handleError
		arg this = nil
		arg error = <instance of DoesNotUnderstandError>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of DoesNotUnderstandError>
	Object:throw
		arg this = <instance of DoesNotUnderstandError>
	Function:protect
		arg this = <instance of Function>
		arg handler = <instance of Function>
		var result = <instance of DoesNotUnderstandError>
	Interpreter:executeFile
		arg this = <instance of Interpreter>
		arg pathName = "D:/SuperCollider/ORBM/ORBM_S..."
		arg args = [*0]
		var result = nil
		var saveExecutingPath = "D:/SuperCollider/ORBM/ORBM_S..."
	< closed FunctionDef >  (no arguments or variables)
	Interpreter:interpretPrintCmdLine
		arg this = <instance of Interpreter>
		var res = nil
		var func = <instance of Function>
		var code = "(
this.executeFile(PathName(..."
		var doc = nil
		var ideClass = <instance of Meta_ScIDE>
	Process:interpretPrintCmdLine
		arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'uid' not understood.
RECEIVER: nil


If I execute those two lines one after the other:
this.executeFile(PathName(thisProcess.nowExecutingPath).parentPath ++ "SetUp.scd"); // this one first this.executeFile(PathName(thisProcess.nowExecutingPath).parentPath ++ "SynthDef.scd"); // then this one after the boot is completed

I have no error
so I presume the problem is that I try to add SynthDef on a server which is not totaly booted That's why I though a callback could make sense here to recreate something like this:

this.executeFile(PathName(thisProcess.nowExecutingPath).parentPath ++ "SetUp.scd"); // this one first
s.serverRunning.if({
this.executeFile(PathName(thisProcess.nowExecutingPath).parentPath ++ "SynthDef.scd");
});

I thank you in advance for your help
Fabien

_______________________________________________
sc-users mailing list

info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: https://listarc.bham.ac.uk/marchives/sc-users/
search: https://listarc.bham.ac.uk/lists/sc-users/search/