Пример #1
0
        public void load(string file)
        {
            byte[]       f  = File.ReadAllBytes(file);
            BinaryReader br = new BinaryReader(new MemoryStream(f, 0, f.Length));

            hdr.parseHeader(br);
            readEntries(br);

            for (int i = 0; i < amtaData.Count; i++)
            {
                f  = amtaData[i];
                br = new BinaryReader(new MemoryStream(f, 0, f.Length));
                AMTA amta = new AMTA();
                amta.parseAMTA(br);
                DATA data = new DATA();
                data.parseDATA(br);
                MARK mark = new MARK();
                mark.parseMARK(br);
                EXT_ ext = new EXT_();
                ext.parseEXT_(br);
                STRG strg = new STRG();
                strg.parseSTRG(br);
                strgList.Add(strg);
                br.Close();
            }
        }
Пример #2
0
 public MetaDataNodeWrapper(AMTA amta)
 {
     MetaFile = amta;
 }
Пример #3
0
        /// <summary>
        /// Load bars from bytes.
        /// </summary>
        /// <param name="src"></param>
        public void Load(byte[] b)
        {
            MemoryStream     src = new MemoryStream(b);
            BinaryDataReader br  = new BinaryDataReader(src);

            fileHeader = new Header(ref br);
            numTracks  = br.ReadUInt32();
            trackInfo  = new List <UInt32>();
            for (int i = 0; i < numTracks; i++)
            {
                trackInfo.Add(br.ReadUInt32());
            }
            fileReferences = new FileReference[numTracks];
            for (int i = 0; i < numTracks; i++)
            {
                fileReferences[i] = new FileReference()
                {
                    AMTAOffset = br.ReadUInt32(), WAVOffset = br.ReadUInt32()
                };
            }

            amtas = new List <AMTA>();
            wavs  = new List <b_wav>();

            for (int i = 0; i < numTracks; i++)
            {
                long basePos = br.Position;

                Syroot.BinaryData.ByteOrder b2 = br.ByteOrder;
                br.Position = fileReferences[i].AMTAOffset;
                AMTA a = new AMTA();
                a.magic     = new string(br.ReadChars(4));
                a.byteOrder = br.ReadUInt16();

                if (a.byteOrder == ByteOrder.BigEndian)
                {
                    br.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian;
                }
                else
                {
                    br.ByteOrder = Syroot.BinaryData.ByteOrder.LittleEndian;
                }

                a.byteOrder  = ByteOrder.BigEndian;
                a.version    = br.ReadUInt16();
                a.chunkSize  = br.ReadUInt32();
                a.dataOffset = br.ReadUInt32();
                a.markOffset = br.ReadUInt32();
                a.extOffset  = br.ReadUInt32();
                a.strgOffset = br.ReadUInt32();

                a.data = new AMTA.Data();
                a.mark = new AMTA.Mark();
                a.ext  = new AMTA.Ext();
                a.strg = new AMTA.Strg();

                br.Position       = basePos + a.dataOffset;
                a.data.magic      = new string(br.ReadChars(4));
                a.data.restOfSize = br.ReadUInt32();
                a.data.unknown    = br.ReadBytes((int)a.data.restOfSize);

                br.Position       = basePos + a.markOffset;
                a.mark.magic      = new string(br.ReadChars(4));
                a.mark.restOfSize = br.ReadUInt32();
                a.mark.unknown    = br.ReadBytes((int)a.mark.restOfSize);

                br.Position      = basePos + a.extOffset;
                a.ext.magic      = new string(br.ReadChars(4));
                a.ext.restOfSize = br.ReadUInt32();
                a.ext.unknown    = br.ReadBytes((int)a.ext.restOfSize);

                br.Position       = basePos + a.strgOffset;
                a.strg.magic      = new string(br.ReadChars(4));
                a.strg.restOfSize = br.ReadUInt32();
                a.strg.trackName  = new string(br.ReadChars((int)a.strg.restOfSize - 1));

                br.ByteOrder = b2;
            }

            for (int i = 0; i < numTracks; i++)
            {
                br.Position = fileReferences[i].WAVOffset;
                br.ReadUInt32s(3);
                b_wav w      = new b_wav();
                int   length = (int)br.ReadUInt32();
                br.Position -= 12;
                w.Load(br.ReadBytes(length));
                wavs.Add(w);
            }
        }