code: func (d *Decoder) ReadHeader(header []byte) error {
  	if !IsHeader(header) {
  		return errors.New("vorbis: invalid header")
  	}
  	headerType := header[0]
  	header = header[7:]
  	switch headerType {
  	case headerTypeIdentification:
  		err := d.readIdentificationHeader(header)
  		if err != nil {
  			return err
  		}
  		d.headerRead = true
  	case headerTypeComment:
  		return d.readCommentHeader(header)
  	case headerTypeSetup:
  		err := d.readSetupHeader(header)
  		if err != nil {
  			return err
  		}
  		d.overlap = make([]float32, d.blocksize[1]*d.channels)
  		d.setupRead = true
  	default:
  		return errors.New("vorbis: unknown header type")
  	}
  	return nil
  }
docs: // ReadHeader reads a vorbis header.
  // Three headers (identification, comment, and setup) must be read before any samples can be decoded.