# File lib/icanhasaudio/mpeg/encoder.rb, line 38
      def encode(infile, outfile)
        raise "Out file must be a FILE.  :-(" unless outfile.is_a?(File)

        num_samples = 0xFFFFFFFF
        parse_header(infile)
        init_params

        logger.debug(encoding_info) if logger

        num_samples_read = 0

        sw = case @pcmbitwidth
             when 8
               32 - 8
             when 16
               32 - 16
             when 24
               32 - 24
             end
        while !infile.eof?
          tmp_num_samples = num_samples()
          samples_to_read = framesize()
          remaining = tmp_num_samples - [tmp_num_samples, num_samples_read].min
          if remaining < framesize && 0 != tmp_num_samples
            samples_to_read = remaining
          end

          read_size = num_channels * samples_to_read * (pcmbitwidth / 8)

          samples = infile.read(read_size)
          samples_read = samples.length / num_channels

          buffers = [[], []]
          samples.unpack('v*').each_with_index do |b,i|
            (buffers[(i % 2)]) << (b << sw)
          end
          outfile.write(encode_buffer(buffers[0], buffers[1]))
        end
        outfile.write(flush())
        write_vbr_tags(outfile) if write_vbr_tag?
      end