def get_all_ports_and_connections(self): self.port_list.clear() self.connection_list.clear() self.metadata_list.clear() #get all currents Jack ports and connections port_name_list = c_char_p_p_to_list( jacklib.get_ports(self.jack_client, "", "", 0)) client_names = [] for port_name in port_name_list: port_ptr = jacklib.port_by_name(self.jack_client, port_name) jport = JackPort(port_name, self.jack_client) self.port_list.append(jport) client_name = port_name.partition(':')[0] if not client_name in client_names: client_names.append(client_name) # get port metadatas for key in (jacklib.JACK_METADATA_CONNECTED, jacklib.JACK_METADATA_ORDER, jacklib.JACK_METADATA_PORT_GROUP, jacklib.JACK_METADATA_PRETTY_NAME): prop = jacklib.get_property(jport.uuid, key) if prop is None: continue value = self.get_metadata_value_str(prop) self.metadata_list.append({ 'uuid': jport.uuid, 'key': key, 'value': value }) if jport.flags & jacklib.JackPortIsInput: continue port_ptr = jacklib.port_by_name(self.jack_client, jport.name) # this port is output, list its connections port_connection_names = tuple( jacklib.port_get_all_connections(self.jack_client, port_ptr)) for port_con_name in port_connection_names: self.connection_list.append((jport.name, port_con_name)) for client_name in client_names: uuid = jacklib.get_uuid_for_client_name(self.jack_client, client_name) if not uuid: continue self.client_list.append({'name': client_name, 'uuid': int(uuid)})
def __init__(self, port_name: str, jack_client, port_ptr=None): # In some cases, port could has just been renamed # then, jacklib.port_by_name fail. # that is why, port_ptr can be sent as argument here self.name = port_name if port_ptr is None: port_ptr = jacklib.port_by_name(jack_client, port_name) self.flags = jacklib.port_flags(port_ptr) self.uuid = jacklib.port_uuid(port_ptr) port_type_str = jacklib.port_type(port_ptr) if port_type_str == jacklib.JACK_DEFAULT_AUDIO_TYPE: self.type = PORT_TYPE_AUDIO elif port_type_str == jacklib.JACK_DEFAULT_MIDI_TYPE: self.type = PORT_TYPE_MIDI order_prop = jacklib.get_property(self.uuid, jacklib.JACK_METADATA_ORDER) ret, alias_1, alias_2 = jacklib.port_get_aliases(port_ptr) if ret: self.alias_1 = alias_1 self.alias_2 = alias_2
NSMServer.start() NSMServer.announce('JACK Connections', ':dirty:switch:', 'ray-jackpatch') #connect signals signal.signal(signal.SIGINT, signalHandler) signal.signal(signal.SIGTERM, signalHandler) #get all currents Jack ports and connections portNameList = c_char_p_p_to_list(jacklib.get_ports(jack_client, "", "", 0)) for portName in portNameList: jack_port = JackPort() jack_port.name = portName portPtr = jacklib.port_by_name(jack_client, portName) portFlags = jacklib.port_flags(portPtr) if portFlags & jacklib.JackPortIsInput: jack_port.mode = PORT_MODE_INPUT elif portFlags & jacklib.JackPortIsOutput: jack_port.mode = PORT_MODE_OUTPUT else: jack_port.mode = PORT_MODE_NULL portTypeStr = str(jacklib.port_type(portPtr), encoding="utf-8") if portTypeStr == jacklib.JACK_DEFAULT_AUDIO_TYPE: jack_port.type = PORT_TYPE_AUDIO elif portTypeStr == jacklib.JACK_DEFAULT_MIDI_TYPE: jack_port.type = PORT_TYPE_MIDI else:
def _get_port(self, port_name): return jacklib.port_by_name(self.client, port_name)