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
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
|