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; }
/// <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; }