String open (const BigInteger& inputChannels, const BigInteger& outputChannels, double /* sampleRate */, int /* bufferSizeSamples */) { jack_Log ("opening client"); lastError = client.open (KV_JACK_NAME, 0); if (lastError.isNotEmpty()) { jack_Log (lastError); return lastError; } DBG("num inputs: " << inputChannels.getHighestBit()); DBG("num outputs: " << outputChannels.getHighestBit()); jack_on_shutdown (client, JackDevice::shutdownCallback, this); jack_set_error_function (JackDevice::errorCallback); jack_set_port_connect_callback (client, JackDevice::portConnectCallback, this); jack_set_process_callback (client, JackDevice::processCallback, this); jack_set_thread_init_callback (client, JackDevice::threadInitCallback, this); jack_set_port_registration_callback (client, JackDevice::_portRegistration, this); client.registerPort ("audio_1", Jack::audioPort, JackPortIsOutput); client.registerPort ("audio_2", Jack::audioPort, JackPortIsOutput); return lastError; }
String open (const BigInteger& inputChannels, const BigInteger& outputChannels, double /* sampleRate */, int /* bufferSizeSamples */) { if (client == nullptr) { lastError = "No JACK client running"; return lastError; } lastError = String::empty; close(); juce::jack_set_process_callback (client, processCallback, this); juce::jack_set_port_connect_callback (client, portConnectCallback, this); juce::jack_on_shutdown (client, shutdownCallback, this); juce::jack_activate (client); isOpen_ = true; if (! inputChannels.isZero()) { if (const char** const ports = getJackPorts (client, true)) { const int numInputChannels = inputChannels.getHighestBit() + 1; for (int i = 0; i < numInputChannels; ++i) { const String portName (ports[i]); if (inputChannels[i] && portName.upToFirstOccurrenceOf (":", false, false) == getName()) { int error = juce::jack_connect (client, ports[i], juce::jack_port_name ((jack_port_t*) inputPorts[i])); if (error != 0) jack_Log ("Cannot connect input port " + String (i) + " (" + String (ports[i]) + "), error " + String (error)); } } free (ports); } } if (! outputChannels.isZero()) { if (const char** const ports = getJackPorts (client, false)) { const int numOutputChannels = outputChannels.getHighestBit() + 1; for (int i = 0; i < numOutputChannels; ++i) { const String portName (ports[i]); if (outputChannels[i] && portName.upToFirstOccurrenceOf (":", false, false) == getName()) { int error = juce::jack_connect (client, juce::jack_port_name ((jack_port_t*) outputPorts[i]), ports[i]); if (error != 0) jack_Log ("Cannot connect output port " + String (i) + " (" + String (ports[i]) + "), error " + String (error)); } } free (ports); } } return lastError; }