docs: def _reader_factory(name, filetype, descr):
      """Factory for reader functions ala matlab."""
      def basic_reader(filename, last = None, first = 0):
          """Common "template" to all read functions."""
          hdl = Sndfile(filename, 'r')
          try:
              if not hdl.format.file_format == filetype:
                  raise ValueError, "%s is not a %s file (is %s)" \
                        % (filename, filetype, hdl.format.file_format)
  
              fs = hdl.samplerate
              enc = hdl.encoding
              # Set the pointer to start position
              nf  = hdl.seek(first, 1)
              if not nf == first:
                  raise IOError("Error while seeking at starting position")
  
              if last is None:
                  nframes = hdl.nframes - first
                  data    = hdl.read_frames(nframes)
              else:
                  data    = hdl.read_frames(last)
          finally:
              hdl.close()
  
          return data, fs, enc
      doc = \
      """Simple reader for %(format)s audio files.
  
      Parameters
      ----------
      filename : str
          Name of the file to read
      last : int
          Last frame to read. If None, this is equal to the number of frames in
          the file.
      first : int
          First frame to read. If 0, means starting from the beginning of the
          file.
  
      Returns
      -------
      data : array
          the read data (one column per channel)
      fs : int
          the sampling rate
      enc : str
          the encoding of the file, such as 'pcm16', 'float32', etc...
  
      Notes
      -----
      For total control over options, such as output's dtype, etc...,
      you should use Sndfile class instances instead""" % {'format': str(descr)}
      basic_reader.__doc__    = doc
      basic_reader.__name__   = name
      return basic_reader