ruby-ogginfo 0.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 ADDED
@@ -0,0 +1,12 @@
1
+ === 0.3 / 2008-03-15
2
+
3
+ * write support through "vorbiscomment" binary
4
+ * correct encoding handling
5
+
6
+ === 0.2 / 2005-07-11
7
+
8
+ * tag["key"] is accessible with tag.key
9
+
10
+ === 0.1 / 2004-06-20
11
+
12
+ * first public version
data/Manifest.txt ADDED
@@ -0,0 +1,6 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/ogginfo.rb
6
+ test/test_ruby-ogginfo.rb
data/README.txt ADDED
@@ -0,0 +1,35 @@
1
+ = ruby-ogginfo
2
+
3
+ http://ruby-ogginfo.rubyforge.org/
4
+
5
+ == DESCRIPTION:
6
+
7
+ ruby-ogginfo gives you access to low level information on ogg files
8
+ (bitrate, length, samplerate, encoder, etc... ), as well as tag.
9
+ It is written in pure ruby.
10
+
11
+ == FEATURES/PROBLEMS
12
+
13
+ * writing tags is not pure ruby yet, need to have "vorbiscomment"
14
+ command
15
+
16
+ == SYNOPSIS:
17
+
18
+ require "ogginfo"
19
+ OggInfo.open("toto.ogg") do |ogg|
20
+ puts ogg.bitrate
21
+ puts ogg.artist
22
+ puts ogg
23
+ end
24
+
25
+ == INSTALL:
26
+
27
+ sudo gem install ruby-ogginfo
28
+
29
+ == TODO:
30
+
31
+ * writing tags in pure-ruby
32
+
33
+ == LICENSE:
34
+
35
+ Ruby
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require 'lib/ogginfo.rb'
6
+
7
+ Hoe.new('ruby-ogginfo', OggInfo::VERSION) do |p|
8
+ p.rubyforge_name = 'ruby-ogginfo'
9
+ p.author = 'Guillaume Pierronnet'
10
+ p.email = 'moumar@rubyforge.org'
11
+ p.summary = 'ruby-ogginfo is a pure-ruby library that gives low level informations on ogg files'
12
+ p.description = p.paragraphs_of('README.txt', 3).first
13
+ p.url = p.paragraphs_of('README.txt', 1).first
14
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
15
+ p.remote_rdoc_dir = ''
16
+ end
17
+
18
+ # vim: syntax=Ruby
data/lib/ogginfo.rb ADDED
@@ -0,0 +1,145 @@
1
+ # $Id: ogginfo.rb 36 2008-03-15 01:01:51Z moumar $
2
+ #
3
+ # see http://www.xiph.org/ogg/vorbis/docs.html for documentation on vorbis format
4
+ # http://www.xiph.org/ogg/vorbis/doc/v-comment.html
5
+
6
+ require "iconv"
7
+
8
+ class Hash
9
+ ### lets you specify hash["key"] as hash.key
10
+ ### this came from CodingInRuby on RubyGarden
11
+ ### http://www.rubygarden.org/ruby?CodingInRuby
12
+ def method_missing(meth,*args)
13
+ if /=$/=~(meth=meth.id2name) then
14
+ self[meth[0...-1]] = (args.length<2 ? args[0] : args)
15
+ else
16
+ self[meth]
17
+ end
18
+ end
19
+ end
20
+
21
+ # Raised on any kind of error related to ruby-ogginfo
22
+ class OggInfoError < StandardError ; end
23
+
24
+ class OggInfo
25
+ VERSION = "0.3"
26
+ attr_reader :channels, :samplerate, :bitrate, :nominal_bitrate, :length
27
+
28
+ # +tag+ is a hash containing the vorbis tag like "Artist", "Title", and the like
29
+ attr_reader :tag
30
+
31
+ # create new instance of OggInfo, using +charset+ to convert tags to
32
+ def initialize(filename, charset = "iso-8859-1")
33
+ @file = File.new(filename, "rb")
34
+ if charset !~ /^utf-?8$/i
35
+ @ic = Iconv.new(charset, "utf8")
36
+ end
37
+
38
+ find_next_page
39
+ extract_infos
40
+ find_next_page
41
+ extract_tag(charset)
42
+ @saved_tag = @tag.dup
43
+ extract_end
44
+ @bitrate = @file.stat.size.to_f*8/@length
45
+ end
46
+
47
+ # "block version" of ::new()
48
+ def self.open(*args)
49
+ m = self.new(*args)
50
+ ret = nil
51
+ if block_given?
52
+ begin
53
+ ret = yield(m)
54
+ ensure
55
+ m.close
56
+ end
57
+ else
58
+ ret = m
59
+ end
60
+ ret
61
+ end
62
+
63
+ # write any tags to file
64
+ def close
65
+ @ic.close
66
+ @file.close if @file and not @file.closed?
67
+ if @tag != @saved_tag
68
+ cmd = %w{vorbiscomment -w}
69
+
70
+ @tag.each do |k,v|
71
+ cmd.concat(["-t", k.upcase+"="+v])
72
+ end
73
+ cmd << @file.path
74
+ system(*cmd)
75
+ end
76
+ end
77
+
78
+ # check the presence of a tag
79
+ def hastag?
80
+ !@tag.empty?
81
+ end
82
+
83
+ def to_s
84
+ "channels #{@channels} samplerate #{@samplerate} bitrate #{@nominal_bitrate} bitrate #{@bitrate} length #{@length} #{@tag.inspect}"
85
+ end
86
+
87
+ private
88
+ def find_next_page
89
+ header = 'OggS' # 0xf4 . 0x67 . 0x 67 . 0x53
90
+ bytes = @file.read(4)
91
+ bytes_read = 4
92
+
93
+ while header != bytes
94
+ #raise OggInfoError if bytes_read > 4096 or @file.eof? #bytes.nil?
95
+ raise OggInfoError if @file.eof? #bytes.nil?
96
+ bytes.slice!(0)
97
+ char = @file.read(1)
98
+ bytes_read += 1
99
+ bytes << char
100
+ end
101
+ end
102
+
103
+ def extract_infos
104
+ @file.seek(35, IO::SEEK_CUR) # seek after "vorbis"
105
+ @channels, @samplerate, up_br, @nominal_bitrate, down_br = @file.read(17).unpack("CV4")
106
+ if @nominal_bitrate == 0
107
+ if up == 2**32 - 1 or down == 2**32 - 1
108
+ @nominal_bitrate = 0
109
+ else
110
+ @nominal_bitrate = (up_br + down_br)/2
111
+ end
112
+ end
113
+ end
114
+
115
+ def extract_tag(charset)
116
+ @tag = {}
117
+ @file.seek(22, IO::SEEK_CUR)
118
+ segs = @file.read(1).unpack("C")[0]
119
+ @file.seek(segs + 7, IO::SEEK_CUR)
120
+ size = @file.read(4).unpack("V")[0]
121
+ @file.seek(size, IO::SEEK_CUR)
122
+ tag_size = @file.read(4).unpack("V")[0]
123
+
124
+ tag_size.times do |i|
125
+ size = @file.read(4).unpack("V")[0]
126
+ comment = @file.read(size)
127
+ if @ic
128
+ comment = @ic.iconv( com ) rescue comment
129
+ end
130
+ key, val = comment.split(/=/)
131
+ @tag[key.downcase] = val
132
+ end
133
+ end
134
+
135
+ def extract_end
136
+ begin #Errno::EINVAL
137
+ @file.seek(-5000, IO::SEEK_END) #FIXME size of seeking
138
+ find_next_page
139
+ pos = @file.read(6).unpack("x2 V")[0] #FIXME pos is int64
140
+ @length = pos.to_f / @samplerate
141
+ rescue Errno::EINVAL
142
+ @length = 0
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ $:.unshift("lib/")
4
+
5
+ require "test/unit"
6
+ require "ogginfo"
7
+ require "fileutils"
8
+ require "tempfile"
9
+
10
+ VALID_OGG = <<EOF
11
+ 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
49
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
50
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
51
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
52
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
53
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
54
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
55
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
56
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
57
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
58
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
59
+ AAAAAAAAAAAAAAAAgAAAgAAHAIAAC6HQkBUBQJwAgMFxLAsAABxJ0iwAAHAk
60
+ S9MAAMDSNFEEAABL00QRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
61
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMCAAwBAgAll
62
+ oNCQlQBAFACAQTE8DWBZAMsCaBpA0wCeB/A8gCgCAAEAAAUOAAABNmhKLA5Q
63
+ aMhKACAKAMCgKJZlWZ4HTdM0UYSmaZooQtM0TxShaZomihBFzzNNeKLnmSZM
64
+ UxRNE4iiaQoAAChwAAAIsEFTYnGAQkNWAgAhAQAGR7EsT/M8zxNF01RVaJrn
65
+ iaIoiqZpqio0zfNEURRN0zRVFZrmeaIoiqapqqoKTfM8URRF01RVVYXniaIo
66
+ mqZpqqrrwvNEURRN0zRV1XUhiqJomqapqqrrukAUTdM0VVVVXReIommapqq6
67
+ riwDUTRN01RV15VlYJqqqqqq67qyDFBNVVVV15VlgKq6quu6riwDVFV1XdeV
68
+ ZRnguq7ryrJs2wBc13Vl2bYFAAAcOAAABBhBJxlVFmGjCRcegEJDVgQAUQAA
69
+ gDFMKaaUYUxCKCE0ikkIKYRMSkqplVRBSCWlUioIqaRUSkalpZRSyiCUUlIq
70
+ FYRUSiqlAACwAwcAsAMLodCQlQBAHgAAQYhSjDHGnJRSKcacc05KqRRjzjkn
71
+ pWSMMeeck1IyxphzzkkpHXPOOeeklIw555xzUkrnnHPOOSmllM4555yUUkoI
72
+ nXNOSimlc845JwAAqMABACDARpHNCUaCCg1ZCQCkAgAYHMeyNE3TPE8UNUnS
73
+ NM/zPFE0TU2yNM3zPE8UTZPneZ4oiqJpqirP8zxRFEXTVFWuK4qmaZqqqqpk
74
+ WRRF0TRVVXVhmqapqqrqujBNUVRV1XVdyLJpqqrryjJs2zRV1XVlGaiqqsqu
75
+ LAPXVVXXlWUBAOAJDgBABTasjnBSNBZYaMhKACADAIAgBCGlFEJKKYSUUggp
76
+ pRASAAAw4AAAEGBCGSg0ZEUAECcAACAkpYJOSiWhlFJKKaWUUkoppZRSSiml
77
+ lFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSiml
78
+ lFJKKaWUUkoppZNSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSiml
79
+ lFJKKaWUUkoppZSSUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkkp
80
+ pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
81
+ pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
82
+ pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
83
+ pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
84
+ pZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkop
85
+ pZRSSimllAoA0I1wANB9MKEMFBqyEgBIBQAAjFGKMQipxVYhxJhzElprrUKI
86
+ MecktJRiz5hzEEppLbaeMccglJJai72UzklJrbUYeyodo5JSSzH23kspJaXY
87
+ Yuy9p5BCji3G2HvPMaUWW6ux915jSrHVGGPvvfcYY6ux1t577zG2VmuOBQBg
88
+ NjgAQCTYsDrCSdFYYKEhKwGAkAAAwhilGGPMOeecc05KyRhzzkEIIYQQSikZ
89
+ Y8w5CCGEEEIpJWPOOQchhFBCKKVkzDnoIIRQQiillM45Bx2EEEIJpZSSMecg
90
+ hBBCCaWUUjrnIIQQQiilhFRKKZ2DEEIoIYRSSkkphBBCCKGEUFIpKYUQQggh
91
+ hFBCSiWlEEIIIYQQSkilpJRSCCGEEEIIpZSUUgollBBCKKGkkkoppYQQSgih
92
+ pFRSKqmUEkIIJYSSSkoplVRKKCGEUgAAwIEDAECAEXSSUWURNppw4QEoNGQl
93
+ ABAFAAAZBx2UlhuAkHLUWocchBRbC5FDDFqMnXKMQUopZJAxxqSVkkLHGKTU
94
+ YkuhgxR7z7mV1AIAACAIAAgwAQQGCAq+EAJiDABAECIzREJhFSwwKIMGh3kA
95
+ 8AARIREAJCYo0i4uoMsAF3Rx14EQghCEIBYHUEACDk644Yk3POEGJ+gUlToQ
96
+ AAAAAIAFAHgAAEAogIiIZq7C4gIjQ2ODo8PjA0QAAAAAALAA4AMAAAkBIiKa
97
+ uQqLC4wMjQ2ODo8PkAAAQAABAAAAABBAAAICAgAAAAAAAQAAAAICT2dnUwAE
98
+ AAAAAAAAAADjoIphAgAAAIr86XUBAQA=
99
+ ====
100
+ EOF
101
+
102
+ class OggInfoTest < Test::Unit::TestCase
103
+
104
+ TEMP_FILE = File.join(Dir.tmpdir, "test_mp3info.ogg")
105
+
106
+ def setup
107
+ valid_ogg_file = VALID_OGG.unpack("m*").first
108
+ File.open(TEMP_FILE, "w") { |f| f.write(valid_ogg_file) }
109
+ end
110
+
111
+ def teardown
112
+ FileUtils.rm_f(TEMP_FILE)
113
+ end
114
+
115
+ def test_infos
116
+ OggInfo.open(TEMP_FILE) do |ogg|
117
+ assert_equal 64000, ogg.nominal_bitrate
118
+ assert_equal 2, ogg.channels
119
+ assert_equal 44100, ogg.samplerate
120
+ assert_equal 0, ogg.length
121
+ #average_bitrate
122
+ end
123
+ end
124
+
125
+ def test_length
126
+ generate_ogg
127
+ OggInfo.open("test.ogg") do |ogg|
128
+ assert_in_delta(17.0, ogg.length, 1)
129
+ assert_in_delta(67000.0, ogg.bitrate, 5000)
130
+ end
131
+ end
132
+
133
+ def test_tag_writing
134
+ generate_ogg
135
+ tag = {"title" => "mytitle", "artist" => "myartist" }
136
+ OggInfo.open("test.ogg") do |ogg|
137
+ tag.each { |k,v| ogg.tag[k] = v }
138
+ end
139
+
140
+ OggInfo.open("test.ogg") do |ogg|
141
+ assert_equal tag, ogg.tag
142
+ end
143
+ end
144
+
145
+ def generate_ogg
146
+ unless test(?f, "test.ogg")
147
+ system("dd if=/dev/urandom bs=1024 count=3000 | oggenc -q0 --raw -o test.ogg -") or
148
+ flunk("cannot generate \"test.ogg\", tests cannot be fully performed")
149
+ end
150
+ end
151
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-ogginfo
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.3"
5
+ platform: ruby
6
+ authors:
7
+ - Guillaume Pierronnet
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-03-15 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.5.1
23
+ version:
24
+ description: ruby-ogginfo gives you access to low level information on ogg files (bitrate, length, samplerate, encoder, etc... ), as well as tag. It is written in pure ruby.
25
+ email: moumar@rubyforge.org
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - History.txt
32
+ - Manifest.txt
33
+ - README.txt
34
+ files:
35
+ - History.txt
36
+ - Manifest.txt
37
+ - README.txt
38
+ - Rakefile
39
+ - lib/ogginfo.rb
40
+ - test/test_ruby-ogginfo.rb
41
+ has_rdoc: true
42
+ homepage: http://ruby-ogginfo.rubyforge.org/
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --main
46
+ - README.txt
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
61
+ requirements: []
62
+
63
+ rubyforge_project: ruby-ogginfo
64
+ rubygems_version: 1.0.1
65
+ signing_key:
66
+ specification_version: 2
67
+ summary: ruby-ogginfo is a pure-ruby library that gives low level informations on ogg files
68
+ test_files:
69
+ - test/test_ruby-ogginfo.rb