コード例 #1
0
ファイル: TextFrame.cs プロジェクト: sidiraihan/BreadPlayer
        /// <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);
        }
コード例 #2
0
        /// <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;
            }
        }
コード例 #3
0
ファイル: TextFrame.cs プロジェクト: sidiraihan/BreadPlayer
        /// <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);
        }
コード例 #4
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);
        }
コード例 #5
0
 /// <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);
 }
コード例 #6
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);
            }
        }
コード例 #7
0
        /// <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);
        }
コード例 #8
0
ファイル: TextFrame.cs プロジェクト: sidiraihan/BreadPlayer
        /// <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);
        }
コード例 #9
0
ファイル: ID3v1.cs プロジェクト: dinhminhquoi/Macalifa
        /// <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();
            }
        }
コード例 #10
0
        /// <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);
        }
コード例 #11
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;
            }
        }
コード例 #12
0
        /// <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);
        }