/// <summary> /// Create new OwnershipFrame /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">2 Bytes flags identifier</param> /// <param name="Data">TagStream to read data from</param> /// <param name="Length">Maximum available length for current frame is TagStream</param> public OwnershipFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); TextEncoding = (TextEncodings)TStream.ReadByte(FS); Length--; if (!IsValidEnumValue(TextEncoding, ExceptionLevels.Error, FrameID)) { return; } _Price = new Price(TStream, Length); Length -= _Price.Length; if (!_Price.IsValid) { ExceptionOccured(new ID3Exception("Price is not valid value. ownership frame will not read", FrameID, ExceptionLevels.Error)); return; } if (Length >= 8) { _DateOfPurch = new SDate(TStream); Length -= 8; } else { ExceptionOccured(new ID3Exception("Date is not valid for this frame", FrameID, ExceptionLevels.Error)); return; } Seller = TStream.ReadText(Length, TextEncoding); }
/// <summary> /// Create new RaltiveVolumeFrame /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">2 Bytes flags identifier</param> /// <param name="Data">Contain Data for this frame</param> /// <param name="Length">Length to read from FileStream</param> public RelativeVolumeFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); _Descriptors = new uint[12]; _IncDec = TStream.ReadByte(FS); // Read Increment Decrement Byte _BitForVolumeDescription = TStream.ReadByte(FS); // Read Volume Description Length Length -= 2; if (_BitForVolumeDescription == 0) { ExceptionOccured(new ID3Exception("BitForVolumeDescription of Relative volume information frame can't be zero", ExceptionLevels.Error)); return; } if (_BitForVolumeDescription / 8 > 4 || _BitForVolumeDescription % 8 != 0) { ExceptionOccured(new ID3Exception("This program don't support " + _BitForVolumeDescription.ToString() + " Bits of description for Relative Volume information", ExceptionLevels.Error)); return; } int DesLen = _BitForVolumeDescription / 8; // Length of each volume descriptor int Counter = 0; while (CanContinue(Length, DesLen, 2)) { _Descriptors[Counter++] = TStream.ReadUInt(DesLen); _Descriptors[Counter++] = TStream.ReadUInt(DesLen); Length -= 2; } }
/// <summary> /// New PopularimeterFrame /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">4 Characters tag identifier</param> /// <param name="Data">TagStream contain frame data</param> /// <param name="Length">Maximum available length for current frame in TagStream</param> public PopularimeterFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); EMail = TStream.ReadText(Length, TextEncodings.Ascii, ref Length, true); // Read Email Address _Rating = TStream.ReadByte(FS); // Read Rating Length--; if (Length > 8) { ExceptionOccured(new ID3Exception("Counter value for Popularimeter frame is more than 8 byte." + " this is not supported by this program", FrameID, ExceptionLevels.Error)); return; } byte[] LBuf = new byte[8]; byte[] Buf = new byte[Length]; TStream.FS.Read(Buf, 0, Length); Buf.CopyTo(LBuf, 8 - Buf.Length); Array.Reverse(LBuf); _Counter = BitConverter.ToInt64(LBuf, 0); }
/// <summary> /// New CommercialFrame /// </summary> /// <param name="FrameID">FrameID</param> /// <param name="Flags">Frame Flags</param> /// <param name="Data">Data of frame</param> /// <param name="Length">MaxLength of frame</param> public CommercialFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); _TextEncoding = (TextEncodings)TStream.ReadByte(FS); Length--; if (!IsValidEnumValue(_TextEncoding, ExceptionLevels.Error, FrameID)) { return; } _Price = new Price(TStream, Length); Length -= _Price.Length; _ValidUntil = new SDate(TStream); Length -= 8; _ContactUrl = TStream.ReadText(Length, TextEncodings.Ascii, ref Length, true); _RecievedAs = (RecievedAsEnum)Data.ReadByte(); Length--; _SellerName = TStream.ReadText(Length, _TextEncoding, ref Length, true); _Description = TStream.ReadText(Length, _TextEncoding, ref Length, true); if (Length < 1) // Data finished { return; } _MIMEType = TStream.ReadText(Length, TextEncodings.Ascii, ref Length, true); _Data = TStream.ReadData(Length); }
/// <summary> /// Create new PlayCounter /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">2 Bytes flags identifier</param> /// <param name="Data">Contain Data for this frame</param> /// <param name="Length">Maximum length of frame</param> public PlayCounterFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); byte[] Long = new byte[8]; byte[] Buf = new byte[Length]; // Less than 4 Characters TStream.FS.Read(Buf, 0, Length); Buf.CopyTo(Long, 8 - Buf.Length); Array.Reverse(Long); _Counter = BitConverter.ToInt64(Long, 0); }
/// <summary> /// Create new RecomendedBufferSize /// </summary> /// <param name="FrameID">Characters tag identifier</param> /// <param name="Flags">2 Bytes flags identifier</param> /// <param name="Data">Contain Data for this frame</param> /// <param name="Length">Length to read from FileStream</param> public RecomendedBufferSizeFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); _BufferSize = TStream.ReadUInt(3); _EmbededInfoFlag = Convert.ToBoolean(TStream.ReadByte(FS)); if (Length > 4) { _OffsetToNextTag = TStream.ReadUInt(4); } }
/// <summary> /// Create new price class /// </summary> /// <param name="Data">Data to read price from</param> /// <param name="Length">maximum length of data</param> public Price(TagStreamUWP TStream, int Length) { string temp = TStream.ReadText(Length, TextEncodings.Ascii); if (temp.Length < 4) { return; } _Currency = temp.Substring(0, 3); _Value = temp.Substring(3, temp.Length - 3); }
/// <summary> /// Create new TermOfUseFrame class /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">2 Bytes flags identifier</param> /// <param name="Data">TagStream to read data from</param> /// <param name="Length">Maximum available length for current frame is TagStream</param> public TermOfUseFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); TextEncoding = (TextEncodings)TStream.ReadByte(FS); Length--; if (!IsValidEnumValue(TextEncoding, ExceptionLevels.Error, FrameID)) { return; } _Language = new Language(TStream.FS); Length -= 3; Text = TStream.ReadText(Length, TextEncoding); }
/// <summary> /// Create new ID3v1 class /// </summary> /// <param name="FilePath">Path of file</param> /// <param name="LoadData">Indicate load data in constructor or not</param> public ID3v1(bool LoadData, Stream TS) { FileStream = TS; TagStream = new TagStreamUWP(FileStream); _Title = ""; _Artist = ""; _Album = ""; _Year = ""; _Comment = ""; _TrackNumber = 0; _Genre = 255; _HaveTag = false; if (LoadData) { Load(); } }
/// <summary> /// Create new PositionSynchronisedFrame /// </summary> /// <param name="FrameID">FrameID for this frame</param> /// <param name="Flags">Frame Flags</param> /// <param name="Data">TagStream to read data from</param> /// <param name="Length">Maximum available length for this frame</param> public PositionSynchronisedFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); _TimeStamp = (TimeStamps)TStream.ReadByte(FS); if (!IsValidEnumValue(_TimeStamp, ExceptionLevels.Error, FrameID)) { return; } Length--; byte[] Long = new byte[8]; byte[] Buf = new byte[Length]; TStream.FS.Read(Buf, 0, Length); Buf.CopyTo(Long, 8 - Buf.Length); Array.Reverse(Long); _Position = BitConverter.ToInt64(Long, 0); }
/// <summary> /// New SDate from specific FileStream /// </summary> /// <param name="Data">FileStream represent SDate data</param> public SDate(TagStreamUWP TStream) { string DateSt = TStream.ReadText(8, TextEncodings.Ascii, false); int Temp; if (Int32.TryParse(DateSt.Substring(0, 4), out Temp)) { Year = Temp; } if (Int32.TryParse(DateSt.Substring(4, 2), out Temp)) { Month = Temp; } if (Int32.TryParse(DateSt.Substring(6, 2), out Temp)) { Day = Temp; } }
/// <summary> /// Create new reveb frame /// </summary> /// <param name="FrameID">FrameID</param> /// <param name="Flags">Flags of frame</param> /// <param name="Data">Data for frame to read from</param> /// <param name="Length">Maximum length of frame</param> public ReverbFrame(string FrameID, FrameFlags Flags, int Length, Stream FS) : base(FrameID, Flags, FS) { TStream = new TagStreamUWP(FS); if (Length != 12) { //RaiseErrorEvent(new ID3Error(208, ID3Versions.ID3v2, _FrameID, //"Reveb frame is not in correct length. it will drop", ErrorType.Error)); return; } _ReverbLeft = Convert.ToInt32(TStream.ReadUInt(2)); _ReverbRight = Convert.ToInt32(TStream.ReadUInt(2)); _ReverbBouncesLeft = TStream.ReadByte(FS); _ReverbBouncesRight = TStream.ReadByte(FS); _ReverbFeedbackLeftToLeft = TStream.ReadByte(FS); _ReverbFeedbackLeftToRight = TStream.ReadByte(FS); _ReverbFeedbackRightToRight = TStream.ReadByte(FS); _ReverbFeedbackRightToLeft = TStream.ReadByte(FS); _PremixLeftToRight = TStream.ReadByte(FS); _PremixRightToLeft = TStream.ReadByte(FS); }