public ReadText ( int MaxLength, TextEncodings TEncoding ) : string | ||
MaxLength | int | |
TEncoding | TextEncodings | |
Результат | string |
/// <summary> /// Create new LinkFrame /// </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"></param> internal LinkFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _FrameIdentifier = Data.ReadText(4, TextEncodings.Ascii); if (!ValidatingFrameID(_FrameIdentifier, ValidatingErrorTypes.ID3Error)) return; Length -= 4; // There is 3 byte in article that i think it's not true // because frame identifier is 4 character // use Text variable as URL URL = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _AdditionalData = Data.ReadText(Length, TextEncodings.Ascii); }
/// <summary> /// Create new price class /// </summary> /// <param name="Data">Data to read price from</param> /// <param name="Length">maximum length of data</param> internal Price(FileStreamEx Data, int Length) { string temp = Data.ReadText(Length, TextEncodings.Ascii); if (temp.Length < 4) return; _Currency = temp.Substring(0, 3); _Value = temp.Substring(3, temp.Length - 3); }
/// <summary> /// Create new AttachedPictureFrame /// </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">MaxLength of frame</param> internal AttachedPictureFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _TextEncoding = (TextEncodings)Data.ReadByte(); Length--; if (!IsValidEnumValue(_TextEncoding, ValidatingErrorTypes.ID3Error)) { _MustDrop = true; return; } _MIMEType = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _PictureType = (PictureTypes)Data.ReadByte(); Length--; _Description = Data.ReadText(Length, _TextEncoding, ref Length, true); _Data = Data.ReadData(Length); }
/// <summary> /// New SynchronisedText /// </summary> /// <param name="FrameID">FrameID</param> /// <param name="Flags">Frame Flag</param> /// <param name="Data">FileStream contain current frame data</param> internal SynchronisedText(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _Syllables = new FramesCollection<Syllable>(); TextEncoding = (TextEncodings)Data.ReadByte(); if (!IsValidEnumValue(TextEncoding, ValidatingErrorTypes.ID3Error)) return; Length--; _Language = new Language(Data); Length -= 3; _TimeStamp = (TimeStamps)Data.ReadByte(); if (!IsValidEnumValue(_TimeStamp, ValidatingErrorTypes.ID3Error)) return; Length--; _ContentType = (ContentTypes)Data.ReadByte(); if (!IsValidEnumValue(_ContentType, ValidatingErrorTypes.Nothing)) _ContentType = ContentTypes.Other; Length--; // use Text variable for descriptor property ContentDescriptor = Data.ReadText(Length, TextEncoding, ref Length, true); string tempText; uint tempTime; while (Length > 5) { tempText = Data.ReadText(Length, TextEncoding, ref Length, true); tempTime = Data.ReadUInt(4); _Syllables.Add(new Syllable(tempTime, tempText)); Length -= 4; } }
/// <summary> /// Create new TextFrame Class /// </summary> /// <param name="FrameID">4 Characters frame identifier</param> /// <param name="Flags">Flag of frame</param> /// <param name="Data">FileStream to read frame data from</param> /// <param name="Length">Maximum length of frame</param> internal TextFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { // If it was URL frame the TextEncoding is ascii and must not read if (IsUrl) TextEncoding = TextEncodings.Ascii; else { TextEncoding = (TextEncodings)Data.ReadByte(); Length--; if (!IsValidEnumValue(TextEncoding, ValidatingErrorTypes.ID3Error)) return; } Text = Data.ReadText(Length, _TextEncoding); }
/// <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">Contain Data for this frame</param> internal TermOfUseFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { TextEncoding = (TextEncodings)Data.ReadByte(); Length--; if (!IsValidEnumValue(TextEncoding, ValidatingErrorTypes.ID3Error)) { _MustDrop = true; return; } _Language = new Language(Data); Length -= 3; Text = Data.ReadText(Length, TextEncoding); }
/// <summary> /// New PopularimeterFrame /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">Frame Flags</param> /// <param name="Data">FileStream contain frame data</param> internal PopularimeterFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { EMail = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); // Read Email Address _Rating = Data.ReadByte(); // Read Rating Length--; if (Length > 8) { ErrorOccur("Counter value for Popularimeter frame is more than 8 byte." + " this is not supported by this program", true); return; } byte[] LBuf = new byte[8]; byte[] Buf = new byte[Length]; Data.Read(Buf, 0, Length); Buf.CopyTo(LBuf, 8 - Buf.Length); Array.Reverse(LBuf); _Counter = BitConverter.ToInt64(LBuf, 0); }
/// <summary> /// Create new OwnershipFrame /// </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> internal OwnershipFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { TextEncoding = (TextEncodings)Data.ReadByte(); Length--; if (!IsValidEnumValue(TextEncoding, ValidatingErrorTypes.ID3Error)) return; _Price = new Price(Data, Length); Length -= _Price.Length; if (!_Price.IsValid) { ErrorOccur("Price is not valid value. ownership frame will not read", true); return; } if (Length >= 8) { _DateOfPurch = new SDate(Data); Length -= 8; } else { ErrorOccur("Date is not valid for this frame", true); return; } Seller = Data.ReadText(Length, TextEncoding); }
/// <summary> /// Create new UserTextFrameClass /// </summary> /// <param name="FrameID">4 Characters tag identifier</param> /// <param name="Flags">Frame Flagsr</param> /// <param name="Data">MemoryStream to read information from</param> internal UserTextFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { TextEncoding = (TextEncodings)Data.ReadByte(); Length--; if (!IsValidEnumValue(TextEncoding, ValidatingErrorTypes.ID3Error)) { _MustDrop = true; return; } _Description = Data.ReadText(Length, TextEncoding, ref Length, true); if (!IsUrl) // is text frame Text = Data.ReadText(Length, TextEncoding); else Text = Data.ReadText(Length, TextEncodings.Ascii); // User URL frames use this class and use Text property as URL // URL property must be in AScii format // all URL frames start with W and text frames with T }
/// <summary> /// Read all frames from specific FileStream /// </summary> /// <param name="Data">FileStream to read data from</param> /// <param name="Length">Length of data to read from FileStream</param> private void ReadFrames(FileStreamEx Data, int Length) { string FrameID; int FrameLength; FrameFlags Flags = new FrameFlags(); byte Buf; // If ID3v2 is ID3v2.2 FrameID, FrameLength of Frames is 3 byte // otherwise it's 4 character int FrameIDLen = VersionInfo.Minor == 2 ? 3 : 4; // Minimum frame size is 10 because frame header is 10 byte while (Length > 10) { // check for padding( 00 bytes ) Buf = Data.ReadByte(); if (Buf == 0) { Length--; continue; } // if readed byte is not zero. it must read as FrameID Data.Seek(-1, SeekOrigin.Current); // ---------- Read Frame Header ----------------------- FrameID = Data.ReadText(FrameIDLen, TextEncodings.Ascii); if (FrameIDLen == 3) FrameID = FramesInfo.Get4CharID(FrameID); FrameLength = Convert.ToInt32(Data.ReadUInt(FrameIDLen)); if (FrameIDLen == 4) Flags = (FrameFlags)Data.ReadUInt(2); else Flags = 0; // must set to default flag long Position = Data.Position; if (Length > 0x10000000) throw (new FileLoadException("This file contain frame that have more than 256MB data")); bool Added = false; if (IsAddable(FrameID)) // Check if frame is not filter Added = AddFrame(Data, FrameID, FrameLength, Flags); if (!Added) // if don't read this frame // we must go forward to read next frame Data.Position = Position + FrameLength; Length -= FrameLength + 10; } }
/// <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> internal CommercialFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _TextEncoding = (TextEncodings)Data.ReadByte(); Length--; if (!IsValidEnumValue(_TextEncoding, ValidatingErrorTypes.ID3Error)) return; _Price = new Price(Data, Length); Length -= _Price.Length; _ValidUntil = new SDate(Data); Length -= 8; _ContactUrl = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _RecievedAs = (RecievedAsEnum)Data.ReadByte(); Length--; _SellerName = Data.ReadText(Length, _TextEncoding, ref Length, true); _Description = Data.ReadText(Length, _TextEncoding, ref Length, true); if (Length < 1) // Data finished return; _MIMEType = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _Data = Data.ReadData(Length); }
/// <summary> /// Create new AudioEncryptionFrame /// </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> internal AudioEncryptionFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _Owner = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _PreviewStart = Convert.ToInt32(Data.ReadUInt(2)); _PreviewLength = Convert.ToInt32(Data.ReadUInt(2)); Length -= 4; _Data = Data.ReadData(Length); }
/// <summary> /// New DataWithSymbolFrame /// </summary> /// <param name="FrameID">FrameID</param> /// <param name="Flags">Frame Flags</param> /// <param name="Data">FileStream to read frame data from</param> internal DataWithSymbolFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _Owner = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _Symbol = Data.ReadByte(); Length--; _Data = Data.ReadData(Length); }
/// <summary> /// New PrivateFrame /// </summary> /// <param name="FrameID">FrameID</param> /// <param name="Flags">Frame Flags</param> /// <param name="Data">FileStream to read frame data from</param> internal PrivateFrame(string FrameID, FrameFlags Flags, FileStreamEx Data, int Length) : base(FrameID, Flags) { _Owner = Data.ReadText(Length, TextEncodings.Ascii, ref Length, true); _Data = Data.ReadData(Length); // Read Data }
/// <summary> /// New SDate from specific FileStream /// </summary> /// <param name="Data">FileStream represent SDate data</param> internal SDate(FileStreamEx Data) { string DateSt = Data.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> /// Load ID3v1 information from file /// </summary> public void Load() { FileStreamEx FS = new FileStreamEx(_FilePath, FileMode.Open); if (!FS.HaveID3v1()) { FS.Close(); _HaveTag = false; return; } _Title = FS.ReadText(30, TextEncodings.Ascii); FS.Seek(-95, SeekOrigin.End); _Artist = FS.ReadText(30, TextEncodings.Ascii); FS.Seek(-65, SeekOrigin.End); _Album = FS.ReadText(30, TextEncodings.Ascii); FS.Seek(-35, SeekOrigin.End); _Year = FS.ReadText(4, TextEncodings.Ascii); FS.Seek(-31, SeekOrigin.End); _Comment = FS.ReadText(28, TextEncodings.Ascii); FS.Seek(-2, SeekOrigin.End); _TrackNumber = FS.ReadByte(); _Genre = FS.ReadByte(); FS.Close(); _HaveTag = true; }