code: func (d *Decoder) FullPCMBuffer() (*audio.PCMBuffer, error) {
  	if !d.WasPCMAccessed() {
  		err := d.FwdToPCM()
  		if err != nil {
  			return nil, d.err
  		}
  	}
  	if d.PCMChunk == nil {
  		return nil, errors.New("PCM chunk not found")
  	}
  	format := d.Format()
  
  	buf := audio.NewPCMIntBuffer(make([]int, 4096), format)
  	bytesPerSample := (d.BitDepth-1)/8 + 1
  	sampleBufData := make([]byte, bytesPerSample)
  	decodeF, err := sampleDecodeFunc(int(d.BitDepth))
  	if err != nil {
  		return nil, fmt.Errorf("could not get sample decode func %v", err)
  	}
  
  	i := 0
  	for err == nil {
  		_, err = d.PCMChunk.Read(sampleBufData)
  		if err != nil {
  			break
  		}
  		buf.Ints[i] = decodeF(sampleBufData)
  		i++
  		// grow the underlying slice if needed
  		if i == len(buf.Ints) {
  			buf.Ints = append(buf.Ints, make([]int, 4096)...)
  		}
  	}
  	buf.Ints = buf.Ints[:i]
  
  	if err == io.EOF {
  		err = nil
  	}
  
  	return buf, err
  }
docs: // FullPCMBuffer is an inneficient way to access all the PCM data contained in the
  // audio container. The entire PCM data is held in memory.
  // Consider using Buffer() instead.