ruby-mp3info 0.6.11 → 0.6.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/History.txt +4 -0
  2. data/lib/mp3info.rb +7 -12
  3. metadata +3 -3
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 0.6.12 / 2009-02-23
2
+
3
+ * fixed bug when @tag2["TLEN"] == 0
4
+
1
5
  === 0.6.11 / 2009-01-27
2
6
 
3
7
  * the library doesn't raise an ID3v2Error anymore when a id3v2 tag size is incorrect, but just output
data/lib/mp3info.rb CHANGED
@@ -18,7 +18,7 @@ end
18
18
 
19
19
  class Mp3Info
20
20
 
21
- VERSION = "0.6.11"
21
+ VERSION = "0.6.12"
22
22
 
23
23
  LAYER = [ nil, 3, 2, 1]
24
24
  BITRATE = {
@@ -301,33 +301,28 @@ class Mp3Info
301
301
  samples_per_frame = SAMPLES_PER_FRAME[@layer][@mpeg_version]
302
302
  @length = frame_count * samples_per_frame / Float(@samplerate)
303
303
 
304
- @bitrate = (((stream_size/frame_count)*@samplerate)/144) >> 10
304
+ @bitrate = (((stream_size/frame_count)*@samplerate)/144) / 1024
305
305
  @vbr = true
306
306
  else
307
307
  # for cbr, calculate duration with the given bitrate
308
308
  stream_size = @file.stat.size - (hastag1? ? TAG1_SIZE : 0) - (@tag2.io_position || 0)
309
309
  @length = ((stream_size << 3)/1000.0)/@bitrate
310
+ full_scan_occured = false
310
311
  # read the first 100 frames and decide if the mp3 is vbr and needs full scan
311
312
  begin
312
313
  bitrate, length = frame_scan(100)
313
314
  if @bitrate != bitrate
314
315
  @vbr = true
315
316
  @bitrate, @length = frame_scan
317
+ full_scan_occured = true
316
318
  end
317
319
  rescue Mp3InfoInternalError
318
320
  end
319
- if @tag2["TLEN"]
321
+ if (tlen = @tag2["TLEN"]) && !full_scan_occured
320
322
  # but if another duration is given and it isn't close (within 5%)
321
323
  # assume the mp3 is vbr and go with the given duration
322
- tlen = (@tag2["TLEN"].is_a?(Array) ? @tag2["TLEN"].last : @tag2["TLEN"]).to_i/1000
323
- percent_diff = ((@length.to_i-tlen)/tlen.to_f)
324
- if percent_diff.abs > 0.05
325
- # without the xing header, this is the best guess without reading
326
- # every single frame
327
- @vbr = true
328
- @length = @tag2["TLEN"].to_i/1000
329
- @bitrate = (stream_size / @bitrate) >> 10
330
- end
324
+ @length = (tlen.is_a?(Array) ? tlen.last : tlen).to_i/1000
325
+ @bitrate = (stream_size / @bitrate) / 1024
331
326
  end
332
327
  end
333
328
  ensure
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.11
4
+ version: 0.6.12
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: 2009-01-27 00:00:00 +01:00
12
+ date: 2009-02-23 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.7.0
23
+ version: 1.8.3
24
24
  version:
25
25
  description: "* written in pure ruby * read low-level informations like bitrate, length, samplerate, etc... * read, write, remove id3v1 and id3v2 tags * correctly read VBR files (with or without Xing header) * 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"
26
26
  email: moumar@rubyforge.org