背景
在下面的片段中,我将一个带有持续时间的 MIDI 音符发送到合成器端口。为此,我需要分配并启动一个队列,否则我会得到一个“无效参数”。(错误代码 -22)来自 ALSA。
发送事件的操作,正确地,没有引用队列,这似乎是隐式引用的。但是,一个 MIDI 应用程序可能有多个队列,我也想知道。
据我了解,队列不像缓冲区,而是需要管理定时事件(需要队列来发送具有持续时间的便笺的原因),所以我知道需要发送带有特定演示文稿的一些事件(带有开始和/或结束时间)。
问题
当发送事件没有明确引用队列时,看似默认的队列是如何确定的?
在上述问题的上下文中,当应用程序创建多个队列时会发生什么?是隐式的,还是第一个?
甚至在我创建一个默认队列之前是否已经有一个默认队列,我可以开始它而不是一个(和唯一的)新创建的队列?
附件
上面提到的片段:
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);
}