OK, I'm stupid... Sorry for using the devel-list for such a fu..... thing.
Charles On 2002.05.10 18:00 Charles Flèche wrote: > Who ! What's a problem ! > > This is my source code : > > /* START OF SOURCE */ > > * tests midi > Utilisation de l'API rawmidi > On passe pars l'API rawmidi > TEST 1 : dump store > TEST 2 : dump edit buffer (programme 0, tous les paramêtres à 0) > TEST 3 : dump all data > TEST 4 : request all data (dump du message et reception du > sysex en retour) > TEST 5 : program change vers 00 > */ > > #include <stdio.h> > #include <unistd.h> > #include <time.h> > #include <sys/types.h> > #include <sys/stat.h> > #include <fcntl.h> > #include <stdlib.h> > #include <alsa/asoundlib.h> > > > void store(snd_rawmidi_t *handle) { > > snd_rawmidi_write (handle, "\xf0\x00\x00\x0e\x12\x00\x03\xF7", > 8); > snd_rawmidi_drain(handle); > } > > void deb(int fd) { > // pour se rapprocher de la realite future du programme, un > tableau de unsigned char est passe à write > unsigned char > sysex[]="\xF0\x00\x00\x0E\x12\x00\x00\x00\x00\x00\x00\xF7"; > write (fd,sysex,12); > } > > void dad(snd_rawmidi_t *handle) { > // pour se rapprocher de la realite future du programme, un > tableau de unsigned char est passe à write > int i; > int flag; > struct timespec *delay; > unsigned char > >sysex[]="\xF0\x00\x00\x0E\x12\x00\x01\x03\x00\x00\x24\x50\x01\x3F\x30\x01\x50\x1E\x01\x32\x20\x01\x25\x3F\x01\x44\x12\x01\x5A\x7F\x01\x0F\x57\x01\x38\x1E\x01\x35\x60\x01\x3D\x4F\x01\x4E\x11\x01\x2A\x4B\x01\x44\x60\x01\x40\x55\x01\x32\x61\x01\x19\x75\x01\x63\x73\x01\x18\x54\x01\x3C\x50\x01\x2A\x54\x01\x21\x55\x01\x34\x22\x01\x30\x66\x01\x2B\x46\x01\x15\x6F\x01\x31\x4A\x01\x40\x7F\x01\x51\x47\x01\x03\x25\x01\x11\x0F\x01\x02\x0F\x01\x08\x24\x01\x0E\x0A\x01\x03\x1E\x01\x05\x1E\x01\x08\x14\x01\x19\x0F\x01\x01\x7D\x01\x07\x1E\x01\x04\x19\x01\x02\x5B\x01\x04\x0F\x01\x03\x15\x01\x02\x47\x01\x03\x19\x01\x06\x7D\x01\x05\x64\x01\x0A\x4B\x01\x02\x00\x01\x30\x00\x01\x55\x00\x01\x46\x10\x01\x1E\x00\x01\x0D\x1E\x01\x00\x00\x01\x00\x63\x01\x64\x1C\x01\x66\x07\x01\x1E\x46\x01\x46\x1E\x01\x2A\x3A\x01\x0B\x0B\x01\x3B\x2A\x01\x0E\x0E\x01\x13\x07\x01\x3C\x28\x01\x13\x18\x01\x0B\x0A\x01\x3F\x01\x01\x50\x00\x01\x18\x00\x01\x40\x0E\x01\x20\x14\x01\x4B\x03\x01\x29\x05\x01\x44\x0C\x01\x00\x14\x01\x3C\x29\x > 01 > >\x25\x05\x01\x5F\x1B\x01\x32\x32\x01\x1A\x58\x01\x39\x4B\x01\x2D\x06\x01\x3C\x02\x01\x3B\x3D\x01\x43\x49\x01\x48\x04\x01\x49\x03\x01\x50\x03\x01\x48\x05\x01\x38\x32\x01\x19\x0E\x01\x52\x64\x01\x4A\x04\x01\x25\x4B\x01\x4D\x0B\x01\x35\x01\x01\xF7"; > > delay=(struct timespec *)malloc(sizeof(struct timespec)); > // definie le delai de 10ms > delay->tv_sec=0; > delay->tv_nsec=10000000; > //envoie l'entete du sysex > for (i=0;i<7;i++) > snd_rawmidi_write (handle,&sysex[i],1); > snd_rawmidi_drain(handle); > flag=0; > while (i!=308) { > snd_rawmidi_write (handle,&sysex[i],1); > i++; > flag++; > if (flag==3) { > nanosleep(delay,NULL); > flag=0; > snd_rawmidi_drain(handle); > } > } > } > > void pc(int fd){ > // program change vers programme 0 > write (fd,"\xc0\x0",2); > } > > void affiche(unsigned char a[]) { > int i=-1; > printf("SySex recu : \n"); > while (a[i++] != 0xF7) { > printf("%x",a[i]); > printf(" "); > } > printf("\n"); > printf("\n"); > return; > } > > void rp(snd_rawmidi_t *handle_in,snd_rawmidi_t *handle_out) { > unsigned char buf[307]; > > snd_rawmidi_write(handle_out,"\xF0\x00\x00\x0E\x12\x00\x41\xF7",8); > snd_rawmidi_drain(handle_out); > snd_rawmidi_read(handle_in,buf,308); > > affiche(buf); > > } > > int main (int argc,char **argv) { > int fd; > int err; > snd_rawmidi_t *handle_in,*handle_out; > char *device_in = NULL; > char *device_out = NULL; > //ouverture du node en lecture > err = snd_rawmidi_open(&handle_in, NULL, device_in, 0); > if (err) > printf("snd_rawmidi_open IN a echoue...\n"); > //ouverture du node en lecture > err = snd_rawmidi_open(NULL, &handle_out, device_out, 0); > if (err) > printf("snd_rawmidi_open OUT a echoue...\n"); > printf("Store\n"); > store(handle_out); > sleep(1); > /* printf("Dump Edit Buffer\n"); > deb(fd); > sleep(1);*/ > printf("Dump All Data\n"); > dad(handle_out); > sleep(1); > /* printf("Program Change\n"); > pc(fd); > sleep(1);*/ > printf("Request All Program\n"); > rp(handle_in,handle_out); > sleep(1); > return 0; > } > > /* END OF SOURCE */ > > First, it isn't well programmed, I know it ! In fact, I've programmed > this one using nodes (/dev/midi), passing trough the rawmidi api. So > in this source, you'll see trace of the old source... But now, I'm > trying to use the rawmidi interface. This program compile well, but > at execution, I could see this : > > api: rawmidi.c:301: snd_rawmidi_open: Assertion `(inputp || > outputp) && name' failed. > > (note : first word, api, is the name of my source) > > What's the problem ? > > This one has been tested on : > > linux 2.4.18 > very last alsa ! (Release Candidate 0.9 RC1) > maestro3 > emu10k1 on another computer with same kernel and same alsa > > If anyone could help me, I'll be very very happy, and my teacher too > !! (this project is for my studies...) > > Thanx for all ! > > Charles > > _______________________________________________________________ > > Have big pipes? SourceForge.net is looking for download mirrors. We > supply > the hardware. You get the recognition. Email Us: > [EMAIL PROTECTED] > _______________________________________________ > Alsa-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/alsa-devel _______________________________________________________________ Have big pipes? SourceForge.net is looking for download mirrors. We supply the hardware. You get the recognition. Email Us: [EMAIL PROTECTED] _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel