class NuWav::DataChunk

Attributes

tmp_data_file[RW]

Public Class Methods

new(id=nil, size=nil, tmp_data_file=nil) click to toggle source
# File lib/nu_wav/chunk.rb, line 301
def initialize(id=nil, size=nil, tmp_data_file=nil)
  @id, @size, @tmp_data_file = id, size, tmp_data_file
end
new_from_file(file) click to toggle source
# File lib/nu_wav/chunk.rb, line 293
def self.new_from_file(file)
  tmp_data = NuWav.temp_file('data_chunk', true)
  tmp_data.binmode
  FileUtils.cp(file.path, tmp_data.path)
  tmp_data.rewind
  self.new('data', File.size(tmp_data.path).to_s, tmp_data)
end
parse(id, size, file) click to toggle source
# File lib/nu_wav/chunk.rb, line 275
def self.parse(id, size, file)

  # tmp_data = File.open('./data_chunk.mp2', 'wb')
  tmp_data = NuWav.temp_file('data_chunk', true)
  tmp_data.binmode
  
  remaining = size
  while (remaining > 0 && !file.eof?)
    read_bytes = [128, remaining].min
    tmp_data << file.read(read_bytes)
    remaining -= read_bytes
  end
  tmp_data.rewind
  chunk = self.new(id, size, tmp_data)

  return chunk
end

Public Instance Methods

data() click to toggle source
# File lib/nu_wav/chunk.rb, line 305
def data
  f = ''
  if self.tmp_data_file
    NuWav::WaveFile.log "we have a tmp_data_file!"
    self.tmp_data_file.rewind
    f = self.tmp_data_file.read
    self.tmp_data_file.rewind
  else
    NuWav::WaveFile.log "we have NO tmp_data_file!"
  end
  f
end
to_binary(options={}) click to toggle source
# File lib/nu_wav/chunk.rb, line 322
def to_binary(options={})
  NuWav::WaveFile.log "data chunk to_binary"
  d = self.data
  NuWav::WaveFile.log "got data size = #{d.size} #{d[0,10]}"
  out = "data" + write_dword(d.size) + d
  if d.size.odd? && !options[:no_pad_byte]
    NuWav::WaveFile.log "odd, adding a pad byte"
    out += "\0"
  end
  out
end
to_s() click to toggle source
# File lib/nu_wav/chunk.rb, line 318
def to_s
  "<chunk type:data (size:#{data.size})/>"
end