else //否则,表示设置音量大小 WriteSoundSize(ntrack,(unsigned int)IsFirst); IsFirst=1; break; case '{': /*写歌词*/ msgbuf=buf; while(*TextFileBuf!='}' && *TextFileBuf!='\n' && *TextFileBuf!=0 && *TextFileBuf!='[') *(msgbuf++)=*(TextFileBuf++); *msgbuf=0; IsFirst=1; WriteTextMsg(buf); if (*TextFileBuf=='}') TextFileBuf++; break; case '\\': //降八度 OneVal-=12; break; case '/': //升八度 OneVal+=12; break; case '[': case 0: TextFileBuf--; break; default: sprintf(ErrorMsg,"文本文件[%s]出现非法字符(%c)。", TextFileName,c); free(MidiFileOldBuf); free(TextFileOldBuf); fcloseall(); return(InvalideChar); } } } WriteTrackEndMsg(); //设置磁道结束信息 WriteTrackMsgToFile(MidiFp); //将磁道音乐信息定入文件中 ntrack++; } free(MidiFileOldBuf); free(TextFileOldBuf); fclose(MidiFp); sprintf(ErrorMsg,"MIDI文件[%s]转换成功。",MidiFileName); return(ChangeOK); } /*****************************************************/ /*作用:将长整型数据变成可变长度,存入buf处 */ /*入口参数:n 数据 buf 结果保存入 */ /****************************************************/ void MIDI::WriteLenghtToBuf(unsigned long n,char *buf) { unsigned char b[4]={0}; int i; b[3]=(unsigned char)(n&0x7f); i=2; while(n>>7) { n>>=7; b[i--]=(char)( (n&0x7f)|0x80); } for (i=0;i<4;i++) if (b[i]) *(buf++)=b[i]; *buf=0; } long MIDI::NewLong(long n) //将长整型数据改成高位在前 { union LENGHT l={0}; char i; l.length=n; SWAP(&l.b[3],&l.b[0]); SWAP(&l.b[2],&l.b[1]); return(l.length); } //开始演奏音乐 void MIDI::WriteNoteOn(char channel, //通道号 char note, //音符值 char speed, //按键速度 unsigned long delaytime) //延时数 { unsigned char buf[5]; int i; channel--; *(MidiFileBuf++)=0; *(MidiFileBuf++)=0x90|channel&0x7f;//Write Channel *(MidiFileBuf++)=note; *(MidiFileBuf++)=speed; WriteLenghtToBuf(delaytime*MIDICLOCK,buf); i=0; while(buf[i]>=0x80) //Write Delay Time *(MidiFileBuf++)=buf[i++]; *(MidiFileBuf++)=buf[i]; *(MidiFileBuf++)=note; *(MidiFileBuf++)=0; } void MIDI::NoteOn(char note, char speed, unsigned long delaytime) //发音 { unsigned char buf[5]; int i; *(MidiFileBuf++)=0;
上一篇:EMS图片格式转换(Java)程序
下一篇:利用手机模块实现短消息(一)
|