Charles FlXche wrote: > Hello everybody ! > > I'm french, so I'll **TRY** to speak english correctly... > > I'm new in C programming (in programming, in fact...) and I work on a > soft for speaking with an effect rack (alesis microverb IV) with sysex > trough rawmidi for saving my patches, remote control this unit, etc... > > So, this is my problem : I don't know how to send sysex through > rawmidi !! I'm using the snd_rawmidi_open and snd_rawmidi_write, but I > can't send anything !! Even the rawmidi.c test program from alsa-utils > don't work... > > My soundcard is an Sound Blaster Live ! 1024 Player... > > This is a piece of my source code : > > /* START OF SOURCE */ > > #include <sys/asoundlib.h> > #include <stdio.h> > #include <stdlib.h> > > typedef struct { > int prog; //num of program > int a; //A parameter > int b; //B parameter > int bank; //bank number (0 = preset, 1 = user) > } pdb; > > void affiche(unsigned char a[]) { > int i=-1; > > printf("The next SySex have been sent trough RawMidi\n"); > > > while (a[i++] != 0xF7) { > printf("%x",a[i]); > printf(" "); > } > printf("\n"); > printf("\n"); > > return; > } > > void entete(unsigned char mess[]) { > > /* start of SySex */ > mess[0]=0xf0; > /* identification Alesis */ > mess[1]=0x00; > mess[2]=0x00; > mess[3]=0x0e; > /*identification microverb IV*/ > mess[4]=0x12; > /* MIDI channel (0x00 = omni) */ > mess[5]=0x00; > } > > void sysex_store(unsigned char a[]) { > > // head of SySex > entete(a); > > //SySex definition STORE > a[6]=0x03; > > // EOX > a[7]=0xF7; > } > > void dump_store(snd_rawmidi_t *handle) { > unsigned char sysex[8]; > ssize_t taille; //### VARIABLE A DECOMMENTER QUAND ON REACTIVE > L'ENVOIE DU SYSEX ### > > //creation du unsigned char > sysex_store(sysex); > > //envoie du unsigned char > snd_rawmidi_write(handle,sysex,taille); > affiche(sysex); > } > > int main (void) { > > snd_rawmidi_t *handle; > > snd_rawmidi_open(&handle, 0, 0, SND_RAWMIDI_OPEN_DUPLEX); >
The first argument is input handle, the second is output handle. And the third is the device. 0 is eq to NULL, and I don't think you have a device with that name. And you migth want to have a output handle since you send data. And someone told you. Add error handling checks and then you get to know on what calls fails. Or trace in to it on a debugger. > > dump_store(handle); > > snd_rawmidi_close(handle); > > return 0; > } > > /* END OF SOURCE */ > > Normally, this code create a "store the current program" message and > send it trough rawmidi... But it don't... > > So, where is my error ? > > Another small question : how can I force a pause in a program ? Is > there a function like [delay(10);] who make a pause of 10 miliseconds > in a execution ? I'll need to make a pause between to sysex later in > program... > > Thanx for help a newbie !! > > Charles Flèche > > _______________________________________________ > Alsa-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/alsa-devel -- foo! _______________________________________________ Alsa-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-devel