Exemple #1
0
        /// <exception cref="Mp3net.InvalidDataException"></exception>
        private int ScanBlock(byte[] bytes, int bytesRead, int absoluteOffset, int offset
			)
        {
            while (offset < bytesRead - MINIMUM_BUFFER_LENGTH)
            {
                MpegFrame frame = new MpegFrame(bytes[offset], bytes[offset + 1], bytes[offset +
                    2], bytes[offset + 3]);
                SanityCheckFrame(frame, absoluteOffset + offset);
                int newEndOffset = absoluteOffset + offset + frame.GetLengthInBytes() - 1;
                if (newEndOffset < GetMaxEndOffset())
                {
                    endOffset = absoluteOffset + offset + frame.GetLengthInBytes() - 1;
                    frameCount++;
                    AddBitrate(frame.GetBitrate());
                    offset += frame.GetLengthInBytes();
                }
                else
                {
                    break;
                }
            }
            return offset;
        }
Exemple #2
0
        private int ScanBlockForStart(byte[] bytes, int bytesRead, int absoluteOffset, int
			 offset)
        {
            while (offset < bytesRead - MINIMUM_BUFFER_LENGTH)
            {
                if (bytes[offset] == unchecked((byte)unchecked((int)(0xFF))) && (bytes[offset + 1
                    ] & unchecked((byte)unchecked((int)(0xE0)))) == unchecked((byte)unchecked((int)(
                    0xE0))))
                {
                    try
                    {
                        MpegFrame frame = new MpegFrame(bytes[offset], bytes[offset + 1], bytes[offset +
                            2], bytes[offset + 3]);
                        if (xingOffset < 0 && IsXingFrame(bytes, offset))
                        {
                            xingOffset = absoluteOffset + offset;
                            xingBitrate = frame.GetBitrate();
                            offset += frame.GetLengthInBytes();
                        }
                        else
                        {
                            startOffset = absoluteOffset + offset;
                            channelMode = frame.GetChannelMode();
                            emphasis = frame.GetEmphasis();
                            layer = frame.GetLayer();
                            modeExtension = frame.GetModeExtension();
                            sampleRate = frame.GetSampleRate();
                            version = frame.GetVersion();
                            copyright = frame.IsCopyright();
                            original = frame.IsOriginal();
                            frameCount++;
                            AddBitrate(frame.GetBitrate());
                            offset += frame.GetLengthInBytes();
                            return offset;
                        }
                    }
                    catch (InvalidDataException)
                    {
                        offset++;
                    }
                }
                else
                {
                    offset++;
                }
            }
            return offset;
        }
Exemple #3
0
 /// <exception cref="Mp3net.InvalidDataException"></exception>
 private void SanityCheckFrame(MpegFrame frame, int offset)
 {
     if (sampleRate != frame.GetSampleRate())
     {
         throw new InvalidDataException("Inconsistent frame header");
     }
     if (!layer.Equals(frame.GetLayer()))
     {
         throw new InvalidDataException("Inconsistent frame header");
     }
     if (!version.Equals(frame.GetVersion()))
     {
         throw new InvalidDataException("Inconsistent frame header");
     }
     if (offset + frame.GetLengthInBytes() > GetLength())
     {
         throw new InvalidDataException("Frame would extend beyond end of file");
     }
 }