Sha256: 9c3b0c8370f92e8686dc253399c7921e933d97b13562eca86cba231ded3a181c
Contents?: true
Size: 1.41 KB
Versions: 4
Compression:
Stored size: 1.41 KB
Contents
require 'forwardable' module Mp3file::ID3v2 class Tag extend Forwardable def_delegators(:@header, :version, :unsynchronized, :extended_header, :compression, :experimental, :footer) attr_reader(:header, :frames, :unused_bytes) FRAME_HEADER_NAME_REGEX = /[A-Z][A-Z0-9]{2,3}/ def initialize(io) @header = Header.new(io) load_frames(io) used_bytes = @frames.inject(0) { |m, f| m += f.size } @unused_bytes = @header.tag_size - used_bytes end def load_frames(io) @frames = [] data = io.read(@header.tag_size) data.force_encoding("ASCII-8BIT") offset = 0 frame_offset, frame = get_next_frame_header(data, offset) while frame @frames << frame offset = frame_offset + frame.size frame_offset, frame = get_next_frame_header(data, offset) end end def size @header.tag_size + 10 end def get_next_frame_header(data, offset) md = data.match(FRAME_HEADER_NAME_REGEX, offset) while md frame_offset = md.begin(0) io = StringIO.new(data[frame_offset, 32]) frame = FrameHeader.new(io, self) if frame.frame_id.to_s =~ FRAME_HEADER_NAME_REGEX return [ frame_offset, frame ] else frame_offset = md.end(0) + 1 md = data.match(FRAME_HEADER_NAME_REGEX, frame_offset) end end [ nil, nil ] end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
mp3file-1.0.3 | lib/mp3file/id3v2/tag.rb |
mp3file-1.0.2 | lib/mp3file/id3v2/tag.rb |
mp3file-1.0.1 | lib/mp3file/id3v2/tag.rb |
mp3file-1.0.0 | lib/mp3file/id3v2/tag.rb |