Clemens,
In C, this would be something like this:
snd_seq_t *seq;
snd_seq_event_t ev;
snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0);
snd_seq_set_client_name(seq, "my funky program changer");
snd_seq_create_simple_port(seq, "source port",
SND_SEQ_PORT_CAP_READ,
SND_SEQ_PORT_TYPE_MIDI_GENERIC |
SND_SEQ_PORT_TYPE_APPLICATION);
snd_seq_ev_clear(&ev);
snd_seq_ev_set_dest(&ev, dest_client, dest_port);
snd_seq_ev_set_direct(&ev);
snd_seq_ev_set_pgmchange(&ev, channel, program);
snd_seq_event_output_direct(seq, &ev);
I've taken your code snippet and replaced the line
snd_seq_ev_set_dest(...)
by
snd_seq_ev_set_broadcast(...)
expecting to see this event broadcast to any ports
that'll listen, but I'm not seeing any reception on
any input port. Isn't this the way to broadcast
events? Any pointers would be appreciated.
Best,
Peter
PS: Here's the modified code:
#include <alsa/asoundlib.h>
int main(int argc, char **argv) {
snd_seq_t *seq;
snd_seq_event_t ev;
snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0);
snd_seq_set_client_name(seq, "my funky program changer");
snd_seq_create_simple_port(seq, "source port",
SND_SEQ_PORT_CAP_READ,
SND_SEQ_PORT_TYPE_MIDI_GENERIC |
SND_SEQ_PORT_TYPE_APPLICATION);
snd_seq_ev_clear(&ev);
//snd_seq_ev_set_dest(&ev, 80, 0);
snd_seq_ev_set_broadcast(&ev);
snd_seq_ev_set_direct(&ev);
snd_seq_ev_set_pgmchange(&ev, 1, 9);
snd_seq_event_output_direct(seq, &ev);
return 0;
}