public void Read(BinaryReader binaryReader, int entryIndex, long mtrlSectionOffset, long pointerPosition) { EntryIndex = entryIndex; PositionOfOffsetFromMtrlSectionOffset = pointerPosition; LocalSectionOffset = binaryReader.ReadUInt32At(PositionOfOffsetFromMtrlSectionOffset); HeaderPosition = mtrlSectionOffset + LocalSectionOffset; ChannelCount = binaryReader.ReadByteAt(HeaderPosition + 0x04); Codec = (MaterialCodecType)binaryReader.ReadByteAt(HeaderPosition + 0x05); MtrlNumber = binaryReader.ReadUInt16At(HeaderPosition + 0x06); SampleRate = binaryReader.ReadUInt32At(HeaderPosition + 0x08); LoopStart = binaryReader.ReadUInt32At(HeaderPosition + 0x0c); LoopEnd = binaryReader.ReadUInt32At(HeaderPosition + 0x10); ExtraDataSize = binaryReader.ReadUInt32At(HeaderPosition + 0x14); StreamSize = binaryReader.ReadUInt32At(HeaderPosition + 0x18); ExtraDataId = binaryReader.ReadUInt16At(HeaderPosition + 0x1c); ExtraDataOffset = HeaderPosition + 0x20; StreamPosition = ExtraDataOffset + ExtraDataSize; MaterialHeaderSize = StreamPosition - HeaderPosition; InnerStreamStartPosition = ExtraDataOffset + 0x10; ReadCodecInformation(binaryReader); StreamHeaderSize = ExtraDataObject?.Size ?? 0; NoStreamHeaderExtraDataSize = ExtraDataSize - StreamHeaderSize; InnerStreamSize = StreamHeaderSize + StreamSize; NoStreamHeaderSize = InnerStreamStartPosition - HeaderPosition; TrackEndPosition = InnerStreamStartPosition + InnerStreamSize; }
public static ACodec GetCodec(MaterialCodecType codec) { switch (codec) { default: return(null); case MaterialCodecType.OGGVorbis: return(new OggVorbisCodec()); case MaterialCodecType.HCA: return(new HcaACodec()); } }