int MIDI::ChangeTextToMidi(char *TextFileName, char *MidiFileName) { int tracks,ntrack,delaytime; int speed,IsFirst,nn,dd; unsigned char buf[80],*msgbuf,c; FILE *TextFp,*MidiFp; long FileSize; char SpeedVal; TextFp=fopen(TextFileName,"r"); if (TextFp==NULL) {sprintf(ErrorMsg, "文本文件[%s]不能打开。\n",TextFileName); return(TextFileNotOpen); } fseek(TextFp,0,SEEK_END); /*测试文件大小*/ FileSize=ftell(TextFp); TextFileBuf=(char *)malloc(FileSize);/*为文件分配内存*/ if (TextFileBuf==NULL) { sprintf(ErrorMsg, "文本文件[%s]太大,没有足够的内存处理。\n", TextFileName); fclose(TextFp); return(TextFileToBig); } memset(TextFileBuf,0,FileSize); MidiFileBuf=(char *) malloc(FileSize*4); if ( MidiFileBuf==NULL) { sprintf(ErrorMsg,"不能为MIDI文件分配内存。\n"); fclose(TextFp); free(TextFileBuf); return(MallocError); } MidiFp=fopen(MidiFileName,"wb"); if (MidiFp==NULL) { sprintf(ErrorMsg, "Midi文件[%s]不能建立。\n",MidiFileName); fclose(TextFp); free(MidiFileBuf); free(TextFileBuf); return(MidiFileCanNotCreate); } MidiFileOldBuf=MidiFileBuf; TextFileOldBuf=TextFileBuf; fseek(TextFp,0,SEEK_SET); fread(TextFileBuf,FileSize,1,TextFp); fclose(TextFp); JumpNullChar(TextFileBuf); c=strnicmp(TextFileBuf,"[MIDI]",6); if (c) {sprintf(ErrorMsg, "文本文件[%s]不是MIDI文本文件。\n",MidiFileName); fcloseall(); free(TextFileOldBuf); free(MidiFileOldBuf); return(NotMIDITextFile); } TextFileBuf+=6; JumpNullChar(TextFileBuf); sscanf(TextFileBuf,"%c,%d/%d,%d,%d", //取调号等信息 &c,&nn,&dd,&speed,&tracks); buf[0]=c;buf[1]=0; SetOneVal(buf); //设置该调1的键值 if (nn<1 || nn> 7) nn=4; if (dd<2 || dd>16) dd=4; while(*TextFileBuf!='\n') TextFileBuf++; JumpNullChar(TextFileBuf); if (speed<60 || speed >200) speed=120; JumpNullChar(TextFileBuf); if (tracks<1 || tracks>16) tracks=1; JumpNullChar(TextFileBuf); ntrack=1; WriteMHToFile(6,1,tracks,speed,MidiFp); WriteTimeSignature(nn,dd); //设置时间记录格式 SetPaiNum(nn); WriteSpeed(speed); //设置演奏速度 while(ntrack<=tracks && *TextFileBuf!=0) {sprintf(buf,"[%d]",ntrack); TextFileBuf=strstr(TextFileBuf,buf);//查找该磁道起始位置 if (TextFileBuf==NULL) //没有找到 { sprintf(ErrorMsg, "在文件[%s]中,第%d磁道音乐信息没找到。\n.",
上一篇:EMS图片格式转换(Java)程序
下一篇:利用手机模块实现短消息(一)
|