-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <jack/jack.h>
-
-typedef jack_default_audio_sample_t sample_t;
-
-static jack_client_t *jc;
-static jack_port_t *inport[2], *outport[4];
-
-static int process_callback(jack_nframes_t nframes, void *arg __attribute__((unused)))
-{
- for (int ch=0; ch<2; ch++) {
- sample_t *in = jack_port_get_buffer(inport[ch], nframes);
- sample_t *out = jack_port_get_buffer(outport[ch], nframes);
- sample_t *out2 = jack_port_get_buffer(outport[2+ch], nframes);
- for (jack_nframes_t i=0; i<nframes; i++) {
- out[i] = in[i];
- out2[i] = in[i];
- }
- }
- return 0;
-}
-
-static void port_callback(jack_port_id_t id, int reg, void *arg __attribute__((unused)))
-{
- jack_port_t *p = jack_port_by_id(jc, id);
- if (!p) {
- puts("port_callback: lookup failed");
- return;
- }
- const char *name = jack_port_name(p);
- printf("%s port %s\n", (reg ? "Registered" : "Unregistered"), name);
-
- const char *ss = strstr(name, ":from_slave_");
- if (reg && ss) {
- char *to = (ss[12] == '1' ? "brum:in1" : "brum:in2");
- printf("\t... connecting to %s\n", to);
- if (jack_connect(jc, name, to))
- puts("jack_connect failed");
- }
-}
-
-int main(void)
-{
- jc = jack_client_open("brum", JackNoStartServer, NULL);
- if (!jc) {
- puts("jack_client_open failed");
- return 1;
- }
-
- for (int i=0; i<2; i++) {
- char name[16];
- sprintf(name, "in%d", i+1);
- inport[i] = jack_port_register(jc, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput, 0);
- if (!inport[i]) {
- puts("jack_port_register failed");
- return 1;
- }
- }
-
- for (int i=0; i<4; i++) {
- char name[16];
- sprintf(name, "out%d", i+1);
- outport[i] = jack_port_register(jc, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0);
- if (!outport[i]) {
- puts("jack_port_register failed");
- return 1;
- }
- }
-
- jack_set_process_callback(jc, process_callback, NULL);
- jack_set_port_registration_callback(jc, port_callback, NULL);
-
- if (jack_activate(jc)) {
- puts("jack_activate failed");
- return 1;
- }
-
- puts("Connecting ports...");
- for (int i=1; i<=4; i++) {
- char a[32], b[32];
- sprintf(a, "brum:out%d", i);
- sprintf(b, "system:playback_%d", i);
- if (jack_connect(jc, a, b))
- printf("Failed to connect %s -> %s\n", a, b);
- }
-
- puts("Running...");
- char xxx[16];
- read(0, xxx, sizeof(xxx));
-
- puts("exiting");
- jack_client_close(jc);
- return 0;
-}