At Fri, 15 Feb 2002 07:21:24 +0100 (MET), Guenther Sohler wrote: > > I have simplified the seq.c in the alsa-driver-test direcory for me > to also understand. > > The program is now quite short and outputs a note and quits > > here is it > ----------- > > #include <stdio.h> > #include "alsa/asoundlib.h" > > > int main(int argc, char *argv[]) > { > snd_seq_t *handle; > snd_seq_event_t ev; > > snd_seq_open(&handle, "hw", SND_SEQ_OPEN_DUPLEX, 0); > snd_seq_alloc_queue(handle); > > bzero(&ev, sizeof(ev)); > ev.dest.client=65; > ev.dest.port=0; > ev.type = SND_SEQ_EVENT_NOTEON; > ev.data.note.channel = 0; > ev.data.note.note = 64 ; > ev.data.note.velocity = 127; > snd_seq_event_output_direct(handle, &ev); > sleep(1); > ev.type = SND_SEQ_EVENT_NOTEOFF; > snd_seq_event_output_direct(handle, &ev); > snd_seq_drain_output(handle); > return 0; > } > > There are two questions ? > > Why doesn't it work if I allocate no queue ? There is no need for a queue as i > directly output events
No, you don't need to allocate a queue if you schedule by yourself. your program lack the schedule of events, i.e. snd_seq_ev_set_direct(&ev); before output the event packet. this is equivalent with ev.queue = SND_SEQ_QUEUE_DIRECT; if this is specified, the event is sent immediately to the destination, so you don't need any queue. as default, the event is scheduled using a specified queue, and as default, the queue is #0. that's why you had to allocate a queue. one more note: you don't need to call snd_seq_drain_output() when you send events via snd_seq_event_output_direct(). the drain_output() is necessary for buffered outputs via normal snd_seq_event_output() functions. > What does "hw" mean ? what are the other possibilities ? originally it means "hardware". in future it can be other ones, such like "network:foo", etc. (well, we can dream :) ciao, Takashi _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel