首页 > 解决方案 > ALSA 排序器队列不运行

问题描述

我的示例代码用于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;
}

标签: alsalibalsa

解决方案


如图所示/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 );

推荐阅读