Nobox Object Not Included in Live Device Freeze

David Butler's icon

I'm trying to freeze a MaxForLive device for distribution. This device contains objects which internally create a nobox object. When I freeze the device, the nobox object is not included (understandably perhaps as it's not present in the patch until runtime). Is there a way I can force this object to be included in the frozen device?

andrea agostini's icon

hi.

I'd say that you could make your nobox object a box one, and give it a place in the patch - I mean, if it's static enough for this to make sense. You could even consider making a 1-pixel-wide ui object of it...

... but hopefully someone else can think of a better solution ;)

aa

David Butler's icon

Unfortunately it can't live in the patch as it's a core object which is shared between devices. There are multiple dependent objects which all reference a single core object (the nobox one), but only one copy of the core can exist. The dependent objects look to see if it already exists on startup, connect to it if it does and create it if it doesn't. The problem is that there is no guarantee which Ableton device the core will be created in.

andrea agostini's icon

Ok, I see. That's tricky.

2nd try:
You could box-ize your "server" (the nobox one) object, and put an instance of it in your device. The server object contains something like this (forum coding):

typedef struct _my_server_obj {
  t_obj m_ob;
  /* ... */
  struct _my_server_obj **active_copy_ref;
} t_my_server_obj;

t_my_server_obj *active_copy = NULL; // this is a class variable

// ... in the constructor:
  x->active_copy_ref = &active_copy;

The constructor of your client object deferlows a call to a function doing the following: looks in its own patcher for the server object; looks at the server's active_copy (you can retrieve it from the object structure); if it's non-NULL, then the global server object will be *active_copy; if it's not (because this device is the first being instantiated), then the server object of this device will be the global server, and active_copy will point to it. As a matter of fact, you instantiate n servers and use only one of them; but this might not be a big problem, if they don't take up a lot of memory and their initialization is not too complex.

Of course I might be overlooking something, as I don't know the full scenario...

hth
aa

David Butler's icon

It's a good solution, but the objects which reference the nobox object are also designed to be used outside of Live, where having to create a separate object manually would be inconvenient. I think unless someone from Cycling can offer any solution for adding .mxo/.mxe files manually to a frozen device I may have to rely on the user adding the required objects.