public int Write(Stream stream, XsbHeader header)
        {
            var start  = stream.Position;
            var writer = new BinaryWriter(stream);

            writer.Write(header.Signature);
            writer.Write(header.ToolVersion);
            writer.Write(header.FormatVersion);
            writer.Write(header.Crc);
            writer.Write(header.BuildTime);
            writer.Write(header.Platform);
            writer.Write(header.SimpleCueCount);
            writer.Write(header.ComplexCueCount);
            writer.Write(header.Unk0);
            writer.Write(header.TotalCueCount);
            writer.Write(header.WaveBankCount);
            writer.Write(header.SoundCount);
            writer.Write(header.CueNameTableLength);
            writer.Write(header.Unk1);
            writer.Write(header.SimpleCuesOffset);
            writer.Write(header.ComplexCuesOffset);
            writer.Write(header.CueNamesOffset);
            writer.Write(header.Unk2);
            writer.Write(header.VariationTablesOffset);
            writer.Write(header.Unk3);
            writer.Write(header.WaveBankNameTableOffset);
            writer.Write(header.CueNameHashTableOffset);
            writer.Write(header.CueNameHashValuesOffset);
            writer.Write(header.SoundsOffset);

            var name = new byte[XwbConstants.WavebankBanknameLength];

            header.Name.GetBytes().AsSpan().CopyTo(name);
            writer.Write(name);

            return((int)(stream.Position - start));
        }
        public XsbHeader Read(Stream stream)
        {
            var reader = new BinaryReader(stream);

            var result = new XsbHeader
            {
                Signature               = reader.ReadInt32(),
                ToolVersion             = reader.ReadInt16(),
                FormatVersion           = reader.ReadInt16(),
                Crc                     = reader.ReadInt16(),
                BuildTime               = reader.ReadInt64(),
                Platform                = reader.ReadByte(),
                SimpleCueCount          = reader.ReadInt16(),
                ComplexCueCount         = reader.ReadInt16(),
                Unk0                    = reader.ReadInt16(),
                TotalCueCount           = reader.ReadInt16(),
                WaveBankCount           = reader.ReadByte(),
                SoundCount              = reader.ReadInt16(),
                CueNameTableLength      = reader.ReadInt16(),
                Unk1                    = reader.ReadInt16(),
                SimpleCuesOffset        = reader.ReadInt32(),
                ComplexCuesOffset       = reader.ReadInt32(),
                CueNamesOffset          = reader.ReadInt32(),
                Unk2                    = reader.ReadInt32(),
                VariationTablesOffset   = reader.ReadInt32(),
                Unk3                    = reader.ReadInt32(),
                WaveBankNameTableOffset = reader.ReadInt32(),
                CueNameHashTableOffset  = reader.ReadInt32(),
                CueNameHashValuesOffset = reader.ReadInt32(),
                SoundsOffset            = reader.ReadInt32(),
                Name                    = reader.ReadBytes(XwbConstants.WavebankBanknameLength)
                                          .TakeWhile(b => b != 0x00).ToArray().GetString()
            };

            return(result);
        }