ALSA sequencer queue does not run

174 Views Asked by At

My example code uses snd_seq_queue_status_get_tick_time() to check a running queue. But the result is that it always reports a zero tick time.

#include <stdio.h>
#include <alsa/asoundlib.h>

int queue;
snd_seq_t *seq_handle;
snd_seq_tick_time_t current_tick;
snd_seq_queue_status_t *status;

int main (int argc, char **argv) {

    snd_seq_open(&seq_handle, "default", SND_SEQ_OPEN_INPUT | SND_SEQ_OPEN_OUTPUT, 0);
    queue = snd_seq_alloc_queue( seq_handle );
    fprintf(stderr,"queue id=%d\n", queue);

    snd_seq_start_queue( seq_handle, queue, NULL );

    for(int i=0;i<4;i++) {
        snd_seq_queue_status_malloc(&status);
        snd_seq_get_queue_status(seq_handle, queue, status);
        current_tick = snd_seq_queue_status_get_tick_time(status);
        snd_seq_queue_status_free(status);

        fprintf(stderr,"tick=%d\n", current_tick );
        sleep(1);
    }

    snd_seq_stop_queue( seq_handle, queue, NULL );
    snd_seq_free_queue( seq_handle, queue );
    return 0;
}
1

There are 1 best solutions below

0
On

As shown in /proc/asound/seq/queues, the queue was never started.

snd_seq_start_queue() puts the queue start event into a local buffer; to actually send all buffered events to the kernel, you then have to call snd_seq_drain_output():

    snd_seq_start_queue( seq_handle, queue, NULL );
    snd_seq_drain_output( seq_handle );