コード例 #1
0
ファイル: SEQ.cs プロジェクト: Hatry1337/MIDI2SEQ
        public static SEQ Load(byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            // All SEP/SEQ stuff is big-endian, like MIDI
            if (data.Length < 15)
            {
                MessageBox.Show("SEQ: Data is too short");
            }
            int magic   = BEBitConv.FromInt32(data, 0);
            int version = BEBitConv.FromInt32(data, 4);

            if (magic != Magic)
            {
                MessageBox.Show("SEQ: Magic number is wrong");
            }
            if (version != Version)
            {
                MessageBox.Show("SEQ: Version number is wrong");
            }
            short resolution = BEBitConv.FromInt16(data, 8);
            int   tempo      = MIDIConv.From3BE(data, 10);
            short rhythm     = BEBitConv.FromInt16(data, 13);

            byte[] scoredata = new byte[data.Length - 15];
            Array.Copy(data, 15, scoredata, 0, scoredata.Length);
            return(new SEQ(resolution, tempo, rhythm, scoredata));
        }
コード例 #2
0
ファイル: SEQ.cs プロジェクト: Hatry1337/MIDI2SEQ
        public static SEQ FromMIDI(byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            if (data.Length < 15)
            {
                MessageBox.Show("MIDI: Data is too short");
            }

            short resolution = BEBitConv.FromInt16(data, 12);

            int   tempo  = MIDIConv.From3BE(data, 26);
            short rhythm = BEBitConv.FromInt16(data, 33);

            byte[] scoredata = new byte[data.Length - 37];
            Array.Copy(data, 37, scoredata, 0, scoredata.Length);
            return(new SEQ(resolution, tempo, rhythm, scoredata));
        }