11 #include <sys/types.h>
16 #include <sys/soundcard.h>
21 #define MIDI_DEVICE "/dev/midi"
24 #define NOTE_DATA 0x7F
32 /* global, do we need sockets global? */
35 int all_stop(int fd) {
39 note_off(fd,j,i,(int)0x7F);
43 int midi_write_msg3(int fd,unsigned char status,unsigned char data1,unsigned char data2) {
52 int midi_write_msg2(int fd,unsigned char status,unsigned char data1) {
60 int note_on(int fd,int chan,int note,int vel) {
61 midi_write_msg3(fd,NOTE_ON|(CH_MASK&chan),note&NOTE_DATA,vel&VEL_MASK);
65 int note_off(int fd,int chan,int note,int vel) {
66 midi_write_msg3(fd,NOTE_OFF|(CH_MASK&chan),note&NOTE_DATA,vel&VEL_MASK);
70 int midi_read(int fd,char *buf) {
72 bytes_read=read(fd,buf,1);
76 int midi_read_msg(int fd,char *buf) {
79 midi_read(fd,&tmp_buf);
82 /* decide how much to read */
83 if(((buf[0]&MSB_MASK)==PROGRAM_CHANGE) || ((buf[0]&MSB_MASK)==CHANNEL_PRESSURE)) {
84 printf("debug: program change or channel pressure event detected\n");
85 midi_read(fd,&tmp_buf);
89 printf("debug: none program change or channel pressure event detected\n");
91 midi_read(fd,&tmp_buf);
102 /* test the io api ... */
104 int main(int argc,char **argv) {
106 int note,channel,i,j,k;
111 channel=atoi(argv[1]);
114 midi_fd=open(MIDI_DEVICE,O_RDWR);
115 printf("debug: midi_fd = %d\n",midi_fd);
117 printf("reading ...\n");
118 i=midi_read_msg(midi_fd,&my_buf[1]);
119 printf("debug: i = %d\n",i);
121 for(j=7;j>=0;j--) printf("%s%d%s",(j==7?"|":""),
122 (((int)my_buf[k] & (1<<j))>0?1:0),
126 printf("sleep for 3 secs ...\n");
133 note_off(midi_fd,0,38,127);
134 note_off(midi_fd,0,42,127);
135 note_on(midi_fd,0,42,127);
136 note_on(midi_fd,0,38,127);
138 note_off(midi_fd,0,42,127);
139 note_on(midi_fd,0,42,127);