fix: keep persistent MIDI client across notes in integration tests
Co-authored-by: aider (deepseek/deepseek-reasoner) <aider@aider.chat>
This commit is contained in:
@@ -56,27 +56,32 @@ static int midi_inject_process(jack_nframes_t nframes, void *arg) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helper: close and reopen the persistent MIDI client so it connects
|
/* Helper: initialise the persistent MIDI client (open and connect) */
|
||||||
to the current looper instance */
|
static int midi_inject_init(const char *target_port) {
|
||||||
static void midi_inject_reconnect(const char *target_port) {
|
if (midi_inject_client) return 0; /* already initialised */
|
||||||
|
jack_status_t st;
|
||||||
|
midi_inject_client = jack_client_open("midi_inject_persistent", JackNoStartServer, &st);
|
||||||
|
if (!midi_inject_client) return -1;
|
||||||
|
midi_inject_port = jack_port_register(midi_inject_client, "out",
|
||||||
|
JACK_DEFAULT_MIDI_TYPE,
|
||||||
|
JackPortIsOutput, 0);
|
||||||
|
if (!midi_inject_port) return -1;
|
||||||
|
jack_set_process_callback(midi_inject_client, midi_inject_process, NULL);
|
||||||
|
if (jack_activate(midi_inject_client) != 0) return -1;
|
||||||
|
char src[64];
|
||||||
|
snprintf(src, sizeof(src), "midi_inject_persistent:out");
|
||||||
|
if (jack_connect(midi_inject_client, src, target_port) != 0) return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Helper: close the persistent MIDI client */
|
||||||
|
static void midi_inject_close(void) {
|
||||||
if (midi_inject_client) {
|
if (midi_inject_client) {
|
||||||
jack_deactivate(midi_inject_client);
|
jack_deactivate(midi_inject_client);
|
||||||
jack_client_close(midi_inject_client);
|
jack_client_close(midi_inject_client);
|
||||||
midi_inject_client = NULL;
|
midi_inject_client = NULL;
|
||||||
midi_inject_port = NULL;
|
midi_inject_port = NULL;
|
||||||
}
|
}
|
||||||
jack_status_t st;
|
|
||||||
midi_inject_client = jack_client_open("midi_inject_persistent", JackNoStartServer, &st);
|
|
||||||
if (!midi_inject_client) return;
|
|
||||||
midi_inject_port = jack_port_register(midi_inject_client, "out",
|
|
||||||
JACK_DEFAULT_MIDI_TYPE,
|
|
||||||
JackPortIsOutput, 0);
|
|
||||||
if (!midi_inject_port) return;
|
|
||||||
jack_set_process_callback(midi_inject_client, midi_inject_process, NULL);
|
|
||||||
jack_activate(midi_inject_client);
|
|
||||||
char src[64];
|
|
||||||
snprintf(src, sizeof(src), "midi_inject_persistent:out");
|
|
||||||
jack_connect(midi_inject_client, src, target_port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The test code uses this callback in two ways:
|
/* The test code uses this callback in two ways:
|
||||||
@@ -252,8 +257,8 @@ static jack_client_t *midi_persistent_client = NULL;
|
|||||||
static jack_port_t *midi_persistent_port = NULL;
|
static jack_port_t *midi_persistent_port = NULL;
|
||||||
|
|
||||||
static int send_jack_note_on(const char *target_port, unsigned char note, unsigned char velocity) {
|
static int send_jack_note_on(const char *target_port, unsigned char note, unsigned char velocity) {
|
||||||
midi_inject_reconnect(target_port);
|
/* initialise client on first call (per‑test) */
|
||||||
if (!midi_inject_client || !midi_inject_port) return -1;
|
if (midi_inject_init(target_port) != 0) return -1;
|
||||||
|
|
||||||
midi_inject_note = note;
|
midi_inject_note = note;
|
||||||
midi_inject_velocity = velocity;
|
midi_inject_velocity = velocity;
|
||||||
@@ -939,6 +944,8 @@ static int test_wav_load(void) {
|
|||||||
unlink("loop.wav");
|
unlink("loop.wav");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
/* force a fresh MIDI connection for this test */
|
||||||
|
midi_inject_close();
|
||||||
/* send control key + note 70 to trigger load */
|
/* send control key + note 70 to trigger load */
|
||||||
if (send_jack_note_on("looper:control", 64, 127) != 0) {
|
if (send_jack_note_on("looper:control", 64, 127) != 0) {
|
||||||
jack_deactivate(client);
|
jack_deactivate(client);
|
||||||
@@ -1038,6 +1045,8 @@ static int test_wav_save(void) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
safe_usleep(500000);
|
safe_usleep(500000);
|
||||||
|
/* force a fresh MIDI connection for this test */
|
||||||
|
midi_inject_close();
|
||||||
/* send control key + note 71 to save */
|
/* send control key + note 71 to save */
|
||||||
if (send_jack_note_on("looper:control", 64, 127) != 0) {
|
if (send_jack_note_on("looper:control", 64, 127) != 0) {
|
||||||
jack_deactivate(client);
|
jack_deactivate(client);
|
||||||
|
|||||||
Reference in New Issue
Block a user