【发布时间】:2015-06-05 23:53:55
【问题描述】:
背景
在下面的 sn-p 中,我将带有持续时间的 MIDI 音符发送到合成器端口。为此,我需要分配并启动一个队列,否则我会得到一个“无效参数”。 (错误代码 -22)来自 ALSA。
发送事件的操作,正确地,没有引用队列,这似乎被隐含地引用了。但是,一个 MIDI 应用程序可能有多个队列,我也想知道。
在我的理解中,队列不像缓冲区,而是需要管理定时事件(需要队列来发送具有持续时间的便笺的原因),所以我理解需要发送一些事件特定的演示文稿(带有开始和/或结束时间)。
问题
当发送事件没有明确引用队列时,看似默认的队列是如何确定的?
在上述问题的上下文中,当应用程序创建多个队列时会发生什么?是隐式的,还是第一个?
在我创建一个默认队列之前是否已经有一个默认队列,我可以开始它而不是一个(和唯一的)新创建的队列?
附件
上面提到的sn-p:
static void test_send(void) {
snd_seq_event_t ev;
int queue = snd_seq_alloc_queue(seq);
check_error(queue, "snd_seq_alloc_queue");
snd_seq_start_queue(seq, queue, NULL);
snd_seq_ev_clear(&ev);
snd_seq_ev_set_note(&ev, 0, 64, 127, 1);
snd_seq_ev_set_source(&ev, out_port);
snd_seq_ev_set_dest(&ev, synth_addr.client, synth_addr.port);
int status = snd_seq_event_output_direct(seq, &ev);
check_error(status, "snd_seq_event_output_direct");
snd_seq_free_queue(seq, queue);
}
【问题讨论】: