public byte[] toDJZ20() { ////文件结构 ////*文件开始*// //u32 FileSize ; //文件大小 //u32 EndTime ; //结束时间 //u32 NoteCount ; //音符数量 //Note* Notes ; //音符数据 //u32 MetaCount ; //控制数量 //Meta* Controls ; //控制数据 ////*文件结束*// ////文件字节流按照 高位存高字节 低位存低字节的顺序 ////音符结构体 (就是游戏中落下的块) //typedef struct { //u32 Time ; //时间 单位 ms , 该音符在什么时间激发 //u8 Line ; //游戏中的轨道:将由编辑器编辑 //u8 Data ; //发音 (就是MIDI事件的发音) //}Note; ////控制结构体 (就是游戏中落下的块) //typedef struct { //u32 Time ; //时间 单位 ms , 在什么时间激发 //u8 Type ; //类型 //u32 Data ; //数据 //}Meta; EventComparerDJZTime ec = new EventComparerDJZTime(); Events.Sort(ec); Controls.Sort(ec); Int32 FileSize = 4 + 4 + 4 + Events.Count * 6 + 4 + Controls.Count * 9; byte[] data = new byte[FileSize]; int P = 0; Midi.write32(data, P, (Int32)FileSize); P += 4; //文件大小 Midi.write32(data, P, (Int32)EndTime); P += 4; //结束时间 Midi.write32(data, P, (Int32)Events.Count); P += 4; //音符数量 for (int i = 0; i < Events.Count; i++) //音符数据序列 { Midi.write32(data, P, (Int32)(((EventDJZ)Events[i]).time)); P += 4; Midi.write8(data, P, ((EventDJZ)Events[i]).pos); P += 1; Midi.write8(data, P, ((EventDJZ)Events[i]).note); P += 1; } Midi.write32(data, P, (Int32)Controls.Count); P += 4; //控制数量 for (int i = 0; i < Controls.Count; i++) //控制数据序列 { Midi.write32(data, P, (Int32)(((EventDJZ)Controls[i]).time)); P += 4; Midi.write8(data, P, ((EventDJZ)Controls[i]).note); P += 1; Midi.write32(data, P, ((EventDJZ)Controls[i]).metadata); P += 4; } return(data); }
public byte[] toDJZ10() { ////文件结构 ////*文件开始*// //u32 FileSize ; //文件大小 //u32 BPM ; //歌曲速度 (Beat Per Min 拍/分钟) //u32 NoteCount ; //音符数量 //Node* Notes ; //音符数据 ////*文件结束*// ////文件字节流按照 高位存高字节 低位存低字节的顺序 ////音符结构体 (就是游戏中落下的块) //typedef struct { //u32 Time ; //时间 单位 ms , 该音符在什么时间激发 //u8 Line ; //游戏中的轨道 :将由编辑器编辑 //u8 Data ; //发音 (就是MIDI事件的发音) //}Node; EventComparerDJZTime ec = new EventComparerDJZTime(); Events.Sort(ec); Int32 FileSize = 4 + 4 + 4 + Events.Count * 6; byte[] data = new byte[FileSize]; int P = 0; Midi.write32(data, P, (Int32)FileSize); P += 4; //文件大小 Midi.write32(data, P, (Int32)BPM); P += 4; //歌曲速度 (Beat Per Min 拍/分钟) Midi.write32(data, P, (Int32)Events.Count); P += 4; //音符数量 for (int i = 0; i < Events.Count; i++) //音符数据序列 { Midi.write32(data, P, (Int32)(((EventDJZ)Events[i]).time)); P += 4; Midi.write8(data, P, ((EventDJZ)Events[i]).pos); P += 1; Midi.write8(data, P, ((EventDJZ)Events[i]).note); P += 1; //Console.WriteLine("Note[" + i + "].time = " + (Int32)(((Event)Events[i]).time)); } return(data); }