%20%E3%81%AF%E6%B0%B8%E9%81%A0%E3%81%AB%E5%BE%85%E3%81%A1%E3%81%BE%E3%81%99%20-%20%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93.png)
MIDI目的でCでALSAを使用しようとしています。
私の問題は、貴重な引数を使用するときに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()