Пример #1
0
        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
        public static short FromInt16(Endianness endianness, byte[] str, int offset)
        {
            switch (endianness)
            {
            case Endianness.LittleEndian:
                return(BitConv.FromInt16(str, offset));

            case Endianness.BigEndian:
                return(BEBitConv.FromInt16(str, offset));

            default:
                throw new ArgumentException("Endianness is invalid.");
            }
        }
Пример #3
0
        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));
        }