snd_rawmidi_open () espera para sempre - nenhuma mensagem de erro

1

Estou tentando usar o ALSA para propósitos MIDI em C.

Meu problema é, snd_rawmidi_open () tipo de "travamentos" (espera para sempre como um loop while) ao usar argumentos valiosos:

#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" é um teclado MIDI. Quando eu uso um valor inválido como "foo", dá um erro. Com um válido, o programa exibe "TESTE 1" e faz uma pausa.

Alguma ideia?

Muito obrigado!

    
por theredled 12.09.2014 / 15:05

1 resposta

1

Por padrão, snd_rawmidi_open aguarda até que a porta solicitada esteja disponível.

Se você não quiser isso, adicione o sinalizador SND_RAWMIDI_NONBLOCK (e redefina-o depois com snd_rawmidi_nonblock() se quiser que as chamadas de leitura / gravação estejam bloqueando).

    
por 12.09.2014 / 16:14

Tags