/// <summary> /// Writes the size field for this frame to a stream. /// </summary> /// <param name="stream">The stream to write to.</param> /// <param name="version">The ID3v2 version to use in writing the frame.</param> protected void WriteFrameSize(Stream stream, ID3Versions version) { if (stream == null) { throw new ArgumentNullException("stream"); } switch (version) { case ID3Versions.V2_2: stream.Write(EncodedInteger.ToBytes(this.Size, ID3V2_2FrameSizeFieldLength), 0, ID3V2_2FrameSizeFieldLength); break; case ID3Versions.V2_3: stream.Write(EncodedInteger.ToBytes(this.Size, ID3V2_3FrameSizeFieldLength), 0, ID3V2_3FrameSizeFieldLength); break; case ID3Versions.V2_4: stream.Write(SynchsafeInteger.Synchsafe(this.Size), 0, ID3V2_4FrameSizeFieldLength); break; default: throw new UnsupportedVersionException(version); } }
/// <summary> /// Writes the tag header to the specified stream. /// </summary> /// <param name="stream">The stream to be written to.</param> /// <param name="version">The ID3v2 version of the tag to be written.</param> private void WriteHeader(Stream stream, ID3Versions version) { if ((version & ID3Versions.V2) == ID3Versions.V2) { stream.Write(StringToBytes("ID3"), 0, 3); WriteVersion(stream, version); WriteFlags(stream, version); stream.Write( SynchsafeInteger.Synchsafe(this.GetFramesSize(version) + this.PaddingSize), 0, 4); stream.Flush(); } else { throw new UnsupportedVersionException(version); } }