ruby-mp3info 0.8.1 → 0.8.2
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.
- checksums.yaml +4 -4
- data/History.txt +6 -1
- data/README.md +1 -1
- data/lib/mp3info.rb +33 -28
- data/test/test_ruby-mp3info.rb +16 -7
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce2fb0b472edc42655b9a42724e7b1cce5562251
|
4
|
+
data.tar.gz: b33e20ee08abbbf98fe6305ea2a2d034389459cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9dc4dd6b85ab4a3cda9f826ec5450b046d4a1e57b0bca72f7ca65aa337f532e8124a0491e3e374e74c2a027ed0bc6cb7cf44df2f0e20b0d48ec3923509ffabaf
|
7
|
+
data.tar.gz: aa3dc74cf05cc0b8359924814b75059c87853882099b89ed0932b5417791e955bdd4ecedd90c54b831176a076e13ee3855dcdec5a7a67d6d328c8d19c51d808d
|
data/History.txt
CHANGED
data/README.md
CHANGED
data/lib/mp3info.rb
CHANGED
@@ -17,7 +17,7 @@ end
|
|
17
17
|
|
18
18
|
class Mp3Info
|
19
19
|
|
20
|
-
VERSION = "0.8.
|
20
|
+
VERSION = "0.8.2"
|
21
21
|
|
22
22
|
LAYER = [ nil, 3, 2, 1]
|
23
23
|
BITRATE = {
|
@@ -484,9 +484,18 @@ class Mp3Info
|
|
484
484
|
@io.seek(@first_frame_pos, File::SEEK_SET)
|
485
485
|
loop do
|
486
486
|
head = @io.read(4).unpack("N").first
|
487
|
-
|
488
|
-
|
487
|
+
begin
|
488
|
+
frame = Mp3Info.get_frames_infos(head)
|
489
|
+
rescue Mp3InfoInternalError
|
490
|
+
begin
|
491
|
+
frame = find_next_frame
|
492
|
+
rescue Mp3InfoError
|
493
|
+
break
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
489
497
|
yield frame
|
498
|
+
@io.seek(frame[:size] -4, File::SEEK_CUR)
|
490
499
|
#puts "frame #{frame_count} len #{frame[:length]} br #{frame[:bitrate]} @io.pos #{@io.pos}"
|
491
500
|
break if @io.eof?
|
492
501
|
end
|
@@ -518,12 +527,22 @@ private
|
|
518
527
|
size = 144 * (bitrate*1000.0 / samplerate) + (padding ? 1 : 0)
|
519
528
|
end
|
520
529
|
size = size.to_i
|
530
|
+
channel_num = Mp3Info.bits(head, 7,6)
|
521
531
|
{ :layer => layer,
|
522
532
|
:bitrate => bitrate,
|
523
533
|
:samplerate => samplerate,
|
524
534
|
:mpeg_version => mpeg_version,
|
525
535
|
:padding => padding,
|
526
|
-
:size => size
|
536
|
+
:size => size,
|
537
|
+
:error_protection => head[16] == 0,
|
538
|
+
:private => head[8] == 0,
|
539
|
+
:mode_extension => Mp3Info.bits(head, 5, 4),
|
540
|
+
:copyright => head[3] == 1,
|
541
|
+
:original => head[2] == 1,
|
542
|
+
:emphasis => Mp3Info.bits(head, 1, 0),
|
543
|
+
:channel_num => channel_num,
|
544
|
+
:channel_mode => CHANNEL_MODE[channel_num]
|
545
|
+
}
|
527
546
|
end
|
528
547
|
|
529
548
|
### parses the id3 tags of the currently open @io
|
@@ -596,8 +615,7 @@ private
|
|
596
615
|
raise(Mp3InfoError, "end of file reached") if @io.eof?
|
597
616
|
head = 0xff000000 + (data.getbyte(0) << 16) + (data.getbyte(1) << 8) + data.getbyte(2)
|
598
617
|
begin
|
599
|
-
Mp3Info.get_frames_infos(head)
|
600
|
-
return head
|
618
|
+
return Mp3Info.get_frames_infos(head)
|
601
619
|
rescue Mp3InfoInternalError
|
602
620
|
@io.seek(-3, IO::SEEK_CUR)
|
603
621
|
end
|
@@ -629,23 +647,13 @@ private
|
|
629
647
|
|
630
648
|
found = false
|
631
649
|
|
632
|
-
head = nil
|
633
650
|
5.times do
|
634
|
-
|
651
|
+
@header = find_next_frame()
|
635
652
|
@first_frame_pos = @io.pos - 4
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
@bitrate = current_frame[:bitrate]
|
641
|
-
@samplerate = current_frame[:samplerate]
|
642
|
-
@header[:padding] = current_frame[:padding]
|
643
|
-
@header[:private] = head[8] == 0 ? true : false
|
644
|
-
@channel_mode = CHANNEL_MODE[@channel_num = Mp3Info.bits(head, 7,6)]
|
645
|
-
@header[:mode_extension] = Mp3Info.bits(head, 5,4)
|
646
|
-
@header[:copyright] = (head[3] == 1 ? true : false)
|
647
|
-
@header[:original] = (head[2] == 1 ? true : false)
|
648
|
-
@header[:emphasis] = Mp3Info.bits(head, 1,0)
|
653
|
+
[ :mpeg_version, :layer, :channel_mode,
|
654
|
+
:channel_num, :bitrate, :samplerate ].each do |var_name|
|
655
|
+
instance_variable_set("@#{var_name}", @header[var_name])
|
656
|
+
end
|
649
657
|
@vbr = false
|
650
658
|
found = true
|
651
659
|
break
|
@@ -683,13 +691,10 @@ private
|
|
683
691
|
stream_size = @io_size - (hastag1? ? TAG1_SIZE : 0) - (@tag2.io_position || 0)
|
684
692
|
@length = ((stream_size << 3)/1000.0)/@bitrate
|
685
693
|
# read the first 100 frames and decide if the mp3 is vbr and needs full scan
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
@bitrate, @length = frame_scan
|
691
|
-
end
|
692
|
-
rescue Mp3InfoInternalError
|
694
|
+
average_bitrate = frame_scan(100).first
|
695
|
+
if @bitrate != average_bitrate
|
696
|
+
@vbr = true
|
697
|
+
@bitrate, @length = frame_scan
|
693
698
|
end
|
694
699
|
end
|
695
700
|
end
|
data/test/test_ruby-mp3info.rb
CHANGED
@@ -526,13 +526,22 @@ class Mp3InfoTest < Test::Unit::TestCase
|
|
526
526
|
assert_equal("JStereo", mp3.channel_mode)
|
527
527
|
assert_equal(44100, mp3.samplerate)
|
528
528
|
assert_equal(0.1305625, mp3.length)
|
529
|
-
assert_equal({
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
529
|
+
assert_equal({
|
530
|
+
:layer=>3,
|
531
|
+
:bitrate=>128,
|
532
|
+
:samplerate=>44100,
|
533
|
+
:mpeg_version=>1,
|
534
|
+
:padding=>false,
|
535
|
+
:size=>417,
|
536
|
+
:error_protection=>false,
|
537
|
+
:private=>true,
|
538
|
+
:mode_extension=>2,
|
539
|
+
:copyright=>false,
|
540
|
+
:original=>true,
|
541
|
+
:emphasis=>0,
|
542
|
+
:channel_num=>1,
|
543
|
+
:channel_mode=>"JStereo"
|
544
|
+
}, mp3.header)
|
536
545
|
end
|
537
546
|
|
538
547
|
def load_string_io(filename = TEMP_FILE)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-mp3info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Pierronnet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '4.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: hoe
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '3.
|
33
|
+
version: '3.7'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '3.
|
40
|
+
version: '3.7'
|
41
41
|
description: ruby-mp3info read low-level informations and manipulate tags on mp3 files.
|
42
42
|
email:
|
43
43
|
- guillaume.pierronnet@gmail.com
|
@@ -46,6 +46,7 @@ extensions: []
|
|
46
46
|
extra_rdoc_files:
|
47
47
|
- History.txt
|
48
48
|
- Manifest.txt
|
49
|
+
- README.md
|
49
50
|
files:
|
50
51
|
- History.txt
|
51
52
|
- Manifest.txt
|
@@ -57,7 +58,8 @@ files:
|
|
57
58
|
- test/test_ruby-mp3info.rb
|
58
59
|
- .gemtest
|
59
60
|
homepage: http://github.com/moumar/ruby-mp3info
|
60
|
-
licenses:
|
61
|
+
licenses:
|
62
|
+
- MIT
|
61
63
|
metadata: {}
|
62
64
|
post_install_message:
|
63
65
|
rdoc_options:
|