code: func (r *Reader) Read(p []float32) (int, error) {
  	if r.r.lastPacket && len(r.buffer) == 0 {
  		return 0, io.EOF
  	}
  	if len(p) == 0 {
  		return 0, nil
  	}
  	if len(p)%r.Channels() != 0 {
  		p = p[:len(p)/r.Channels()*r.Channels()]
  	}
  	out := p
  	total := 0
  	err := error(nil)
  	if r.toSkip > 0 {
  		err = r.skip()
  		if err != nil {
  			return 0, err
  		}
  	}
  	if len(r.buffer) > 0 {
  		n := copy(p, r.buffer)
  		r.buffer = r.buffer[n:]
  		total += n
  		p = p[n:]
  	}
  	for len(p) >= len(r.originalBuffer) {
  		var n int
  		n, err = r.read(p)
  		total += n
  		if err != nil {
  			goto end
  		}
  		p = p[n:]
  	}
  	if total == 0 {
  		err = r.fillBuffer()
  		if err != nil {
  			goto end
  		}
  		n := copy(p, r.buffer)
  		r.buffer = r.buffer[n:]
  		total += n
  		p = p[n:]
  	}
  end:
  	for i := range out[:total] {
  		if out[i] > 1 {
  			out[i] = 1
  		} else if out[i] < -1 {
  			out[i] = -1
  		}
  	}
  	return total, err
  }
docs: // Read reads and decodes audio data and stores the result in p.
  //
  // It returns the number of values decoded (number of samples * channels) and
  // any error encountered, similarly to an io.Reader's Read method.
  //
  // The number of values produced will always be a multiple of Channels().