ruby-ogg 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +8 -0
- data/Gemfile +4 -0
- data/README.rdoc +71 -0
- data/Rakefile +11 -0
- data/lib/ogg.rb +98 -6
- data/lib/ruby-ogg/version.rb +3 -0
- data/lib/vorbis.rb +0 -3
- data/ruby-ogg.gemspec +25 -0
- data/test/sudo_modprobe.ogg +0 -0
- data/test/tc_ogg.rb +41 -0
- data/test/tc_vorbis.rb +21 -0
- metadata +107 -46
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
= ruby-ogg
|
2
|
+
|
3
|
+
== Synopsis
|
4
|
+
|
5
|
+
ruby-ogg brings pure Ruby love to the Ogg container format. It provides
|
6
|
+
a nice abstraction which permits you to access packets from an Ogg bitstream
|
7
|
+
without worrying about strange things such as "captures" and "pages".
|
8
|
+
For more information about Ogg bitstreams check out the blog post at
|
9
|
+
http://dismaldenizen.wordpress.com/2010/08/20/the-ogg-container-format-explained
|
10
|
+
|
11
|
+
require 'ogg'
|
12
|
+
|
13
|
+
open("file.ogg", "rb") do |file|
|
14
|
+
dec = Ogg::Decoder.new(file) # Create a decoder for an Ogg file
|
15
|
+
packet = dec.read_packet # Direct access to packet, no pages!
|
16
|
+
# Do something with the packet...
|
17
|
+
end
|
18
|
+
|
19
|
+
== Vorbis
|
20
|
+
|
21
|
+
Vorbis is not the same as Ogg. Vorbis is an audio codec which is commonly
|
22
|
+
packed in the Ogg container format with the file extension ".ogg". Because
|
23
|
+
Vorbis has become so deeply associated with Ogg (and I'm such a nice guy), a
|
24
|
+
Vorbis metadata decoder is bundled with ruby-ogg. This provides
|
25
|
+
a good example of how to use ruby-ogg, and is also fully functional. See the
|
26
|
+
Vorbis::Info documentation for more information.
|
27
|
+
|
28
|
+
require 'vorbis'
|
29
|
+
|
30
|
+
Vorbis::Info.open('echoplex.ogg') do |info|
|
31
|
+
info.comments[:artist].first #=> "Nine Inch Nails"
|
32
|
+
info.comments[:title].first #=> "Echoplex"
|
33
|
+
info.sample_rate #=> 44100
|
34
|
+
end
|
35
|
+
|
36
|
+
== Installation
|
37
|
+
|
38
|
+
Add this line to your application's Gemfile:
|
39
|
+
|
40
|
+
gem 'ruby-ogg'
|
41
|
+
|
42
|
+
And then execute:
|
43
|
+
|
44
|
+
$ bundle
|
45
|
+
|
46
|
+
Or install it yourself as:
|
47
|
+
|
48
|
+
$ gem install ruby-ogg
|
49
|
+
|
50
|
+
== Requirements
|
51
|
+
|
52
|
+
* Ruby 1.8+
|
53
|
+
* RubyGems
|
54
|
+
|
55
|
+
== Features
|
56
|
+
|
57
|
+
* 100% pure Ruby
|
58
|
+
* Read Ogg bitstreams
|
59
|
+
* Read Vorbis metadata
|
60
|
+
* Optionally validate page integrity with CRCs
|
61
|
+
(eg <code>Ogg::Decoder.new(file, :verify_checksum => true)</code>)
|
62
|
+
|
63
|
+
== TODO
|
64
|
+
|
65
|
+
* Write Ogg bitstreams
|
66
|
+
* Write Vorbis metadata
|
67
|
+
|
68
|
+
== Links
|
69
|
+
|
70
|
+
* Bug reports: http://github.com/anibali/ruby-ogg/issues
|
71
|
+
* Documentation: http://rdoc.info/github/anibali/ruby-ogg/master/frames
|
data/Rakefile
ADDED
data/lib/ogg.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
$VERBOSE = false # Suppresses some BinData warnings.
|
2
2
|
require 'bindata'
|
3
3
|
|
4
4
|
require 'stringio'
|
@@ -32,10 +32,20 @@ module Ogg
|
|
32
32
|
# unnecessary. However, if you do need to read pages, that functionality is
|
33
33
|
# available via the read_page method.
|
34
34
|
class Decoder
|
35
|
+
# This property determines whether the integrity of pages should be checked
|
36
|
+
# using CRCs (a lot slower but more robust).
|
37
|
+
attr_accessor :verify_checksum
|
38
|
+
|
35
39
|
# Create a new Decoder from an IO which should be open for binary reading.
|
36
|
-
def initialize io
|
40
|
+
def initialize io, opts={}
|
37
41
|
@io = io
|
38
42
|
@packets = []
|
43
|
+
|
44
|
+
opts = {
|
45
|
+
:verify_checksum => false,
|
46
|
+
}.merge!(Hash[opts.map {|k, v| [k.to_s.downcase.to_sym, v]}])
|
47
|
+
|
48
|
+
@verify_checksum = opts[:verify_checksum]
|
39
49
|
end
|
40
50
|
|
41
51
|
# Moves the file cursor forward to the next potential page. You probably
|
@@ -63,7 +73,7 @@ module Ogg
|
|
63
73
|
begin
|
64
74
|
seek_to_page
|
65
75
|
page = Page.read @io
|
66
|
-
page = nil
|
76
|
+
page = nil if @verify_checksum and not page.correct_checksum?
|
67
77
|
break
|
68
78
|
rescue Exception => ex
|
69
79
|
# False alarm, keep looking...
|
@@ -147,11 +157,93 @@ module Ogg
|
|
147
157
|
array :segment_table, :type => :uint8, :initial_length => :page_segments
|
148
158
|
string :data, :read_length => lambda {segment_table.inject(0){|t,e| t+e}}
|
149
159
|
|
150
|
-
|
160
|
+
# Check page data against the header's CRC value.
|
161
|
+
def correct_checksum?
|
151
162
|
poly = 0x04c11db7
|
152
|
-
|
153
|
-
|
163
|
+
|
164
|
+
cs = checksum + 0
|
165
|
+
self.checksum = 0
|
166
|
+
|
167
|
+
raw = to_binary_s
|
168
|
+
|
169
|
+
crc_reg = 0;
|
170
|
+
|
171
|
+
raw.unpack('C*').each do |byte|
|
172
|
+
crc_reg = (crc_reg << 8) ^ CRC_LOOKUP[((crc_reg >> 24) & 0xff) ^ byte]
|
173
|
+
crc_reg %= 2**32
|
174
|
+
end
|
175
|
+
|
176
|
+
self.checksum = cs
|
177
|
+
|
178
|
+
return cs == crc_reg
|
154
179
|
end
|
180
|
+
|
181
|
+
# Cached CRC lookup table.
|
182
|
+
CRC_LOOKUP = [
|
183
|
+
0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,
|
184
|
+
0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
|
185
|
+
0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,
|
186
|
+
0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
|
187
|
+
0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,
|
188
|
+
0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
|
189
|
+
0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,
|
190
|
+
0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
|
191
|
+
0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,
|
192
|
+
0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
|
193
|
+
0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,
|
194
|
+
0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
|
195
|
+
0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,
|
196
|
+
0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
|
197
|
+
0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,
|
198
|
+
0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
|
199
|
+
0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,
|
200
|
+
0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
|
201
|
+
0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,
|
202
|
+
0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
|
203
|
+
0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,
|
204
|
+
0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
|
205
|
+
0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,
|
206
|
+
0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
|
207
|
+
0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,
|
208
|
+
0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
|
209
|
+
0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,
|
210
|
+
0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
|
211
|
+
0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,
|
212
|
+
0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
|
213
|
+
0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,
|
214
|
+
0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
|
215
|
+
0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,
|
216
|
+
0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
|
217
|
+
0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,
|
218
|
+
0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
|
219
|
+
0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,
|
220
|
+
0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
|
221
|
+
0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,
|
222
|
+
0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
|
223
|
+
0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,
|
224
|
+
0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
|
225
|
+
0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,
|
226
|
+
0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
|
227
|
+
0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,
|
228
|
+
0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
|
229
|
+
0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,
|
230
|
+
0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
|
231
|
+
0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,
|
232
|
+
0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
|
233
|
+
0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,
|
234
|
+
0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
|
235
|
+
0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,
|
236
|
+
0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
|
237
|
+
0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,
|
238
|
+
0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
|
239
|
+
0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,
|
240
|
+
0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
|
241
|
+
0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,
|
242
|
+
0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
|
243
|
+
0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,
|
244
|
+
0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
|
245
|
+
0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,
|
246
|
+
0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4].freeze
|
155
247
|
end
|
156
248
|
end
|
157
249
|
|
data/lib/vorbis.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'bindata'
|
3
2
|
|
4
3
|
module Vorbis
|
@@ -107,8 +106,6 @@ module Vorbis
|
|
107
106
|
# A BinData::BasePrimitive which represents a list of comments as per
|
108
107
|
# the Vorbis I comment header specification.
|
109
108
|
class Comments < BinData::BasePrimitive
|
110
|
-
register(self.name, self)
|
111
|
-
|
112
109
|
def read_and_return_value(io)
|
113
110
|
n_comments = read_uint32le(io)
|
114
111
|
comments = InsensitiveHash.new
|
data/ruby-ogg.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ruby-ogg/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ruby-ogg"
|
8
|
+
spec.version = Ogg::VERSION
|
9
|
+
spec.authors = ["Aiden Nibali"]
|
10
|
+
spec.email = ["dismal.denizen@gmail.com"]
|
11
|
+
spec.summary = %q{A pure Ruby library for reading Ogg bitstreams, with a bundled Vorbis metadata reader.}
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.homepage = "https://github.com/anibali/ruby-ogg"
|
14
|
+
|
15
|
+
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "yard"
|
23
|
+
|
24
|
+
spec.add_runtime_dependency "bindata", "~> 1.4"
|
25
|
+
end
|
Binary file
|
data/test/tc_ogg.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'ogg'
|
5
|
+
|
6
|
+
class OggTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@test_dir = File.dirname(File.expand_path(__FILE__))
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_read_page
|
12
|
+
dec = Ogg::Decoder.new(open(File.join(@test_dir, "sudo_modprobe.ogg")),
|
13
|
+
:verify_checksum => true)
|
14
|
+
# First page
|
15
|
+
page = dec.read_page
|
16
|
+
assert_equal 0, page.page_sequence_number
|
17
|
+
assert_equal 0, page.granule_position
|
18
|
+
assert_equal 30, page.data.size
|
19
|
+
assert_equal "\1vorbis", page.data[0..6]
|
20
|
+
# Second page
|
21
|
+
page = dec.read_page
|
22
|
+
assert_equal 1, page.page_sequence_number
|
23
|
+
assert_equal 18446744073709551615, page.granule_position
|
24
|
+
assert_equal 4335, page.data.size
|
25
|
+
assert_equal "\3vorbis", page.data[0..6]
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_read_packet
|
29
|
+
dec = Ogg::Decoder.new(open(File.join(@test_dir, "sudo_modprobe.ogg")),
|
30
|
+
:verify_checksum => true)
|
31
|
+
# First packet
|
32
|
+
packet = dec.read_packet
|
33
|
+
assert_equal 30, packet.size
|
34
|
+
assert_equal "\1vorbis", packet[0..6]
|
35
|
+
# Second packet
|
36
|
+
packet = dec.read_packet
|
37
|
+
assert_equal 173685, packet.size
|
38
|
+
assert_equal "\3vorbis", packet[0..6]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
data/test/tc_vorbis.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'vorbis'
|
5
|
+
|
6
|
+
class VorbisTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@test_dir = File.dirname(File.expand_path(__FILE__))
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_info_sudo_modprobe
|
12
|
+
Vorbis::Info.open(File.join(@test_dir, "sudo_modprobe.ogg")) do |info|
|
13
|
+
assert_equal ['http://linuxoutlaws.com'], info.comments['LICENSE']
|
14
|
+
assert_equal ['Sudo Modprobe (The Linux Outlaws Theme)'], info.comments['tItLe']
|
15
|
+
assert_equal ['The Linux Outlaws'], info.comments[:artist]
|
16
|
+
assert_equal(192000, info.nominal_bitrate)
|
17
|
+
assert_equal(44100, info.sample_rate)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
metadata
CHANGED
@@ -1,65 +1,126 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-ogg
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Aiden Nibali
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
date: 2014-09-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.3'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.3'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: yard
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
16
63
|
name: bindata
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.4'
|
17
70
|
type: :runtime
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
description:
|
26
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.4'
|
78
|
+
description: A pure Ruby library for reading Ogg bitstreams, with a bundled Vorbis
|
79
|
+
metadata reader.
|
80
|
+
email:
|
81
|
+
- dismal.denizen@gmail.com
|
27
82
|
executables: []
|
28
|
-
|
29
83
|
extensions: []
|
30
|
-
|
31
84
|
extra_rdoc_files: []
|
32
|
-
|
33
|
-
|
34
|
-
-
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- Gemfile
|
88
|
+
- README.rdoc
|
89
|
+
- Rakefile
|
35
90
|
- lib/ogg.rb
|
36
|
-
|
37
|
-
|
91
|
+
- lib/ruby-ogg/version.rb
|
92
|
+
- lib/vorbis.rb
|
93
|
+
- ruby-ogg.gemspec
|
94
|
+
- test/sudo_modprobe.ogg
|
95
|
+
- test/tc_ogg.rb
|
96
|
+
- test/tc_vorbis.rb
|
97
|
+
homepage: https://github.com/anibali/ruby-ogg
|
38
98
|
licenses: []
|
39
|
-
|
40
99
|
post_install_message:
|
41
100
|
rdoc_options: []
|
42
|
-
|
43
|
-
require_paths:
|
101
|
+
require_paths:
|
44
102
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
57
115
|
requirements: []
|
58
|
-
|
59
|
-
|
60
|
-
rubygems_version: 1.3.5
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 1.8.23
|
61
118
|
signing_key:
|
62
119
|
specification_version: 3
|
63
|
-
summary: A library for reading Ogg bitstreams
|
64
|
-
|
65
|
-
|
120
|
+
summary: A pure Ruby library for reading Ogg bitstreams, with a bundled Vorbis metadata
|
121
|
+
reader.
|
122
|
+
test_files:
|
123
|
+
- test/sudo_modprobe.ogg
|
124
|
+
- test/tc_ogg.rb
|
125
|
+
- test/tc_vorbis.rb
|
126
|
+
has_rdoc:
|