我正在尝试在 C 中使用 ALSA 来实现 MIDI 目的。
我的问题是,当使用有价值的参数时, snd_rawmidi_open() 有点“崩溃”(像 while 循环一样永远等待):
#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>
int main(int argc,char** argv)
{
snd_rawmidi_t *handle_in = 0;
int err;
fprintf(stderr, "TEST 1\n");
err = snd_rawmidi_open(&handle_in,NULL,"hw:1,0,0",0);
fprintf(stderr,"TEST 2\n");
if (err) {
fprintf(stderr,"snd_rawmidi_open failed: %d\n",err);
}
fprintf(stderr, "TEST 3\n");
exit(0);
}
“hw:1,0,0”是 MIDI 键盘。当我使用像“foo”这样的无效值时,它会给出错误。如果有效,程序将显示“TEST 1”并暂停。
任何想法?
非常感谢!
答案1
默认情况下,snd_rawmidi_open
等待请求的端口可用。
如果您不希望这样做,请添加该标志(如果您希望阻止读/写调用,SND_RAWMIDI_NONBLOCK
则随后将其重置)。snd_rawmidi_nonblock()