コード例 #1
0
ファイル: FormatDJZ.cs プロジェクト: zhangkaich/cellengine
        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);
        }
コード例 #2
0
ファイル: FormatDJZ.cs プロジェクト: zhangkaich/cellengine
        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);
        }