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