Hello, fellow Jack developers.
I am currently writing a jack client which is loaded from within the unity3d game engine. It's supposed to work like this: Every time, jack requests audio, unity3d generates it. This is done in order to bypass the unity3d audio renderer and use the audio in different applications instead.
Technically, everything works fine so far. When the software is
started, either from within the unity3d editor or directly as a
compiled unity3d application, the client appears in QJackCtl and I
can route the channels to wherever I want and even hear the audio.
BUT: the client randomly disables. At some point during runtime (both in the built version and directly from the editor) it happens, that the routing disconnects itself, and I am unable to reconnect it. When I try, I get the message "Cannot connect ports owned by inactive clients: "Unity" is not active".
This behavior seems to be very unpredictable, sometimes it
happens after just a second, sometimes it runs fine for over a
minute or two. Sometimes it does not even happen (or I did not
wait long enough).
I have experienced this behavior both writing my own framework or by using the JackSharp framework. The behavior also does not change when uninstalling pulseaudio (which was sort of a last guess on our end).
The same behavior occurs when I use jack with a dummy driver. The connection is established and randomly breaks down again. (although obviously I can't hear the sound).
Interestingly: when I use the framework as a standalone version,
everything seems to work fine. Therefore, it kind of seems
obvious, that it has to have to do something with Unity or the
fact, that the framework is called from a different thread or
something like that. However, Unity does not report any problems.
What I can see in the QJackCtl Log: The exact moment the problem
occurs, the kPortRegistrationOff Method is called on all ports. It
looks like the server disables all ports, then tries to deactivate
the client and therefore destroying all the ports. It eventually
proceeds to tell, that the client was destroyed successfully and
that's it.
I have implemented all the callbacks that are available from the API (at least all that i think where usefull) but all I get is, that the framework receives the jack_on_info_shutdown method is called. This method is passed a const char argument which is supposed to hold the reason, but all it says is : "JACK server has been closed". Which it is not. It is still running.
At this point, I am out of ideas of what to do to narrow down the problem.
I have tested other applications (like Reaper) and they work
fine.
I am using Ubuntu 20.04, both on low-latency or generic kernel > 5.14
I use the latest version of jack2 (as of Dec 22)
I know all this sounds very vague and overly complex, but I have
no idea what else to look for or which information may be
necessary to further investigate the problem.
Any help at all is highly appreciated.
Thank you all very much
Have a nice day
Benny