Class: Id3Taginator::Frames::Encryption::AudioEncryptionFrame

Inherits:
Id3v2Frame
  • Object
show all
Includes:
HasId
Defined in:
lib/id3taginator/frames/encryption/aenc_audio_encryption.rb

Constant Summary

Constants inherited from Id3v2Frame

Id3v2Frame::HEADER_SIZE_V_2, Id3v2Frame::HEADER_SIZE_V_3_4

Constants included from Extensions::Encodable

Extensions::Encodable::ISO8859_1, Extensions::Encodable::UNICODE_ZERO, Extensions::Encodable::UTF_16, Extensions::Encodable::UTF_16BE, Extensions::Encodable::UTF_8, Extensions::Encodable::ZERO

Instance Attribute Summary collapse

Attributes inherited from Id3v2Frame

#frame_id, #options

Class Method Summary collapse

Instance Method Summary collapse

Methods included from HasId

#frame_info, included, #supported?

Methods inherited from Id3v2Frame

build_id3_flags, build_v2_frame, build_v3_frame, build_v4_frame, #compression?, #encryption?, #file_alter_preservation?, #frame_size, #group_identity?, #initialize, #re_calc_payload_size, #read_only?, #tag_alter_preservation?, #to_bytes

Methods included from Extensions::ArgumentCheck

#argument_between_num, #argument_boolean, #argument_exactly_chars, #argument_less_than_chars, #argument_more_than_chars, #argument_not_empty, #argument_not_nil, #argument_sym, included

Methods included from Extensions::Encodable

#decode, #decode_using_encoding_byte, #default_encoding_destination_byte, #encode, #encode_and_add_encoding_byte, #encode_string, #find_encoding, #find_encoding_byte, included, #merge, #pad_left, #pad_right, #read_stream_until, #remove_trailing_zeros, #zero_byte

Constructor Details

This class inherits a constructor from Id3Taginator::Frames::Id3v2Frame

Instance Attribute Details

#encryption_infoObject

Returns the value of attribute encryption_info.



11
12
13
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 11

def encryption_info
  @encryption_info
end

#owner_idObject

Returns the value of attribute owner_id.



11
12
13
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 11

def owner_id
  @owner_id
end

#preview_lengthObject

Returns the value of attribute preview_length.



11
12
13
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 11

def preview_length
  @preview_length
end

#preview_startObject

Returns the value of attribute preview_start.



11
12
13
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 11

def preview_start
  @preview_start
end

Class Method Details

.build_frame(owner_id, preview_start, preview_length, encryption_info, options = nil, id3_version: 3) ⇒ Id3v2Frame

builds the audio encryption frame

Parameters:

  • owner_id (String)

    the owner id

  • preview_start (Integer)

    the start frame of the preview

  • preview_length (Integer)

    the preview length in frames

  • encryption_info (String)

    encryption info bytes represented as a String (str.bytes)

  • options (Options::Options) (defaults to: nil)

    options to use

  • id3_version (Integer) (defaults to: 3)

    the id3 version to build the frame for

Returns:



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 23

def self.build_frame(owner_id, preview_start, preview_length, encryption_info, options = nil, id3_version: 3)
  supported?('AENC', id3_version, options)

  argument_not_nil(owner_id, 'owner_id')
  argument_not_nil(preview_start, 'preview_start')
  argument_not_nil(preview_length, 'preview_length')
  argument_not_nil(encryption_info, 'encryption_info')

  frame = new(frame_id(id3_version, options), 0, build_id3_flags(id3_version), '')
  frame.owner_id = owner_id
  frame.preview_start = preview_start
  frame.preview_length = preview_length
  frame.encryption_info = encryption_info
  frame
end

Instance Method Details

#content_to_bytesObject



47
48
49
50
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 47

def content_to_bytes
  merge(@owner_id, "\x00", Util::MathUtil.from_number(@preview_start, 4),
        Util::MathUtil.from_number(@preview_length, 4), @encryption_info)
end

#process_content(content) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/id3taginator/frames/encryption/aenc_audio_encryption.rb', line 39

def process_content(content)
  stream = StringIO.new(content)
  @owner_id = read_stream_until(stream, ZERO)
  @preview_start = Util::MathUtil.to_number(stream.read(2)&.bytes)
  @preview_length = Util::MathUtil.to_number(stream.read(2)&.bytes)
  @encryption_info = stream.read
end