Ejemplo n.º 1
0
void JackClient::GetPortNames(std::vector<std::string> &InputNames, std::vector<std::string> &OutputNames) {
    InputNames.clear();
    OutputNames.clear();

    if(!m_Attached) return;

    //Outputs first
    const char **PortNameList = jack_get_ports(m_Client, NULL, NULL, JackPortIsOutput);

    int n = 0;
    while(PortNameList[n] != NULL) {
        OutputNames.push_back(PortNameList[n]);
        n++;
    }

    delete PortNameList;

    //Inputs second
    PortNameList = jack_get_ports(m_Client, NULL, NULL, JackPortIsInput);

    n = 0;
    while(PortNameList[n] != NULL) {
        InputNames.push_back(PortNameList[n]);
        n++;
    }

    delete PortNameList;
}
Ejemplo n.º 2
0
static int ja_connect_client(void)
{
        char **ports;
        int i;

        ports = (char **) jack_get_ports(client, NULL, NULL,
                                         JackPortIsPhysical | JackPortIsOutput);
        if (ports == NULL)
                return 1;

        for (i = 0; i < ja_in_channels && ports[i] != NULL; i++)
                jack_connect(client, ports[i], jack_port_name(input_ports[i]));
        jack_free(ports);

        ports = (char **) jack_get_ports(client, NULL, NULL,
                                         JackPortIsPhysical | JackPortIsInput);
        if (ports == NULL)
                return 1;

        for (i = 0; i < ja_out_channels && ports[i] != NULL; i++)
                jack_connect(client, jack_port_name(output_ports[i]), ports[i]);
        jack_free(ports);

        return 0;
}
Ejemplo n.º 3
0
static int _list_ports(ClientData clientData, Tcl_Interp *interp, int argc, Tcl_Obj* const *objv) {
  if (argc != 2) return fw_error_str(interp, "jack-client list-ports");
  _t *dp = (_t *)clientData;
  Tcl_Obj *dict = Tcl_NewDictObj();
  const char **portv[] = {
    jack_get_ports (dp->fw.client, NULL, JACK_DEFAULT_AUDIO_TYPE, 0),
    jack_get_ports (dp->fw.client, NULL, JACK_DEFAULT_MIDI_TYPE, 0)
  };
  for (int p = 0; p < 2; p += 1)
    if (portv[p] != NULL) {
      for (int i = 0; portv[p][i] != NULL; i += 1) {
	jack_port_t *port = jack_port_by_name(dp->fw.client, portv[p][i]);
	if (port != NULL) {
	  Tcl_Obj *pdict = Tcl_NewDictObj();
	  int flags = jack_port_flags(port);
	  Tcl_DictObjPut(interp, pdict, Tcl_NewStringObj("direction", -1), flags & JackPortIsInput ? Tcl_NewStringObj("input", -1) : Tcl_NewStringObj("output", -1) );
	  Tcl_DictObjPut(interp, pdict, Tcl_NewStringObj("physical", -1), Tcl_NewIntObj(flags & JackPortIsPhysical ? 1 : 0));
	  Tcl_DictObjPut(interp, pdict, Tcl_NewStringObj("type", -1), p == 0 ? Tcl_NewStringObj("audio", -1) : Tcl_NewStringObj("midi", -1));
	  const char **connv = jack_port_get_all_connections(dp->fw.client, port);
	  Tcl_Obj *list = Tcl_NewListObj(0, NULL);
	  if (connv != NULL) {
	    for (int j = 0; connv[j] != NULL; j += 1)
	      Tcl_ListObjAppendElement(interp, list, Tcl_NewStringObj(connv[j], -1));
	    jack_free(connv);
	  }
	  Tcl_DictObjPut(interp, pdict, Tcl_NewStringObj("connections", -1), list);
	  Tcl_DictObjPut(interp, dict, Tcl_NewStringObj(portv[p][i], -1), pdict);
	}
      }
      jack_free(portv[p]);
    }
  Tcl_SetObjResult(interp, dict);
  return TCL_OK;
}
Ejemplo n.º 4
0
static int jack_connect_ports(char* client)
{
    char  regex_pattern[100]; /* its always the same, ... */
    int i;
    const char **jack_ports;

    if (strlen(client) > 96)  return -1;

    sprintf( regex_pattern, "%s:.*", client );

    jack_ports = jack_get_ports( jack_client, regex_pattern,
                                 NULL, JackPortIsOutput);
    if (jack_ports)
    {
        for (i=0;jack_ports[i] != NULL && i < sys_inchannels;i++)
            if (jack_connect (jack_client, jack_ports[i],
               jack_port_name (input_port[i])))
                  error ("JACK: cannot connect input ports %s -> %s",
                      jack_ports[i],jack_port_name (input_port[i]));
        free(jack_ports);
    }
    jack_ports = jack_get_ports( jack_client, regex_pattern,
                                 NULL, JackPortIsInput);
    if (jack_ports)
    {
        for (i=0;jack_ports[i] != NULL && i < sys_outchannels;i++)
          if (jack_connect (jack_client, jack_port_name (output_port[i]),
            jack_ports[i]))
              error( "JACK: cannot connect output ports %s -> %s",
                jack_port_name (output_port[i]),jack_ports[i]);

        free(jack_ports);
    }
    return 0;
}
Ejemplo n.º 5
0
    int JackSapaProxy::Setup(jack_client_t* client)
    {
        jack_log("JackSapaProxy::Setup");

        //refer to system ports and create sapaproxy ports
        unsigned int i = 0, j = 0;
        const char **ports_system_capture;
        const char **ports_system_playback;
        unsigned int ports_system_capture_cnt = 0;
        unsigned int ports_system_playback_cnt = 0;
        char port_name[JACK_PORT_NAME_SIZE] = {0,};
        ports_system_capture = jack_get_ports(client, "system:.*", NULL, JackPortIsPhysical | JackPortIsOutput);
        if (ports_system_capture != NULL) {
            for (i = 0; i < fCapturePorts && ports_system_capture[i]; i++) {
                sprintf(port_name, "__system_capture_%d", i + 1);
                fInputPorts[i] = jack_port_register(client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
                sprintf(port_name, "capture_%d", i + 1);
                fOutputPorts[i] = jack_port_register(client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
                ports_system_capture_cnt++;
            }
            jack_free(ports_system_capture);
        }

        ports_system_playback = jack_get_ports(client, "system:.*", NULL, JackPortIsPhysical | JackPortIsInput);
        if (ports_system_playback != NULL) {
            for (j = 0; j < fPlaybackPorts && ports_system_playback[j]; j++, i++) {
                sprintf(port_name, "playback_%d", j + 1);
                fInputPorts[i] = jack_port_register(client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
                sprintf(port_name, "__system_playback_%d", j + 1);
                fOutputPorts[i] = jack_port_register(client, port_name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
                ports_system_playback_cnt++;
            }
            jack_free(ports_system_playback);
        }

        //store actual number of system ports
        fCapturePorts = ports_system_capture_cnt;
        fPlaybackPorts = ports_system_playback_cnt;

        jack_set_process_callback(client, Process, this);
        jack_activate(client);

        //conenct between sapaproxy and system ports
        for (unsigned int i = 0; i < ports_system_capture_cnt; i++) {
            sprintf(port_name, "system:capture_%d", i + 1);
            jack_connect(client, port_name, jack_port_name(fInputPorts[i]));
        }

        for (unsigned int i = 0; i < ports_system_playback_cnt; i++) {
            sprintf(port_name, "system:playback_%d", i + 1);
            jack_connect(client, jack_port_name(fOutputPorts[ports_system_capture_cnt + i]), port_name);
        }

        return 0;
    }
Ejemplo n.º 6
0
bool JackClient::autoConnectPortsToMPG123()
{
    const char **pp_ports;
    int retval;

    // connect left channel
    pp_ports = jack_get_ports(m_p_jackClient,
                  s_portNameToConnectLeftChannelRegex.c_str(),
                  NULL, JackPortIsOutput);
    if (pp_ports == NULL) {
        DEBUG_PRINT("[!] no output port with name %s found (regex)",
                    s_portNameToConnectLeftChannelRegex.c_str());
    return false;
    }
    retval = jack_connect(m_p_jackClient, pp_ports[0],
                  jack_port_name(m_p_leftChannelInputPort));
    free(pp_ports);
    if (retval) {
        DEBUG_PRINT("[!] cannot connect input port %s (%d)",
                jack_port_name(m_p_leftChannelInputPort), retval);
    return false;
    } else {
        DEBUG_PRINT("successfully connected %s to %s",
                s_portNameToConnectLeftChannelRegex.c_str(),
                jack_port_name(m_p_leftChannelInputPort));
    }

    // connect right channel
    pp_ports = jack_get_ports(m_p_jackClient,
                  s_portNameToConnectRightChannelRegex.c_str(),
                  NULL, JackPortIsOutput);
    if (pp_ports == NULL) {
        DEBUG_PRINT("[!] no output port with name %s found (regex)",
                s_portNameToConnectRightChannelRegex.c_str());
    return false;
    }
    retval = jack_connect(m_p_jackClient, pp_ports[0],
                  jack_port_name(m_p_rightChannelInputPort));
    free(pp_ports);
    if (retval) {
        DEBUG_PRINT("[!] cannot connect input port %s (%d)",
                jack_port_name(m_p_rightChannelInputPort), retval);
    return false;
    } else {
        DEBUG_PRINT("successfully connected %s to %s",
                s_portNameToConnectRightChannelRegex.c_str(),
                jack_port_name(m_p_rightChannelInputPort));
    }

    return true;
}
Ejemplo n.º 7
0
/**
 * This required entry point is called after the client is loaded by
 * jack_internal_client_load().
 *
 * @param client pointer to JACK client structure.
 * @param load_init character string passed to the load operation.
 *
 * @return 0 if successful; otherwise jack_finish() will be called and
 * the client terminated immediately.
 */
int
jack_initialize (jack_client_t *client, const char *load_init)
{
    port_pair_t *pp = malloc (sizeof (port_pair_t));
    const char **ports;

    if (pp == NULL)
        return 1;		/* heap exhausted */

    jack_set_process_callback (client, inprocess, pp);

    /* create a pair of ports */
    pp->input_port = jack_port_register (client, "input",
                                         JACK_DEFAULT_AUDIO_TYPE,
                                         JackPortIsInput, 0);
    pp->output_port = jack_port_register (client, "output",
                                          JACK_DEFAULT_AUDIO_TYPE,
                                          JackPortIsOutput, 0);

    /* join the process() cycle */
    jack_activate (client);

    ports = jack_get_ports (client, NULL, NULL,
                            JackPortIsPhysical|JackPortIsOutput);
    if (ports == NULL) {
        fprintf(stderr, "no physical capture ports\n");
        return 1;		/* terminate client */
    }

    if (jack_connect (client, ports[0], jack_port_name (pp->input_port))) {
        fprintf (stderr, "cannot connect input ports\n");
    }

    free (ports);

    ports = jack_get_ports (client, NULL, NULL,
                            JackPortIsPhysical|JackPortIsInput);
    if (ports == NULL) {
        fprintf(stderr, "no physical playback ports\n");
        return 1;		/* terminate client */
    }

    if (jack_connect (client, jack_port_name (pp->output_port), ports[0])) {
        fprintf (stderr, "cannot connect output ports\n");
    }

    free (ports);

    return 0;			/* success */
}
Ejemplo n.º 8
0
// Crude way of automatically connecting up jack ports
int autoconnect_jack_ports( jack_client_t* client )
{
  const char **all_ports;
  unsigned int ch=0;
  int i;

  // Get a list of all the jack ports
  all_ports = jack_get_ports(client, NULL, NULL, JackPortIsOutput);
  if (!all_ports) {
    rotter_fatal("autoconnect_jack_ports(): jack_get_ports() returned NULL.");
    return -1;
  }

  // Step through each port name
  for (i = 0; all_ports[i]; ++i) {
    // Connect the port
    if (connect_jack_port( all_ports[i], inport[ch] )) {
      return -1;
    }

    // Found enough ports ?
    if (++ch >= channels) break;
  }

  free( all_ports );

  return 0;
}
Ejemplo n.º 9
0
static int attach_input_ports(struct state_jack *s)
{
        int i = 0;
        const char **ports;
        if ((ports = jack_get_ports (s->client, s->in_port_pattern, NULL, JackPortIsOutput)) == NULL) {
                 fprintf(stderr, "Cannot find any ports matching pattern '%s'\n", s->in_port_pattern);
                 return FALSE;
         }
         
         while (ports[i]) ++i;
         if(i < s->record.ch_count) {
                 fprintf(stderr, "Not enought input ports found matching pattern '%s': "
                                "%d requested, %d found\n", s->in_port_pattern, s->record.ch_count, i);
                fprintf(stderr, "Reducing port count to %d\n", i);
                s->record.ch_count = i;
         }
         
         for(i = 0; i < s->in_ch_count; ++i) {
                 if (jack_connect (s->client, ports[i], jack_port_name (s->input_port[i]))) {
                         fprintf (stderr, "cannot connect input ports\n");
                 }
         }
 
         free (ports);
         return TRUE;
}
Ejemplo n.º 10
0
// Crude way of automatically connecting up jack ports
static void autoconnect_jack_ports( jack_client_t* client, int port_count )
{
	const char **all_ports;
	int ch=0, err = 0;
	int i;

	// Get a list of all the jack ports
	all_ports = jack_get_ports(client, NULL, NULL, JackPortIsOutput);
	if (!all_ports) {
		MAST_FATAL("autoconnect_jack_ports(): jack_get_ports() returned NULL");
	}
	
	// Step through each port name
	for (i = 0; all_ports[i]; ++i) {
		const char* local_port = jack_port_name( g_jackport[ch] );
		
		// Connect the port
		MAST_INFO("Connecting '%s' => '%s'", all_ports[i], local_port);
		err = jack_connect(client, all_ports[i], local_port);
		if (err != 0) MAST_FATAL("connect_jack_port(): failed to jack_connect() ports: %d", err);
		
		// Found enough ports ?
		if (++ch >= port_count) break;
	}
	
	free( all_ports );
}
Ejemplo n.º 11
0
std::string RtMidiOutJack :: getPortName( unsigned int portNumber )
{
  JackMidiData *data = static_cast<JackMidiData *> (apiData_);
  std::ostringstream ost;
  std::string retStr("");

  // List of available ports
  const char **ports = jack_get_ports( data->client, NULL,
    JACK_DEFAULT_MIDI_TYPE, JackPortIsInput );

  // Check port validity
  if ( ports == NULL) {
    errorString_ = "RtMidiOut::getPortName: no ports available!";
    error( RtError::WARNING );
    return retStr;
  }

  if ( ports[portNumber] == NULL) {
    ost << "RtMidiOut::getPortName: the 'portNumber' argument (" << portNumber << ") is invalid.";
    errorString_ = ost.str();
    error( RtError::WARNING );
  }
  else retStr.assign( ports[portNumber] );

  free( ports );

  return retStr;
}
Ejemplo n.º 12
0
int main (int argc, char* argv[]) {
  jack_client_t* client;
  char const default_name[] = "connector";

  // this is moderately retarded
  aliases[0] = (char *) malloc (jack_port_name_size());
  aliases[1] = (char *) malloc (jack_port_name_size());

  client = jack_client_open(default_name, JackNullOption, NULL);

  while (1) {
    const char **portnames;
    const char **orig;
    orig = portnames = jack_get_ports(client, "", "", 0);

    desired_connection *desired = desired_connections;
    while (desired->from_port) {
      ensure_connected(client, orig, desired);
      desired++;
    }
    printf("\n");
    sleep(5);
    jack_free(orig);
  }
}
Ejemplo n.º 13
0
// Returns a list of all port names registered in the Jack system
static PyObject* get_ports(PyObject* self, PyObject* args)
{
    PyObject* plist;
    const char** jplist;
    int i;

    pyjack_client_t * client = self_or_global_client(self);
    if(client->pjc == NULL) {
        PyErr_SetString(JackNotConnectedError, "Jack connection has not yet been established.");
        return NULL;
    }

    jplist = jack_get_ports(client->pjc, NULL, NULL, 0);

    i = 0;
    plist = PyList_New(0);
    if(jplist != NULL) {
        while(jplist[i] != NULL) {
            PyList_Append(plist, Py_BuildValue("s", jplist[i]));
            //free(jplist[i]);  // Memory leak or not??
            i++;
        }
    }

    Py_INCREF(plist);
    return plist;
}
Ejemplo n.º 14
0
/* 0 on error */
static int autoconnect_jack_ports(out123_handle *ao, jack_handle_t* handle)
{
	const char **all_ports;
	unsigned int ch=0;
	int err,i;

	/* Get a list of all the jack ports*/
	all_ports = jack_get_ports (handle->client, NULL, NULL, JackPortIsInput);
	if(!all_ports)
	{
		if(!AOQUIET)
			error("connect_jack_ports(): jack_get_ports() returned NULL.");
		return 0;
	}
	/* Step through each port name*/
	for (i = 0; all_ports[i]; ++i)
	{
		const char* in = jack_port_name( handle->ports[ch] );
		const char* out = all_ports[i];

		if ((err = jack_connect(handle->client, in, out)) != 0 && err != EEXIST)
		{
			if(!AOQUIET)
				error1("connect_jack_ports(): failed to jack_connect() ports: %d",err);
			return 0;
		}

		/* Found enough ports ?*/
		if (++ch >= handle->channels) break;
	}
	jack_free(all_ports);
	return 1;
}
Ejemplo n.º 15
0
void
createPorts(jack_client_t *client, std::vector<jack_port_t *> &ports,
            bool playback, std::vector<jack_ringbuffer_t *> &ringbuffers)
{

    const char **physical_ports = jack_get_ports(client, NULL, NULL,
            playback ? JackPortIsInput : JackPortIsOutput | JackPortIsPhysical);
    for (unsigned i = 0; physical_ports[i]; ++i) {
        char port_name[32] = {0};
        if (playback)
            snprintf(port_name, sizeof(port_name), "out_%d", i + 1);
        else
            snprintf(port_name, sizeof(port_name), "in_%d", i + 1);
        port_name[sizeof(port_name) - 1] = '\0';
        jack_port_t *port = jack_port_register(client,
                port_name, JACK_DEFAULT_AUDIO_TYPE, playback ? JackPortIsOutput : JackPortIsInput, 0);
        if (port == nullptr)
            throw std::runtime_error("Could not register JACK output port");
        ports.push_back(port);

        static const unsigned RB_SIZE = 16384;
        jack_ringbuffer_t *rb = jack_ringbuffer_create(RB_SIZE);
        if (rb == nullptr)
            throw std::runtime_error("Could not create JACK ringbuffer");
        if (jack_ringbuffer_mlock(rb))
            throw std::runtime_error("Could not lock JACK ringbuffer in memory");
        ringbuffers.push_back(rb);
    }
    free(physical_ports);
}
//-------------------------------------------------------------------------------
void JMess::setConnectedPorts()
{
  mConnectedPorts.clear();

  const char **ports, **connections; //vector of ports and connections
  QVector<QString> OutputInput(2); //helper variable

  //Get active output ports.
  ports = jack_get_ports (mClient, NULL, NULL, JackPortIsOutput);
  
  for (unsigned int out_i = 0; ports[out_i]; ++out_i) {
    if ((connections = jack_port_get_all_connections 
	 (mClient, jack_port_by_name(mClient, ports[out_i]))) != 0) {
      for (unsigned int in_i = 0; connections[in_i]; ++in_i) {
	OutputInput[0] = ports[out_i];
	//cout << "Output ===> " <<qPrintable(OutputInput[0]) << endl;
	OutputInput[1] = connections[in_i];
	//cout << "Input ===> " << qPrintable(OutputInput[1]) << endl;
	mConnectedPorts.append(OutputInput);
      }
    }
  }

  free(ports);
}
Ejemplo n.º 17
0
/*------------------------------------------------------------------------------
 *  Attempt to connect up the JACK ports automatically
 *   - Just connect left&right to the first two output ports we find
 *----------------------------------------------------------------------------*/
void
JackDspSource :: do_auto_connect ( void )                   throw ( Exception )
{
    const char **all_ports;
    unsigned int ch = 0;
    int          i;

    Reporter::reportEvent( 10, "JackDspSource :: do_auto_connect");
    
    // Get a list of all the jack ports
    all_ports = jack_get_ports (client, NULL, NULL, JackPortIsOutput);
    if (!ports) {
        throw Exception( __FILE__, __LINE__, "jack_get_ports() returned NULL.");
    }
    
    // Step through each port name
    for (i = 0; all_ports[i]; ++i) {

        const char* in  = all_ports[i];
        const char* out = jack_port_name( ports[ch] );
        
        Reporter::reportEvent( 2, "Connecting", in, "to", out);
        
        if (jack_connect(client, in, out)) {
            throw Exception( __FILE__, __LINE__,
                            "Failed to jack_connect() ports", in, out);
        }
    
        // Found enough ports ?
        if (++ch >= getChannel()) break;
    }
    
    free( all_ports );

}
Ejemplo n.º 18
0
void
setup_notebook_out(void) {
	
	const char ** ports_out;
	int i, j, k;
	char client_name[MAXLEN];
	char client_name_prev[MAXLEN];
	char port_name[MAXLEN];
	GtkTreeIter iter;

        ports_out = jack_get_ports(jack_client, NULL, NULL, JackPortIsInput);

	for (j = 0; j < MAXLEN; j++) {
		client_name[j] = '\0';
		client_name_prev[j] = '\0';
	}

	i = 0;
	n_clients = -1;
	if (ports_out) {
		while (ports_out[i] != NULL) {
			/* get the client name */
			j = 0;
			while ((ports_out[i][j] != ':') && (ports_out[i][j] != '\0')) {
				client_name[j] = ports_out[i][j];
				j++;
			}
			client_name[j] = '\0';

			/* create a new notebook page if needed */
			if (strcmp(client_name, client_name_prev) != 0) {
				n_clients++;
				store_out_nb[n_clients] = gtk_list_store_new(1, G_TYPE_STRING);
				nb_out_labels[n_clients] = gtk_label_new(client_name);
				gtk_widget_show(nb_out_labels[n_clients]);
				gtk_notebook_insert_page(GTK_NOTEBOOK(nb_outs), GTK_WIDGET(setup_tree_out()),
							 GTK_WIDGET(nb_out_labels[n_clients]), n_clients);
			}
			/* add the port to the list */
			j = 0;
			while ((ports_out[i][j] != ':') && (ports_out[i][j] != '\0'))
				j++;
			if (ports_out[i][j] == '\0')
				fprintf(stderr, "ERROR: bad JACK port string: %s\n", ports_out[i]);
			else {
				k = 0;
				j++;
				while (ports_out[i][j] != '\0')
					port_name[k++] = ports_out[i][j++];
				port_name[k] = '\0';
				gtk_list_store_append(store_out_nb[n_clients], &iter);
				gtk_list_store_set(store_out_nb[n_clients], &iter, 0, port_name, -1);
			}
			strcpy(client_name_prev, client_name);
			i++;
		}
		free(ports_out);
	}
}
 std::vector<String> AudioOutputDeviceJack::AudioChannelJack::ParameterJackBindings::PossibilitiesAsString() {
     const char** pPortNames = jack_get_ports(pChannel->pDevice->hJackClient, NULL, NULL, JackPortIsInput);
     if (!pPortNames) return std::vector<String>();
     std::vector<String> result;
     for (int i = 0; pPortNames[i]; i++) result.push_back(pPortNames[i]);
     //free(pPortNames); FIXME: pPortNames should be freed here
     return result;
 }
Ejemplo n.º 20
0
// return 0: ok
// return 1: cannot activate client
// return 2: cannot connect output port
// return 3: Jack server not running
// return 4: output port = NULL
int JackOutput::connect()
{
	INFOLOG( "connect" );

	if ( jack_activate ( client ) ) {
		Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_ACTIVATE_CLIENT );
		return 1;
	}


	bool connect_output_ports = m_bConnectOutFlag;

	memset( track_output_ports_L, 0, sizeof(track_output_ports_L) );
	memset( track_output_ports_R, 0, sizeof(track_output_ports_R) );

#ifdef H2CORE_HAVE_LASH
	if ( Preferences::get_instance()->useLash() ){
		LashClient* lashClient = LashClient::get_instance();
		if (lashClient && lashClient->isConnected())
		{
			//		infoLog("[LASH] Sending Jack client name to LASH server");
			lashClient->sendJackClientName();

			if (!lashClient->isNewProject())
			{
				connect_output_ports = false;
			}
		}
	}
#endif

	if ( connect_output_ports ) {
		//	if ( m_bConnectOutFlag ) {
		// connect the ports
		if ( jack_connect( client, jack_port_name( output_port_1 ), output_port_name_1.toLocal8Bit() ) == 0 &&
			 jack_connect ( client, jack_port_name( output_port_2 ), output_port_name_2.toLocal8Bit() ) == 0 ) {
			return 0;
		}

		INFOLOG( "Could not connect so saved out-ports. Connecting to first pair of in-ports" );
		const char ** portnames = jack_get_ports ( client, NULL, NULL, JackPortIsInput );
		if ( !portnames || !portnames[0] || !portnames[1] ) {
			ERRORLOG( "Could't locate two Jack input port" );
			Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT );
			return 2;
		}
		if ( jack_connect( client, jack_port_name( output_port_1 ), portnames[0] ) != 0 ||
			 jack_connect( client, jack_port_name( output_port_2 ), portnames[1] ) != 0 ) {
			ERRORLOG( "Could't connect to first pair of Jack input ports" );
			Hydrogen::get_instance()->raiseError( Hydrogen::JACK_CANNOT_CONNECT_OUTPUT_PORT );
			return 2;
		}
		free( portnames );
	}

	return 0;
}
Ejemplo n.º 21
0
static GstCaps *
gst_jack_audio_src_getcaps (GstBaseSrc * bsrc)
{
  GstJackAudioSrc *src = GST_JACK_AUDIO_SRC (bsrc);
  const char **ports;
  gint min, max;
  gint rate;
  jack_client_t *client;

  if (src->client == NULL)
    goto no_client;

  client = gst_jack_audio_client_get_client (src->client);

  if (src->connect == GST_JACK_CONNECT_AUTO) {
    /* get a port count, this is the number of channels we can automatically
     * connect. */
    ports = jack_get_ports (client, NULL, NULL,
        JackPortIsPhysical | JackPortIsOutput);
    max = 0;
    if (ports != NULL) {
      for (; ports[max]; max++);

      free (ports);
    } else
      max = 0;
  } else {
    /* we allow any number of pads, something else is going to connect the
     * pads. */
    max = G_MAXINT;
  }
  min = MIN (1, max);

  rate = jack_get_sample_rate (client);

  GST_DEBUG_OBJECT (src, "got %d-%d ports, samplerate: %d", min, max, rate);

  if (!src->caps) {
    src->caps = gst_caps_new_simple ("audio/x-raw-float",
        "endianness", G_TYPE_INT, G_BYTE_ORDER,
        "width", G_TYPE_INT, 32,
        "rate", G_TYPE_INT, rate,
        "channels", GST_TYPE_INT_RANGE, min, max, NULL);
  }
  GST_INFO_OBJECT (src, "returning caps %" GST_PTR_FORMAT, src->caps);

  return gst_caps_ref (src->caps);

  /* ERRORS */
no_client:
  {
    GST_DEBUG_OBJECT (src, "device not open, using template caps");
    /* base class will get template caps for us when we return NULL */
    return NULL;
  }
}
Ejemplo n.º 22
0
 int JackProxyDriver::CountIO(const char* type, int flags)
 {
     int count = 0;
     const char** ports = jack_get_ports(fClient, NULL, type, flags);
     if (ports != NULL) {
         while (ports[count]) { count++; }
         jack_free(ports);
     }
     return count;
 }
Ejemplo n.º 23
0
    void JackProxyDriver::ConnectPorts()
    {
        jack_log("JackProxyDriver::ConnectPorts");
        const char** ports = jack_get_ports(fClient, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical | JackPortIsOutput);
        if (ports != NULL) {
            for (int i = 0; i < fCaptureChannels && ports[i]; i++) {
                jack_connect(fClient, ports[i], jack_port_name(fUpstreamPlaybackPorts[i]));
            }
            jack_free(ports);
        }

        ports = jack_get_ports(fClient, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical | JackPortIsInput);
        if (ports != NULL) {
            for (int i = 0; i < fPlaybackChannels && ports[i]; i++) {
                jack_connect(fClient, jack_port_name(fUpstreamCapturePorts[i]), ports[i]);
            }
            jack_free(ports);
        }
    }
Ejemplo n.º 24
0
Archivo: jack.c Proyecto: rknLA/rove
static void connect_to_outports(jack_client_t *client) {
	const char **ports;
	
	ports = jack_get_ports(client, NULL, NULL, JackPortIsPhysical | JackPortIsInput);
	if( ports != NULL ) {
		jack_connect(client, jack_port_name(outport_l), ports[0]);
		jack_connect(client, jack_port_name(outport_r), ports[1]);
	}
	
	free(ports);
}
Ejemplo n.º 25
0
unsigned int JackCpp::AudioIO::numPhysicalDestinationPorts(){
	const char **ports;
	unsigned int cnt = 0;
	ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsInput);
	if (ports != NULL){
		while(ports[cnt] != NULL)
			cnt++;
		free(ports);
		return cnt;
	} else
		return 0;
}
Ejemplo n.º 26
0
void jack_start() {
	jack_set_error_function(error);

	client = jack_client_open("MicToMIDI", JackNullOption, NULL);
	if (client == 0) {
		fprintf(stderr, "jack server not running?\n");
		exit(1);
	}

	jack_set_process_callback(client, process, 0);
	jack_set_sample_rate_callback(client, sample_rate, 0);
	jack_on_shutdown(client, jack_shutdown, 0);

	input_port = jack_port_register(client, "input", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
	output_port = jack_port_register(client, "output", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);

	if(jack_activate(client)) {
		fprintf(stderr, "cannot activate client");
		exit(1);
	}
	atexit(jack_stop);

	const char **ports;
	if((ports = jack_get_ports(client, NULL, NULL, JackPortIsPhysical | JackPortIsOutput)) == NULL)
	{
		fprintf(stderr, "cannot find any physical capture ports\n");
		exit(1);
	}
	if(jack_connect(client, ports[0], jack_port_name(input_port)))
		fprintf(stderr, "cannot connect to physical capture port\n");

	jack_free(ports);
	if((ports = jack_get_ports(client, NULL, "midi", JackPortIsInput)) == NULL)
	{
		fprintf(stderr, "cannot find any MIDI playback ports\n");
		exit(1);
	}
	if(jack_connect(client, jack_port_name(output_port), ports[0]))
		fprintf(stderr, "cannot connect to MIDI playback port\n");
}
Ejemplo n.º 27
0
int listDevices(CSOUND *csound, CS_AUDIODEVICE *list, int isOutput){

    char            **portNames = (char**) NULL, port[64];
    unsigned long   portFlags;
    int             i, n, cnt=0;
    jack_client_t *jackClient;
    RtJackGlobals* p =
      (RtJackGlobals*) csound->QueryGlobalVariableNoCheck(csound,
                                                          "_rtjackGlobals");

    if(p->listclient == NULL)
      p->listclient = jack_client_open("list", JackNoStartServer, NULL);

    jackClient  = p->listclient;

    if(jackClient == NULL) return 0;
    portFlags = (isOutput ? (unsigned long) JackPortIsInput
                 : (unsigned long) JackPortIsOutput);

    portNames = (char**) jack_get_ports(jackClient,
                                        (char*) NULL,
                                        JACK_DEFAULT_AUDIO_TYPE,
                                        portFlags);
    if(portNames == NULL) {
      jack_client_close(jackClient);
      p->listclient = NULL;
      return 0;
    }

    memset(port, '\0', 64);
    for(i=0; portNames[i] != NULL; i++) {
      n = (int) strlen(portNames[i]);
      do {
        n--;
      } while (n > 0 && isdigit(portNames[i][n]));
      n++;
      if(strncmp(portNames[i], port, n)==0) continue;
      strncpy(port, portNames[i], n);
      port[n] = '\0';
      if (list != NULL) {
        strncpy(list[cnt].device_name, port, 63);
        snprintf(list[cnt].device_id, 63, "%s%s",
                 isOutput ? "dac:" : "adc:",port);
        list[cnt].max_nchnls = -1;
        list[cnt].isOutput = isOutput;
      }
      cnt++;
    }
    jack_client_close(jackClient);
    p->listclient = NULL;
    return cnt;
}
Ejemplo n.º 28
0
unsigned int JackCpp::AudioIO::numPhysicalSourcePorts(){
	const char **ports;
	unsigned int cnt = 0;
	//XXX is this really correct? we should get the naming right...
	ports = jack_get_ports (mJackClient, NULL, NULL, JackPortIsPhysical|JackPortIsOutput);
	if (ports != NULL){
		while(ports[cnt] != NULL)
			cnt++;
		free(ports);
		return cnt;
	} else
		return 0;
}
int main(int argc, char *argv[]) {
  jack_client_t *client;
  const char **ports;
  const char* name = (argc>1) ? argv[1] : "StereoDecoder";
  char s[63];
  int i;

  if ((client = jack_client_open(name, JackNullOption, NULL)) == 0) {
    fprintf(stderr, "jack server not running?\n");
    return 1;
  }

  jack_set_process_callback(client, process, 0);
  jack_on_shutdown(client, jack_shutdown, 0);

  for(i=0; i<INPORTS; i++) {
    sprintf(s, "input_%d", i);
    input_ports[i] = jack_port_register(client, s,
          JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
  }

  for(i=0; i<OUTPORTS; i++) {
    sprintf(s, "output_%d", i);
    output_ports[i] = jack_port_register(client, s,
          JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
  }

  if (jack_activate(client)) {
    fprintf(stderr, "cannot activate client");
    return 1;
  }

  if ((ports = jack_get_ports(client, NULL, NULL, JackPortIsPhysical|JackPortIsInput)) == NULL) {
    fprintf(stderr, "Cannot find any physical playback ports\n");
    return 1;
  }

  for(i=0; i<OUTPORTS; i++) {
    if (ports[i]==NULL ||
          jack_connect(client, jack_port_name(output_ports[i]), ports[i])) {
      fprintf(stderr, "cannot connect output ports\n");
    }
  }

  free(ports);

  while (1) {
    sleep(10);
  }
}
Ejemplo n.º 30
0
static void connect_jack_ports() {
  int i;
  int c=0;
  for (i = 0; i < AUDIO_CHANNELS; i++) {
    if (!jack_port[i]) continue;
    if (jack_connect(j_client, jack_port_name(j_output_port[i]), jack_port[i] )) {
      fprintf(stderr, "cannot connect port %s to %s\n", jack_port_name(j_output_port[i]), jack_port[i]);
    }
    c++;
  }

  if (c==0 && jack_ports && strlen(jack_ports)>0) {
    /* all of jack_port[] were NULL, try regexp */
    const char **found_ports = jack_get_ports(j_client, jack_ports, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput);
    if (found_ports) {
      for (i = 0; found_ports[i] && i < AUDIO_CHANNELS; ++i) {
	if (jack_connect(j_client, jack_port_name(j_output_port[i]), found_ports[i])) {
	  fprintf(stderr, "JACK: cannot connect port %s to %s\n", jack_port_name(j_output_port[i]), found_ports[i]);
	}
      }
      jack_free(found_ports);
    }
  }

  /* Midi Port */
  if (use_jack_midi && midi_port && strlen(midi_port)>0) {
    const char **found_ports = jack_get_ports(j_client, midi_port, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput);
    if (found_ports) {
      for (i = 0; found_ports[i]; ++i) {
	if (jack_connect(j_client, found_ports[i], jack_port_name(jack_midi_port))) {
	  fprintf(stderr, "JACK: cannot connect port %s to %s\n", found_ports[i], jack_port_name(jack_midi_port));
	}
      }
      jack_free(found_ports);
    }
  }
}