class WahWah::ID3::V2Header

ID3v2/file identifier “ID3” ID3v2 version $03 00 ID3v2 flags %abc00000 ID3v2 size 4 * %0xxxxxxx

Constants

HEADER_FORMAT
HEADER_SIZE
TAG_ID

Attributes

major_version[R]
size[R]

Public Class Methods

new(file_io) click to toggle source
# File lib/wahwah/id3/v2_header.rb, line 19
def initialize(file_io)
  header_content = file_io.read(HEADER_SIZE)
  @id, @major_version, @flags, size_bits = header_content.unpack(HEADER_FORMAT) if header_content.size >= HEADER_SIZE

  return unless valid?

  # Tag size is the size excluding the header size,
  # so add header size back to get total size.
  @size = Helper.id3_size_caculate(size_bits) + HEADER_SIZE

  if has_extended_header?
    # Extended header structure:
    #
    # Extended header size   $xx xx xx xx
    # Extended Flags         $xx xx
    # Size of padding        $xx xx xx xx

    # Skip extended_header
    extended_header_size = Helper.id3_size_caculate(file_io.read(4).unpack('B32').first)
    file_io.seek(extended_header_size - 4, IO::SEEK_CUR)
  end
end

Public Instance Methods

has_extended_header?() click to toggle source

The second bit in flags byte indicates whether or not the header is followed by an extended header.

# File lib/wahwah/id3/v2_header.rb, line 48
def has_extended_header?
  @flags[1] == '1'
end
valid?() click to toggle source
# File lib/wahwah/id3/v2_header.rb, line 42
def valid?
  @id == TAG_ID
end