[linux-audio-user] sending program change to alsa
Peter Brinkmann
brinkman at math.TU-Berlin.DE
Sat Jun 18 12:05:37 EDT 2005
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;
}
More information about the Linux-audio-user
mailing list