jackclient-python icon indicating copy to clipboard operation
jackclient-python copied to clipboard

Client objects on multiple servers don't pull correct port lists?

Open jebofponderworthy opened this issue 7 years ago • 2 comments

The following code snippet produces the same list of ports, the correct list for the first ('hard', hardware-connected) JACK server, all four times it does the get_ports() print. The .name print comes out correctly though. Any ideas why this is happening?

print('-----------------------------------------------------------------')
print('Create JACK clients, and use them to verify JACK servers...')
print('-----------------------------------------------------------------')

jack_client_hard = jack.Client('jack_client_hard', servername='default')
jack_client_hard.activate()
jack_client_hard.outports.register('dummy_4hard')

print('JACK ports for hard server:')
print(jack_client_hard.name)
print(jack_client_hard.get_ports())
print('')

jack_client_soft1 = jack.Client('jack_client_soft1', servername='SOFT1')
jack_client_soft1.activate()
jack_client_soft1.outports.register('dummy_4soft1')

print('JACK ports for server SOFT1:')
print(jack_client_soft1.name)
print(jack_client_soft1.get_ports())
print('')

jack_client_soft2 = jack.Client('jack_client_soft2', servername='SOFT2')
jack_client_soft2.activate()
jack_client_soft2.outports.register('dummy_4soft2')

print('JACK ports for server SOFT2:')
print(jack_client_soft2.name)
print(jack_client_soft2.get_ports())
print('')

jack_client_soft3 = jack.Client('jack_client_soft3', servername='SOFT3')
jack_client_soft3.activate()
jack_client_soft3.outports.register('dummy_4soft3')

print('JACK ports for server SOFT3:')
print(jack_client_soft3.name)
print(jack_client_soft3.get_ports())
print('')

input("Press Enter to continue...")

exit(0)

jebofponderworthy avatar Jan 23 '18 02:01 jebofponderworthy

Thanks for the report!

TBH, I've never used multiple JACK daemons before. I've just tried it and I can reproduce the problem you are reporting.

Sadly, I have no idea what's going wrong here ... do you have any?

mgeier avatar Jan 23 '18 12:01 mgeier

Not much at all -- I was honestly hoping you would find something obvious that I had missed in the test code! I might be dimly remembering (or imagining) a two-year-old linux-audio-user conversation in which it was said something like this would occur. If the latter is not an imagination, there's something with the standard JACK primitives which gets in the way of one process attaching itself to multiple JACK processes. For my needs right now, I have worked around it, by creating a new JACK client every time I need to check status. Working workaround is in wait_for_jackport() (not wait_for_jack()) in the below.

https://github.com/jebofponderworthy/the-box-of-no-return/blob/master/jpctrl.py

jebofponderworthy avatar Jan 23 '18 20:01 jebofponderworthy