|
发表于 2006-4-26 23:13:00
|
显示全部楼层
/**************************************************
/* 作用:将符合MIDI文本文件的text文件转换成MIDI */
/* 文件. */
/* 入口参数:TextFileName 文本文件名 */
/* MidiFileName MIDI文件名 */
/* 出口参数:见 ERRORCODE 说明 */
/*************************************************/
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); |
|