#include #include #include #include #include char esatz[512] = ""; char workfeld1[512] = ""; char workfeld2[512] = ""; int transkey = 0; int track = 0; int itab = 0; int strack = 0; // schalter, wir sind im track int izu = 0; // zaehlen klammern fuer suchen ende track int note = 0; // Note int vel = 0; // Anschlagstaerke char datei[256]; char adatei[256]; char xbyte; int bytes; int drumchan; FILE *eingabe; FILE *ausgabe; int main (int argc, char **argv) { printf("RZ der Pferdefreunde Lindheim - Midi-Transposer\n"); /* Parameter-Pruefung */ if (argc != 5) { printf("Bitte alle Parameter eingeben (Eingabedatei Ausgabedatei Transpose-Offset Drum-Channel\n"); goto ende; } /* parameter aufbereiten */ strcpy(datei,argv[1]); strcpy(adatei,argv[2]); strcpy(workfeld1,argv[3]); transkey = atoi(workfeld1); strcpy(workfeld1,argv[4]); drumchan = atoi(workfeld1); printf("%s%s%s%i\n","Verarbeitung fuer ", datei, " keyoffset ",transkey); /* uffmache von de dadei */ eingabe = fopen(datei,"r"); if (eingabe ==NULL) { perror("Open Eingabe dumm gelaufe"); goto ende; } ausgabe = fopen(adatei,"w"); if (eingabe ==NULL) { perror("Open Ausgabe dumm gelaufe"); goto ende; } /* nun kanns losgehen */ lesen: /* esatz butze */ itab = -1; while (itab < sizeof(esatz)) { itab = itab + 1; esatz[itab] = 0; } bytes = readhigh(512, eingabe,(char *) &esatz); if (bytes < 1) goto ende; /* ermitteln track und nummer */ /* suchen " trk" */ if (strstr(esatz,"songtrk")) { itab = -1; while (itab < bytes-3) { itab = itab + 1; if ((esatz[itab] == ' ') && (esatz[itab+1] == 't') && (esatz[itab+2] == 'r') && (esatz[itab+3] == 'k')) { workfeld1[0] = esatz[itab+4]; workfeld1[1] = esatz[itab+5]; workfeld1[3] = 0; track = atoi(workfeld1); printf("%s%i\n","Gefunden wurde Track:",track); strack = 1; // wir sind jetzt im track izu = 0; // klammernzaehler auf 0, da track-anfang } // if.. } // while } // if strstr /* ermitteln track-ende */ if (strack == 1) { itab = -1; while (itab < bytes) { itab = itab + 1; if (esatz[itab] == '{') { izu = izu + 1; } if (esatz[itab] == '}') { izu = izu - 1; } } // ende while } // ende if str.. if (izu == 0) { // alle Klammern wieder zu... strack = 0; } if (strack == 0) { fprintf(ausgabe,"%s",esatz); // einfach weg damit goto lesen; // wir sind nicht im sontrack - also weiter } /* ermitteln note und umsetzen */ xbyte = '}'; strcpy(workfeld1,esatz); if (strstr(workfeld1,"non") || strstr(workfeld1,"noff")) { unstring((char *) &workfeld1, (char *) &xbyte, (char *) workfeld2); workfeld1[strlen(workfeld1)] = xbyte; sscanf(workfeld2,"%i%i",¬e, &vel); if (track != drumchan) { // kein Transpose auf Drum-Channel note = note + transkey; } sprintf((char *) &workfeld2,"%c%i%c%i\n",' ',note,' ',vel); strcat(workfeld1,workfeld2); fprintf(ausgabe,"%s",workfeld1); } else { fprintf(ausgabe,"%s",esatz); } goto lesen; ende: if (eingabe != NULL) fclose(eingabe); if (ausgabe != NULL) fclose(ausgabe); return 0; }