ruby-ogg 0.0.1 → 0.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/.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:
|