public sunSpcBinary(Stream output) { mWriter = new aBinaryWriter(output, Endianness.Big, Encoding.GetEncoding(932)); mText = new sunSpcBinarySection(); mData = new sunSpcBinarySection(); mDataString = new sunSpcBinarySection(); mSymbol = new sunSpcBinarySection(); mSymbolString = new sunSpcBinarySection(); mWriter.PushAnchor(); }
void WriteWaveBank() { var winfSize = CalculateControlSize(mWaveBank.Count); var wbctSize = CalculateControlGroupSize(mWaveBank.Count); var baseOffset = (32 + winfSize + wbctSize); mWriter.PushAnchor(); mWriter.Write32(WSYS); mWriter.WriteS32(0); // TODO: size mWriter.WriteS32(0); // unused mWriter.WriteS32(0); // unused mWriter.WriteS32(32); mWriter.WriteS32(32 + winfSize); mWriter.WritePadding(32, 0); mWriter.Write32(WINF); mWriter.WriteS32(mWaveBank.Count); var winfOffset = baseOffset; foreach (var waveGroup in mWaveBank) { mWriter.WriteS32(winfOffset); winfOffset += CalculateWaveGroupSize(waveGroup); } mWriter.WritePadding(32, 0); mWriter.Write32(WBCT); mWriter.WriteS32(0); // unused mWriter.WriteS32(mWaveBank.Count); var wbctOffset = baseOffset; foreach (var waveGroup in mWaveBank) { mWriter.WriteS32(wbctOffset + CalculateArchiveInfoSize(waveGroup.Count) + CalculateWaveSize(waveGroup.Count) + CalculateControlSize(waveGroup.Count) + 64); wbctOffset += CalculateWaveGroupSize(waveGroup); } mWriter.WritePadding(32, 0); foreach (var waveGroup in mWaveBank) { WriteWaveGroup(waveGroup); } mWriter.PopAnchor(); }
void WriteWaveBank() { mWriter.PushAnchor(); mWriter.WriteString("RIFF"); mWriter.WriteS32(CalculateInfoSize() + 8 + CalculateSmplSize() + 20 + CalculatePdtaSize() + 8 + 4); mWriter.WriteString("sfbk"); WriteInfo(); WriteSdta(); WritePdta(); mWriter.PopAnchor(); }