ruby-mp3info 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.6.3 / 2008-03-28
2
+
3
+ * some internals modifications for the compatibility with ruby-audioinfo
4
+
1
5
  === 0.6.2 / 2008-03-02
2
6
 
3
7
  * better handling of frames:
data/Rakefile CHANGED
@@ -2,7 +2,8 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
- require './lib/mp3info.rb'
5
+ $:.unshift("./lib/")
6
+ require 'mp3info'
6
7
 
7
8
  Hoe.new('ruby-mp3info', Mp3Info::VERSION) do |p|
8
9
  p.rubyforge_name = 'ruby-mp3info'
data/lib/mp3info.rb CHANGED
@@ -1,9 +1,8 @@
1
- # $Id: mp3info.rb 71 2008-03-02 07:10:26Z moumar $
1
+ # $Id: mp3info.rb 74 2008-03-28 15:11:04Z moumar $
2
2
  # License:: Ruby
3
3
  # Author:: Guillaume Pierronnet (mailto:moumar_AT__rubyforge_DOT_org)
4
4
  # Website:: http://ruby-mp3info.rubyforge.org/
5
5
 
6
- require "delegate"
7
6
  require "fileutils"
8
7
  require "mp3info/extension_modules"
9
8
  require "mp3info/id3v2"
@@ -18,7 +17,7 @@ end
18
17
 
19
18
  class Mp3Info
20
19
 
21
- VERSION = "0.6.2"
20
+ VERSION = "0.6.3"
22
21
 
23
22
  LAYER = [ nil, 3, 2, 1]
24
23
  BITRATE = [
data/lib/mp3info/id3v2.rb CHANGED
@@ -1,6 +1,8 @@
1
- require "mp3info/extension_modules"
1
+ require "delegate"
2
2
  require "iconv"
3
3
 
4
+ require "mp3info/extension_modules"
5
+
4
6
  # This class is not intended to be used directly
5
7
  class ID3v2 < DelegateClass(Hash)
6
8
 
@@ -89,6 +91,7 @@ class ID3v2 < DelegateClass(Hash)
89
91
 
90
92
  include Mp3Info::HashKeys
91
93
 
94
+ # this is the position in the file where the tag really ends
92
95
  attr_reader :io_position
93
96
 
94
97
  # :+lang+: for writing comments
@@ -137,20 +140,29 @@ class ID3v2 < DelegateClass(Hash)
137
140
  ### gets id3v2 tag information from io object (must support #seek() method)
138
141
  def from_io(io)
139
142
  @io = io
143
+ original_pos = @io.pos
144
+ @io.extend(Mp3Info::Mp3FileMethods)
140
145
  version_maj, version_min, flags = @io.read(3).unpack("CCB4")
141
146
  @unsync, ext_header, experimental, footer = (0..3).collect { |i| flags[i].chr == '1' }
142
147
  raise("can't find version_maj ('#{version_maj}')") unless [2, 3, 4].include?(version_maj)
143
148
  @version_maj, @version_min = version_maj, version_min
144
149
  @valid = true
145
- tag2_len = @io.get_syncsafe
150
+ @tag_length = @io.get_syncsafe
146
151
  case @version_maj
147
152
  when 2
148
- read_id3v2_2_frames(tag2_len)
149
- when 3,4
153
+ read_id3v2_2_frames
154
+ when 3, 4
150
155
  # seek past extended header if present
151
156
  @io.seek(@io.get_syncsafe - 4, IO::SEEK_CUR) if ext_header
152
- read_id3v2_3_frames(tag2_len)
157
+ read_id3v2_3_frames
153
158
  end
159
+
160
+ @io.seek(original_pos + @tag_length, IO::SEEK_SET)
161
+
162
+ # skip padding zeros at the end of the tag
163
+ while @io.getc == 0; end
164
+
165
+ @io.seek(-1, IO::SEEK_CUR)
154
166
  @io_position = @io.pos
155
167
 
156
168
  @hash_orig = @hash.dup
@@ -241,9 +253,8 @@ class ID3v2 < DelegateClass(Hash)
241
253
  end
242
254
 
243
255
  ### reads id3 ver 2.3.x/2.4.x frames and adds the contents to @tag2 hash
244
- ### tag2_len (fixnum) = length of entire id3v2 data, as reported in header
245
256
  ### NOTE: the id3v2 header does not take padding zero's into consideration
246
- def read_id3v2_3_frames(tag2_len)
257
+ def read_id3v2_3_frames
247
258
  loop do # there are 2 ways to end the loop
248
259
  name = @io.read(4)
249
260
  if name[0] == 0 or name == "MP3e" #bug caused by old tagging application "mp3ext" ( http://www.mutschler.de/mp3ext/ )
@@ -293,14 +304,13 @@ class ID3v2 < DelegateClass(Hash)
293
304
  # else
294
305
  # end
295
306
  end
296
- break if @io.pos >= tag2_len # 2. reach length from header
307
+ break if @io.pos >= @tag_length # 2. reach length from header
297
308
  end
298
309
  end
299
310
 
300
311
  ### reads id3 ver 2.2.x frames and adds the contents to @tag2 hash
301
- ### tag2_len (fixnum) = length of entire id3v2 data, as reported in header
302
312
  ### NOTE: the id3v2 header does not take padding zero's into consideration
303
- def read_id3v2_2_frames(tag2_len)
313
+ def read_id3v2_2_frames
304
314
  loop do
305
315
  name = @io.read(3)
306
316
  if name[0] == 0
@@ -310,7 +320,7 @@ class ID3v2 < DelegateClass(Hash)
310
320
  else
311
321
  size = (@io.getc << 16) + (@io.getc << 8) + @io.getc
312
322
  add_value_to_tag2(name, size)
313
- break if @io.pos >= tag2_len
323
+ break if @io.pos >= @tag_length
314
324
  end
315
325
  end
316
326
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mp3info
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Pierronnet
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-03-02 00:00:00 +01:00
12
+ date: 2008-03-28 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.5.0
22
+ version: 1.5.1
23
23
  version:
24
24
  description: "* written in pure ruby * read low-level informations like bitrate, length, samplerate, etc... * read, write, remove id3v1 and id3v2 tags * only 2.3 version is supported for writings id3v2 tags == SYNOPSIS: a good exercise is to read the test.rb to understand how the library works deeper require \"mp3info\" # read and display infos & tags Mp3Info.open(\"myfile.mp3\") do |mp3info| puts mp3info end # read/write tag1 and tag2 with Mp3Info#tag attribute # when reading tag2 have priority over tag1 # when writing, each tag is written. Mp3Info.open(\"myfile.mp3\") do |mp3| puts mp3.tag.title puts mp3.tag.artist puts mp3.tag.album puts mp3.tag.tracknum mp3.tag.title = \"track title\" mp3.tag.artist = \"artist name\" end Mp3Info.open(\"myfile.mp3\") do |mp3| # you can access four letter v2 tags like this puts mp3.tag2.TIT2 mp3.tag2.TIT2 = \"new TIT2\" # or like that mp3.tag2[\"TIT2\"] # at this time, only COMM tag is processed after reading and before writing # according to ID3v2#options hash mp3.tag2.options[:lang] = \"FRE\" mp3.tag2.COMM = \"my comment in french, correctly handled when reading and writing\" end"
25
25
  email: moumar@rubyforge.org