Очередь секвенсора ALSA не запускается - PullRequest
0 голосов
/ 19 мая 2018

Мой пример кода использует snd_seq_queue_status_get_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 Ответ

0 голосов
/ 19 мая 2018

Как показано в /proc/asound/seq/queues, очередь никогда не запускалась.

snd_seq_start_queue() помещает событие запуска очереди в локальный буфер;чтобы фактически отправить все буферизованные события в ядро, вам нужно вызвать snd_seq_drain_output():

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