コード例 #1
0
        static VGM_HEADER ReadVGMHeader(BinaryReader hFile)
        {
            VGM_HEADER CurHead = new VGM_HEADER();

            FieldInfo[] fields = typeof(VGM_HEADER).GetFields();
            foreach (FieldInfo field in fields)
            {
                if (field.FieldType == typeof(uint))
                {
                    uint val = hFile.ReadUInt32();
                    field.SetValue(CurHead, val);
                }
                else if (field.FieldType == typeof(ushort))
                {
                    ushort val = hFile.ReadUInt16();
                    field.SetValue(CurHead, val);
                }
                else if (field.FieldType == typeof(char))
                {
                    char val = hFile.ReadChar();
                    field.SetValue(CurHead, val);
                }
                else if (field.FieldType == typeof(byte))
                {
                    byte val = hFile.ReadByte();
                    field.SetValue(CurHead, val);
                }
            }

            // Header preperations
            if (CurHead.lngVersion < 0x00000101)
            {
                CurHead.lngRate = 0;
            }
            if (CurHead.lngVersion < 0x00000110)
            {
                CurHead.shtPSG_Feedback = 0x0000;
                CurHead.bytPSG_SRWidth  = 0x00;
                CurHead.lngHzYM2612     = CurHead.lngHzYM2413;
                CurHead.lngHzYM2151     = CurHead.lngHzYM2413;
            }

            if (CurHead.lngHzPSG != 0)
            {
                if (CurHead.shtPSG_Feedback == 0)
                {
                    CurHead.shtPSG_Feedback = 0x0009;
                }
                if (CurHead.bytPSG_SRWidth == 0)
                {
                    CurHead.bytPSG_SRWidth = 0x10;
                }
            }
            return(CurHead);
        }
コード例 #2
0
        bool OpenVGMFile(string fileName)
        {
            bool zipped = CheckIfZip(fileName, 3, "1F-8B-08");

            //Read size
            uint       FileSize = 0;
            FileStream vgmFile  = File.Open(fileName, FileMode.Open);

            if (zipped)
            {
                vgmFile.Position = vgmFile.Length - 4;
                byte[] b = new byte[4];
                vgmFile.Read(b, 0, 4);
                uint fileSize = BitConverter.ToUInt32(b, 0);
                FileSize         = fileSize;
                vgmFile.Position = 0;

                GZipStream stream = new GZipStream(vgmFile, CompressionMode.Decompress);
                _vgmReader = new BinaryReader(stream);
                zipped     = true;
            }
            else
            {
                FileSize   = (uint)vgmFile.Length;
                _vgmReader = new BinaryReader(vgmFile);
            }

            uint fccHeader;

            fccHeader = (uint)_vgmReader.ReadUInt32();
            if (fccHeader != FCC_VGM)
            {
                return(false);
            }

            _VGMDataLen = FileSize;
            _VGMHead    = ReadVGMHeader(_vgmReader);

            if (zipped)
            {
                _vgmReader.Close();
                vgmFile = File.Open(fileName, FileMode.Open);
                GZipStream stream = new GZipStream(vgmFile, CompressionMode.Decompress);
                _vgmReader = new BinaryReader(stream);
            }
            else
            {
                _vgmReader.BaseStream.Seek(0, SeekOrigin.Begin);
            }

            //Figure out header offset
            int offset = (int)_VGMHead.lngDataOffset;

            if (offset == 0 || offset == 0x0000000C)
            {
                offset = 0x40;
            }
            _VGMDataOffset = offset;

            _vgmReader.ReadBytes(offset);
            _VGMData   = _vgmReader.ReadBytes((int)(FileSize - offset));
            _vgmReader = new BinaryReader(new MemoryStream(_VGMData));

            if ((byte)_vgmReader.PeekChar() == 0x67)
            {
                _vgmReader.ReadByte();
                if ((byte)_vgmReader.PeekChar() == 0x66)
                {
                    _vgmReader.ReadByte();
                    byte type = _vgmReader.ReadByte();
                    uint size = _vgmReader.ReadUInt32();
                    _DACData = _vgmReader.ReadBytes((int)size);
                }
            }

            vgmFile.Close();
            return(true);
        }