code: func (tag *Tag) parse(rd io.Reader, opts Options) error {
  	if rd == nil {
  		return errors.New("rd is nil")
  	}
  
  	header, err := parseHeader(rd)
  	if err == errNoTag || err == io.EOF {
  		tag.init(rd, 0, 4)
  		return nil
  	}
  	if err != nil {
  		return fmt.Errorf("error by parsing tag header: %v", err)
  	}
  	if header.Version < 3 {
  		return ErrUnsupportedVersion
  	}
  
  	tag.init(rd, tagHeaderSize+header.FramesSize, header.Version)
  	if !opts.Parse {
  		return nil
  	}
  	return tag.parseFrames(opts)
  }
docs: // parse finds ID3v2 tag in rd and parses it to tag considering opts.
  // If rd is smaller than expected, it returns ErrSmallHeaderSize.