Hi all,
I try to write a c program that sends midi notes to the Hydrogen drum
sequencer.
I use the alsa library to create a client with an output port.
I attached two files.
loopqueue.c works but loop.c doesn't.
A base drum (note:28) is being send.
I am not succeeding to use direct delivery,
but it only works with the queue.
Any ideas why?
Regards,
Dave
#include <alsa/asoundlib.h>
#include <unistd.h>
int main()
{
snd_seq_t* seq;
int port;
snd_seq_event_t ev;
snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0);
snd_seq_set_client_name(seq, "monprog");
port = snd_seq_create_simple_port(seq, "port1",SND_SEQ_PORT_CAP_READ
| SND_SEQ_PORT_CAP_SUBS_READ,SND_SEQ_PORT_TYPE_APPLICATION);
getchar(); // time to start a softsynth ;)
snd_seq_ev_clear(&ev);
snd_seq_ev_set_source(&ev, port);
snd_seq_ev_set_subs(&ev);
snd_seq_ev_set_direct(&ev);
snd_seq_ev_set_note(&ev, 0, 28, 127, 3);
snd_seq_event_output_direct(seq, &ev);
snd_seq_drain_output(seq);
snd_seq_free_event(&ev);
sleep(1) ;
return 0;
}
#include <alsa/asoundlib.h>
#include <unistd.h>
int main()
{
snd_seq_t* seq;
int port, queue;
snd_seq_queue_tempo_t* tempo;
snd_seq_event_t ev;
snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0);
snd_seq_set_client_name(seq, "monprog");
port = snd_seq_create_simple_port(seq, "port1",SND_SEQ_PORT_CAP_READ
| SND_SEQ_PORT_CAP_SUBS_READ,SND_SEQ_PORT_TYPE_APPLICATION);
queue = snd_seq_alloc_queue(seq);
getchar(); // time to start a softsynth ;)
snd_seq_start_queue(seq, queue, NULL);
snd_seq_ev_clear(&ev);
snd_seq_ev_set_source(&ev, port);
snd_seq_ev_set_subs(&ev);
snd_seq_ev_set_direct(&ev);
snd_seq_ev_schedule_tick(&ev, queue, 0, 0);
snd_seq_ev_set_note(&ev, 0, 28, 127, 3);
snd_seq_event_output_direct(seq, &ev);
snd_seq_drain_output(seq);
snd_seq_free_event(&ev);
sleep(1) ;
return 0;
}
_______________________________________________
Linux-audio-dev mailing list
[email protected]
http://lists.linuxaudio.org/listinfo/linux-audio-dev