Method: WaveFile::CachingWriter#write

Defined in:
lib/wavefile/caching_writer.rb

#write(buffer) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/wavefile/caching_writer.rb', line 12

def write(buffer)
  packed_buffer_data = {}

  key = buffer.hash
  if @buffer_cache.member?(key)
    packed_buffer_data = @buffer_cache[key]
  else
    samples = buffer.convert(@format).samples

    if @format.channels > 1
      data = samples.flatten.pack(@pack_code)
    else
      # Flattening an already flat array is a waste of time.
      data = samples.pack(@pack_code)
    end

    packed_buffer_data = { data: data, sample_count: samples.length }
    @buffer_cache[key] = packed_buffer_data
  end

  @io.write(packed_buffer_data[:data])
  @total_sample_frames += packed_buffer_data[:sample_count]
end