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