Browse Source

JackMeter: Add "-in" argument for input usage, closes #38

tags/v0.9.0
falkTX 11 years ago
parent
commit
cb59ca5afc
1 changed files with 32 additions and 12 deletions
  1. +32
    -12
      c++/jackmeter/jackmeter.cpp

+ 32
- 12
c++/jackmeter/jackmeter.cpp View File

@@ -42,6 +42,8 @@ jack_client_t* jClient = nullptr;
jack_port_t* jPort1 = nullptr; jack_port_t* jPort1 = nullptr;
jack_port_t* jPort2 = nullptr; jack_port_t* jPort2 = nullptr;


bool gIsOutput = true;

// ------------------------------- // -------------------------------
// JACK callbacks // JACK callbacks


@@ -91,12 +93,12 @@ void session_callback(jack_session_event_t* const event, void* const arg)
// ------------------------------- // -------------------------------
// helpers // helpers


void reconnect_inputs()
void reconnect_ports()
{ {
x_needReconnect = false; x_needReconnect = false;


jack_port_t* const jPlayPort1 = jack_port_by_name(jClient, "system:playback_1");
jack_port_t* const jPlayPort2 = jack_port_by_name(jClient, "system:playback_2");
jack_port_t* const jPlayPort1 = jack_port_by_name(jClient, gIsOutput ? "system:playback_1" : "system:capture_1");
jack_port_t* const jPlayPort2 = jack_port_by_name(jClient, gIsOutput ? "system:playback_2" : "system:capture_2");
std::vector<char*> jPortList1(jack_port_get_all_connections_as_vector(jClient, jPlayPort1)); std::vector<char*> jPortList1(jack_port_get_all_connections_as_vector(jClient, jPlayPort1));
std::vector<char*> jPortList2(jack_port_get_all_connections_as_vector(jClient, jPlayPort2)); std::vector<char*> jPortList2(jack_port_get_all_connections_as_vector(jClient, jPlayPort2));


@@ -105,7 +107,12 @@ void reconnect_inputs()
jack_port_t* const thisPort = jack_port_by_name(jClient, thisPortName); jack_port_t* const thisPort = jack_port_by_name(jClient, thisPortName);


if (! (jack_port_is_mine(jClient, thisPort) || jack_port_connected_to(jPort1, thisPortName))) if (! (jack_port_is_mine(jClient, thisPort) || jack_port_connected_to(jPort1, thisPortName)))
jack_connect(jClient, thisPortName, "M:in1");
{
if (gIsOutput)
jack_connect(jClient, thisPortName, "M:in1");
else
jack_connect(jClient, "Mi:in1", thisPortName);
}


free(thisPortName); free(thisPortName);
} }
@@ -115,7 +122,12 @@ void reconnect_inputs()
jack_port_t* const thisPort = jack_port_by_name(jClient, thisPortName); jack_port_t* const thisPort = jack_port_by_name(jClient, thisPortName);


if (! (jack_port_is_mine(jClient, thisPort) || jack_port_connected_to(jPort2, thisPortName))) if (! (jack_port_is_mine(jClient, thisPort) || jack_port_connected_to(jPort2, thisPortName)))
jack_connect(jClient, thisPortName, "M:in2");
{
if (gIsOutput)
jack_connect(jClient, thisPortName, "M:in2");
else
jack_connect(jClient, "Mi:in2", thisPortName);
}


free(thisPortName); free(thisPortName);
} }
@@ -135,12 +147,17 @@ public:
setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
setWindowTitle("M"); setWindowTitle("M");


if (gIsOutput)
setColor(Color::GREEN);
else
setColor(Color::BLUE);

setChannels(2); setChannels(2);
setOrientation(VERTICAL); setOrientation(VERTICAL);
setSmoothRelease(1); setSmoothRelease(1);


displayMeter(1, 0.0);
displayMeter(2, 0.0);
displayMeter(1, 0.0f);
displayMeter(2, 0.0f);


int refresh = float(jack_get_buffer_size(jClient)) / jack_get_sample_rate(jClient) * 1000; int refresh = float(jack_get_buffer_size(jClient)) / jack_get_sample_rate(jClient) * 1000;


@@ -165,7 +182,7 @@ protected:
x_portValue2 = 0.0; x_portValue2 = 0.0;


if (x_needReconnect) if (x_needReconnect)
reconnect_inputs();
reconnect_ports();
} }


QWidget::timerEvent(event); QWidget::timerEvent(event);
@@ -185,6 +202,9 @@ int main(int argc, char* argv[])
app.setOrganizationName("Cadence"); app.setOrganizationName("Cadence");
app.setWindowIcon(QIcon(":/scalable/cadence.svg")); app.setWindowIcon(QIcon(":/scalable/cadence.svg"));


if (app.arguments().contains("-in"))
gIsOutput = false;

// JACK initialization // JACK initialization
jack_status_t jStatus; jack_status_t jStatus;
#ifdef HAVE_JACKSESSION #ifdef HAVE_JACKSESSION
@@ -192,7 +212,7 @@ int main(int argc, char* argv[])
#else #else
jack_options_t jOptions = static_cast<jack_options_t>(JackNoStartServer|JackUseExactName); jack_options_t jOptions = static_cast<jack_options_t>(JackNoStartServer|JackUseExactName);
#endif #endif
jClient = jack_client_open("M", jOptions, &jStatus);
jClient = jack_client_open(gIsOutput ? "M" : "Mi", jOptions, &jStatus);


if (! jClient) if (! jClient)
{ {
@@ -203,8 +223,8 @@ int main(int argc, char* argv[])
return 1; return 1;
} }


jPort1 = jack_port_register(jClient, "in1", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
jPort2 = jack_port_register(jClient, "in2", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
jPort1 = jack_port_register(jClient, "in1", JACK_DEFAULT_AUDIO_TYPE, gIsOutput ? JackPortIsInput : JackPortIsOutput, 0);
jPort2 = jack_port_register(jClient, "in2", JACK_DEFAULT_AUDIO_TYPE, gIsOutput ? JackPortIsInput : JackPortIsOutput, 0);


jack_set_process_callback(jClient, process_callback, nullptr); jack_set_process_callback(jClient, process_callback, nullptr);
jack_set_port_connect_callback(jClient, port_callback, nullptr); jack_set_port_connect_callback(jClient, port_callback, nullptr);
@@ -213,7 +233,7 @@ int main(int argc, char* argv[])
#endif #endif
jack_activate(jClient); jack_activate(jClient);


reconnect_inputs();
reconnect_ports();


// Show GUI // Show GUI
MeterW gui; MeterW gui;


Loading…
Cancel
Save